• Non ci sono risultati.

Capitolo 5-Implementazione EDC in CFX 1

N/A
N/A
Protected

Academic year: 2021

Condividi "Capitolo 5-Implementazione EDC in CFX 1"

Copied!
13
0
0

Testo completo

(1)
(2)

5

Implementazione EDC in CFX

Nel presente paragrafo si illustra lo schema logico e le fasi di programmazione relative all’implementazione del modello di combustione EDC nel codice di calcolo commerciale CFX. Come discusso nel Capitolo 3 è necessario distinguere due casi :

 Implementazione EDC nel caso di chimica veloce (Fast Chemistry)  Implementazione EDC nel caso di chimica finita (Finite rate Chemistry)

Per meglio chiarire la modalità con la quale è stato possibile implementare l’EDC si forniscono alcuni concetti riguardanti le strutture del codice di calcolo CFX.

CFX possiede un proprio linguaggio dichiarativo, CFX Expression Language (CEL), attraverso il quale è possibile esprimere la dipendenza complessa tra una o più variabili chimico-fisiche. Tale dipendenza viene esplicitata nella sezione Expression del CFX-Pre.

L’editor presente all’interno di CFX è estremamente potente e versatile e può essere adoperato con semplicità per la definizone di proprietà chimico- fisiche, condizioni al contorno e sorgenti di varia natura. Tuttavia esso risulta inadeguato qualora sia necessario realizzare operazioni complesse quali ad esempio gradienti di variabili, non ancora supportati in CFX-Pre. In questi casi è possibile scrivere subroutines in linguaggio di programmazione Fortran.

Queste vengono compilate all’interno del processore del codice e richiamate dal solutore ad ogni stadio di integrazione (è anche possibile specificare se alla fine o all’inizio dello stadio di integrazione).

Al fine di collegare al codice una subroutine in linguaggio Fortran, questa deve essere prima processata all’interno di CFX-Pre con l’ausilio di un apposito compilatore Fortran (Fortran Compiler) operante nella directory di lavoro. Il risultato di tale operazione è la generazione di Shared Libraries richiamate dal solutore ad ogni step di integrazione.

Le Shared Libraries sono librerie condivise da applicazioni anche differenti da quelle per la quale la subroutine è stata originariamente creata, senza la necessità di compilare nuovamente il file sorgente. In altre parole la subroutine Fortran viene compilata nel CFX_Pre una volta per tutte, cioè non è compilata per ogni stadio di integrazione.

Le soubroutines sono interfacciate con il codice CFX attraverso la definizione di

 User Routines che specificano il nome della subroutine del file sorgente ed

(3)

 User Function che realizzano l’associazione tra gli argomenti in ingresso a

quelli in uscita da ciascuna subroutines.

5.1

Implementazione EDC per Fast Chemistry

Il procedimento utilizzato per effettuare l’implementazione del modello di combustione EDC in CFX si basa sulla definizione di un termine sorgente nell’equazione di trasporto delle specie chimiche presenti nel sistema (equazione 2.2 capitolo 2).

CFX utilizza il concetto di dominio per definire la tipologia, le proprietà e le regioni costituenti i volumi fluidi e solidi oggetto di studio. All’interno dei domini vengono risolte le equazioni di Navier-Stokes, dell’energia e delle specie chimiche.

Il codice CFX permette inoltre di definire all’interno di tali domini dei sottodomini (Subdomain). Si tratta di regioni dello spazio con le stesse proprietà del dominio di appartenenza, per le quali possono essere specificati dei termini sorgente (source terms) per le equazioni di continuità, della quantità di moto, dell’energia e del trasporto delle specie.

In altre parole, CFX non permette di manipolare direttamente le equazioni che governano il moto del fluido ma consente all’utente di definire dei termini addizionali. Tale funzionalità è particolarmente interessante per l’implementazione di modelli fisici non implementati in CFX. Nel presente lavoro tale “opportunità” è stata sfruttata proprio per inserire il modello di combustione Eddy Dissipation Concept, EDC, non disponibile in CFX.

Il procedimento che è stato utilizzato per l’implementazione dell’EDC è suddivisibile in 3 steps: a. disattivazione dei modelli di combustione presenti nel codice;

b. creazione di un sottodominio coincidente con l’intero dominio fluido; c. inserimento all’interno del sottodominio fluido di termini sorgenti nelle

equazioni di trasporto delle specie chimiche.

Il termine sorgente Rk nel caso di cinetica veloce (Fast Chemistry), è espresso dall’equazione 1.77:

min 3 D1 3 1 Y 2C k 1 k R χ ε ρ γ χ   = − −    (5.1)

Tale termine è relativamente semplice da implementare per cui è stato possibile fare ricorso esclusivamente al linguaggio CEL, inserendo nella sezione Expressions del CFX-Pre, le espressioni che descrivono tale modello. Quindi per il caso di cinetica veloce non è stato necessario far ricorso a subroutines.

(4)

Per i dettagli della formulazione del modello in CEL utilizzati per definire il termine Rk si faccia riferimento all’appendice A.

Lo schema della sequenza operativa per l’implementazione in CFX del modello EDC Fast Chemistry è quindi illustrato nella Figura 5.1

Figura 5.1-Schema della sequenza operativa per la Fast Chemistry

5.2

Implementazione EDC per Finite Rate

In analogia a quanto indicato per il caso di chimica veloce, il procedimento adottato per implementare l’EDC per il caso di chimica finita (Finite Rate) prevede la disattivazione del modello di combustione presente in CFX e l’inserimento dell’espressione di Rk ,attraverso la creazione di un termine sorgente (source), all’interno dell’equazione di trasporto delle specie chimiche.

Come mostrato nel capitolo … al paragrafo …. l’implementazione dell’EDC per il caso Finite Rate richiede, per la determinazione degli Rk la risoluzione di un sistema di equazioni differenziali (vedi equazioni 1.81-1.84). Ciò risulta in una complicazione rispetto al caso precedente in quanto non è stato possibile risolvere tale sistema direttamente.

È stato necessario scrivere subroutines in linguaggio Fortran che permettessero di calcolare i termini sorgente Rk, integrando il sistema di equazioni differenziali.

La subroutines sfruttano un solutore di equazioni differenziali (ODE Solver) opportunamente modificato per trattare il caso oggetto di studio.

5.2.1

ODE Solver per combustione

Sebbene nel presente lavoro l’ODE solver occorra per la descrizione dell’EDC, in combustione gli ODE solver sono largamente utilizzati per risolvere numerosi problemi di tipo matematico.

La descrizione accurata degli schemi cinetici comporta l’impiego di un largo numero di reazioni e di specie chimiche che portano ad un’ampia serie di sistemi di equazioni differenziali ordinarie (ODEs) che spesso sono molto complessi.

La sempre più stringente normativa ambientale in termini di emissioni di NOx e COx ha indirizzato la ricerca verso l’area della combustione catalitica e la pirolisi ossidativa del gas naturale e degli

CFX Expression Language (CEL) Equazione di Conservazione della Specie k ( , , , ,....) K R = f k ε ρ T Chemistry Fast

(5)

idrocarburi di basso peso molecolare che risultano essere tutti casi caratterizzati chimicamente dall’accoppiamento degli effetti di reazioni omogenee ed eterogenee. Da un punto di vista matematicamente esprimibili da sistemi di equazioni differenziali di tipo stiff (rigidi). Dal punto vista chimico-fisico tale natura stiff deriva dal fatto che nei processi descritti sono presenti equazioni differenziali con diverse scale di tempo come ad es. nel caso della cinetica chimica con la presenza di radicali e specie molecolari.

La risoluzione di queste equazioni differenziali (ODE) ed algebriche (DAE) richiedono il ricorso a opportuni metodi numerici. I pacchetti più utilizzati disponibili sono LSODI (Hindmarsh, 1980), DASSL (Petzold, 1983)e DASPK (Brown et al.,1993).

Altri programmi d’integrazione presenti e menzionati in letteratura sono meno diffusi rispetto a quelli precedentemente menzionati come LIMEX (Deuflhard e Nowack,1985), DAESOL (Bauer et al., 1997) e SPRINT (Berzins e Furzeland, 1985)

Gli studi effettuati su questi pacchetti d’integrazione sono in genere volti a migliorare l’efficienza computazionale e la stabilità dei metodi.

I programmi di simulazione, capaci di descrivere processi di combustione omogenei ed eterogenei, si trovano di fronte quindi alla necessità di risolvere sistemi di tipo ODE o DAE generalmente stiff. Le equazioni differenziali, che descrivono i processi, sono spesso del Io ordine con condizioni iniziali note. Partendo da DIFSUB (Gear, 1971), GEAR (Hindmarsh, 1974), LSODI (Hindmarsh 1980) ed arrivando fino a VODE (Brown et al. 1989, Byrne e Dean 1993) e BzzOde (Buzzi-Ferraris e Manca 1998) il miglioramento nella configurazione e nelle proprietà di questi programmi in termini di robustezza ed efficienza di questi metodi è stata continua.

Attualmente è pratica comune, quando il problema da risolvere non è molto complesso, di evitare l’utilizzo di soluzioni iterative per la risoluzione del sistema linearizzato finale ed utilizzare invece un approccio diretto utilizzando un risolutore convenzionale lineare.

Questo è dovuto alla non facile utilizzazione dei sistemi globali e quindi all’ambiguità nel proporre una valida matrice precondizionata iniziale.

Gli integratori VODE e DASAC (che è una versione adattata di DASAC e sviluppata per alcuni casi particolari da Caracotsios e Stewart, 1985) contengono all’interno il pacchetto CHEMKIN (Byrne e Dean, 1993, Lutz et al. 1997) utilizzato per la soluzione di sistemi cinetici complessi.

Nel presente lavoro di tesi è stato utilizzato il programma di integrazione LIMEX per la risoluzione di un sistema ODE/DAE necessario, come illustrato nel capitolo 3, per risolvere il sistema di equazioni differenziali derivanti dall’aver considerato le strutture fini come reattori perfettamente miscelati (PSr) (Magnussen, RIFERIMENTO). Il pacchetto completo all’interno del quale LIMEX è inserito è LIMKIN_1.0. Tale pacchetto è distribuito liberamente per scopi accademico/didattici.

(6)

5.2.2

Il software LIMKIN_1.0

LIMKIN è un pacchetto software contenete un integratore (LIMEX) ed il compilatore chimico del pacchetto LARKIN.

Tale pacchetto è progettato per risolvere le equazioni differenziali ordinarie (ODE) derivanti dalla cinetica delle reazioni sia per casi semplici sia per casi complessi.

LIMKIN è composto da 3 unità di programma:

 Il compilatore chimico LIMKINCOM. Tale programma legge ed analizza i dati in ingresso e scrive i dati in un file chiamato INVAL (per essere usati come input da LIMKININT) e nei files proini.f, fcn.f ed jacobi.f

 L’integratore in versione integrata LIMKININT che legge le informazioni dal file INVAL ed integra il problema attuale.

 L’integratore in versione disaccoppiata LIMKINSIM che legge le informazioni sul problema attuale dalle subroutines proini, fcn, e jacobi Prima che la simulazione possa partire, queste routines devono essere compilate ed unite da LIMKINSIM.

Tutte le unità di programma sopra elencate utilizzano, come linguaggio di programmazione, Fortran 77 che risulta essere l’unico linguaggio riconosciuto dal CFX 5.7.1.

5.2.3

Adattamento di Limkin per il codice CFX

Il pacchetto Limkin non può essere integrato direttamente nel codice CFX ma deve essere opportunamente “adattato”. Inoltre per il caso in esame occorre sfruttare solo una parte delle potenzialità che il programma fornisce.

In particolare quello che interessa è l’integratore del sistema ODE/DAE.

Tale parte deve essere opportunamente implementata nella subroutine dedita al calcolo degli R . k

Le operazioni fatte nel presente lavoro possono essere suddivise in 3 steps:

1. Identificazione all’interno del pacchetto LIMKIN della sezione dedicata all’integrazione del sistema di equazioni differenziali;

2. Identificazione degli input e loro formulazione da fornire all’integrazione; 3. Identificazione degli output contenenti i risultati dell’integrazione da

(7)

Step 1

Tale step ha riguardato l’individuazione e l’isolamento della sezione dedicata all’integrazione delle equazioni ODE/DAE. Nel presente lavoro di tesi si utilizza la versione dell’integratore LIMEX 4.1A1.

LIMEX (Deuflhard e Nowak, 1987) è un solutore utilizzato per sistemi lineari impliciti di equazioni differenziali algebriche (DAE). È un codice che utilizza la tecnica d’estrapolazione ed è basato sulla discretizzazione lineare implicita di Eulero.

Esso comprende vari metodi per la soluzione di sistemi lineari (modelli generali diretti sparsi e soluzioni iterative con precondizionamento).

Il codice è usato con successo nella soluzione dei problemi che sorgono dai modelli di combustione dove sono frequenti discontinuità nel tempo.

I sistemi DAE che esso risolve sono del tipo:

( ) ( ) ( )

, * ,

B t y y t′ = f t y (5.2)

dove B è una matrice n n di rango minore o uguale ad n.

Le condizioni generali per l’applicabilità di LIMEX sono di avere un fascio di matrici regolari B+hA dove A è lo Jacobiano del residuo del DAE e di avere un indice del DAE minore o uguale ad 1.

La discretizzazione di LIMEX è basata su modello di discretizzazione lineare elementare implicita di Eulero che è così rappresentata:

( )

(

)

(

B t y k, −hJ

)

(

y k

( ) ( )

+ −1 y k

)

=hf t k

(

( ) ( )

+1 ,y k

)

(5.3) dove J risulta essere lo jacobiano (approssimato) del residuo che è definito come:

(

)

( )0 t t d f By dy − ′ = (5.4)

Combinato con la tecnica dell’estrapolazione questo metodo di tipo “one-step” consente un controllo adattativo dell’ordine e dello step-size.

All’interno del processo di estrapolazione è possibile avere una stima per l’ approssimazione dello step-size di base H e di T j

( )

,1 per y t

(

( )

0 +H

)

e questo viene realizzato utilizzando la relazione per la discretizzazione sopra descritta con step-size h j

( )

H

j

= con j=1,..., j

( )

max .

L’approssimazione dell’ordine superiore T j k

( )

, viene quindi delineato in maniera ricorsiva in questo modo:

( ) (

) (

,

(

1

) (

)

1, 1

)

, , 1 / 1 1 T j k T j k T j k T j k j j k − − − − = − + − + − , k =1,..., j (5.5)

(8)

Per stimare l’errore si considera la differenza T j j

( ) (

, T j j, 1

)

L’efficienza di LIMEX dipende principalmente dalle caratteristiche con le quali si valuta lo jacobiano, in particolare dalla soluzione dei sistemi lineari.

Sono quindi disponibili diverse versioni di LIMEX che presentano differenti metodi per creare il jacobiano e risolvere i sistemi lineari.

La versione utilizzata in questa Tesi di Laurea è adatta per trattare matrici jacobiane di tipo denso non-sparse.

Step 2

Per il suo funzionamento LIMEX necessita di alcuni inputs. All’intermo dell’intero pacchetto LIMKIN, delle parti come LIMKINCOM e altre parti di LIMKININT sono sviluppate proprio al fine di produrre tali inputs a partire da specifiche relativamente semplici dei problemi in ingresso. Nel presente lavoro gli inputs esplicitati all’interno della subroutine Fortran in modo diretto o come argomenti delle User Function definite nel Pre di CFX.

Come visto in precedenza LIMEX crea la matrice jacobiana dei residui ( f t y

( ) ( )

, −B t y, *y′) del sistema DAE in esame per effettuare la discretizzazione implicita di Eulero e per farlo utilizza, richiamandola, una subroutine esterna (jacobian).

Una volta stabilito lo schema cinetico di riferimento, il numero di specie reagenti, la prima modifica apportata al programma è stata quella di inserire, direttamente nella sequenza operativa, la subroutine per la creazione dello jacobiano in base allo schema cinetico di riferimento.

Analogamente è stata esplicitata direttamente anche la funzione f t y , generalmente calcolata da

( )

, LIMEX tramite una subroutine esterna (fcn).

Per i dettagli sulla sequenza sulle linee di programma create vedi Appendice C.

Step 3

Una volta individuate l’integratore e gli inputs necessari, occorre creare la subroutine Fortran ed interfacciarla opportunamente.

(9)

Gli elementi che consentono di interfacciare subroutine esterne con CFX e che interessano sono :

 NLOC che fornisce il numero di posizioni dove vengono eseguiti i calcoli (quindi i nodi).

 NARG che fornisce il numero di argomenti passati alle funzioni

 ARGS(1:NLOC,1:NARG) fornisce il numero di argomenti passati alla funzione in ogni punto dello spazio

 NRET fornisce il numero delle variabili di ritorno che per CFX attualmente è sempre uguale ad 1

 RET(1:NLOC,1:NRET) fornisce il numero delle variabili di ritorno (risultati) in ogni punto dello spazio.

All’interno di questa struttura “tipo” deve essere integrato il solutore e lo schema cinetico, descritto attraverso lo jacobaino e f t y .

( )

,

In CFX, la lunghezza NLOC degli argomenti (ARGS), e dei valori di ritorno RET delle User Function è determinato dallo scenario per il quale la routine è chiamata .

In generale la User Function viene chiamata più volte durante ogni iterazione ed il valore di NLOC è diverso per ogni chiamata. Questo perché il CFX-Solver divide la specifica regione in parti più piccole e richiama la funzione per ogni parte.

Gli argomenti (ARGS) che vengono trasferiti a CFX attraverso la definizione delle User Function sono:

(10)

Parametro Tstar (eq.1.58 Cap.1) definito nella subroutine Fortran come ARGS(ILOC, 2);

Densità definita nella subroutine Fortran come ARGS(ILOC, 3);

Specie chimiche definite nella subroutine Fortran come ARGS(ILOC, I+3); Il risultato della subroutine di calcolo costituisce l’unica variabile di ritorno al CFX ed è espressa come:

( , ) ( ( ) ( ))

RET ILOC I = ym I y I (5.6)

dove I è la generica specie chimica presente nel sistema , ym I( ) rappresenta la frazione massiva nella iterazione precedente, y I( ) rappresenta la frazione massiva attuale.

Qui sembra nascere una ambiguità tra l’equazione dove si definiscono le equazioni differenziali e quelle delle subroutine dove (ym I( )y I( )) rappresenta la differenza tra lo step precedente e quello attuale. Questo fatto è stato evidenziato anche da (Articolo Milano)

5.2.4

Step operativi per l’implementazione della Finite rate

Come illustrato in precedenza il collegamento tra il codice di calcolo e le subroutines è realizzato con la definizione di User Routines ed User Function .

Queste ultime permettono di trasferire alle subroutines una lista di argomenti che viene utilizzata per ottenere i risultati richiesti.

Consideriamo all’istante t un generico step di integrazione nel quale il CFX-Solver risolve il sistema delle equazioni linearizzate relative alle equazioni di continuità, trasporto specie, conservazione della quantità di moto ed energia. nel dominio di calcolo ottenendo tra gli altri , anche i valori medi delle frazioni massiche delle specie chimiche e della temperatura ne dominio di calcolo.

Questi sono gli argomenti che vengono trasferiti come valori iniziali alle subroutines per il calcolo del termine sorgente di reazione chimica per ogni specie R . k

La versione 5.7.1 di CFX supporta solo una variabile di ritorno (RET) ed è quindi necessario progettare una subroutine per ogni specie chimica presente. Questo costituisce un notevole appesantimento numerico, tuttavia forse versioni future di CFX permetteranno un numero superiore di variabili di ritorno (vedi Manuale CFX)

(11)

Una volta determinati dalle subroutines i termini R sono restituiti al solutore allo step successivo k

e vanno a costituire i termini sorgenti delle equazioni (source) inseribili con la creazione del sottodominio.

In termini generali quindi lo step di integrazione

( )

N utilizza come parametri di ingresso quelli ottenuti dallo step precedente

(

N − e tale sequenza iterativa prosegue fino all’ottenimento della 1

)

convergenza

Nella Figura 5.2 viene illustrato schematicamente il procedimento precedentemente descritto.

Figura 5.2- Struttura interfacciamento CFX-LIMEX per Finite Rate Chemistry

t

t+dt

...

R

k

=f(T,

ρ,..)

R

1

=f(T,

ρ,..)

R

2

R

1

R

k

R

2

=f(T,

ρ,..)

Step di integrazione successivi

Per la specie chimica K-esima

Step 1

Step N

CFX Solver

(12)

5.3

Alcune considerazioni sul metodo

Il CFX, come illustrato nel capitolo ……, per la risoluzione delle equazioni differenziali derivanti dai vari bilanci termici e massivi (relazioni costitutive), non che quelle presenti all’interno dei vari modelli utilizzati per rappresentare i sistemi materiali (modelli di combustione, turbolenza e radiazione.), utilizza un metodo numerico basato sul concetto della discretizzazione utilizzando un solutore avanzato (CFX-Solver) di tipo multigrid.

Ci si chiede quindi se onfosse stato possibile utilizzare tale solutore per risolvere anche il problema derivante dal modello di combustione EDC.

La necessità di dover ricorrere a ODE/DAE solver esterni (LIMEX in questo caso) deriva proprio dal fatto che il CFX è un programma “acquistato sotto licenza”, senza cioè la possibilità di accesso ai file sorgente da parte dei suoi utenti.

In questi file sono presenti le istruzioni, dichiarate in un linguaggio molto complesso, che permettono al CFX-Solver di risolvere solo ed esclusivamente le equazioni differenziali che provengono dall’interno del programma stesso.

Da questo deriva l’impossibilità d’inserimento di alcuna istruzione che vada a modificare i file sorgente del CFX; operazione che ci permetterebbe di implementare direttamente il modello EDC non presente tra quelli inclusi in CFX.

Quello cha è stato proposto nella presente Tesi di Laurea è l’implementazione di un nuovo modello di combustione tramite la disattivazione dei modelli presenti nel codice e lo sfruttamento di alcune aperture concesse dal codice, come l’opportunità di inserire termini sorgenti.

(13)

5 Implementazione EDC in CFX 2

5.1 Implementazione EDC per Fast Chemistry 3 5.2 Implementazione EDC per Finite Rate 4

5.2.1 ODE Solver per combustione 4 5.2.2 Il software LIMKIN_1.0 6 5.2.3 Adattamento di Limkin per il codice CFX 6 5.2.4 Step operativi per l’implementazione della Finite rate 10

Figura

Figura 5.2- Struttura interfacciamento CFX-LIMEX per Finite Rate Chemistry

Riferimenti

Documenti correlati

La criticità e le soluzioni attuate per la gestione degli im- pianti di depurazione MBR nel trattamento di reflui urba- ni e industriali, sono stati oggetto della Giornata di Studio

Nell’oggetto della e-mail indicare classe, gruppo e lezione1, altrimenti non

A) Per ciascuna delle seguenti trasformazioni indicare reagenti e condizioni necessarie. B) Per uno solo a vostra scelta, fra i composti contrassegnati con asterisco, fornire

[r]

L’acqua penetra per capillarità nelle piccole parti vuote che sono tra le fibre della carta, la carta si gonfia e di conseguenza le piegature si distendono facendo “sbocciare”

If transaction cost savings and/or benefits from PBR implementation outweigh the benefits from ensuring nondiscriminatory access, from market and network integration and from

See, for example, the dialogue between judges on the death penalty, where we can observe the increasing interaction between national supreme courts of Canada, South Africa and the

76 Nella sezione in figura 3.51 I valori minimi di salinità di 38.15 psu si trovano nella parte della costa più vicina alla Toscana, perché non influenzati dalla LIW che passa