Uso ottimale della suddivisione di Strang (per l'equazione di diffusione della reazione)


9

Ho fatto una strana osservazione mentre calcolavo la soluzione per una semplice equazione di diffusione della reazione 1D:

ta=2x2aab

tb=ab

tc=a

Il valore iniziale di è una costante ( b ( 0 , x ) = b 0 ) e mi interessa solo l'integrale su a da 0 a 1 ( 1 0 a ( t , x ) d t ). Lo scopo di c e l'equazione bb(0,x)=b0a0101a(t,x)dtcè proprio quello di valutare questo integrale.tc=a

Ho usato uno schema di divisione Strang per l'accoppiamento tra diffusione e reazione (una reazione a mezzo passo, poi una diffusione a passo intero e poi ancora una reazione a mezzo passo), uno schema di Crank Nicholson per la diffusione e una soluzione analitica per la reazione ( compresa l'equazione ).tc=a

Poiché un passaggio della soluzione analitica era più di un fattore 3 più lento di un passaggio dello schema di Crank Nicholson, ho cercato di fare più di un passaggio di Crank Nicholson per ogni passaggio di reazione. Speravo di cavarmela con meno passaggi dello schema di scissione Strang, in modo da essere complessivamente più veloce.

Tuttavia, si può osservare l'effetto opposto, vale a dire che sono necessari molti più passaggi per lo schema di suddivisione Strang se si utilizza più di un passo Crank Nicholson. (Mi interessa solo l'accuratezza dell'integrale rispetto a , che sembra convergere più velocemente di un se stesso.) Dopo essermi domandato per qualche tempo, ho notato che lo stesso effetto si verifica anche per b ( t , x ) = b 0 = 0 e che capisco persino perché per questo caso. Il punto è che se eseguo esattamente un passo di Crank Nicholson, lo schema complessivo si trasforma in una regola trapezoidale (se b ( t ) = 0 ).aab(t,x)=b0=0b(t)=0

Quindi se trattassi come parte della fase di diffusione, aumentando il numero di passi manovella Nicholson (probabilmente) non porterebbe a ridurre il grado di precisione (come osservato). Ma questo sembra vanificare lo scopo di usare una soluzione analitica per la parte (non lineare e potenzialmente molto rigida) del sistema.tc=a

Quindi, ecco la mia domanda: esiste un modo migliore di trattare nel contesto di una scissione Strang, piuttosto che alla trattare come parte della fase di reazione, o per trattare come parte della fase di diffusione. Voglio evitare di essere "costretto" a usare esattamente un passo di Crank Nicholson per la diffusione. (Ad esempio in 3D, preferirei risolvere la diffusione analiticamente con una FFT invece di usare Crank Nicholson. Naturalmente posso anche combinare FFT con Crank Nicholson, quindi non è un grosso problema.)tc=a


In people.maths.ox.ac.uk/dellar/OperatorLB.html , un effetto simile sembra essere descritto. La conclusione è che è fondamentale utilizzare Crank Nicholson invece della soluzione esatta. Quindi forse la risposta alla mia domanda è un semplice no.
Thomas Klimpel,

Qualcosa sembra sbagliato nelle tue equazioni. non appare nei primi due rendendo l'accoppiamento unidirezionale e ciò significa che è possibile calcolare c in qualsiasi t come fase di post-elaborazione. cct
Bill Barth,

@BillBarth Ho cambiato la domanda per chiarire il ruolo di . Quindi c è solo un mezzo per calcolare 1 0 a ( t , x ) d t . Per favore fatemi sapere se avete qualche suggerimento su come calcolare questo integrale in modo più accurato (rispetto a quello che ottengo dalla combinazione di divisione di Strang e Crank Nicholson sopra descritti), potenzialmente utilizzando una fase di post-elaborazione. cc01a(t,x)dt
Thomas Klimpel,

Ormai è passato molto tempo, ma hai riconosciuto che questo sistema di equazioni può essere scritto come PDE parabolico in con un termine di reazione esponenziale? Immagino che mi chiedo se vuoi davvero risolvere questo sistema a 3 variabili invece di uno semplificato. c
Bill Barth,

@BillBarth Sarei interessato a sapere come questo sistema può essere scritto come PDE parabolico con un termine di reazione esponenziale. La velocità della soluzione di questo modello è un fattore limitante durante la calibrazione del modello (che può richiedere diverse ore), anche se l'accuratezza usata rispetto all'integrazione temporale è abbastanza lontana dalla piena convergenza.
Thomas Klimpel,

Risposte:


6

Scriverò questo come una risposta, anche se non risponde direttamente alla domanda.

2ct2=2x2ct+btbt=(ct)b
t(ct2cx2b)=01b(bt)=ct
t
ct2cx2=b+A(x)
A(x)=a02c0x2b0
0t1b(x,t)(b(x,t)t)dt=0tc(x,t)tdt
lnb(x,t)lnb0(x)=c(x)+c0(x)
lnbb0=c+c0
b=b0ec0c
c
ct2cx2=b0ec0c+A(x)

ccc0c0(x)=0

ct=2cx2+a0(1ec)b0
c>c0

b0=0

t=1c(x,1)


ca

Nessun problema. Mi stavo assillando dopo il nostro scambio iniziale di commenti. Spero sia utile
Bill Barth,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.