19 case(
'tecplot',
'tecplotCC',
'tecline')
21 case(
'tecplotmpi',
'tecplotCCmpi',
'teclinempi')
25 case(
'vtumpi',
'vtuCCmpi')
27 case(
'vtuB',
'vtuBCC',
'vtuBmpi',
'vtuBCCmpi')
29 case(
'vtuB64',
'vtuBCC64',
'vtuBmpi64',
'vtuBCCmpi64')
32 case(
'vtuB23',
'vtuBCC23')
34 case(
'vtuBsym23',
'vtuBCCsym23')
37 case(
'pvtumpi',
'pvtuCCmpi')
39 case(
'pvtuBmpi',
'pvtuBCCmpi')
41 case(
'vtimpi',
'vtiCCmpi')
43 case(
'onegrid',
'onegridmpi')
45 case(
'oneblock',
'oneblockB')
47 case(
'EIvtiCCmpi',
'ESvtiCCmpi',
'SIvtiCCmpi',
'EIvtuCCmpi',
'ESvtuCCmpi',
'SIvtuCCmpi')
52 case(
'dat_generic_mpi')
56 case(
'user',
'usermpi')
58 call mpistop(
"usr_special_convert not defined")
63 call mpistop(
"Error in generate_plotfile: Unknown convert_type")
89 integer,
intent(in) :: qunit
91 integer :: Morton_no,igrid,ix^D,ig^D,level
92 integer,
pointer :: ig_to_igrid(:^D&,:)
93 logical :: fileopen,writeblk(max_blocks)
94 character(len=80) :: filename
95 integer :: filenr,ncells^D,ncellx^D,jg^D,jig^D
97 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
98 character(len=1024) :: outfilehead
100 double precision :: wval1,xval1
101 double precision,
dimension({^D&1:1},1:nw+nwauxio) :: wval
102 double precision,
dimension({^D&1:1},1:ndim) :: xval
103 double precision:: normconv(0:nw+nwauxio)
105 integer :: iw,iiw,writenw,iwrite(1:nw+nwauxio),iigrid,idim
106 logical :: patchw(ixG^T)
110 call mpistop(
'please specify level_io>0 for usage with oneblock')
114 call mpistop(
'Set autoconvert=F and convert oneblock data manually')
118 if(
mype==0) print *,
'ONEBLOCK as yet to be parallelized'
119 call mpistop(
'npe>1, oneblock')
123 normconv(0:nw+nwauxio)=one
126 writenw=count(
w_write(1:nw))+nwauxio
134 do iw =nw+1,nw+nwauxio
147 ig_to_igrid(ig^d,
mype)=igrid
148 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
150 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then
151 writeblk(igrid)=.true.
157 ncellx^d=ixmhi^d-ixmlo^d+1\
159 igrid=ig_to_igrid(ig^d,
mype)
160 if(writeblk(igrid))
go to 20
166 do ig^d=1,ng^d(level_io)
168 igrid=ig_to_igrid(jig^dd,mype)
169 if(writeblk(igrid)) ncells^d=ncells^d+ncellx^d
173 do iigrid=1,igridstail; igrid=igrids(iigrid)
174 if(.not.writeblk(igrid)) cycle
176 if (nwauxio > 0)
then
177 if (.not.
associated(usr_aux_output))
then
178 call mpistop(
"usr_aux_output not defined")
180 call usr_aux_output(ixg^ll,ixm^ll^ladd1, &
181 ps(igrid)%w,ps(igrid)%x,normconv)
187 do iigrid=1,igridstail; igrid=igrids(iigrid)
188 if (.not.writeblk(igrid)) cycle
190 call phys_to_primitive(ixg^ll,ixg^ll^lsub1,ps(igrid)%w,ps(igrid)%x)
193 ps(igrid)%w(ixg^t,iw_mag(:))=ps(igrid)%w(ixg^t,iw_mag(:))+ps(igrid)%B0(ixg^t,:,0)
197 do iigrid=1,igridstail; igrid=igrids(iigrid)
198 if (.not.writeblk(igrid)) cycle
203 ps(igrid)%w(ixg^t,iw_e)=ps(igrid)%w(ixg^t,iw_e)+0.5d0*sum(ps(igrid)%B0(ixg^t,:,0)**2,dim=ndim+1) &
204 + sum(ps(igrid)%w(ixg^t,iw_mag(:))*ps(igrid)%B0(ixg^t,:,0),dim=ndim+1)
205 ps(igrid)%w(ixg^t,iw_mag(:))=ps(igrid)%w(ixg^t,iw_mag(:))+ps(igrid)%B0(ixg^t,:,0)
210 master_cpu_open :
if (mype == 0)
then
211 inquire(qunit,opened=fileopen)
212 if (.not.fileopen)
then
215 if (autoconvert) filenr=snapshotnext
216 write(filename,
'(a,i4.4,a)') trim(base_filename),filenr,
".blk"
217 select case(convert_type)
219 open(qunit,file=filename,status=
'unknown')
220 write(qunit,*) trim(outfilehead)
221 write(qunit,*) ncells^d
222 write(qunit,*) real(global_time*time_convert_factor)
224 open(qunit,file=filename,form=
'unformatted',status=
'unknown')
225 write(qunit) outfilehead
226 write(qunit) ncells^d
227 write(qunit) real(global_time*time_convert_factor)
230 end if master_cpu_open
233 do ig3=1,ng3(level_io)
234 do ix3=ixmlo3,ixmhi3}
237 do ig2=1,ng2(level_io)
238 do ix2=ixmlo2,ixmhi2}
240 do ig1=1,ng1(level_io)
241 igrid=ig_to_igrid(ig^d,mype)
242 if(.not.writeblk(igrid)) cycle
244 master_write :
if(mype==0)
then
245 select case(convert_type)
247 write(qunit,fmt=
"(100(e14.6))") &
248 ps(igrid)%x(ix^d,1:ndim)*normconv(0),&
249 (ps(igrid)%w(ix^d,iwrite(iw))*normconv(iwrite(iw)),iw=1,writenw)
251 write(qunit) real(ps(igrid)%x(ix^d,1:ndim)*normconv(0)),&
252 (real(ps(igrid)%w(ix^d,iwrite(iw))*normconv(iwrite(iw))),iw=1,writenw)
284 integer,
intent(in) :: qunit
286 integer :: itag,Morton_no,igrid,ix^D,iw
288 character(len=80) :: filename
291 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
292 character(len=1024) :: outfilehead
295 integer :: igrid_recv,ipe
296 double precision :: w_recv(ixG^T,1:nw),x_recv(ixG^T,1:ndim)
297 integer,
allocatable :: intstatus(:,:)
302 if(
mype==0) print *,
'ONEGRID to be used without nwauxio'
303 call mpistop(
'nwauxio>0, onegrid')
307 if(
mype==0.and.nwaux>0) print *,
'warning: ONEGRID used with saveprim, check auxiliaries'
312 master_cpu_open :
if (
mype == 0)
then
314 write(outfilehead,
'(a)')
"#"//
" "//trim(outfilehead)
315 inquire(qunit,opened=fileopen)
316 if (.not.fileopen)
then
320 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".blk"
321 open(qunit,file=filename,status=
'unknown')
323 write(qunit,
"(a)")outfilehead
325 end if master_cpu_open
332 call mpi_send(igrid,1,mpi_integer, 0,itag,
icomm,
ierrmpi)
337 {
do ix^db=ixmlo^db,ixmhi^db\}
339 if( dabs(ps(igrid)%w(ix^d,iw)) < 1.0d-32 ) ps(igrid)%w(ix^d,iw) = zero
341 write(qunit,fmt=
"(100(e14.6))") ps(igrid)%x(ix^d,1:ndim)&
342 ,ps(igrid)%w(ix^d,1:nw)
347 if(mype==0.and.npe>1)
allocate(intstatus(mpi_status_size,1))
349 manycpu :
if (npe>1)
then
351 loop_cpu :
do ipe =1, npe-1
352 loop_morton :
do morton_no=morton_start(ipe),morton_stop(ipe)
354 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
355 call mpi_recv(x_recv,1,type_block_xcc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
357 call mpi_recv(w_recv,1,type_block_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
358 {
do ix^db=ixmlo^db,ixmhi^db\}
360 if( dabs(ps(igrid)%w(ix^d,iw)) < smalldouble ) ps(igrid)%w(ix^d,iw) = zero
362 write(qunit,fmt=
"(100(e14.6))") x_recv(ix^d,1:ndim)&
371 call mpi_barrier(icomm,ierrmpi)
372 if(mype==0)
deallocate(intstatus)
375 if(mype==0)
close(qunit)
387 integer,
intent(in) :: qunit
389 integer:: igrid,iigrid,level,igonlevel,iw,idim,ix^D
390 integer:: NumGridsOnLevel(1:nlevelshi)
391 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,ixC^L,ixCC^L
393 integer :: nodes, elems
396 double precision :: x_TEC(ndim), w_TEC(nw+nwauxio)
398 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
399 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
400 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
401 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
403 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP
404 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
405 double precision,
dimension(0:nw+nwauxio) :: normconv
406 logical :: fileopen,first
407 character(len=80) :: filename
411 character(len=1024) :: tecplothead
413 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
414 character(len=1024) :: outfilehead
418 if(
mype==0) print *,
'tecplot not parallel, use tecplotmpi'
422 if(nw/=count(
w_write(1:nw)))
then
423 if(
mype==0) print *,
'tecplot does not use w_write=F'
424 call mpistop(
'w_write, tecplot')
428 if(
mype==0) print *,
'tecplot with nocartesian'
431 inquire(qunit,opened=fileopen)
432 if (.not.fileopen)
then
436 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".plt"
437 open(qunit,file=filename,status=
'unknown')
442 write(tecplothead,
'(a)')
"VARIABLES = "//trim(outfilehead)
444 write(qunit,
'(a)') tecplothead(1:len_trim(tecplothead))
446 numgridsonlevel(1:nlevelshi)=0
448 numgridsonlevel(level)=0
449 do iigrid=1,igridstail; igrid=igrids(iigrid);
451 numgridsonlevel(level)=numgridsonlevel(level)+1
455 nx^d=ixmhi^d-ixmlo^d+1;
463 nodes=nodes + numgridsonlevel(level)*{nxc^d*}
464 elems=elems + numgridsonlevel(level)*{nx^d*}
467 write(qunit,
"(a,i7,a,1pe12.5,a)") &
468 'ZONE T="all levels", I=',elems, &
472 do iigrid=1,igridstail; igrid=igrids(iigrid);
475 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,ixc^l,ixcc^l,.true.)
476 {
do ix^db=ixccmin^db,ixccmax^db\}
477 x_tec(1:ndim)=xcc_tmp(ix^d,1:ndim)*normconv(0)
478 w_tec(1:nw+nwauxio)=wcc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
480 write(qunit,fmt=
"(100(e24.16))") x_tec, w_tec
486 do level=levmin,levmax
487 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
488 elemsonlevel=numgridsonlevel(level)*{nx^d*}
495 select case(convert_type)
500 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
501 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
502 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=POINT, ZONETYPE=', &
503 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
504 do iigrid=1,igridstail; igrid=igrids(iigrid);
505 if (node(plevel_,igrid)/=level) cycle
507 call calc_x(igrid,xc,xcc)
508 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
510 {
do ix^db=ixcmin^db,ixcmax^db\}
511 x_tec(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0)
512 w_tec(1:nw+nwauxio)=wc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
513 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
522 if(ndim+nw+nwauxio>99)
call mpistop(
"adjust format specification in writeout")
523 if(nw+nwauxio==1)
then
526 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
527 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
528 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
529 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
530 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
532 if(ndim+nw+nwauxio<10)
then
534 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i1,a,a)") &
535 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
536 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
537 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
538 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
540 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
541 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
542 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
543 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
544 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
549 do iigrid=1,igridstail; igrid=igrids(iigrid);
550 if (node(plevel_,igrid)/=level) cycle
552 call calc_x(igrid,xc,xcc)
553 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
555 write(qunit,fmt=
"(100(e14.6))") xc_tmp(ixc^s,idim)*normconv(0)
559 do iigrid=1,igridstail; igrid=igrids(iigrid);
560 if (node(plevel_,igrid)/=level) cycle
562 call calc_x(igrid,xc,xcc)
563 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
565 write(qunit,fmt=
"(100(e14.6))") wcc_tmp(ixcc^s,iw)*normconv(iw)
569 call mpistop(
'no such tecplot type')
572 do iigrid=1,igridstail; igrid=igrids(iigrid);
573 if (node(plevel_,igrid)/=level) cycle
575 igonlevel=igonlevel+1
592 integer,
intent(in) :: qunit, igrid, igonlevel
594 integer :: nx^D, nxC^D, ix^D
595 {^ifoned
integer,
external:: nodenumbertec1D \}
596 {^iftwod
integer,
external:: nodenumbertec2D \}
597 {^ifthreed
integer,
external:: nodenumbertec3D \}
599 nx^d=ixmhi^d-ixmlo^d+1;
606 write(qunit,
'(8(i7,1x))') &
618 write(qunit,
'(4(i7,1x))') &
635 integer,
intent(in):: i1,nx1,ig,igrid
644 integer,
intent(in):: i1,i2,nx1,nx2,ig,igrid
653 integer,
intent(in):: i1,i2,i3,nx1,nx2,nx3,ig,igrid
669 integer,
intent(in) :: qunit
671 double precision :: x_VTK(1:3)
673 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
674 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
675 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
676 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
678 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP
679 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
680 double precision,
dimension(0:nw+nwauxio) :: normconv
681 integer:: igrid,iigrid,level,igonlevel,icel,ixC^L,ixCC^L,iw
682 integer:: NumGridsOnLevel(1:nlevelshi)
683 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,nc,np,VTK_type,ix^D
685 character(len=80):: filename
688 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
689 character(len=1024) :: outfilehead
695 if(
mype==0) print *,
'unstructuredvtk not parallel, use vtumpi'
696 call mpistop(
'npe>1, unstructuredvtk')
699 inquire(qunit,opened=fileopen)
700 if(.not.fileopen)
then
704 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu"
706 open(qunit,file=filename,status=
'unknown')
712 write(qunit,
'(a)')
'<?xml version="1.0"?>'
713 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
714 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
715 write(qunit,
'(a)')
'<UnstructuredGrid>'
716 write(qunit,
'(a)')
'<FieldData>'
717 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
718 'NumberOfTuples="1" format="ascii">'
720 write(qunit,
'(a)')
'</DataArray>'
721 write(qunit,
'(a)')
'</FieldData>'
724 nx^d=ixmhi^d-ixmlo^d+1;
733 do iigrid=1,igridstail; igrid=igrids(iigrid);
738 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
740 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then
742 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
747 write(qunit,
'(a,i7,a,i7,a)') &
748 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
749 write(qunit,
'(a)')
'<PointData>'
754 write(qunit,
'(a,a,a)')&
755 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">'
756 write(qunit,
'(200(1pe14.6))') {(|}wc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
757 write(qunit,
'(a)')
'</DataArray>'
759 write(qunit,
'(a)')
'</PointData>'
760 write(qunit,
'(a)')
'<Points>'
761 write(qunit,
'(a)')
'<DataArray type="Float32" NumberOfComponents="3" format="ascii">'
763 {
do ix^db=ixcmin^db,ixcmax^db \}
765 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
766 write(qunit,
'(3(1pe14.6))') x_vtk
768 write(qunit,
'(a)')
'</DataArray>'
769 write(qunit,
'(a)')
'</Points>'
772 write(qunit,
'(a,i7,a,i7,a)') &
773 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
774 write(qunit,
'(a)')
'<CellData>'
779 write(qunit,
'(a,a,a)')&
780 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">'
781 write(qunit,
'(200(1pe14.6))') {(|}wcc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
782 write(qunit,
'(a)')
'</DataArray>'
784 write(qunit,
'(a)')
'</CellData>'
785 write(qunit,
'(a)')
'<Points>'
786 write(qunit,
'(a)')
'<DataArray type="Float32" NumberOfComponents="3" format="ascii">'
788 {
do ix^db=ixcmin^db,ixcmax^db \}
790 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
791 write(qunit,
'(3(1pe14.6))') x_vtk
793 write(qunit,
'(a)')
'</DataArray>'
794 write(qunit,
'(a)')
'</Points>'
797 write(qunit,
'(a)')
'<Cells>'
799 write(qunit,
'(a)')
'<DataArray type="Int32" Name="connectivity" format="ascii">'
801 write(qunit,
'(a)')
'</DataArray>'
804 write(qunit,
'(a)')
'<DataArray type="Int32" Name="offsets" format="ascii">'
806 write(qunit,
'(i7)') icel*(2**^nd)
808 write(qunit,
'(a)')
'</DataArray>'
811 write(qunit,
'(a)')
'<DataArray type="Int32" Name="types" format="ascii">'
813 {^ifoned vtk_type=3 \}
814 {^iftwod vtk_type=8 \}
815 {^ifthreed vtk_type=11 \}
817 write(qunit,
'(i2)') vtk_type
819 write(qunit,
'(a)')
'</DataArray>'
821 write(qunit,
'(a)')
'</Cells>'
823 write(qunit,
'(a)')
'</Piece>'
829 write(qunit,
'(a)')
'</UnstructuredGrid>'
830 write(qunit,
'(a)')
'</VTKFile>'
844 integer,
intent(in) :: qunit
846 double precision :: x_VTK(1:3)
848 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
849 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
850 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
851 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
853 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio):: wC_TMP
854 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
855 double precision :: normconv(0:nw+nwauxio)
857 integer,
allocatable :: intstatus(:,:)
858 integer :: itag,ipe,igrid,level,icel,ixC^L,ixCC^L,Morton_no,Morton_length
859 integer :: nx^D,nxC^D,nc,np,VTK_type,ix^D,filenr
863 integer:: length,lengthcc,length_coords,length_conn,length_offsets
865 character(len=80):: filename
866 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
867 character(len=1024) :: outfilehead
869 logical :: fileopen,cell_corner=.false.
870 logical,
allocatable :: Morton_aim(:),Morton_aim_p(:)
886 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
888 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then
889 morton_aim_p(morton_no)=.true.
893 call mpi_allreduce(morton_aim_p,morton_aim,morton_length,mpi_logical,mpi_lor,&
896 case(
'vtuB',
'vtuBmpi')
898 case(
'vtuBCC',
'vtuBCCmpi')
903 if(.not. morton_aim(morton_no)) cycle
906 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
920 inquire(qunit,opened=fileopen)
921 if(.not.fileopen)
then
925 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu"
927 open(qunit,file=filename,status=
'replace')
931 write(qunit,
'(a)')
'<?xml version="1.0"?>'
932 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
933 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
934 write(qunit,
'(a)')
'<UnstructuredGrid>'
935 write(qunit,
'(a)')
'<FieldData>'
936 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
937 'NumberOfTuples="1" format="ascii">'
939 write(qunit,
'(a)')
'</DataArray>'
940 write(qunit,
'(a)')
'</FieldData>'
943 nx^d=ixmhi^d-ixmlo^d+1;
948 lengthcc=nc*size_real
949 length_coords=3*length
950 length_conn=2**^nd*size_int*nc
951 length_offsets=nc*size_int
955 if(.not. morton_aim(morton_no)) cycle
958 write(qunit,
'(a,i7,a,i7,a)') &
959 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
960 write(qunit,
'(a)')
'<PointData>'
966 write(qunit,
'(a,a,a,i16,a)')&
967 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
968 '" format="appended" offset="',offset,
'">'
969 write(qunit,
'(a)')
'</DataArray>'
970 offset=offset+length+size_int
972 write(qunit,
'(a)')
'</PointData>'
973 write(qunit,
'(a)')
'<Points>'
974 write(qunit,
'(a,i16,a)') &
975 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
977 offset=offset+length_coords+size_int
978 write(qunit,
'(a)')
'</Points>'
981 write(qunit,
'(a,i7,a,i7,a)') &
982 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
983 write(qunit,
'(a)')
'<CellData>'
988 write(qunit,
'(a,a,a,i16,a)')&
989 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
990 '" format="appended" offset="',offset,
'">'
991 write(qunit,
'(a)')
'</DataArray>'
992 offset=offset+lengthcc+size_int
994 write(qunit,
'(a)')
'</CellData>'
995 write(qunit,
'(a)')
'<Points>'
996 write(qunit,
'(a,i16,a)') &
997 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
999 offset=offset+length_coords+size_int
1000 write(qunit,
'(a)')
'</Points>'
1002 write(qunit,
'(a)')
'<Cells>'
1005 write(qunit,
'(a,i16,a)')&
1006 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>'
1007 offset=offset+length_conn+size_int
1010 write(qunit,
'(a,i16,a)') &
1011 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>'
1012 offset=offset+length_offsets+size_int
1015 write(qunit,
'(a,i16,a)') &
1016 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>'
1017 offset=offset+size_int+nc*size_int
1019 write(qunit,
'(a)')
'</Cells>'
1021 write(qunit,
'(a)')
'</Piece>'
1027 if(.not. morton_aim(morton_no)) cycle
1028 if(cell_corner)
then
1030 write(qunit,
'(a,i7,a,i7,a)') &
1031 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1032 write(qunit,
'(a)')
'<PointData>'
1037 write(qunit,
'(a,a,a,i16,a)')&
1038 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
1039 '" format="appended" offset="',offset,
'">'
1040 write(qunit,
'(a)')
'</DataArray>'
1041 offset=offset+length+size_int
1043 write(qunit,
'(a)')
'</PointData>'
1044 write(qunit,
'(a)')
'<Points>'
1045 write(qunit,
'(a,i16,a)') &
1046 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1048 offset=offset+length_coords+size_int
1049 write(qunit,
'(a)')
'</Points>'
1052 write(qunit,
'(a,i7,a,i7,a)') &
1053 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1054 write(qunit,
'(a)')
'<CellData>'
1059 write(qunit,
'(a,a,a,i16,a)')&
1060 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
1061 '" format="appended" offset="',offset,
'">'
1062 write(qunit,
'(a)')
'</DataArray>'
1063 offset=offset+lengthcc+size_int
1065 write(qunit,
'(a)')
'</CellData>'
1066 write(qunit,
'(a)')
'<Points>'
1067 write(qunit,
'(a,i16,a)') &
1068 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1070 offset=offset+length_coords+size_int
1071 write(qunit,
'(a)')
'</Points>'
1073 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)
1156 {^ifoned vtk_type=3 \}
1157 {^iftwod vtk_type=8 \}
1158 {^ifthreed vtk_type=11 \}
1159 write(qunit) size_int*nc
1161 write(qunit) vtk_type
1164 allocate(intstatus(mpi_status_size,1))
1166 ixccmin^d=ixmlo^d; ixccmax^d=ixmhi^d;
1167 ixcmin^d=ixmlo^d-1; ixcmax^d=ixmhi^d;
1169 do morton_no=morton_start(ipe),morton_stop(ipe)
1170 if(.not. morton_aim(morton_no)) cycle
1172 call mpi_recv(xc_tmp,1,type_block_xc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1173 if(cell_corner)
then
1174 call mpi_recv(wc_tmp,1,type_block_wc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1176 call mpi_recv(wcc_tmp,1,type_block_wcc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1180 if(.not.w_write(iw)) cycle
1182 if(cell_corner)
then
1184 write(qunit) {(|}real(wc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixcmin^d,ixcmax^d)}
1186 write(qunit) lengthcc
1187 write(qunit) {(|}real(wcc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixccmin^d,ixccmax^d)}
1191 write(qunit) length_coords
1192 {
do ix^db=ixcmin^db,ixcmax^db \}
1194 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1196 write(qunit) real(x_vtk(k))
1200 write(qunit) length_conn
1202 {^ifoned
write(qunit)ix1-1,ix1 \}
1204 write(qunit)(ix2-1)*nxc1+ix1-1, &
1205 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1209 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1210 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1211 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1212 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1213 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1214 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1215 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1216 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1220 write(qunit) length_offsets
1222 write(qunit) icel*(2**^nd)
1224 {^ifoned vtk_type=3 \}
1225 {^iftwod vtk_type=8 \}
1226 {^ifthreed vtk_type=11 \}
1227 write(qunit) size_int*nc
1229 write(qunit) vtk_type
1235 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
1236 write(qunit,
'(a)')
'</AppendedData>'
1237 write(qunit,
'(a)')
'</VTKFile>'
1239 deallocate(intstatus)
1242 deallocate(morton_aim,morton_aim_p)
1244 call mpi_barrier(icomm,ierrmpi)
1258 integer,
intent(in) :: qunit
1260 double precision :: x_VTK(1:3)
1262 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
1263 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
1264 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1265 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1267 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio):: wC_TMP
1268 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
1269 double precision :: normconv(0:nw+nwauxio)
1271 integer,
allocatable :: intstatus(:,:)
1272 integer :: itag,ipe,igrid,level,icel,ixC^L,ixCC^L,Morton_no,Morton_length
1273 integer :: nx^D,nxC^D,nc,np,VTK_type,ix^D,filenr
1277 integer:: length,lengthcc,length_coords,length_conn,length_offsets
1279 character(len=80):: filename
1280 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
1281 character(len=1024) :: outfilehead
1283 logical :: fileopen,cell_corner=.false.
1284 logical,
allocatable :: Morton_aim(:),Morton_aim_p(:)
1292 morton_aim_p=.false.
1300 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
1302 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then
1303 morton_aim_p(morton_no)=.true.
1307 call mpi_allreduce(morton_aim_p,morton_aim,morton_length,mpi_logical,mpi_lor,&
1310 case(
'vtuB64',
'vtuBmpi64')
1312 case(
'vtuBCC64',
'vtuBCCmpi64')
1317 if(.not. morton_aim(morton_no)) cycle
1319 call calc_x(igrid,xc,xcc)
1320 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1321 ixc^l,ixcc^l,.true.)
1324 if(cell_corner)
then
1334 inquire(qunit,opened=fileopen)
1335 if(.not.fileopen)
then
1339 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu"
1341 open(qunit,file=filename,status=
'replace')
1345 write(qunit,
'(a)')
'<?xml version="1.0"?>'
1346 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
1347 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
1348 write(qunit,
'(a)')
'<UnstructuredGrid>'
1349 write(qunit,
'(a)')
'<FieldData>'
1350 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
1351 'NumberOfTuples="1" format="ascii">'
1353 write(qunit,
'(a)')
'</DataArray>'
1354 write(qunit,
'(a)')
'</FieldData>'
1357 nx^d=ixmhi^d-ixmlo^d+1;
1361 length=np*size_double
1362 lengthcc=nc*size_double
1363 length_coords=3*length
1364 length_conn=2**^nd*size_int*nc
1365 length_offsets=nc*size_int
1369 if(.not. morton_aim(morton_no)) cycle
1370 if(cell_corner)
then
1372 write(qunit,
'(a,i7,a,i7,a)') &
1373 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1374 write(qunit,
'(a)')
'<PointData>'
1380 write(qunit,
'(a,a,a,i16,a)')&
1381 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1382 '" format="appended" offset="',offset,
'">'
1383 write(qunit,
'(a)')
'</DataArray>'
1384 offset=offset+length+size_int
1386 write(qunit,
'(a)')
'</PointData>'
1387 write(qunit,
'(a)')
'<Points>'
1388 write(qunit,
'(a,i16,a)') &
1389 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1391 offset=offset+length_coords+size_int
1392 write(qunit,
'(a)')
'</Points>'
1395 write(qunit,
'(a,i7,a,i7,a)') &
1396 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1397 write(qunit,
'(a)')
'<CellData>'
1402 write(qunit,
'(a,a,a,i16,a)')&
1403 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1404 '" format="appended" offset="',offset,
'">'
1405 write(qunit,
'(a)')
'</DataArray>'
1406 offset=offset+lengthcc+size_int
1408 write(qunit,
'(a)')
'</CellData>'
1409 write(qunit,
'(a)')
'<Points>'
1410 write(qunit,
'(a,i16,a)') &
1411 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1413 offset=offset+length_coords+size_int
1414 write(qunit,
'(a)')
'</Points>'
1416 write(qunit,
'(a)')
'<Cells>'
1419 write(qunit,
'(a,i16,a)')&
1420 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>'
1421 offset=offset+length_conn+size_int
1424 write(qunit,
'(a,i16,a)') &
1425 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>'
1426 offset=offset+length_offsets+size_int
1429 write(qunit,
'(a,i16,a)') &
1430 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>'
1431 offset=offset+size_int+nc*size_int
1433 write(qunit,
'(a)')
'</Cells>'
1435 write(qunit,
'(a)')
'</Piece>'
1441 if(.not. morton_aim(morton_no)) cycle
1442 if(cell_corner)
then
1444 write(qunit,
'(a,i7,a,i7,a)') &
1445 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1446 write(qunit,
'(a)')
'<PointData>'
1451 write(qunit,
'(a,a,a,i16,a)')&
1452 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1453 '" format="appended" offset="',offset,
'">'
1454 write(qunit,
'(a)')
'</DataArray>'
1455 offset=offset+length+size_int
1457 write(qunit,
'(a)')
'</PointData>'
1458 write(qunit,
'(a)')
'<Points>'
1459 write(qunit,
'(a,i16,a)') &
1460 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1462 offset=offset+length_coords+size_int
1463 write(qunit,
'(a)')
'</Points>'
1466 write(qunit,
'(a,i7,a,i7,a)') &
1467 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1468 write(qunit,
'(a)')
'<CellData>'
1473 write(qunit,
'(a,a,a,i16,a)')&
1474 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1475 '" format="appended" offset="',offset,
'">'
1476 write(qunit,
'(a)')
'</DataArray>'
1477 offset=offset+lengthcc+size_int
1479 write(qunit,
'(a)')
'</CellData>'
1480 write(qunit,
'(a)')
'<Points>'
1481 write(qunit,
'(a,i16,a)') &
1482 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1484 offset=offset+length_coords+size_int
1485 write(qunit,
'(a)')
'</Points>'
1487 write(qunit,
'(a)')
'<Cells>'
1489 write(qunit,
'(a,i16,a)')&
1490 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>'
1491 offset=offset+length_conn+size_int
1494 write(qunit,
'(a,i16,a)') &
1495 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>'
1496 offset=offset+length_offsets+size_int
1499 write(qunit,
'(a,i16,a)') &
1500 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>'
1501 offset=offset+size_int+nc*size_int
1503 write(qunit,
'(a)')
'</Cells>'
1505 write(qunit,
'(a)')
'</Piece>'
1510 write(qunit,
'(a)')
'</UnstructuredGrid>'
1511 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
1513 open(qunit,file=filename,access=
'stream',form=
'unformatted',position=
'append')
1515 write(qunit) trim(buf)
1518 if(.not. morton_aim(morton_no)) cycle
1520 call calc_x(igrid,xc,xcc)
1521 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1522 ixc^l,ixcc^l,.true.)
1527 if(cell_corner)
then
1529 write(qunit) {(|}wc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
1531 write(qunit) lengthcc
1532 write(qunit) {(|}wcc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
1536 write(qunit) length_coords
1537 {
do ix^db=ixcmin^db,ixcmax^db \}
1539 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1541 write(qunit) x_vtk(k)
1545 write(qunit) length_conn
1547 {^ifoned
write(qunit)ix1-1,ix1 \}
1549 write(qunit)(ix2-1)*nxc1+ix1-1, &
1550 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1554 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1555 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1556 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1557 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1558 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1559 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1560 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1561 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1565 write(qunit) length_offsets
1567 write(qunit) icel*(2**^nd)
1570 {^ifoned vtk_type=3 \}
1571 {^iftwod vtk_type=8 \}
1572 {^ifthreed vtk_type=11 \}
1573 write(qunit) size_int*nc
1575 write(qunit) vtk_type
1578 allocate(intstatus(mpi_status_size,1))
1580 ixccmin^d=ixmlo^d; ixccmax^d=ixmhi^d;
1581 ixcmin^d=ixmlo^d-1; ixcmax^d=ixmhi^d;
1583 do morton_no=morton_start(ipe),morton_stop(ipe)
1584 if(.not. morton_aim(morton_no)) cycle
1586 call mpi_recv(xc_tmp,1,type_block_xc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1587 if(cell_corner)
then
1588 call mpi_recv(wc_tmp,1,type_block_wc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1590 call mpi_recv(wcc_tmp,1,type_block_wcc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1594 if(.not.w_write(iw)) cycle
1596 if(cell_corner)
then
1598 write(qunit) {(|}wc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
1600 write(qunit) lengthcc
1601 write(qunit) {(|}wcc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
1605 write(qunit) length_coords
1606 {
do ix^db=ixcmin^db,ixcmax^db \}
1608 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1610 write(qunit) x_vtk(k)
1614 write(qunit) length_conn
1616 {^ifoned
write(qunit)ix1-1,ix1 \}
1618 write(qunit)(ix2-1)*nxc1+ix1-1, &
1619 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1623 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1624 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1625 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1626 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1627 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1628 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1629 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1630 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1634 write(qunit) length_offsets
1636 write(qunit) icel*(2**^nd)
1638 {^ifoned vtk_type=3 \}
1639 {^iftwod vtk_type=8 \}
1640 {^ifthreed vtk_type=11 \}
1641 write(qunit) size_int*nc
1643 write(qunit) vtk_type
1649 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
1650 write(qunit,
'(a)')
'</AppendedData>'
1651 write(qunit,
'(a)')
'</VTKFile>'
1653 deallocate(intstatus)
1656 deallocate(morton_aim,morton_aim_p)
1658 call mpi_barrier(icomm,ierrmpi)
1670 integer,
intent(in) :: qunit, igrid
1672 integer :: nx^D, nxC^D, ix^D
1674 nx^d=ixmhi^d-ixmlo^d+1;
1678 {^ifoned
write(qunit,
'(2(i7,1x))')ix1-1,ix1 \}
1680 write(qunit,
'(4(i7,1x))')(ix2-1)*nxc1+ix1-1, &
1681 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1684 write(qunit,
'(8(i7,1x))')&
1685 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1686 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1687 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1688 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1689 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1690 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1691 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1692 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1712 integer,
intent(in) :: qunit
1714 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP,xC_TMP_recv
1715 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP,xCC_TMP_recv
1716 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1717 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1719 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP,wC_TMP_recv
1720 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP,wCC_TMP_recv
1721 double precision,
dimension(0:nw+nwauxio) :: normconv
1722 integer:: igrid,iigrid,level,ixC^L,ixCC^L
1723 integer:: NumGridsOnLevel(1:nlevelshi)
1726 character(len=80):: filename
1729 integer,
allocatable :: intstatus(:,:)
1730 logical,
allocatable :: Morton_aim(:),Morton_aim_p(:)
1732 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
1733 character(len=1024) :: outfilehead
1736 integer :: itag,ipe,Morton_no,Morton_length
1737 integer :: ixrvC^L, ixrvCC^L, siz_ind, ind_send(5*^ND), ind_recv(5*^ND)
1738 double precision :: origin(1:3), spacing(1:3)
1739 integer :: wholeExtent(1:6), ig^D
1751 morton_aim_p=.false.
1759 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
1761 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then
1762 morton_aim_p(morton_no)=.true.
1766 call mpi_allreduce(morton_aim_p,morton_aim,morton_length,mpi_logical,mpi_lor,&
1772 if(.not. morton_aim(morton_no)) cycle
1774 call calc_x(igrid,xc,xcc)
1775 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1776 ixc^l,ixcc^l,.true.)
1778 {^d& ig^d = tree%node%ig^d; }
1780 ind_send=(/ ixc^l,ixcc^l, ig^d /)
1781 call mpi_send(ind_send,siz_ind,mpi_integer, 0,itag,
icomm,
ierrmpi)
1788 inquire(qunit,opened=fileopen)
1789 if(.not.fileopen)
then
1793 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vti"
1795 open(qunit,file=filename,status=
'unknown',form=
'formatted')
1801 nx^d=ixmhi^d-ixmlo^d+1;
1804 {^d& origin(^d) = xprobmin^d*normconv(0); }
1806 {^d&spacing(^d) =
dxlevel(^d)*normconv(0); }
1810 {^d&wholeextent(^d*2-1) = nx^d * ceiling(((xprobmax^d-xprobmin^d)*
writespshift(^d,1)) &
1812 {^d&wholeextent(^d*2) = nx^d * floor(((xprobmax^d-xprobmin^d)*(1.0d0-
writespshift(^d,2))) &
1816 write(qunit,
'(a)')
'<?xml version="1.0"?>'
1817 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="ImageData"'
1818 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
1819 write(qunit,
'(a,3(1pe14.6),a,6(i10),a,3(1pe14.6),a)')
' <ImageData Origin="',&
1820 origin,
'" WholeExtent="',wholeextent,
'" Spacing="',spacing,
'">'
1821 write(qunit,
'(a)')
'<FieldData>'
1822 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
1823 'NumberOfTuples="1" format="ascii">'
1825 write(qunit,
'(a)')
'</DataArray>'
1826 write(qunit,
'(a)')
'</FieldData>'
1830 if(.not. morton_aim(morton_no)) cycle
1833 {^d& ig^d = tree%node%ig^d; }
1834 call calc_x(igrid,xc,xcc)
1835 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1836 ixc^l,ixcc^l,.true.)
1838 nx^d,normconv,wnamei,wc_tmp,wcc_tmp)
1842 allocate(intstatus(mpi_status_size,1))
1845 if(.not. morton_aim(morton_no)) cycle
1847 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
1848 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
1849 ixrvccmin^d=ind_recv(2*^nd+^d);ixrvccmax^d=ind_recv(3*^nd+^d);
1850 ig^d=ind_recv(4*^nd+^d);
1853 call write_vti(qunit,ixg^
ll,ixrvc^l,ixrvcc^l,ig^d,&
1854 nx^d,normconv,wnamei,wc_tmp,wcc_tmp)
1859 write(qunit,
'(a)')
'</ImageData>'
1860 write(qunit,
'(a)')
'</VTKFile>'
1862 if(
npe>1)
deallocate(intstatus)
1865 deallocate(morton_aim,morton_aim_p)
1881 integer,
intent(in) :: qunit
1883 double precision,
dimension(0:nw+nwauxio) :: normconv
1884 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
1885 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
1886 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1887 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1888 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP
1889 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
1890 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
1891 character(len=1024) :: outfilehead
1892 integer :: nx^D,nxC^D,nc,np, igrid,ixC^L,ixCC^L,level,Morton_no
1893 character(len=80) :: pfilename
1895 logical :: fileopen,conv_grid
1904 inquire(qunit,opened=fileopen)
1905 if(.not.fileopen)
then
1911 open(qunit,file=pfilename,status=
'unknown',form=
'formatted')
1914 write(qunit,
'(a)')
'<?xml version="1.0"?>'
1915 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
1916 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
1917 write(qunit,
'(a)')
' <UnstructuredGrid>'
1918 write(qunit,
'(a)')
'<FieldData>'
1919 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
1920 'NumberOfTuples="1" format="ascii">'
1922 write(qunit,
'(a)')
'</DataArray>'
1923 write(qunit,
'(a)')
'</FieldData>'
1928 nx^d=ixmhi^d-ixmlo^d+1;
1943 conv_grid=({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
1945 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.})
1946 if (.not.conv_grid) cycle
1948 call calc_x(igrid,xc,xcc)
1949 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1950 ixc^l,ixcc^l,.true.)
1952 call write_vtk(qunit,ixg^
ll,ixc^l,ixcc^l,igrid,nc,np,nx^d,nxc^d,&
1953 normconv,wnamei,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp)
1957 write(qunit,
'(a)')
' </UnstructuredGrid>'
1958 write(qunit,
'(a)')
'</VTKFile>'
1980 integer,
intent(in) :: qunit
1982 double precision :: x_VTK(1:3)
1984 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP,xC_TMP_recv
1985 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP,xCC_TMP_recv
1986 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1987 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1989 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP,wC_TMP_recv
1990 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP,wCC_TMP_recv
1991 double precision,
dimension(0:nw+nwauxio) :: normconv
1992 integer:: igrid,iigrid,level,ixC^L,ixCC^L
1993 integer:: NumGridsOnLevel(1:nlevelshi)
1994 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,nc,np,ix^D
1996 character(len=80):: filename
1999 integer,
allocatable :: intstatus(:,:)
2001 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
2002 character(len=1024) :: outfilehead
2004 logical :: fileopen,conv_grid,cond_grid_recv
2005 integer :: itag,ipe,Morton_no,siz_ind
2006 integer :: ind_send(4*^ND),ind_recv(4*^ND)
2007 integer :: levmin_recv,levmax_recv,level_recv,igrid_recv,ixrvC^L,ixrvCC^L
2010 inquire(qunit,opened=fileopen)
2011 if(.not.fileopen)
then
2015 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu"
2017 open(qunit,file=filename,status=
'unknown',form=
'formatted')
2020 write(qunit,
'(a)')
'<?xml version="1.0"?>'
2021 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
2022 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
2023 write(qunit,
'(a)')
'<UnstructuredGrid>'
2024 write(qunit,
'(a)')
'<FieldData>'
2025 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
2026 'NumberOfTuples="1" format="ascii">'
2028 write(qunit,
'(a)')
'</DataArray>'
2029 write(qunit,
'(a)')
'</FieldData>'
2034 nx^d=ixmhi^d-ixmlo^d+1;
2059 call mpi_send(igrid,1,mpi_integer, 0,itag,
icomm,
ierrmpi)
2067 conv_grid=({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
2069 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.})
2071 call mpi_send(conv_grid,1,mpi_logical,0,itag,
icomm,
ierrmpi)
2073 if (.not.conv_grid) cycle
2075 call calc_x(igrid,xc,xcc)
2076 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2077 ixc^l,ixcc^l,.true.)
2081 ind_send=(/ ixc^l,ixcc^l /)
2083 call mpi_send(ind_send,siz_ind,mpi_integer, 0,itag,
icomm,
ierrmpi)
2084 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,
icomm,
ierrmpi)
2092 call write_vtk(qunit,ixg^
ll,ixc^l,ixcc^l,igrid,nc,np,nx^d,nxc^d,&
2093 normconv,wnamei,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp)
2100 allocate(intstatus(mpi_status_size,1))
2104 call mpi_recv(levmin_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
2107 call mpi_recv(levmax_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
2109 do level=levmin_recv,levmax_recv
2113 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
2115 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
2116 if (level_recv/=level) cycle
2118 call mpi_recv(cond_grid_recv,1,mpi_logical, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
2119 if(.not.cond_grid_recv)cycle
2123 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
2124 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
2125 ixrvccmin^d=ind_recv(2*^nd+^d);ixrvccmax^d=ind_recv(3*^nd+^d);
2126 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2135 call write_vtk(qunit,ixg^
ll,ixrvc^l,ixrvcc^l,igrid_recv,&
2136 nc,np,nx^d,nxc^d,normconv,wnamei,&
2137 xc_tmp_recv,xcc_tmp_recv,wc_tmp_recv,wcc_tmp_recv)
2142 write(qunit,
'(a)')
'</UnstructuredGrid>'
2143 write(qunit,
'(a)')
'</VTKFile>'
2149 if(
mype==0)
deallocate(intstatus)
2154 subroutine write_vtk(qunit,ixI^L,ixC^L,ixCC^L,igrid,nc,np,nx^D,nxC^D,&
2155 normconv,wnamei,xC,xCC,wC,wCC)
2159 integer,
intent(in) :: qunit
2160 integer,
intent(in) :: ixI^L,ixC^L,ixCC^L
2161 integer,
intent(in) :: igrid,nc,np,nx^D,nxC^D
2162 double precision,
intent(in) :: normconv(0:nw+nwauxio)
2163 character(len=name_len),
intent(in):: wnamei(1:nw+nwauxio)
2165 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
2166 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
2168 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC
2169 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC
2171 double precision :: x_VTK(1:3)
2172 integer :: iw,ix^D,icel,VTK_type
2176 case(
'vtumpi',
'pvtumpi')
2178 write(qunit,
'(a,i7,a,i7,a)') &
2179 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
2180 write(qunit,
'(a)')
'<PointData>'
2186 write(qunit,
'(a,a,a)')&
2187 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">'
2188 write(qunit,
'(200(1pe14.6))') {(|}wc(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
2189 write(qunit,
'(a)')
'</DataArray>'
2191 write(qunit,
'(a)')
'</PointData>'
2193 write(qunit,
'(a)')
'<Points>'
2194 write(qunit,
'(a)')
'<DataArray type="Float32" NumberOfComponents="3" format="ascii">'
2196 {
do ix^db=ixcmin^db,ixcmax^db \}
2198 x_vtk(1:
ndim)=xc(ix^d,1:
ndim)*normconv(0);
2199 write(qunit,
'(3(1pe14.6))') x_vtk
2201 write(qunit,
'(a)')
'</DataArray>'
2202 write(qunit,
'(a)')
'</Points>'
2204 case(
'vtuCCmpi',
'pvtuCCmpi')
2206 write(qunit,
'(a,i7,a,i7,a)') &
2207 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
2208 write(qunit,
'(a)')
'<CellData>'
2213 write(qunit,
'(a,a,a)')&
2214 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">'
2215 write(qunit,
'(200(1pe14.6))') {(|}wcc(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
2216 write(qunit,
'(a)')
'</DataArray>'
2218 write(qunit,
'(a)')
'</CellData>'
2220 write(qunit,
'(a)')
'<Points>'
2221 write(qunit,
'(a)')
'<DataArray type="Float32" NumberOfComponents="3" format="ascii">'
2223 {
do ix^db=ixcmin^db,ixcmax^db \}
2225 x_vtk(1:
ndim)=xc(ix^d,1:
ndim)*normconv(0);
2226 write(qunit,
'(3(1pe14.6))') x_vtk
2228 write(qunit,
'(a)')
'</DataArray>'
2229 write(qunit,
'(a)')
'</Points>'
2232 write(qunit,
'(a)')
'<Cells>'
2235 write(qunit,
'(a)')
'<DataArray type="Int32" Name="connectivity" format="ascii">'
2237 write(qunit,
'(a)')
'</DataArray>'
2240 write(qunit,
'(a)')
'<DataArray type="Int32" Name="offsets" format="ascii">'
2242 write(qunit,
'(i7)') icel*(2**^nd)
2244 write(qunit,
'(a)')
'</DataArray>'
2247 write(qunit,
'(a)')
'<DataArray type="Int32" Name="types" format="ascii">'
2249 {^ifoned vtk_type=3 \}
2250 {^iftwod vtk_type=8 \}
2251 {^ifthreed vtk_type=11 \}
2253 write(qunit,
'(i2)') vtk_type
2255 write(qunit,
'(a)')
'</DataArray>'
2257 write(qunit,
'(a)')
'</Cells>'
2259 write(qunit,
'(a)')
'</Piece>'
2264 normconv,wnamei,wC,wCC)
2267 integer,
intent(in) :: qunit
2268 integer,
intent(in) :: ixI^L,ixC^L,ixCC^L
2269 integer,
intent(in) :: ig^D,nx^D
2270 double precision,
intent(in) :: normconv(0:nw+nwauxio)
2271 character(len=name_len),
intent(in):: wnamei(1:nw+nwauxio)
2273 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC
2274 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC
2277 integer :: extent(1:6)
2281 {^d& extent(^d*2-1) = (ig^d-1) * nx^d; }
2282 {^d& extent(^d*2) = (ig^d) * nx^d; }
2286 case(
'vtimpi',
'pvtimpi')
2288 write(qunit,
'(a,6(i10),a)') &
2289 '<Piece Extent="',extent,
'">'
2290 write(qunit,
'(a)')
'<PointData>'
2296 write(qunit,
'(a,a,a)')&
2297 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">'
2298 write(qunit,
'(200(1pe20.12))') {(|}wc(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
2299 write(qunit,
'(a)')
'</DataArray>'
2301 write(qunit,
'(a)')
'</PointData>'
2303 case(
'vtiCCmpi',
'pvtiCCmpi')
2305 write(qunit,
'(a,6(i10),a)') &
2306 '<Piece Extent="',extent,
'">'
2307 write(qunit,
'(a)')
'<CellData>'
2312 write(qunit,
'(a,a,a)')&
2313 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">'
2314 write(qunit,
'(200(1pe20.12))') {(|}wcc(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
2315 write(qunit,
'(a)')
'</DataArray>'
2317 write(qunit,
'(a)')
'</CellData>'
2320 write(qunit,
'(a)')
'</Piece>'
2329 integer,
intent(in) :: qunit
2331 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio),outtype
2332 character(len=1024) :: outfilehead
2333 character(len=80) :: filename,pfilename
2334 integer :: filenr,iw,ipe,iscalars
2338 case(
'pvtumpi',
'pvtuBmpi')
2339 outtype=
"PPointData"
2340 case(
'pvtuCCmpi',
'pvtuBCCmpi')
2343 inquire(qunit,opened=fileopen)
2344 if(.not.fileopen)
then
2348 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".pvtu"
2350 open(qunit,file=filename,status=
'unknown',form=
'formatted')
2363 write(qunit,
'(a)')
'<?xml version="1.0"?>'
2364 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="PUnstructuredGrid"'
2365 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
2366 write(qunit,
'(a)')
' <PUnstructuredGrid GhostLevel="0">'
2368 write(qunit,
'(a,a,a,a,a)')&
2369 ' <',trim(outtype),
' Scalars="',trim(wnamei(iscalars))//
'">'
2372 write(qunit,
'(a,a,a)')&
2373 ' <PDataArray type="Float32" Name="',trim(wnamei(iw)),
'"/>'
2375 do iw=nw+1,nw+nwauxio
2376 write(qunit,
'(a,a,a)')&
2377 ' <PDataArray type="Float32" Name="',trim(wnamei(iw)),
'"/>'
2379 write(qunit,
'(a,a,a)')
' </',trim(outtype),
'>'
2381 write(qunit,
'(a)')
' <PPoints>'
2382 write(qunit,
'(a)')
' <PDataArray type="Float32" NumberOfComponents="3"/>'
2383 write(qunit,
'(a)')
' </PPoints>'
2390 write(qunit,
'(a,a,a)')
' <Piece Source="',trim(pfilename),
'"/>'
2392 write(qunit,
'(a)')
' </PUnstructuredGrid>'
2393 write(qunit,
'(a)')
'</VTKFile>'
2415 integer,
intent(in) :: qunit
2417 integer:: igrid,iigrid,level,igonlevel,iw,idim,ix^D
2418 integer:: NumGridsOnLevel(1:nlevelshi)
2419 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,ixC^L,ixCC^L
2420 integer :: nodesonlevelmype,elemsonlevelmype
2422 integer :: nodes, elems
2424 integer,
allocatable :: intstatus(:,:)
2426 double precision :: x_TEC(ndim), w_TEC(nw+nwauxio)
2428 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP,xC_TMP_recv
2429 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP,xCC_TMP_recv
2430 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
2431 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
2433 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP,wC_TMP_recv
2434 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP,wCC_TMP_recv
2435 double precision,
dimension(0:nw+nwauxio) :: normconv
2436 logical :: fileopen,first
2437 integer :: itag,Morton_no,ipe,levmin_recv,levmax_recv,igrid_recv,level_recv
2438 integer :: ixrvC^L,ixrvCC^L
2439 integer :: ind_send(2*^ND),ind_recv(2*^ND),siz_ind,igonlevel_recv
2440 integer :: NumGridsOnLevel_mype(1:nlevelshi,0:npe-1)
2441 character(len=80) :: filename
2443 character(len=1024) :: tecplothead
2445 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
2446 character(len=1024) :: outfilehead
2448 if(nw/=count(
w_write(1:nw)))
then
2449 if(
mype==0) print *,
'tecplot_mpi does not use w_write=F'
2450 call mpistop(
'w_write, tecplot')
2454 if(
mype==0) print *,
'tecplot_mpi with nocartesian'
2457 master_cpu_open :
if (
mype == 0)
then
2458 inquire(qunit,opened=fileopen)
2459 if (.not.fileopen)
then
2463 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".plt"
2464 open(qunit,file=filename,status=
'unknown')
2469 write(tecplothead,
'(a)')
"VARIABLES = "//trim(outfilehead)
2470 write(qunit,
'(a)') tecplothead(1:len_trim(tecplothead))
2471 end if master_cpu_open
2475 numgridsonlevel(1:nlevelshi)=0
2477 numgridsonlevel(level)=0
2481 numgridsonlevel(level)=numgridsonlevel(level)+1
2483 numgridsonlevel_mype(level,0:npe-1)=0
2484 numgridsonlevel_mype(level,
mype) = numgridsonlevel(level)
2485 call mpi_allreduce(mpi_in_place,numgridsonlevel_mype(level,0:npe-1),npe,mpi_integer,&
2487 call mpi_allreduce(mpi_in_place,numgridsonlevel(level),1,mpi_integer,mpi_sum, &
2500 nx^d=ixmhi^d-ixmlo^d+1;
2503 if(
mype==0.and.npe>1)
allocate(intstatus(mpi_status_size,1))
2510 nodes=nodes + numgridsonlevel(level)*{nxc^d*}
2511 elems=elems + numgridsonlevel(level)*{nx^d*}
2514 if (
mype==0)
write(qunit,
"(a,i7,a,1pe12.5,a)") &
2515 'ZONE T="all levels", I=',elems, &
2521 call calc_x(igrid,xc,xcc)
2522 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,ixc^l,ixcc^l,.true.)
2524 {
do ix^db=ixccmin^db,ixccmax^db\}
2525 x_tec(1:ndim)=xcc_tmp(ix^d,1:ndim)*normconv(0)
2526 w_tec(1:nw+nwauxio)=wcc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2527 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2529 else if (mype/=0)
then
2531 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2532 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision,0,itag,icomm,ierrmpi)
2533 call mpi_send(wcc_tmp,1,type_block_wcc_io, 0,itag,icomm,ierrmpi)
2534 call mpi_send(xcc_tmp,1,type_block_xcc_io, 0,itag,icomm,ierrmpi)
2539 do morton_no=morton_start(ipe),morton_stop(ipe)
2541 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2542 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,&
2543 itag,icomm,intstatus(:,1),ierrmpi)
2544 call mpi_recv(wcc_tmp_recv,1,type_block_wcc_io, ipe,itag,&
2545 icomm,intstatus(:,1),ierrmpi)
2546 call mpi_recv(xcc_tmp_recv,1,type_block_xcc_io, ipe,itag,&
2547 icomm,intstatus(:,1),ierrmpi)
2548 {
do ix^db=ixccmin^db,ixccmax^db\}
2549 x_tec(1:ndim)=xcc_tmp_recv(ix^d,1:ndim)*normconv(0)
2550 w_tec(1:nw+nwauxio)=wcc_tmp_recv(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2551 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2561 itag=1000*morton_stop(mype)
2562 call mpi_send(levmin,1,mpi_integer, 0,itag,icomm,ierrmpi)
2563 itag=2000*morton_stop(mype)
2564 call mpi_send(levmax,1,mpi_integer, 0,itag,icomm,ierrmpi)
2567 do level=levmin,levmax
2568 nodesonlevelmype=numgridsonlevel_mype(level,mype)*{nxc^d*}
2569 elemsonlevelmype=numgridsonlevel_mype(level,mype)*{nx^d*}
2570 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
2571 elemsonlevel=numgridsonlevel(level)*{nx^d*}
2578 select case(convert_type)
2583 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2584 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
2585 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2586 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=POINT, ZONETYPE=', &
2587 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2588 do morton_no=morton_start(mype),morton_stop(mype)
2589 igrid = sfc_to_igrid(morton_no)
2592 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2594 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2596 if (node(plevel_,igrid)/=level) cycle
2597 call calc_x(igrid,xc,xcc)
2598 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2599 ixc^l,ixcc^l,.true.)
2602 ind_send=(/ ixc^l /)
2604 call mpi_send(ind_send,siz_ind, mpi_integer, 0,itag,icomm,ierrmpi)
2605 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,icomm,ierrmpi)
2607 call mpi_send(wc_tmp,1,type_block_wc_io, 0,itag,icomm,ierrmpi)
2608 call mpi_send(xc_tmp,1,type_block_xc_io, 0,itag,icomm,ierrmpi)
2610 {
do ix^db=ixcmin^db,ixcmax^db\}
2611 x_tec(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0)
2612 w_tec(1:nw+nwauxio)=wc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2613 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2618 case(
'tecplotCCmpi')
2624 if(ndim+nw+nwauxio>99)
call mpistop(
"adjust format specification in writeout")
2625 if(nw+nwauxio==1)
then
2628 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2629 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
2630 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2631 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2632 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
2633 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2635 if(ndim+nw+nwauxio<10)
then
2637 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2638 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i1,a,a)") &
2639 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2640 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2641 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2642 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2644 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2645 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
2646 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2647 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2648 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2649 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2655 do morton_no=morton_start(mype),morton_stop(mype)
2656 igrid = sfc_to_igrid(morton_no)
2659 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2661 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2663 if (node(plevel_,igrid)/=level) cycle
2665 call calc_x(igrid,xc,xcc)
2666 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2669 ind_send=(/ ixc^l /)
2672 call mpi_send(ind_send,siz_ind, mpi_integer, 0,itag,icomm,ierrmpi)
2673 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,icomm,ierrmpi)
2674 call mpi_send(xc_tmp,1,type_block_xc_io, 0,itag,icomm,ierrmpi)
2676 write(qunit,fmt=
"(100(e14.6))") xc_tmp(ixc^s,idim)*normconv(0)
2682 do morton_no=morton_start(mype),morton_stop(mype)
2683 igrid = sfc_to_igrid(morton_no)
2685 itag=morton_no*(ndim+iw)
2686 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2687 itag=igrid*(ndim+iw)
2688 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2690 if (node(plevel_,igrid)/=level) cycle
2692 call calc_x(igrid,xc,xcc)
2693 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2694 ixc^l,ixcc^l,.true.)
2697 ind_send=(/ ixcc^l /)
2699 itag=igrid*(ndim+iw)
2700 call mpi_send(ind_send,siz_ind, mpi_integer, 0,itag,icomm,ierrmpi)
2701 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,icomm,ierrmpi)
2702 call mpi_send(wcc_tmp,1,type_block_wcc_io, 0,itag,icomm,ierrmpi)
2704 write(qunit,fmt=
"(100(e14.6))") wcc_tmp(ixcc^s,iw)*normconv(iw)
2709 call mpistop(
'no such tecplot type')
2714 do morton_no=morton_start(mype),morton_stop(mype)
2715 igrid = sfc_to_igrid(morton_no)
2718 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2720 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2722 if (node(plevel_,igrid)/=level) cycle
2724 igonlevel=igonlevel+1
2727 call mpi_send(igonlevel,1,mpi_integer, 0,itag,icomm,ierrmpi)
2738 itag=1000*morton_stop(ipe)
2739 call mpi_recv(levmin_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2740 itag=2000*morton_stop(ipe)
2741 call mpi_recv(levmax_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2742 do level=levmin_recv,levmax_recv
2743 nodesonlevelmype=numgridsonlevel_mype(level,ipe)*{nxc^d*}
2744 elemsonlevelmype=numgridsonlevel_mype(level,ipe)*{nx^d*}
2745 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
2746 elemsonlevel=numgridsonlevel(level)*{nx^d*}
2747 select case(convert_type)
2752 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2753 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
2754 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2755 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=POINT, ZONETYPE=', &
2756 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2757 do morton_no=morton_start(ipe),morton_stop(ipe)
2759 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2761 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2762 if (level_recv/=level) cycle
2766 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,&
2767 icomm,intstatus(:,1),ierrmpi)
2768 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
2769 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2770 ,icomm,intstatus(:,1),ierrmpi)
2772 call mpi_recv(wc_tmp_recv,1,type_block_wc_io, ipe,itag,&
2773 icomm,intstatus(:,1),ierrmpi)
2774 call mpi_recv(xc_tmp_recv,1,type_block_xc_io, ipe,itag,&
2775 icomm,intstatus(:,1),ierrmpi)
2777 {
do ix^db=ixrvcmin^db,ixrvcmax^db\}
2778 x_tec(1:ndim)=xc_tmp_recv(ix^d,1:ndim)*normconv(0)
2779 w_tec(1:nw+nwauxio)=wc_tmp_recv(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2780 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2783 case(
'tecplotCCmpi')
2789 if(ndim+nw+nwauxio>99)
call mpistop(
"adjust format specification in writeout")
2790 if(nw+nwauxio==1)
then
2793 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2794 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
2795 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2796 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2797 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
2798 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2800 if(ndim+nw+nwauxio<10)
then
2802 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2803 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i1,a,a)") &
2804 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2805 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2806 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2807 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2809 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2810 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
2811 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2812 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2813 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2814 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2819 do morton_no=morton_start(ipe),morton_stop(ipe)
2821 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2822 itag=igrid_recv*idim
2823 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2824 if (level_recv/=level) cycle
2827 itag=igrid_recv*idim
2828 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2829 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
2830 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2831 ,icomm,intstatus(:,1),ierrmpi)
2832 call mpi_recv(xc_tmp_recv,1,type_block_xc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2833 write(qunit,fmt=
"(100(e14.6))") xc_tmp_recv(ixrvc^s,idim)*normconv(0)
2838 do morton_no=morton_start(ipe),morton_stop(ipe)
2839 itag=morton_no*(ndim+iw)
2840 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2841 itag=igrid_recv*(ndim+iw)
2842 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2843 if (level_recv/=level) cycle
2846 itag=igrid_recv*(ndim+iw)
2847 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2848 ixrvccmin^d=ind_recv(^d);ixrvccmax^d=ind_recv(^nd+^d);
2849 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2850 ,icomm,intstatus(:,1),ierrmpi)
2851 call mpi_recv(wcc_tmp_recv,1,type_block_wcc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2852 write(qunit,fmt=
"(100(e14.6))") wcc_tmp_recv(ixrvcc^s,iw)*normconv(iw)
2856 call mpistop(
'no such tecplot type')
2859 do morton_no=morton_start(ipe),morton_stop(ipe)
2861 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2863 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2864 if (level_recv/=level) cycle
2867 call mpi_recv(igonlevel_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2877 call mpi_barrier(icomm,ierrmpi)
2878 if(mype==0)
deallocate(intstatus)
2895 integer,
intent(in) :: qunit
2897 double precision :: x_VTK(1:3)
2899 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
2900 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
2901 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
2902 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
2904 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP
2905 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
2907 integer :: igrid,iigrid,level,igonlevel,icel,ixC^L,ixCC^L,Morton_no
2908 integer :: NumGridsOnLevel(1:nlevelshi)
2909 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,nc,np,VTK_type,ix^D
2910 double precision :: normconv(0:nw+nwauxio)
2911 character(len=80) :: pfilename
2912 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
2913 character(len=1024) :: outfilehead
2916 integer:: recsep,k,iw,filenr
2917 integer:: length,lengthcc,offset_points,offset_cells, &
2918 length_coords,length_conn,length_offsets
2920 character(len=6):: bufform
2930 inquire(qunit,opened=fileopen)
2931 if(.not.fileopen)
then
2937 open(qunit,file=pfilename,status=
'unknown',form=
'formatted')
2940 write(qunit,
'(a)')
'<?xml version="1.0"?>'
2941 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
2942 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
2943 write(qunit,
'(a)')
' <UnstructuredGrid>'
2944 write(qunit,
'(a)')
'<FieldData>'
2945 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
2946 'NumberOfTuples="1" format="ascii">'
2948 write(qunit,
'(a)')
'</DataArray>'
2949 write(qunit,
'(a)')
'</FieldData>'
2958 nx^d=ixmhi^d-ixmlo^d+1;
2964 lengthcc=nc*size_real
2966 length_coords=3*length
2967 length_conn=2**^nd*size_int*nc
2968 length_offsets=nc*size_int
2979 if (({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
2981 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then
2985 write(qunit,
'(a,i7,a,i7,a)') &
2986 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
2987 write(qunit,
'(a)')
'<PointData>'
2991 write(qunit,
'(a,a,a,i16,a)')&
2992 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
2993 '" format="appended" offset="',offset,
'">'
2994 write(qunit,
'(a)')
'</DataArray>'
2995 offset=offset+length+size_int
2997 do iw=nw+1,nw+nwauxio
2999 write(qunit,
'(a,a,a,i16,a)')&
3000 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
3001 '" format="appended" offset="',offset,
'">'
3002 write(qunit,
'(a)')
'</DataArray>'
3003 offset=offset+length+size_int
3005 write(qunit,
'(a)')
'</PointData>'
3007 write(qunit,
'(a)')
'<Points>'
3008 write(qunit,
'(a,i16,a)') &
3009 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
3011 offset=offset+length_coords+size_int
3012 write(qunit,
'(a)')
'</Points>'
3015 write(qunit,
'(a,i7,a,i7,a)') &
3016 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
3017 write(qunit,
'(a)')
'<CellData>'
3021 write(qunit,
'(a,a,a,i16,a)')&
3022 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
3023 '" format="appended" offset="',offset,
'">'
3024 write(qunit,
'(a)')
'</DataArray>'
3025 offset=offset+lengthcc+size_int
3027 do iw=nw+1,nw+nwauxio
3029 write(qunit,
'(a,a,a,i16,a)')&
3030 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
3031 '" format="appended" offset="',offset,
'">'
3032 write(qunit,
'(a)')
'</DataArray>'
3033 offset=offset+lengthcc+size_int
3035 write(qunit,
'(a)')
'</CellData>'
3037 write(qunit,
'(a)')
'<Points>'
3038 write(qunit,
'(a,i16,a)') &
3039 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
3041 offset=offset+length_coords+size_int
3042 write(qunit,
'(a)')
'</Points>'
3046 write(qunit,
'(a)')
'<Cells>'
3049 write(qunit,
'(a,i16,a)')&
3050 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>'
3051 offset=offset+length_conn+size_int
3054 write(qunit,
'(a,i16,a)') &
3055 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>'
3056 offset=offset+length_offsets+size_int
3059 write(qunit,
'(a,i16,a)') &
3060 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>'
3061 offset=offset+size_int+nc*size_int
3063 write(qunit,
'(a)')
'</Cells>'
3065 write(qunit,
'(a)')
'</Piece>'
3071 write(qunit,
'(a)')
'</UnstructuredGrid>'
3072 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
3080 open(qunit,file=pfilename,access=
'stream',form=
'unformatted',position=
'append')
3082 write(qunit) trim(buf)
3091 if (({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
3093 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then
3094 call calc_x(igrid,xc,xcc)
3095 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
3096 ixc^l,ixcc^l,.true.)
3102 write(qunit) {(|}real(wc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixcmin^d,ixcmax^d)}
3104 write(qunit) lengthcc
3105 write(qunit) {(|}real(wcc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixccmin^d,ixccmax^d)}
3108 do iw=nw+1,nw+nwauxio
3112 write(qunit) {(|}real(wc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixcmin^d,ixcmax^d)}
3114 write(qunit) lengthcc
3115 write(qunit) {(|}real(wcc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixccmin^d,ixccmax^d)}
3119 write(qunit) length_coords
3120 {
do ix^db=ixcmin^db,ixcmax^db \}
3122 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
3124 write(qunit) real(x_vtk(k))
3128 write(qunit) length_conn
3130 {^ifoned
write(qunit)ix1-1,ix1 \}
3132 write(qunit)(ix2-1)*nxc1+ix1-1, &
3133 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
3137 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3138 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3139 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3140 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
3141 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
3142 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3143 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3144 ix3*nxc2*nxc1+ ix2*nxc1+ix1
3148 write(qunit) length_offsets
3150 write(qunit) icel*(2**^nd)
3154 {^ifoned vtk_type=3 \}
3155 {^iftwod vtk_type=8 \}
3156 {^ifthreed vtk_type=11 \}
3157 write(qunit) size_int*nc
3159 write(qunit) vtk_type
3167 open(qunit,file=pfilename,status=
'unknown',form=
'formatted',position=
'append')
3169 write(qunit,
'(a)')
'</AppendedData>'
3170 write(qunit,
'(a)')
'</VTKFile>'
3186 integer,
intent(in) :: qunit
3188 double precision :: x_VTK(1:3)
3190 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC_TMP
3191 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC_TMP
3193 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC_TMP
3194 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC_TMP
3195 double precision,
dimension(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:nw&
+nwauxio) :: w
3196 integer:: igrid,iigrid,level,igonlevel,icel,ixCmin1,ixCmin2,&
3197 ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,ixCCmax1,&
3199 integer:: NumGridsOnLevel(1:nlevelshi)
3200 integer :: nx1,nx2,nx3,nxC1,nxC2,nxC3,nodesonlevel,elemsonlevel,nc,np,&
3201 VTK_type,ix1,ix2,ix3
3202 double precision :: normconv(0:nw+nwauxio)
3203 character(len=80):: filename
3204 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:3+nw+nwauxio)
3205 character(len=1024) :: outfilehead
3207 integer :: size_length,recsep,k,iw
3208 integer :: length,lengthcc,offset_points,offset_cells, length_coords,&
3209 length_conn,length_offsets
3210 integer :: i3grid,n3grid
3211 double precision ::d3grid,zlengsc,zgridsc
3213 character(len=6):: bufform
3215 double precision :: zlength
3220 if(
mype==0) print *,
'unstructuredvtkB23 not parallel, use vtumpi'
3221 call mpistop(
'npe>1, unstructuredvtkB23')
3228 inquire(qunit,opened=fileopen)
3229 if(.not.fileopen)
then
3233 open(qunit,file=filename,status=
'replace')
3238 write(qunit,
'(a)')
'<?xml version="1.0"?>'
3239 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
3240 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
3241 write(qunit,
'(a)')
'<UnstructuredGrid>'
3242 write(qunit,
'(a)')
'<FieldData>'
3243 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
3244 'NumberOfTuples="1" format="ascii">'
3246 write(qunit,
'(a)')
'</DataArray>'
3247 write(qunit,
'(a)')
'</FieldData>'
3250 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3251 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3256 lengthcc=nc*size_real
3258 length_coords=3*length
3259 length_conn=2**3*size_int*nc
3260 length_offsets=nc*size_int
3265 zlengsc=2.d0*zgridsc
3266 zlength=zlengsc*(xprobmax1-xprobmin1)
3269 do iigrid=1,igridstail; igrid=igrids(iigrid);
3274 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3277 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3280 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3281 n3grid=nint(zlength/d3grid)
3286 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3287 '" NumberOfCells="',nc,
'">'
3288 write(qunit,
'(a)')
'<PointData>'
3291 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3292 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3293 write(qunit,
'(a)')
'</DataArray>'
3294 offset=offset+length+size_int
3297 do iw=nw+1,nw+nwauxio
3298 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3299 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3300 write(qunit,
'(a)')
'</DataArray>'
3301 offset=offset+length+size_int
3304 write(qunit,
'(a)')
'</PointData>'
3306 write(qunit,
'(a)')
'<Points>'
3307 write(qunit,
'(a,i16,a)') &
3308 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3311 offset=offset+length_coords+size_int
3312 write(qunit,
'(a)')
'</Points>'
3315 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3316 '" NumberOfCells="',nc,
'">'
3317 write(qunit,
'(a)')
'<CellData>'
3320 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3321 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3322 write(qunit,
'(a)')
'</DataArray>'
3323 offset=offset+lengthcc+size_int
3326 do iw=nw+1,nw+nwauxio
3327 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3328 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3329 write(qunit,
'(a)')
'</DataArray>'
3330 offset=offset+lengthcc+size_int
3333 write(qunit,
'(a)')
'</CellData>'
3335 write(qunit,
'(a)')
'<Points>'
3336 write(qunit,
'(a,i16,a)') &
3337 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3340 offset=offset+length_coords+size_int
3341 write(qunit,
'(a)')
'</Points>'
3344 write(qunit,
'(a)')
'<Cells>'
3347 write(qunit,
'(a,i16,a)')&
3348 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',&
3350 offset=offset+length_conn+size_int
3353 write(qunit,
'(a,i16,a)') &
3354 '<DataArray type="Int32" Name="offsets" format="appended" offset="',&
3356 offset=offset+length_offsets+size_int
3359 write(qunit,
'(a,i16,a)') &
3360 '<DataArray type="Int32" Name="types" format="appended" offset="',&
3362 offset=offset+size_length+nc*size_int
3364 write(qunit,
'(a)')
'</Cells>'
3366 write(qunit,
'(a)')
'</Piece>'
3373 write(qunit,
'(a)')
'</UnstructuredGrid>'
3374 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
3377 open(qunit,file=filename,form=
'unformatted',access=
'stream',status=
'old',position=
'append')
3379 write(qunit) trim(buffer)
3383 do iigrid=1,igridstail; igrid=igrids(iigrid);
3388 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3391 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3394 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3395 n3grid=nint(zlength/d3grid)
3400 ixglo1,ixglo2,ixghi1,ixghi2,ps(igrid)%w,ps(igrid)%x)
3404 do ix3=ixglo1,ixghi1
3405 w(ixglo1:ixghi1,ixglo2:ixghi2,ix3,1:nw)=ps(igrid)%w(ixglo1:ixghi1,&
3409 call calc_grid23(qunit,igrid,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
3410 ixcmin1,ixcmin2,ixcmin3,ixcmax1,ixcmax2,ixcmax3,ixccmin1,ixccmin2,&
3411 ixccmin3,ixccmax1,ixccmax2,ixccmax3,.true.,i3grid,d3grid,w,zlength,zgridsc)
3417 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3418 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3420 write(qunit) lengthcc
3421 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3422 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3427 do iw=nw+1,nw+nwauxio
3431 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3432 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3434 write(qunit) lengthcc
3435 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3436 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3441 write(qunit) length_coords
3442 do ix3=ixcmin3,ixcmax3
3443 do ix2=ixcmin2,ixcmax2
3444 do ix1=ixcmin1,ixcmax1
3446 x_vtk(1:3)=xc_tmp(ix1,ix2,ix3,1:3)*normconv(0);
3448 write(qunit) real(x_vtk(k))
3454 write(qunit) length_conn
3459 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3460 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3461 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3462 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
3463 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
3464 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3465 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3466 ix3*nxc2*nxc1+ ix2*nxc1+ix1
3471 write(qunit) length_offsets
3473 write(qunit) icel*(2**3)
3477 write(qunit) size_int*nc
3479 write(qunit) vtk_type
3488 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
3490 write(qunit,
'(a)')
'</AppendedData>'
3491 write(qunit,
'(a)')
'</VTKFile>'
3506 integer,
intent(in) :: qunit
3508 double precision :: x_VTK(1:3)
3510 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC_TMP
3511 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC_TMP
3513 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC_TMP
3514 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC_TMP
3515 double precision,
dimension(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:nw&
+nwauxio) :: w
3516 integer:: igrid,iigrid,level,igonlevel,icel,ixCmin1,ixCmin2,&
3517 ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,ixCCmax1,&
3519 integer:: NumGridsOnLevel(1:nlevelshi)
3520 integer :: nx1,nx2,nx3,nxC1,nxC2,nxC3,nodesonlevel,elemsonlevel,nc,np,&
3521 VTK_type,ix1,ix2,ix3
3522 double precision :: normconv(0:nw+nwauxio)
3523 character(len=80):: filename
3524 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:3+nw+nwauxio)
3525 character(len=1024) :: outfilehead
3527 integer :: size_length,recsep,k,iw
3528 integer :: length,lengthcc,offset_points,offset_cells, length_coords,&
3529 length_conn,length_offsets
3530 integer :: i3grid,n3grid
3531 double precision ::d3grid,zlengsc,zgridsc
3533 character(len=6):: bufform
3535 double precision :: zlength
3540 if(
mype==0) print *,
'unstructuredvtkBsym23 not parallel, use vtumpi'
3541 call mpistop(
'npe>1, unstructuredvtkBsym23')
3548 inquire(qunit,opened=fileopen)
3549 if(.not.fileopen)
then
3553 open(qunit,file=filename,status=
'unknown')
3558 write(qunit,
'(a)')
'<?xml version="1.0"?>'
3559 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
3560 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
3561 write(qunit,
'(a)')
'<UnstructuredGrid>'
3562 write(qunit,
'(a)')
'<FieldData>'
3563 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
3564 'NumberOfTuples="1" format="ascii">'
3566 write(qunit,
'(a)')
'</DataArray>'
3567 write(qunit,
'(a)')
'</FieldData>'
3570 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3571 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3576 lengthcc=nc*size_real
3578 length_coords=3*length
3579 length_conn=2**3*size_int*nc
3580 length_offsets=nc*size_int
3586 zlength=zlengsc*(xprobmax1-xprobmin1)
3589 do iigrid=1,igridstail; igrid=igrids(iigrid);
3594 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3597 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3600 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3601 n3grid=nint(zlength/d3grid)
3607 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3608 '" NumberOfCells="',nc,
'">'
3609 write(qunit,
'(a)')
'<PointData>'
3612 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3613 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3614 write(qunit,
'(a)')
'</DataArray>'
3615 offset=offset+length+size_length
3618 do iw=nw+1,nw+nwauxio
3619 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3620 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3621 write(qunit,
'(a)')
'</DataArray>'
3622 offset=offset+length+size_length
3625 write(qunit,
'(a)')
'</PointData>'
3627 write(qunit,
'(a)')
'<Points>'
3628 write(qunit,
'(a,i16,a)') &
3629 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3632 offset=offset+length_coords+size_length
3633 write(qunit,
'(a)')
'</Points>'
3636 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3637 '" NumberOfCells="',nc,
'">'
3638 write(qunit,
'(a)')
'<CellData>'
3641 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3642 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3643 write(qunit,
'(a)')
'</DataArray>'
3644 offset=offset+lengthcc+size_length
3647 do iw=nw+1,nw+nwauxio
3648 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3649 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3650 write(qunit,
'(a)')
'</DataArray>'
3651 offset=offset+lengthcc+size_length
3654 write(qunit,
'(a)')
'</CellData>'
3656 write(qunit,
'(a)')
'<Points>'
3657 write(qunit,
'(a,i16,a)') &
3658 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3661 offset=offset+length_coords+size_length
3662 write(qunit,
'(a)')
'</Points>'
3666 write(qunit,
'(a)')
'<Cells>'
3669 write(qunit,
'(a,i16,a)')&
3670 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',&
3672 offset=offset+length_conn+size_length
3675 write(qunit,
'(a,i16,a)') &
3676 '<DataArray type="Int32" Name="offsets" format="appended" offset="',&
3678 offset=offset+length_offsets+size_length
3681 write(qunit,
'(a,i16,a)') &
3682 '<DataArray type="Int32" Name="types" format="appended" offset="',&
3684 offset=offset+size_length+nc*size_int
3686 write(qunit,
'(a)')
'</Cells>'
3688 write(qunit,
'(a)')
'</Piece>'
3694 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3695 '" NumberOfCells="',nc,
'">'
3696 write(qunit,
'(a)')
'<PointData>'
3699 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3700 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3701 write(qunit,
'(a)')
'</DataArray>'
3702 offset=offset+length+size_length
3705 do iw=nw+1,nw+nwauxio
3706 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3707 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3708 write(qunit,
'(a)')
'</DataArray>'
3709 offset=offset+length+size_length
3712 write(qunit,
'(a)')
'</PointData>'
3714 write(qunit,
'(a)')
'<Points>'
3715 write(qunit,
'(a,i16,a)') &
3716 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3719 offset=offset+length_coords+size_length
3720 write(qunit,
'(a)')
'</Points>'
3723 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3724 '" NumberOfCells="',nc,
'">'
3725 write(qunit,
'(a)')
'<CellData>'
3728 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3729 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3730 write(qunit,
'(a)')
'</DataArray>'
3731 offset=offset+lengthcc+size_length
3734 do iw=nw+1,nw+nwauxio
3735 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3736 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3737 write(qunit,
'(a)')
'</DataArray>'
3738 offset=offset+lengthcc+size_length
3741 write(qunit,
'(a)')
'</CellData>'
3743 write(qunit,
'(a)')
'<Points>'
3744 write(qunit,
'(a,i16,a)') &
3745 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3748 offset=offset+length_coords+size_length
3749 write(qunit,
'(a)')
'</Points>'
3753 write(qunit,
'(a)')
'<Cells>'
3756 write(qunit,
'(a,i16,a)')&
3757 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',&
3759 offset=offset+length_conn+size_length
3762 write(qunit,
'(a,i16,a)') &
3763 '<DataArray type="Int32" Name="offsets" format="appended" offset="',&
3765 offset=offset+length_offsets+size_length
3768 write(qunit,
'(a,i16,a)') &
3769 '<DataArray type="Int32" Name="types" format="appended" offset="',&
3771 offset=offset+size_length+nc*size_int
3773 write(qunit,
'(a)')
'</Cells>'
3775 write(qunit,
'(a)')
'</Piece>'
3783 write(qunit,
'(a)')
'</UnstructuredGrid>'
3784 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
3787 open(qunit,file=filename,form=
'unformatted',access=
'stream',status=
'old',position=
'append')
3789 write(qunit) trim(buffer)
3792 do iigrid=1,igridstail; igrid=igrids(iigrid);
3797 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3800 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3803 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3804 n3grid=nint(zlength/d3grid)
3809 ixglo1,ixglo2,ixghi1,ixghi2,ps(igrid)%w,ps(igrid)%x)
3813 do ix3=ixglo1,ixghi1
3814 w(ixglo1:ixghi1,ixglo2:ixghi2,ix3,1:nw)=ps(igrid)%w(ixglo1:ixghi1,&
3818 call calc_grid23(qunit,igrid,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
3819 ixcmin1,ixcmin2,ixcmin3,ixcmax1,ixcmax2,ixcmax3,ixccmin1,ixccmin2,&
3820 ixccmin3,ixccmax1,ixccmax2,ixccmax3,.true.,i3grid,d3grid,w,zlength,zgridsc)
3827 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3828 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3830 write(qunit) lengthcc
3831 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3832 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3837 do iw=nw+1,nw+nwauxio
3841 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3842 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3844 write(qunit) lengthcc
3845 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3846 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3851 write(qunit) length_coords
3852 do ix3=ixcmin3,ixcmax3
3853 do ix2=ixcmin2,ixcmax2
3854 do ix1=ixcmin1,ixcmax1
3856 x_vtk(1:3)=xc_tmp(ix1,ix2,ix3,1:3)*normconv(0);
3858 write(qunit) real(x_vtk(k))
3864 write(qunit) length_conn
3869 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3870 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3871 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3872 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
3873 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
3874 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3875 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3876 ix3*nxc2*nxc1+ ix2*nxc1+ix1
3880 write(qunit) length_offsets
3882 write(qunit) icel*(2**3)
3886 write(qunit) size_int*nc
3888 write(qunit) vtk_type
3894 if(iw==2 .or. iw==4 .or. iw==7)
then
3895 wc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,iw)=&
3896 -wc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,iw)
3897 wcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,iw)=&
3898 -wcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,iw)
3903 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3904 =ixcmax1,ixcmin1,-1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3906 write(qunit) lengthcc
3907 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3908 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3913 do iw=nw+1,nw+nwauxio
3917 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3918 =ixcmax1,ixcmin1,-1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3920 write(qunit) lengthcc
3921 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3922 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3927 write(qunit) length_coords
3928 do ix3=ixcmin3,ixcmax3
3929 do ix2=ixcmin2,ixcmax2
3930 do ix1=ixcmax1,ixcmin1,-1
3932 x_vtk(1:3)=xc_tmp(ix1,ix2,ix3,1:3)*normconv(0);
3935 write(qunit) real(x_vtk(k))
3941 write(qunit) length_conn
3946 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3947 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3948 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3949 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
3950 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
3951 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3952 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3953 ix3*nxc2*nxc1+ ix2*nxc1+ix1
3957 write(qunit) length_offsets
3959 write(qunit) icel*(2**3)
3963 write(qunit) size_int*nc
3965 write(qunit) vtk_type
3975 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
3977 write(qunit,
'(a)')
'</AppendedData>'
3978 write(qunit,
'(a)')
'</VTKFile>'
3982 subroutine calc_grid23(qunit,igrid,xC_TMP,xCC_TMP,wC_TMP,wCC_TMP,normconv,&
3983 ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,&
3984 ixCCmax1,ixCCmax2,ixCCmax3,first,i3grid,d3grid,w,zlength,zgridsc)
3995 integer,
intent(in) :: qunit, igrid,i3grid
3996 logical,
intent(in) :: first
3998 integer :: nx1,nx2,nx3, nxC1,nxC2,nxC3, ix1,ix2,ix3, ix, iw, level, idir
3999 integer :: ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,&
4000 ixCCmin2,ixCCmin3,ixCCmax1,ixCCmax2,ixCCmax3,nxCC1,nxCC2,nxCC3
4001 double precision :: dx1,dx2,dx3,d3grid,zlength,zgridsc
4003 integer :: idims,jxCmin1,jxCmin2,jxCmin3,jxCmax1,jxCmax2,jxCmax3
4004 double precision :: ldw(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1),&
4005 dwC(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1)
4007 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC
4008 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC
4010 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC
4011 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC
4013 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC_TMP
4014 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC_TMP
4016 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC_TMP
4017 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC_TMP
4018 double precision,
dimension(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:nw&
+nwauxio) :: w
4020 double precision,
dimension(0:nw+nwauxio) :: normconv
4021 logical,
save :: subfirst=.true.
4025 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
4027 dx1=
dx(1,level);dx2=
dx(2,level);dx3=zgridsc*
dx(1,level);
4044 nxcc1=nx1;nxcc2=nx2;nxcc3=nx3;
4045 ixccmin1=ixmlo1;ixccmin2=ixmlo2;ixccmin3=ixmlo1; ixccmax1=ixmhi1
4046 ixccmax2=ixmhi2;ixccmax3=ixmhi1;
4047 do ix=ixccmin1,ixccmax1
4048 xcc(ix,ixccmin2:ixccmax2,ixccmin3:ixccmax3,1)=
rnode(rpxmin1_,igrid)&
4049 +(dble(ix-ixccmin1)+half)*dx1
4051 do ix=ixccmin2,ixccmax2
4052 xcc(ixccmin1:ixccmax1,ix,ixccmin3:ixccmax3,2)=
rnode(rpxmin2_,igrid)&
4053 +(dble(ix-ixccmin2)+half)*dx2
4055 do ix=ixccmin3,ixccmax3
4056 xcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ix,3)=-zlength/two+&
4057 dble(i3grid-1)*d3grid+(dble(ix-ixccmin3)+half)*dx3
4061 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
4062 ixcmin1=ixmlo1-1;ixcmin2=ixmlo2-1;ixcmin3=ixmlo1-1; ixcmax1=ixmhi1
4063 ixcmax2=ixmhi2;ixcmax3=ixmhi1;
4064 do ix=ixcmin1,ixcmax1
4065 xc(ix,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1)=
rnode(rpxmin1_,igrid)&
4066 +dble(ix-ixcmin1)*dx1
4068 do ix=ixcmin2,ixcmax2
4069 xc(ixcmin1:ixcmax1,ix,ixcmin3:ixcmax3,2)=
rnode(rpxmin2_,igrid)&
4070 +dble(ix-ixcmin2)*dx2
4072 do ix=ixcmin3,ixcmax3
4073 xc(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ix,3)=-zlength/two+&
4074 dble(i3grid-1)*d3grid+dble(ix-ixcmin3)*dx3
4085 jxcmin1=ixghi1+1-
nghostcells;jxcmin2=ixglo2;jxcmin3=ixglo1;
4086 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixghi1;
4087 do ix1=jxcmin1,jxcmax1
4088 w(ix1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw) = w(jxcmin1&
4089 -1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw)
4091 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixglo1;
4092 jxcmax1=ixglo1-1+
nghostcells;jxcmax2=ixghi2;jxcmax3=ixghi1;
4093 do ix1=jxcmin1,jxcmax1
4094 w(ix1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw) = w(jxcmax1&
4095 +1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw)
4098 jxcmin1=ixglo1;jxcmin2=ixghi2+1-
nghostcells;jxcmin3=ixglo1;
4099 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixghi1;
4100 do ix2=jxcmin2,jxcmax2
4101 w(jxcmin1:jxcmax1,ix2,jxcmin3:jxcmax3,nw-nwextra+1:nw) &
4102 = w(jxcmin1:jxcmax1,jxcmin2-1,jxcmin3:jxcmax3,nw-nwextra+1:nw)
4104 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixglo1;
4105 jxcmax1=ixghi1;jxcmax2=ixglo2-1+
nghostcells;jxcmax3=ixghi1;
4106 do ix2=jxcmin2,jxcmax2
4107 w(jxcmin1:jxcmax1,ix2,jxcmin3:jxcmax3,nw-nwextra+1:nw) &
4108 = w(jxcmin1:jxcmax1,jxcmax2+1,jxcmin3:jxcmax3,nw-nwextra+1:nw)
4111 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixghi1+1-
nghostcells;
4112 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixghi1;
4113 do ix3=jxcmin3,jxcmax3
4114 w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,ix3,nw-nwextra+1:nw) &
4115 = w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,jxcmin3-1,nw-nwextra+1:nw)
4117 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixglo1;
4118 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixglo1-1+
nghostcells;
4119 do ix3=jxcmin3,jxcmax3
4120 w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,ix3,nw-nwextra+1:nw) &
4121 = w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,jxcmax3+1,nw-nwextra+1:nw)
4136 +1,ixglo2+1,ixglo1+1,ixghi1-1,ixghi2-1,ixghi1-1,w,xcc,normconv)
4143 wcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,:)=w(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,:)
4145 do ix3=ixccmin3,ixccmax3
4146 do ix2=ixccmin2,ixccmax2
4147 do ix1=ixccmin1,ixccmax1
4148 wcc(ix1,ix2,ix3,iw_mag(:))=wcc(ix1,ix2,ix3,iw_mag(:))+ps(igrid)%B0(ix1,ix2,&
4156 do ix3=ixccmin3,ixccmax3
4157 do ix2=ixccmin2,ixccmax2
4158 do ix1=ixccmin1,ixccmax1
4159 wcc(ix1,ix2,ix3,iw_e)=w(ix1,ix2,ix3,iw_e) +half*sum(ps(igrid)%B0(ix1,&
4160 ix2,:,0)**2 ) + sum(w(ix1,ix2,ix3,&
4161 iw_mag(:))*ps(igrid)%B0(ix1,ix2,:,0))
4171 if (
b0field.and.iw>iw_mag(1)-1.and.iw<=iw_mag(
ndir))
then
4173 do ix3=ixcmin3,ixcmax3
4174 do ix2=ixcmin2,ixcmax2
4175 do ix1=ixcmin1,ixcmax1
4176 wc(ix1,ix2,ix3,iw)=sum(w(ix1:ix1+1,ix2:ix2+1,ix3,iw) &
4177 +ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
4178 ,idir,0))/dble(2**3)+&
4179 sum(w(ix1:ix1+1,ix2:ix2+1,ix3+1,iw) &
4180 +ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
4181 ,idir,0))/dble(2**3)
4186 do ix3=ixcmin3,ixcmax3
4187 do ix2=ixcmin2,ixcmax2
4188 do ix1=ixcmin1,ixcmax1
4189 wc(ix1,ix2,ix3,iw)=sum(w(ix1:ix1+1,ix2:ix2+1,ix3:ix3&
4197 do ix3=ixcmin3,ixcmax3
4198 do ix2=ixcmin2,ixcmax2
4199 do ix1=ixcmin1,ixcmax1
4200 wc(ix1,ix2,ix3,iw_e)=sum( w(ix1:ix1+1,ix2:ix2+1,ix3,iw_e) &
4201 +half*sum(ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
4202 ,:,0)**2,dim=
ndim+1) + sum( w(ix1:ix1+1,ix2:ix2+1,ix3&
4203 ,iw_mag(:))*ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
4204 ,:,0),dim=
ndim+1) ) /dble(2**3)+&
4205 sum( w(ix1:ix1+1,ix2:ix2+1,ix3+1,iw_e) &
4206 +half*sum(ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
4207 ,:,0)**2,dim=
ndim+1) + sum( w(ix1:ix1+1,ix2:ix2+1,ix3&
4208 +1,iw_mag(:))*ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
4209 ,:,0),dim=
ndim+1) ) /dble(2**3)
4216 xc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:3) &
4217 = xc(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:3)
4218 wc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:nw&
4219 +
nwauxio) = wc(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:nw&
4221 xcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,&
4222 1:3) = xcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,&
4223 ixccmin3:ixccmax3,1:3)
4224 wcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,1:nw&
4225 +
nwauxio) = wcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,&
4236 integer,
intent(in) :: qunit, igrid
4238 integer :: nx1,nx2,nx3, nxC1,nxC2,nxC3, ix1,ix2,ix3
4240 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
4241 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
4249 write(qunit,
'(8(i7,1x))')&
4250 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
4251 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
4252 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
4253 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
4254 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
4255 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
4256 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
4257 ix3*nxc2*nxc1+ ix2*nxc1+ix1
4265 ixImax3,ixOmin1,ixOmin2,ixOmin3,ixOmax1,ixOmax2,ixOmax3,w,x,normconv)
4276 integer,
intent(in) :: ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,&
4277 ixImax3,ixOmin1,ixOmin2,ixOmin3,ixOmax1,ixOmax2,ixOmax3
4278 double precision,
intent(in) :: x(ixImin1:ixImax1,ixImin2:ixImax2,&
4279 ixImin3:ixImax3,1:3)
4280 double precision :: w(ixImin1:ixImax1,ixImin2:ixImax2,&
4281 ixImin3:ixImax3,nw+nwauxio)
4282 double precision :: normconv(0:nw+nwauxio)
4284 double precision :: qvec(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:ndir),&
4285 curlvec(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:ndir)
4312 subroutine resettree_convert
Force the tree to desired level(s) from level_io(_min/_max) used for conversion to vtk output.
subroutine mpistop(message)
Exit MPI-AMRVAC with an error message.
integer function nodenumbertec3d(i1, i2, i3, nx1, nx2, nx3, ig, igrid)
subroutine unstructuredvtkbsym23(qunit)
integer function nodenumbertec2d(i1, i2, nx1, nx2, ig, igrid)
subroutine unstructuredvtk_mpi(qunit)
subroutine tecplot(qunit)
subroutine write_vti(qunit, ixIL, ixCL, ixCCL, igD, nxD, normconv, wnamei, wC, wCC)
subroutine imagedatavtk_mpi(qunit)
subroutine unstructuredvtk(qunit)
subroutine save_connvtk(qunit, igrid)
integer function nodenumbertec1d(i1, nx1, ig, igrid)
subroutine onegrid(qunit)
subroutine unstructuredvtkb23(qunit)
subroutine specialvar_output23(ixImin1, ixImin2, ixImin3, ixImax1, ixImax2, ixImax3, ixOmin1, ixOmin2, ixOmin3, ixOmax1, ixOmax2, ixOmax3, w, x, normconv)
subroutine oneblock(qunit)
subroutine unstructuredvtkb64(qunit)
subroutine unstructuredvtkb(qunit)
subroutine save_connvtk23(qunit, igrid)
subroutine punstructuredvtkb_mpi(qunit)
subroutine generate_plotfile
subroutine punstructuredvtk_mpi(qunit)
subroutine tecplot_mpi(qunit)
subroutine write_vtk(qunit, ixIL, ixCL, ixCCL, igrid, nc, np, nxD, nxCD, normconv, wnamei, xC, xCC, wC, wCC)
subroutine write_pvtu(qunit)
subroutine save_conntec(qunit, igrid, igonlevel)
subroutine calc_grid23(qunit, igrid, xC_TMP, xCC_TMP, wC_TMP, wCC_TMP, normconv, ixCmin1, ixCmin2, ixCmin3, ixCmax1, ixCmax2, ixCmax3, ixCCmin1, ixCCmin2, ixCCmin3, ixCCmax1, ixCCmax2, ixCCmax3, first, i3grid, d3grid, w, zlength, zgridsc)
Handles computations for coordinates and variables in output.
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.
subroutine getheadernames(wnamei, xandwnamei, outfilehead)
get all variables names
subroutine calc_x(igrid, xC, xCC)
computes cell corner (xC) and cell center (xCC) coordinates
Module with basic grid data structures.
integer, dimension(:), allocatable, save sfc_to_igrid
Go from a Morton number to an igrid index (for a single processor)
integer, dimension(:), allocatable, save morton_start
First Morton number per processor.
integer, dimension(:), allocatable, save morton_stop
Last Morton number per processor.
type(tree_node_ptr), dimension(:,:), allocatable, save igrid_to_node
Array to go from an [igrid, ipe] index to a node pointer.
update ghost cells of all blocks including physical boundaries
subroutine getbc(time, qdt, psb, nwstart, nwbc, req_diag)
do update ghost cells of all blocks including physical boundaries
This module contains definitions of global parameters and variables and some generic functions/subrou...
double precision, dimension(:), allocatable w_convert_factor
Conversion factors the primitive variables.
type(state), pointer block
Block pointer for using one block and its previous state.
integer type_block_wcc_io
logical nocartesian
IO switches for conversion.
double precision global_time
The global simulation time.
integer type_block_xc_io
MPI type for IO: cell corner (xc) or cell center (xcc) coordinates.
integer snapshotini
Resume from the snapshot with this index.
logical saveprim
If true, convert from conservative to primitive variables in output.
character(len=std_len) convert_type
Which format to use when converting.
integer, parameter ndim
Number of spatial dimensions for grid variables.
integer, parameter rpxmin
integer, parameter nlevelshi
The maximum number of levels in the grid refinement.
double precision time_convert_factor
Conversion factor for time unit.
integer icomm
The MPI communicator.
integer, dimension(:), allocatable ng
number of grid blocks in domain per dimension, in array over levels
integer type_block_xcc_io
integer mype
The rank of the current MPI task.
integer type_block_io
MPI type for IO: block excluding ghost cells.
integer, parameter plevel_
double precision length_convert_factor
integer ndir
Number of spatial dimensions (components) for vector variables.
integer ixm
the mesh range (within a block with ghost cells)
integer ierrmpi
A global MPI error return code.
logical autoconvert
If true, already convert to output format during the run.
logical slab
Cartesian geometry or not.
integer type_block_wc_io
MPI type for IO: cell corner (wc) or cell center (wcc) variables.
integer snapshotnext
IO: snapshot and collapsed views output numbers/labels.
integer npe
The number of MPI tasks.
integer nwauxio
Number of auxiliary variables that are only included in output.
double precision, dimension(ndim, 2) writespshift
integer, parameter unitterm
Unit for standard output.
logical, dimension(:), allocatable w_write
logical b0field
split magnetic field as background B0 field
double precision, dimension(:,:), allocatable rnode
Corner coordinates.
logical, dimension(:), allocatable writelevel
double precision, dimension(:,:), allocatable dx
integer nghostcells
Number of ghost cells surrounding a grid.
integer, parameter rpxmax
logical slab_uniform
uniform Cartesian geometry or not (stretched Cartesian)
character(len=std_len) base_filename
Base file name for simulation output, which will be followed by a number.
integer, parameter unitconvert
integer, dimension(:,:), allocatable node
double precision, dimension(ndim) dxlevel
This module defines the procedures of a physics module. It contains function pointers for the various...
procedure(sub_convert), pointer phys_to_primitive
logical phys_req_diagonal
Whether the physics routines require diagonal ghost cells, for example for computing a curl.
procedure(sub_check_params), pointer phys_te_images
Module with all the methods that users can customize in AMRVAC.
procedure(aux_output), pointer usr_aux_output
procedure(special_convert), pointer usr_special_convert