subroutine write_vtk(qunit,ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,ixImax3,&
ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,&
ixCCmin3,ixCCmax1,ixCCmax2,ixCCmax3,igrid,nc,np,nx1,nx2,nx3,nxC1,nxC2,&
nxC3,normconv,wnamei,xC,xCC,wC,wCC)
use mod_global_parameters
integer, intent(in) :: qunit
integer, intent(in) :: ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,ixImax3,&
ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,&
ixCCmin3,ixCCmax1,ixCCmax2,ixCCmax3
integer, intent(in) :: igrid,nc,np,nx1,nx2,nx3,nxC1,nxC2,nxC3
double precision, intent(in) :: normconv(0:nw+nwauxio)
character(len=name_len), intent(in):: wnamei(1:nw+nwauxio)
double precision, dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,&
ixMlo3-1:ixMhi3,ndim) :: xC
double precision, dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo3:ixMhi3,&
ndim) :: xCC
double precision, dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,&
ixMlo3-1:ixMhi3,nw+nwauxio) :: wC
double precision, dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo3:ixMhi3,&
nw+nwauxio) :: wCC
double precision :: x_VTK(1:3)
integer :: iw,ix1,ix2,ix3,icel,VTK_type
select case(convert_type)
case('vtumpi','pvtumpi')
! we write out every grid as one VTK PIECE
write(qunit,'(a,i7,a,i7,a)') '<Piece NumberOfPoints="',np,&
'" NumberOfCells="',nc,'">'
write(qunit,'(a)')'<PointData>'
do iw=1,nw+nwauxio
if(iw<=nw) then
if(.not.w_write(iw)) cycle
end if
write(qunit,'(a,a,a)')'<DataArray type="Float64" Name="',&
TRIM(wnamei(iw)),'" format="ascii">'
write(qunit,'(200(1pe14.6))') (((wC(ix1,ix2,ix3,iw)*normconv(iw),&
ix1=ixCmin1,ixCmax1),ix2=ixCmin2,ixCmax2),ix3=ixCmin3,ixCmax3)
write(qunit,'(a)')'</DataArray>'
end do
write(qunit,'(a)')'</PointData>'
write(qunit,'(a)')'<Points>'
write(qunit,'(a)'&
)'<DataArray type="Float32" NumberOfComponents="3" format="ascii">'
! write cell corner coordinates in a backward dimensional loop, always 3D output
do ix3=ixCmin3,ixCmax3
do ix2=ixCmin2,ixCmax2
do ix1=ixCmin1,ixCmax1
x_VTK(1:3)=zero;
x_VTK(1:ndim)=xC(ix1,ix2,ix3,1:ndim)*normconv(0);
write(qunit,'(3(1pe14.6))') x_VTK
end do
end do
end do
write(qunit,'(a)')'</DataArray>'
write(qunit,'(a)')'</Points>'
case('vtuCCmpi','pvtuCCmpi')
! we write out every grid as one VTK PIECE
write(qunit,'(a,i7,a,i7,a)') '<Piece NumberOfPoints="',np,&
'" NumberOfCells="',nc,'">'
write(qunit,'(a)')'<CellData>'
do iw=1,nw+nwauxio
if(iw<=nw) then
if(.not.w_write(iw)) cycle
end if
write(qunit,'(a,a,a)')'<DataArray type="Float64" Name="',&
TRIM(wnamei(iw)),'" format="ascii">'
write(qunit,'(200(1pe14.6))') (((wCC(ix1,ix2,ix3,iw)*normconv(iw),&
ix1=ixCCmin1,ixCCmax1),ix2=ixCCmin2,ixCCmax2),ix3=ixCCmin3,&
ixCCmax3)
write(qunit,'(a)')'</DataArray>'
end do
write(qunit,'(a)')'</CellData>'
write(qunit,'(a)')'<Points>'
write(qunit,'(a)'&
)'<DataArray type="Float32" NumberOfComponents="3" format="ascii">'
! write cell corner coordinates in a backward dimensional loop, always 3D output
do ix3=ixCmin3,ixCmax3
do ix2=ixCmin2,ixCmax2
do ix1=ixCmin1,ixCmax1
x_VTK(1:3)=zero;
x_VTK(1:ndim)=xC(ix1,ix2,ix3,1:ndim)*normconv(0);
write(qunit,'(3(1pe14.6))') x_VTK
end do
end do
end do
write(qunit,'(a)')'</DataArray>'
write(qunit,'(a)')'</Points>'
end select
write(qunit,'(a)')'<Cells>'
! connectivity part
write(qunit,'(a)'&
)'<DataArray type="Int32" Name="connectivity" format="ascii">'
call save_connvtk(qunit,igrid)
write(qunit,'(a)')'</DataArray>'
! offsets data array
write(qunit,'(a)')'<DataArray type="Int32" Name="offsets" format="ascii">'
do icel=1,nc
write(qunit,'(i7)') icel*(2**3)
end do
write(qunit,'(a)')'</DataArray>'
! VTK cell type data array
write(qunit,'(a)')'<DataArray type="Int32" Name="types" format="ascii">'
! VTK_LINE=3; VTK_PIXEL=8; VTK_VOXEL=11 -> vtk-syntax
VTK_type=11
do icel=1,nc
write(qunit,'(i2)') VTK_type
end do
write(qunit,'(a)')'</DataArray>'
write(qunit,'(a)')'</Cells>'
write(qunit,'(a)')'</Piece>'
end subroutine write_vtk