Complete a number of empty writes (due to higher amount of mpi_file_writes from other processes to finalize the write process), close the restart dump file and write the last header.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_restart_type) | :: | me |
the restart information |
|||
type(treelmesh_type) | :: | tree |
mesh, provided in treelm format |
|||
type(tem_time_type), | intent(in) | :: | timing |
The timing object holding the simulation time |
||
type(tem_varSys_type), | intent(in) | :: | varSys |
global variable system defined in solver |
||
type(tem_subTree_type), | optional | :: | subTree |
optional subTree of given tree |
subroutine tem_restart_closeWrite( me, tree, timing, varSys, subTree )
! -------------------------------------------------------------------- !
!> the restart information
type(tem_restart_type) :: me
!> mesh, provided in treelm format
type(treelmesh_type) :: tree
!> The timing object holding the simulation time
type(tem_time_type), intent(in) :: timing
!> global variable system defined in solver
type(tem_varSys_type), intent(in) :: varSys
!> optional subTree of given tree
type(tem_subTree_type), optional :: subTree
! -------------------------------------------------------------------- !
! variables to catch possible MPI I/O errors
integer :: iError
integer :: iChunk ! chunk counter
! temporary buffer array for empty writes
real(kind=rk) :: chunk(1)
! -------------------------------------------------------------------- !
! Check, if the number of calls to mpi_file_write_all corresponds to
! the maximum number throughout all processes
! if local process has performed less writes, we need to complete
! as many empty writes as the difference to maxnChunks
me%nChunkElems = 0
do iChunk = me%write_file%nChunks+1, me%write_file%maxnChunks
call tem_restart_writeData( restart = me, chunk = chunk )
end do
! now close the binary file
call MPI_File_close(me%binaryUnit, iError)
call check_mpi_error( iError,'File close in tem_restart_closeWrite')
call MPI_Barrier( me%comm%comm, iError )
! Now write out the 'last' header which points to the last successful
! restart file.
call tem_restart_writeHeader( me = me, &
& tree = tree, &
& subTree = subTree, &
& timing = timing, &
& varSys = varSys, &
& lastHeader = .true. )
end subroutine tem_restart_closeWrite