main Program

Uses

  • program~~main~~UsesGraph program~main main module~basicmod basicmod program~main->module~basicmod module~boundarymod boundarymod program~main->module~boundarymod module~config config program~main->module~config module~mpimod mpimod program~main->module~mpimod omp_lib omp_lib program~main->omp_lib module~basicmod->module~config module~boundarymod->module~basicmod module~boundarymod->module~config module~mpimod->module~config mpi mpi module~mpimod->mpi

Calls

program~~main~~CallsGraph program~main main consvvariable consvvariable program~main->consvvariable damppsi damppsi program~main->damppsi evaulatech evaulatech program~main->evaulatech generategrid generategrid program~main->generategrid generateproblem generateproblem program~main->generateproblem gravforce gravforce program~main->gravforce numericalflux1 numericalflux1 program~main->numericalflux1 numericalflux2 numericalflux2 program~main->numericalflux2 numericalflux3 numericalflux3 program~main->numericalflux3 omp_get_wtime omp_get_wtime program~main->omp_get_wtime output output program~main->output primvariable primvariable program~main->primvariable proc~boundarycondition BoundaryCondition program~main->proc~boundarycondition proc~finalizempi FinalizeMPI program~main->proc~finalizempi proc~initializempi InitializeMPI program~main->proc~initializempi statevevtor statevevtor program~main->statevevtor timestepcontrol timestepcontrol program~main->timestepcontrol updateconsv updateconsv program~main->updateconsv mpi_irecv mpi_irecv proc~boundarycondition->mpi_irecv mpi_isend mpi_isend proc~boundarycondition->mpi_isend mpi_waitall mpi_waitall proc~boundarycondition->mpi_waitall mpi_finalize mpi_finalize proc~finalizempi->mpi_finalize acc_get_num_devices acc_get_num_devices proc~initializempi->acc_get_num_devices acc_set_device_num acc_set_device_num proc~initializempi->acc_set_device_num mpi_bcast mpi_bcast proc~initializempi->mpi_bcast mpi_cart_coords mpi_cart_coords proc~initializempi->mpi_cart_coords mpi_cart_create mpi_cart_create proc~initializempi->mpi_cart_create mpi_cart_shift mpi_cart_shift proc~initializempi->mpi_cart_shift mpi_comm_rank mpi_comm_rank proc~initializempi->mpi_comm_rank mpi_comm_set_errhandler mpi_comm_set_errhandler proc~initializempi->mpi_comm_set_errhandler mpi_comm_size mpi_comm_size proc~initializempi->mpi_comm_size mpi_comm_split mpi_comm_split proc~initializempi->mpi_comm_split mpi_init mpi_init proc~initializempi->mpi_init

Variables

Type Attributes Name Initial
logical, parameter :: forceoutput = .true.
logical :: is_final
real(kind=8) :: time_begin
real(kind=8) :: time_end
logical, parameter :: usualoutput = .false.

Source Code

program main
  use omp_lib
  use basicmod
  use mpimod
  use boundarymod
  use config, only: benchmarkmode
  implicit none
  real(8)::time_begin,time_end
  logical::is_final
  logical,parameter:: forceoutput=.true., usualoutput=.false.
  data is_final /.false./
  call InitializeMPI
  if(myid_w == 0) print *, "setup grids and fields"
  if(myid_w == 0) print *, "grid size for x y z",ngrid1*ntiles(1),ngrid2*ntiles(2),ngrid3*ntiles(3)
  if(myid_w == 0 .and. benchmarkmode ) print *, "Only initial and final snaps are dampped. Intermediate steps are not damped for benchmark."
  call GenerateGrid
  call GenerateProblem
  call ConsvVariable
  call Output(forceoutput)  
  if(myid_w == 0) print *, "entering main loop"
! main loop
  if(myid_w == 0 .and. .not. benchmarkmode)                        print *,"step ","time ","dt"
  time_begin = omp_get_wtime()
  mloop: do nhy=1,nhymax
     call TimestepControl
     if(mod(nhy,nhydis) .eq. 0  .and. .not. benchmarkmode .and. myid_w == 0) print *,nhy,time,dt
     call BoundaryCondition
     call StateVevtor
     call GravForce
     call EvaulateCh
     call NumericalFlux1
     call NumericalFlux2
     call NumericalFlux3
     call UpdateConsv
     call DampPsi
     call PrimVariable
     time=time+dt
     if(.not. benchmarkmode ) call Output(usualoutput)
     if(time > timemax) exit mloop
  enddo mloop

  time_end = omp_get_wtime()
      
  if(myid_w == 0) print *, "total step, final dt, final time:", nhy,dt,time
  if(myid_w == 0) print *, "sim time [s]:", time_end-time_begin
  if(myid_w == 0) print *, "time/count/cell", (time_end-time_begin)/(ngrid1*ngrid2*ngrid3*ntiles(1)*ntiles(2)*ntiles(3))/nhy
  
  is_final = .true.
  call Output(forceoutput)

  call FinalizeMPI
  if(myid_w == 0) print *, "program has been finished"
  
end program main