Sequentielle Ausführung von `jacobian_apply_volume()` auf der GPU
Hier soll erstmals die Funktion jacobian_apply_volume() im local Operator auf der GPU ausgeführt werden. Vorerst nur sequentiell, und Element-für-Element -- wir wollen erstmal sicherstellen dass die Funktion überhaupt GPU-fähig ist und gegebenenfalls sie gegebenenfalls fixen.
Hierzu ist folgendes in gridoperator.hh in nonlinear_jacobian_apply() nötig:
- Die Anzahl der Basisfunktionen
sizemuß constexpr werden damit sie als template-parameter fürstd::arraytaugt. Die Methode.size()der LocalBasis sollte schonstatic constexprsein -- sie muß bloß auf der Klasse aufgerufen werden statt auf dem Object -
zlandwlneed to becomestd::arrays rather thanstd::vectors so they can be captured by the kernel lambda - The call to
jacobian_apply_volume()needs to be wrapped into a kernel lambda, which needs to be executed by PACXX with a single thread - outside the loop storage needs to be allocated on the device for
yl - The kernel lambda needs to initialize the on-device storage for
ylto 0.0 before callingjacobian_apply_volume() - After the call, the computed content of
ylneeds to be transferred back to the CPU.
Blocked by: