Attach the scratch to the device with create — every array is
pure scratch, fully (re)written before it is read on every
ice_evp_dynamics call (masks rebuilt, cell fields filled, the
subcycle kernels overwrite the rest), so create (not copyin)
is correct. One-level components of the type(...) dummy — same
shape as ocean_sea_ice_enter_data_impl, no associate-leaf needed.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(evp_workspace_t), | intent(inout) | :: | this |
subroutine evp_workspace_enter_data_impl(this) !! Attach the scratch to the device with `create` — every array is !! pure scratch, fully (re)written before it is read on every !! `ice_evp_dynamics` call (masks rebuilt, cell fields filled, the !! subcycle kernels overwrite the rest), so `create` (not `copyin`) !! is correct. One-level components of the `type(...)` dummy — same !! shape as `ocean_sea_ice_enter_data_impl`, no associate-leaf needed. type(evp_workspace_t), intent(inout) :: this if (.not. allocated(this%mis_w)) return !$acc enter data create(this%mis_w, this%mice_w, this%ci_w) !$acc enter data create(this%mis_in_w, this%mice_in_w, this%ci_in_w) !$acc enter data create(this%pres_mice_w, this%del_sh_min_pr_w) !$acc enter data create(this%sh_dd_w, this%sh_dt_w, this%zeta_w, this%del_sh_w) !$acc enter data create(this%mask_t_w) !$acc enter data create(this%mi_u_w, this%mask_u_w, this%u_tmp_w) !$acc enter data create(this%mi_v_w, this%mask_v_w) !$acc enter data create(this%a_u_w, this%a_v_w) !$acc enter data create(this%sh_ds_w, this%mi_ratio_a_q_w, this%q_w, this%mask_q_w) end subroutine evp_workspace_enter_data_impl