compilation of local/global gridfunction module takes to long
The techniques for providing grid function through Python callback is quite convoluted and is repeated (with slight differences) in dune-python. So each GridView
compilation leads to the export of grid function (up to dimRange=10) and the same is repeated when dune.fem.function.global/localFunction
is used. Compilation of the later can take a very long time!
Ideas
Perhaps it would be possible to keep the GridFunctions
(as decorators) on the Python side (so make them a full Python class) and then only cast into a (possibly virtual) GridFunction<GV,dimR>
class only when passed into C++. I'm not yet sure if it would be possible to at this stage translate the Python dynamic dimRange
to a static one - but would be nice
Summary of what is there now
Here is a short summary of what happens and where (from an email to Robert written in German):
- dune-python erlaubt es `decorator zu verwenden
@gridfunction(gridView)
def f(x): return x[0]*x[1]
die entsprechenden Funktionen koennen aber in dune-fempy nicht verwendet werden - ein Grund ist, dass die virtualisierung fehlt
- Der
decorator
baut auf denGridFunctions
auf, die zu jederGridView/GridPart
exportiert werden:dune/python/grid/gridview.hh:423
fuer dimRange=1,..,10 (mehr als 10 geht nicht ohne den Code zu aendern).
Die eigentlich Registrierung ist defGridFunction (dune/python/grid/function.hh:224
Das eigentlich C++ Object ist eine SimpleGridFunction
(dune/python/function/simplegridfunction.hh)
Die exportierte Klassen view.GridFunction1
, 'view.GridFunction10werden dann im @gridFunction decorator (python/dune/grid/__init__.py) verwendet, um aus der Python Funktion eine
SimpleGridFunction` zu machen.
- In dune-fempy wird das ganze quasi nochmal (nur anders) gemacht.
Dekorator haben wir da nicht sondern die Methoden
global/localFunction
(python/dune/fem/function/_functions.py).
Wenn eine von denen zum ersten Mal aufgerufen werden, wird registerGridFunctions
aufgerufen (selbe Datei), die ein Python Modul erzeugt mir der Registrierung von globalen und lokalen Gitterfunktionen fuer dimRange=1..10
Das Ding zu kompilieren dauert ewig - also etwa, wenn man die harmlos aussehende Funktion levelFunction
verwendet hat man die Kompilierzeit am Hals.
Die eigentliche Registrierung ist fuer globale GF etwa in defGlobalGridFunction< (dune/fempy/py/grid/function.hh:327).