42 use,
intrinsic :: iso_c_binding, only : c_ptr, c_int
59 effective_visc_d, n) &
60 bind(c, name =
'euler_res_part_visc_hip')
61 use,
intrinsic :: iso_c_binding
64 type(c_ptr),
value :: rhs_field_d, Binv_d, field_d, effective_visc_d
71 m_x, m_y, m_z, rho_field, p, n) &
72 bind(c, name =
'euler_res_part_mx_flux_hip')
73 use,
intrinsic :: iso_c_binding
75 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
82 m_x, m_y, m_z, rho_field, p, n) &
83 bind(c, name =
'euler_res_part_my_flux_hip')
84 use,
intrinsic :: iso_c_binding
86 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
93 m_x, m_y, m_z, rho_field, p, n) &
94 bind(c, name =
'euler_res_part_mz_flux_hip')
95 use,
intrinsic :: iso_c_binding
97 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
104 m_x, m_y, m_z, rho_field, p, E, n) &
105 bind(c, name =
'euler_res_part_E_flux_hip')
106 use,
intrinsic :: iso_c_binding
108 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
115 rhs_m_y_d, rhs_m_z_d, &
116 rhs_E_d, mult_d, n) &
117 bind(c, name =
'euler_res_part_coef_mult_hip')
118 use,
intrinsic :: iso_c_binding
120 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
128 k_rho_i, k_m_x_i, k_m_y_i, &
131 bind(c, name =
'euler_res_part_rk_sum_hip')
132 use,
intrinsic :: iso_c_binding
135 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
136 k_rho_i, k_m_x_i, k_m_y_i, &
138 real(c_rp) :: dt, b_i
145 effective_visc_d, n) &
146 bind(c, name =
'euler_res_part_visc_cuda')
147 use,
intrinsic :: iso_c_binding
150 type(c_ptr),
value :: rhs_field_d, Binv_d, field_d, effective_visc_d
157 m_x, m_y, m_z, rho_field, p, n) &
158 bind(c, name =
'euler_res_part_mx_flux_cuda')
159 use,
intrinsic :: iso_c_binding
161 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
168 m_x, m_y, m_z, rho_field, p, n) &
169 bind(c, name =
'euler_res_part_my_flux_cuda')
170 use,
intrinsic :: iso_c_binding
172 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
179 m_x, m_y, m_z, rho_field, p, n) &
180 bind(c, name =
'euler_res_part_mz_flux_cuda')
181 use,
intrinsic :: iso_c_binding
183 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
189 subroutine euler_res_part_e_flux_cuda(f_x, f_y, f_z, &
190 m_x, m_y, m_z, rho_field, p, E, n) &
191 bind(c, name =
'euler_res_part_E_flux_cuda')
192 use,
intrinsic :: iso_c_binding
194 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
196 end subroutine euler_res_part_e_flux_cuda
201 rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
202 rhs_E_d, mult_d, n) &
203 bind(c, name =
'euler_res_part_coef_mult_cuda')
204 use,
intrinsic :: iso_c_binding
206 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
214 k_rho_i, k_m_x_i, k_m_y_i, &
217 bind(c, name =
'euler_res_part_rk_sum_cuda')
218 use,
intrinsic :: iso_c_binding
221 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
222 k_rho_i, k_m_x_i, k_m_y_i, &
231 effective_visc_d, n) &
232 bind(c, name =
'euler_res_part_visc_opencl')
233 use,
intrinsic :: iso_c_binding
236 type(c_ptr),
value :: rhs_field_d, Binv_d, field_d, effective_visc_d
243 m_x, m_y, m_z, rho_field, p, n) &
244 bind(c, name =
'euler_res_part_mx_flux_opencl')
245 use,
intrinsic :: iso_c_binding
247 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
254 m_x, m_y, m_z, rho_field, p, n) &
255 bind(c, name =
'euler_res_part_my_flux_opencl')
256 use,
intrinsic :: iso_c_binding
258 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
265 m_x, m_y, m_z, rho_field, p, n) &
266 bind(c, name =
'euler_res_part_mz_flux_opencl')
267 use,
intrinsic :: iso_c_binding
269 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
275 subroutine euler_res_part_e_flux_opencl(f_x, f_y, f_z, &
276 m_x, m_y, m_z, rho_field, p, E, n) &
277 bind(c, name =
'euler_res_part_E_flux_opencl')
278 use,
intrinsic :: iso_c_binding
280 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
282 end subroutine euler_res_part_e_flux_opencl
287 rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
288 rhs_E_d, mult_d, n) &
289 bind(c, name =
'euler_res_part_coef_mult_opencl')
290 use,
intrinsic :: iso_c_binding
292 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
300 k_rho_i, k_m_x_i, k_m_y_i, &
303 bind(c, name =
'euler_res_part_rk_sum_opencl')
304 use,
intrinsic :: iso_c_binding
307 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
308 k_rho_i, k_m_x_i, k_m_y_i, &
316 subroutine euler_res_part_visc_metal(rhs_field_d, Binv_d, field_d, &
317 effective_visc_d, n) &
318 bind(c, name =
'euler_res_part_visc_metal')
319 use,
intrinsic :: iso_c_binding
322 type(c_ptr),
value :: rhs_field_d, Binv_d, field_d, effective_visc_d
324 end subroutine euler_res_part_visc_metal
328 subroutine euler_res_part_mx_flux_metal(f_x, f_y, f_z, &
329 m_x, m_y, m_z, rho_field, p, n) &
330 bind(c, name =
'euler_res_part_mx_flux_metal')
331 use,
intrinsic :: iso_c_binding
333 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
335 end subroutine euler_res_part_mx_flux_metal
339 subroutine euler_res_part_my_flux_metal(f_x, f_y, f_z, &
340 m_x, m_y, m_z, rho_field, p, n) &
341 bind(c, name =
'euler_res_part_my_flux_metal')
342 use,
intrinsic :: iso_c_binding
344 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
346 end subroutine euler_res_part_my_flux_metal
350 subroutine euler_res_part_mz_flux_metal(f_x, f_y, f_z, &
351 m_x, m_y, m_z, rho_field, p, n) &
352 bind(c, name =
'euler_res_part_mz_flux_metal')
353 use,
intrinsic :: iso_c_binding
355 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p
357 end subroutine euler_res_part_mz_flux_metal
361 subroutine euler_res_part_e_flux_metal(f_x, f_y, f_z, &
362 m_x, m_y, m_z, rho_field, p, E, n) &
363 bind(c, name =
'euler_res_part_E_flux_metal')
364 use,
intrinsic :: iso_c_binding
366 type(c_ptr),
value :: f_x, f_y, f_z, m_x, m_y, m_z, rho_field, p, E
368 end subroutine euler_res_part_e_flux_metal
372 subroutine euler_res_part_coef_mult_metal(rhs_rho_field_d, &
373 rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
374 rhs_E_d, mult_d, n) &
375 bind(c, name =
'euler_res_part_coef_mult_metal')
376 use,
intrinsic :: iso_c_binding
378 type(c_ptr),
value :: rhs_rho_field_d, rhs_m_x_d, rhs_m_y_d, rhs_m_z_d, &
381 end subroutine euler_res_part_coef_mult_metal
385 subroutine euler_res_part_rk_sum_metal(rho, m_x, m_y, m_z, E, &
386 k_rho_i, k_m_x_i, k_m_y_i, &
389 bind(c, name =
'euler_res_part_rk_sum_metal')
390 use,
intrinsic :: iso_c_binding
393 type(c_ptr),
value :: rho, m_x, m_y, m_z, E, &
394 k_rho_i, k_m_x_i, k_m_y_i, &
398 end subroutine euler_res_part_rk_sum_metal
404 m_x, m_y, m_z, E, p, u, v, w, Ax, &
405 coef, gs, h, effective_visc, rk_scheme, dt)
406 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
407 type(
field_t),
intent(in) :: p, u, v, w, h, effective_visc
408 class(
ax_t),
intent(inout) :: Ax
409 type(
coef_t),
intent(inout) :: coef
410 type(
gs_t),
intent(inout) :: gs
412 real(kind=
rp),
intent(in) :: dt
413 integer :: n, s, i, j, k
414 real(kind=
rp) :: t, c
415 type(
field_t),
pointer :: k_rho_1, k_rho_2, k_rho_3, k_rho_4, &
416 k_m_x_1, k_m_x_2, k_m_x_3, k_m_x_4, &
417 k_m_y_1, k_m_y_2, k_m_y_3, k_m_y_4, &
418 k_m_z_1, k_m_z_2, k_m_z_3, k_m_z_4, &
419 k_e_1, k_e_2, k_e_3, k_e_4, &
420 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e
421 integer :: temp_indices(25)
453 call k_rho%assign(1, k_rho_1)
454 call k_rho%assign(2, k_rho_2)
455 call k_rho%assign(3, k_rho_3)
456 call k_rho%assign(4, k_rho_4)
458 call k_m_x%assign(1, k_m_x_1)
459 call k_m_x%assign(2, k_m_x_2)
460 call k_m_x%assign(3, k_m_x_3)
461 call k_m_x%assign(4, k_m_x_4)
463 call k_m_y%assign(1, k_m_y_1)
464 call k_m_y%assign(2, k_m_y_2)
465 call k_m_y%assign(3, k_m_y_3)
466 call k_m_y%assign(4, k_m_y_4)
468 call k_m_z%assign(1, k_m_z_1)
469 call k_m_z%assign(2, k_m_z_2)
470 call k_m_z%assign(3, k_m_z_3)
471 call k_m_z%assign(4, k_m_z_4)
473 call k_e%assign(1, k_e_1)
474 call k_e%assign(2, k_e_2)
475 call k_e%assign(3, k_e_3)
476 call k_e%assign(4, k_e_4)
489 temp_m_z%x_d, temp_e%x_d, &
490 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, k_m_y%items(j)%ptr%x_d, &
491 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
492 dt, rk_scheme%coeffs_A(i, j), n)
495 temp_m_z%x_d, temp_e%x_d, &
496 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, k_m_y%items(j)%ptr%x_d, &
497 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
498 dt, rk_scheme%coeffs_A(i, j), n)
501 temp_m_z%x_d, temp_e%x_d, &
502 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, k_m_y%items(j)%ptr%x_d, &
503 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
504 dt, rk_scheme%coeffs_A(i, j), n)
506 call euler_res_part_rk_sum_metal(temp_rho%x_d, temp_m_x%x_d, temp_m_y%x_d, &
507 temp_m_z%x_d, temp_e%x_d, &
508 k_rho%items(j)%ptr%x_d, k_m_x%items(j)%ptr%x_d, k_m_y%items(j)%ptr%x_d, &
509 k_m_z%items(j)%ptr%x_d, k_e%items(j)%ptr%x_d, &
510 dt, rk_scheme%coeffs_A(i, j), n)
516 k_m_y%items(i)%ptr, k_m_z%items(i)%ptr, k_e%items(i)%ptr, &
517 temp_rho, temp_m_x, temp_m_y, temp_m_z, temp_e, &
519 coef, gs, h, effective_visc)
526 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
527 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, k_m_y%items(i)%ptr%x_d, &
528 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
529 dt, rk_scheme%coeffs_b(i), n)
532 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
533 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, k_m_y%items(i)%ptr%x_d, &
534 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
535 dt, rk_scheme%coeffs_b(i), n)
538 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
539 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, k_m_y%items(i)%ptr%x_d, &
540 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
541 dt, rk_scheme%coeffs_b(i), n)
543 call euler_res_part_rk_sum_metal(rho_field%x_d, &
544 m_x%x_d, m_y%x_d, m_z%x_d, e%x_d, &
545 k_rho%items(i)%ptr%x_d, k_m_x%items(i)%ptr%x_d, k_m_y%items(i)%ptr%x_d, &
546 k_m_z%items(i)%ptr%x_d, k_e%items(i)%ptr%x_d, &
547 dt, rk_scheme%coeffs_b(i), n)
555 rhs_m_z, rhs_E, rho_field, &
556 m_x, m_y, m_z, E, p, u, v, w, Ax, &
557 coef, gs, h, effective_visc)
558 type(
field_t),
intent(inout) :: rhs_rho_field, rhs_m_x, rhs_m_y, rhs_m_z, rhs_E
559 type(
field_t),
intent(inout) :: rho_field, m_x, m_y, m_z, E
560 type(
field_t),
intent(in) :: p, u, v, w, h, effective_visc
561 class(
ax_t),
intent(inout) :: Ax
562 type(
coef_t),
intent(inout) :: coef
563 type(
gs_t),
intent(inout) :: gs
565 real(kind=
rp) :: visc_coeff
566 type(
field_t),
pointer :: temp, f_x, f_y, f_z, &
567 visc_rho, visc_m_x, visc_m_y, visc_m_z, visc_e
568 integer :: temp_indices(8)
576 call div(rhs_rho_field%x, m_x%x, m_y%x, m_z%x, coef)
582 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
585 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
588 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
590 call euler_res_part_mx_flux_metal(f_x%x_d, f_y%x_d, f_z%x_d, &
591 m_x%x_d, m_y%x_d, m_z%x_d, rho_field%x_d, p%x_d, n)
593 call div(rhs_m_x%x, f_x%x, f_y%x, f_z%x, coef)
597 m_x%x_d, m_y%x_d, m_z%x_d, &
598 rho_field%x_d, p%x_d, n)
601 m_x%x_d, m_y%x_d, m_z%x_d, &
602 rho_field%x_d, p%x_d, n)
605 m_x%x_d, m_y%x_d, m_z%x_d, &
606 rho_field%x_d, p%x_d, n)
608 call euler_res_part_my_flux_metal(f_x%x_d, f_y%x_d, f_z%x_d, &
609 m_x%x_d, m_y%x_d, m_z%x_d, &
610 rho_field%x_d, p%x_d, n)
612 call div(rhs_m_y%x, f_x%x, f_y%x, f_z%x, coef)
616 m_x%x_d, m_y%x_d, m_z%x_d, &
617 rho_field%x_d, p%x_d, n)
620 m_x%x_d, m_y%x_d, m_z%x_d, &
621 rho_field%x_d, p%x_d, n)
624 m_x%x_d, m_y%x_d, m_z%x_d, &
625 rho_field%x_d, p%x_d, n)
627 call euler_res_part_mz_flux_metal(f_x%x_d, f_y%x_d, f_z%x_d, &
628 m_x%x_d, m_y%x_d, m_z%x_d, &
629 rho_field%x_d, p%x_d, n)
631 call div(rhs_m_z%x, f_x%x, f_y%x, f_z%x, coef)
636 m_x%x_d, m_y%x_d, m_z%x_d, &
637 rho_field%x_d, p%x_d, e%x_d, n)
639 call euler_res_part_e_flux_cuda(f_x%x_d, f_y%x_d, f_z%x_d, &
640 m_x%x_d, m_y%x_d, m_z%x_d, &
641 rho_field%x_d, p%x_d, e%x_d, n)
643 call euler_res_part_e_flux_opencl(f_x%x_d, f_y%x_d, f_z%x_d, &
644 m_x%x_d, m_y%x_d, m_z%x_d, &
645 rho_field%x_d, p%x_d, e%x_d, n)
647 call euler_res_part_e_flux_metal(f_x%x_d, f_y%x_d, f_z%x_d, &
648 m_x%x_d, m_y%x_d, m_z%x_d, &
649 rho_field%x_d, p%x_d, e%x_d, n)
651 call div(rhs_e%x_d, f_x%x_d, f_y%x_d, f_z%x_d, coef)
653 call gs%op(rhs_rho_field, gs_op_add)
654 call rotate_cyc(rhs_m_x%x_d, rhs_m_y%x_d, rhs_m_z%x_d, 1, coef)
655 call gs%op(rhs_m_x, gs_op_add)
656 call gs%op(rhs_m_y, gs_op_add)
657 call gs%op(rhs_m_z, gs_op_add)
658 call rotate_cyc(rhs_m_x%x_d, rhs_m_y%x_d, rhs_m_z%x_d, 0, coef)
659 call gs%op(rhs_e, gs_op_add)
663 rhs_m_y%x_d, rhs_m_z%x_d, &
664 rhs_e%x_d, coef%mult_d, n)
667 rhs_m_y%x_d, rhs_m_z%x_d, &
668 rhs_e%x_d, coef%mult_d, n)
671 rhs_m_y%x_d, rhs_m_z%x_d, &
672 rhs_e%x_d, coef%mult_d, n)
674 call euler_res_part_coef_mult_metal(rhs_rho_field%x_d, rhs_m_x%x_d, &
675 rhs_m_y%x_d, rhs_m_z%x_d, &
676 rhs_e%x_d, coef%mult_d, n)
689 call ax%compute(visc_rho%x, rho_field%x, coef, p%msh, p%Xh)
690 call ax%compute(visc_m_x%x, m_x%x, coef, p%msh, p%Xh)
691 call ax%compute(visc_m_y%x, m_y%x, coef, p%msh, p%Xh)
692 call ax%compute(visc_m_z%x, m_z%x, coef, p%msh, p%Xh)
693 call ax%compute(visc_e%x, e%x, coef, p%msh, p%Xh)
698 call gs%op(visc_rho, gs_op_add)
699 call rotate_cyc(visc_m_x%x_d, visc_m_y%x_d, visc_m_z%x_d, 1, coef)
700 call gs%op(visc_m_x, gs_op_add)
701 call gs%op(visc_m_y, gs_op_add)
702 call gs%op(visc_m_z, gs_op_add)
703 call rotate_cyc(visc_m_x%x_d, visc_m_y%x_d, visc_m_z%x_d, 0, coef)
704 call gs%op(visc_e, gs_op_add)
715 call device_sub2(rhs_rho_field%x_d, visc_rho%x_d, n)
void euler_res_part_coef_mult_opencl(void *rhs_rho, void *rhs_m_x, void *rhs_m_y, void *rhs_m_z, void *rhs_E, void *mult, int *n)
void euler_res_part_visc_opencl(void *rhs_u, void *Binv, void *lap_sol, void *effective_visc, int *n)
void euler_res_part_my_flux_opencl(void *f_x, void *f_y, void *f_z, void *m_x, void *m_y, void *m_z, void *rho_field, void *p, int *n)
void euler_res_part_mx_flux_opencl(void *f_x, void *f_y, void *f_z, void *m_x, void *m_y, void *m_z, void *rho_field, void *p, int *n)
void euler_res_part_mz_flux_opencl(void *f_x, void *f_y, void *f_z, void *m_x, void *m_y, void *m_z, void *rho_field, void *p, int *n)
void euler_res_part_rk_sum_opencl(void *rho, void *m_x, void *m_y, void *m_z, void *E, void *k_rho_i, void *k_m_x_i, void *k_m_y_i, void *k_m_z_i, void *k_E_i, real *dt, real *c, int *n)
void euler_res_part_mx_flux_cuda(void *f_x, void *f_y, void *f_z, void *m_x, void *m_y, void *m_z, void *rho_field, void *p, int *n)
void euler_res_part_my_flux_cuda(void *f_x, void *f_y, void *f_z, void *m_x, void *m_y, void *m_z, void *rho_field, void *p, int *n)
void euler_res_part_visc_cuda(void *rhs_u, void *Binv, void *lap_sol, void *effective_visc, int *n)
void euler_res_part_rk_sum_cuda(void *rho, void *m_x, void *m_y, void *m_z, void *E, void *k_rho_i, void *k_m_x_i, void *k_m_y_i, void *k_m_z_i, void *k_E_i, real *dt, real *c, int *n)
void euler_res_part_coef_mult_cuda(void *rhs_rho, void *rhs_m_x, void *rhs_m_y, void *rhs_m_z, void *rhs_E, void *mult, int *n)
void euler_res_part_mz_flux_cuda(void *f_x, void *f_y, void *f_z, void *m_x, void *m_y, void *m_z, void *rho_field, void *p, int *n)
Compute the divergence of a vector field.
Apply cyclic boundary condition to a vector field.
Defines a Matrix-vector product.
subroutine, public device_rone(a_d, n, strm)
Set all elements to one.
subroutine, public device_cmult(a_d, c, n, strm)
Multiplication by constant c .
subroutine, public device_sub2(a_d, b_d, n, strm)
Vector substraction .
subroutine, public device_copy(a_d, b_d, n, strm)
Copy a vector .
subroutine, public device_col2(a_d, b_d, n, strm)
Vector multiplication .
subroutine evaluate_rhs_device(rhs_rho_field, rhs_m_x, rhs_m_y, rhs_m_z, rhs_e, rho_field, m_x, m_y, m_z, e, p, u, v, w, ax, coef, gs, h, effective_visc)
subroutine advance_primitive_variables_device(rho_field, m_x, m_y, m_z, e, p, u, v, w, ax, coef, gs, h, effective_visc, rk_scheme, dt)
subroutine, public field_cmult(a, c, n)
Multiplication by constant c .
integer, parameter, public c_rp
integer, parameter, public rp
Global precision used in computations.
Defines a registry for storing and requesting temporary objects This can be used when you have a func...
type(scratch_registry_t), target, public neko_scratch_registry
Global scratch registry.
Base type for a matrix-vector product providing .
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
Abstract type to compute rhs.
field_list_t, To be able to group fields together