main Program

Uses

  • program~~main~~UsesGraph program~main main module~cdifs cdifs program~main->module~cdifs module~grans grans program~main->module~grans module~leapio leapIO program~main->module~leapio module~leapkinds leapKinds program~main->module~leapkinds module~leapparallel leapParallel program~main->module~leapparallel module~leapparser leapParser program~main->module~leapparser module~leapsolver leapSolver program~main->module~leapsolver module~leaptimer leapTimer program~main->module~leaptimer module~cdifs->module~leapio module~cdifs->module~leapkinds module~cdifs->module~leapparallel module~cdifs->module~leapparser module~cdifs->module~leapsolver module~cdifs->module~leaptimer module~collisions collisions module~cdifs->module~collisions module~immersed_boundaries immersed_boundaries module~cdifs->module~immersed_boundaries module~leapbc leapBC module~cdifs->module~leapbc module~leapblock leapBlock module~cdifs->module~leapblock module~leapdiffop leapDiffOp module~cdifs->module~leapdiffop module~leapeulerian leapEulerian module~cdifs->module~leapeulerian module~leaphypre leapHypre module~cdifs->module~leaphypre module~leapmonitor leapMonitor module~cdifs->module~leapmonitor module~particles_resolved particles_resolved module~cdifs->module~particles_resolved module~grans->module~leapio module~grans->module~leapkinds module~grans->module~leapparallel module~grans->module~leapparser module~grans->module~leapsolver module~grans->module~leaptimer module~grans->module~collisions module~grans->module~immersed_boundaries module~grans->module~leapbc module~grans->module~leapblock module~grans->module~leapdiffop module~grans->module~leapeulerian module~grans->module~leaphypre module~grans->module~leapmonitor module~particles_point particles_point module~grans->module~particles_point module~grans->module~particles_resolved module~leapio_h5hut leapIO_h5hut module~leapio->module~leapio_h5hut module~leapio_hdf5 leapIO_hdf5 module~leapio->module~leapio_hdf5 module~leapio_silo leapIO_silo module~leapio->module~leapio_silo module~leapio_xdmf leapIO_xdmf module~leapio->module~leapio_xdmf iso_fortran_env iso_fortran_env module~leapkinds->iso_fortran_env module~leapparallel->module~leapkinds module~leapparallel->iso_fortran_env mpi_f08 mpi_f08 module~leapparallel->mpi_f08 module~leapparser->module~leapkinds module~leapparser->iso_fortran_env module~leapcli leapCli module~leapparser->module~leapcli module~leapsolver->module~leapio module~leapsolver->module~leapkinds module~leapsolver->module~leapparallel module~leapsolver->module~leapparser module~leapsolver->module~leaptimer module~leaptimer->module~leapkinds module~leaptimer->module~leapparallel module~leaptimer->module~leapparser module~leaputils leapUtils module~leaptimer->module~leaputils module~collisions->module~leapkinds module~collisions->module~leapparallel module~collisions->module~leapparser module~collisions->module~leaptimer module~collisions->module~immersed_boundaries module~collisions->module~leapblock module~collisions->module~leapmonitor module~collisions->module~leaputils module~collisions->module~particles_point module~collisions->module~particles_resolved module~immersed_boundaries_markers immersed_boundaries_markers module~immersed_boundaries->module~immersed_boundaries_markers module~immersed_boundaries_solids immersed_boundaries_solids module~immersed_boundaries->module~immersed_boundaries_solids module~leapbc->module~leapio module~leapbc->module~leapkinds module~leapbc->module~leapparallel module~leapbc->iso_fortran_env module~leapbc->module~leapblock module~leapbc->module~leapeulerian module~leapbc->module~leaputils module~leapbc->mpi_f08 module~leapblock->module~leapkinds module~leapblock->module~leapparallel module~leapblock->iso_fortran_env module~leapblock->module~leapio_hdf5 module~leapblock->mpi_f08 module~leapcli->module~leapkinds module~leapdiffop->module~leapkinds module~leapdiffop->module~leapparallel module~leapdiffop->module~leapbc module~leapdiffop->module~leapblock module~leapdiffop->module~leapeulerian module~leapeulerian->module~leapio module~leapeulerian->module~leapkinds module~leapeulerian->module~leapparallel module~leapeulerian->iso_fortran_env module~leapeulerian->module~leapblock module~leapeulerian->module~leaputils module~leapeulerian->mpi_f08 module~leaphypre->module~leapkinds module~leaphypre->module~leapparallel module~leaphypre->module~leapblock module~leaphypre->module~leapeulerian module~leaphypre->mpi_f08 iso_c_binding iso_c_binding module~leaphypre->iso_c_binding module~leapio_h5hut->module~leapkinds module~leapio_h5hut->module~leapparallel module~leapio_h5hut->module~leapio_hdf5 module~leapio_hdf5->module~leapkinds module~leapio_hdf5->module~leapparallel module~leapio_hdf5->module~leaputils hdf5 hdf5 module~leapio_hdf5->hdf5 module~leapio_silo->module~leapkinds module~leapio_silo->module~leapparallel module~leapio_silo->module~leaputils module~leapio_silo->mpi_f08 module~leapio_xdmf->module~leapkinds module~leapio_xdmf->module~leaputils module~leapmonitor->module~leapkinds module~leapmonitor->module~leapparallel module~leapmonitor->iso_fortran_env module~leapmonitor->module~leaputils module~leaputils->module~leapkinds module~particles_point->module~leapio module~particles_point->module~leapkinds module~particles_point->module~leapparallel module~particles_point->module~leapparser module~particles_point->module~leaptimer module~particles_point->module~immersed_boundaries module~particles_point->module~leapblock module~particles_point->module~leapdiffop module~particles_point->module~leapeulerian module~particles_point->module~leapmonitor module~leaplagrangian leapLagrangian module~particles_point->module~leaplagrangian module~particles_resolved->module~leapio module~particles_resolved->module~leapkinds module~particles_resolved->module~leapparallel module~particles_resolved->module~leapparser module~particles_resolved->module~leaptimer module~particles_resolved->module~immersed_boundaries module~particles_resolved->module~leapbc module~particles_resolved->module~leapblock module~particles_resolved->module~leapdiffop module~particles_resolved->module~leapeulerian module~particles_resolved->module~leapmonitor module~particles_resolved->module~leaplagrangian module~immersed_boundaries_markers->module~leapio module~immersed_boundaries_markers->module~leapkinds module~immersed_boundaries_markers->module~leapparallel module~immersed_boundaries_markers->module~leapparser module~immersed_boundaries_markers->module~leaptimer module~immersed_boundaries_markers->iso_fortran_env module~immersed_boundaries_markers->module~leapbc module~immersed_boundaries_markers->module~leapblock module~immersed_boundaries_markers->module~leapdiffop module~immersed_boundaries_markers->module~leapeulerian module~immersed_boundaries_markers->module~leaphypre module~immersed_boundaries_markers->module~leapmonitor module~immersed_boundaries_markers->module~leaplagrangian module~immersed_boundaries_solids->module~leapio module~immersed_boundaries_solids->module~leapkinds module~immersed_boundaries_solids->module~leapparallel module~immersed_boundaries_solids->module~leapblock module~immersed_boundaries_solids->module~leapeulerian module~immersed_boundaries_solids->module~immersed_boundaries_markers module~immersed_boundaries_solids->module~leaplagrangian module~leaplagrangian->module~leapio module~leaplagrangian->module~leapkinds module~leaplagrangian->module~leapparallel module~leaplagrangian->module~leapblock module~leaplagrangian->module~leaputils module~leaplagrangian->mpi_f08 module~leapfilters leapfilters module~leaplagrangian->module~leapfilters module~leapfilters->module~leapkinds

Main leap program: runs specified solvers


Calls

program~~main~~CallsGraph program~main main AdvanceSolution AdvanceSolution program~main->AdvanceSolution Finalize Finalize program~main->Finalize LinkHDF5Object LinkHDF5Object program~main->LinkHDF5Object Monitor Monitor program~main->Monitor PrepareSolver PrepareSolver program~main->PrepareSolver WriteOutputData WriteOutputData program~main->WriteOutputData WriteRestartData WriteRestartData program~main->WriteRestartData none~get~4 parser_obj%Get program~main->none~get~4 proc~parser_obj_init parser_obj%parser_obj_init program~main->proc~parser_obj_init proc~parser_obj_parsefile parser_obj%parser_obj_ParseFile program~main->proc~parser_obj_parsefile proc~timer_obj_done timer_obj%timer_obj_Done program~main->proc~timer_obj_done proc~timer_obj_stepforward timer_obj%timer_obj_StepForward program~main->proc~timer_obj_stepforward proc~timer_obj_timetowriteoutputdata timer_obj%timer_obj_TimeToWriteOutputData program~main->proc~timer_obj_timetowriteoutputdata proc~timer_obj_timetowriterestartdata timer_obj%timer_obj_TimeToWriteRestartData program~main->proc~timer_obj_timetowriterestartdata proc~parser_obj_read0d parser_obj%parser_obj_read0D none~get~4->proc~parser_obj_read0d proc~parser_obj_read1d parser_obj%parser_obj_read1D none~get~4->proc~parser_obj_read1d proc~cli_obj_get cli_obj%cli_obj_Get proc~parser_obj_parsefile->proc~cli_obj_get proc~parser_obj_parseline parser_obj%parser_obj_ParseLine proc~parser_obj_parsefile->proc~parser_obj_parseline proc~parser_obj_addentry parser_obj%parser_obj_AddEntry proc~parser_obj_parseline->proc~parser_obj_addentry proc~parser_obj_fetchlabelid parser_obj%parser_obj_FetchLabelID proc~parser_obj_parseline->proc~parser_obj_fetchlabelid proc~parser_obj_reformatline parser_obj%parser_obj_ReformatLine proc~parser_obj_parseline->proc~parser_obj_reformatline none~assigndefault parser_obj%AssignDefault proc~parser_obj_read0d->none~assigndefault proc~parser_obj_read0d->proc~parser_obj_fetchlabelid proc~parser_obj_read1d->none~assigndefault proc~parser_obj_read1d->proc~parser_obj_fetchlabelid proc~parser_obj_assigndefault0d parser_obj%parser_obj_AssignDefault0D none~assigndefault->proc~parser_obj_assigndefault0d proc~parser_obj_assigndefault1d parser_obj%parser_obj_AssignDefault1D none~assigndefault->proc~parser_obj_assigndefault1d

Variables

Type Attributes Name Initial
type(hdf5_obj) :: hdf5o

Utility for IO with HDF5

type(parallel_obj) :: parallel

Utility that interfaces with MPI API

type(parser_obj) :: parser

Parses input files

class(solver_obj), allocatable :: solver

Solver to run

character(len=64) :: solver_name

Name of solver to be used

type(timer_obj) :: timer

Timing utility


Source Code

program main
  !>--------------------------------------------------------------------------
  ! Program: LEAP
  ! Author: Mohamed Houssem Kasbaoui
  !
  ! Main leap program: runs specified solvers
  ! --------------------------------------------------------------------------
  use leapKinds
  use leapSolver
  use leapParser
  use leapParallel
  use leapTimer
  use leapIO
  use grans
  use cdifs
  implicit none
  type(parallel_obj)             :: parallel               !! Utility that interfaces with MPI API
  type(parser_obj)               :: parser                 !! Parses input files
  type(hdf5_obj)                 :: hdf5o                  !! Utility for IO with HDF5
  character(len=64)              :: solver_name            !! Name of solver to be used
  class(solver_obj), allocatable :: solver                 !! Solver to run
  type(timer_obj)                :: timer                  !! Timing utility

  ! Initialize parser
  call parser%Initialize()

  ! Parse input file
  call parser%ParseFile()

  ! Initialize parallel environment
  call parallel%Initialize()

  ! Initialize hdf5 interface
  call hdf5o%Initialize(parallel)

  ! Initialize timer
  call timer%Initialize(parallel,parser)

  ! Get solver info
  call parser%Get("Solver",solver_name)

  select case (trim(adjustl(solver_name)))
  case ("grans", "Grans", "GRANS")
    ! GranS: Granular flow solver
    allocate(grans_obj:: solver)
  case ("cdifs", "Cdifs", "CDIFS")
    ! CDIFS: Constant Density Incompressible Flow Solver
    allocate(cdifs_obj:: solver)
  case default
    call parallel%stop("LEAP: Unknown solver")
  end select

  ! Initialize solver
  call solver%Initialize(timer,parallel,parser)

  ! HDF5
  call solver%LinkHDF5Object(hdf5o)

  ! Prepare data
  call solver%PrepareSolver()

  ! Advance solution
  do while ( .not. timer%Done() )
    ! Update timer to new time step
    call timer%StepForward()
    ! Advance solution from n to n+1
    call solver%AdvanceSolution()
    ! Write restart data
    if ( timer%TimeToWriteRestartData()) call solver%WriteRestartData()
    ! Write output data
    if ( timer%TimeToWriteOutputData())  call solver%WriteOutputData()
    ! Write monitor files
    call solver%Monitor()
  end do

  ! Write restart data when ending run
  if (timer%Done()) then
    if (.not.timer%TimeToWriteRestartData()) call solver%WriteRestartData()
  end if

  ! Finalize
  call solver%finalize()
  call timer%finalize()
  call parser%finalize()
  call hdf5o%finalize()
  call parallel%finalize()
end program main