Simulazione di corda scalabile di precisione arbitraria


12

Sto cercando di simulare un oggetto corda. La formulazione che capisco è una matrice di particelle, collegate da molle. Queste molle hanno valori k molto grandi, in modo che la linea si deformi, ma si allunghi molto poco. Ho concluso che risolvere questo come una funzione del tempo non è possibile in forma chiusa perché una corda è una generalizzazione di un pendolo (che non è una forma chiusa).

Accontentandosi di soluzioni approssimative, quindi. Ho bisogno di un algoritmo che si ridimensiona bene. Esempi che ho visto usare l'integrazione euleriana esplicita o implicita per spostare le particelle. Questo non si ridimensiona.

Per vedere questo, considera una corda con n nodi. Applicare una grande forza ad un'estremità. Poiché la fune non deve allungarsi molto, l'accelerazione all'altra estremità deve essere immediata.

Tuttavia, con l'integrazione euleriana, per ottenere una forza dall'altra parte sono necessari n passaggi. Noto un decadimento esponenziale: se il primo nodo accelera di una certa quantità, i nodi adiacenti accelerano di meno (se accelerano alla stessa velocità, l'algoritmo non è stabile). Di conseguenza, i nodi adiacenti a quel nodo accelerano ancora più lentamente!

Quindi, per n nodi di distanza, l'accelerazione è quasi trascurabile. Questo porta a una corda che si allunga in modo significativo. Se si desidera solo raddoppiare la risoluzione della simulazione, è necessario improvvisamente adottare misure temporali di decine o centinaia di volte più piccole per ottenere un comportamento simile.

Sto cercando un metodo semplice che risolva questo problema, vale a dire che le simulazioni a risoluzione più elevata convergono alla soluzione con un solo calcolo extra del tempo polinomiale. È disponibile una libreria completa di tecniche di matrice e algebra lineare. La mia conoscenza della meccanica classica è molto buona e conosco alcune analisi numeriche.


vsdt

@dmckee, sì, per favore fallo! In risposta al tuo secondo commento, idealmente la forza dovrebbe propagarsi efficacemente all'infinito in qualsiasi momento.
imallett,

Bene, la velocità del suono è probabilmente piuttosto alta ... ma se i tuoi passi temporali sono inferiori a 10 ms, quella lunghezza di propagazione è ancora solo di pochi metri.
dmckee --- ex-moderatore gattino

Sono curioso di sapere se i suggerimenti che hai ricevuto qui sono stati utili. Suppongo che la mancanza di accettazione significhi che stai ancora seguendo o che nessuna delle risposte è esattamente ciò che speravi, ma ti hanno mostrato una via da seguire?
dmckee --- ex gattino moderatore

Sono stati utili, ma molte cose sono successe contemporaneamente. Ho chiarito le mie intenzioni su alcune risposte e quando avrò un attimo di respiro potrò darle seguito. Grazie,
imallett,

Risposte:


4

Prima di tutto, come ha detto Jed Brown , dovresti usare uno schema implicito di time-stepping poiché il tuo problema sembra piuttosto rigido, o almeno uno schema più stabile, ma ugualmente semplice come l' integrazione di Leapfrog o l' integrazione di Verlet .

Per quanto riguarda il problema fisico, quanto sei interessato allo stretching? Invece di collegare le particelle con molle rigide, è possibile utilizzare vincoli olonomi , ad esempio assicurarsi che la distanza tra le coppie di particelle rimanga costante. I vincoli devono essere risolti per ogni passaggio temporale e esistono algoritmi efficienti esattamente per la configurazione, ovvero una lunga catena di vincoli collegati. Vedi, ad esempio, questo documento .

Solo per curiosità, stai usando anche potenziali angolari lungo la fune per modellarne la flessibilità?


Anche usando il passo temporale implicito (che aiuta), si verifica lo stretching. In effetti, sono interessato a allungare solo nella misura in cui sto cercando di liberarmene. La matematica nel documento è praticamente sopra la mia testa, ma sto studiando il codice fortran. Non usare ancora vincoli angolari di alcun tipo.
imallett,

@IanMallett: Ok, allora i vincoli sono la strada da percorrere, cioè non c'è alcun allungamento con i vincoli.
Pedro,

5

Hai un sistema rigido con l'attuale formulazione. Lo stretching dinamico e la vibrazione nella corda sono (presumibilmente) poco interessanti, ma controllano il passo temporale esplicito. Ciò indica l'utilizzo di un metodo di integrazione del tempo implicito. È possibile utilizzare lo smorzamento per prevenire le oscillazioni che tenderanno a incasinare il controllo adattativo degli errori per il metodo implicito.

Se le oscillazioni su piccola scala sono importanti da modellare nonostante si desideri scavalcarle (ad es. Per la modellazione a fatica), è possibile verificare nuovi metodi multiscala come il metodo multiscala eterogeneo (Engquist, Tsai, ecc.) O semi- metodi spettrali nel tempo. L'uso di tali metodi è un argomento a livello di ricerca e devi capire bene il tuo problema e le capacità del metodo per decidere se può essere appropriato. Se vuoi conservare energia, per esempio che certe modalità vibrazionali non dovrebbero dissiparsi, allora dovresti guardare integratori simplettici come Verlet.

Se lo desideri, puoi anche risolvere il limite di allungamento zero. Con termini inerziali, il modello può essere riformulato in termini di angoli, portando a un sistema ODE non rigido. Come ha sottolineato Faleichik, questo è il ROPEproblema di prova considerato nel libro di Hairer, Nørsett e Wanner. Se scarti l'inerzia della corda stessa, ma consenti allentamento (corda leggera a bassa elasticità con carico discreto; non un modello comune), il problema diventa una disuguaglianza variazionale differenziale (DVI) e generalmente non puoi migliorare la precisione del primo ordine in tempo.


2
HMM è un metodo di riduzione del modello basato sulla proiezione, in sostanza. Esito a raccomandare tali metodi a meno che un'applicazione non li richieda specificamente; bisogna essere disposti a sacrificare l'accuratezza per la velocità. Determinare le scelte "buone" degli operatori di compressione e ricostruzione (usando la nomenclatura di HMM) rimane non banale per alcune applicazioni (la combustione ne è un esempio).
Geoff Oxberry,

@GeoffOxberry D'accordo, ho aggiunto un avviso. Un problema classico è il modo in cui le vibrazioni meccaniche in un orologio causano la deriva. Un esempio di problema che ritengo appropriato è la modellazione del creep / slittamento di una fune attorno a un argano accelerato dalle modalità vibrazionali dal lato caricato. Non tutto è combustione. ;-)
Jed Brown,

Il limite zero-stretch è praticamente l'unica cosa che sto davvero cercando a questo punto. Le oscillazioni su scala fine sarebbero belle, ma al momento è preferibile un panno anelastico troppo liscio. Ho provato a fare un passo temporale implicito (tramite la formulazione di OpenCloth), e sfortunatamente il problema si verifica ancora. Puoi elaborare / fornire link su come eseguire il tuo ultimo paragrafo? Grazie,
imallett,

2

Se sei interessato a una soluzione rapida e approssimativa, i metodi utilizzati negli effetti digitali come la geometria differenziale discreta potrebbero interessarti. Sono a conoscenza di una formulazione quasistatica in Discrete Elastic Rods , un documento del 2008 del gruppo Grinspun alla Columbia University, ma probabilmente c'è letteratura più recente in quest'area.


2

Il movimento della corda sospesa è un amato problema di prova di Hairer e Wanner che è apparso nel secondo (rigido) volume di "Solving Ordinary Differential Equations" e nella seconda edizione del primo volume (1993). Consiglio l'ultima opzione, pagina 247. Le equazioni sono difficili da derivare e l'algoritmo della soluzione numerica non è molto semplice. Sebbene alla fine vengano applicati stepper di tempo espliciti convenzionali come DOPRI, RK45 o ODEX e si comportino piuttosto bene, quindi il problema non è molto rigido.


1
Il ROPEproblema del libro modella una corda che non si allunga, con una dinamica dominata da effetti inerziali. La domanda sembra porsi sulle corde che si allungano.
Jed Brown,
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.