364 integer,
intent(in) :: qunit
366 double precision :: x_TEC(ndim), w_TEC(nw+nwauxio)
367 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
368 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
369 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
370 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
371 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP
372 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
373 double precision,
dimension(0:nw+nwauxio) :: normconv
374 integer:: igrid,iigrid,level,igonlevel,iw,idim,ix^D
375 integer:: NumGridsOnLevel(1:nlevelshi)
376 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,ixC^L,ixCC^L
377 integer :: nodes, elems
379 logical :: fileopen,first
380 character(len=80) :: filename
382 character(len=1024) :: tecplothead
383 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
384 character(len=1024) :: outfilehead
387 if(
mype==0) print *,
'tecplot not parallel, use tecplotmpi'
388 call mpistop(
'npe>1, tecplot')
391 if(nw/=count(
w_write(1:nw)))
then
392 if(
mype==0) print *,
'tecplot does not use w_write=F'
393 call mpistop(
'w_write, tecplot')
397 if(
mype==0) print *,
'tecplot with nocartesian'
400 inquire(qunit,opened=fileopen)
401 if(.not.fileopen)
then
405 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".plt"
406 open(qunit,file=filename,status=
'unknown')
411 write(tecplothead,
'(a)')
"VARIABLES = "//trim(outfilehead)
412 write(qunit,
'(a)') tecplothead(1:len_trim(tecplothead))
414 numgridsonlevel(1:nlevelshi)=0
416 numgridsonlevel(level)=0
417 do iigrid=1,igridstail; igrid=igrids(iigrid);
419 numgridsonlevel(level)=numgridsonlevel(level)+1
423 nx^d=ixmhi^d-ixmlo^d+1;
431 nodes=nodes + numgridsonlevel(level)*{nxc^d*}
432 elems=elems + numgridsonlevel(level)*{nx^d*}
435 write(qunit,
"(a,i7,a,1pe12.5,a)") &
436 'ZONE T="all levels", I=',elems, &
440 do iigrid=1,igridstail; igrid=igrids(iigrid);
443 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,ixc^l,ixcc^l,.true.)
444 {
do ix^db=ixccmin^db,ixccmax^db\}
445 x_tec(1:ndim)=xcc_tmp(ix^d,1:ndim)*normconv(0)
446 w_tec(1:nw+nwauxio)=wcc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
447 write(qunit,fmt=
"(100(e24.16))") x_tec, w_tec
453 do level=levmin,levmax
454 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
455 elemsonlevel=numgridsonlevel(level)*{nx^d*}
462 select case(convert_type)
467 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
468 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
469 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=POINT, ZONETYPE=', &
470 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
471 do iigrid=1,igridstail; igrid=igrids(iigrid);
472 if (node(plevel_,igrid)/=level) cycle
474 call calc_x(igrid,xc,xcc)
475 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
477 {
do ix^db=ixcmin^db,ixcmax^db\}
478 x_tec(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0)
479 w_tec(1:nw+nwauxio)=wc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
480 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
489 if(ndim+nw+nwauxio>99)
call mpistop(
"adjust format specification in writeout")
490 if(nw+nwauxio==1)
then
493 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
494 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
495 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
496 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
497 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
499 if(ndim+nw+nwauxio<10)
then
501 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i1,a,a)") &
502 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
503 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
504 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
505 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
507 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
508 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
509 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
510 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
511 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
516 do iigrid=1,igridstail; igrid=igrids(iigrid);
517 if (node(plevel_,igrid)/=level) cycle
519 call calc_x(igrid,xc,xcc)
520 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
522 write(qunit,fmt=
"(100(e14.6))") xc_tmp(ixc^s,idim)*normconv(0)
526 do iigrid=1,igridstail; igrid=igrids(iigrid);
527 if (node(plevel_,igrid)/=level) cycle
529 call calc_x(igrid,xc,xcc)
530 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
532 write(qunit,fmt=
"(100(e14.6))") wcc_tmp(ixcc^s,iw)*normconv(iw)
536 call mpistop(
'no such tecplot type')
539 do iigrid=1,igridstail; igrid=igrids(iigrid);
540 if (node(plevel_,igrid)/=level) cycle
542 igonlevel=igonlevel+1
800 integer,
intent(in) :: qunit
802 double precision :: x_VTK(1:3)
803 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
804 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
805 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
806 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
807 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio):: wC_TMP
808 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
809 double precision :: normconv(0:nw+nwauxio)
810 integer,
allocatable :: intstatus(:,:)
812 integer :: itag,ipe,igrid,level,icel,ixC^L,ixCC^L,Morton_no,Morton_length
813 integer :: nx^D,nxC^D,nc,np,VTK_type,ix^D,filenr
815 integer:: length,lengthcc,length_coords,length_conn,length_offsets
817 character(len=80):: filename
818 character(len=19):: offset_char
819 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
820 character(len=1024) :: outfilehead
821 logical :: fileopen,cell_corner=.false.
822 logical,
allocatable :: Morton_aim(:),Morton_aim_p(:)
837 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
839 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then
840 morton_aim_p(morton_no)=.true.
844 call mpi_allreduce(morton_aim_p,morton_aim,morton_length,mpi_logical,mpi_lor,&
847 case(
'vtuB',
'vtuBmpi')
849 case(
'vtuBCC',
'vtuBCCmpi')
854 if(.not. morton_aim(morton_no)) cycle
857 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
871 inquire(qunit,opened=fileopen)
872 if(.not.fileopen)
then
876 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu"
878 open(qunit,file=filename,status=
'replace')
882 write(qunit,
'(a)')
'<?xml version="1.0"?>'
883 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
884 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
885 write(qunit,
'(a)')
'<UnstructuredGrid>'
886 write(qunit,
'(a)')
'<FieldData>'
887 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
888 'NumberOfTuples="1" format="ascii">'
890 write(qunit,
'(a)')
'</DataArray>'
891 write(qunit,
'(a)')
'</FieldData>'
894 nx^d=ixmhi^d-ixmlo^d+1;
899 lengthcc=nc*size_real
900 length_coords=3*length
901 length_conn=2**^nd*size_int*nc
902 length_offsets=nc*size_int
906 if(.not. morton_aim(morton_no)) cycle
909 write(qunit,
'(a,i7,a,i7,a)') &
910 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
911 write(qunit,
'(a)')
'<PointData>'
916 write(offset_char,
'(i19)') offset
917 write(qunit,
'(a,a,a,a,a)')&
918 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
919 '" format="appended" offset="',trim(adjustl(offset_char)),
'">'
920 write(qunit,
'(a)')
'</DataArray>'
921 offset=offset+length+size_int
923 write(qunit,
'(a)')
'</PointData>'
924 write(qunit,
'(a)')
'<Points>'
925 write(offset_char,
'(i19)') offset
926 write(qunit,
'(a,a,a)') &
927 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
929 offset=offset+length_coords+size_int
930 write(qunit,
'(a)')
'</Points>'
933 write(qunit,
'(a,i7,a,i7,a)') &
934 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
935 write(qunit,
'(a)')
'<CellData>'
940 write(offset_char,
'(i19)') offset
941 write(qunit,
'(a,a,a,a,a)')&
942 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
943 '" format="appended" offset="',trim(adjustl(offset_char)),
'">'
944 write(qunit,
'(a)')
'</DataArray>'
945 offset=offset+lengthcc+size_int
947 write(qunit,
'(a)')
'</CellData>'
948 write(qunit,
'(a)')
'<Points>'
949 write(offset_char,
'(i19)') offset
950 write(qunit,
'(a,a,a)') &
951 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
953 offset=offset+length_coords+size_int
954 write(qunit,
'(a)')
'</Points>'
956 write(qunit,
'(a)')
'<Cells>'
958 write(offset_char,
'(i19)') offset
959 write(qunit,
'(a,a,a)')&
960 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
961 offset=offset+length_conn+size_int
963 write(offset_char,
'(i19)') offset
964 write(qunit,
'(a,a,a)') &
965 '<DataArray type="Int32" Name="offsets" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
966 offset=offset+length_offsets+size_int
968 write(offset_char,
'(i19)') offset
969 write(qunit,
'(a,a,a)') &
970 '<DataArray type="Int32" Name="types" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
971 offset=offset+size_int+nc*size_int
972 write(qunit,
'(a)')
'</Cells>'
973 write(qunit,
'(a)')
'</Piece>'
979 if(.not. morton_aim(morton_no)) cycle
982 write(qunit,
'(a,i7,a,i7,a)') &
983 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
984 write(qunit,
'(a)')
'<PointData>'
989 write(offset_char,
'(i19)') offset
990 write(qunit,
'(a,a,a,a,a)')&
991 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
992 '" format="appended" offset="',trim(adjustl(offset_char)),
'">'
993 write(qunit,
'(a)')
'</DataArray>'
994 offset=offset+length+size_int
996 write(qunit,
'(a)')
'</PointData>'
997 write(qunit,
'(a)')
'<Points>'
998 write(offset_char,
'(i19)') offset
999 write(qunit,
'(a,a,a)') &
1000 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
1002 offset=offset+length_coords+size_int
1003 write(qunit,
'(a)')
'</Points>'
1006 write(qunit,
'(a,i7,a,i7,a)') &
1007 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1008 write(qunit,
'(a)')
'<CellData>'
1013 write(offset_char,
'(i19)') offset
1014 write(qunit,
'(a,a,a,a,a)')&
1015 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
1016 '" format="appended" offset="',trim(adjustl(offset_char)),
'">'
1017 write(qunit,
'(a)')
'</DataArray>'
1018 offset=offset+lengthcc+size_int
1020 write(qunit,
'(a)')
'</CellData>'
1021 write(qunit,
'(a)')
'<Points>'
1022 write(offset_char,
'(i19)') offset
1023 write(qunit,
'(a,a,a)') &
1024 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
1026 offset=offset+length_coords+size_int
1027 write(qunit,
'(a)')
'</Points>'
1029 write(qunit,
'(a)')
'<Cells>'
1031 write(offset_char,
'(i19)') offset
1032 write(qunit,
'(a,a,a)')&
1033 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
1034 offset=offset+length_conn+size_int
1036 write(offset_char,
'(i19)') offset
1037 write(qunit,
'(a,a,a)') &
1038 '<DataArray type="Int32" Name="offsets" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
1039 offset=offset+length_offsets+size_int
1041 write(offset_char,
'(i19)') offset
1042 write(qunit,
'(a,a,a)') &
1043 '<DataArray type="Int32" Name="types" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
1044 offset=offset+size_int+nc*size_int
1045 write(qunit,
'(a)')
'</Cells>'
1046 write(qunit,
'(a)')
'</Piece>'
1051 write(qunit,
'(a)')
'</UnstructuredGrid>'
1052 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
1054 open(qunit,file=filename,access=
'stream',form=
'unformatted',position=
'append')
1056 write(qunit) trim(buf)
1059 if(.not. morton_aim(morton_no)) cycle
1061 call calc_x(igrid,xc,xcc)
1062 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1063 ixc^l,ixcc^l,.true.)
1068 if(cell_corner)
then
1070 write(qunit) {(|}real(wc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixcmin^d,ixcmax^d)}
1072 write(qunit) lengthcc
1073 write(qunit) {(|}real(wcc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixccmin^d,ixccmax^d)}
1077 write(qunit) length_coords
1078 {
do ix^db=ixcmin^db,ixcmax^db \}
1080 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1082 write(qunit) real(x_vtk(k))
1086 write(qunit) length_conn
1088 {^ifoned
write(qunit)ix1-1,ix1 \}
1090 write(qunit)(ix2-1)*nxc1+ix1-1, &
1091 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1095 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1096 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1097 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1098 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1099 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1100 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1101 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1102 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1106 write(qunit) length_offsets
1108 write(qunit) icel*(2**^nd)
1111 {^ifoned vtk_type=3 \}
1112 {^iftwod vtk_type=8 \}
1113 {^ifthreed vtk_type=11 \}
1114 write(qunit) size_int*nc
1116 write(qunit) vtk_type
1119 allocate(intstatus(mpi_status_size,1))
1121 ixccmin^d=ixmlo^d; ixccmax^d=ixmhi^d;
1122 ixcmin^d=ixmlo^d-1; ixcmax^d=ixmhi^d;
1124 do morton_no=morton_start(ipe),morton_stop(ipe)
1125 if(.not. morton_aim(morton_no)) cycle
1127 call mpi_recv(xc_tmp,1,type_block_xc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1128 if(cell_corner)
then
1129 call mpi_recv(wc_tmp,1,type_block_wc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1131 call mpi_recv(wcc_tmp,1,type_block_wcc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1135 if(.not.w_write(iw)) cycle
1137 if(cell_corner)
then
1139 write(qunit) {(|}real(wc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixcmin^d,ixcmax^d)}
1141 write(qunit) lengthcc
1142 write(qunit) {(|}real(wcc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixccmin^d,ixccmax^d)}
1145 write(qunit) length_coords
1146 {
do ix^db=ixcmin^db,ixcmax^db \}
1148 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1150 write(qunit) real(x_vtk(k))
1153 write(qunit) length_conn
1155 {^ifoned
write(qunit)ix1-1,ix1 \}
1157 write(qunit)(ix2-1)*nxc1+ix1-1, &
1158 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1162 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1163 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1164 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1165 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1166 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1167 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1168 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1169 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1172 write(qunit) length_offsets
1174 write(qunit) icel*(2**^nd)
1176 {^ifoned vtk_type=3 \}
1177 {^iftwod vtk_type=8 \}
1178 {^ifthreed vtk_type=11 \}
1179 write(qunit) size_int*nc
1181 write(qunit) vtk_type
1187 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
1188 write(qunit,
'(a)')
'</AppendedData>'
1189 write(qunit,
'(a)')
'</VTKFile>'
1191 deallocate(intstatus)
1194 deallocate(morton_aim,morton_aim_p)
1196 call mpi_barrier(icomm,ierrmpi)
1209 integer,
intent(in) :: qunit
1211 double precision :: x_VTK(1:3)
1212 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
1213 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
1214 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1215 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1216 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio):: wC_TMP
1217 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
1218 double precision :: normconv(0:nw+nwauxio)
1219 integer,
allocatable :: intstatus(:,:)
1221 integer :: itag,ipe,igrid,level,icel,ixC^L,ixCC^L,Morton_no,Morton_length
1222 integer :: nx^D,nxC^D,nc,np,VTK_type,ix^D,filenr
1224 integer:: length,lengthcc,length_coords,length_conn,length_offsets
1226 character(len=80):: filename
1227 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
1228 character(len=1024) :: outfilehead
1229 logical :: fileopen,cell_corner=.false.
1230 logical,
allocatable :: Morton_aim(:),Morton_aim_p(:)
1237 morton_aim_p=.false.
1245 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
1247 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then
1248 morton_aim_p(morton_no)=.true.
1252 call mpi_allreduce(morton_aim_p,morton_aim,morton_length,mpi_logical,mpi_lor,&
1255 case(
'vtuB64',
'vtuBmpi64')
1257 case(
'vtuBCC64',
'vtuBCCmpi64')
1262 if(.not. morton_aim(morton_no)) cycle
1264 call calc_x(igrid,xc,xcc)
1265 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1266 ixc^l,ixcc^l,.true.)
1269 if(cell_corner)
then
1278 inquire(qunit,opened=fileopen)
1279 if(.not.fileopen)
then
1283 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu"
1285 open(qunit,file=filename,status=
'replace')
1289 write(qunit,
'(a)')
'<?xml version="1.0"?>'
1290 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
1291 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
1292 write(qunit,
'(a)')
'<UnstructuredGrid>'
1293 write(qunit,
'(a)')
'<FieldData>'
1294 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
1295 'NumberOfTuples="1" format="ascii">'
1297 write(qunit,
'(a)')
'</DataArray>'
1298 write(qunit,
'(a)')
'</FieldData>'
1300 nx^d=ixmhi^d-ixmlo^d+1;
1304 length=np*size_double
1305 lengthcc=nc*size_double
1306 length_coords=3*length
1307 length_conn=2**^nd*size_int*nc
1308 length_offsets=nc*size_int
1311 if(.not. morton_aim(morton_no)) cycle
1312 if(cell_corner)
then
1314 write(qunit,
'(a,i7,a,i7,a)') &
1315 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1316 write(qunit,
'(a)')
'<PointData>'
1321 write(qunit,
'(a,a,a,i16,a)')&
1322 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1323 '" format="appended" offset="',offset,
'">'
1324 write(qunit,
'(a)')
'</DataArray>'
1325 offset=offset+length+size_int
1327 write(qunit,
'(a)')
'</PointData>'
1328 write(qunit,
'(a)')
'<Points>'
1329 write(qunit,
'(a,i16,a)') &
1330 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1332 offset=offset+length_coords+size_int
1333 write(qunit,
'(a)')
'</Points>'
1336 write(qunit,
'(a,i7,a,i7,a)') &
1337 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1338 write(qunit,
'(a)')
'<CellData>'
1343 write(qunit,
'(a,a,a,i16,a)')&
1344 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1345 '" format="appended" offset="',offset,
'">'
1346 write(qunit,
'(a)')
'</DataArray>'
1347 offset=offset+lengthcc+size_int
1349 write(qunit,
'(a)')
'</CellData>'
1350 write(qunit,
'(a)')
'<Points>'
1351 write(qunit,
'(a,i16,a)') &
1352 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1354 offset=offset+length_coords+size_int
1355 write(qunit,
'(a)')
'</Points>'
1357 write(qunit,
'(a)')
'<Cells>'
1359 write(qunit,
'(a,i16,a)')&
1360 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>'
1361 offset=offset+length_conn+size_int
1363 write(qunit,
'(a,i16,a)') &
1364 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>'
1365 offset=offset+length_offsets+size_int
1367 write(qunit,
'(a,i16,a)') &
1368 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>'
1369 offset=offset+size_int+nc*size_int
1370 write(qunit,
'(a)')
'</Cells>'
1371 write(qunit,
'(a)')
'</Piece>'
1377 if(.not. morton_aim(morton_no)) cycle
1378 if(cell_corner)
then
1380 write(qunit,
'(a,i7,a,i7,a)') &
1381 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1382 write(qunit,
'(a)')
'<PointData>'
1387 write(qunit,
'(a,a,a,i16,a)')&
1388 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1389 '" format="appended" offset="',offset,
'">'
1390 write(qunit,
'(a)')
'</DataArray>'
1391 offset=offset+length+size_int
1393 write(qunit,
'(a)')
'</PointData>'
1394 write(qunit,
'(a)')
'<Points>'
1395 write(qunit,
'(a,i16,a)') &
1396 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1398 offset=offset+length_coords+size_int
1399 write(qunit,
'(a)')
'</Points>'
1402 write(qunit,
'(a,i7,a,i7,a)') &
1403 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1404 write(qunit,
'(a)')
'<CellData>'
1409 write(qunit,
'(a,a,a,i16,a)')&
1410 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1411 '" format="appended" offset="',offset,
'">'
1412 write(qunit,
'(a)')
'</DataArray>'
1413 offset=offset+lengthcc+size_int
1415 write(qunit,
'(a)')
'</CellData>'
1416 write(qunit,
'(a)')
'<Points>'
1417 write(qunit,
'(a,i16,a)') &
1418 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1420 offset=offset+length_coords+size_int
1421 write(qunit,
'(a)')
'</Points>'
1423 write(qunit,
'(a)')
'<Cells>'
1425 write(qunit,
'(a,i16,a)')&
1426 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>'
1427 offset=offset+length_conn+size_int
1429 write(qunit,
'(a,i16,a)') &
1430 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>'
1431 offset=offset+length_offsets+size_int
1433 write(qunit,
'(a,i16,a)') &
1434 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>'
1435 offset=offset+size_int+nc*size_int
1436 write(qunit,
'(a)')
'</Cells>'
1437 write(qunit,
'(a)')
'</Piece>'
1441 write(qunit,
'(a)')
'</UnstructuredGrid>'
1442 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
1444 open(qunit,file=filename,access=
'stream',form=
'unformatted',position=
'append')
1446 write(qunit) trim(buf)
1448 if(.not. morton_aim(morton_no)) cycle
1450 call calc_x(igrid,xc,xcc)
1451 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1452 ixc^l,ixcc^l,.true.)
1457 if(cell_corner)
then
1459 write(qunit) {(|}wc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
1461 write(qunit) lengthcc
1462 write(qunit) {(|}wcc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
1465 write(qunit) length_coords
1466 {
do ix^db=ixcmin^db,ixcmax^db \}
1468 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1470 write(qunit) x_vtk(k)
1473 write(qunit) length_conn
1475 {^ifoned
write(qunit)ix1-1,ix1 \}
1477 write(qunit)(ix2-1)*nxc1+ix1-1, &
1478 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1482 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1483 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1484 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1485 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1486 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1487 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1488 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1489 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1492 write(qunit) length_offsets
1494 write(qunit) icel*(2**^nd)
1496 {^ifoned vtk_type=3 \}
1497 {^iftwod vtk_type=8 \}
1498 {^ifthreed vtk_type=11 \}
1499 write(qunit) size_int*nc
1501 write(qunit) vtk_type
1504 allocate(intstatus(mpi_status_size,1))
1506 ixccmin^d=ixmlo^d; ixccmax^d=ixmhi^d;
1507 ixcmin^d=ixmlo^d-1; ixcmax^d=ixmhi^d;
1509 do morton_no=morton_start(ipe),morton_stop(ipe)
1510 if(.not. morton_aim(morton_no)) cycle
1512 call mpi_recv(xc_tmp,1,type_block_xc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1513 if(cell_corner)
then
1514 call mpi_recv(wc_tmp,1,type_block_wc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1516 call mpi_recv(wcc_tmp,1,type_block_wcc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1520 if(.not.w_write(iw)) cycle
1522 if(cell_corner)
then
1524 write(qunit) {(|}wc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
1526 write(qunit) lengthcc
1527 write(qunit) {(|}wcc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
1530 write(qunit) length_coords
1531 {
do ix^db=ixcmin^db,ixcmax^db \}
1533 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1535 write(qunit) x_vtk(k)
1538 write(qunit) length_conn
1540 {^ifoned
write(qunit)ix1-1,ix1 \}
1542 write(qunit)(ix2-1)*nxc1+ix1-1, &
1543 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1547 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1548 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1549 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1550 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1551 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1552 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1553 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1554 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1557 write(qunit) length_offsets
1559 write(qunit) icel*(2**^nd)
1561 {^ifoned vtk_type=3 \}
1562 {^iftwod vtk_type=8 \}
1563 {^ifthreed vtk_type=11 \}
1564 write(qunit) size_int*nc
1566 write(qunit) vtk_type
1572 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
1573 write(qunit,
'(a)')
'</AppendedData>'
1574 write(qunit,
'(a)')
'</VTKFile>'
1576 deallocate(intstatus)
1578 deallocate(morton_aim,morton_aim_p)
1580 call mpi_barrier(icomm,ierrmpi)
1872 integer,
intent(in) :: qunit
1874 double precision :: x_VTK(1:3)
1875 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP,xC_TMP_recv
1876 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP,xCC_TMP_recv
1877 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1878 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1879 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP,wC_TMP_recv
1880 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP,wCC_TMP_recv
1881 double precision,
dimension(0:nw+nwauxio) :: normconv
1882 integer:: igrid,iigrid,level,ixC^L,ixCC^L
1883 integer:: NumGridsOnLevel(1:nlevelshi)
1884 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,nc,np,ix^D
1886 integer :: itag,ipe,Morton_no,siz_ind
1887 integer :: ind_send(4*^ND),ind_recv(4*^ND)
1888 integer :: levmin_recv,levmax_recv,level_recv,igrid_recv,ixrvC^L,ixrvCC^L
1889 integer,
allocatable :: intstatus(:,:)
1890 logical :: fileopen,conv_grid,cond_grid_recv
1891 character(len=80):: filename
1892 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
1893 character(len=1024) :: outfilehead
1896 inquire(qunit,opened=fileopen)
1897 if(.not.fileopen)
then
1901 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu"
1903 open(qunit,file=filename,status=
'unknown',form=
'formatted')
1906 write(qunit,
'(a)')
'<?xml version="1.0"?>'
1907 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
1908 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
1909 write(qunit,
'(a)')
'<UnstructuredGrid>'
1910 write(qunit,
'(a)')
'<FieldData>'
1911 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
1912 'NumberOfTuples="1" format="ascii">'
1914 write(qunit,
'(a)')
'</DataArray>'
1915 write(qunit,
'(a)')
'</FieldData>'
1920 nx^d=ixmhi^d-ixmlo^d+1;
1942 call mpi_send(igrid,1,mpi_integer, 0,itag,
icomm,
ierrmpi)
1949 conv_grid=({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
1951 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.})
1953 call mpi_send(conv_grid,1,mpi_logical,0,itag,
icomm,
ierrmpi)
1955 if (.not.conv_grid) cycle
1956 call calc_x(igrid,xc,xcc)
1957 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1958 ixc^l,ixcc^l,.true.)
1961 ind_send=(/ ixc^l,ixcc^l /)
1963 call mpi_send(ind_send,siz_ind,mpi_integer, 0,itag,
icomm,
ierrmpi)
1964 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,
icomm,
ierrmpi)
1971 call write_vtk(qunit,ixg^
ll,ixc^l,ixcc^l,igrid,nc,np,nx^d,nxc^d,&
1972 normconv,wnamei,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp)
1978 allocate(intstatus(mpi_status_size,1))
1982 call mpi_recv(levmin_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
1985 call mpi_recv(levmax_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
1987 do level=levmin_recv,levmax_recv
1991 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
1993 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
1994 if (level_recv/=level) cycle
1995 call mpi_recv(cond_grid_recv,1,mpi_logical, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
1996 if(.not.cond_grid_recv)cycle
1999 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
2000 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
2001 ixrvccmin^d=ind_recv(2*^nd+^d);ixrvccmax^d=ind_recv(3*^nd+^d);
2002 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2009 call write_vtk(qunit,ixg^
ll,ixrvc^l,ixrvcc^l,igrid_recv,&
2010 nc,np,nx^d,nxc^d,normconv,wnamei,&
2011 xc_tmp_recv,xcc_tmp_recv,wc_tmp_recv,wcc_tmp_recv)
2016 write(qunit,
'(a)')
'</UnstructuredGrid>'
2017 write(qunit,
'(a)')
'</VTKFile>'
2022 if(
mype==0)
deallocate(intstatus)
2262 integer,
intent(in) :: qunit
2264 double precision :: x_TEC(ndim), w_TEC(nw+nwauxio)
2265 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP,xC_TMP_recv
2266 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP,xCC_TMP_recv
2267 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
2268 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
2269 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP,wC_TMP_recv
2270 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP,wCC_TMP_recv
2271 double precision,
dimension(0:nw+nwauxio) :: normconv
2272 integer:: igrid,iigrid,level,igonlevel,iw,idim,ix^D
2273 integer:: NumGridsOnLevel(1:nlevelshi)
2274 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,ixC^L,ixCC^L
2275 integer :: nodesonlevelmype,elemsonlevelmype
2276 integer :: nodes, elems
2277 integer,
allocatable :: intstatus(:,:)
2278 integer :: itag,Morton_no,ipe,levmin_recv,levmax_recv,igrid_recv,level_recv
2279 integer :: ixrvC^L,ixrvCC^L
2280 integer :: ind_send(2*^ND),ind_recv(2*^ND),siz_ind,igonlevel_recv
2281 integer :: NumGridsOnLevel_mype(1:nlevelshi,0:npe-1)
2283 logical :: fileopen,first
2284 character(len=80) :: filename
2285 character(len=1024) :: tecplothead
2286 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
2287 character(len=1024) :: outfilehead
2289 if(nw/=count(
w_write(1:nw)))
then
2290 if(
mype==0) print *,
'tecplot_mpi does not use w_write=F'
2291 call mpistop(
'w_write, tecplot')
2295 if(
mype==0) print *,
'tecplot_mpi with nocartesian'
2298 master_cpu_open :
if (
mype == 0)
then
2299 inquire(qunit,opened=fileopen)
2300 if (.not.fileopen)
then
2304 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".plt"
2305 open(qunit,file=filename,status=
'unknown')
2308 write(tecplothead,
'(a)')
"VARIABLES = "//trim(outfilehead)
2309 write(qunit,
'(a)') tecplothead(1:len_trim(tecplothead))
2310 end if master_cpu_open
2313 numgridsonlevel(1:nlevelshi)=0
2315 numgridsonlevel(level)=0
2319 numgridsonlevel(level)=numgridsonlevel(level)+1
2321 numgridsonlevel_mype(level,0:npe-1)=0
2322 numgridsonlevel_mype(level,
mype) = numgridsonlevel(level)
2323 call mpi_allreduce(mpi_in_place,numgridsonlevel_mype(level,0:npe-1),npe,mpi_integer,&
2325 call mpi_allreduce(mpi_in_place,numgridsonlevel(level),1,mpi_integer,mpi_sum, &
2329 nx^d=ixmhi^d-ixmlo^d+1;
2332 if(
mype==0.and.npe>1)
allocate(intstatus(mpi_status_size,1))
2339 nodes=nodes + numgridsonlevel(level)*{nxc^d*}
2340 elems=elems + numgridsonlevel(level)*{nx^d*}
2343 if (
mype==0)
write(qunit,
"(a,i7,a,1pe12.5,a)") &
2344 'ZONE T="all levels", I=',elems, &
2350 call calc_x(igrid,xc,xcc)
2351 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,ixc^l,ixcc^l,.true.)
2353 {
do ix^db=ixccmin^db,ixccmax^db\}
2354 x_tec(1:ndim)=xcc_tmp(ix^d,1:ndim)*normconv(0)
2355 w_tec(1:nw+nwauxio)=wcc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2356 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2358 else if (mype/=0)
then
2360 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2361 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision,0,itag,icomm,ierrmpi)
2362 call mpi_send(wcc_tmp,1,type_block_wcc_io, 0,itag,icomm,ierrmpi)
2363 call mpi_send(xcc_tmp,1,type_block_xcc_io, 0,itag,icomm,ierrmpi)
2368 do morton_no=morton_start(ipe),morton_stop(ipe)
2370 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2371 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,&
2372 itag,icomm,intstatus(:,1),ierrmpi)
2373 call mpi_recv(wcc_tmp_recv,1,type_block_wcc_io, ipe,itag,&
2374 icomm,intstatus(:,1),ierrmpi)
2375 call mpi_recv(xcc_tmp_recv,1,type_block_xcc_io, ipe,itag,&
2376 icomm,intstatus(:,1),ierrmpi)
2377 {
do ix^db=ixccmin^db,ixccmax^db\}
2378 x_tec(1:ndim)=xcc_tmp_recv(ix^d,1:ndim)*normconv(0)
2379 w_tec(1:nw+nwauxio)=wcc_tmp_recv(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2380 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2389 itag=1000*morton_stop(mype)
2390 call mpi_send(levmin,1,mpi_integer, 0,itag,icomm,ierrmpi)
2391 itag=2000*morton_stop(mype)
2392 call mpi_send(levmax,1,mpi_integer, 0,itag,icomm,ierrmpi)
2395 do level=levmin,levmax
2396 nodesonlevelmype=numgridsonlevel_mype(level,mype)*{nxc^d*}
2397 elemsonlevelmype=numgridsonlevel_mype(level,mype)*{nx^d*}
2398 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
2399 elemsonlevel=numgridsonlevel(level)*{nx^d*}
2406 select case(convert_type)
2411 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2412 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
2413 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2414 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=POINT, ZONETYPE=', &
2415 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2416 do morton_no=morton_start(mype),morton_stop(mype)
2417 igrid = sfc_to_igrid(morton_no)
2420 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2422 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2424 if (node(plevel_,igrid)/=level) cycle
2425 call calc_x(igrid,xc,xcc)
2426 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2427 ixc^l,ixcc^l,.true.)
2430 ind_send=(/ ixc^l /)
2432 call mpi_send(ind_send,siz_ind, mpi_integer, 0,itag,icomm,ierrmpi)
2433 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,icomm,ierrmpi)
2435 call mpi_send(wc_tmp,1,type_block_wc_io, 0,itag,icomm,ierrmpi)
2436 call mpi_send(xc_tmp,1,type_block_xc_io, 0,itag,icomm,ierrmpi)
2438 {
do ix^db=ixcmin^db,ixcmax^db\}
2439 x_tec(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0)
2440 w_tec(1:nw+nwauxio)=wc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2441 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2445 case(
'tecplotCCmpi')
2451 if(ndim+nw+nwauxio>99)
call mpistop(
"adjust format specification in writeout")
2452 if(nw+nwauxio==1)
then
2455 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2456 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
2457 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2458 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2459 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
2460 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2462 if(ndim+nw+nwauxio<10)
then
2464 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2465 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i1,a,a)") &
2466 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2467 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2468 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2469 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2471 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2472 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
2473 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2474 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2475 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2476 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2482 do morton_no=morton_start(mype),morton_stop(mype)
2483 igrid = sfc_to_igrid(morton_no)
2486 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2488 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2490 if (node(plevel_,igrid)/=level) cycle
2491 call calc_x(igrid,xc,xcc)
2492 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2495 ind_send=(/ ixc^l /)
2498 call mpi_send(ind_send,siz_ind, mpi_integer, 0,itag,icomm,ierrmpi)
2499 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,icomm,ierrmpi)
2500 call mpi_send(xc_tmp,1,type_block_xc_io, 0,itag,icomm,ierrmpi)
2502 write(qunit,fmt=
"(100(e14.6))") xc_tmp(ixc^s,idim)*normconv(0)
2507 do morton_no=morton_start(mype),morton_stop(mype)
2508 igrid = sfc_to_igrid(morton_no)
2510 itag=morton_no*(ndim+iw)
2511 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2512 itag=igrid*(ndim+iw)
2513 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2515 if (node(plevel_,igrid)/=level) cycle
2516 call calc_x(igrid,xc,xcc)
2517 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2518 ixc^l,ixcc^l,.true.)
2520 ind_send=(/ ixcc^l /)
2522 itag=igrid*(ndim+iw)
2523 call mpi_send(ind_send,siz_ind, mpi_integer, 0,itag,icomm,ierrmpi)
2524 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,icomm,ierrmpi)
2525 call mpi_send(wcc_tmp,1,type_block_wcc_io, 0,itag,icomm,ierrmpi)
2527 write(qunit,fmt=
"(100(e14.6))") wcc_tmp(ixcc^s,iw)*normconv(iw)
2532 call mpistop(
'no such tecplot type')
2536 do morton_no=morton_start(mype),morton_stop(mype)
2537 igrid = sfc_to_igrid(morton_no)
2540 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2542 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2544 if(node(plevel_,igrid)/=level) cycle
2545 igonlevel=igonlevel+1
2548 call mpi_send(igonlevel,1,mpi_integer, 0,itag,icomm,ierrmpi)
2556 if(mype==0 .and.npe>1)
then
2558 itag=1000*morton_stop(ipe)
2559 call mpi_recv(levmin_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2560 itag=2000*morton_stop(ipe)
2561 call mpi_recv(levmax_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2562 do level=levmin_recv,levmax_recv
2563 nodesonlevelmype=numgridsonlevel_mype(level,ipe)*{nxc^d*}
2564 elemsonlevelmype=numgridsonlevel_mype(level,ipe)*{nx^d*}
2565 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
2566 elemsonlevel=numgridsonlevel(level)*{nx^d*}
2567 select case(convert_type)
2572 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2573 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
2574 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2575 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=POINT, ZONETYPE=', &
2576 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2577 do morton_no=morton_start(ipe),morton_stop(ipe)
2579 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2581 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2582 if (level_recv/=level) cycle
2585 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,&
2586 icomm,intstatus(:,1),ierrmpi)
2587 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
2588 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2589 ,icomm,intstatus(:,1),ierrmpi)
2590 call mpi_recv(wc_tmp_recv,1,type_block_wc_io, ipe,itag,&
2591 icomm,intstatus(:,1),ierrmpi)
2592 call mpi_recv(xc_tmp_recv,1,type_block_xc_io, ipe,itag,&
2593 icomm,intstatus(:,1),ierrmpi)
2594 {
do ix^db=ixrvcmin^db,ixrvcmax^db\}
2595 x_tec(1:ndim)=xc_tmp_recv(ix^d,1:ndim)*normconv(0)
2596 w_tec(1:nw+nwauxio)=wc_tmp_recv(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2597 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2600 case(
'tecplotCCmpi')
2606 if(ndim+nw+nwauxio>99)
call mpistop(
"adjust format specification in writeout")
2607 if(nw+nwauxio==1)
then
2610 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2611 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
2612 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2613 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2614 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
2615 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2617 if(ndim+nw+nwauxio<10)
then
2619 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2620 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i1,a,a)") &
2621 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2622 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2623 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2624 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2626 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2627 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
2628 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2629 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2630 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2631 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2636 do morton_no=morton_start(ipe),morton_stop(ipe)
2638 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2639 itag=igrid_recv*idim
2640 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2641 if (level_recv/=level) cycle
2643 itag=igrid_recv*idim
2644 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2645 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
2646 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2647 ,icomm,intstatus(:,1),ierrmpi)
2648 call mpi_recv(xc_tmp_recv,1,type_block_xc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2649 write(qunit,fmt=
"(100(e14.6))") xc_tmp_recv(ixrvc^s,idim)*normconv(0)
2653 do morton_no=morton_start(ipe),morton_stop(ipe)
2654 itag=morton_no*(ndim+iw)
2655 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2656 itag=igrid_recv*(ndim+iw)
2657 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2658 if (level_recv/=level) cycle
2660 itag=igrid_recv*(ndim+iw)
2661 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2662 ixrvccmin^d=ind_recv(^d);ixrvccmax^d=ind_recv(^nd+^d);
2663 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2664 ,icomm,intstatus(:,1),ierrmpi)
2665 call mpi_recv(wcc_tmp_recv,1,type_block_wcc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2666 write(qunit,fmt=
"(100(e14.6))") wcc_tmp_recv(ixrvcc^s,iw)*normconv(iw)
2670 call mpistop(
'no such tecplot type')
2673 do morton_no=morton_start(ipe),morton_stop(ipe)
2675 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2677 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2678 if (level_recv/=level) cycle
2680 call mpi_recv(igonlevel_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2689 call mpi_barrier(icomm,ierrmpi)
2690 if(mype==0)
deallocate(intstatus)
2970 integer,
intent(in) :: qunit
2972 double precision :: x_VTK(1:3)
2973 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC_TMP
2974 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC_TMP
2975 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC_TMP
2976 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC_TMP
2977 double precision,
dimension(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:nw&
+nwauxio) :: w
2978 double precision :: normconv(0:nw+nwauxio)
2979 double precision :: zlength
2980 double precision ::d3grid,zlengsc,zgridsc
2982 integer:: igrid,iigrid,level,igonlevel,icel,ixCmin1,ixCmin2,&
2983 ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,ixCCmax1,&
2985 integer:: NumGridsOnLevel(1:nlevelshi)
2986 integer :: nx1,nx2,nx3,nxC1,nxC2,nxC3,nodesonlevel,elemsonlevel,nc,np,&
2987 VTK_type,ix1,ix2,ix3
2988 integer :: size_length,recsep,k,iw
2989 integer :: length,lengthcc,offset_points,offset_cells, length_coords,&
2990 length_conn,length_offsets
2991 integer :: i3grid,n3grid
2994 character(len=6):: bufform
2995 character(len=80):: filename
2996 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:3+nw+nwauxio)
2997 character(len=1024) :: outfilehead
3000 if(
mype==0) print *,
'unstructuredvtkB23 not parallel, use vtumpi'
3001 call mpistop(
'npe>1, unstructuredvtkB23')
3007 inquire(qunit,opened=fileopen)
3008 if(.not.fileopen)
then
3012 open(qunit,file=filename,status=
'replace')
3016 write(qunit,
'(a)')
'<?xml version="1.0"?>'
3017 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
3018 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
3019 write(qunit,
'(a)')
'<UnstructuredGrid>'
3020 write(qunit,
'(a)')
'<FieldData>'
3021 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
3022 'NumberOfTuples="1" format="ascii">'
3024 write(qunit,
'(a)')
'</DataArray>'
3025 write(qunit,
'(a)')
'</FieldData>'
3028 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3029 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3034 lengthcc=nc*size_real
3036 length_coords=3*length
3037 length_conn=2**3*size_int*nc
3038 length_offsets=nc*size_int
3043 zlengsc=2.d0*zgridsc
3044 zlength=zlengsc*(xprobmax1-xprobmin1)
3047 do iigrid=1,igridstail; igrid=igrids(iigrid);
3052 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3055 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3058 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3059 n3grid=nint(zlength/d3grid)
3064 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3065 '" NumberOfCells="',nc,
'">'
3066 write(qunit,
'(a)')
'<PointData>'
3069 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3070 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3071 write(qunit,
'(a)')
'</DataArray>'
3072 offset=offset+length+size_int
3075 do iw=nw+1,nw+nwauxio
3076 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3077 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3078 write(qunit,
'(a)')
'</DataArray>'
3079 offset=offset+length+size_int
3082 write(qunit,
'(a)')
'</PointData>'
3084 write(qunit,
'(a)')
'<Points>'
3085 write(qunit,
'(a,i16,a)') &
3086 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3089 offset=offset+length_coords+size_int
3090 write(qunit,
'(a)')
'</Points>'
3093 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3094 '" NumberOfCells="',nc,
'">'
3095 write(qunit,
'(a)')
'<CellData>'
3098 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3099 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3100 write(qunit,
'(a)')
'</DataArray>'
3101 offset=offset+lengthcc+size_int
3104 do iw=nw+1,nw+nwauxio
3105 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3106 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3107 write(qunit,
'(a)')
'</DataArray>'
3108 offset=offset+lengthcc+size_int
3111 write(qunit,
'(a)')
'</CellData>'
3112 write(qunit,
'(a)')
'<Points>'
3113 write(qunit,
'(a,i16,a)') &
3114 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3117 offset=offset+length_coords+size_int
3118 write(qunit,
'(a)')
'</Points>'
3120 write(qunit,
'(a)')
'<Cells>'
3122 write(qunit,
'(a,i16,a)')&
3123 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',&
3125 offset=offset+length_conn+size_int
3127 write(qunit,
'(a,i16,a)') &
3128 '<DataArray type="Int32" Name="offsets" format="appended" offset="',&
3130 offset=offset+length_offsets+size_int
3132 write(qunit,
'(a,i16,a)') &
3133 '<DataArray type="Int32" Name="types" format="appended" offset="',&
3135 offset=offset+size_length+nc*size_int
3136 write(qunit,
'(a)')
'</Cells>'
3137 write(qunit,
'(a)')
'</Piece>'
3144 write(qunit,
'(a)')
'</UnstructuredGrid>'
3145 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
3147 open(qunit,file=filename,form=
'unformatted',access=
'stream',status=
'old',position=
'append')
3149 write(qunit) trim(buffer)
3153 do iigrid=1,igridstail; igrid=igrids(iigrid);
3158 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3161 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3164 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3165 n3grid=nint(zlength/d3grid)
3170 ixglo1,ixglo2,ixghi1,ixghi2,ps(igrid)%w,ps(igrid)%x)
3174 do ix3=ixglo1,ixghi1
3175 w(ixglo1:ixghi1,ixglo2:ixghi2,ix3,1:nw)=ps(igrid)%w(ixglo1:ixghi1,&
3179 call calc_grid23(qunit,igrid,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
3180 ixcmin1,ixcmin2,ixcmin3,ixcmax1,ixcmax2,ixcmax3,ixccmin1,ixccmin2,&
3181 ixccmin3,ixccmax1,ixccmax2,ixccmax3,.true.,i3grid,d3grid,w,zlength,zgridsc)
3187 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3188 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3190 write(qunit) lengthcc
3191 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3192 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3197 do iw=nw+1,nw+nwauxio
3201 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3202 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3204 write(qunit) lengthcc
3205 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3206 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3211 write(qunit) length_coords
3212 do ix3=ixcmin3,ixcmax3
3213 do ix2=ixcmin2,ixcmax2
3214 do ix1=ixcmin1,ixcmax1
3216 x_vtk(1:3)=xc_tmp(ix1,ix2,ix3,1:3)*normconv(0);
3218 write(qunit) real(x_vtk(k))
3223 write(qunit) length_conn
3228 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3229 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3230 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3231 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
3232 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
3233 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3234 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3235 ix3*nxc2*nxc1+ ix2*nxc1+ix1
3239 write(qunit) length_offsets
3241 write(qunit) icel*(2**3)
3244 write(qunit) size_int*nc
3246 write(qunit) vtk_type
3255 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
3257 write(qunit,
'(a)')
'</AppendedData>'
3258 write(qunit,
'(a)')
'</VTKFile>'
3272 integer,
intent(in) :: qunit
3274 double precision :: x_VTK(1:3)
3275 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC_TMP
3276 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC_TMP
3277 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC_TMP
3278 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC_TMP
3279 double precision,
dimension(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:nw&
+nwauxio) :: w
3280 double precision :: normconv(0:nw+nwauxio)
3281 double precision ::d3grid,zlengsc,zgridsc
3282 double precision :: zlength
3284 integer:: igrid,iigrid,level,igonlevel,icel,ixCmin1,ixCmin2,&
3285 ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,ixCCmax1,&
3287 integer:: NumGridsOnLevel(1:nlevelshi)
3288 integer :: nx1,nx2,nx3,nxC1,nxC2,nxC3,nodesonlevel,elemsonlevel,nc,np,&
3289 VTK_type,ix1,ix2,ix3
3290 integer :: size_length,recsep,k,iw
3291 integer :: length,lengthcc,offset_points,offset_cells, length_coords,&
3292 length_conn,length_offsets
3293 integer :: i3grid,n3grid
3295 character(len=80):: filename
3296 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:3+nw+nwauxio)
3297 character(len=1024) :: outfilehead
3299 character(len=6):: bufform
3302 if(
mype==0) print *,
'unstructuredvtkBsym23 not parallel, use vtumpi'
3303 call mpistop(
'npe>1, unstructuredvtkBsym23')
3310 inquire(qunit,opened=fileopen)
3311 if(.not.fileopen)
then
3315 open(qunit,file=filename,status=
'unknown')
3320 write(qunit,
'(a)')
'<?xml version="1.0"?>'
3321 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
3322 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
3323 write(qunit,
'(a)')
'<UnstructuredGrid>'
3324 write(qunit,
'(a)')
'<FieldData>'
3325 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
3326 'NumberOfTuples="1" format="ascii">'
3328 write(qunit,
'(a)')
'</DataArray>'
3329 write(qunit,
'(a)')
'</FieldData>'
3332 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3333 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3338 lengthcc=nc*size_real
3340 length_coords=3*length
3341 length_conn=2**3*size_int*nc
3342 length_offsets=nc*size_int
3348 zlength=zlengsc*(xprobmax1-xprobmin1)
3351 do iigrid=1,igridstail; igrid=igrids(iigrid);
3356 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3359 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3362 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3363 n3grid=nint(zlength/d3grid)
3369 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3370 '" NumberOfCells="',nc,
'">'
3371 write(qunit,
'(a)')
'<PointData>'
3374 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3375 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3376 write(qunit,
'(a)')
'</DataArray>'
3377 offset=offset+length+size_length
3380 do iw=nw+1,nw+nwauxio
3381 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3382 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3383 write(qunit,
'(a)')
'</DataArray>'
3384 offset=offset+length+size_length
3387 write(qunit,
'(a)')
'</PointData>'
3388 write(qunit,
'(a)')
'<Points>'
3389 write(qunit,
'(a,i16,a)') &
3390 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3393 offset=offset+length_coords+size_length
3394 write(qunit,
'(a)')
'</Points>'
3397 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3398 '" NumberOfCells="',nc,
'">'
3399 write(qunit,
'(a)')
'<CellData>'
3402 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3403 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3404 write(qunit,
'(a)')
'</DataArray>'
3405 offset=offset+lengthcc+size_length
3408 do iw=nw+1,nw+nwauxio
3409 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3410 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3411 write(qunit,
'(a)')
'</DataArray>'
3412 offset=offset+lengthcc+size_length
3415 write(qunit,
'(a)')
'</CellData>'
3417 write(qunit,
'(a)')
'<Points>'
3418 write(qunit,
'(a,i16,a)') &
3419 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3422 offset=offset+length_coords+size_length
3423 write(qunit,
'(a)')
'</Points>'
3425 write(qunit,
'(a)')
'<Cells>'
3427 write(qunit,
'(a,i16,a)')&
3428 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',&
3430 offset=offset+length_conn+size_length
3432 write(qunit,
'(a,i16,a)') &
3433 '<DataArray type="Int32" Name="offsets" format="appended" offset="',&
3435 offset=offset+length_offsets+size_length
3437 write(qunit,
'(a,i16,a)') &
3438 '<DataArray type="Int32" Name="types" format="appended" offset="',&
3440 offset=offset+size_length+nc*size_int
3441 write(qunit,
'(a)')
'</Cells>'
3442 write(qunit,
'(a)')
'</Piece>'
3448 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3449 '" NumberOfCells="',nc,
'">'
3450 write(qunit,
'(a)')
'<PointData>'
3453 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3454 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3455 write(qunit,
'(a)')
'</DataArray>'
3456 offset=offset+length+size_length
3459 do iw=nw+1,nw+nwauxio
3460 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3461 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3462 write(qunit,
'(a)')
'</DataArray>'
3463 offset=offset+length+size_length
3466 write(qunit,
'(a)')
'</PointData>'
3467 write(qunit,
'(a)')
'<Points>'
3468 write(qunit,
'(a,i16,a)') &
3469 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3472 offset=offset+length_coords+size_length
3473 write(qunit,
'(a)')
'</Points>'
3476 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3477 '" NumberOfCells="',nc,
'">'
3478 write(qunit,
'(a)')
'<CellData>'
3481 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3482 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3483 write(qunit,
'(a)')
'</DataArray>'
3484 offset=offset+lengthcc+size_length
3487 do iw=nw+1,nw+nwauxio
3488 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3489 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3490 write(qunit,
'(a)')
'</DataArray>'
3491 offset=offset+lengthcc+size_length
3494 write(qunit,
'(a)')
'</CellData>'
3495 write(qunit,
'(a)')
'<Points>'
3496 write(qunit,
'(a,i16,a)') &
3497 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3500 offset=offset+length_coords+size_length
3501 write(qunit,
'(a)')
'</Points>'
3503 write(qunit,
'(a)')
'<Cells>'
3505 write(qunit,
'(a,i16,a)')&
3506 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',&
3508 offset=offset+length_conn+size_length
3510 write(qunit,
'(a,i16,a)') &
3511 '<DataArray type="Int32" Name="offsets" format="appended" offset="',&
3513 offset=offset+length_offsets+size_length
3515 write(qunit,
'(a,i16,a)') &
3516 '<DataArray type="Int32" Name="types" format="appended" offset="',&
3518 offset=offset+size_length+nc*size_int
3519 write(qunit,
'(a)')
'</Cells>'
3520 write(qunit,
'(a)')
'</Piece>'
3528 write(qunit,
'(a)')
'</UnstructuredGrid>'
3529 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
3531 open(qunit,file=filename,form=
'unformatted',access=
'stream',status=
'old',position=
'append')
3533 write(qunit) trim(buffer)
3536 do iigrid=1,igridstail; igrid=igrids(iigrid);
3541 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3544 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3547 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3548 n3grid=nint(zlength/d3grid)
3553 ixglo1,ixglo2,ixghi1,ixghi2,ps(igrid)%w,ps(igrid)%x)
3557 do ix3=ixglo1,ixghi1
3558 w(ixglo1:ixghi1,ixglo2:ixghi2,ix3,1:nw)=ps(igrid)%w(ixglo1:ixghi1,&
3562 call calc_grid23(qunit,igrid,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
3563 ixcmin1,ixcmin2,ixcmin3,ixcmax1,ixcmax2,ixcmax3,ixccmin1,ixccmin2,&
3564 ixccmin3,ixccmax1,ixccmax2,ixccmax3,.true.,i3grid,d3grid,w,zlength,zgridsc)
3571 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3572 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3574 write(qunit) lengthcc
3575 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3576 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3581 do iw=nw+1,nw+nwauxio
3585 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3586 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3588 write(qunit) lengthcc
3589 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3590 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3595 write(qunit) length_coords
3596 do ix3=ixcmin3,ixcmax3
3597 do ix2=ixcmin2,ixcmax2
3598 do ix1=ixcmin1,ixcmax1
3600 x_vtk(1:3)=xc_tmp(ix1,ix2,ix3,1:3)*normconv(0);
3602 write(qunit) real(x_vtk(k))
3607 write(qunit) length_conn
3612 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3613 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3614 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3615 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
3616 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
3617 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3618 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3619 ix3*nxc2*nxc1+ ix2*nxc1+ix1
3623 write(qunit) length_offsets
3625 write(qunit) icel*(2**3)
3628 write(qunit) size_int*nc
3630 write(qunit) vtk_type
3636 if(iw==2 .or. iw==4 .or. iw==7)
then
3637 wc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,iw)=&
3638 -wc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,iw)
3639 wcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,iw)=&
3640 -wcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,iw)
3645 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3646 =ixcmax1,ixcmin1,-1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3648 write(qunit) lengthcc
3649 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3650 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3655 do iw=nw+1,nw+nwauxio
3659 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3660 =ixcmax1,ixcmin1,-1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3662 write(qunit) lengthcc
3663 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3664 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3669 write(qunit) length_coords
3670 do ix3=ixcmin3,ixcmax3
3671 do ix2=ixcmin2,ixcmax2
3672 do ix1=ixcmax1,ixcmin1,-1
3674 x_vtk(1:3)=xc_tmp(ix1,ix2,ix3,1:3)*normconv(0);
3677 write(qunit) real(x_vtk(k))
3682 write(qunit) length_conn
3687 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3688 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3689 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3690 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
3691 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
3692 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3693 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3694 ix3*nxc2*nxc1+ ix2*nxc1+ix1
3698 write(qunit) length_offsets
3700 write(qunit) icel*(2**3)
3703 write(qunit) size_int*nc
3705 write(qunit) vtk_type
3714 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
3715 write(qunit,
'(a)')
'</AppendedData>'
3716 write(qunit,
'(a)')
'</VTKFile>'
3721 subroutine calc_grid23(qunit,igrid,xC_TMP,xCC_TMP,wC_TMP,wCC_TMP,normconv,&
3722 ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,&
3723 ixCCmax1,ixCCmax2,ixCCmax3,first,i3grid,d3grid,w,zlength,zgridsc)
3731 integer,
intent(in) :: qunit, igrid,i3grid
3732 logical,
intent(in) :: first
3734 double precision :: dx1,dx2,dx3,d3grid,zlength,zgridsc
3735 double precision :: ldw(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1),&
3736 dwC(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1)
3737 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC
3738 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC
3739 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC
3740 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC
3741 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC_TMP
3742 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC_TMP
3743 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC_TMP
3744 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC_TMP
3745 double precision,
dimension(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:nw&
+nwauxio) :: w
3746 double precision,
dimension(0:nw+nwauxio) :: normconv
3747 integer :: nx1,nx2,nx3, nxC1,nxC2,nxC3, ix1,ix2,ix3, ix, iw, level, idir
3748 integer :: ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,&
3749 ixCCmin2,ixCCmin3,ixCCmax1,ixCCmax2,ixCCmax3,nxCC1,nxCC2,nxCC3
3750 integer :: idims,jxCmin1,jxCmin2,jxCmin3,jxCmax1,jxCmax2,jxCmax3
3751 logical,
save :: subfirst=.true.
3754 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3756 dx1=
dx(1,level);dx2=
dx(2,level);dx3=zgridsc*
dx(1,level);
3771 nxcc1=nx1;nxcc2=nx2;nxcc3=nx3;
3772 ixccmin1=ixmlo1;ixccmin2=ixmlo2;ixccmin3=ixmlo1; ixccmax1=ixmhi1
3773 ixccmax2=ixmhi2;ixccmax3=ixmhi1;
3774 do ix=ixccmin1,ixccmax1
3775 xcc(ix,ixccmin2:ixccmax2,ixccmin3:ixccmax3,1)=
rnode(rpxmin1_,igrid)&
3776 +(dble(ix-ixccmin1)+half)*dx1
3778 do ix=ixccmin2,ixccmax2
3779 xcc(ixccmin1:ixccmax1,ix,ixccmin3:ixccmax3,2)=
rnode(rpxmin2_,igrid)&
3780 +(dble(ix-ixccmin2)+half)*dx2
3782 do ix=ixccmin3,ixccmax3
3783 xcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ix,3)=-zlength/two+&
3784 dble(i3grid-1)*d3grid+(dble(ix-ixccmin3)+half)*dx3
3788 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3789 ixcmin1=ixmlo1-1;ixcmin2=ixmlo2-1;ixcmin3=ixmlo1-1; ixcmax1=ixmhi1
3790 ixcmax2=ixmhi2;ixcmax3=ixmhi1;
3791 do ix=ixcmin1,ixcmax1
3792 xc(ix,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1)=
rnode(rpxmin1_,igrid)&
3793 +dble(ix-ixcmin1)*dx1
3795 do ix=ixcmin2,ixcmax2
3796 xc(ixcmin1:ixcmax1,ix,ixcmin3:ixcmax3,2)=
rnode(rpxmin2_,igrid)&
3797 +dble(ix-ixcmin2)*dx2
3799 do ix=ixcmin3,ixcmax3
3800 xc(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ix,3)=-zlength/two+&
3801 dble(i3grid-1)*d3grid+dble(ix-ixcmin3)*dx3
3811 jxcmin1=ixghi1+1-
nghostcells;jxcmin2=ixglo2;jxcmin3=ixglo1;
3812 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixghi1;
3813 do ix1=jxcmin1,jxcmax1
3814 w(ix1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw) = w(jxcmin1&
3815 -1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw)
3817 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixglo1;
3818 jxcmax1=ixglo1-1+
nghostcells;jxcmax2=ixghi2;jxcmax3=ixghi1;
3819 do ix1=jxcmin1,jxcmax1
3820 w(ix1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw) = w(jxcmax1&
3821 +1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw)
3824 jxcmin1=ixglo1;jxcmin2=ixghi2+1-
nghostcells;jxcmin3=ixglo1;
3825 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixghi1;
3826 do ix2=jxcmin2,jxcmax2
3827 w(jxcmin1:jxcmax1,ix2,jxcmin3:jxcmax3,nw-nwextra+1:nw) &
3828 = w(jxcmin1:jxcmax1,jxcmin2-1,jxcmin3:jxcmax3,nw-nwextra+1:nw)
3830 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixglo1;
3831 jxcmax1=ixghi1;jxcmax2=ixglo2-1+
nghostcells;jxcmax3=ixghi1;
3832 do ix2=jxcmin2,jxcmax2
3833 w(jxcmin1:jxcmax1,ix2,jxcmin3:jxcmax3,nw-nwextra+1:nw) &
3834 = w(jxcmin1:jxcmax1,jxcmax2+1,jxcmin3:jxcmax3,nw-nwextra+1:nw)
3837 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixghi1+1-
nghostcells;
3838 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixghi1;
3839 do ix3=jxcmin3,jxcmax3
3840 w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,ix3,nw-nwextra+1:nw) &
3841 = w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,jxcmin3-1,nw-nwextra+1:nw)
3843 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixglo1;
3844 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixglo1-1+
nghostcells;
3845 do ix3=jxcmin3,jxcmax3
3846 w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,ix3,nw-nwextra+1:nw) &
3847 = w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,jxcmax3+1,nw-nwextra+1:nw)
3862 +1,ixglo2+1,ixglo1+1,ixghi1-1,ixghi2-1,ixghi1-1,w,xcc,normconv)
3867 wcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,:)=w(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,:)
3869 do ix3=ixccmin3,ixccmax3
3870 do ix2=ixccmin2,ixccmax2
3871 do ix1=ixccmin1,ixccmax1
3872 wcc(ix1,ix2,ix3,iw_mag(:))=wcc(ix1,ix2,ix3,iw_mag(:))+ps(igrid)%B0(ix1,ix2,&
3879 do ix3=ixccmin3,ixccmax3
3880 do ix2=ixccmin2,ixccmax2
3881 do ix1=ixccmin1,ixccmax1
3882 wcc(ix1,ix2,ix3,iw_e)=w(ix1,ix2,ix3,iw_e) +half*sum(ps(igrid)%B0(ix1,&
3883 ix2,:,0)**2 ) + sum(w(ix1,ix2,ix3,&
3884 iw_mag(:))*ps(igrid)%B0(ix1,ix2,:,0))
3894 if (
b0field.and.iw>iw_mag(1)-1.and.iw<=iw_mag(
ndir))
then
3896 do ix3=ixcmin3,ixcmax3
3897 do ix2=ixcmin2,ixcmax2
3898 do ix1=ixcmin1,ixcmax1
3899 wc(ix1,ix2,ix3,iw)=sum(w(ix1:ix1+1,ix2:ix2+1,ix3,iw) &
3900 +ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3901 ,idir,0))/dble(2**3)+&
3902 sum(w(ix1:ix1+1,ix2:ix2+1,ix3+1,iw) &
3903 +ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3904 ,idir,0))/dble(2**3)
3909 do ix3=ixcmin3,ixcmax3
3910 do ix2=ixcmin2,ixcmax2
3911 do ix1=ixcmin1,ixcmax1
3912 wc(ix1,ix2,ix3,iw)=sum(w(ix1:ix1+1,ix2:ix2+1,ix3:ix3&
3920 do ix3=ixcmin3,ixcmax3
3921 do ix2=ixcmin2,ixcmax2
3922 do ix1=ixcmin1,ixcmax1
3923 wc(ix1,ix2,ix3,iw_e)=sum( w(ix1:ix1+1,ix2:ix2+1,ix3,iw_e) &
3924 +half*sum(ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3925 ,:,0)**2,dim=
ndim+1) + sum( w(ix1:ix1+1,ix2:ix2+1,ix3&
3926 ,iw_mag(:))*ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3927 ,:,0),dim=
ndim+1) ) /dble(2**3)+&
3928 sum( w(ix1:ix1+1,ix2:ix2+1,ix3+1,iw_e) &
3929 +half*sum(ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3930 ,:,0)**2,dim=
ndim+1) + sum( w(ix1:ix1+1,ix2:ix2+1,ix3&
3931 +1,iw_mag(:))*ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3932 ,:,0),dim=
ndim+1) ) /dble(2**3)
3939 xc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:3) &
3940 = xc(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:3)
3941 wc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:nw&
3942 +
nwauxio) = wc(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:nw&
3944 xcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,&
3945 1:3) = xcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,&
3946 ixccmin3:ixccmax3,1:3)
3947 wcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,1:nw&
3948 +
nwauxio) = wcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,&
3957 integer,
intent(in) :: qunit, igrid
3959 integer :: nx1,nx2,nx3, nxC1,nxC2,nxC3, ix1,ix2,ix3
3961 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3962 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3966 write(qunit,
'(8(i7,1x))')&
3967 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3968 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&