Function for saving mesh; topology = RectilinearGrid (R8P).
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=I4P), | intent(in) | :: | nx1 | |||
integer(kind=I4P), | intent(in) | :: | nx2 | |||
integer(kind=I4P), | intent(in) | :: | ny1 | |||
integer(kind=I4P), | intent(in) | :: | ny2 | |||
integer(kind=I4P), | intent(in) | :: | nz1 | |||
integer(kind=I4P), | intent(in) | :: | nz2 | |||
real(kind=R8P), | intent(in) | :: | X(nx1:nx2) | |||
real(kind=R8P), | intent(in) | :: | Y(ny1:ny2) | |||
real(kind=R8P), | intent(in) | :: | Z(nz1:nz2) |
function VTK_GEO_XML_RECT_R8(nx1,nx2,ny1,ny2,nz1,nz2,X,Y,Z) result(E_IO)
!---------------------------------------------------------------------------------------------------------------------------------
!! Function for saving mesh; topology = RectilinearGrid (R8P).
!---------------------------------------------------------------------------------------------------------------------------------
!---------------------------------------------------------------------------------------------------------------------------------
implicit none
integer(I4P), intent(IN):: nx1,nx2 ! initial and final nodes of x axis
integer(I4P), intent(IN):: ny1,ny2 ! initial and final nodes of y axis
integer(I4P), intent(IN):: nz1,nz2 ! initial and final nodes of z axis
real(R8P), intent(IN):: X(nx1:nx2) ! x coordinates
real(R8P), intent(IN):: Y(ny1:ny2) ! y coordinates
real(R8P), intent(IN):: Z(nz1:nz2) ! z coordinates
integer(I4P):: E_IO ! Input/Output inquiring flag: $0$ if IO is done, $> 0$ if IO is not done
character(len=maxlen):: s_buffer ! buffer string
integer(I4P):: n1 ! counter
!---------------------------------------------------------------------------------------------------------------------------------
!---------------------------------------------------------------------------------------------------------------------------------
select case(f_out)
case(f_out_ascii)
write(unit=Unit_VTK,fmt='(A,6'//FI4P//',A)',iostat=E_IO)repeat(' ',indent)//'<Piece Extent="',nx1,nx2,ny1,ny2,nz1,nz2,'">'
indent = indent + 2
write(unit=Unit_VTK,fmt='(A)',iostat=E_IO)repeat(' ',indent)//'<Coordinates>'
indent = indent + 2
write(unit=Unit_VTK,fmt='(A)',iostat=E_IO)repeat(' ',indent)//'<DataArray type="Float64" Name="X" format="ascii">'
write(unit=Unit_VTK,fmt=FR8P, iostat=E_IO)(X(n1),n1=nx1,nx2)
write(unit=Unit_VTK,fmt='(A)',iostat=E_IO)repeat(' ',indent)//'</DataArray>'
write(unit=Unit_VTK,fmt='(A)',iostat=E_IO)repeat(' ',indent)//'<DataArray type="Float64" Name="Y" format="ascii">'
write(unit=Unit_VTK,fmt=FR8P, iostat=E_IO)(Y(n1),n1=ny1,ny2)
write(unit=Unit_VTK,fmt='(A)',iostat=E_IO)repeat(' ',indent)//'</DataArray>'
write(unit=Unit_VTK,fmt='(A)',iostat=E_IO)repeat(' ',indent)//'<DataArray type="Float64" Name="Z" format="ascii">'
write(unit=Unit_VTK,fmt=FR8P, iostat=E_IO)(Z(n1),n1=nz1,nz2)
write(unit=Unit_VTK,fmt='(A)',iostat=E_IO)repeat(' ',indent)//'</DataArray>'
indent = indent - 2
write(unit=Unit_VTK,fmt='(A)',iostat=E_IO)repeat(' ',indent)//'</Coordinates>'
case(f_out_binary)
write(s_buffer,fmt='(A,6'//FI4P//',A)',iostat=E_IO)repeat(' ',indent)//'<Piece Extent="',nx1,nx2,ny1,ny2,nz1,nz2,'">'
indent = indent + 2
write(unit=Unit_VTK,iostat=E_IO)trim(s_buffer)//end_rec
write(unit=Unit_VTK,iostat=E_IO)repeat(' ',indent)//'<Coordinates>'//end_rec
indent = indent + 2
write(unit=Unit_VTK,iostat=E_IO)repeat(' ',indent)// &
'<DataArray type="Float64" Name="X" format="appended" offset="', &
trim(str(.true.,ioffset)), &
'">'// &
end_rec
N_Byte = (nx2-nx1+1)*sizeof(Tipo_R8)
ioffset = ioffset + sizeof(Tipo_I4) + N_Byte
write(unit=Unit_VTK_Append,iostat=E_IO)N_Byte,'R8',nx2-nx1+1
write(unit=Unit_VTK_Append,iostat=E_IO)(X(n1),n1=nx1,nx2)
write(unit=Unit_VTK,iostat=E_IO)repeat(' ',indent)//'</DataArray>'//end_rec
write(unit=Unit_VTK,iostat=E_IO)repeat(' ',indent)// &
'<DataArray type="Float64" Name="Y" format="appended" offset="', &
trim(str(.true.,ioffset)), &
'">'// &
end_rec
N_Byte = (ny2-ny1+1)*sizeof(Tipo_R8)
ioffset = ioffset + sizeof(Tipo_I4) + N_Byte
write(unit=Unit_VTK_Append,iostat=E_IO)N_Byte,'R8',ny2-ny1+1
write(unit=Unit_VTK_Append,iostat=E_IO)(Y(n1),n1=ny1,ny2)
write(unit=Unit_VTK,iostat=E_IO)repeat(' ',indent)//'</DataArray>'//end_rec
write(unit=Unit_VTK,iostat=E_IO)repeat(' ',indent)// &
'<DataArray type="Float64" Name="Z" format="appended" offset="', &
trim(str(.true.,ioffset)), &
'">'// &
end_rec
N_Byte = (nz2-nz1+1)*sizeof(Tipo_R8)
ioffset = ioffset + sizeof(Tipo_I4) + N_Byte
write(unit=Unit_VTK_Append,iostat=E_IO)N_Byte,'R8',nz2-nz1+1
write(unit=Unit_VTK_Append,iostat=E_IO)(Z(n1),n1=nz1,nz2)
write(unit=Unit_VTK,iostat=E_IO)repeat(' ',indent)//'</DataArray>'//end_rec
indent = indent - 2
write(unit=Unit_VTK,iostat=E_IO)repeat(' ',indent)//'</Coordinates>'//end_rec
endselect
return
!---------------------------------------------------------------------------------------------------------------------------------
endfunction VTK_GEO_XML_RECT_R8