45  use, 
intrinsic :: iso_c_binding
 
   55          dx_d, dy_d, dz_d, jacinv_d, nel, lx) &
 
   56          bind(c, name = 
'hip_dudxyz')
 
   57       use, 
intrinsic :: iso_c_binding
 
   58       type(c_ptr), 
value :: du_d, u_d, dr_d, ds_d, dt_d
 
   59       type(c_ptr), 
value :: dx_d, dy_d, dz_d, jacinv_d
 
   60       integer(c_int) :: nel, lx
 
 
   65     subroutine hip_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
 
   66          dxt_d, dyt_d, dzt_d, w3_d, nel, lx) &
 
   67          bind(c, name = 
'hip_cdtp')
 
   68       use, 
intrinsic :: iso_c_binding
 
   69       type(c_ptr), 
value :: dtx_d, x_d, dr_d, ds_d, dt_d
 
   70       type(c_ptr), 
value :: dxt_d, dyt_d, dzt_d, w3_d
 
   71       integer(c_int) :: nel, lx
 
 
   77          dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d, &
 
   78          drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d, &
 
   79          jacinv_d, nel, gdim, lx) &
 
   80          bind(c, name = 
'hip_conv1')
 
   81       use, 
intrinsic :: iso_c_binding
 
   82       type(c_ptr), 
value :: du_d, u_d, vx_d, vy_d, vz_d
 
   83       type(c_ptr), 
value :: dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d
 
   84       type(c_ptr), 
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
 
   85       type(c_ptr), 
value :: jacinv_d
 
   86       integer(c_int) :: nel, gdim, lx
 
 
   93          drdx_d, dsdx_d, dtdx_d, &
 
   94          drdy_d, dsdy_d, dtdy_d, &
 
   95          drdz_d, dsdz_d, dtdz_d, w3_d, nel, lx) &
 
   96          bind(c, name = 
'hip_opgrad')
 
   97       use, 
intrinsic :: iso_c_binding
 
   98       type(c_ptr), 
value :: ux_d, uy_d, uz_d, u_d
 
   99       type(c_ptr), 
value :: dx_d, dy_d, dz_d
 
  100       type(c_ptr), 
value :: drdx_d, dsdx_d, dtdx_d
 
  101       type(c_ptr), 
value :: drdy_d, dsdy_d, dtdy_d
 
  102       type(c_ptr), 
value :: drdz_d, dsdz_d, dtdz_d
 
  103       type(c_ptr), 
value :: w3_d
 
  104       integer(c_int) :: nel, lx
 
 
  111          drdx_d, dsdx_d, dtdx_d, &
 
  112          drdy_d, dsdy_d, dtdy_d, &
 
  113          drdz_d, dsdz_d, dtdz_d, jacinv_d, nel, lx) &
 
  114          bind(c, name = 
'hip_lambda2')
 
  115       use, 
intrinsic :: iso_c_binding
 
  116       type(c_ptr), 
value :: lambda2_d, u_d, v_d, w_d
 
  117       type(c_ptr), 
value :: dx_d, dy_d, dz_d
 
  118       type(c_ptr), 
value :: drdx_d, dsdx_d, dtdx_d
 
  119       type(c_ptr), 
value :: drdy_d, dsdy_d, dtdy_d
 
  120       type(c_ptr), 
value :: drdz_d, dsdz_d, dtdz_d
 
  121       type(c_ptr), 
value :: jacinv_d
 
  122       integer(c_int) :: nel, lx
 
 
  128          drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, &
 
  129          drdz_d, dsdz_d, dtdz_d, dr_inv_d, ds_inv_d, dt_inv_d, &
 
  131          bind(c, name = 
'hip_cfl')
 
  132       use, 
intrinsic :: iso_c_binding
 
  134       type(c_ptr), 
value :: u_d, v_d, w_d, drdx_d, dsdx_d, dtdx_d
 
  135       type(c_ptr), 
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
 
  136       type(c_ptr), 
value :: dr_inv_d, ds_inv_d, dt_inv_d, jacinv_d
 
  138       integer(c_int) :: nel, lx
 
 
  143     subroutine cuda_dudxyz(du_d, u_d, dr_d, ds_d, dt_d, &
 
  144          dx_d, dy_d, dz_d, jacinv_d, nel, lx) &
 
  145          bind(c, name = 
'cuda_dudxyz')
 
  146       use, 
intrinsic :: iso_c_binding
 
  147       type(c_ptr), 
value :: du_d, u_d, dr_d, ds_d, dt_d
 
  148       type(c_ptr), 
value :: dx_d, dy_d, dz_d, jacinv_d
 
  149       integer(c_int) :: nel, lx
 
  154     subroutine cuda_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
 
  155          dxt_d, dyt_d, dzt_d, w3_d, nel, lx) &
 
  156          bind(c, name = 
'cuda_cdtp')
 
  157       use, 
intrinsic :: iso_c_binding
 
  158       type(c_ptr), 
value :: dtx_d, x_d, dr_d, ds_d, dt_d
 
  159       type(c_ptr), 
value :: dxt_d, dyt_d, dzt_d, w3_d
 
  160       integer(c_int) :: nel, lx
 
  165     subroutine cuda_conv1(du_d, u_d, vx_d, vy_d, vz_d, &
 
  166          dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d, &
 
  167          drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d, &
 
  168          jacinv_d, nel, gdim, lx) &
 
  169          bind(c, name = 
'cuda_conv1')
 
  170       use, 
intrinsic :: iso_c_binding
 
  171       type(c_ptr), 
value :: du_d, u_d, vx_d, vy_d, vz_d
 
  172       type(c_ptr), 
value :: dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d
 
  173       type(c_ptr), 
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
 
  174       type(c_ptr), 
value :: jacinv_d
 
  175       integer(c_int) :: nel, gdim, lx
 
  182          drdx_d, dsdx_d, dtdx_d, &
 
  183          drdy_d, dsdy_d, dtdy_d, &
 
  184          drdz_d, dsdz_d, dtdz_d, w3_d, nel, lx) &
 
  185          bind(c, name = 
'cuda_opgrad')
 
  186       use, 
intrinsic :: iso_c_binding
 
  187       type(c_ptr), 
value :: ux_d, uy_d, uz_d, u_d
 
  188       type(c_ptr), 
value :: dx_d, dy_d, dz_d
 
  189       type(c_ptr), 
value :: drdx_d, dsdx_d, dtdx_d
 
  190       type(c_ptr), 
value :: drdy_d, dsdy_d, dtdy_d
 
  191       type(c_ptr), 
value :: drdz_d, dsdz_d, dtdz_d
 
  192       type(c_ptr), 
value :: w3_d
 
  193       integer(c_int) :: nel, lx
 
  200          drdx_d, dsdx_d, dtdx_d, &
 
  201          drdy_d, dsdy_d, dtdy_d, &
 
  202          drdz_d, dsdz_d, dtdz_d, jacinv_d, nel, lx) &
 
  203          bind(c, name = 
'cuda_lambda2')
 
  204       use, 
intrinsic :: iso_c_binding
 
  205       type(c_ptr), 
value :: lambda2_d, u_d, v_d, w_d
 
  206       type(c_ptr), 
value :: dx_d, dy_d, dz_d
 
  207       type(c_ptr), 
value :: drdx_d, dsdx_d, dtdx_d
 
  208       type(c_ptr), 
value :: drdy_d, dsdy_d, dtdy_d
 
  209       type(c_ptr), 
value :: drdz_d, dsdz_d, dtdz_d
 
  210       type(c_ptr), 
value :: jacinv_d
 
  211       integer(c_int) :: nel, lx
 
  217     real(c_rp) function 
cuda_cfl(dt, u_d, v_d, w_d, &
 
  218          drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, &
 
  219          drdz_d, dsdz_d, dtdz_d, dr_inv_d, ds_inv_d, dt_inv_d, &
 
  221          bind(c, name = 
'cuda_cfl')
 
  222       use, 
intrinsic :: iso_c_binding
 
  224       type(c_ptr), 
value :: u_d, v_d, w_d, drdx_d, dsdx_d, dtdx_d
 
  225       type(c_ptr), 
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
 
  226       type(c_ptr), 
value :: dr_inv_d, ds_inv_d, dt_inv_d, jacinv_d
 
  228       integer(c_int) :: nel, lx
 
  234          dx_d, dy_d, dz_d, jacinv_d, nel, lx) &
 
  235          bind(c, name = 
'opencl_dudxyz')
 
  236       use, 
intrinsic :: iso_c_binding
 
  237       type(c_ptr), 
value :: du_d, u_d, dr_d, ds_d, dt_d
 
  238       type(c_ptr), 
value :: dx_d, dy_d, dz_d, jacinv_d
 
  239       integer(c_int) :: nel, lx
 
  244     subroutine opencl_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
 
  245          dxt_d, dyt_d, dzt_d, w3_d, nel, lx) &
 
  246          bind(c, name = 
'opencl_cdtp')
 
  247       use, 
intrinsic :: iso_c_binding
 
  248       type(c_ptr), 
value :: dtx_d, x_d, dr_d, ds_d, dt_d
 
  249       type(c_ptr), 
value :: dxt_d, dyt_d, dzt_d, w3_d
 
  250       integer(c_int) :: nel, lx
 
  256          dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d, &
 
  257          drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d, &
 
  258          jacinv_d, nel, gdim, lx) &
 
  259          bind(c, name = 
'opencl_conv1')
 
  260       use, 
intrinsic :: iso_c_binding
 
  261       type(c_ptr), 
value :: du_d, u_d, vx_d, vy_d, vz_d
 
  262       type(c_ptr), 
value :: dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d
 
  263       type(c_ptr), 
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
 
  264       type(c_ptr), 
value :: jacinv_d
 
  265       integer(c_int) :: nel, gdim, lx
 
  272          drdx_d, dsdx_d, dtdx_d, &
 
  273          drdy_d, dsdy_d, dtdy_d, &
 
  274          drdz_d, dsdz_d, dtdz_d, w3_d, nel, lx) &
 
  275          bind(c, name = 
'opencl_opgrad')
 
  276       use, 
intrinsic :: iso_c_binding
 
  277       type(c_ptr), 
value :: ux_d, uy_d, uz_d, u_d
 
  278       type(c_ptr), 
value :: dx_d, dy_d, dz_d
 
  279       type(c_ptr), 
value :: drdx_d, dsdx_d, dtdx_d
 
  280       type(c_ptr), 
value :: drdy_d, dsdy_d, dtdy_d
 
  281       type(c_ptr), 
value :: drdz_d, dsdz_d, dtdz_d
 
  282       type(c_ptr), 
value :: w3_d
 
  283       integer(c_int) :: nel, lx
 
  288     real(c_rp) function 
opencl_cfl(dt, u_d, v_d, w_d, &
 
  289          drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, &
 
  290          drdz_d, dsdz_d, dtdz_d, dr_inv_d, ds_inv_d, dt_inv_d, &
 
  292          bind(c, name = 
'opencl_cfl')
 
  293       use, 
intrinsic :: iso_c_binding
 
  295       type(c_ptr), 
value :: u_d, v_d, w_d, drdx_d, dsdx_d, dtdx_d
 
  296       type(c_ptr), 
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
 
  297       type(c_ptr), 
value :: dr_inv_d, ds_inv_d, dt_inv_d, jacinv_d
 
  299       integer(c_int) :: nel, lx
 
  306          drdx_d, dsdx_d, dtdx_d, &
 
  307          drdy_d, dsdy_d, dtdy_d, &
 
  308          drdz_d, dsdz_d, dtdz_d, jacinv_d, nel, lx) &
 
  309          bind(c, name = 
'opencl_lambda2')
 
  310       use, 
intrinsic :: iso_c_binding
 
  311       type(c_ptr), 
value :: lambda2_d, u_d, v_d, w_d
 
  312       type(c_ptr), 
value :: dx_d, dy_d, dz_d
 
  313       type(c_ptr), 
value :: drdx_d, dsdx_d, dtdx_d
 
  314       type(c_ptr), 
value :: drdy_d, dsdy_d, dtdy_d
 
  315       type(c_ptr), 
value :: drdz_d, dsdz_d, dtdz_d
 
  316       type(c_ptr), 
value :: jacinv_d
 
  317       integer(c_int) :: nel, lx
 
  325    type(coef_t), 
intent(in), 
target :: coef
 
  326    real(kind=rp), 
dimension(coef%Xh%lx, coef%Xh%ly, &
         coef%Xh%lz, coef%msh%nelv), 
intent(inout) :: du
 
  327    real(kind=rp), 
dimension(coef%Xh%lx, coef%Xh%ly, &
         coef%Xh%lz, coef%msh%nelv), 
intent(in) :: u, dr, ds, dt
 
  328    type(c_ptr) :: du_d, u_d, dr_d, ds_d, dt_d
 
  330    du_d = device_get_ptr(du)
 
  331    u_d = device_get_ptr(u)
 
  333    dr_d = device_get_ptr(dr)
 
  334    ds_d = device_get_ptr(ds)
 
  335    dt_d = device_get_ptr(dt)
 
  337    associate(xh => coef%Xh, msh => coef%msh, dof => coef%dof)
 
  339      call hip_dudxyz(du_d, u_d, dr_d, ds_d, dt_d, &
 
  340           xh%dx_d, xh%dy_d, xh%dz_d, coef%jacinv_d, &
 
  344           xh%dx_d, xh%dy_d, xh%dz_d, coef%jacinv_d, &
 
  348           xh%dx_d, xh%dy_d, xh%dz_d, coef%jacinv_d, &
 
  351      call neko_error(
'No device backend configured')
 
 
  358    type(coef_t), 
intent(in) :: coef
 
  359    real(kind=rp), 
dimension(coef%Xh%lxyz, coef%msh%nelv), 
intent(inout) :: ux
 
  360    real(kind=rp), 
dimension(coef%Xh%lxyz, coef%msh%nelv), 
intent(inout) :: uy
 
  361    real(kind=rp), 
dimension(coef%Xh%lxyz, coef%msh%nelv), 
intent(inout) :: uz
 
  362    real(kind=rp), 
dimension(coef%Xh%lxyz, coef%msh%nelv), 
intent(in) :: u
 
  363    type(c_ptr) :: ux_d, uy_d, uz_d, u_d
 
  365    ux_d = device_get_ptr(ux)
 
  366    uy_d = device_get_ptr(uy)
 
  367    uz_d = device_get_ptr(uz)
 
  369    u_d = device_get_ptr(u)
 
  371    associate(xh => coef%Xh, msh => coef%msh)
 
  374           xh%dx_d, xh%dy_d, xh%dz_d, &
 
  375           coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
 
  376           coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
 
  377           coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
 
  378           xh%w3_d, msh%nelv, xh%lx)
 
  381           xh%dx_d, xh%dy_d, xh%dz_d, &
 
  382           coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
 
  383           coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
 
  384           coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
 
  385           xh%w3_d, msh%nelv, xh%lx)
 
  388           xh%dx_d, xh%dy_d, xh%dz_d, &
 
  389           coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
 
  390           coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
 
  391           coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
 
  392           xh%w3_d, msh%nelv, xh%lx)
 
  394      call neko_error(
'No device backend configured')
 
 
  400    type(coef_t), 
intent(in) :: coef
 
  402    type(field_t), 
intent(in) :: u, v, w
 
  405         coef%Xh%dx_d, coef%Xh%dy_d, coef%Xh%dz_d, &
 
  406         coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
 
  407         coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
 
  408         coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
 
  409         coef%jacinv_d, coef%msh%nelv, coef%Xh%lx)
 
  412         coef%Xh%dx_d, coef%Xh%dy_d, coef%Xh%dz_d, &
 
  413         coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
 
  414         coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
 
  415         coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
 
  416         coef%jacinv_d, coef%msh%nelv, coef%Xh%lx)
 
  419         coef%Xh%dx_d, coef%Xh%dy_d, coef%Xh%dz_d, &
 
  420         coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
 
  421         coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
 
  422         coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
 
  423         coef%jacinv_d, coef%msh%nelv, coef%Xh%lx)
 
  425    call neko_error(
'No device backend configured')
 
 
  430    type(coef_t), 
intent(in) :: coef
 
  431    real(kind=rp), 
dimension(coef%Xh%lxyz, coef%msh%nelv), 
intent(inout) :: dtx
 
  432    real(kind=rp), 
dimension(coef%Xh%lxyz, coef%msh%nelv), 
intent(inout) :: x
 
  433    real(kind=rp), 
dimension(coef%Xh%lxyz, coef%msh%nelv), 
intent(in) :: dr
 
  434    real(kind=rp), 
dimension(coef%Xh%lxyz, coef%msh%nelv), 
intent(in) :: ds
 
  435    real(kind=rp), 
dimension(coef%Xh%lxyz, coef%msh%nelv), 
intent(in) :: dt
 
  436    type(c_ptr) :: dtx_d, x_d, dr_d, ds_d, dt_d
 
  438    dtx_d = device_get_ptr(dtx)
 
  439    x_d = device_get_ptr(x)
 
  441    dr_d = device_get_ptr(dr)
 
  442    ds_d = device_get_ptr(ds)
 
  443    dt_d = device_get_ptr(dt)
 
  445    associate(xh => coef%Xh, msh => coef%msh, dof => coef%dof)
 
  447      call hip_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
 
  448           xh%dxt_d, xh%dyt_d, xh%dzt_d, xh%w3_d, &
 
  451      call cuda_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
 
  452           xh%dxt_d, xh%dyt_d, xh%dzt_d, xh%w3_d, &
 
  456           xh%dxt_d, xh%dyt_d, xh%dzt_d, xh%w3_d, &
 
  459      call neko_error(
'No device backend configured')
 
 
  466    type(space_t), 
intent(in) :: xh
 
  467    type(coef_t), 
intent(in) :: coef
 
  468    integer, 
intent(in) :: nelv, gdim
 
  469    real(kind=rp), 
intent(inout) :: du(xh%lxyz, nelv)
 
  470    real(kind=rp), 
intent(inout), 
dimension(Xh%lx, Xh%ly, Xh%lz, nelv) :: u
 
  471    real(kind=rp), 
intent(inout), 
dimension(Xh%lx, Xh%ly, Xh%lz, nelv) :: vx
 
  472    real(kind=rp), 
intent(inout), 
dimension(Xh%lx, Xh%ly, Xh%lz, nelv) :: vy
 
  473    real(kind=rp), 
intent(inout), 
dimension(Xh%lx, Xh%ly, Xh%lz, nelv) :: vz
 
  474    type(c_ptr) :: du_d, u_d, vx_d, vy_d, vz_d
 
  476    du_d = device_get_ptr(du)
 
  477    u_d = device_get_ptr(u)
 
  479    vx_d = device_get_ptr(vx)
 
  480    vy_d = device_get_ptr(vy)
 
  481    vz_d = device_get_ptr(vz)
 
  483    associate(xh => coef%Xh, msh => coef%msh, dof => coef%dof)
 
  485      call hip_conv1(du_d, u_d, vx_d, vy_d, vz_d, &
 
  486           xh%dx_d, xh%dy_d, xh%dz_d, &
 
  487           coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
 
  488           coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
 
  489           coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
 
  490           coef%jacinv_d, msh%nelv, msh%gdim, xh%lx)
 
  492      call cuda_conv1(du_d, u_d, vx_d, vy_d, vz_d, &
 
  493           xh%dx_d, xh%dy_d, xh%dz_d, &
 
  494           coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
 
  495           coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
 
  496           coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
 
  497           coef%jacinv_d, msh%nelv, msh%gdim, xh%lx)
 
  500           xh%dx_d, xh%dy_d, xh%dz_d, &
 
  501           coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
 
  502           coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
 
  503           coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
 
  504           coef%jacinv_d, msh%nelv, msh%gdim, xh%lx)
 
  506      call neko_error(
'No device backend configured')
 
 
  513    type(field_t), 
intent(inout) :: w1
 
  514    type(field_t), 
intent(inout) :: w2
 
  515    type(field_t), 
intent(inout) :: w3
 
  516    type(field_t), 
intent(inout) :: u1
 
  517    type(field_t), 
intent(inout) :: u2
 
  518    type(field_t), 
intent(inout) :: u3
 
  519    type(field_t), 
intent(inout) :: work1
 
  520    type(field_t), 
intent(inout) :: work2
 
  521    type(coef_t), 
intent(in) :: c_xh
 
  522    integer :: gdim, n, nelv
 
  529#if defined(HAVE_HIP) || defined(HAVE_CUDA) || defined(HAVE_OPENCL) 
  532         c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
 
  533         c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  534         c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  537         c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
 
  538         c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  539         c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  542         c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
 
  543         c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  544         c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  546    if (gdim .eq. 3) 
then 
  549            c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
 
  550            c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  551            c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  554            c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
 
  555            c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  556            c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  559            c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
 
  560            c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  561            c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  563       call device_sub3(w1%x_d, work1%x_d, work2%x_d, n)
 
  565       call device_copy(w1%x_d, work1%x_d, n)
 
  568    if (gdim .eq. 3) 
then 
  571            c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
 
  572            c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  573            c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  575            c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
 
  576            c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  577            c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  580            c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
 
  581            c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  582            c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  584            c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
 
  585            c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  586            c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  589            c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
 
  590            c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  591            c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  593            c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
 
  594            c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  595            c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  597       call device_sub3(w2%x_d, work1%x_d, work2%x_d, n)
 
  599       call device_rzero (work1%x_d, n)
 
  602            c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
 
  603            c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  604            c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  607            c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
 
  608            c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  609            c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  612            c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
 
  613            c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  614            c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  616       call device_sub3(w2%x_d, work1%x_d, work2%x_d, n)
 
  621         c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
 
  622         c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  623         c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  625         c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
 
  626         c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  627         c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  630         c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
 
  631         c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  632         c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  634         c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
 
  635         c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  636         c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  639         c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
 
  640         c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  641         c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  643         c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
 
  644         c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
 
  645         c_xh%jacinv_d, nelv, c_xh%Xh%lx)
 
  647    call device_sub3(w3%x_d, work1%x_d, work2%x_d, n)
 
  650    call device_opcolv(w1%x_d, w2%x_d, w3%x_d, c_xh%B_d, gdim, n)
 
  651    call c_xh%gs_h%op(w1, gs_op_add)
 
  652    call c_xh%gs_h%op(w2, gs_op_add)
 
  653    call c_xh%gs_h%op(w3, gs_op_add)
 
  654    call device_opcolv(w1%x_d, w2%x_d, w3%x_d, c_xh%Binv_d, gdim, n)
 
  657    call neko_error(
'No device backend configured')
 
 
  662  function opr_device_cfl(dt, u, v, w, Xh, coef, nelv, gdim) 
result(cfl)
 
  665    integer :: nelv, gdim
 
  667    real(kind=rp), 
dimension(Xh%lx, Xh%ly, Xh%lz, nelv) :: u, v, w
 
  669    type(c_ptr) :: u_d, v_d, w_d
 
  671    u_d = device_get_ptr(u)
 
  672    v_d = device_get_ptr(v)
 
  673    w_d = device_get_ptr(w)
 
  676    cfl = 
hip_cfl(dt, u_d, v_d, w_d, &
 
  677         coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
 
  678         coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
 
  679         coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
 
  680         xh%dr_inv_d, xh%ds_inv_d, xh%dt_inv_d, &
 
  681         coef%jacinv_d, nelv, xh%lx)
 
  684         coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
 
  685         coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
 
  686         coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
 
  687         xh%dr_inv_d, xh%ds_inv_d, xh%dt_inv_d, &
 
  688         coef%jacinv_d, nelv, xh%lx)
 
  691         coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
 
  692         coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
 
  693         coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
 
  694         xh%dr_inv_d, xh%ds_inv_d, xh%dt_inv_d, &
 
  695         coef%jacinv_d, nelv, xh%lx)
 
  698    call neko_error(
'No device backend configured')
 
 
Return the device pointer for an associated Fortran array.
 
subroutine, public device_rzero(a_d, n)
Zero a real vector.
 
subroutine, public device_sub3(a_d, b_d, c_d, n)
Vector subtraction .
 
subroutine, public device_copy(a_d, b_d, n)
Copy a vector .
 
subroutine, public device_opcolv(a1_d, a2_d, a3_d, c_d, gdim, n)
 
Device abstraction, common interface for various accelerators.
 
A simulation component that computes lambda2 The values are stored in the field registry under the na...
 
integer, parameter, public c_rp
 
integer, parameter, public rp
Global precision used in computations.
 
Operators accelerator backends.
 
subroutine, public opr_device_curl(w1, w2, w3, u1, u2, u3, work1, work2, c_xh)
 
subroutine, public opr_device_cdtp(dtx, x, dr, ds, dt, coef)
 
real(kind=rp) function, public opr_device_cfl(dt, u, v, w, xh, coef, nelv, gdim)
 
subroutine, public opr_device_dudxyz(du, u, dr, ds, dt, coef)
 
subroutine, public opr_device_opgrad(ux, uy, uz, u, coef)
 
subroutine, public opr_device_conv1(du, u, vx, vy, vz, xh, coef, nelv, gdim)
 
subroutine, public opr_device_lambda2(lambda2, u, v, w, coef)
 
Defines a function space.
 
void opencl_cdtp(void *dtx, void *x, void *dr, void *ds, void *dt, void *dxt, void *dyt, void *dzt, void *w3, int *nel, int *lx)
 
void cuda_cdtp(void *dtx, void *x, void *dr, void *ds, void *dt, void *dxt, void *dyt, void *dzt, void *w3, int *nel, int *lx)
 
real opencl_cfl(real *dt, void *u, void *v, void *w, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *dr_inv, void *ds_inv, void *dt_inv, void *jacinv, int *nel, int *lx)
 
real cuda_cfl(real *dt, void *u, void *v, void *w, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *dr_inv, void *ds_inv, void *dt_inv, void *jacinv, int *nel, int *lx)
 
void opencl_conv1(void *du, void *u, void *vx, void *vy, void *vz, void *dx, void *dy, void *dz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *jacinv, int *nel, int *gdim, int *lx)
 
void cuda_conv1(void *du, void *u, void *vx, void *vy, void *vz, void *dx, void *dy, void *dz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *jacinv, int *nel, int *gdim, int *lx)
 
void opencl_dudxyz(void *du, void *u, void *dr, void *ds, void *dt, void *dx, void *dy, void *dz, void *jacinv, int *nel, int *lx)
 
void cuda_dudxyz(void *du, void *u, void *dr, void *ds, void *dt, void *dx, void *dy, void *dz, void *jacinv, int *nel, int *lx)
 
void opencl_lambda2(void *lambda2, void *u, void *v, void *w, void *dx, void *dy, void *dz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *jacinv, int *nel, int *lx)
 
void cuda_lambda2(void *lambda2, void *u, void *v, void *w, void *dx, void *dy, void *dz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *jacinv, int *nel, int *lx)
 
void opencl_opgrad(void *ux, void *uy, void *uz, void *u, void *dx, void *dy, void *dz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *w3, int *nel, int *lx)
 
void cuda_opgrad(void *ux, void *uy, void *uz, void *u, void *dx, void *dy, void *dz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *w3, int *nel, int *lx)
 
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
 
The function space for the SEM solution fields.