Differenze finite su domini con confini irregolari


11

Qualcuno può aiutarmi a trovare i libri sulle soluzioni numeriche (differenza finita e metodi di Crank – Nicolson) di Poisson ed equazioni di diffusione tra cui esempi sulla geometria irregolare, come un dominio costituito dall'area tra un rettangolo e un cerchio (in particolare libri o collegamenti sugli esempi di codice MATLAB in questo caso)?


4
Per quale scopo? Introduzione per gli studenti all'inizio? E cos'è una geometria irregolare nel tuo caso? Domini con angoli rientranti?
shuhalo,

@Martin: sono un biginner in questo campo. Ne ho bisogno per risolvere l'equazione di poisson usando metodi iterativi su domini di forma irregolare, in particolare thoes con fasci curvi (es. Dominio circolare 2D)
liona,

2
@last Modifica il titolo e il corpo della domanda per chiarire cosa stai chiedendo. Specifica i tipi di equazioni che ti interessano. Sei interessato a discretizzazioni, risolutori algebrici o entrambi? Ti interessa la differenza finita rispetto agli elementi finiti ( scicomp.stackexchange.com/questions/290/… )? La tua domanda attuale è estremamente ampia ed è difficile da trovare nella ricerca.
Jed Brown,

@JedBrown: voglio risolvere l'equazione di poisson usando la differenza finita su un dato dominio e condizione al contorno.
Liona,

infine, modifica il corpo della tua domanda per includere le informazioni in entrambi i tuoi commenti fino ad oggi. Inoltre, come ha detto JedBrown, modifica anche il titolo della tua domanda in modo che sia più facile per le persone cercare la tua domanda e più facile per le persone giudicare se la domanda potrebbe essere interessante o applicabile a loro.
Geoff Oxberry,

Risposte:


3

La chiave per far funzionare uno schema di differenze finite su una geometria irregolare è avere una matrice di "forma" con valori che denotino punti all'esterno, all'interno e al limite del dominio. Supponiamo che abbiamo una forma come questa:

000000000000011111111110001222222100000122221000000012210000000001100000000000000000

Il vero dominio (dove sono tutte le voci diverse da zero della matrice) forma un triangolo rivolto verso il basso. I 1 rappresentano i punti sul confine, mentre i 2 rappresentano i punti interni (di solito non noti) Possiamo assegnare i numeri di nodo come segue:

0000000000000-1-1-1-1-1-1-1-1-1-1000-1123456-100000-178910-10000000-11112-1000000000-1-100000000000000000

Qui, -1 rappresentano le posizioni al contorno. Quindi, è possibile eseguire uno schema di differenze finite su tutte le voci nella matrice, ma utilizzare un'istruzione if per eseguire lo schema solo sui nodi interni (da 1 a 12). Questo approccio non è il modo più efficiente per farlo, ma porterà a termine il lavoro ... se puoi permetterti la memoria, potrebbe essere utile archiviare le voci (i, j) di tutti i nodi interni ed eseguire un ciclo for solo su quei nodi.

Per creare direttamente la geometria, è possibile eseguire una delle due operazioni seguenti:
1. Creare manualmente un'immagine in bianco e nero e importarla nel programma (più semplice da implementare, ma impossibile perfezionare la risoluzione spaziale dx o dy).
2. Scrivere un codice che crei rappresentazioni discrete delle forme di base desiderate per qualsiasi risoluzione spaziale scelta (più difficile da implementare, ma più robusta per schemi di differenze finite generali di qualsiasi risoluzione spaziale dx o dy).

Se vuoi saperne di più su come farlo, potresti considerare di guardare questi video:
Corso di computer grafica NPTEL, Video 2 (Grafica raster)
Corso di computer grafica NPTEL, Video 3 (Grafica raster, continua) Dai
un'occhiata e fammi sapere se questo risponde alla tua domanda.


C'è un modo per migliorare il formato dei valori della matrice che ho pubblicato ... non sembra proprio come vorrei che fosse
Paul

Sì, è possibile utilizzare MathJax e inserirli in un ambiente array.
David Ketcheson,

Hai ragione ... sembra molto più bello con MathJax. Grazie per il suggerimento :)
Paul

@Paul: grazie per la tua semplice soluzione! Tuttavia, come posso calcolare i punti limite per ottenere punti interni per la regione chiusa tra rettangolare e triangolo o (la regione chiusa tra rettangolare e cerchio)?
Liona,

Hai una foto della forma del dominio che vuoi modellare? È sempre più facile vederlo, che descriverlo solo a parole :)
Paul


2

Vorrei suggerire i seguenti documenti:

Il metodo delle differenze finite su griglie irregolari arbitrarie e la sua applicazione nella meccanica applicata - Liszka Orkisz

http://www.sciencedirect.com/science/article/pii/0045794980901492

Tecniche a differenza finita per griglie variabili - Jensen

http://www.mendeley.com/research/finite-difference-techniques-variable-grids-7/

Risolvere equazioni paraboliche e iperboliche con il metodo della differenza finita generalizzata - Benito Urena Gavete

http://www.sciencedirect.com/science/article/pii/S037704270600687X

Fondamentalmente descrivono come generare differenze finite stencial per mesh non strutturate / irregolari. Non conosco nessun libro che tratti questo argomento in modo approfondito, ma il libro di Randall LeVeque potrebbe avere qualcosa a riguardo. Ecco il link per la pagina web dell'autore, che contiene alcuni m-file di Matlab per differenze finite.

http://faculty.washington.edu/rjl/booksnotes.html


1

Penso che rendere la mesh adatta al limite e quindi una deviazione dalla mesh quadrata standard di fdm sia probabilmente una soluzione, ma ha comunque serie implicazioni sull'uso di algoritmi di alto ordine - difficile se non impossibile. Ho adottato un approccio diverso, ovvero mantenere la griglia rettangolare sopra la geometria del contorno curvo, creare algoritmi di alto ordine, interpolare dal confine per impostare i valori "al di fuori" della geometria e questo è tutto. abbiamo raggiunto precisioni nelle geometrie di prova delle sfere concentriche di ~ 1e-12 con questo metodo usando un algoritmo di ordine 8. se vai su Google "Edwards, bordo curvo fdm" troverai riferimenti al mio lavoro.


0

Sarebbe possibile per te utilizzare il perfezionamento della mesh adattiva? Una rapida ricerca su Google mostrerà molti link. L'AMR viene utilizzato, ad esempio, nella fluidodinamica per modellare il flusso oltre forme complicate; così come molte altre applicazioni. Ecco un esempio di risoluzione di sistemi di leggi di conservazione iperbolica che sorgono nella formazione stellare. Le geometrie sono molto complesse. La prima parte del documento è un bel tutorial. http://www.mpa-garching.mpg.de/lectures/ADSEM/SS05_Homann.pdf


0

Questa domanda apre una lattina di vermi, come è reso evidente dalla varietà di risposte fornite. Molti di questi fanno punti utili, ma una risposta davvero utile prenderebbe in considerazione considerazioni che non sono state sollevate. Oltre a precisare l'esatta natura della geometria, sarebbe utile sapere a) Di quale tipo di precisione hai bisogno? b) Vuoi rimanere con maglie quadrate regolari? c) Quanto sei disposto a investire nell'apprendimento delle nuove tecnologie?

Le maglie quadrate regolari rendono difficile definire con precisione il limite, in modo che molte persone passino a maglie conformi. Le maglie conformi con connettività rettangolare hanno difficoltà ad adattarsi a forme molto irregolari, quindi molte persone adottano maglie non strutturate (triangoli / tetraheda o più generali).

Per tutti i dati che non hanno una struttura cartesiana regolare, è difficile valutare i derivati, quindi molte persone riformulano i loro problemi in forma integrale, il che porta a metodi ad elementi finiti / a volume finito (che POSSONO ottenere un ordine elevato). Esistono metodi senza mesh. Esistono metodi con elementi limite. Esistono metodi al contorno immersi. Esistono metodi a celle di taglio. Spesso esiste un metodo che è popolare in alcune applicazioni ma non in altre, per ragioni per lo più storiche.

Ti auguro buona fortuna nel navigare in questo labirinto, ma devi capire che non esiste una soluzione unica per la tua domanda.

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.