18 case(
'tecplot',
'tecplotCC',
'tecline')
20 case(
'tecplotmpi',
'tecplotCCmpi',
'teclinempi')
24 case(
'vtumpi',
'vtuCCmpi')
26 case(
'vtuB',
'vtuBCC',
'vtuBmpi',
'vtuBCCmpi')
28 case(
'pvtumpi',
'pvtuCCmpi')
30 case(
'pvtuBmpi',
'pvtuBCCmpi')
32 case(
'vtimpi',
'vtiCCmpi')
34 case(
'onegrid',
'onegridmpi')
36 case(
'oneblock',
'oneblockB')
38 case(
'user',
'usermpi')
40 call mpistop(
"usr_special_convert not defined")
45 call mpistop(
"Error in generate_plotfile: Unknown convert_type")
76 integer,
intent(in) :: qunit
78 integer :: Morton_no,igrid,ix^D,ig^D,level
79 integer,
pointer :: ig_to_igrid(:^d&,:)
81 character(len=80) :: filename
82 integer :: filenr,ncells,ncells^D,ncellg,ncellx^D,jg^D,jig^D
85 character(len=1024) :: outfilehead
87 double precision :: wval1,xval1
88 double precision,
dimension({^D&1:1},1:nw+nwauxio) :: wval
89 double precision,
dimension({^D&1:1},1:ndim) :: xval
90 double precision:: normconv(0:nw+
nwauxio)
92 integer :: iw,iiw,writenw,iwrite(1:nw+
nwauxio),iigrid,idim
93 logical :: patchw(ixg^t)
97 call mpistop(
'please specify level_io>0 for usage with oneblock')
101 if(
mype==0) print *,
'ONEBLOCK as yet to be parallelized' 102 call mpistop(
'npe>1, oneblock')
130 ig_to_igrid(ig^d,
mype)=igrid
131 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
133 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then 134 writeblk(igrid)=.true.
141 ncellg=(^d&(ixmhi^d-ixmlo^d+1)*)
142 ncellx^d=ixmhi^d-ixmlo^d+1\
144 igrid=ig_to_igrid(ig^d,
mype)
145 if(writeblk(igrid))
go to 20
153 igrid=ig_to_igrid(jig^dd,
mype)
154 if(writeblk(igrid)) ncells^d=ncells^d+ncellx^d
158 do iigrid=1,igridstail; igrid=igrids(iigrid)
159 if(.not.writeblk(igrid)) cycle
161 ps1(igrid)%w(ixg^t,1:nw)=ps(igrid)%w(ixg^t,1:nw)
165 call mpistop(
"usr_aux_output not defined")
168 ps1(igrid)%w,ps(igrid)%x,normconv)
174 do iigrid=1,igridstail; igrid=igrids(iigrid)
175 if (.not.writeblk(igrid)) cycle
179 ps1(igrid)%w(ixg^t,iw_mag(:))=ps1(igrid)%w(ixg^t,iw_mag(:))+ps(igrid)%B0(ixg^t,:,0)
183 do iigrid=1,igridstail; igrid=igrids(iigrid)
184 if (.not.writeblk(igrid)) cycle
188 ps1(igrid)%w(ixg^t,iw_e)=ps1(igrid)%w(ixg^t,iw_e)+0.5d0*sum(ps(igrid)%B0(ixg^t,:,0)**2,dim=
ndim+1) &
189 + sum(ps1(igrid)%w(ixg^t,iw_mag(:))*ps(igrid)%B0(ixg^t,:,0),dim=
ndim+1)
190 ps1(igrid)%w(ixg^t,iw_mag(:))=ps1(igrid)%w(ixg^t,iw_mag(:))+ps(igrid)%B0(ixg^t,:,0)
195 master_cpu_open :
if (
mype == 0)
then 196 inquire(qunit,opened=fileopen)
197 if (.not.fileopen)
then 201 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".blk" 204 open(qunit,file=filename,status=
'unknown')
205 write(qunit,*) trim(outfilehead)
206 write(qunit,*) ncells,ncells^d
209 open(qunit,file=filename,form=
'unformatted',status=
'unknown')
210 write(qunit) outfilehead
211 write(qunit) ncells,ncells^d
215 end if master_cpu_open
219 do ix3=ixmlo3,ixmhi3}
223 do ix2=ixmlo2,ixmhi2}
226 igrid=ig_to_igrid(ig^d,
mype)
227 if(.not.writeblk(igrid)) cycle
229 master_write :
if(
mype==0)
then 232 write(qunit,fmt=
"(100(e14.6))") &
233 ps(igrid)%x(ix^d,1:
ndim)*normconv(0),&
234 (ps1(igrid)%w(ix^d,iwrite(iw))*normconv(iwrite(iw)),iw=1,writenw)
236 write(qunit)
real(ps(igrid)%x(ix^D,1:ndim)*normconv(0)),&
237 (
real(ps1(igrid)%w(ix^D,iwrite(iw))*normconv(iwrite(iw))),iw=1,writenw)
269 integer,
intent(in) :: qunit
271 integer :: Morton_no,igrid,ix^D,iw
273 character(len=80) :: filename
277 character(len=1024) :: outfilehead
280 integer :: igrid_recv,ipe
281 double precision :: w_recv(ixg^t,1:nw),x_recv(ixg^t,1:
ndim)
282 integer,
allocatable :: intstatus(:,:)
287 if(
mype==0) print *,
'ONEGRID to be used without nwauxio' 288 call mpistop(
'nwauxio>0, onegrid')
292 if(
mype==0.and.nwaux>0) print *,
'warning: ONEGRID used with saveprim, check auxiliaries' 297 master_cpu_open :
if (
mype == 0)
then 299 write(outfilehead,
'(a)')
"#"//
" "//trim(outfilehead)
300 inquire(qunit,opened=fileopen)
301 if (.not.fileopen)
then 305 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".blk" 306 open(qunit,file=filename,status=
'unknown')
308 write(qunit,
"(a)")outfilehead
310 end if master_cpu_open
322 {
do ix^db=ixmlo^db,ixmhi^db\}
324 if( dabs(ps(igrid)%w(ix^d,iw)) < 1.0d-32 ) ps(igrid)%w(ix^d,iw) = zero
326 write(qunit,fmt=
"(100(e14.6))") ps(igrid)%x(ix^d,1:
ndim)&
327 ,ps(igrid)%w(ix^d,1:nw)
332 if(
mype==0.and.
npe>1)
allocate(intstatus(mpi_status_size,1))
334 manycpu :
if (
npe>1)
then 336 loop_cpu :
do ipe =1,
npe-1
339 call mpi_recv(igrid_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
343 {
do ix^db=ixmlo^db,ixmhi^db\}
345 if( dabs(ps(igrid)%w(ix^d,iw)) < smalldouble ) ps(igrid)%w(ix^d,iw) = zero
347 write(qunit,fmt=
"(100(e14.6))") x_recv(ix^d,1:
ndim)&
357 if(
mype==0)
deallocate(intstatus)
360 if(
mype==0)
close(qunit)
372 integer,
intent(in) :: qunit
374 integer:: igrid,iigrid,level,igonlevel,iw,idim,ix^D
376 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,ixC^L,ixCC^L
378 integer :: nodes, elems
383 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
384 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
385 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
386 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
388 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP
389 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
390 double precision,
dimension(0:nw+nwauxio) :: normconv
391 logical :: fileopen,first
392 character(len=80) :: filename
396 character(len=1024) :: tecplothead
399 character(len=1024) :: outfilehead
403 if(
mype==0) print *,
'tecplot not parallel, use tecplotmpi' 407 if(nw/=count(
w_write(1:nw)))
then 408 if(
mype==0) print *,
'tecplot does not use w_write=F' 409 call mpistop(
'w_write, tecplot')
413 if(
mype==0) print *,
'tecplot with nocartesian' 416 inquire(qunit,opened=fileopen)
417 if (.not.fileopen)
then 421 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".plt" 422 open(qunit,file=filename,status=
'unknown')
427 write(tecplothead,
'(a)')
"VARIABLES = "//trim(outfilehead)
429 write(qunit,
'(a)') tecplothead(1:len_trim(tecplothead))
433 numgridsonlevel(level)=0
434 do iigrid=1,igridstail; igrid=igrids(iigrid);
436 numgridsonlevel(level)=numgridsonlevel(level)+1
440 nx^d=ixmhi^d-ixmlo^d+1;
448 nodes=nodes + numgridsonlevel(level)*{nxc^d*}
449 elems=elems + numgridsonlevel(level)*{nx^d*}
452 write(qunit,
"(a,i7,a,1pe12.5,a)") &
453 'ZONE T="all levels", I=',elems, &
457 do iigrid=1,igridstail; igrid=igrids(iigrid);
459 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,ixc^l,ixcc^l,.true.)
460 {
do ix^db=ixccmin^db,ixccmax^db\}
461 x_tec(1:
ndim)=xcc_tmp(ix^d,1:
ndim)*normconv(0)
464 write(qunit,fmt=
"(100(e24.16))") x_tec, w_tec
471 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
472 elemsonlevel=numgridsonlevel(level)*{nx^d*}
484 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
485 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
487 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
488 do iigrid=1,igridstail; igrid=igrids(iigrid);
491 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
493 {
do ix^db=ixcmin^db,ixcmax^db\}
494 x_tec(1:
ndim)=xc_tmp(ix^d,1:
ndim)*normconv(0)
496 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
509 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
510 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
512 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
513 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
517 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i1,a,a)") &
518 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
521 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
523 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
524 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
527 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
532 do iigrid=1,igridstail; igrid=igrids(iigrid);
535 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
537 write(qunit,fmt=
"(100(e14.6))") xc_tmp(ixc^s,idim)*normconv(0)
541 do iigrid=1,igridstail; igrid=igrids(iigrid);
544 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
546 write(qunit,fmt=
"(100(e14.6))") wcc_tmp(ixcc^s,iw)*normconv(iw)
550 call mpistop(
'no such tecplot type')
553 do iigrid=1,igridstail; igrid=igrids(iigrid);
555 igonlevel=igonlevel+1
572 integer,
intent(in) :: qunit, igrid, igonlevel
574 integer :: nx^D, nxC^D, ix^D
575 {^ifoned
integer,
external:: nodenumbertec1D \}
576 {^iftwod
integer,
external:: nodenumbertec2D \}
577 {^ifthreed
integer,
external:: nodenumbertec3D \}
579 nx^d=ixmhi^d-ixmlo^d+1;
586 write(qunit,
'(8(i7,1x))') &
587 nodenumbertec3d(ix1, ix2-1,ix3-1,nxc1,nxc2,nxc3,igonlevel,igrid),&
588 nodenumbertec3d(ix1+1,ix2-1,ix3-1,nxc1,nxc2,nxc3,igonlevel,igrid),&
589 nodenumbertec3d(ix1+1,ix2 ,ix3-1,nxc1,nxc2,nxc3,igonlevel,igrid),&
590 nodenumbertec3d(ix1 ,ix2 ,ix3-1,nxc1,nxc2,nxc3,igonlevel,igrid),&
591 nodenumbertec3d(ix1 ,ix2-1,ix3 ,nxc1,nxc2,nxc3,igonlevel,igrid),&
592 nodenumbertec3d(ix1+1,ix2-1,ix3 ,nxc1,nxc2,nxc3,igonlevel,igrid),&
593 nodenumbertec3d(ix1+1,ix2 ,ix3 ,nxc1,nxc2,nxc3,igonlevel,igrid),&
594 nodenumbertec3d(ix1 ,ix2 ,ix3 ,nxc1,nxc2,nxc3,igonlevel,igrid)
598 write(qunit,
'(4(i7,1x))') &
599 nodenumbertec2d(ix1, ix2-1,nxc1,nxc2,igonlevel,igrid),&
600 nodenumbertec2d(ix1+1,ix2-1,nxc1,nxc2,igonlevel,igrid),&
601 nodenumbertec2d(ix1+1,ix2 ,nxc1,nxc2,igonlevel,igrid),&
602 nodenumbertec2d(ix1 ,ix2 ,nxc1,nxc2,igonlevel,igrid)
606 write(qunit,
'(2(i7,1x))') nodenumbertec1d(ix1,nxc1,igonlevel,igrid),&
607 nodenumbertec1d(ix1+1,nxc1,igonlevel,igrid)
615 integer,
intent(in):: i1,nx1,ig,igrid
624 integer,
intent(in):: i1,i2,nx1,nx2,ig,igrid
633 integer,
intent(in):: i1,i2,i3,nx1,nx2,nx3,ig,igrid
649 integer,
intent(in) :: qunit
651 double precision :: x_VTK(1:3)
653 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
654 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
655 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
656 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
658 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP
659 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
660 double precision,
dimension(0:nw+nwauxio) :: normconv
661 integer:: igrid,iigrid,level,igonlevel,icel,ixC^L,ixCC^L,iw
663 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,nc,np,VTK_type,ix^D
665 character(len=80):: filename
669 character(len=1024) :: outfilehead
675 if(
mype==0) print *,
'unstructuredvtk not parallel, use vtumpi' 676 call mpistop(
'npe>1, unstructuredvtk')
679 inquire(qunit,opened=fileopen)
680 if(.not.fileopen)
then 684 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu" 686 open(qunit,file=filename,status=
'unknown')
692 write(qunit,
'(a)')
'<?xml version="1.0"?>' 693 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"' 694 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">' 695 write(qunit,
'(a)')
'<UnstructuredGrid>' 696 write(qunit,
'(a)')
'<FieldData>' 697 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
698 'NumberOfTuples="1" format="ascii">' 700 write(qunit,
'(a)')
'</DataArray>' 701 write(qunit,
'(a)')
'</FieldData>' 704 nx^d=ixmhi^d-ixmlo^d+1;
713 do iigrid=1,igridstail; igrid=igrids(iigrid);
717 if (({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
719 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then 721 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
726 write(qunit,
'(a,i7,a,i7,a)') &
727 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">' 728 write(qunit,
'(a)')
'<PointData>' 734 write(qunit,
'(a,a,a)')&
735 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">' 736 write(qunit,
'(200(1pe14.6))') {(|}wc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
737 write(qunit,
'(a)')
'</DataArray>' 739 write(qunit,
'(a)')
'</PointData>' 741 write(qunit,
'(a)')
'<Points>' 742 write(qunit,
'(a)')
'<DataArray type="Float32" NumberOfComponents="3" format="ascii">' 744 {
do ix^db=ixcmin^db,ixcmax^db \}
746 x_vtk(1:
ndim)=xc_tmp(ix^d,1:
ndim)*normconv(0);
747 write(qunit,
'(3(1pe14.6))') x_vtk
749 write(qunit,
'(a)')
'</DataArray>' 750 write(qunit,
'(a)')
'</Points>' 753 write(qunit,
'(a,i7,a,i7,a)') &
754 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">' 755 write(qunit,
'(a)')
'<CellData>' 761 write(qunit,
'(a,a,a)')&
762 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">' 763 write(qunit,
'(200(1pe14.6))') {(|}wcc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
764 write(qunit,
'(a)')
'</DataArray>' 766 write(qunit,
'(a)')
'</CellData>' 768 write(qunit,
'(a)')
'<Points>' 769 write(qunit,
'(a)')
'<DataArray type="Float32" NumberOfComponents="3" format="ascii">' 771 {
do ix^db=ixcmin^db,ixcmax^db \}
773 x_vtk(1:
ndim)=xc_tmp(ix^d,1:
ndim)*normconv(0);
774 write(qunit,
'(3(1pe14.6))') x_vtk
776 write(qunit,
'(a)')
'</DataArray>' 777 write(qunit,
'(a)')
'</Points>' 781 write(qunit,
'(a)')
'<Cells>' 784 write(qunit,
'(a)')
'<DataArray type="Int32" Name="connectivity" format="ascii">' 786 write(qunit,
'(a)')
'</DataArray>' 789 write(qunit,
'(a)')
'<DataArray type="Int32" Name="offsets" format="ascii">' 791 write(qunit,
'(i7)') icel*(2**^nd)
793 write(qunit,
'(a)')
'</DataArray>' 796 write(qunit,
'(a)')
'<DataArray type="Int32" Name="types" format="ascii">' 798 {^ifoned vtk_type=3 \}
799 {^iftwod vtk_type=8 \}
800 {^ifthreed vtk_type=11 \}
802 write(qunit,
'(i2)') vtk_type
804 write(qunit,
'(a)')
'</DataArray>' 806 write(qunit,
'(a)')
'</Cells>' 808 write(qunit,
'(a)')
'</Piece>' 814 write(qunit,
'(a)')
'</UnstructuredGrid>' 815 write(qunit,
'(a)')
'</VTKFile>' 829 integer,
intent(in) :: qunit
831 double precision :: x_VTK(1:3)
833 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
834 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
835 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
836 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
838 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio):: wC_TMP
839 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
840 double precision :: normconv(0:nw+
nwauxio)
842 integer,
allocatable :: intstatus(:,:)
843 integer :: ipe,igrid,level,icel,ixC^L,ixCC^L,Morton_no,Morton_length
844 integer :: nx^D,nxC^D,nc,np,VTK_type,ix^D,filenr
848 integer:: length,lengthcc,length_coords,length_conn,length_offsets
850 character(len=80):: filename
852 character(len=1024) :: outfilehead
854 logical :: fileopen,cell_corner=.true.
855 logical,
allocatable :: Morton_aim(:),Morton_aim_p(:)
871 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
873 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then 874 morton_aim_p(morton_no)=.true.
878 call mpi_allreduce(morton_aim_p,morton_aim,morton_length,mpi_logical,mpi_lor,&
881 case(
'vtuB',
'vtuBmpi')
883 case(
'vtuBCC',
'vtuBCCmpi')
888 if(.not. morton_aim(morton_no)) cycle
891 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
906 inquire(qunit,opened=fileopen)
907 if(.not.fileopen)
then 911 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu" 913 open(qunit,file=filename,status=
'replace')
919 write(qunit,
'(a)')
'<?xml version="1.0"?>' 920 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"' 921 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">' 922 write(qunit,
'(a)')
'<UnstructuredGrid>' 923 write(qunit,
'(a)')
'<FieldData>' 924 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
925 'NumberOfTuples="1" format="ascii">' 927 write(qunit,
'(a)')
'</DataArray>' 928 write(qunit,
'(a)')
'</FieldData>' 931 nx^d=ixmhi^d-ixmlo^d+1;
937 lengthcc=nc*size_real
939 length_coords=3*length
940 length_conn=2**^nd*size_int*nc
941 length_offsets=nc*size_int
945 if(.not. morton_aim(morton_no)) cycle
948 write(qunit,
'(a,i7,a,i7,a)') &
949 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">' 950 write(qunit,
'(a)')
'<PointData>' 956 write(qunit,
'(a,a,a,i16,a)')&
957 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
958 '" format="appended" offset="',offset,
'">' 959 write(qunit,
'(a)')
'</DataArray>' 960 offset=offset+length+size_int
962 write(qunit,
'(a)')
'</PointData>' 964 write(qunit,
'(a)')
'<Points>' 965 write(qunit,
'(a,i16,a)') &
966 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>' 968 offset=offset+length_coords+size_int
969 write(qunit,
'(a)')
'</Points>' 972 write(qunit,
'(a,i7,a,i7,a)') &
973 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">' 974 write(qunit,
'(a)')
'<CellData>' 980 write(qunit,
'(a,a,a,i16,a)')&
981 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
982 '" format="appended" offset="',offset,
'">' 983 write(qunit,
'(a)')
'</DataArray>' 984 offset=offset+lengthcc+size_int
986 write(qunit,
'(a)')
'</CellData>' 988 write(qunit,
'(a)')
'<Points>' 989 write(qunit,
'(a,i16,a)') &
990 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>' 992 offset=offset+length_coords+size_int
993 write(qunit,
'(a)')
'</Points>' 996 write(qunit,
'(a)')
'<Cells>' 999 write(qunit,
'(a,i16,a)')&
1000 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>' 1001 offset=offset+length_conn+size_int
1004 write(qunit,
'(a,i16,a)') &
1005 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>' 1006 offset=offset+length_offsets+size_int
1009 write(qunit,
'(a,i16,a)') &
1010 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>' 1011 offset=offset+size_int+nc*size_int
1013 write(qunit,
'(a)')
'</Cells>' 1015 write(qunit,
'(a)')
'</Piece>' 1021 if(.not. morton_aim(morton_no)) cycle
1022 if(cell_corner)
then 1024 write(qunit,
'(a,i7,a,i7,a)') &
1025 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">' 1026 write(qunit,
'(a)')
'<PointData>' 1032 write(qunit,
'(a,a,a,i16,a)')&
1033 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
1034 '" format="appended" offset="',offset,
'">' 1035 write(qunit,
'(a)')
'</DataArray>' 1036 offset=offset+length+size_int
1038 write(qunit,
'(a)')
'</PointData>' 1040 write(qunit,
'(a)')
'<Points>' 1041 write(qunit,
'(a,i16,a)') &
1042 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>' 1044 offset=offset+length_coords+size_int
1045 write(qunit,
'(a)')
'</Points>' 1048 write(qunit,
'(a,i7,a,i7,a)') &
1049 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">' 1050 write(qunit,
'(a)')
'<CellData>' 1056 write(qunit,
'(a,a,a,i16,a)')&
1057 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
1058 '" format="appended" offset="',offset,
'">' 1059 write(qunit,
'(a)')
'</DataArray>' 1060 offset=offset+lengthcc+size_int
1062 write(qunit,
'(a)')
'</CellData>' 1064 write(qunit,
'(a)')
'<Points>' 1065 write(qunit,
'(a,i16,a)') &
1066 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>' 1068 offset=offset+length_coords+size_int
1069 write(qunit,
'(a)')
'</Points>' 1072 write(qunit,
'(a)')
'<Cells>' 1075 write(qunit,
'(a,i16,a)')&
1076 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>' 1077 offset=offset+length_conn+size_int
1080 write(qunit,
'(a,i16,a)') &
1081 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>' 1082 offset=offset+length_offsets+size_int
1085 write(qunit,
'(a,i16,a)') &
1086 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>' 1087 offset=offset+size_int+nc*size_int
1089 write(qunit,
'(a)')
'</Cells>' 1091 write(qunit,
'(a)')
'</Piece>' 1096 write(qunit,
'(a)')
'</UnstructuredGrid>' 1097 write(qunit,
'(a)')
'<AppendedData encoding="raw">' 1099 open(qunit,file=filename,access=
'stream',form=
'unformatted',position=
'append')
1101 write(qunit) trim(buf)
1104 if(.not. morton_aim(morton_no)) cycle
1106 call calc_x(igrid,xc,xcc)
1107 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1108 ixc^l,ixcc^l,.true.)
1113 if(cell_corner)
then 1115 write(qunit) {(|}
real(wC_TMP(ix^D,iw)*normconv(iw)),{ix^D=ixcmin^d,ixcmax^d)}
1117 write(qunit) lengthcc
1118 write(qunit) {(|}
real(wCC_TMP(ix^D,iw)*normconv(iw)),{ix^D=ixccmin^d,ixccmax^d)}
1122 write(qunit) length_coords
1123 {
do ix^db=ixcmin^db,ixcmax^db \}
1125 x_vtk(1:
ndim)=xc_tmp(ix^d,1:
ndim)*normconv(0);
1127 write(qunit)
real(x_vtk(k))
1131 write(qunit) length_conn
1133 {^ifoned
write(qunit)ix1-1,ix1 \}
1135 write(qunit)(ix2-1)*nxc1+ix1-1, &
1136 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1140 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1141 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1142 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1143 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1144 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1145 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1146 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1147 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1151 write(qunit) length_offsets
1153 write(qunit) icel*(2**^nd)
1157 {^ifoned vtk_type=3 \}
1158 {^iftwod vtk_type=8 \}
1159 {^ifthreed vtk_type=11 \}
1160 write(qunit) size_int*nc
1162 write(qunit) vtk_type
1165 allocate(intstatus(mpi_status_size,1))
1167 ixccmin^d=ixmlo^d; ixccmax^d=ixmhi^d;
1168 ixcmin^d=ixmlo^d-1; ixcmax^d=ixmhi^d;
1171 if(.not. morton_aim(morton_no)) cycle
1174 if(cell_corner)
then 1183 if(cell_corner)
then 1185 write(qunit) {(|}
real(wC_TMP(ix^D,iw)*normconv(iw)),{ix^D=ixcmin^d,ixcmax^d)}
1187 write(qunit) lengthcc
1188 write(qunit) {(|}
real(wCC_TMP(ix^D,iw)*normconv(iw)),{ix^D=ixccmin^d,ixccmax^d)}
1192 write(qunit) length_coords
1193 {
do ix^db=ixcmin^db,ixcmax^db \}
1195 x_vtk(1:
ndim)=xc_tmp(ix^d,1:
ndim)*normconv(0);
1197 write(qunit)
real(x_vtk(k))
1201 write(qunit) length_conn
1203 {^ifoned
write(qunit)ix1-1,ix1 \}
1205 write(qunit)(ix2-1)*nxc1+ix1-1, &
1206 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1210 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1211 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1212 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1213 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1214 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1215 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1216 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1217 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1221 write(qunit) length_offsets
1223 write(qunit) icel*(2**^nd)
1225 {^ifoned vtk_type=3 \}
1226 {^iftwod vtk_type=8 \}
1227 {^ifthreed vtk_type=11 \}
1228 write(qunit) size_int*nc
1230 write(qunit) vtk_type
1236 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
1237 write(qunit,
'(a)')
'</AppendedData>' 1238 write(qunit,
'(a)')
'</VTKFile>' 1240 deallocate(intstatus)
1243 deallocate(morton_aim,morton_aim_p)
1257 integer,
intent(in) :: qunit, igrid
1259 integer :: nx^D, nxC^D, ix^D
1261 nx^d=ixmhi^d-ixmlo^d+1;
1265 {^ifoned
write(qunit,
'(2(i7,1x))')ix1-1,ix1 \}
1267 write(qunit,
'(4(i7,1x))')(ix2-1)*nxc1+ix1-1, &
1268 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1271 write(qunit,
'(8(i7,1x))')&
1272 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1273 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1274 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1275 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1276 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1277 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1278 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1279 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1299 integer,
intent(in) :: qunit
1301 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP,xC_TMP_recv
1302 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP,xCC_TMP_recv
1303 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1304 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1306 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP,wC_TMP_recv
1307 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP,wCC_TMP_recv
1308 double precision,
dimension(0:nw+nwauxio) :: normconv
1309 integer:: igrid,iigrid,level,ixC^L,ixCC^L
1313 character(len=80):: filename
1316 integer,
allocatable :: intstatus(:,:)
1317 logical,
allocatable :: Morton_aim(:),Morton_aim_p(:)
1320 character(len=1024) :: outfilehead
1323 integer :: ipe,Morton_no,Morton_length
1324 integer :: ixrvC^L, ixrvCC^L, siz_ind, ind_send(5*^nd), ind_recv(5*^nd)
1325 double precision :: origin(1:3), spacing(1:3)
1326 integer :: wholeExtent(1:6), ig^D
1338 morton_aim_p=.false.
1346 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
1348 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then 1349 morton_aim_p(morton_no)=.true.
1353 call mpi_allreduce(morton_aim_p,morton_aim,morton_length,mpi_logical,mpi_lor,&
1359 if(.not. morton_aim(morton_no)) cycle
1361 call calc_x(igrid,xc,xcc)
1362 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1363 ixc^l,ixcc^l,.true.)
1365 {^d& ig^d = tree%node%ig^d; }
1367 ind_send=(/ ixc^l,ixcc^l, ig^d /)
1375 inquire(qunit,opened=fileopen)
1376 if(.not.fileopen)
then 1380 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vti" 1382 open(qunit,file=filename,status=
'unknown',form=
'formatted')
1388 nx^d=ixmhi^d-ixmlo^d+1;
1391 {^d& origin(^d) = xprobmin^d*normconv(0); }
1393 {^d&spacing(^d) =
dxlevel(^d)*normconv(0); }
1397 {^d&wholeextent(^d*2-1) = nx^d * ceiling(((xprobmax^d-xprobmin^d)*
writespshift(^d,1)) &
1399 {^d&wholeextent(^d*2) = nx^d * floor(((xprobmax^d-xprobmin^d)*(1.0d0-
writespshift(^d,2))) &
1403 write(qunit,
'(a)')
'<?xml version="1.0"?>' 1404 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="ImageData"' 1405 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">' 1406 write(qunit,
'(a,3(1pe14.6),a,6(i10),a,3(1pe14.6),a)')
' <ImageData Origin="',&
1407 origin,
'" WholeExtent="',wholeextent,
'" Spacing="',spacing,
'">' 1408 write(qunit,
'(a)')
'<FieldData>' 1409 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
1410 'NumberOfTuples="1" format="ascii">' 1412 write(qunit,
'(a)')
'</DataArray>' 1413 write(qunit,
'(a)')
'</FieldData>' 1417 if(.not. morton_aim(morton_no)) cycle
1420 {^d& ig^d = tree%node%ig^d; }
1421 call calc_x(igrid,xc,xcc)
1422 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1423 ixc^l,ixcc^l,.true.)
1425 nx^d,normconv,wnamei,wc_tmp,wcc_tmp)
1429 allocate(intstatus(mpi_status_size,1))
1432 if(.not. morton_aim(morton_no)) cycle
1434 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
1435 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
1436 ixrvccmin^d=ind_recv(2*^nd+^d);ixrvccmax^d=ind_recv(3*^nd+^d);
1437 ig^d=ind_recv(4*^nd+^d);
1440 call write_vti(qunit,ixg^
ll,ixrvc^l,ixrvcc^l,ig^d,&
1441 nx^d,normconv,wnamei,wc_tmp,wcc_tmp)
1446 write(qunit,
'(a)')
'</ImageData>' 1447 write(qunit,
'(a)')
'</VTKFile>' 1449 if(
npe>1)
deallocate(intstatus)
1452 deallocate(morton_aim,morton_aim_p)
1468 integer,
intent(in) :: qunit
1470 double precision,
dimension(0:nw+nwauxio) :: normconv
1471 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
1472 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
1473 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1474 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1475 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP
1476 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
1478 character(len=1024) :: outfilehead
1479 integer :: nx^D,nxC^D,nc,np, igrid,ixC^L,ixCC^L,level,Morton_no
1480 character(len=80) :: pfilename
1482 logical :: fileopen,conv_grid
1491 inquire(qunit,opened=fileopen)
1492 if(.not.fileopen)
then 1498 open(qunit,file=pfilename,status=
'unknown',form=
'formatted')
1501 write(qunit,
'(a)')
'<?xml version="1.0"?>' 1502 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"' 1503 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">' 1504 write(qunit,
'(a)')
' <UnstructuredGrid>' 1505 write(qunit,
'(a)')
'<FieldData>' 1506 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
1507 'NumberOfTuples="1" format="ascii">' 1509 write(qunit,
'(a)')
'</DataArray>' 1510 write(qunit,
'(a)')
'</FieldData>' 1515 nx^d=ixmhi^d-ixmlo^d+1;
1530 conv_grid=({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
1532 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.})
1533 if (.not.conv_grid) cycle
1535 call calc_x(igrid,xc,xcc)
1536 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1537 ixc^l,ixcc^l,.true.)
1539 call write_vtk(qunit,ixg^
ll,ixc^l,ixcc^l,igrid,nc,np,nx^d,nxc^d,&
1540 normconv,wnamei,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp)
1544 write(qunit,
'(a)')
' </UnstructuredGrid>' 1545 write(qunit,
'(a)')
'</VTKFile>' 1567 integer,
intent(in) :: qunit
1569 double precision :: x_VTK(1:3)
1571 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP,xC_TMP_recv
1572 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP,xCC_TMP_recv
1573 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1574 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1576 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP,wC_TMP_recv
1577 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP,wCC_TMP_recv
1578 double precision,
dimension(0:nw+nwauxio) :: normconv
1579 integer:: igrid,iigrid,level,ixC^L,ixCC^L
1581 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,nc,np,ix^D
1583 character(len=80):: filename
1586 integer,
allocatable :: intstatus(:,:)
1589 character(len=1024) :: outfilehead
1591 logical :: fileopen,conv_grid,cond_grid_recv
1592 integer :: ipe,Morton_no,siz_ind
1593 integer :: ind_send(4*^nd),ind_recv(4*^nd)
1594 integer :: levmin_recv,levmax_recv,level_recv,igrid_recv,ixrvC^L,ixrvCC^L
1597 inquire(qunit,opened=fileopen)
1598 if(.not.fileopen)
then 1602 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu" 1604 open(qunit,file=filename,status=
'unknown',form=
'formatted')
1607 write(qunit,
'(a)')
'<?xml version="1.0"?>' 1608 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"' 1609 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">' 1610 write(qunit,
'(a)')
'<UnstructuredGrid>' 1611 write(qunit,
'(a)')
'<FieldData>' 1612 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
1613 'NumberOfTuples="1" format="ascii">' 1615 write(qunit,
'(a)')
'</DataArray>' 1616 write(qunit,
'(a)')
'</FieldData>' 1621 nx^d=ixmhi^d-ixmlo^d+1;
1654 conv_grid=({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
1656 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.})
1660 if (.not.conv_grid) cycle
1662 call calc_x(igrid,xc,xcc)
1663 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1664 ixc^l,ixcc^l,.true.)
1668 ind_send=(/ ixc^l,ixcc^l /)
1679 call write_vtk(qunit,ixg^
ll,ixc^l,ixcc^l,igrid,nc,np,nx^d,nxc^d,&
1680 normconv,wnamei,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp)
1687 allocate(intstatus(mpi_status_size,1))
1691 call mpi_recv(levmin_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
1694 call mpi_recv(levmax_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
1696 do level=levmin_recv,levmax_recv
1700 call mpi_recv(igrid_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
1702 call mpi_recv(level_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
1703 if (level_recv/=level) cycle
1705 call mpi_recv(cond_grid_recv,1,mpi_logical, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
1706 if(.not.cond_grid_recv)cycle
1710 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
1711 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
1712 ixrvccmin^d=ind_recv(2*^nd+^d);ixrvccmax^d=ind_recv(3*^nd+^d);
1713 call mpi_recv(normconv,nw+
nwauxio+1, mpi_double_precision,ipe,
itag&
1722 call write_vtk(qunit,ixg^
ll,ixrvc^l,ixrvcc^l,igrid_recv,&
1723 nc,np,nx^d,nxc^d,normconv,wnamei,&
1724 xc_tmp_recv,xcc_tmp_recv,wc_tmp_recv,wcc_tmp_recv)
1729 write(qunit,
'(a)')
'</UnstructuredGrid>' 1730 write(qunit,
'(a)')
'</VTKFile>' 1736 if(
mype==0)
deallocate(intstatus)
1741 subroutine write_vtk(qunit,ixI^L,ixC^L,ixCC^L,igrid,nc,np,nx^D,nxC^D,&
1742 normconv,wnamei,xC,xCC,wC,wCC)
1746 integer,
intent(in) :: qunit
1747 integer,
intent(in) :: ixI^L,ixC^L,ixCC^L
1748 integer,
intent(in) :: igrid,nc,np,nx^D,nxC^D
1749 double precision,
intent(in) :: normconv(0:nw+
nwauxio)
1750 character(len=name_len),
intent(in):: wnamei(1:nw+
nwauxio)
1752 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1753 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1755 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC
1756 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC
1758 double precision :: x_VTK(1:3)
1759 integer :: iw,ix^D,icel,VTK_type
1763 case(
'vtumpi',
'pvtumpi')
1765 write(qunit,
'(a,i7,a,i7,a)') &
1766 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">' 1767 write(qunit,
'(a)')
'<PointData>' 1773 write(qunit,
'(a,a,a)')&
1774 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">' 1775 write(qunit,
'(200(1pe14.6))') {(|}wc(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
1776 write(qunit,
'(a)')
'</DataArray>' 1778 write(qunit,
'(a)')
'</PointData>' 1780 write(qunit,
'(a)')
'<Points>' 1781 write(qunit,
'(a)')
'<DataArray type="Float32" NumberOfComponents="3" format="ascii">' 1783 {
do ix^db=ixcmin^db,ixcmax^db \}
1785 x_vtk(1:
ndim)=xc(ix^d,1:
ndim)*normconv(0);
1786 write(qunit,
'(3(1pe14.6))') x_vtk
1788 write(qunit,
'(a)')
'</DataArray>' 1789 write(qunit,
'(a)')
'</Points>' 1791 case(
'vtuCCmpi',
'pvtuCCmpi')
1793 write(qunit,
'(a,i7,a,i7,a)') &
1794 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">' 1795 write(qunit,
'(a)')
'<CellData>' 1800 write(qunit,
'(a,a,a)')&
1801 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">' 1802 write(qunit,
'(200(1pe14.6))') {(|}wcc(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
1803 write(qunit,
'(a)')
'</DataArray>' 1805 write(qunit,
'(a)')
'</CellData>' 1807 write(qunit,
'(a)')
'<Points>' 1808 write(qunit,
'(a)')
'<DataArray type="Float32" NumberOfComponents="3" format="ascii">' 1810 {
do ix^db=ixcmin^db,ixcmax^db \}
1812 x_vtk(1:
ndim)=xc(ix^d,1:
ndim)*normconv(0);
1813 write(qunit,
'(3(1pe14.6))') x_vtk
1815 write(qunit,
'(a)')
'</DataArray>' 1816 write(qunit,
'(a)')
'</Points>' 1819 write(qunit,
'(a)')
'<Cells>' 1822 write(qunit,
'(a)')
'<DataArray type="Int32" Name="connectivity" format="ascii">' 1824 write(qunit,
'(a)')
'</DataArray>' 1827 write(qunit,
'(a)')
'<DataArray type="Int32" Name="offsets" format="ascii">' 1829 write(qunit,
'(i7)') icel*(2**^nd)
1831 write(qunit,
'(a)')
'</DataArray>' 1834 write(qunit,
'(a)')
'<DataArray type="Int32" Name="types" format="ascii">' 1836 {^ifoned vtk_type=3 \}
1837 {^iftwod vtk_type=8 \}
1838 {^ifthreed vtk_type=11 \}
1840 write(qunit,
'(i2)') vtk_type
1842 write(qunit,
'(a)')
'</DataArray>' 1844 write(qunit,
'(a)')
'</Cells>' 1846 write(qunit,
'(a)')
'</Piece>' 1850 subroutine write_vti(qunit,ixI^L,ixC^L,ixCC^L,ig^D,nx^D,&
1851 normconv,wnamei,wC,wCC)
1854 integer,
intent(in) :: qunit
1855 integer,
intent(in) :: ixI^L,ixC^L,ixCC^L
1856 integer,
intent(in) :: ig^D,nx^D
1857 double precision,
intent(in) :: normconv(0:nw+
nwauxio)
1858 character(len=name_len),
intent(in):: wnamei(1:nw+
nwauxio)
1860 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC
1861 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC
1864 integer :: extent(1:6)
1868 {^d& extent(^d*2-1) = (ig^d-1) * nx^d; }
1869 {^d& extent(^d*2) = (ig^d) * nx^d; }
1873 case(
'vtimpi',
'pvtimpi')
1875 write(qunit,
'(a,6(i10),a)') &
1876 '<Piece Extent="',extent,
'">' 1877 write(qunit,
'(a)')
'<PointData>' 1883 write(qunit,
'(a,a,a)')&
1884 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">' 1885 write(qunit,
'(200(1pe20.12))') {(|}wc(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
1886 write(qunit,
'(a)')
'</DataArray>' 1888 write(qunit,
'(a)')
'</PointData>' 1890 case(
'vtiCCmpi',
'pvtiCCmpi')
1892 write(qunit,
'(a,6(i10),a)') &
1893 '<Piece Extent="',extent,
'">' 1894 write(qunit,
'(a)')
'<CellData>' 1899 write(qunit,
'(a,a,a)')&
1900 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">' 1901 write(qunit,
'(200(1pe20.12))') {(|}wcc(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
1902 write(qunit,
'(a)')
'</DataArray>' 1904 write(qunit,
'(a)')
'</CellData>' 1907 write(qunit,
'(a)')
'</Piece>' 1916 integer,
intent(in) :: qunit
1918 character(len=name_len) :: wnamei(1:nw+
nwauxio),xandwnamei(1:
ndim+nw+
nwauxio),outtype
1919 character(len=1024) :: outfilehead
1920 character(len=80) :: filename,pfilename
1921 integer :: filenr,iw,ipe,iscalars
1925 case(
'pvtumpi',
'pvtuBmpi')
1926 outtype=
"PPointData" 1927 case(
'pvtuCCmpi',
'pvtuBCCmpi')
1930 inquire(qunit,opened=fileopen)
1931 if(.not.fileopen)
then 1935 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".pvtu" 1937 open(qunit,file=filename,status=
'unknown',form=
'formatted')
1950 write(qunit,
'(a)')
'<?xml version="1.0"?>' 1951 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="PUnstructuredGrid"' 1952 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">' 1953 write(qunit,
'(a)')
' <PUnstructuredGrid GhostLevel="0">' 1955 write(qunit,
'(a,a,a,a,a)')&
1956 ' <',trim(outtype),
' Scalars="',trim(wnamei(iscalars))//
'">' 1959 write(qunit,
'(a,a,a)')&
1960 ' <PDataArray type="Float32" Name="',trim(wnamei(iw)),
'"/>' 1963 write(qunit,
'(a,a,a)')&
1964 ' <PDataArray type="Float32" Name="',trim(wnamei(iw)),
'"/>' 1966 write(qunit,
'(a,a,a)')
' </',trim(outtype),
'>' 1968 write(qunit,
'(a)')
' <PPoints>' 1969 write(qunit,
'(a)')
' <PDataArray type="Float32" NumberOfComponents="3"/>' 1970 write(qunit,
'(a)')
' </PPoints>' 1977 write(qunit,
'(a,a,a)')
' <Piece Source="',trim(pfilename),
'"/>' 1979 write(qunit,
'(a)')
' </PUnstructuredGrid>' 1980 write(qunit,
'(a)')
'</VTKFile>' 2002 integer,
intent(in) :: qunit
2004 integer:: igrid,iigrid,level,igonlevel,iw,idim,ix^D
2006 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,ixC^L,ixCC^L
2007 integer :: nodesonlevelmype,elemsonlevelmype
2009 integer :: nodes, elems
2011 integer,
allocatable :: intstatus(:,:)
2013 double precision :: x_TEC(
ndim), w_TEC(nw+
nwauxio)
2015 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP,xC_TMP_recv
2016 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP,xCC_TMP_recv
2017 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
2018 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
2020 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP,wC_TMP_recv
2021 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP,wCC_TMP_recv
2022 double precision,
dimension(0:nw+nwauxio) :: normconv
2023 logical :: fileopen,first
2024 integer :: Morton_no,ipe,levmin_recv,levmax_recv,igrid_recv,level_recv
2025 integer :: ixrvC^L,ixrvCC^L
2026 integer :: ind_send(2*^nd),ind_recv(2*^nd),siz_ind,igonlevel_recv
2028 character(len=80) :: filename
2030 character(len=1024) :: tecplothead
2033 character(len=1024) :: outfilehead
2035 if(nw/=count(
w_write(1:nw)))
then 2036 if(
mype==0) print *,
'tecplot_mpi does not use w_write=F' 2037 call mpistop(
'w_write, tecplot')
2041 if(
mype==0) print *,
'tecplot_mpi with nocartesian' 2044 master_cpu_open :
if (
mype == 0)
then 2045 inquire(qunit,opened=fileopen)
2046 if (.not.fileopen)
then 2050 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".plt" 2051 open(qunit,file=filename,status=
'unknown')
2056 write(tecplothead,
'(a)')
"VARIABLES = "//trim(outfilehead)
2057 write(qunit,
'(a)') tecplothead(1:len_trim(tecplothead))
2058 end if master_cpu_open
2064 numgridsonlevel(level)=0
2068 numgridsonlevel(level)=numgridsonlevel(level)+1
2070 numgridsonlevel_mype(level,0:
npe-1)=0
2071 numgridsonlevel_mype(level,
mype) = numgridsonlevel(level)
2072 call mpi_allreduce(mpi_in_place,numgridsonlevel_mype(level,0:
npe-1),
npe,mpi_integer,&
2074 call mpi_allreduce(mpi_in_place,numgridsonlevel(level),1,mpi_integer,mpi_sum, &
2087 nx^d=ixmhi^d-ixmlo^d+1;
2090 if(
mype==0.and.
npe>1)
allocate(intstatus(mpi_status_size,1))
2097 nodes=nodes + numgridsonlevel(level)*{nxc^d*}
2098 elems=elems + numgridsonlevel(level)*{nx^d*}
2101 if (
mype==0)
write(qunit,
"(a,i7,a,1pe12.5,a)") &
2102 'ZONE T="all levels", I=',elems, &
2108 call calc_x(igrid,xc,xcc)
2109 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,ixc^l,ixcc^l,.true.)
2111 {
do ix^db=ixccmin^db,ixccmax^db\}
2112 x_tec(1:
ndim)=xcc_tmp(ix^d,1:
ndim)*normconv(0)
2114 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2116 else if (
mype/=0)
then 2128 call mpi_recv(igrid_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2129 call mpi_recv(normconv,nw+
nwauxio+1, mpi_double_precision,ipe,&
2135 {
do ix^db=ixccmin^db,ixccmax^db\}
2136 x_tec(1:
ndim)=xcc_tmp_recv(ix^d,1:
ndim)*normconv(0)
2138 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2155 nodesonlevelmype=numgridsonlevel_mype(level,
mype)*{nxc^d*}
2156 elemsonlevelmype=numgridsonlevel_mype(level,
mype)*{nx^d*}
2157 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
2158 elemsonlevel=numgridsonlevel(level)*{nx^d*}
2170 if (
mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2171 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
2172 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2174 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2184 call calc_x(igrid,xc,xcc)
2185 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2186 ixc^l,ixcc^l,.true.)
2189 ind_send=(/ ixc^l /)
2197 {
do ix^db=ixcmin^db,ixcmax^db\}
2198 x_tec(1:
ndim)=xc_tmp(ix^d,1:
ndim)*normconv(0)
2200 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2205 case(
'tecplotCCmpi')
2215 if (
mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2216 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
2217 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2219 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
2220 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2224 if (
mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2225 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i1,a,a)") &
2226 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2229 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2231 if (
mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2232 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
2233 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2236 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2252 call calc_x(igrid,xc,xcc)
2253 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2256 ind_send=(/ ixc^l /)
2263 write(qunit,fmt=
"(100(e14.6))") xc_tmp(ixc^s,idim)*normconv(0)
2279 call calc_x(igrid,xc,xcc)
2280 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2281 ixc^l,ixcc^l,.true.)
2284 ind_send=(/ ixcc^l /)
2291 write(qunit,fmt=
"(100(e14.6))") wcc_tmp(ixcc^s,iw)*normconv(iw)
2296 call mpistop(
'no such tecplot type')
2311 igonlevel=igonlevel+1
2326 call mpi_recv(levmin_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2328 call mpi_recv(levmax_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2329 do level=levmin_recv,levmax_recv
2330 nodesonlevelmype=numgridsonlevel_mype(level,ipe)*{nxc^d*}
2331 elemsonlevelmype=numgridsonlevel_mype(level,ipe)*{nx^d*}
2332 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
2333 elemsonlevel=numgridsonlevel(level)*{nx^d*}
2339 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2340 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
2341 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2343 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2346 call mpi_recv(igrid_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2348 call mpi_recv(level_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2349 if (level_recv/=level) cycle
2353 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,
itag,&
2355 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
2356 call mpi_recv(normconv,nw+
nwauxio+1, mpi_double_precision,ipe,
itag&
2364 {
do ix^db=ixrvcmin^db,ixrvcmax^db\}
2365 x_tec(1:
ndim)=xc_tmp_recv(ix^d,1:
ndim)*normconv(0)
2367 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2370 case(
'tecplotCCmpi')
2380 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2381 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
2382 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2384 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
2385 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2389 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2390 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i1,a,a)") &
2391 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2394 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2396 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2397 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
2398 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2401 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2408 call mpi_recv(igrid_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2409 itag=igrid_recv*idim
2410 call mpi_recv(level_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2411 if (level_recv/=level) cycle
2414 itag=igrid_recv*idim
2415 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2416 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
2417 call mpi_recv(normconv,nw+
nwauxio+1, mpi_double_precision,ipe,
itag&
2420 write(qunit,fmt=
"(100(e14.6))") xc_tmp_recv(ixrvc^s,idim)*normconv(0)
2427 call mpi_recv(igrid_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2429 call mpi_recv(level_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2430 if (level_recv/=level) cycle
2434 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2435 ixrvccmin^d=ind_recv(^d);ixrvccmax^d=ind_recv(^nd+^d);
2436 call mpi_recv(normconv,nw+
nwauxio+1, mpi_double_precision,ipe,
itag&
2439 write(qunit,fmt=
"(100(e14.6))") wcc_tmp_recv(ixrvcc^s,iw)*normconv(iw)
2443 call mpistop(
'no such tecplot type')
2448 call mpi_recv(igrid_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2450 call mpi_recv(level_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2451 if (level_recv/=level) cycle
2454 call mpi_recv(igonlevel_recv,1,mpi_integer, ipe,
itag,
icomm,intstatus(:,1),
ierrmpi)
2465 if(
mype==0)
deallocate(intstatus)
2482 integer,
intent(in) :: qunit
2484 double precision :: x_VTK(1:3)
2486 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
2487 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
2488 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
2489 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
2491 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP
2492 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
2494 integer :: igrid,iigrid,level,igonlevel,icel,ixC^L,ixCC^L,Morton_no
2496 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,nc,np,VTK_type,ix^D
2497 double precision :: normconv(0:nw+
nwauxio)
2498 character(len=80) :: pfilename
2500 character(len=1024) :: outfilehead
2503 integer:: recsep,k,iw,filenr
2504 integer:: length,lengthcc,offset_points,offset_cells, &
2505 length_coords,length_conn,length_offsets
2507 character(len=6):: bufform
2517 inquire(qunit,opened=fileopen)
2518 if(.not.fileopen)
then 2524 open(qunit,file=pfilename,status=
'unknown',form=
'formatted')
2527 write(qunit,
'(a)')
'<?xml version="1.0"?>' 2528 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"' 2529 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">' 2530 write(qunit,
'(a)')
' <UnstructuredGrid>' 2531 write(qunit,
'(a)')
'<FieldData>' 2532 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
2533 'NumberOfTuples="1" format="ascii">' 2535 write(qunit,
'(a)')
'</DataArray>' 2536 write(qunit,
'(a)')
'</FieldData>' 2545 nx^d=ixmhi^d-ixmlo^d+1;
2551 lengthcc=nc*size_real
2553 length_coords=3*length
2554 length_conn=2**^nd*size_int*nc
2555 length_offsets=nc*size_int
2566 if (({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
2568 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then 2572 write(qunit,
'(a,i7,a,i7,a)') &
2573 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">' 2574 write(qunit,
'(a)')
'<PointData>' 2578 write(qunit,
'(a,a,a,i16,a)')&
2579 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
2580 '" format="appended" offset="',offset,
'">' 2581 write(qunit,
'(a)')
'</DataArray>' 2582 offset=offset+length+size_int
2586 write(qunit,
'(a,a,a,i16,a)')&
2587 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
2588 '" format="appended" offset="',offset,
'">' 2589 write(qunit,
'(a)')
'</DataArray>' 2590 offset=offset+length+size_int
2592 write(qunit,
'(a)')
'</PointData>' 2594 write(qunit,
'(a)')
'<Points>' 2595 write(qunit,
'(a,i16,a)') &
2596 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>' 2598 offset=offset+length_coords+size_int
2599 write(qunit,
'(a)')
'</Points>' 2602 write(qunit,
'(a,i7,a,i7,a)') &
2603 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">' 2604 write(qunit,
'(a)')
'<CellData>' 2608 write(qunit,
'(a,a,a,i16,a)')&
2609 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
2610 '" format="appended" offset="',offset,
'">' 2611 write(qunit,
'(a)')
'</DataArray>' 2612 offset=offset+lengthcc+size_int
2616 write(qunit,
'(a,a,a,i16,a)')&
2617 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
2618 '" format="appended" offset="',offset,
'">' 2619 write(qunit,
'(a)')
'</DataArray>' 2620 offset=offset+lengthcc+size_int
2622 write(qunit,
'(a)')
'</CellData>' 2624 write(qunit,
'(a)')
'<Points>' 2625 write(qunit,
'(a,i16,a)') &
2626 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>' 2628 offset=offset+length_coords+size_int
2629 write(qunit,
'(a)')
'</Points>' 2633 write(qunit,
'(a)')
'<Cells>' 2636 write(qunit,
'(a,i16,a)')&
2637 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>' 2638 offset=offset+length_conn+size_int
2641 write(qunit,
'(a,i16,a)') &
2642 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>' 2643 offset=offset+length_offsets+size_int
2646 write(qunit,
'(a,i16,a)') &
2647 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>' 2648 offset=offset+size_int+nc*size_int
2650 write(qunit,
'(a)')
'</Cells>' 2652 write(qunit,
'(a)')
'</Piece>' 2658 write(qunit,
'(a)')
'</UnstructuredGrid>' 2659 write(qunit,
'(a)')
'<AppendedData encoding="raw">' 2667 open(qunit,file=pfilename,access=
'stream',form=
'unformatted',position=
'append')
2669 write(qunit) trim(buf)
2678 if (({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
2680 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then 2681 call calc_x(igrid,xc,xcc)
2682 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2683 ixc^l,ixcc^l,.true.)
2689 write(qunit) {(|}
real(wC_TMP(ix^D,iw)*normconv(iw)),{ix^D=ixcmin^d,ixcmax^d)}
2691 write(qunit) lengthcc
2692 write(qunit) {(|}
real(wCC_TMP(ix^D,iw)*normconv(iw)),{ix^D=ixccmin^d,ixccmax^d)}
2699 write(qunit) {(|}
real(wC_TMP(ix^D,iw)*normconv(iw)),{ix^D=ixcmin^d,ixcmax^d)}
2701 write(qunit) lengthcc
2702 write(qunit) {(|}
real(wCC_TMP(ix^D,iw)*normconv(iw)),{ix^D=ixccmin^d,ixccmax^d)}
2706 write(qunit) length_coords
2707 {
do ix^db=ixcmin^db,ixcmax^db \}
2709 x_vtk(1:
ndim)=xc_tmp(ix^d,1:
ndim)*normconv(0);
2711 write(qunit)
real(x_vtk(k))
2715 write(qunit) length_conn
2717 {^ifoned
write(qunit)ix1-1,ix1 \}
2719 write(qunit)(ix2-1)*nxc1+ix1-1, &
2720 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
2724 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
2725 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
2726 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
2727 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
2728 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
2729 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
2730 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
2731 ix3*nxc2*nxc1+ ix2*nxc1+ix1
2735 write(qunit) length_offsets
2737 write(qunit) icel*(2**^nd)
2741 {^ifoned vtk_type=3 \}
2742 {^iftwod vtk_type=8 \}
2743 {^ifthreed vtk_type=11 \}
2744 write(qunit) size_int*nc
2746 write(qunit) vtk_type
2754 open(qunit,file=pfilename,status=
'unknown',form=
'formatted',position=
'append')
2756 write(qunit,
'(a)')
'</AppendedData>' 2757 write(qunit,
'(a)')
'</VTKFile>' subroutine write_pvtu(qunit)
This module contains definitions of global parameters and variables and some generic functions/subrou...
subroutine get_euv_image(qunit)
subroutine imagedatavtk_mpi(qunit)
update ghost cells of all blocks including physical boundaries
logical, dimension(:), allocatable w_write
subroutine onegrid(qunit)
logical saveprim
If true, convert from conservative to primitive variables in output.
integer max_blocks
The maximum number of grid blocks in a processor.
type(tree_node_ptr), dimension(:,:), allocatable, save igrid_to_node
Array to go from an [igrid, ipe] index to a node pointer.
subroutine oneblock(qunit)
integer type_block_wc_io
MPI type for IO: cell corner (wc) or cell center (wcc) variables.
subroutine getheadernames(wnamei, xandwnamei, outfilehead)
get all variables names
double precision, dimension(ndim, 2) writespshift
double precision time_convert_factor
Conversion factor for time unit.
character(len=std_len) convert_type
Which format to use when converting.
integer, parameter plevel_
subroutine write_vti(qunit, ixIL, ixCL, ixCCL, igD, nxD, normconv, wnamei, wC, wCC)
character(len=std_len) base_filename
Base file name for simulation output, which will be followed by a number.
Module with basic grid data structures.
integer itag
MPI recv send variables for AMR.
subroutine calc_grid(qunit, igrid, xC, xCC, xC_TMP, xCC_TMP, wC_TMP, wCC_TMP, normconv, ixCL, ixCCL, first)
Compute both corner as well as cell-centered values for output.
logical phys_req_diagonal
Whether the physics routines require diagonal ghost cells, for example for computing a curl...
integer npe
The number of MPI tasks.
subroutine save_conntec(qunit, igrid, igonlevel)
logical b0field
split magnetic field as background B0 field
logical, dimension(:), allocatable writelevel
subroutine unstructuredvtk(qunit)
integer function nodenumbertec1d(i1, nx1, ig, igrid)
integer, dimension(:), allocatable ng
number of grid blocks in domain per dimension, in array over levels
subroutine calc_x(igrid, xC, xCC)
computes cell corner (xC) and cell center (xCC) coordinates
procedure(aux_output), pointer usr_aux_output
Module with all the methods that users can customize in AMRVAC.
integer, dimension(:), allocatable, save sfc_to_igrid
Go from a Morton number to an igrid index (for a single processor)
integer type_block_io
MPI type for IO: block excluding ghost cells.
integer, parameter unitconvert
subroutine punstructuredvtkb_mpi(qunit)
integer type_block_xcc_io
logical nocartesian
IO switches for conversion.
integer ierrmpi
A global MPI error return code.
integer ixm
the mesh range (within a block with ghost cells)
integer snapshotnext
IO: snapshot and collapsed views output numbers/labels.
subroutine unstructuredvtk_mpi(qunit)
subroutine tecplot(qunit)
logical image
output image
subroutine write_vtk(qunit, ixIL, ixCL, ixCCL, igrid, nc, np, nxD, nxCD, normconv, wnamei, xC, xCC, wC, wCC)
double precision, dimension(:), allocatable w_convert_factor
Conversion factors the primitive variables.
subroutine punstructuredvtk_mpi(qunit)
integer, dimension(:), allocatable, save morton_start
First Morton number per processor.
subroutine getbc(time, qdt, psb, nwstart, nwbc, req_diag)
do update ghost cells of all blocks including physical boundaries
subroutine unstructuredvtkb(qunit)
integer, parameter unitterm
Unit for standard output.
integer, dimension(:), allocatable, save morton_stop
Last Morton number per processor.
integer mype
The rank of the current MPI task.
double precision global_time
The global simulation time.
subroutine resettree_convert
Force the tree to desired level(s) from level_io(_min/_max) used for conversion to vtk output...
subroutine get_euv_spectra(qunit)
subroutine save_connvtk(qunit, igrid)
subroutine tecplot_mpi(qunit)
subroutine mpistop(message)
Exit MPI-AMRVAC with an error message.
integer function nodenumbertec3d(i1, i2, i3, nx1, nx2, nx3, ig, igrid)
double precision length_convert_factor
double precision, dimension(ndim) dxlevel
integer snapshotini
Resume from the snapshot with this index.
integer, parameter rpxmax
integer, parameter ndim
Number of spatial dimensions for grid variables.
integer type_block_wcc_io
subroutine generate_plotfile
integer nwauxio
Number of auxiliary variables that are only included in output.
integer icomm
The MPI communicator.
integer, parameter nlevelshi
The maximum number of levels in the grid refinement.
This module defines the procedures of a physics module. It contains function pointers for the various...
procedure(sub_convert), pointer phys_to_primitive
integer, dimension(:,:), allocatable node
logical phys_energy
Solve energy equation or not.
double precision, dimension(:,:), allocatable rnode
Corner coordinates.
integer type_block_xc_io
MPI type for IO: cell corner (xc) or cell center (xcc) coordinates.
logical spectrum
output spectrum
logical autoconvert
If true, already convert to output format during the run.
integer function nodenumbertec2d(i1, i2, nx1, nx2, ig, igrid)
procedure(special_convert), pointer usr_special_convert
Handles computations for coordinates and variables in output.
integer, parameter rpxmin