Attaches component arrays only — no bare copyin(this) (the
polymorphic stack descriptor caused AMD libomptarget cross-slot
overlap). The workstate descriptor reaches the device via the
root copyin(state%ocean) (bt_work is inline all the way up);
the per-slot copyin was a competing second mapping that cost
~36% of the fast loop.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(barotropic_workstate_t), | intent(inout) | :: | this |
subroutine barotropic_workstate_enter_data(this) !! Attaches component arrays only — no bare `copyin(this)` (the !! polymorphic stack descriptor caused AMD libomptarget cross-slot !! overlap). The workstate descriptor reaches the device via the !! root `copyin(state%ocean)` (bt_work is inline all the way up); !! the per-slot copyin was a competing second mapping that cost !! ~36% of the fast loop. class(barotropic_workstate_t), intent(inout) :: this select type (this) type is (barotropic_workstate_t) call barotropic_workstate_enter_data_impl(this) end select end subroutine barotropic_workstate_enter_data