Visualizzazione post con etichetta simulazione. Mostra tutti i post
Visualizzazione post con etichetta simulazione. Mostra tutti i post

giovedì 16 ottobre 2008

Simulazione (parte II)



Dopo le ultime simulazioni di un semplice modellino lineare della particella, eccoci qui alle prese con l'equazione completa della dinamica della particella. Si suppongono numeri di Reynolds relativamente bassi e numeri di Knudsen prossimi allo 0. Ricordo che il numero di Reynolds non è altro che il rapporto tra le forze di inerzia e le forze viscose. Ovviamente la scelta di usare approssimazioni per bassi numeri di Reynolds è perfettamente giustificata, dal momento che la massa delle particelle prese in esame è estremamente ridotta. I numeri di Knudsen (il rapporto tra il ''mean free path'' ed il raggio equivalente) esprimono sostanzialmente quanto sia valida l'approssimazione continua del mezzo rispetto alle dimensioni della particella, che nel nostro caso nonostante sia (piccola, piccolissima, minuscola, microscopica, nanodimensionata) è comunque significativamente più grande delle molecole che compongono l'aria. Lo slip correction factor quindi dovrebbe essere circa pari a 1, ma per eccesso di zelo e per gusto sadico del fare del male alla CPU lo includiamo e lo rendiamo perfino dipendente dall'altezza a cui si trova la perticella. Tutte le particelle che vengono considerate nelle successive simulazioni inoltre sono non-Strakeriane. Ricordo a chi non lo sapesse che una particella Strakeriana è una particella di cui sono ignote (e non possono essere misurate in modo alcuno con nessuno strumento) le dimensioni, che non ubbidisce ad alcuna legge fisica nota o ignota, la cui dinamica non è esprimibile con nessun formalismo presente, passato o futuro e la cui composizione varia a piacimento.

Ecco dunque la brutta bestia di equazione che ci toccherà simulare (in questi momenti ringrazio Turing e Von Neumann per aver inventato i PC):

m_{p}\frac{dv_{z}}{dt}=
\frac{6\pi \mu(z) R_{eq}\chi}{C_{c}(z)}\cdot (u_{z}-v_{z})
+\frac{9}{4}\pi \rho(z) \left( \frac{R_{eq}\chi}{C_{c}(z)} \right)^2 (u_{z}-v_{z})|u_{z}-v_{z}|
+V_{p}\rho(z)\frac{d u_{z}}{dt}


+\frac{V_{p}}{2}\rho(z)\left(\frac{d u_{z}}{dt}-\frac{d v_{z}}{dt}\right)
+6R_{eq}^{2}\sqrt{\pi\mu(z) \rho(z)}\int\limits_{0}^{t}
\frac{\displaystyle \left.\left(\frac{d}{dt}(u_{z}-v_{z})\right)\right|_{t=\tau}}{\sqrt{t-\tau}}d\tau-m_{p}g

I parametri presenti nell'equazione sono stati già accuratamente descritti nell'articolo precedente, pertanto non si ritiene necessario ripetere tutta la pappardella ancora una volta.
Quanto ai termini che compaiono nell'equazione:

\frac{6\pi \mu(z) R_{eq}\chi}{C_{c}(z)}\cdot (u_{z}-v_{z})

non è altro che la forza di Stokes che agisce sulla particella in moto nel fluido.

\frac{9}{4}\pi \rho(z) \left( \frac{R_{eq}\chi}{C_{c}(z)} \right)^2 (u_{z}-v_{z})|u_{z}-v_{z}|

E' la correzione di Ossen all'equazione di Stokes, che serve per tener conto di quello che succede anche lontano dalla particella.

V_{p}\rho(z)\frac{d u_{z}}{dt}

E' un termine che viene introdotto dal gradiente di pressione che si viene a creare nel fluido a causa del moto della particella, in quanto il fluido in questione, in prossimità delle pareti della particella tende ad accelerare.

\frac{V_{p}}{2}\rho(z)\left(\frac{d u_{z}}{dt}-\frac{d v_{z}}{dt}\right)

Esprime l'effetto del flusso potenziale intorno alla particella in esame, e serve a tener conto anche dell'inerzia del fluido che circonda la particella.

+6R_{eq}^{2}\sqrt{\pi\mu(z) \rho(z)}\int\limits_{0}^{t}
\frac{\displaystyle \left.\left(\frac{d}{dt}(u_{z}-v_{z})\right)\right|_{t=\tau}}{\sqrt{t-\tau}}d\tau

Rappresenta la forza di Basset e tiene conto della storia dell'accelerazione della particella, accoppiandola alla densità del mezzo. In pratica è il termine che tiene conto della vorticità del fluido che si viene a creare a causa del moto della particella.

m_{p}g

E' la cara vecchia forza di gravità (come detto all'inizio, vengono considerate soltanto particelle non-Strakeriane).

Una volta che abbiamo snocciolato tutti i termini e tutte le costanti, non possiamo ancora fare alcun chè per la risoluzione dell'equazione, in quanto c'è una singolarità che si annida nell'integrale. Mi spiego meglio: il termine con la radice al denominatore dell'integrale è discontinuo in τ =t. Dal momento che quel che c'è sopra è praticamente una costante, eccoci che nel fare i conti abbiamo un termine infinito come integrando (costante/0). Nessuna paura però, con un'ardito passaggio matematico che consiste nell'aggiungere e togliere la stessa cosa a una certa quantità uccidiamo la singolarità brutta, e ne creiamo una che numericamente è molto più tranquilla (0/0):

\int\limits_{0}^{t}\frac{\displaystyle \left.\left(\frac{d}{dt}(u_{z}-v_{z})\right)\right|_{t=\tau}}{\sqrt{t-\tau}}d\tau
\underbrace{-\int\limits_{0}^{t}\frac{\displaystyle \left.\left(\frac{d}{dt}(u_{z}-v_{z})\right)\right|_{t=t}}{\sqrt{t-\tau}}d\tau
+\int\limits_{0}^{t}\frac{\displaystyle \left.\left(\frac{d}{dt}(u_{z}-v_{z})\right)\right|_{t=t}}{\sqrt{t-\tau}}d\tau}_{=0}

Ovviamente non abbiamo fatto altro che aggiungere 0 all'integrale originario (e chi lo ha detto che le addizioni di zeri sono
futili ???).
Ora però possiamo (in virtù della linearità dell'operatore integrale) fare dei primi due integrali uno solo:

\int\limits_{0}^{t} \left[\left.\left(\frac{d}{dt}(u_{z}-v_{z})\right)\right|_{t=\tau}-\left.\left(\frac{d}{dt}(u_{z}-v_{z})\right)
\right|_{t=t}\right] \frac{\displaystyle 1}{\sqrt{t-\tau}}d\tau
+\int\limits_{0}^{t}\frac{\displaystyle \left.\left(\frac{d}{dt}(u_{z}-v_{z})\right)\right|_{t=t}}{\sqrt{t-\tau}}d\tau

La cosa carina in questo passaggio è che il secondo integrale può essere tranquillamente risolto, perchè le funzioni al numeratore non dipendono più da τ e possono essere portate fuori dall'integrale:

\int\limits_{0}^{t}\frac{\displaystyle \left.\left(\frac{d}{dt}(u_{z}-v_{z})\right)\right|_{t=t}}{\sqrt{t-\tau}}d\tau =
\left(\frac{d}{dt}(u_{z}-v_{z})\right)\cdot\int\limits_{0}^{t}\frac{\displaystyle 1}{\sqrt{t-\tau}}d\tau=
\left(\frac{du_{z}}{dt}-\frac{dv_{z}}{dt}\right)\cdot 2\sqrt{t}

Sostituendo il tutto nell'equazione otteniamo:

m_{p}\frac{dv_{z}}{dt}=
\frac{6\pi \mu(z) R_{eq}\chi}{C_{c}(z)}\cdot (u_{z}-v_{z})
+\frac{9}{4}\pi \rho(z) \left( \frac{R_{eq}\chi}{C_{c}(z)} \right)^2 (u_{z}-v_{z})|u_{z}-v_{z}|
+V_{p}\rho(z)\frac{d u_{z}}{dt}
+\frac{V_{p}}{2}\rho(z)\left(\frac{d u_{z}}{dt}-\frac{d v_{z}}{dt}\right)


+6R_{eq}^{2}\sqrt{\pi\mu(z) \rho(z)}\left( \int\limits_{0}^{t}\left[\left.\left(\frac{d}{dt}(u_{z}-v_{z})\right)\right|_{t=\tau}-\left.\left(\frac{d}{dt}(u_{z}-v_{z})\right)\right|_{t=t}\right] \frac{\displaystyle 1}{\sqrt{t-\tau}}d\tau\right) +


+6R_{eq}^{2}\sqrt{\pi\mu(z) \rho(z)}\left(\left(\frac{du_{z}}{dt}-\frac{dv_{z}}{dt}\right)\cdot 2\sqrt{t} \right)-m_{p}g



Ora, dividiamo tutto per mp tanto per ricondurci a qualcosa di più o meno leggibile.
In linea di massima abbiamo una cosa del tipo:

\frac{dv_{z}}{dt}=
l(z)(u_{z}-v_{z})
+g(z)(u_{z}-v_{z})|u_{z}-v_{z}|
+(3 h(z)+2\sqrt{t}f(z))\frac{d u_{z}}{dt}


-(h(z)+2\sqrt{t}f(z)) \frac{d v_{z}}{dt}
+f(z) \int\limits_{0}^{t}\Psi\left(\tau,t,v_{z}(\tau),\frac{dv_{z}}{dt}(\tau)\right) d\tau -g

con:

\begin{array}{l}
f(z)=6\frac{R_{eq}^{2}\sqrt{\pi\mu(z) \rho(z)}}{m_{p}}\\
\\
\Psi\left(\tau,t,v_{z}(\tau),\frac{dv_{z}}{dt}(\tau)\right)=
\left[\left.\left(\frac{d}{dt}(u_{z}-v_{z})\right)\right|_{t=\tau}-\left.\left(\frac{d}{dt}(u_{z}-v_{z})\right)\right|_{t=t}\right]
\frac{\displaystyle 1}{\sqrt{t-\tau}}\\
\\
h(z)=\frac{V_{p}}{2 m_{p}}\rho(z)\\
\\
l(z)=\frac{6\pi \mu(z) R_{eq}\chi}{C_{c}(z)m_{p}}\\
\\
g(z)=\frac{9}{4 m_{p}}\pi \rho(z) \left( \frac{R_{eq}\chi}{C_{c}(z)} \right)^2
\end{array}

Siccome però non abbiamo intenzione di stare a combattere con equazioni integrali-algebrico-differenziali, con un ardito passaggio matematico otteniamo:

(1+h(z)+2\sqrt{t}f(z))\frac{dv_{z}}{dt}=
l(z)(u_{z}-v_{z})
+g(z)(u_{z}-v_{z})|u_{z}-v_{z}|
+(3 h(z)+2\sqrt{t}f(z))\frac{d u_{z}}{dt}


+f(z) \int\limits_{0}^{t}\Psi\left(\tau,t,v_{z}(\tau),\frac{dv_{z}}{dt}(\tau)\right) d\tau -g

che con un passaggio matematico altrettanto ardito diventa:

\frac{dv_{z}}{dt}=
M(z,t)(u_{z}-v_{z})
+G(z,t)(u_{z}-v_{z})|u_{z}-v_{z}|
+H(z,t)\frac{d u_{z}}{dt}


+F(z,t)\int\limits_{0}^{t}\Psi\left(\tau,t,v_{z}(\tau),\frac{dv_{z}}{dt}(\tau)\right) d\tau -P(z,t)

Dove:

\begin{array}{l}
M(z,t)=\frac{l(z)}{1+h(z)+2\sqrt{t}f(z)}\\
\\
G(z,t)=\frac{g(z)}{1+h(z)+2\sqrt{t}f(z)}\\
\\
H(z,t)=\frac{3 h(z)+2\sqrt{t}f(z)}{1+h(z)+2\sqrt{t}f(z)}\\
\\
F(z,t)=\frac{f(z)}{1+h(z)+2\sqrt{t}f(z)}\\
\\
P(z,t)=\frac{g}{1+h(z)+2\sqrt{t}f(z)}
\end{array}

Ora però è il momento di iniziare a pensare alla risoluzione del problema vero e proprio. In questo caso si procederà con una tecnica di risoluzione approssimata analitica, invece che puramente numerica dal momento che per gestire la memoria introdotta dal termine integrale nell'equazione sarebbe stato necessario scrivere codice da zero ed implementare a mano metodi numerici ad hoc per l'equazione. Quindi almeno in questa sere per la simulazione si preferisce illustrare un approccio che non sia la classica variazione su tema dei vari Runge-Kutta e che non si veda esattamente tutti i giorni. L'approccio in questione è appunto il "Variational Iteration Method". Vediamo però un po' come funziona: costruiamo a partire dall'ultima relazione che abbiamo ricavato una formulazione variazionale del problema, ed un funzionale di correzione. In sostanza a questo punto lo scopo è cercare di ricavare una formula iterativa a partire dall'equazione originaria, che consenta per passi successivi di arrivare alla soluzione. Ad ogni passo la soluzione verrà migliorata, e man mano che si procede, ci si muove verso un certo punto di minimo: la soluzione esatta. Si spera inoltre che il metodo in questione sia convergente e stazionario. Molto più semplice da scrivere che da spiegare. Ora riscriviamo l'equazione in modo da eguagliarla tutta a 0.

\frac{dv_{z}}{dt}-
M(z,t)(u_{z}-v_{z})
-G(z,t)(u_{z}-v_{z})|u_{z}-v_{z}|
-H(z,t)\frac{d u_{z}}{dt}


-F(z,t)\int\limits_{0}^{t}\Psi\left(\tau,t,v_{z}(\tau),\frac{dv_{z}}{dt}(\tau)\right) d\tau +P(z,t) = 0

Per maggiore chiarezza per adesso scriviamo semplicemente

v' - V(t,z,v)-F(z,t)\int\limits_{0}^{t}\Psi(\tau,t,v,v')d\tau = 0

Ora però dobbiamo risolvere per la posizione lungo l'asse z, per cui si sostituisce v con z':

z'' - V(t,z,z')-F(z,t)\int\limits_{0}^{t}\Psi(\tau,t,z',z'')d\tau = 0

A questo punto però dal momento che non è strettamente necessario ricondurci ad un sistema del primo ordine per ora lasciamo le cose come stanno senza aggiungere equazioni ausiliarie.Una volta scritta in forma così generale ed elementare l'equazione, scriviamo adesso il funzionale di correzione che adopereremo per trovare la soluzione approssimata:

\xi_{n+1}(t)=\xi_{n}(t)+\int\limits_{0}^{t}\lambda(s)\left[\xi_{n}''(s) - V(s,\xi_{n},\xi_{n}')-
F(\xi_{n},s)\int\limits_{0}^{s}\Psi(\tau,s,\tilde{\xi}_{n}',\tilde{\xi}_{n}'')d\tau \right]ds

Ove i λ(s) sono i moltiplicatori generalizzati di Lagrange (per adesso non noti). Chi ha fatto degli esami (o letto qualcosa) di controllo ottimo o ottimizzazione e programmazione dinamica sà bene di cosa sto parlando. Questi verranno scelti in modo ''ottimo'' rispetto alle variazioni di ξn, cioè: δξn.
Ora se scriviamo la variazione del funzionale di correzione si ottiene banalmente che:

\delta\xi_{n+1}(t)=\delta\xi_{n}(t)+\delta\int\limits_{0}^{t}\lambda(s)\left[\xi_{n}''(s) - V(s,\xi_{n},\xi_{n}')-
F(\xi_{n},s)\int\limits_{0}^{s}\Psi(\tau,s,\tilde{\xi}_{n}',\tilde{\xi}_{n}'')d\tau \right]ds

Ora dal momento che stiamo considerando variazioni limitate, il termine che contiene Ψ(.) sparisce e della funzione di cui sopra, e resta soltanto:

\delta\xi_{n+1}(t)=\delta\xi_{n}(t)+\delta\int\limits_{0}^{t}\lambda(s)\left[\xi_{n}''(s) - V(s,\xi_{n},\xi_{n}')\right]ds

Ora spezziamo l'integrale in due pezzi:

\delta\xi_{n+1}(t)=\delta\xi_{n}(t)+
\delta\int\limits_{0}^{t}\lambda(s)\xi_{n}''(s)ds-
\delta\int\limits_{0}^{t}\lambda(s)V(s,\xi_{n},\xi_{n}')ds

Ora sviluppiamo con l'integrazione per parti il primo termine integrale per due volte:

\delta\xi_{n+1}(t)=\delta\xi_{n}(t)+
\left.\lambda(s)\right|_{s=t}\delta\xi_{n}'(s)-\left.\lambda'(s)\right|_{s=t}\delta\xi_{n}(s)+
\int\limits_{0}^{t}\lambda''(s)\delta\xi_{n}(s)ds
-\delta\int\limits_{0}^{t}\lambda(s)V(s,\xi_{n},\xi_{n}')ds

riscrivendo un po' i primi termini mettendo in evidenza δξn otteniamo:

\delta\xi_{n+1}(t)=\left(1-\left.\lambda'(s)\right|_{s=t}\right)\delta\xi_{n}(t)+
\left.\lambda(s)\right|_{s=t}\delta\xi_{n}'(s)+
\int\limits_{0}^{t}\lambda''(s)\delta\xi_{n}(s)ds
-\delta\int\limits_{0}^{t}\lambda(s)V(s,\xi_{n},\xi_{n}')ds

Ora procediamo a definire le condizioni di stazionarietà della variazione del funzionale di correzione (questo è dovuto al fatto che rispetto ai λ stiamo cercando la variazioni minima, quindi imponiamo la variazione nulla). La cosa consiste nel considerare trascurabile il termine integrale con la funzione V, e quindi imporre come terna di condizioni semplicemente:

\left\{
\begin{array}{l}
\left(1-\left.\lambda'(s)\right|_{s=t}\right) = 0\\
\\
\left.\lambda(s)\right|_{s=t} = 0\\
\\
\lambda''(s)=0
\end{array}
\right.

che risolte, danno luogo al moltiplicatore di Lagrange:

\lambda(s)=(s-t)

ed al funzionale di correzione:

\xi_{n+1}(t)=\xi_{n}(t)+\int\limits_{0}^{t}(s-t)\left[\xi_{n}''(s) - V(s,\xi_{n},\xi_{n}')-
F(\xi_{n},s)\int\limits_{0}^{s}\Psi(\tau,s,\xi_{n}',\xi_{n}'')d\tau \right]ds

Teoricamente si potrebbe andare a smucinare nel termine integrale con V(.), ma ci si rende velocemente conto che non ha molto senso perchè non ha termini lineari in ξn ed i coefficienti sono per lo più funzioni implicite, pertanto in ogni caso non ne uscirebbero fuori dei termini che vadano ad influire sull'impostazione delle condizioni.

Ogni metodo iterativo che si rispetti però ha bisogno di qualcosa da cui partire. Il nostro metodo non fa certo eccezione. Guarda caso abbiamo già a disposizione un po' di dati per poter formulare un'approssimazione della scelta iniziale della soluzione approssimata. Se ci ricordiamo delle vecchie simulazioni con il modello lineare, e della soluzione esplicita dell'equazione differenziale associata, ci rendiamo presto conto che il gioco è praticamente fatto: la velocità è stabile e tende a quella del vento molto velocemente, la posizione è praticamente definita da una legge lineare.
Ecco quindi che praticamente abbiamo che:

\xi_{0}(t) = z_{0}+v_{z}(0)t

Arrivati a questo punto però volendo si può usare un piccolo trucco, dal momento che è immediatamente evidente che la funzione

\xi_{0}(t) = z_{0}+u_{z}t

nel caso della velocità del vento costante è quella che fà si che si raggiunga immediatamente l'equilibrio e che le iterazioni successive non modifichino in alcun modo il risultato.

Dopo numerosi test cercando di preservare maggiormente l'equazione però si giunge alla conclusione che un'equazione così complicata non possa essere gestita in modo conveniente da un metodo analitico, sopratutto a causa delle funzioni implicite presenti.
Per la soluzione numerica si procederà nell'articolo successivo con il metodo della Collocazione.

giovedì 18 settembre 2008

La simulazione (parte I)


Eccoci di nuovo qui dopo una breve pausa (causa esame di Sistemi di Controllo (mentale della popolazione) a Più Variabili). Nell'ultimo articolo relativo alla modellistica del comportamento di una particella singola avevamo alla fine di tutto elaborato un modello completo del comportamento di una particella immersa in un fluido incomprimibile con un flusso laminare.
Ora non resta che mettere insieme i risultati ricavati ed esposti nei vari articoli, e infilarli tutti nel modellino originario per potersene avvalere in fase di simulazione.







Ricordiamo per praticità che il modello in questione è definito dalla seguente:


m_{p}\frac{dv_{z}}{dt}=\frac{6\pi \mu(T(z)) R_{eq}\chi}{C_{c}(R_{eq})}\cdot (u_{z}-v_{z})+
V_{p}\rho(z,T(z))\frac{d u_{z}}{dt}+\frac{V_{p}}{2}\rho(z,T(z))\left(\frac{d u_{z}}{dt}-\frac{d v_{z}}{dt}\right)+


+6R_{eq}^{2}\sqrt{\pi\mu(T(z)) \rho(z,T(z))}\int\limits_{0}^{t}{\frac{\frac{du_{z}}{d\tau}-\frac{dv_{z}}{d\tau}}{\sqrt{t-\tau}}d\tau}+\sum\limits_{i}Fe_{i}

con μ viscosità del mezzo, ρ densità del mezzo, Cc Slip Correction Factor, Req il raggio equivalente della particella, mp massa della particella (considerando il galleggiamento), Vp volume della particella, uz velocità del vento lungo l'asse z, vz velocità della particella lungo l'asse z, T temperatura del mezzo e χ il fattore dinamico di forma.
Arrivati a questo punto, abbiamo precedentemente ricavato ed enunziato ogni relazione possibile per poter calcolare i parametri della formula a partire da pressione, temperatura ed umidità relativa. Ci si basa su queste grandezze perchè sono quelle di maggior interesse fornite dalle misurazioni delle sonde metereologiche, dal mommento che l'intenzione è quella di operare una simulazione numerica in un ambiente che abbia dei profili di pressione, umidità relativa e temperatura reali e non approssimati ai minimi termini (anche se le cose variano veramente di poco).
Iniziando dai parametri più semplici, vediamo che per ottenere la viscosità μ, basta usare la relazione di Sutherland:

\mu = 18.27\cdot 10^{-8}\frac{411.15}{T(z)+120}\sqrt{\left(\frac{T(z)}{291.15}\right)^{3}}

Qui non c'è molto da aggiungere, dal momento che basta sostituire la temperatura all'altezza z, e si ricava banalmente la viscosità dell'aria all'altrzza z.
Per la densità c'è da macchinare un poco con il vapore e le formule di Van der Waals, infatti occorre risolvere le seguenti due equazioni di terzo grado (indipendenti) rispettivamente per ρa e ρv:

\left(p(z)-e(z,T)\cdot u(z)+a\frac{\rho_{a}^{2}}{M^{2}}\right)\cdot(1-\frac{\rho_{a}}{M}\cdot b)=\rho_{a}\frac{R}{M}T

con b = 3.64·10^(-5)[m³/mol] ed a = 0.001358 [hPa (m^6)/mol²] e:

\left(e(z,T)\cdot u(z)+a\frac{\rho_{v}^{2}}{M^{2}}\right)\cdot(1-\frac{\rho_{v}}{M}\cdot b)=\rho_{v}\frac{R}{M}T

con b = 30.52·10^(-6)[m³/mol] ed a = 0.005536 [hPa (m^6)/mol²] ed e(z,T) definito dal modello di Murhpy-Koop:

\log(100\cdot e) = 54.842763 - \frac{6763.22}{T(z)} - 4.21\cdot\log(T(z))+ 0.000367T(z) + \tanh{(0.0415(T(z) - 218.8))}\cdot(53.878 - \frac{1331.22}{T(z)} - 9.44523\cdot\log(T(z)) + 0.014025 T(z))

che formulato in questo modo fornisce la pressione di saturazione del vapore sull'acqua in [hPa] a partire da una temperatura in [K].
La densità cercata, quella da mettere nell'equazione differenziale per il moto della particella sarà data dalla somma dei sue risultati trovati (ρa + ρv = ρ(z)).
Fin qui nessun problema, nè numerico, nè analitico (le formule esplicite per le radici di un'equazione di terzo grado esistono anche se sono un po' complicate). Unica accortezza per chi volesse usare le formule esplicite: innanzitutto assicuratevi di usare la soluzione giusta (quella positiva), secondo tutto attenzione all'ordine in cui mettete le numerose operazioni (potreste aver bisogno di rigirarvi un po' la formula) cercando di minimizzare la propagazione dell'errore. In questo caso basta un metodo di Newton-Raphson non ammortizzato per avere una buona e veloce convergenza.

Ora ultimo ma non per importanza il Cc. Dall'analisi del moto Browniano di una particella, abbiamo ricavato in quest'articolo una relazione tra lo Slip Correction Factor ed il cammino libero medio:

\lambda_{p} = \frac{C_{c}}{6\mu}\sqrt{\frac{2\rho k T R_{p}}{3}}

Ancora prima però in quest'altro articolo avevamo proposto una formulazione dello Slip Correction Factor in funzione del cammino libero medio:

C_{c}=1+\frac{\lambda}{R_{p}}\left[1.257+0.4\cdot e^{-\frac{1.1R_{p}}{\lambda}}\right]

Sostituento la prima relazione nella seconda otteniamo:

C_{c}=1+\frac{\frac{C_{c}}{6\mu}\sqrt{\frac{2\rho k T R_{p}}{3}}}{R_{p}}\left[1.257+0.4\cdot e^{-\frac{1.1R_{p}}{\frac{C_{c}}{6\mu}\sqrt{\frac{2\rho k T R_{p}}{3}}}}\right]

Ora questa brutta bestia di equazione in Cc sfido chiunque a risolversela a mano ed a tirare fuori un'espressione esplicita per Cc. Fortuna nostra che tutti o quasi abbiamo un pc che fa il lavoro per noi in modo numerico. Ora questa stronza di equazione se non si prendono le dovute precauzioni manda in pappa (non lo fa convergere dove vogliamo noi) il nostro adorato metodo di Newton-Rahpson. Innanzitutto se lo si fa girare con un risolutore commerciale (MATLAB, Mpale, Mathematica) occorre stringere assai le tolleranze rispetto ai valori di default: per esempio per MATLAB qualcosa come 10^(-16) rispetto al 10^(-6) di default. Sostanzialmente questi numeretti dicono una serie di cose all'algoritmo:
1) quanto deve essere piccola la funzione per poter dire che vale effettivamente zero e terminare la ricerca dello zero della funzione;
2) quanto deve essere piccola la variazione per passo dell'algoritmo, dello zero che si sta trovando, per poter dire che ormai ci si sta stabilizzando ad un valore, e che quindi non vale la pena di continuare ad iterare, perchè tanto il valore di cui già si dispone non cambierà più di tanto.
Ricordo per semplicità che il metodo di Newton-Raphson classico per la risoluzione del problema f(x) = 0, è impostato come segue:

x(0) = x_{0}


x_{n+1}=x_{n}-\frac{f(x_{n})}{f'(x_{n})}

dove f'(xn) è la derivata rispetto a x di f(x), calcolata in xn, ed x0 è ovviamente è la stima iniziale dello zero della funzione, per il contro caso del Cc è buona cosa metterlo pari ad 1.
Altra accortezza (che però non necessariamente è da mettere in pratica) è la valutazione dello Jacobiano (derivata della funzione se stiamo nel caso monodimensionale): spesso i metodi iterativi per la risoluzione di equazioni, per andare un po' più veloci e fare meno conti risparmiano sul calcolo della derivata. Insomma per più di qualche passo molti algoritmi sostanzialmente non ricalcolano la derivata della funzione e continuano ad usare il valore trovato qualche iterazione fà. Questa però è un'arma a doppio taglio:
1) Dal momento che non dobbiamo far girare il risolutore da solo fine a sè stesso ma dobbiamo integrare il tutto in un risolutore numerico di equazioni differenziali (un sacco di altre iterazioni e conti), per ogni passo di integratore numerico, occorrerà fare x passi del metodo di Newton, quindi se facciamo meno calcoli per ogni passo, alla fine la simulazione ci metterà molto di meno, quindi è buona cosa (se si può) evitare di calcolarsi la derivata ad ogni passo.
2) Se non calcoliamo la derivata ad ogni passo potremmo perdere in precisione, cosa questa, non certo auspicabile.
Pertanto occorrerebbe trovare un buon compromesso tra le due specifiche contrastanti, specialmente se il risolutore numerico utilizzato è già un po' pesantello di suo.
Vediamo un po' ora che cosa succede setralasciamo gradienti di pressione e tutte le altre schifezze che ci sono nel modello e ci limitiamo a simulare:

\frac{dv_{z}}{dt}=-\frac{(6\pi\mu \cdot R_{eq}\Chi)}{(C_{c} V_{p} (\rho_{p}-\rho_{a}))}\cdot (v_{z}-u_{z})-g;

In questo caso si è scelto l'asse z positivo verso l'alto (opposto rispetto alla formulazione originaria, ma per rimediare basta cambiare il segno a v ed a dv/dt)
con condizioni iniziali v0=-60 [m/s] (verso il basso), z0=5000 [m] ed uz=6 [m/s].
Uniche due accortezze prima di lanciarci nella simulazione:
1) Usare un metodo di integrazione implicito (se usate MATLAB ode23tb, o un'altro risolutore per problemi stiff) come per esempio i vari Runge-Kutta impliciti (quadrature di Radau e Lobatto) o eulero implicito, o metodo dei trapezi implicito, perchè a causa della grande variazione della velocità iniziale in tempi brevissimi, i metodi espliciti (per chi usa MATLAB ode45 et similia) con passo di integrazione adattativo, tendono ad inchiodare velocemente ed all'inizio, e risultano quindi inutilmente lenti.
2) Riportare l'equazione differenziale del secondo ordine ad un sistema del primo ordine, facendo la sostituzione dz/dt = v, per ottenere invece della prima equazione, le due equazioni seguenti:

\left\{ \begin{array}{l}
\frac{\displaystyle dv_{z}}{\displaystyle dt}=-\frac{\displaystyle (6\pi\mu(z) \cdot R_{eq}\Chi)}{\displaystyle (C_{c}(z) V_{p} (\rho_{p}-\rho_{a}(z)))}\cdot (v_{z}-u_{z})-g\\
\\
\frac{\displaystyle dz}{\displaystyle dt}=v_{z}
\end{array} \right.

Ora mettendo dentro vari numeretti, ci possiamo fare le nostre simulazioni (tralasciando per ora la forza di Basset, il gradiente di pressione e la massa apparente della particella) ottenendo i seguenti risultati:
Per le velocità :

e per le posizioni:

Con gli zoom delle regioni di interesse per le due grandezze:
Per le velocità:

e per le posizioni:

Come si può vedere dalle legende, sono stati simulati i comportamenti di varie schifezze, le cui particelle ovviamente tutte con dimensione intorno al nanometro. La sigla HDPE (Hihg Density PolyEthilene) sicuramente non è nuova a chi abbia letto due cose sull'argomento Morgellons.
Le dimensioni sono state scelte come estremamente piccole (sostanzialmente con un fibra dello spessore del nm, possiamo infilzare una particella virale, come una cigliegia con un ago) appunto per minimizzare il fenomeno della separazione della scia in varie fasi. Insomma se spargiamo delle schifezze, ci dobbiamo assicurare che queste con il vento non si allontanino troppo dalla scia di vapore per non dare l'effetto a scia multi-stratificata che si vedrebbe da terra, e si mascherino bene tra le particelle di ghiaccio e di vapore. Come si vede appunto dal grafico, la dispersione è minima, anche se non nulla. Pertanto occorrono delle particelle non troppo grandi (altrimenti non rimarrebbero in aria per troppo poco tempo contrastando con l'ipotesi della durata eccessiva delle scie) nè troppo piccole (altrimenti se ne andrebbero in giro con il vento senza mai cadere a terra e provocando lo spiacevole e vistoso effetto della scia multi-stratificata). Come avremo modo di dimostrare però in seguito, risolvendo le equazioni di condensazione, queste dimensioni però stridono con l'ipotesi di rilevamento a terra di ingenti quantità di particelle nanometriche dopo tempi di permanenza in aria compatibili con l'ipotesi della grande durata delle scie chimiche (questo è dovuto al fatto che la condensazione e la flocculazione tendono a spostare a destra e comprimere la distribuzione di raggio delle particelle in funzione del loro numero con l'avanzare del tempo, facendo quindi sì che dopo un po' non si trovino quasi più particelle al di sotto di un certo diametro).
Nella prossima parte invece vedremo di condurre delle simulazioni più dettagliate considerando tutti i termini che compaiono nell'equazione e vedremo come fare ad impostare la risoluzione di un'equazione integro-differenziale che per giunta ha pure un kernel di integrazione assai brutto (guardate un po' che succede se tau è pari proprio a t, all'estremo superiore di integrazione).

Nota: nel mettere i dati prelevati dalla sonda nel modello, occorre fare attenzione alle unità di misura: la temperatura va convertita da [C°] in [K], l'umidità relativa va divisa per 100, la pressione e le altezze, non vanno modificate e possono essere usate tranquillamente nei modelli così come sono.