Sunteți pe pagina 1din 3

subroutine ReadHDF5Values3D (Instant, Field) !Arguments------------------------------------------------------------integer :: Instant real, dimension(:,:,:), pointer :: Field !Local----------------------------------------------------------------integer :: STAT_CALL !

Begin----------------------------------------------------------------call HDF5SetLimits (Me%HDF%ObjHDF5, & Me%WorkSize3D%ILB, Me%WorkSize3D%IUB, & Me%WorkSize3D%JLB, Me%WorkSize3D%JUB, & Me%WorkSize3D%KLB, Me%WorkSize3D%KUB, & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_)stop 'ReadHDF5Values3D - ModuleFillMatrix - ER R01' call HDF5ReadData(Me%HDF%ObjHDF5, trim(Me%HDF%VGroupPath), & trim(Me%HDF%FieldName), & Array3D = Field, OutputNumber = Instant, STAT = STAT_C ALL) if (STAT_CALL /= SUCCESS_)stop 'ReadHDF5Values3D - ModuleFillMatrix - ER R02' if(Me%HDF%HasMultiplyingFactor)then Field = Field * Me%HDF%MultiplyingFactor end if end subroutine ReadHDF5Values3D

Subroutine ReadHDF5Values3D (Instant, Field) !Arguments------------------------------------------------------------integer :: Instant real, dimension(:,:,:), pointer :: Field !Local----------------------------------------------------------------integer :: Imax, Jmax, Kmax integer :: STAT_CALL, i, j, k, ILB, IUB, JLB, JUB, KLB, KUB !Begin----------------------------------------------------------------ILB = Me%WorkSize3D%ILB IUB = Me%WorkSize3D%IUB JLB = Me%WorkSize3D%JLB

JUB = Me%WorkSize3D%JUB if (Me%HDF%From2Dto3D) then KLB = 1 KUB = 1 else KLB = Me%WorkSize3D%KLB KUB = Me%WorkSize3D%KUB Me%HDF%ReadField3D => Field endif call GetHDF5ArrayDimensions(Me%HDF%ObjHDF5, trim(Me%HDF%VGroupPath), & trim(Me%HDF%FieldName), OutputNumber = Instant, & Imax = Imax, Jmax = Jmax, Kmax = Kmax, STAT = STAT_CAL L) if (STAT_CALL /= SUCCESS_)stop 'ReadHDF5Values2D - ModuleFillMatrix - ER R10' if ((Imax /= IUB - ILB + 1) .or. & (Jmax /= JUB - JLB + 1) .or. & (Kmax /= KUB - KLB + 1)) then write (*,*) trim(Me%HDF%VGroupPath) write (*,*) trim(Me%HDF%FieldName) write (*,*) 'miss match between the HDF5 input file and model domain ' stop 'ReadHDF5Values3D - ModuleFillMatrix - ERR20' endif

call HDF5SetLimits (Me%HDF%ObjHDF5, ILB, IUB, JLB, JUB, KLB, KUB, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_)stop 'ReadHDF5Values3D - ModuleFillMatrix - ER R30' call HDF5ReadData(Me%HDF%ObjHDF5, trim(Me%HDF%VGroupPath), & trim(Me%HDF%FieldName), & Array3D = Me%HDF%ReadField3D, OutputNumber = Instant, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_)stop 'ReadHDF5Values3D - ModuleFillMatrix - ER R40' if (Me%HDF%From2Dto3D) then do k = Me%WorkSize3D%KLB, Me%WorkSize3D%KUB do j = JLB, JUB do i = ILB, IUB Field(i,j,k) = Me%HDF%ReadField3D(i,j,1)

enddo enddo enddo else nullify(Me%HDF%ReadField3D) endif if(Me%HDF%HasMultiplyingFactor)then do k = Me%WorkSize3D%KLB, Me%WorkSize3D%KUB do j = Me%WorkSize3D%JLB, Me%WorkSize3D%JUB do i = Me%WorkSize3D%ILB, Me%WorkSize3D%IUB Field(i,j,k) = Field(i,j,k) * Me%HDF%MultiplyingFactor enddo enddo enddo end if if(Me%HDF%HasAddingFactor)then do k = Me%WorkSize3D%KLB, Me%WorkSize3D%KUB do j = Me%WorkSize3D%JLB, Me%WorkSize3D%JUB do i = Me%WorkSize3D%ILB, Me%WorkSize3D%IUB Field(i,j,k) = Field(i,j,k) + Me%HDF%AddingFactor enddo enddo enddo end if end subroutine ReadHDF5Values3D

S-ar putea să vă placă și