seed_tracer_uniform_impl Subroutine

private pure subroutine seed_tracer_uniform_impl(hTr, h_layer, tracer_const, nz_ml)

Seed hTr = const * h_layer for a uniform-IC tracer (salinity).

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(inout) :: hTr(:,:,:)
real(kind=wp), intent(in) :: h_layer(:,:,:)
real(kind=wp), intent(in) :: tracer_const
integer, intent(in) :: nz_ml

Called by

proc~~seed_tracer_uniform_impl~~CalledByGraph proc~seed_tracer_uniform_impl seed_tracer_uniform_impl proc~ocean_state_seed_from_cfg ocean_state_seed_from_cfg proc~ocean_state_seed_from_cfg->proc~seed_tracer_uniform_impl proc~seed_baroclinic_jet_ic seed_baroclinic_jet_ic proc~ocean_state_seed_from_cfg->proc~seed_baroclinic_jet_ic proc~seed_geostrophic_adjustment_ic seed_geostrophic_adjustment_ic proc~ocean_state_seed_from_cfg->proc~seed_geostrophic_adjustment_ic proc~seed_baroclinic_jet_ic->proc~seed_tracer_uniform_impl proc~seed_geostrophic_adjustment_ic->proc~seed_tracer_uniform_impl proc~engine_setup engine_setup proc~engine_setup->proc~ocean_state_seed_from_cfg proc~complete_ocean_create complete_ocean_create proc~complete_ocean_create->proc~engine_setup proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_setup proc~driver_validate driver_validate proc~driver_validate->proc~engine_setup proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean proc~rdb_ocean_create_finalize rdb_ocean_create_finalize proc~rdb_ocean_create_finalize->proc~complete_ocean_create proc~rdb_ocean_create_from_string rdb_ocean_create_from_string proc~rdb_ocean_create_from_string->proc~complete_ocean_create

Variables

Type Visibility Attributes Name Initial
integer, private :: i
integer, private :: j
integer, private :: k
integer, private :: nx
integer, private :: ny

Source Code

   pure subroutine seed_tracer_uniform_impl(hTr, h_layer, tracer_const, nz_ml)
      !! Seed `hTr = const * h_layer` for a uniform-IC tracer (salinity).
      ! assumed-shape-ok: init routine called once at startup; size(hTr,1/2)
      ! used to derive loop bounds (flat-impl over registry-dereferenced allocatables).
      real(wp), intent(inout) :: hTr(:, :, :)
      real(wp), intent(in)    :: h_layer(:, :, :)  ! assumed-shape-ok: init routine; size() derives loop bounds
      real(wp), intent(in)    :: tracer_const
      integer, intent(in)    :: nz_ml
      integer :: i, j, k, nx, ny
      nx = size(hTr, 1)
      ny = size(hTr, 2)
      ! Plain host loop ON PURPOSE: this runs BEFORE enter_data, so a
      ! do concurrent here makes -stdpar=gpu implicitly round-trip the
      ! (unmapped) arrays through the device per loop — measured 36.9 s
      ! of ic_seed at 5.3M cells.  Setup-only code seeds on the host;
      ! enter_data then maps the seeded values once.
      do k = 1, nz_ml
         do j = 1, ny
            do i = 1, nx
               hTr(i, j, k) = tracer_const*h_layer(i, j, k)
            end do
         end do
      end do
   end subroutine seed_tracer_uniform_impl