Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
Source Code
subroutine ocean_surfstress_enter_data_impl(this)type(ocean_surface_stress_t),intent(inout)::this!$acc enter data copyin(this%tau_x, this%tau_y, this%stress_mag, &!$acc this%stress_shelf)! Force the host wind values onto the device. On OpenMP the root! map(to:state) can leave tau_x/tau_y already "present" (descriptors! come over with the parent), making the copyin above a no-op copy —! `update device` (-> omp target update to) pushes the values! regardless of presence. Harmless on OpenACC. `stress_mag` is! filled host-side at configure by `ocean_surface_stress_set_derived`! BEFORE this call — the `update device` here is what pushes it (the! mem:separate trap: a missed push here gives `stress_mag == 0` on! device, silently killing KPP/EPBL wind mixing, CLAUDE.md:312).!$acc update device(this%tau_x, this%tau_y, this%stress_mag, &!$acc this%stress_shelf)call scratch_3d_buffer_enter_data_impl(this%du_stress)call scratch_3d_buffer_enter_data_impl(this%dv_stress)end subroutine ocean_surfstress_enter_data_impl