barotropic_workstate_enter_data Subroutine

private 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.

Type Bound

barotropic_workstate_t

Arguments

Type IntentOptional Attributes Name
class(barotropic_workstate_t), intent(inout) :: this

Calls

proc~~barotropic_workstate_enter_data~~CallsGraph proc~barotropic_workstate_enter_data barotropic_workstate_t%barotropic_workstate_enter_data proc~barotropic_workstate_enter_data_impl barotropic_workstate_enter_data_impl proc~barotropic_workstate_enter_data->proc~barotropic_workstate_enter_data_impl

Source Code

   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