OpenFOAM su server Linux, lavorando da Windows: SSH, FileZilla, PowerShell, log e ParaView client/server
Questa guida è il manuale operativo del percorso Imparare OpenFOAM 14 per chi deve usare OpenFOAM installato su un server Linux lavorando quotidianamente dal proprio PC Windows. È indipendente dal server e dall’utente: gli esempi usano OpenFOAM Foundation 14, ParaView 5.13.2, Windows 10/11 e un server Linux raggiungibile in SSH/SFTP.
La guida è disponibile anche in PDF, da stampare o tenere accanto al terminale:
Programmi usati sul PC Windows: FileZilla Client, Notepad++, klogg, ParaView e il client SSH integrato in Windows (come attivarlo e usarlo).
Guida operativa indipendente dal server e dall’utente
Edizione: 16 ottobre 2026 · Esempi: OpenFOAM Foundation 14, ParaView 5.13.2, Windows 10/11, Linux con SSH/SFTP.
Obiettivo. Preparare e modificare i casi su Windows, trasferirli con FileZilla, eseguire soltanto i comandi necessari da PowerShell, scaricare e studiare i log su Windows e visualizzare i risultati con ParaView Windows collegato al pvserver Linux. Non occorre installare OpenFOAM su Windows per questo flusso.
1. Architettura: che cosa si fa e dove

| Operazione | Windows | Server Linux |
|---|---|---|
Modifica dei dizionari system/, constant/, 0/ | Notepad++ o VS Code | Conserva la copia eseguita |
| Trasferimento casi, script e log | FileZilla, protocollo SFTP | Servizio SSH, cartelle dei casi |
| Avvio mesh, controlli e simulazione | PowerShell → SSH | OpenFOAM, CPU/RAM e disco |
| Monitoraggio del calcolo | PowerShell per comandi, FileZilla per copia log | tail, grep, log in scrittura |
| Analisi dei log | Notepad++, klogg, foglio di calcolo o Python | Facoltative estrazioni testuali |
| Visualizzazione CFD | ParaView GUI | pvserver, lettura dei risultati |
Tre nomi da sostituire negli esempi: UTENTE è l’account Linux, SERVER è il nome DNS/IP raggiungibile e mioCaso è la cartella del caso. Tutto ciò che segue presuppone l’accesso SSH autorizzato, normalmente sulla porta 22. Per una porta SSH diversa si usano ssh -p PORTA e la porta corrispondente in FileZilla.
Approfondimento · Perché lavorare sul server e non installare OpenFOAM su Windows
OpenFOAM Foundation è sviluppato e distribuito per Linux. Su Windows esistono strade indirette (WSL2 con Ubuntu, container Docker, macchine virtuali), utili per studiare su un portatile, ma il server resta il posto giusto per il calcolo: più core e più RAM, dischi dimensionati per le cartelle dei tempi, possibilità di lasciare un calcolo acceso per ore o giorni senza tenere acceso il PC.
Il flusso descritto qui separa nettamente i ruoli. Su Windows restano gli strumenti grafici e la copia di lavoro dei file di configurazione; sul server stanno la copia eseguita del caso, i risultati e i log. Tre canali li collegano, tutti cifrati e tutti basati su SSH:
- SFTP (porta SSH, di solito 22): trasferimento di file, usato da FileZilla;
- SSH interattivo (stessa porta): un terminale Linux dentro PowerShell;
- tunnel SSH (port forwarding locale): porta il traffico di ParaView da
localhost:11111di Windows alpvserverdel server senza aprire porte verso la rete.
Un solo servizio da autorizzare (SSH) e un solo segreto da custodire (password o chiave): è la configurazione che gli amministratori di sistema preferiscono, ed è il motivo per cui la guida non usa FTP in chiaro, desktop remoti o porte di ParaView esposte.
2. Preparazione una tantum del PC Windows
- Installare FileZilla Client, non FileZilla Server, da https://filezilla-project.org/ .
- Installare Notepad++ da https://notepad-plus-plus.org/ . In alternativa VS Code per navigazione di più file.
- Installare ParaView per Windows, preferibilmente della stessa versione del
pvserverLinux (esempio 5.13.2): https://www.paraview.org/download/ . Evitare di mescolare client e server di versioni diverse. - Verificare il client OpenSSH: aprire PowerShell e digitare
ssh -V. Se assente, attivare la funzionalità facoltativa Client OpenSSH di Windows. Non serve installare Server OpenSSH sul PC. - Facoltativo ma utile: klogg, visualizzatore di grandi file di log, da https://github.com/variar/klogg .
Crea, per esempio, C:\CFD\casi\mioCaso e C:\CFD\log\mioCaso. La prima è la copia di lavoro dei file di configurazione; la seconda serve a conservare le copie dei log scaricati. Scegli un solo punto di origine delle modifiche per evitare copie divergenti.
Approfondimento · Attivare il client OpenSSH da riga di comando
Su Windows 10 (dalla versione 1809) e su Windows 11 il client OpenSSH è una funzionalità facoltativa normalmente già presente. Dall’interfaccia: Impostazioni → App → Funzionalità facoltative → Aggiungi funzionalità → Client OpenSSH. Da PowerShell aperto come amministratore:
# stato delle funzionalità OpenSSH
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
# installazione del solo client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# verifica (nuova finestra PowerShell)
ssh -V
Se Get-WindowsCapability riporta State : Installed per OpenSSH.Client, non c’è altro da fare. Il server OpenSSH di Windows non serve: il PC fa solo da client.
Approfondimento · Accesso con chiave SSH invece della password
Con una coppia di chiavi non si digita la password a ogni connessione, e FileZilla e PowerShell usano la stessa identità. Si genera la chiave sul PC (la parte privata non lascia mai Windows) e si copia sul server soltanto la parte pubblica. Prima di farlo, verificare che l’amministratore consenta l’autenticazione a chiave.
# PowerShell: genera la coppia di chiavi (Invio per il percorso proposto,
# poi una passphrase per proteggere la chiave privata)
ssh-keygen -t ed25519
# Windows non ha ssh-copy-id: si accoda la chiave pubblica con un comando unico
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh UTENTE@SERVER "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
# prova: ora la connessione chiede la passphrase della chiave, non la password
ssh UTENTE@SERVER
In FileZilla, nel Site Manager, scegliere Logon Type: Key file e indicare C:\Users\NOME\.ssh\id_ed25519: FileZilla propone di convertirla nel proprio formato .ppk e la usa da quel momento. I permessi 700 sulla cartella ~/.ssh e 600 su authorized_keys sono obbligatori: con permessi più larghi il server SSH ignora la chiave e torna a chiedere la password.
Approfondimento · Un file di configurazione SSH per non riscrivere tutto ogni volta
Il client OpenSSH di Windows legge C:\Users\NOME\.ssh\config (file di testo senza estensione). Un alias raccoglie host, utente, porta, chiave e anche il tunnel per ParaView:
Host cfd
HostName SERVER
User UTENTE
Port 22
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host cfd-paraview
HostName SERVER
User UTENTE
Port 22
IdentityFile ~/.ssh/id_ed25519
LocalForward 11111 127.0.0.1:11111
ServerAliveInterval 60
Da quel momento ssh cfd apre il terminale e ssh cfd-paraview apre il terminale con il tunnel della sezione 9. ServerAliveInterval 60 invia un segnale ogni minuto e riduce le disconnessioni dovute a router o firewall che chiudono le sessioni inattive.
3. FileZilla: collegarsi in SFTP e trasferire i file

- FileZilla → File → Site Manager (Gestore siti) → New site.
- Protocol:
SFTP - SSH File Transfer Protocol(non FTP in chiaro). - Host:
SERVER. Port:22salvo diversa configurazione. - Logon Type: chiedere la password (Interactive / Ask for password, secondo versione) oppure Key file se è stata configurata un’autenticazione a chiave. User:
UTENTE. - Premere Connect. Alla prima connessione confrontare l’impronta digitale della chiave host SSH con quella fornita dall’amministratore; non accettare automaticamente un’impronta sconosciuta.
- Nel pannello sinistro aprire
C:\CFD\casi\mioCaso, nel destro raggiungere/home/UTENTE/cases/mioCaso(o il percorso effettivo della propria area di lavoro). - Trascinare da sinistra a destra solo i file da pubblicare sul server; da destra a sinistra i log da analizzare. Controllare le schede Failed transfers e Successful transfers.
Attenzione alla direzione: il caricamento sovrascrive un file del server e il download può sovrascrivere la copia locale. Fare una copia dei dizionari prima di cambiamenti sostanziali; quando FileZilla segnala conflitti, verificare data e dimensione prima di sostituire. Un file che è ancora in scrittura può essere scaricato come fotografia temporanea, non come log definitivo.
Organizzazione consigliata del caso:
mioCaso/
├── 0/ # condizioni iniziali e al contorno
├── constant/ # proprietà e mesh
├── system/ # controlDict, fvSchemes, fvSolution...
├── Allrun # eventuale script di esecuzione
└── log.* # prodotti da utility e solver
Non trasferire automaticamente grandi directory dei tempi (0.1/, 0.2/, …), processor*/ o l’intero postProcessing/ se l’obiettivo è lavorare in client-server: ParaView leggerà i dati direttamente sul server. FileZilla può impostare cartelle locali e remote predefinite nelle opzioni avanzate del sito.
Approfondimento · Verificare l’impronta della chiave host
L’impronta (fingerprint) identifica il server: se coincide con quella attesa, si sta parlando con il server giusto e non con un intermediario. L’amministratore la ottiene sul server con:
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
# esempio di uscita:
# 256 SHA256:Xy3k...q8M root@server (ED25519)
La stessa impronta compare nella finestra di FileZilla e alla prima connessione di ssh da PowerShell. Una volta accettata, Windows la registra in C:\Users\NOME\.ssh\known_hosts e FileZilla nella propria configurazione. Se in seguito compare l’avviso che la chiave host è cambiata, fermarsi e chiedere all’amministratore: può trattarsi di una reinstallazione del server, ma anche di un tentativo di intercettazione.
Approfondimento · SFTP non converte i fine riga
FileZilla ha un’impostazione Transfer type (Auto/ASCII/Binary), ma la conversione dei fine riga riguarda soltanto l’FTP. In SFTP i file viaggiano sempre byte per byte: un file salvato con terminazioni Windows (CRLF) arriva sul server con CRLF. Per questo i fine riga Unix (LF) vanno impostati nell’editor, come spiega la sezione 4, e non ci si può affidare al programma di trasferimento.
Approfondimento · Alternative da riga di comando: scp e archivi tar
Il client OpenSSH di Windows include anche scp, utile per trasferimenti ripetitivi o da script. Da PowerShell, nella cartella C:\CFD\casi:
# carica l'intero caso (solo configurazione, cartella piccola)
scp -r .\mioCaso UTENTE@SERVER:~/cases/
# carica un solo dizionario modificato
scp .\mioCaso\system\controlDict UTENTE@SERVER:~/cases/mioCaso/system/
# scarica un log nella cartella dei log
scp UTENTE@SERVER:~/cases/mioCaso/log.foamRun C:\CFD\log\mioCaso\
Quando servono molti file piccoli (per esempio i dati di postProcessing/ o tutti i log), conviene raccoglierli prima in un archivio sul server e scaricare un solo file:
cd ~/cases/mioCaso
tar czf ~/mioCaso_log_post.tgz log.* postProcessing/
ls -lh ~/mioCaso_log_post.tgz
Windows 10/11 include tar e apre l’archivio con tar xzf mioCaso_log_post.tgz da PowerShell.
4. Notepad++: scrivere dict e script Linux senza problemi

I file OpenFOAM sono generalmente testo semplice, anche se non hanno estensione. Notepad++ è pratico per controlDict, fvSchemes, fvSolution, blockMeshDict, file di campo in 0/ e script Allrun/Allclean.
- Impostare Encoding → UTF-8 senza BOM; evitare UTF-16 e UTF-8 con BOM per script e file di configurazione.
- Impostare Edit → EOL Conversion → Unix (LF), soprattutto per
Allrune script.sh. In Settings → Preferences → New Document, scegliere in anticipo formato Unix e codifica UTF-8. - Usare Language → C/C++ per una colorazione indicativa dei dizionari, oppure Shell per gli script; non è una validazione del formato OpenFOAM.
- Conservare maiuscole/minuscole dei nomi: Linux distingue
controlDictdacontroldict. Non aggiungere.txtautomaticamente a file comefvSolution. - Non modificare i dizionari sul server mentre una simulazione li usa, se non si conoscono le conseguenze: preparare una revisione, trasferirla e poi rilanciare in modo controllato.
Esempio di modifica in system/controlDict:
application foamRun;
startFrom startTime;
startTime 0;
endTime 100;
deltaT 1;
writeControl timeStep;
writeInterval 10;
Il contenuto è solo illustrativo: non sostituire in blocco il controlDict di un caso reale. In OpenFOAM 14 l’eseguibile foamRun usa un modulo di solver scelto in base alla configurazione del caso: per questo occorre leggere i dict esistenti.
Errore classico: ./Allrun: /bin/sh^M: bad interpreter. Significa quasi sempre che lo script è stato salvato con terminazioni Windows CRLF; convertirlo in LF su Windows e ricaricarlo. In caso di dubbio verificare con file Allrun sul server.
Approfondimento · Dove si sceglie il solver in OpenFOAM 14
Dalla versione 11 della Foundation i singoli eseguibili come icoFoam o simpleFoam sono stati sostituiti da foamRun, che carica un modulo di solver. Il modulo si indica con la voce solver in system/controlDict:
application foamRun;
solver incompressibleFluid;
Per questo l’estratto della guida va letto come un frammento: in un caso reale accanto a application c’è la voce solver, e le altre voci (endTime, deltaT, writeControl) hanno valori legati alla fisica del caso. Il significato di ciascuna voce è spiegato in Parte 4: controlDict e controllo della simulazione. Per leggere il valore attuale senza aprire il file:
foamDictionary -entry solver system/controlDict
foamDictionary -entry endTime system/controlDict
Approfondimento · Vedere e correggere CRLF, BOM e shebang
In Notepad++ View → Show Symbol → Show All Characters mostra i terminatori: CR LF indica Windows, LF indica Unix. La barra di stato riporta sempre il formato corrente (Windows (CR LF) o Unix (LF)) e la codifica.
Sul server la diagnosi e la correzione sono immediate:
file Allrun
# Allrun: POSIX shell script, ASCII text, with CRLF line terminators <- da correggere
# Allrun: POSIX shell script, ASCII text <- corretto
sed -i 's/\r$//' Allrun # rimuove i CR (equivalente di dos2unix)
head -c 3 Allrun | od -c # se compare 357 273 277 il file ha un BOM UTF-8
La prima riga di uno script deve essere esattamente #!/bin/sh (o #!/bin/bash), senza spazi tra # e ! e senza BOM davanti: è la riga che dice al sistema quale interprete usare. Gli script dei tutorial Foundation iniziano con #!/bin/sh seguito da cd ${0%/*} || exit 1, che porta lo script nella propria cartella qualunque sia la directory da cui viene lanciato.
Approfondimento · Maiuscole, minuscole e nomi di file tra Windows e Linux
Il file system di Windows non distingue maiuscole e minuscole, quello di Linux sì. Su Windows non possono coesistere U e u nella stessa cartella; su Linux sono due file diversi, e OpenFOAM cerca esattamente 0/U, 0/p, system/fvSchemes. Se un file arriva sul server come fvschemes o fvSchemes.txt, l’errore sarà del tipo cannot find file "system/fvSchemes". Controllare con ls -l system/ dopo ogni caricamento, e disattivare in Esplora file l’opzione che nasconde le estensioni note, così un .txt aggiunto per sbaglio resta visibile.
5. PowerShell: entrare su Linux e orientarsi
PowerShell funge da terminale di accesso. Dopo il comando ssh, il prompt appartiene alla shell Linux del server: i comandi successivi sono Linux, non PowerShell.
# Da Windows PowerShell:
ssh UTENTE@SERVER
# Per SSH su porta diversa dalla 22:
ssh -p 2222 UTENTE@SERVER
# Una volta dentro Linux:
whoami # account corrente
pwd # directory corrente
ls -lh # elenco leggibile, dimensioni
ls -la # include file nascosti
cd ~/cases # cartella dei casi
cd mioCaso # entra nel caso
cd .. # torna alla directory superiore
cd ~ # torna alla propria home
mkdir -p ~/cases/mioCaso # crea una cartella se assente
find . -maxdepth 2 -type f # elenco file fino a 2 livelli
exit # chiude SSH, torna a PowerShell
Se foamVersion non viene trovato, la shell potrebbe non avere caricato l’ambiente OpenFOAM. Per un’installazione Foundation in /opt/OpenFOAM-14:
source /opt/OpenFOAM-14/etc/bashrc
foamVersion
command -v blockMesh
command -v foamRun
Il percorso è un esempio, non una garanzia: dipende dall’installazione. Alcuni server configurano già l’ambiente al login. Per le verifiche essenziali, usare command -v e --help dei programmi disponibili.
Approfondimento · Dove si trova l’ambiente OpenFOAM e come caricarlo a ogni login
I pacchetti Ubuntu della Foundation installano OpenFOAM 14 in /opt/openfoam14 (tutto minuscolo, senza trattino); una compilazione da sorgente si trova di solito in $HOME/OpenFOAM/OpenFOAM-14; altri server usano percorsi propri o i module dell’ambiente di calcolo. Per trovare il file giusto:
ls -d /opt/openfoam* /opt/OpenFOAM* $HOME/OpenFOAM/OpenFOAM-* 2>/dev/null
module avail 2>&1 | grep -i foam # solo se il server usa Environment Modules
Se l’ambiente non viene caricato automaticamente, si aggiunge una riga in fondo a ~/.bashrc (una sola volta), dopo averla provata a mano:
echo 'source /opt/openfoam14/etc/bashrc' >> ~/.bashrc
# nuova connessione SSH, poi:
foamVersion # deve stampare la versione 14
Non aggiungere la riga se l’amministratore ha già previsto un altro meccanismo: caricare due volte ambienti diversi produce PATH incoerenti e errori difficili da leggere.
Approfondimento · PowerShell e bash non sono la stessa cosa
Nella stessa finestra convivono due mondi. Prima di ssh valgono i comandi di PowerShell e i percorsi Windows (C:\CFD, separatore \); dopo il login valgono bash e i percorsi Linux (/home/UTENTE, separatore /, ~ per la home). Alcuni nomi esistono in entrambi (ls, cd, pwd sono alias in PowerShell) ma si comportano diversamente: le opzioni -lh funzionano solo nel ls di Linux.
- Incollare: nel terminale di Windows si incolla con il clic destro o con
Ctrl+V(Windows Terminal); per copiare basta selezionare con il mouse. - Interrompere:
Ctrl+Cinterrompe il comando Linux in esecuzione, non la connessione. - Leggere un file lungo:
less log.foamRun(frecce per scorrere,/testoper cercare,qper uscire);head -n 50etail -n 50per l’inizio e la fine. - Completamento: il tasto Tab completa nomi di file e comandi; due Tab elencano le possibilità.
- Storico: freccia su per richiamare i comandi precedenti,
history | tail -n 30per vederli.
6. Avviare un caso senza imparare tutta la shell
Prima esecuzione e controllo
cd ~/cases/mioCaso
ls -l Allrun system/controlDict
sed -n '1,100p' Allrun # leggere PRIMA lo script
blockMesh 2>&1 | tee log.blockMesh
checkMesh 2>&1 | tee log.checkMesh
Eseguire blockMesh solo se il caso usa blockMeshDict e la mesh va generata con questo strumento. I comandi del file Allrun potrebbero già generare la mesh: evitare duplicazioni; seguire l’ordine definito dal caso. checkMesh esamina la mesh esistente.
Avvio dello script batch Allrun
cd ~/cases/mioCaso
chmod u+x Allrun # se manca il permesso di esecuzione
./Allrun 2>&1 | tee log.Allrun # mostra a video e salva su file
Non dare per scontato che ogni caso abbia Allrun: lo script è una convenzione, non una caratteristica obbligatoria. Alcuni casi prevedono un diverso script o l’avvio diretto di foamRun.
Approfondimento · Che cosa significano 2>&1, tee e le funzioni dei tutorial
2>&1 unisce l’uscita degli errori (stream 2) a quella normale (stream 1): senza, i messaggi FOAM FATAL ERROR comparirebbero a video ma non finirebbero nel log. tee duplica il flusso: lo mostra nel terminale e lo scrive nel file indicato.
Gli Allrun dei tutorial Foundation usano spesso le funzioni di $WM_PROJECT_DIR/bin/tools/RunFunctions:
#!/bin/sh
cd ${0%/*} || exit 1
. $WM_PROJECT_DIR/bin/tools/RunFunctions
runApplication blockMesh # scrive log.blockMesh
runApplication foamRun # scrive log.foamRun
runApplication crea da sé log.<programma> e si rifiuta di rieseguire un passo se il log esiste già, stampando un messaggio del tipo blockMesh already run on ... remove log file 'log.blockMesh' to re-run. È una protezione, non un errore: per rifare da capo si usa ./Allclean (se presente) oppure si rimuovono i log interessati. Leggere lo script prima di eseguirlo serve proprio a sapere quali log produrrà e dove guardare.
Non perdere il calcolo se la rete cade: tmux (consigliato)
tmux new -s cfd_mioCaso
cd ~/cases/mioCaso
./Allrun 2>&1 | tee log.Allrun
Per lasciare il lavoro attivo: premere Ctrl+B, rilasciare, poi D (detach). Per rientrare in un’altra sessione SSH:
tmux ls
tmux attach -t cfd_mioCaso
Ctrl+C interrompe il comando attivo: non va usato per scollegarsi. exit dalla shell ordinaria può chiudere la sessione: prima fare il detach di tmux. Se lo script non esiste, avviare l’eseguibile appropriato (foamRun in molti casi Foundation 14) soltanto dopo aver controllato la configurazione.
Opzione senza tmux, meno interattiva: nohup ./Allrun > log.Allrun 2>&1 < /dev/null &; si usa solo se tmux non è disponibile e se lo script è compatibile con un avvio non interattivo.
Approfondimento · I comandi tmux che servono davvero
| Azione | Comando o tasti |
|---|---|
| Nuova sessione con nome | tmux new -s cfd_mioCaso |
| Staccarsi lasciando tutto acceso | Ctrl+B poi D |
| Elenco delle sessioni | tmux ls |
| Rientrare | tmux attach -t cfd_mioCaso |
| Scorrere l’output passato | Ctrl+B poi [, frecce o PagSu/PagGiù, q per uscire |
| Seconda finestra nella stessa sessione | Ctrl+B poi C; passare da una all’altra con Ctrl+B poi N |
| Chiudere una sessione finita | exit dentro la sessione, oppure tmux kill-session -t cfd_mioCaso |
Una sessione tmux vive sul server: sopravvive alla chiusura di PowerShell, allo spegnimento del PC e alla caduta della rete. Non sopravvive al riavvio del server. Se tmux non è installato, screen offre la stessa funzione (screen -S nome, distacco con Ctrl+A poi D, rientro con screen -r nome).
Approfondimento · Calcolo in parallelo e convivenza con gli altri utenti
Un server è di solito condiviso. Prima di lanciare un calcolo pesante conviene sapere quante CPU e quanta memoria ci sono e quanto sono occupate:
nproc # numero di core disponibili
free -h # memoria totale e libera
uptime # carico medio negli ultimi 1, 5, 15 minuti
top # processi attivi (q per uscire); htop se installato
Il flusso parallelo di OpenFOAM, trattato nel caso 05: calcolo parallelo con MPI, si avvia così, con il numero di sottodomini scritto in system/decomposeParDict:
decomposePar 2>&1 | tee log.decomposePar
mpirun -np 4 foamRun -parallel 2>&1 | tee log.foamRun
reconstructPar 2>&1 | tee log.reconstructPar
Il valore di -np deve coincidere con numberOfSubdomains. Rispettare le regole del server: alcuni impongono un numero massimo di core per utente o l’uso di un gestore di code (per esempio Slurm, con sbatch); in quel caso il calcolo non si lancia in tmux ma con lo script di coda indicato dall’amministratore.
7. Controllare esecuzione e log dal terminale
cd ~/cases/mioCaso
ls -lh log*
tail -n 40 log.Allrun # ultime 40 righe
tail -f log.Allrun # segue le nuove righe (Ctrl+C esce da tail)
grep -n -E 'FOAM FATAL|Error|error|Courant|Solving for|Time =' log.Allrun
ps -u "$USER" -o pid,etime,cmd # processi dell'utente
L’elenco ps conferma che un processo esiste, non che la soluzione stia convergendo. Anche un messaggio End non sostituisce il controllo dei risultati. Su molti casi i log dei singoli comandi sono nominati log.blockMesh, log.checkMesh o log.foamRun: consultare ciò che è stato realmente creato.
Un log OpenFOAM tipico contiene progressione temporale (Time =), residuali dei campi (Solving for ... Initial residual ... Final residual ...), Courant Number, tempo di esecuzione e segnalazioni di errore. I valori e i criteri di accettazione dipendono dal modello: residuali piccoli non dimostrano da soli la correttezza fisica.
Approfondimento · Come si legge un blocco di log di foamRun
Ogni passo temporale (o iterazione, nei casi stazionari) produce un blocco come questo; la forma esatta dipende dal modulo di solver e dagli algoritmi scelti in fvSolution:
Courant Number mean: 0.0742 max: 0.4121
Time = 0.005s
smoothSolver: Solving for Ux, Initial residual = 0.0213, Final residual = 4.1e-07, No Iterations 3
smoothSolver: Solving for Uy, Initial residual = 0.0390, Final residual = 6.2e-07, No Iterations 3
GAMG: Solving for p, Initial residual = 0.214, Final residual = 0.0097, No Iterations 4
time step continuity errors : sum local = 1.2e-08, global = 3.4e-10, cumulative = 3.4e-10
GAMG: Solving for p, Initial residual = 0.0182, Final residual = 8.8e-07, No Iterations 9
ExecutionTime = 1.52 s ClockTime = 2 s
- Courant Number: rapporto tra spostamento del fluido in un passo e dimensione della cella; il massimo va confrontato con
maxCoquando il passo è adattivo. - Initial residual: quanto il campo del passo precedente non soddisfa l’equazione all’inizio del passo; è il valore da seguire nel tempo.
- Final residual e No Iterations: dove si è fermato il solutore lineare e quante iterazioni ha fatto, in base a
toleranceerelTol. - continuity errors: errore di conservazione della massa dopo la correzione di pressione.
- ExecutionTime / ClockTime: tempo di CPU e tempo reale trascorso; la differenza cresce se il server è carico o se il disco è lento.
Il significato di residui, tolleranze e algoritmi è sviluppato in Parte 6: fvSolution, solutori lineari e algoritmi.
Approfondimento · Fermare un calcolo in modo ordinato
Interrompere con Ctrl+C o kill ferma il processo senza scrivere l’ultimo tempo. Se runTimeModifiable è attivo (è il valore predefinito), OpenFOAM rilegge controlDict durante il calcolo, e si può chiedere una chiusura pulita:
cd ~/cases/mioCaso
foamDictionary -entry stopAt -set writeNow system/controlDict
# il solver scrive il tempo corrente ed esce al passo successivo
tail -f log.foamRun
Dopo l’arresto riportare stopAt a endTime prima di ripartire. Solo se il processo è bloccato si usa kill PID (il PID si legge con ps); kill -9 è l’ultima risorsa. Le opzioni di arresto e ripartenza sono descritte in Parte 4.
Approfondimento · Spazio su disco e directory dei tempi
Ogni tempo scritto contiene tutti i campi su tutte le celle; con mesh grandi e scritture frequenti il disco si riempie in fretta, e un disco pieno interrompe il calcolo con errori di scrittura. Controllare spesso:
df -h ~ # spazio libero nel file system della home
du -sh ~/cases/mioCaso # occupazione del caso
du -sh ~/cases/mioCaso/* | sort -h | tail # le cartelle più grandi
In controlDict, purgeWrite N conserva solo gli ultimi N tempi; writeCompression on comprime i campi scritti. Prima di cancellare risultati, chiedersi se servono per il confronto o la validazione: la cancellazione su Linux non passa da un cestino.
8. Scaricare i log con FileZilla e analizzarli su Windows
- Da FileZilla aprire a destra la cartella remota del caso e a sinistra
C:\CFD\log\mioCaso. - Individuare
log.Allrun,log.foamRun,log.checkMesho altrilog.*; selezionare i file di interesse. - Trascinare da destra verso sinistra o usare Download. Verificare la coda di trasferimento.
- Rinominare solo la copia Windows, se serve storicizzarla:
log.foamRun_2026-10-16_provaA.txt. - Aprire file piccoli/medi in Notepad++; per log molto lunghi usare klogg: ricerca rapida, espressioni regolari, evidenziazione e navigazione dei risultati.
Ricerca rapida in klogg o Notepad++: FOAM FATAL, Floating point exception, Courant Number, Time =, Initial residual, Final residual, ExecutionTime, End.
Esempio di espressione regolare per cercare righe risolutive: Solving for|Initial residual|FOAM FATAL|Courant Number.
Per grafici dei residuali, esportare una tabella a due colonne (iterazione/tempo e residuale) tramite un piccolo script Python, oppure utilizzare i dati già prodotti dalle function object di OpenFOAM se disponibili. Non aprire un log grezzo direttamente in Excel aspettandosi colonne omogenee: è prima necessario analizzarne il formato.
Regola pratica: FileZilla non fornisce un vero tail -f remoto. Per l’andamento in tempo reale usare PowerShell+SSH; per analisi approfondita scaricare una copia del log. I download ripetuti di un file in crescita possono dare versioni parziali e richiedono di aggiornare manualmente la copia.
Approfondimento · klogg in pratica
- Apertura: klogg indicizza il file in background e apre senza problemi log di centinaia di megabyte, che Notepad++ gestisce con fatica.
- Ricerca: la casella in basso accetta espressioni regolari; i risultati compaiono in un riquadro separato e un clic porta alla riga nel file completo.
- Evidenziatori: si possono definire colori fissi per
FOAM FATAL,Courant Number,Time =, così le righe importanti saltano all’occhio scorrendo. - Follow: con la modalità follow klogg rilegge il file quando cambia; utile su una copia locale aggiornata periodicamente, non sostituisce
tail -fsul server.
Il sito del progetto è https://klogg.filimonov.dev/; il codice sorgente e le note di rilascio sono su GitHub.
Approfondimento · Estrarre i residui: foamLog sul server o Python su Windows
OpenFOAM include l’utility foamLog, che legge un log e crea la cartella logs/ con un file a due colonne per ogni grandezza (tempo, valore): per esempio logs/Ux_0, logs/p_0, logs/CourantMax_0. Sul server:
cd ~/cases/mioCaso
foamLog log.foamRun
ls logs/
tar czf logs_residui.tgz logs/ # un solo file da scaricare con FileZilla
In alternativa, su Windows, uno script Python legge il log scaricato e produce un CSV apribile in Excel o un grafico:
# residui.py - uso: python residui.py log.foamRun
import re, sys, csv
t = None
rows = []
rx_t = re.compile(r'^Time = ([0-9.eE+-]+)')
rx_r = re.compile(r'Solving for (\w+), Initial residual = ([0-9.eE+-]+)')
seen = set()
with open(sys.argv[1], encoding='utf-8', errors='replace') as f:
for line in f:
m = rx_t.match(line)
if m:
t = float(m.group(1)); seen = set(); continue
m = rx_r.search(line)
if m and t is not None and m.group(1) not in seen: # primo residuo del passo
seen.add(m.group(1))
rows.append((t, m.group(1), float(m.group(2))))
with open(sys.argv[1] + '.csv', 'w', newline='') as f:
w = csv.writer(f); w.writerow(['time', 'field', 'initial_residual']); w.writerows(rows)
print(len(rows), 'righe scritte in', sys.argv[1] + '.csv')
Lo script conserva solo il primo Initial residual di ogni campo per ciascun passo, che è il valore significativo quando la pressione viene risolta più volte nello stesso passo. In Excel si costruisce poi un grafico a dispersione con asse verticale logaritmico, filtrando per campo.
9. ParaView in modalità client/server: principio di funzionamento

La GUI ParaView su Windows controlla un processo pvserver su Linux. Il pvserver apre mesh e risultati nel filesystem Linux, esegue lettura e filtri e comunica il necessario al client; non serve scaricare sul PC tutti i campi. I menu File → Open dopo la connessione navigano quindi sul server, non sul disco C:. La documentazione ParaView avverte che pvserver non autentica i client e il protocollo non cifra da solo il traffico: usare un tunnel SSH invece di esporre la porta 11111.
Metodo raccomandato: un terminale SSH che porta con sé il tunnel
Passo A. Da PowerShell Windows, con porta 11111 libera sul PC:
ssh -L 11111:127.0.0.1:11111 UTENTE@SERVER
Questo comando apre una shell SSH e simultaneamente inoltra il localhost:11111 di Windows verso il 127.0.0.1:11111 del server. Tenere aperta la finestra PowerShell per tutta la visualizzazione.
Passo B. Nella shell Linux appena aperta:
command -v pvserver
pvserver --server-port=11111 --bind-address=127.0.0.1
--bind-address è disponibile in ParaView 5.13.x e limita la porta al loopback del server. Se l’eseguibile non è nel PATH, trovare il percorso installato (per esempio /opt/paraview-5.13.2/bin/pvserver) e sostituirlo. Attendere un messaggio simile a Waiting for client....
Passo C. Su Windows avviare ParaView GUI → File → Connect → Add Server:

| Campo | Valore |
|---|---|
| Name | Linux via SSH |
| Server Type | Client / Server non reverse |
| Host | localhost |
| Port | 11111 |
| Startup Type | Manual |
Salvare e premere Connect. Se la connessione funziona, il Pipeline Browser mostra una connessione di tipo cs://localhost:11111 al posto del solo server locale builtin.
Approfondimento · Che cosa fa esattamente il tunnel
L’opzione -L 11111:127.0.0.1:11111 si legge così: porta locale 11111 sul PC Windows → destinazione 127.0.0.1:11111 vista dal server. ParaView si collega a localhost:11111 sul PC; il client SSH prende quel traffico, lo cifra dentro la connessione SSH già autenticata e il server SSH lo consegna a pvserver, che ascolta solo sul proprio loopback grazie a --bind-address=127.0.0.1. Dall’esterno nessuno vede la porta 11111.
Se si preferisce tenere separati tunnel e terminale, il tunnel si apre da solo con -N (nessun comando remoto) in una finestra dedicata, e pvserver si lancia da una seconda sessione SSH o dentro tmux:
# finestra 1 (resta aperta, non mostra un prompt)
ssh -N -L 11111:127.0.0.1:11111 UTENTE@SERVER
# finestra 2
ssh UTENTE@SERVER
pvserver --server-port=11111 --bind-address=127.0.0.1
Con il file ~/.ssh/config della sezione 2 basta ssh cfd-paraview.
Approfondimento · Versioni di client e server, porte occupate
Client e server ParaView devono avere la stessa versione principale e secondaria (per esempio 5.13 con 5.13): con versioni diverse la connessione viene rifiutata con un messaggio di incompatibilità. Sul server la versione si legge con pvserver --version; su Windows in Help → About.
Se la porta è occupata (Address already in use), si scopre chi la usa:
# Windows PowerShell
netstat -ano | findstr :11111
# Linux
ss -ltnp | grep 11111
Spesso è un pvserver rimasto acceso da una sessione precedente: si chiude con Ctrl+C nella sua sessione, o con kill PID se la sessione è persa. Su un server con più utenti conviene che ognuno usi una porta propria, per esempio 11112: ssh -L 11112:127.0.0.1:11112, pvserver --server-port=11112 e porta 11112 nella configurazione di ParaView. Le tre porte devono coincidere.
Aprire un caso OpenFOAM dal server
Nella shell Linux, nella directory del caso:
cd ~/cases/mioCaso
touch mioCaso.foam
touch crea un file segnaposto vuoto, non una copia dei risultati. Con ParaView collegato al server, scegliere File → Open, raggiungere la cartella Linux /home/UTENTE/cases/mioCaso, selezionare mioCaso.foam, usare il lettore OpenFOAM e premere Apply. Quindi abilitare campi, regioni o patch e scegliere il timestep desiderato. La disponibilità del reader dipende dai componenti installati in pvserver.
Se la simulazione è stata scomposta in processor0/, processor1/ ecc., verificare nel lettore la modalità Decomposed Case, se supportata; in alternativa ricostruire con reconstructPar quando il caso lo permette. Non eseguire una ricostruzione onerosa solo per aprire il caso, senza prima verificare le opzioni del lettore.
Approfondimento · Le opzioni del lettore OpenFOAM che contano
- Case Type:
Reconstructed Caselegge le cartelle dei tempi nella radice del caso;Decomposed Caselegge direttamenteprocessor*/e in parallelo, sepvserverè avviato con più processi. - Mesh Regions:
internalMeshè il volume; le singole patch (inlet,outlet,walls) si attivano separatamente e permettono di vedere le grandezze sui contorni. - Cell Arrays: i campi da caricare; caricare solo quelli che servono riduce memoria e tempo.
- Skip Zero Time: attivo per impostazione predefinita, nasconde la cartella
0/con le condizioni iniziali; disattivarlo per vederle. - Refresh (o Reload Files): durante un calcolo ancora in corso aggiorna l’elenco dei tempi scritti senza riaprire il caso.
Il caso parallelo e la scelta tra lettura scomposta e ricostruzione sono trattati nel caso 05.
Terminare la sessione
Da ParaView scegliere Disconnect; quindi nel terminale del server terminare pvserver con Ctrl+C se è ancora attivo e uscire da SSH con exit. La chiusura del tunnel rende impossibile la connessione GUI finché non viene riaperto.
Se non appare nulla o ci sono errori OpenGL: non è un problema da risolvere installando OpenFOAM su Windows. Verificare che pvserver abbia un backend grafico adeguato (X11, EGL o rendering software, secondo build e server), controllare gli errori nel terminale e chiedere all’amministratore quale modalità di rendering è configurata. Una sessione Linux priva di display non implica automaticamente che ogni build di pvserver possa renderizzare senza configurazione.
Approfondimento · Rendering sul server senza display e alternative
Le build di ParaView per server senza schermo usano EGL (scheda grafica) oppure OSMesa (rendering software su CPU). Con una build che le supporta, l’opzione --force-offscreen-rendering evita di cercare un display X11:
pvserver --server-port=11111 --bind-address=127.0.0.1 --force-offscreen-rendering
# più processi per dataset grandi (build con MPI):
mpiexec -np 4 pvserver --server-port=11111 --bind-address=127.0.0.1
Se il server non dispone di un pvserver utilizzabile, restano due strade. La prima è estrarre sul server solo ciò che serve e scaricarlo: per esempio foamToVTK -latestTime crea file VTK dell’ultimo tempo, apribili con ParaView in locale dopo il download. La seconda è automatizzare le immagini con pvbatch o pvpython sul server e scaricare soltanto i PNG. In entrambi i casi il volume dei dati trasferiti va controllato prima, con du -sh.
10. Mini-esercitazione completa: da Windows al risultato
- In Notepad++ apri
C:\CFD\casi\mioCaso\system\controlDict; fai una modifica concordata e salva in UTF-8 senza BOM, LF. - In FileZilla entra via SFTP, confronta i file e carica solo il
controlDictmodificato nella corretta cartella remotasystem/. - Da PowerShell:
ssh UTENTE@SERVER, poicd ~/cases/mioCasoe verifica conpwdels system/controlDict. - Leggi
Allrunprima di avviarlo. Crea una sessionetmux, lancia la procedura e salvalog.Allrun. - Controlla il log con
tail -f(da un’altra sessione SSH) e verifica l’assenza di errori critici. - Con FileZilla scarica il log in
C:\CFD\log\mioCaso; aprilo in klogg, cerca messaggi di errore e valori residui. - A calcolo terminato, usa una nuova sessione SSH con tunnel, avvia
pvserver, collega ParaView Windows e apri il.foamdirettamente dal filesystem Linux. - Salva sul PC immagini, tabelle e note di analisi. I risultati CFD restano sul server, salvo i file deliberatamente esportati.
Approfondimento · Un caso di prova pronto: il tutorial cavity
Per fare l’esercizio senza un caso proprio si copia un tutorial nell’area di lavoro. Con l’ambiente OpenFOAM caricato:
mkdir -p ~/cases
cp -r $FOAM_TUTORIALS/incompressibleFluid/cavity ~/cases/mioCaso
cd ~/cases/mioCaso
ls
foamDictionary -entry solver system/controlDict
Il caso è piccolo, si calcola in pochi secondi e contiene mesh, campi e dizionari completi. Per lavorarci da Windows si scarica una volta l’intera cartella con FileZilla nella copia locale C:\CFD\casi\mioCaso (prima che esistano le cartelle dei tempi) e da lì si segue la procedura. Se il percorso del tutorial è diverso nella propria installazione, ls $FOAM_TUTORIALS/incompressibleFluid mostra quelli disponibili.
11. Problemi frequenti e diagnosi
| Sintomo | Verifica / correzione |
|---|---|
ssh: command not found su Windows | Attivare il client OpenSSH di Windows; riaprire PowerShell. |
Permission denied SSH/SFTP | Controllare utente, password/chiave, autorizzazioni e impronta host. |
| FileZilla mostra directory sbagliata | Controllare la cartella remota assoluta e i permessi; non assumere che la root / sia la home. |
foamRun / blockMesh: command not found | Caricare l’ambiente OpenFOAM o verificare installazione e PATH. |
./Allrun: Permission denied | Controllare ls -l Allrun e, se appropriato, chmod u+x Allrun. |
bad interpreter: /bin/sh^M | Convertire terminazioni CRLF in LF, ricaricare lo script. |
| SSH si chiude, simulazione si interrompe | Avviare in tmux e fare detach prima di chiudere. |
| ParaView non si connette | pvserver attivo? tunnel aperto? stessa porta 11111? client/server compatibili? |
Address already in use | Porta 11111 già occupata su Windows o server: liberarla o usare coppia di porte coerente. |
Il file .foam non appare | touch mioCaso.foam nella directory giusta; controllare se si naviga lato server. |
| Campi mancanti / lettura fallita | Verificare formato del caso, mesh, decomposizione e reader disponibile in pvserver. |
| Schermata nera / errore OpenGL | Controllare le capacità di rendering e i messaggi di pvserver; non usare tentativi casuali su X11/GPU. |
12. Scheda rapida stampabile
WINDOWS / POWERSHELL
ssh UTENTE@SERVER
ssh -L 11111:127.0.0.1:11111 UTENTE@SERVER # sessione tunnel ParaView
LINUX / CASE
pwd ; ls -lh ; cd ~/cases/mioCaso
foamVersion
sed -n '1,100p' Allrun
blockMesh ; checkMesh # SOLO se richiesto dal caso
tmux new -s cfd_mioCaso
./Allrun 2>&1 | tee log.Allrun
# Detach: Ctrl+B, poi D
# Riprendi: tmux attach -t cfd_mioCaso
tail -n 40 log.Allrun
tail -f log.Allrun
LINUX / PARAVIEW (NELLA SESSIONE SSH CON TUNNEL)
pvserver --server-port=11111 --bind-address=127.0.0.1
cd ~/cases/mioCaso ; touch mioCaso.foam
WINDOWS / PARAVIEW
File > Connect > Add Server > Client/Server
Host localhost ; Port 11111 ; Startup Manual
File > Open > /home/UTENTE/cases/mioCaso/mioCaso.foam
Approfondimento · Comandi aggiuntivi da tenere a portata di mano
# ambiente e verifica
source /opt/openfoam14/etc/bashrc # percorso dei pacchetti Ubuntu Foundation
command -v foamRun ; foamVersion
# script e file
file Allrun ; sed -i 's/\r$//' Allrun # diagnosi e correzione CRLF
foamDictionary -entry endTime system/controlDict
# risorse e spazio
nproc ; free -h ; uptime ; df -h ~ ; du -sh ~/cases/mioCaso
# arresto ordinato
foamDictionary -entry stopAt -set writeNow system/controlDict
# residui in colonne
foamLog log.foamRun ; tar czf logs_residui.tgz logs/
# porte occupate
ss -ltnp | grep 11111 # Linux
netstat -ano | findstr :11111 # Windows
13. Fonti ufficiali e approfondimenti
- OpenFOAM Foundation, OpenFOAM 14 e guida introduttiva: https://openfoam.org/version/14/ e https://openfoam.org/download/14-ubuntu/ .
- ParaView, Remote and parallel visualization, manuale 5.13.2: https://docs.paraview.org/en/v5.13.2/ReferenceManual/parallelDataVisualization.html .
- ParaView, Loading Data, manuale 5.13.2: https://docs.paraview.org/en/v5.13.2/UsersGuide/dataIngestion.html .
- ParaView, note di rilascio 5.13 (
--bind-address): https://www.paraview.org/paraview-docs/v5.13.2/cxx/md__builds_gitlab-kitware-sciviz-ci_Documentation_release_ParaView-5_813_80.html . - FileZilla Wiki, Site Manager e autenticazione SFTP: https://wiki.filezilla-project.org/Site_Manager .
- Notepad++ User Manual, New Document / encoding / line endings: https://npp-user-manual.org/docs/preferences/ .
- Microsoft Learn, OpenSSH Windows: https://learn.microsoft.com/it-it/windows-server/administration/openssh/openssh_install_firstuse .
- klogg, log viewer e documentazione: https://github.com/variar/klogg .
Schermate originali di riferimento (consultabili online): FileZilla SFTP (https://www.ionos.com/help/fileadmin/images/hosting/ftp/2938/EN/2938_EN_transfer_files_filezilla_linux_05.png), menu Unix LF in Notepad++ (https://i.sstatic.net/sndcy.jpg), configurazione server ParaView nella guida Kitware (https://docs.paraview.org/en/v5.11.1/_images/serverconfig.png). Le immagini mostrano versioni/interfacce che possono differire da quelle installate.
Nota sulle figure: le schermate in questa guida sono ricostruzioni schematiche dei controlli principali, non fotografie dello specifico PC. Le interfacce possono cambiare con la versione o la lingua del programma; i riferimenti ufficiali sopra includono anche schermate originali dei rispettivi programmi.
Altri riferimenti utili
- OpenFOAM User Guide v14: https://doc.cfd.direct/openfoam/user-guide-v14/.
- klogg, visualizzatore di log: https://klogg.filimonov.dev/.
Torna al percorso: Imparare OpenFOAM 14.