initial_condition Subroutine

public subroutine initial_condition(igrid)

Uses

  • proc~~initial_condition~~UsesGraph proc~initial_condition initial_condition module~mod_comm_lib mod_comm_lib proc~initial_condition->module~mod_comm_lib module~mod_geometry mod_geometry proc~initial_condition->module~mod_geometry module~mod_global_parameters mod_global_parameters proc~initial_condition->module~mod_global_parameters module~mod_usr_methods mod_usr_methods proc~initial_condition->module~mod_usr_methods module~mod_geometry->module~mod_comm_lib module~mod_basic_types mod_basic_types module~mod_global_parameters->module~mod_basic_types module~mod_connectivity mod_connectivity module~mod_global_parameters->module~mod_connectivity module~mod_constants mod_constants module~mod_global_parameters->module~mod_constants module~mod_physicaldata mod_physicaldata module~mod_global_parameters->module~mod_physicaldata module~mod_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_variables->module~mod_basic_types

fill in initial condition

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: igrid

Calls

proc~~initial_condition~~CallsGraph proc~initial_condition initial_condition proc~mpistop mpistop proc~initial_condition->proc~mpistop proc~sync_positions_host sync_positions_host proc~initial_condition->proc~sync_positions_host mpi_abort mpi_abort proc~mpistop->mpi_abort

Called by

proc~~initial_condition~~CalledByGraph proc~initial_condition initial_condition proc~coarsen_grid_siblings coarsen_grid_siblings proc~coarsen_grid_siblings->proc~initial_condition proc~initlevelone initlevelone proc~initlevelone->proc~initial_condition proc~refine_grids refine_grids proc~refine_grids->proc~initial_condition proc~amr_coarsen_refine amr_coarsen_refine proc~amr_coarsen_refine->proc~coarsen_grid_siblings proc~amr_coarsen_refine->proc~refine_grids proc~main main proc~main->proc~initlevelone proc~resettree_convert resettree_convert proc~main->proc~resettree_convert proc~settree settree proc~main->proc~settree proc~timeintegration timeintegration proc~main->proc~timeintegration proc~resettree resettree proc~resettree->proc~amr_coarsen_refine proc~resettree_convert->proc~amr_coarsen_refine proc~settree->proc~amr_coarsen_refine program~agile agile program~agile->proc~main proc~timeintegration->proc~resettree

Source Code

  subroutine initial_condition(igrid)
    ! Need only to set the mesh values (can leave ghost cells untouched)
    use mod_usr_methods, only: usr_init_one_grid
    use mod_global_parameters
    use mod_geometry, only: sync_positions_host
    use mod_comm_lib, only: mpistop

    integer, intent(in) :: igrid

    ! usr_init_one_grid below reads ps(igrid)%x on the host, while alloc_node
    ! built this block's geometry on the device and left it there.  The fetch
    ! belongs here rather than at each call site: every caller needs it, and a
    ! call site can be forgotten - refine_grids once was, so blocks created by
    ! refinement were initialised at whatever coordinates the previous occupant
    ! of that igrid slot had left in the host array.
    call sync_positions_host(igrid)

    ! in case gradient routine used in initial condition, ensure geometry known
    block=>ps(igrid)
      dxlevel(1)=rnode(rpdx1_,igrid);dxlevel(2)=rnode(rpdx2_,igrid)
      dxlevel(3)=rnode(rpdx3_,igrid);

      if (.not. associated(usr_init_one_grid)) then
         call mpistop("usr_init_one_grid not defined")
      else
         call usr_init_one_grid(ixGlo1,ixGlo2,ixGlo3,ixGhi1,ixGhi2,ixGhi3,ixMlo1,&
              ixMlo2,ixMlo3,ixMhi1,ixMhi2,ixMhi3,ps(igrid)%w,ps(igrid)%x)
      end if

      ! only the machinery-carried variables (1:nwgc); any analytic extras past
      ! nwgc are device-resident from alloc_node and must not be clobbered by
      ! this host-to-device push
      
    end subroutine initial_condition