advect Subroutine

private subroutine advect(idimmin, idimmax)

Uses

  • proc~~advect~~UsesGraph proc~advect advect mod_physics mod_physics proc~advect->mod_physics module~mod_comm_lib mod_comm_lib proc~advect->module~mod_comm_lib module~mod_fix_conserve mod_fix_conserve proc~advect->module~mod_fix_conserve module~mod_ghostcells_update mod_ghostcells_update proc~advect->module~mod_ghostcells_update module~mod_global_parameters mod_global_parameters proc~advect->module~mod_global_parameters module~mod_physicaldata mod_physicaldata proc~advect->module~mod_physicaldata module~mod_mpi_wrapper mod_mpi_wrapper module~mod_fix_conserve->module~mod_mpi_wrapper module~mod_ghostcells_update->module~mod_mpi_wrapper module~mod_global_parameters->module~mod_physicaldata 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_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_mpi_wrapper->mpi module~mod_variables->module~mod_basic_types

Advance all grids over one time step, but without taking dimensional splitting or split source terms into account

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: idimmin
integer, intent(in) :: idimmax

Calls

proc~~advect~~CallsGraph proc~advect advect proc~advect1 advect1 proc~advect->proc~advect1 proc~init_comm_fix_conserve init_comm_fix_conserve proc~advect->proc~init_comm_fix_conserve proc~mpistop mpistop proc~advect->proc~mpistop finite_volume_local finite_volume_local proc~advect1->finite_volume_local proc~fix_conserve fix_conserve proc~advect1->proc~fix_conserve proc~getbc getbc proc~advect1->proc~getbc proc~recvflux recvflux proc~advect1->proc~recvflux proc~sendflux sendflux proc~advect1->proc~sendflux proc~init_comm_fix_conserve->proc~mpistop proc~build_message_layout build_message_layout proc~init_comm_fix_conserve->proc~build_message_layout mpi_abort mpi_abort proc~mpistop->mpi_abort proc~build_message_layout->proc~mpistop proc~layout_runs layout_runs proc~build_message_layout->proc~layout_runs proc~fix_conserve->proc~mpistop mpi_get_count mpi_get_count proc~fix_conserve->mpi_get_count mpi_waitall mpi_waitall proc~fix_conserve->mpi_waitall proc~getbc->mpi_waitall mpi_wtime mpi_wtime proc~getbc->mpi_wtime phys_boundary_adjust phys_boundary_adjust proc~getbc->phys_boundary_adjust proc~fill_boundary_after_gc fill_boundary_after_gc proc~getbc->proc~fill_boundary_after_gc proc~fill_boundary_before_gc fill_boundary_before_gc proc~getbc->proc~fill_boundary_before_gc proc~fill_coarse_boundary fill_coarse_boundary proc~getbc->proc~fill_coarse_boundary proc~getintbc getintbc proc~getbc->proc~getintbc proc~idecode~2 idecode proc~getbc->proc~idecode~2 proc~mpi_irecv_wrapper mpi_irecv_wrapper proc~getbc->proc~mpi_irecv_wrapper proc~mpi_isend_wrapper mpi_isend_wrapper proc~getbc->proc~mpi_isend_wrapper proc~nvtxendrange~2 nvtxEndRange proc~getbc->proc~nvtxendrange~2 proc~nvtxstartrange~2 nvtxStartRange proc~getbc->proc~nvtxstartrange~2 proc~skip_direction skip_direction proc~getbc->proc~skip_direction proc~recvflux->proc~mpi_irecv_wrapper proc~sendflux->proc~mpi_isend_wrapper proc~bc_phys bc_phys proc~fill_boundary_after_gc->proc~bc_phys proc~fill_boundary_before_gc->proc~bc_phys proc~fill_coarse_boundary->proc~bc_phys proc~sync_positions_host sync_positions_host proc~getintbc->proc~sync_positions_host proc~rank_keys rank_keys proc~layout_runs->proc~rank_keys mpi_irecv mpi_irecv proc~mpi_irecv_wrapper->mpi_irecv mpi_isend mpi_isend proc~mpi_isend_wrapper->mpi_isend specialbound_usr specialbound_usr proc~bc_phys->specialbound_usr

Called by

proc~~advect~~CalledByGraph proc~advect advect proc~advance advance proc~advance->proc~advect proc~timeintegration timeintegration proc~timeintegration->proc~advance proc~main main proc~main->proc~timeintegration program~agile agile program~agile->proc~main

Source Code

  subroutine advect(idimmin,idimmax)
    use mod_global_parameters
    use mod_fix_conserve
    use mod_ghostcells_update
    use mod_physics, only: phys_req_diagonal
    use mod_comm_lib, only: mpistop
    use mod_physicaldata

    integer, intent(in) :: idimmin,idimmax
    integer             :: iigrid, igrid, ix1,ix2,ix3, iw

    call init_comm_fix_conserve(idimmin,idimmax,nwflux)
    fix_conserve_at_step = time_advance .and. levmax>levmin
    
    ! copy w instead of wold because of potential use of dimsplit or sourcesplit
     
    do iigrid=1,igridstail; igrid=igrids(iigrid);
       
       do iw = 1, nw
          do ix3 = ixGlo3, ixGhi3 
             do ix2 = ixGlo2, ixGhi2 
                do ix1 = ixGlo1, ixGhi1 
                   bg(2)%w(ix1,ix2,ix3,iw,igrid) = bg(1)%w(ix1,ix2,ix3,iw,igrid)
                end do
             end do
          end do
       end do
    end do
    
    if(stagger_grid) then
        
       do iigrid=1,igridstail; igrid=igrids(iigrid);
          
          do iw = 1, nws
             do ix3 = ps(igrid)%ixGsmin3, ps(igrid)%ixGsmax3 
                do ix2 = ps(igrid)%ixGsmin2, ps(igrid)%ixGsmax2 
                   do ix1 = ps(igrid)%ixGsmin1, ps(igrid)%ixGsmax1 
                      ps1(igrid)%ws(ix1,ix2,ix3,iw) = ps(igrid)%ws(ix1,ix2,ix3,iw)
                   end do
                end do
             end do
          end do
       end do
    end if

 istep = 0

 select case (t_stepper)
  
    case (threestep)
       select case (t_integrator)
       ! AGILE this is our integrator (default threestep)
       case (ssprk3)
          ! this is SSPRK(3,3) Gottlieb-Shu 1998 or SSP(3,2) depending on ssprk_order (3 vs 2)
          
          call advect1(flux_method,rk_beta11, idimmin,idimmax,global_time,ps,&
               bg(1),global_time,ps1,bg(2))

           
          do iigrid=1,igridstail_active; igrid=igrids_active(iigrid);
             
             do iw = 1, nw
                do ix3 = ixGlo3, ixGhi3 
                   do ix2 = ixGlo2, ixGhi2 
                      do ix1 = ixGlo1, ixGhi1 
                         bg(3)%w(ix1,ix2,ix3,iw,igrid) = rk_alfa21 * bg(1)%w(ix1,ix2,&
                              ix3,iw,igrid) + rk_alfa22 * bg(2)%w(ix1,ix2,ix3,iw,igrid)
                      end do
                   end do
                end do
             end do
             if(stagger_grid) ps2(igrid)%ws=rk_alfa21*ps(igrid)%ws+&
                  rk_alfa22*ps1(igrid)%ws
          end do

          call advect1(flux_method,rk_beta22, idimmin,idimmax,&
               global_time+rk_c2*dt,ps1,bg(2),global_time+rk_alfa22*rk_c2*dt,ps2,&
               bg(3))

           
          do iigrid=1,igridstail_active; igrid=igrids_active(iigrid);
             
             do iw = 1, nw
                do ix3 = ixGlo3, ixGhi3 
                   do ix2 = ixGlo2, ixGhi2 
                      do ix1 = ixGlo1, ixGhi1 
                         bg(1)%w(ix1,ix2,ix3,iw,igrid) = rk_alfa31 * bg(1)%w(ix1,ix2,&
                              ix3,iw,igrid) + rk_alfa33 * bg(3)%w(ix1,ix2,ix3,iw,igrid)
                      end do
                   end do
                end do
             end do
             if(stagger_grid) ps(igrid)%ws=rk_alfa31*ps(igrid)%ws+&
                  rk_alfa33*ps2(igrid)%ws
          end do

          call advect1(flux_method,rk_beta33, idimmin,idimmax,&
               global_time+rk_c3*dt,ps2,bg(3),global_time+(1.0d0-rk_beta33)*dt,&
               ps,bg(1))

       case default
          call mpistop("unkown threestep time_integrator in advect")
       end select

    case default
       call mpistop("unkown time_stepper in advect")
    end select

  end subroutine advect