Write_MultiSetModel3D_t Subroutine

public subroutine Write_MultiSetModel3D_t(this, filename)

Write every set's solution and geometry to one HDF5 file; see the module documentation for the layout. Without filename the file is solution..h5, as for a single model.

Collective over the global mesh communicator. Ranks with no elements of a set still take part in every dataset of that set.

Arguments

TypeIntentOptionalAttributesName
class(MultiSetModel3D_t), intent(inout) :: this
character, intent(in), optional :: filename

Calls

proc~~write_multisetmodel3d_t~~CallsGraph proc~write_multisetmodel3d_t Write_MultiSetModel3D_t interface~open_hdf5 Open_HDF5 proc~write_multisetmodel3d_t->interface~open_hdf5 proc~close_hdf5 Close_HDF5 proc~write_multisetmodel3d_t->proc~close_hdf5 interface~writearray_hdf5 WriteArray_HDF5 proc~write_multisetmodel3d_t->interface~writearray_hdf5 proc~creategroup_hdf5 CreateGroup_HDF5 proc~write_multisetmodel3d_t->proc~creategroup_hdf5 proc~writesetarray_hdf5 WriteSetArray_HDF5 proc~write_multisetmodel3d_t->proc~writesetarray_hdf5 proc~open_hdf5_parallel Open_HDF5_parallel interface~open_hdf5->proc~open_hdf5_parallel proc~open_hdf5_serial Open_HDF5_serial interface~open_hdf5->proc~open_hdf5_serial h5fclose_f h5fclose_f proc~close_hdf5->h5fclose_f h5close_f h5close_f proc~close_hdf5->h5close_f proc~writearray_hdf5_real_r3_parallel WriteArray_HDF5_real_r3_parallel interface~writearray_hdf5->proc~writearray_hdf5_real_r3_parallel proc~writearray_hdf5_int32_r2_serial WriteArray_HDF5_int32_r2_serial interface~writearray_hdf5->proc~writearray_hdf5_int32_r2_serial proc~writearray_hdf5_real_r5_serial WriteArray_HDF5_real_r5_serial interface~writearray_hdf5->proc~writearray_hdf5_real_r5_serial proc~writearray_hdf5_int32_r1_serial WriteArray_HDF5_int32_r1_serial interface~writearray_hdf5->proc~writearray_hdf5_int32_r1_serial proc~writearray_hdf5_real_r4_parallel WriteArray_HDF5_real_r4_parallel interface~writearray_hdf5->proc~writearray_hdf5_real_r4_parallel proc~writearray_hdf5_int32_r4_serial WriteArray_HDF5_int32_r4_serial interface~writearray_hdf5->proc~writearray_hdf5_int32_r4_serial proc~writearray_hdf5_real_r1_serial WriteArray_HDF5_real_r1_serial interface~writearray_hdf5->proc~writearray_hdf5_real_r1_serial proc~writearray_hdf5_real_r3_serial WriteArray_HDF5_real_r3_serial interface~writearray_hdf5->proc~writearray_hdf5_real_r3_serial proc~writearray_hdf5_real_r4_serial WriteArray_HDF5_real_r4_serial interface~writearray_hdf5->proc~writearray_hdf5_real_r4_serial proc~writearray_hdf5_real_r2_serial WriteArray_HDF5_real_r2_serial interface~writearray_hdf5->proc~writearray_hdf5_real_r2_serial proc~writearray_hdf5_int32_r3_serial WriteArray_HDF5_int32_r3_serial interface~writearray_hdf5->proc~writearray_hdf5_int32_r3_serial h5lexists_f h5lexists_f proc~creategroup_hdf5->h5lexists_f h5gcreate_f h5gcreate_f proc~creategroup_hdf5->h5gcreate_f h5gclose_f h5gclose_f proc~creategroup_hdf5->h5gclose_f h5sclose_f h5sclose_f proc~writesetarray_hdf5->h5sclose_f h5dclose_f h5dclose_f proc~writesetarray_hdf5->h5dclose_f h5kind_to_type h5kind_to_type proc~writesetarray_hdf5->h5kind_to_type h5pclose_f h5pclose_f proc~writesetarray_hdf5->h5pclose_f h5dcreate_f h5dcreate_f proc~writesetarray_hdf5->h5dcreate_f h5pcreate_f h5pcreate_f proc~writesetarray_hdf5->h5pcreate_f h5pset_dxpl_mpio_f h5pset_dxpl_mpio_f proc~writesetarray_hdf5->h5pset_dxpl_mpio_f h5dwrite_f h5dwrite_f proc~writesetarray_hdf5->h5dwrite_f h5sselect_hyperslab_f h5sselect_hyperslab_f proc~writesetarray_hdf5->h5sselect_hyperslab_f h5sselect_none_f h5sselect_none_f proc~writesetarray_hdf5->h5sselect_none_f h5screate_simple_f h5screate_simple_f proc~writesetarray_hdf5->h5screate_simple_f proc~writearray_hdf5_real_r3_parallel->h5sclose_f proc~writearray_hdf5_real_r3_parallel->h5dclose_f proc~writearray_hdf5_real_r3_parallel->h5pclose_f proc~writearray_hdf5_real_r3_parallel->h5dcreate_f proc~writearray_hdf5_real_r3_parallel->h5pcreate_f proc~writearray_hdf5_real_r3_parallel->h5pset_dxpl_mpio_f proc~writearray_hdf5_real_r3_parallel->h5dwrite_f proc~writearray_hdf5_real_r3_parallel->h5sselect_hyperslab_f proc~writearray_hdf5_real_r3_parallel->h5screate_simple_f proc~writearray_hdf5_int32_r2_serial->h5sclose_f proc~writearray_hdf5_int32_r2_serial->h5dclose_f proc~writearray_hdf5_int32_r2_serial->h5dcreate_f proc~writearray_hdf5_int32_r2_serial->h5dwrite_f proc~writearray_hdf5_int32_r2_serial->h5screate_simple_f proc~open_hdf5_parallel->h5pclose_f proc~open_hdf5_parallel->h5pcreate_f h5open_f h5open_f proc~open_hdf5_parallel->h5open_f h5fopen_f h5fopen_f proc~open_hdf5_parallel->h5fopen_f h5pset_fapl_mpio_f h5pset_fapl_mpio_f proc~open_hdf5_parallel->h5pset_fapl_mpio_f h5fcreate_f h5fcreate_f proc~open_hdf5_parallel->h5fcreate_f proc~writearray_hdf5_real_r5_serial->h5sclose_f proc~writearray_hdf5_real_r5_serial->h5dclose_f proc~writearray_hdf5_real_r5_serial->h5dcreate_f proc~writearray_hdf5_real_r5_serial->h5dwrite_f proc~writearray_hdf5_real_r5_serial->h5screate_simple_f proc~writearray_hdf5_int32_r1_serial->h5sclose_f proc~writearray_hdf5_int32_r1_serial->h5dclose_f proc~writearray_hdf5_int32_r1_serial->h5dcreate_f proc~writearray_hdf5_int32_r1_serial->h5dwrite_f proc~writearray_hdf5_int32_r1_serial->h5screate_simple_f proc~writearray_hdf5_real_r4_parallel->h5sclose_f proc~writearray_hdf5_real_r4_parallel->h5dclose_f proc~writearray_hdf5_real_r4_parallel->h5pclose_f proc~writearray_hdf5_real_r4_parallel->h5dcreate_f proc~writearray_hdf5_real_r4_parallel->h5pcreate_f proc~writearray_hdf5_real_r4_parallel->h5pset_dxpl_mpio_f proc~writearray_hdf5_real_r4_parallel->h5dwrite_f proc~writearray_hdf5_real_r4_parallel->h5sselect_hyperslab_f proc~writearray_hdf5_real_r4_parallel->h5screate_simple_f proc~writearray_hdf5_int32_r4_serial->h5sclose_f proc~writearray_hdf5_int32_r4_serial->h5dclose_f proc~writearray_hdf5_int32_r4_serial->h5dcreate_f proc~writearray_hdf5_int32_r4_serial->h5dwrite_f proc~writearray_hdf5_int32_r4_serial->h5screate_simple_f proc~open_hdf5_serial->h5open_f proc~open_hdf5_serial->h5fopen_f proc~open_hdf5_serial->h5fcreate_f proc~writearray_hdf5_real_r1_serial->h5sclose_f proc~writearray_hdf5_real_r1_serial->h5dclose_f proc~writearray_hdf5_real_r1_serial->h5dcreate_f proc~writearray_hdf5_real_r1_serial->h5dwrite_f proc~writearray_hdf5_real_r1_serial->h5screate_simple_f proc~writearray_hdf5_real_r3_serial->h5sclose_f proc~writearray_hdf5_real_r3_serial->h5dclose_f proc~writearray_hdf5_real_r3_serial->h5dcreate_f proc~writearray_hdf5_real_r3_serial->h5dwrite_f proc~writearray_hdf5_real_r3_serial->h5screate_simple_f proc~writearray_hdf5_real_r4_serial->h5sclose_f proc~writearray_hdf5_real_r4_serial->h5dclose_f proc~writearray_hdf5_real_r4_serial->h5dcreate_f proc~writearray_hdf5_real_r4_serial->h5dwrite_f proc~writearray_hdf5_real_r4_serial->h5screate_simple_f proc~writearray_hdf5_real_r2_serial->h5sclose_f proc~writearray_hdf5_real_r2_serial->h5dclose_f proc~writearray_hdf5_real_r2_serial->h5dcreate_f proc~writearray_hdf5_real_r2_serial->h5dwrite_f proc~writearray_hdf5_real_r2_serial->h5screate_simple_f proc~writearray_hdf5_int32_r3_serial->h5sclose_f proc~writearray_hdf5_int32_r3_serial->h5dclose_f proc~writearray_hdf5_int32_r3_serial->h5dcreate_f proc~writearray_hdf5_int32_r3_serial->h5dwrite_f proc~writearray_hdf5_int32_r3_serial->h5screate_simple_f

Contents


Source Code

  subroutine Write_MultiSetModel3D_t(this,filename)
    !! Write every set's solution and geometry to one HDF5 file; see the module
    !! documentation for the layout. Without filename the file is
    !! solution.<ioIterate>.h5, as for a single model.
    !!
    !! Collective over the global mesh communicator. Ranks with no elements of a set
    !! still take part in every dataset of that set.
    implicit none
    class(MultiSetModel3D_t),intent(inout) :: this
    character(*),intent(in),optional :: filename
    ! Local
    integer(HID_T) :: fileId
    character(LEN=self_FileNameLength) :: pickupFile
    character(13) :: timeStampString
    character(4) :: setString
    character(1) :: dimString
    character(LEN=:),allocatable :: group
    integer :: k,ivar,idir,elemOffset
    logical :: parallel

    if(present(filename)) then
      pickupFile = filename
    else
      write(timeStampString,'(I13.13)') this%ioIterate
      pickupFile = 'solution.'//timeStampString//'.h5'
    endif
    parallel = this%globalMesh%decomp%mpiEnabled
    if(this%globalMesh%decomp%rankId == 0) then
      print*,__FILE__//" : Writing pickup file : "//trim(pickupFile)
    endif

    if(parallel) then
      call Open_HDF5(pickupFile,H5F_ACC_TRUNC_F,fileId,this%globalMesh%decomp%mpiComm)
    else
      call Open_HDF5(pickupFile,H5F_ACC_TRUNC_F,fileId)
    endif

    call this%sets(1)%model%solution%interp%WriteHDF5(fileId)
    call CreateGroup_HDF5(fileId,'/elementsets')
    call WriteArray_HDF5(fileId,'/elementsets/setOfElem',this%setOfElem)

    do k = 1,this%nSets
      write(setString,'(I4.4)') k
      group = '/set_'//setString
      call CreateGroup_HDF5(fileId,group)
      call CreateGroup_HDF5(fileId,group//'/controlgrid')
      call CreateGroup_HDF5(fileId,group//'/controlgrid/solution')
      call CreateGroup_HDF5(fileId,group//'/controlgrid/geometry')

      elemOffset = this%sets(k)%mesh%decomp%offsetElem(this%globalMesh%decomp%rankId+1)
      call this%sets(k)%model%solution%UpdateHost()
      do ivar = 1,this%sets(k)%model%solution%nVar
        call WriteSetArray_HDF5(fileId, &
                                group//'/controlgrid/solution/'// &
                                trim(this%sets(k)%model%solution%meta(ivar)%name), &
                                this%sets(k)%model%solution%interior(:,:,:,:,ivar), &
                                elemOffset,this%sets(k)%mesh%nGlobalElem,parallel)
      enddo
      do idir = 1,3
        write(dimString,'(I1)') idir
        call WriteSetArray_HDF5(fileId, &
                                group//'/controlgrid/geometry/'// &
                                trim(this%sets(k)%geometry%x%meta(1)%name)//'_dim'//dimString, &
                                this%sets(k)%geometry%x%interior(:,:,:,:,1,idir), &
                                elemOffset,this%sets(k)%mesh%nGlobalElem,parallel)
      enddo
    enddo

    call Close_HDF5(fileId)

  endsubroutine Write_MultiSetModel3D_t