fill_boundary_after_gc Subroutine

public subroutine fill_boundary_after_gc(s, igrid, time, qdt)

Uses

  • proc~~fill_boundary_after_gc~~UsesGraph proc~fill_boundary_after_gc fill_boundary_after_gc module~mod_boundary_conditions mod_boundary_conditions proc~fill_boundary_after_gc->module~mod_boundary_conditions module~mod_global_parameters mod_global_parameters proc~fill_boundary_after_gc->module~mod_global_parameters 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

Physical boundary conditions

Arguments

Type IntentOptional Attributes Name
type(state), intent(inout) :: s
integer, intent(in) :: igrid
double precision, intent(in) :: time
double precision, intent(in) :: qdt

Calls

proc~~fill_boundary_after_gc~~CallsGraph proc~fill_boundary_after_gc fill_boundary_after_gc proc~bc_phys bc_phys proc~fill_boundary_after_gc->proc~bc_phys specialbound_usr specialbound_usr proc~bc_phys->specialbound_usr

Called by

proc~~fill_boundary_after_gc~~CalledByGraph proc~fill_boundary_after_gc fill_boundary_after_gc proc~getbc getbc proc~getbc->proc~fill_boundary_after_gc proc~add_split_source add_split_source proc~add_split_source->proc~getbc proc~add_split_source~2 add_split_source proc~add_split_source~2->proc~getbc proc~add_split_source~3 add_split_source proc~add_split_source~3->proc~getbc proc~add_split_source~4 add_split_source proc~add_split_source~4->proc~getbc proc~advect1 advect1 proc~advect1->proc~getbc proc~amr_coarsen_refine amr_coarsen_refine proc~amr_coarsen_refine->proc~getbc proc~global_implicit_update global_implicit_update proc~global_implicit_update->proc~getbc proc~improve_initial_condition improve_initial_condition proc~improve_initial_condition->proc~getbc proc~recalculateb recalculateB proc~improve_initial_condition->proc~recalculateb proc~initlevelone initlevelone proc~initlevelone->proc~getbc proc~main main proc~main->proc~getbc proc~main->proc~improve_initial_condition proc~main->proc~initlevelone proc~process process proc~main->proc~process 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~process->proc~getbc proc~process_advanced process_advanced proc~process_advanced->proc~getbc proc~recalculateb->proc~getbc proc~resettree_convert->proc~getbc proc~resettree_convert->proc~amr_coarsen_refine proc~saveamrfile saveamrfile proc~saveamrfile->proc~getbc proc~advect advect proc~advect->proc~advect1 proc~resettree resettree proc~resettree->proc~amr_coarsen_refine proc~settree->proc~amr_coarsen_refine proc~timeintegration->proc~process proc~timeintegration->proc~process_advanced proc~timeintegration->proc~saveamrfile proc~timeintegration->proc~resettree proc~advance advance proc~timeintegration->proc~advance program~agile agile program~agile->proc~main proc~advance->proc~advect

Source Code

  subroutine fill_boundary_after_gc(s,igrid,time,qdt)
    use mod_global_parameters
    use mod_boundary_conditions, only: bc_phys
    

    type(state), intent(inout) :: s
    integer, intent(in) :: igrid
    double precision, intent(in) :: time, qdt

    integer :: idims,iside,i1,i2,i3,kmin1,kmin2,kmin3,kmax1,kmax2,kmax3,&
         ixBmin1,ixBmin2,ixBmin3,ixBmax1,ixBmax2,ixBmax3

    do idims=1,ndim
       ! to avoid using as yet unknown corner info in more than 1D, we
       ! fill only interior mesh ranges of the ghost cell ranges at first,
       ! and progressively enlarge the ranges to include corners later
       kmin1=0; kmax1=0;


       kmin2=merge(1, 0, idims .lt. 2 .and. neighbor_type(0,-1,0,&
            igrid)==1)
       kmax2=merge(1, 0, idims .lt. 2 .and. neighbor_type(0, 1,0,&
            igrid)==1)
       kmin3=merge(1, 0, idims .lt. 3 .and. neighbor_type(0,0,-1,&
            igrid)==1)
       kmax3=merge(1, 0, idims .lt. 3 .and. neighbor_type(0,0, 1,&
            igrid)==1)
       ixBmin1=ixGlo1+kmin1*nghostcells;ixBmin2=ixGlo2+kmin2*nghostcells
       ixBmin3=ixGlo3+kmin3*nghostcells;
       ixBmax1=ixGhi1-kmax1*nghostcells;ixBmax2=ixGhi2-kmax2*nghostcells
       ixBmax3=ixGhi3-kmax3*nghostcells;
       do iside=1,2
          i1=kr(1,idims)*(2*iside-3);i2=kr(2,idims)*(2*iside-3)
          i3=kr(3,idims)*(2*iside-3);
          if (aperiodB(idims)) then
             if (neighbor_type(i1,i2,i3,&
                  igrid) /= neighbor_boundary .and. .not. &
                  s%is_physical_boundary(2*idims-2+iside)) cycle
          else
             if (neighbor_type(i1,i2,i3,igrid) /= neighbor_boundary) cycle
          end if
          call bc_phys(iside,idims,time,qdt,s,bgeo%x(:,:,:,:,igrid),&
               ixGlo1,ixGlo2,ixGlo3,&
               ixGhi1,ixGhi2,ixGhi3,ixBmin1,ixBmin2,ixBmin3,ixBmax1,ixBmax2,&
               ixBmax3)
       end do
    end do

  end subroutine fill_boundary_after_gc