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 realtimeanalysis realtimeanalysis program~main->realtimeanalysis statevevtor statevevtor program~main->statevevtor timestepcontrol timestepcontrol program~main->timestepcontrol updateconsv updateconsv program~main->updateconsv proc~xbcsendrecv XbcSendRecv proc~boundarycondition->proc~xbcsendrecv proc~ybcsendrecv YbcSendRecv proc~boundarycondition->proc~ybcsendrecv proc~zbcsendrecv ZbcSendRecv proc~boundarycondition->proc~zbcsendrecv mpi_finalize mpi_finalize proc~finalizempi->mpi_finalize 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 omp_get_num_devices omp_get_num_devices proc~initializempi->omp_get_num_devices omp_set_default_device omp_set_default_device proc~initializempi->omp_set_default_device mpi_irecv mpi_irecv proc~xbcsendrecv->mpi_irecv mpi_isend mpi_isend proc~xbcsendrecv->mpi_isend mpi_waitall mpi_waitall proc~xbcsendrecv->mpi_waitall proc~ybcsendrecv->mpi_irecv proc~ybcsendrecv->mpi_isend proc~ybcsendrecv->mpi_waitall proc~zbcsendrecv->mpi_irecv proc~zbcsendrecv->mpi_isend proc~zbcsendrecv->mpi_waitall

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 config, only: benchmarkmode
  use omp_lib
  use basicmod
  use mpimod
  use boundarymod
  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 *, "Intermediate results are not outputed"
!$omp target enter data map(alloc: x1b,x1a,x2b,x2a,x3b,x3a)
!$omp target enter data map(alloc: d,et,mv1,mv2,mv3)
!$omp target enter data map(alloc: p,ei,v1,v2,v3,cs)
!$omp target enter data map(alloc: b1,b2,b3,bp)
!$omp target enter data map(alloc: gp)
!$omp target enter data map(alloc: DXcomp,Xcomp)
!$omp target enter data map(alloc: BsXstt,BsXend,BsYstt,BsYend,BsZstt,BsZend)
!$omp target enter data map(alloc: BrXstt,BrXend,BrYstt,BrYend,BrZstt,BrZend)

  call GenerateGrid
  call GenerateProblem
  call ConsvVariable
  call RealTimeAnalysis
  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 RealTimeAnalysis
     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 RealTimeAnalysis
  call Output(forceoutput)

  call FinalizeMPI
!$omp target exit data map(delete: x1b,x1a,x2b,x2a,x3b,x3a)
!$omp target exit data map(delete: d,et,mv1,mv2,mv3)
!$omp target exit data map(delete: p,ei,v1,v2,v3,cs)
!$omp target exit data map(delete: b1,b2,b3,bp)
!$omp target exit data map(delete: gp)
!$omp target exit data map(delete: DXcomp,Xcomp)
!$omp target exit data map(delete: BsXstt,BsXend,BsYstt,BsYend,BsZstt,BsZend)
!$omp target exit data map(delete: BrXstt,BrXend,BrYstt,BrYend,BrZstt,BrZend)

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