Registriert seit: 31. Mär 2008
14 Beiträge
|
Re: Zugriffsgeschwindigkeit auf mehrdimensionale Arrays
27. Apr 2009, 20:34
Danke für die bisherigen Ideen.
Was ist mit "Reservierung eines Speicherblocks" gemeint? Mit der Deklaration des Arrays wird doch der Speicher schon reserviert...
Zur Problemstellung:
- es geht um Elektrodiffusion von Ionen zwischen zwei Elektrolyten, welche durch eine teildurchlässige Membran getrennt sind
- die Membran hat eine andere relative dielektrische Permittivität ("Dielektrizitätszahl epsilon_r") als Wasser
- um Regionen, in denen "wenig" passiert (also weit weg von der Membran), gröber aufzulösen, und somit Rechenzeit zu sparen, will ich die Möglichkeit eines nicht-äquidistanten Gitters offen lassen
Daraus folgt:
- die diskreten Volumina sind nicht immer gleich groß --> f(i,j,k,l,m,n) ungleich f(l,m,n,i,j,k)
- wenn zwischen zwei Punkten gleichen Abstandes die Membran liegt, ändert sich der "Abstandsfaktor" auch: f(i,j,k,i+a,j+b,k+c) ist nicht gleich für alle i,j,k
Somit lässt sich das Problem nur sehr schlecht auf ein Array geringerer Dimension reduzieren.
(im homogenen, äquidistanten Fall würde ein 3D-Array reichen, weil ja jeder Punkt mittels eines Vektors vom Ursprung aus beschrieben werden könnte)
Eine Berechnung des "Abstandsfaktors" (ohne Array) würde viel länger dauern als es abzurufen. Das würde dann so aussehen:
faktor := sqrt(sqr(pos_x[i,j,k]-pos_x[l,m,n]) + sqr(pos_y[i,j,k]-pos_y[l,m,n]) + sqr(pos_z[i,j,k]-pos_z[l,m,n]))/(4*PI*epsilon_0*epsilon_r)
wobei epsilon_r streng genommen wieder eine Funktion von (i,j,k) ist.
Achso, die Schleife muss für jeden Zeitschritt delta_t erneut durchlaufen werden, weil sich dann ja die Ionenkonzentrationen (ergo die Ladungsdichten) durch die Diffusion verändert haben. Deswegen ist ja die Geschwindigkeit so entscheidend.
|