370 integer,
intent(in) :: qunit
372 double precision :: x_TEC(ndim), w_TEC(nw+nwauxio)
373 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
374 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
375 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
376 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
377 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP
378 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
379 double precision,
dimension(0:nw+nwauxio) :: normconv
380 integer:: igrid,iigrid,level,igonlevel,iw,idim,ix^D
381 integer:: NumGridsOnLevel(1:nlevelshi)
382 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,ixC^L,ixCC^L
383 integer :: nodes, elems
385 logical :: fileopen,first
386 character(len=80) :: filename
388 character(len=1024) :: tecplothead
389 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
390 character(len=1024) :: outfilehead
393 if(
mype==0) print *,
'tecplot not parallel, use tecplotmpi'
394 call mpistop(
'npe>1, tecplot')
397 if(nw/=count(
w_write(1:nw)))
then
398 if(
mype==0) print *,
'tecplot does not use w_write=F'
399 call mpistop(
'w_write, tecplot')
403 if(
mype==0) print *,
'tecplot with nocartesian'
406 inquire(qunit,opened=fileopen)
407 if(.not.fileopen)
then
411 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".plt"
412 open(qunit,file=filename,status=
'unknown')
417 write(tecplothead,
'(a)')
"VARIABLES = "//trim(outfilehead)
418 write(qunit,
'(a)') tecplothead(1:len_trim(tecplothead))
420 numgridsonlevel(1:nlevelshi)=0
422 numgridsonlevel(level)=0
423 do iigrid=1,igridstail; igrid=igrids(iigrid);
425 numgridsonlevel(level)=numgridsonlevel(level)+1
429 nx^d=ixmhi^d-ixmlo^d+1;
437 nodes=nodes + numgridsonlevel(level)*{nxc^d*}
438 elems=elems + numgridsonlevel(level)*{nx^d*}
441 write(qunit,
"(a,i7,a,1pe12.5,a)") &
442 'ZONE T="all levels", I=',elems, &
446 do iigrid=1,igridstail; igrid=igrids(iigrid);
449 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,ixc^l,ixcc^l,.true.)
450 {
do ix^db=ixccmin^db,ixccmax^db\}
451 x_tec(1:ndim)=xcc_tmp(ix^d,1:ndim)*normconv(0)
452 w_tec(1:nw+nwauxio)=wcc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
453 write(qunit,fmt=
"(100(e24.16))") x_tec, w_tec
459 do level=levmin,levmax
460 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
461 elemsonlevel=numgridsonlevel(level)*{nx^d*}
468 select case(convert_type)
473 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
474 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
475 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=POINT, ZONETYPE=', &
476 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
477 do iigrid=1,igridstail; igrid=igrids(iigrid);
478 if (node(plevel_,igrid)/=level) cycle
480 call calc_x(igrid,xc,xcc)
481 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
483 {
do ix^db=ixcmin^db,ixcmax^db\}
484 x_tec(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0)
485 w_tec(1:nw+nwauxio)=wc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
486 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
495 if(ndim+nw+nwauxio>99)
call mpistop(
"adjust format specification in writeout")
496 if(nw+nwauxio==1)
then
499 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
500 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
501 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
502 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
503 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
505 if(ndim+nw+nwauxio<10)
then
507 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i1,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'}
513 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
514 'ZONE T="',level,
'"',
', N=',nodesonlevel,
', E=',elemsonlevel, &
515 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
516 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
517 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
522 do iigrid=1,igridstail; igrid=igrids(iigrid);
523 if (node(plevel_,igrid)/=level) cycle
525 call calc_x(igrid,xc,xcc)
526 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
528 write(qunit,fmt=
"(100(e14.6))") xc_tmp(ixc^s,idim)*normconv(0)
532 do iigrid=1,igridstail; igrid=igrids(iigrid);
533 if (node(plevel_,igrid)/=level) cycle
535 call calc_x(igrid,xc,xcc)
536 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
538 write(qunit,fmt=
"(100(e14.6))") wcc_tmp(ixcc^s,iw)*normconv(iw)
542 call mpistop(
'no such tecplot type')
545 do iigrid=1,igridstail; igrid=igrids(iigrid);
546 if (node(plevel_,igrid)/=level) cycle
548 igonlevel=igonlevel+1
806 integer,
intent(in) :: qunit
808 double precision :: x_VTK(1:3)
809 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
810 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
811 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
812 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
813 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio):: wC_TMP
814 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
815 double precision :: normconv(0:nw+nwauxio)
816 integer,
allocatable :: intstatus(:,:)
818 integer :: itag,ipe,igrid,level,icel,ixC^L,ixCC^L,Morton_no,Morton_length
819 integer :: nx^D,nxC^D,nc,np,VTK_type,ix^D,filenr
821 integer:: length,lengthcc,length_coords,length_conn,length_offsets
823 character(len=80):: filename
824 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
825 character(len=1024) :: outfilehead
826 logical :: fileopen,cell_corner=.false.
827 logical,
allocatable :: Morton_aim(:),Morton_aim_p(:)
842 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
844 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then
845 morton_aim_p(morton_no)=.true.
849 call mpi_allreduce(morton_aim_p,morton_aim,morton_length,mpi_logical,mpi_lor,&
852 case(
'vtuB',
'vtuBmpi')
854 case(
'vtuBCC',
'vtuBCCmpi')
859 if(.not. morton_aim(morton_no)) cycle
862 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
876 inquire(qunit,opened=fileopen)
877 if(.not.fileopen)
then
881 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu"
883 open(qunit,file=filename,status=
'replace')
887 write(qunit,
'(a)')
'<?xml version="1.0"?>'
888 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
889 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
890 write(qunit,
'(a)')
'<UnstructuredGrid>'
891 write(qunit,
'(a)')
'<FieldData>'
892 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
893 'NumberOfTuples="1" format="ascii">'
895 write(qunit,
'(a)')
'</DataArray>'
896 write(qunit,
'(a)')
'</FieldData>'
899 nx^d=ixmhi^d-ixmlo^d+1;
904 lengthcc=nc*size_real
905 length_coords=3*length
906 length_conn=2**^nd*size_int*nc
907 length_offsets=nc*size_int
911 if(.not. morton_aim(morton_no)) cycle
914 write(qunit,
'(a,i7,a,i7,a)') &
915 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
916 write(qunit,
'(a)')
'<PointData>'
921 write(qunit,
'(a,a,a,i16,a)')&
922 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
923 '" format="appended" offset="',offset,
'">'
924 write(qunit,
'(a)')
'</DataArray>'
925 offset=offset+length+size_int
927 write(qunit,
'(a)')
'</PointData>'
928 write(qunit,
'(a)')
'<Points>'
929 write(qunit,
'(a,i16,a)') &
930 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
932 offset=offset+length_coords+size_int
933 write(qunit,
'(a)')
'</Points>'
936 write(qunit,
'(a,i7,a,i7,a)') &
937 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
938 write(qunit,
'(a)')
'<CellData>'
943 write(qunit,
'(a,a,a,i16,a)')&
944 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
945 '" format="appended" offset="',offset,
'">'
946 write(qunit,
'(a)')
'</DataArray>'
947 offset=offset+lengthcc+size_int
949 write(qunit,
'(a)')
'</CellData>'
950 write(qunit,
'(a)')
'<Points>'
951 write(qunit,
'(a,i16,a)') &
952 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
954 offset=offset+length_coords+size_int
955 write(qunit,
'(a)')
'</Points>'
957 write(qunit,
'(a)')
'<Cells>'
959 write(qunit,
'(a,i16,a)')&
960 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>'
961 offset=offset+length_conn+size_int
963 write(qunit,
'(a,i16,a)') &
964 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>'
965 offset=offset+length_offsets+size_int
967 write(qunit,
'(a,i16,a)') &
968 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>'
969 offset=offset+size_int+nc*size_int
970 write(qunit,
'(a)')
'</Cells>'
971 write(qunit,
'(a)')
'</Piece>'
977 if(.not. morton_aim(morton_no)) cycle
980 write(qunit,
'(a,i7,a,i7,a)') &
981 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
982 write(qunit,
'(a)')
'<PointData>'
987 write(qunit,
'(a,a,a,i16,a)')&
988 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
989 '" format="appended" offset="',offset,
'">'
990 write(qunit,
'(a)')
'</DataArray>'
991 offset=offset+length+size_int
993 write(qunit,
'(a)')
'</PointData>'
994 write(qunit,
'(a)')
'<Points>'
995 write(qunit,
'(a,i16,a)') &
996 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
998 offset=offset+length_coords+size_int
999 write(qunit,
'(a)')
'</Points>'
1002 write(qunit,
'(a,i7,a,i7,a)') &
1003 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1004 write(qunit,
'(a)')
'<CellData>'
1009 write(qunit,
'(a,a,a,i16,a)')&
1010 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
1011 '" format="appended" offset="',offset,
'">'
1012 write(qunit,
'(a)')
'</DataArray>'
1013 offset=offset+lengthcc+size_int
1015 write(qunit,
'(a)')
'</CellData>'
1016 write(qunit,
'(a)')
'<Points>'
1017 write(qunit,
'(a,i16,a)') &
1018 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1020 offset=offset+length_coords+size_int
1021 write(qunit,
'(a)')
'</Points>'
1023 write(qunit,
'(a)')
'<Cells>'
1025 write(qunit,
'(a,i16,a)')&
1026 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>'
1027 offset=offset+length_conn+size_int
1029 write(qunit,
'(a,i16,a)') &
1030 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>'
1031 offset=offset+length_offsets+size_int
1033 write(qunit,
'(a,i16,a)') &
1034 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>'
1035 offset=offset+size_int+nc*size_int
1036 write(qunit,
'(a)')
'</Cells>'
1037 write(qunit,
'(a)')
'</Piece>'
1042 write(qunit,
'(a)')
'</UnstructuredGrid>'
1043 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
1045 open(qunit,file=filename,access=
'stream',form=
'unformatted',position=
'append')
1047 write(qunit) trim(buf)
1050 if(.not. morton_aim(morton_no)) cycle
1052 call calc_x(igrid,xc,xcc)
1053 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1054 ixc^l,ixcc^l,.true.)
1059 if(cell_corner)
then
1061 write(qunit) {(|}real(wc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixcmin^d,ixcmax^d)}
1063 write(qunit) lengthcc
1064 write(qunit) {(|}real(wcc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixccmin^d,ixccmax^d)}
1068 write(qunit) length_coords
1069 {
do ix^db=ixcmin^db,ixcmax^db \}
1071 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1073 write(qunit) real(x_vtk(k))
1077 write(qunit) length_conn
1079 {^ifoned
write(qunit)ix1-1,ix1 \}
1081 write(qunit)(ix2-1)*nxc1+ix1-1, &
1082 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1086 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1087 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1088 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1089 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1090 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1091 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1092 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1093 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1097 write(qunit) length_offsets
1099 write(qunit) icel*(2**^nd)
1102 {^ifoned vtk_type=3 \}
1103 {^iftwod vtk_type=8 \}
1104 {^ifthreed vtk_type=11 \}
1105 write(qunit) size_int*nc
1107 write(qunit) vtk_type
1110 allocate(intstatus(mpi_status_size,1))
1112 ixccmin^d=ixmlo^d; ixccmax^d=ixmhi^d;
1113 ixcmin^d=ixmlo^d-1; ixcmax^d=ixmhi^d;
1115 do morton_no=morton_start(ipe),morton_stop(ipe)
1116 if(.not. morton_aim(morton_no)) cycle
1118 call mpi_recv(xc_tmp,1,type_block_xc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1119 if(cell_corner)
then
1120 call mpi_recv(wc_tmp,1,type_block_wc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1122 call mpi_recv(wcc_tmp,1,type_block_wcc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1126 if(.not.w_write(iw)) cycle
1128 if(cell_corner)
then
1130 write(qunit) {(|}real(wc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixcmin^d,ixcmax^d)}
1132 write(qunit) lengthcc
1133 write(qunit) {(|}real(wcc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixccmin^d,ixccmax^d)}
1136 write(qunit) length_coords
1137 {
do ix^db=ixcmin^db,ixcmax^db \}
1139 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1141 write(qunit) real(x_vtk(k))
1144 write(qunit) length_conn
1146 {^ifoned
write(qunit)ix1-1,ix1 \}
1148 write(qunit)(ix2-1)*nxc1+ix1-1, &
1149 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1153 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1154 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1155 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1156 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1157 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1158 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1159 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1160 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1163 write(qunit) length_offsets
1165 write(qunit) icel*(2**^nd)
1167 {^ifoned vtk_type=3 \}
1168 {^iftwod vtk_type=8 \}
1169 {^ifthreed vtk_type=11 \}
1170 write(qunit) size_int*nc
1172 write(qunit) vtk_type
1178 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
1179 write(qunit,
'(a)')
'</AppendedData>'
1180 write(qunit,
'(a)')
'</VTKFile>'
1182 deallocate(intstatus)
1185 deallocate(morton_aim,morton_aim_p)
1187 call mpi_barrier(icomm,ierrmpi)
1200 integer,
intent(in) :: qunit
1202 double precision :: x_VTK(1:3)
1203 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
1204 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
1205 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1206 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1207 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio):: wC_TMP
1208 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
1209 double precision :: normconv(0:nw+nwauxio)
1210 integer,
allocatable :: intstatus(:,:)
1212 integer :: itag,ipe,igrid,level,icel,ixC^L,ixCC^L,Morton_no,Morton_length
1213 integer :: nx^D,nxC^D,nc,np,VTK_type,ix^D,filenr
1215 integer:: length,lengthcc,length_coords,length_conn,length_offsets
1217 character(len=80):: filename
1218 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
1219 character(len=1024) :: outfilehead
1220 logical :: fileopen,cell_corner=.false.
1221 logical,
allocatable :: Morton_aim(:),Morton_aim_p(:)
1228 morton_aim_p=.false.
1236 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
1238 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then
1239 morton_aim_p(morton_no)=.true.
1243 call mpi_allreduce(morton_aim_p,morton_aim,morton_length,mpi_logical,mpi_lor,&
1246 case(
'vtuB64',
'vtuBmpi64')
1248 case(
'vtuBCC64',
'vtuBCCmpi64')
1253 if(.not. morton_aim(morton_no)) cycle
1255 call calc_x(igrid,xc,xcc)
1256 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1257 ixc^l,ixcc^l,.true.)
1260 if(cell_corner)
then
1269 inquire(qunit,opened=fileopen)
1270 if(.not.fileopen)
then
1274 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu"
1276 open(qunit,file=filename,status=
'replace')
1280 write(qunit,
'(a)')
'<?xml version="1.0"?>'
1281 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
1282 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
1283 write(qunit,
'(a)')
'<UnstructuredGrid>'
1284 write(qunit,
'(a)')
'<FieldData>'
1285 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
1286 'NumberOfTuples="1" format="ascii">'
1288 write(qunit,
'(a)')
'</DataArray>'
1289 write(qunit,
'(a)')
'</FieldData>'
1291 nx^d=ixmhi^d-ixmlo^d+1;
1295 length=np*size_double
1296 lengthcc=nc*size_double
1297 length_coords=3*length
1298 length_conn=2**^nd*size_int*nc
1299 length_offsets=nc*size_int
1302 if(.not. morton_aim(morton_no)) cycle
1303 if(cell_corner)
then
1305 write(qunit,
'(a,i7,a,i7,a)') &
1306 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1307 write(qunit,
'(a)')
'<PointData>'
1312 write(qunit,
'(a,a,a,i16,a)')&
1313 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1314 '" format="appended" offset="',offset,
'">'
1315 write(qunit,
'(a)')
'</DataArray>'
1316 offset=offset+length+size_int
1318 write(qunit,
'(a)')
'</PointData>'
1319 write(qunit,
'(a)')
'<Points>'
1320 write(qunit,
'(a,i16,a)') &
1321 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1323 offset=offset+length_coords+size_int
1324 write(qunit,
'(a)')
'</Points>'
1327 write(qunit,
'(a,i7,a,i7,a)') &
1328 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1329 write(qunit,
'(a)')
'<CellData>'
1334 write(qunit,
'(a,a,a,i16,a)')&
1335 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1336 '" format="appended" offset="',offset,
'">'
1337 write(qunit,
'(a)')
'</DataArray>'
1338 offset=offset+lengthcc+size_int
1340 write(qunit,
'(a)')
'</CellData>'
1341 write(qunit,
'(a)')
'<Points>'
1342 write(qunit,
'(a,i16,a)') &
1343 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1345 offset=offset+length_coords+size_int
1346 write(qunit,
'(a)')
'</Points>'
1348 write(qunit,
'(a)')
'<Cells>'
1350 write(qunit,
'(a,i16,a)')&
1351 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>'
1352 offset=offset+length_conn+size_int
1354 write(qunit,
'(a,i16,a)') &
1355 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>'
1356 offset=offset+length_offsets+size_int
1358 write(qunit,
'(a,i16,a)') &
1359 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>'
1360 offset=offset+size_int+nc*size_int
1361 write(qunit,
'(a)')
'</Cells>'
1362 write(qunit,
'(a)')
'</Piece>'
1368 if(.not. morton_aim(morton_no)) cycle
1369 if(cell_corner)
then
1371 write(qunit,
'(a,i7,a,i7,a)') &
1372 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1373 write(qunit,
'(a)')
'<PointData>'
1378 write(qunit,
'(a,a,a,i16,a)')&
1379 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1380 '" format="appended" offset="',offset,
'">'
1381 write(qunit,
'(a)')
'</DataArray>'
1382 offset=offset+length+size_int
1384 write(qunit,
'(a)')
'</PointData>'
1385 write(qunit,
'(a)')
'<Points>'
1386 write(qunit,
'(a,i16,a)') &
1387 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1389 offset=offset+length_coords+size_int
1390 write(qunit,
'(a)')
'</Points>'
1393 write(qunit,
'(a,i7,a,i7,a)') &
1394 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1395 write(qunit,
'(a)')
'<CellData>'
1400 write(qunit,
'(a,a,a,i16,a)')&
1401 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1402 '" format="appended" offset="',offset,
'">'
1403 write(qunit,
'(a)')
'</DataArray>'
1404 offset=offset+lengthcc+size_int
1406 write(qunit,
'(a)')
'</CellData>'
1407 write(qunit,
'(a)')
'<Points>'
1408 write(qunit,
'(a,i16,a)') &
1409 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1411 offset=offset+length_coords+size_int
1412 write(qunit,
'(a)')
'</Points>'
1414 write(qunit,
'(a)')
'<Cells>'
1416 write(qunit,
'(a,i16,a)')&
1417 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>'
1418 offset=offset+length_conn+size_int
1420 write(qunit,
'(a,i16,a)') &
1421 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>'
1422 offset=offset+length_offsets+size_int
1424 write(qunit,
'(a,i16,a)') &
1425 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>'
1426 offset=offset+size_int+nc*size_int
1427 write(qunit,
'(a)')
'</Cells>'
1428 write(qunit,
'(a)')
'</Piece>'
1432 write(qunit,
'(a)')
'</UnstructuredGrid>'
1433 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
1435 open(qunit,file=filename,access=
'stream',form=
'unformatted',position=
'append')
1437 write(qunit) trim(buf)
1439 if(.not. morton_aim(morton_no)) cycle
1441 call calc_x(igrid,xc,xcc)
1442 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1443 ixc^l,ixcc^l,.true.)
1448 if(cell_corner)
then
1450 write(qunit) {(|}wc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
1452 write(qunit) lengthcc
1453 write(qunit) {(|}wcc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
1456 write(qunit) length_coords
1457 {
do ix^db=ixcmin^db,ixcmax^db \}
1459 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1461 write(qunit) x_vtk(k)
1464 write(qunit) length_conn
1466 {^ifoned
write(qunit)ix1-1,ix1 \}
1468 write(qunit)(ix2-1)*nxc1+ix1-1, &
1469 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1473 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1474 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1475 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1476 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1477 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1478 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1479 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1480 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1483 write(qunit) length_offsets
1485 write(qunit) icel*(2**^nd)
1487 {^ifoned vtk_type=3 \}
1488 {^iftwod vtk_type=8 \}
1489 {^ifthreed vtk_type=11 \}
1490 write(qunit) size_int*nc
1492 write(qunit) vtk_type
1495 allocate(intstatus(mpi_status_size,1))
1497 ixccmin^d=ixmlo^d; ixccmax^d=ixmhi^d;
1498 ixcmin^d=ixmlo^d-1; ixcmax^d=ixmhi^d;
1500 do morton_no=morton_start(ipe),morton_stop(ipe)
1501 if(.not. morton_aim(morton_no)) cycle
1503 call mpi_recv(xc_tmp,1,type_block_xc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1504 if(cell_corner)
then
1505 call mpi_recv(wc_tmp,1,type_block_wc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1507 call mpi_recv(wcc_tmp,1,type_block_wcc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
1511 if(.not.w_write(iw)) cycle
1513 if(cell_corner)
then
1515 write(qunit) {(|}wc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
1517 write(qunit) lengthcc
1518 write(qunit) {(|}wcc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
1521 write(qunit) length_coords
1522 {
do ix^db=ixcmin^db,ixcmax^db \}
1524 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1526 write(qunit) x_vtk(k)
1529 write(qunit) length_conn
1531 {^ifoned
write(qunit)ix1-1,ix1 \}
1533 write(qunit)(ix2-1)*nxc1+ix1-1, &
1534 (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
1538 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
1539 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1540 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1541 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
1542 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
1543 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
1544 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
1545 ix3*nxc2*nxc1+ ix2*nxc1+ix1
1548 write(qunit) length_offsets
1550 write(qunit) icel*(2**^nd)
1552 {^ifoned vtk_type=3 \}
1553 {^iftwod vtk_type=8 \}
1554 {^ifthreed vtk_type=11 \}
1555 write(qunit) size_int*nc
1557 write(qunit) vtk_type
1563 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
1564 write(qunit,
'(a)')
'</AppendedData>'
1565 write(qunit,
'(a)')
'</VTKFile>'
1567 deallocate(intstatus)
1569 deallocate(morton_aim,morton_aim_p)
1571 call mpi_barrier(icomm,ierrmpi)
1863 integer,
intent(in) :: qunit
1865 double precision :: x_VTK(1:3)
1866 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP,xC_TMP_recv
1867 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP,xCC_TMP_recv
1868 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1869 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1870 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP,wC_TMP_recv
1871 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP,wCC_TMP_recv
1872 double precision,
dimension(0:nw+nwauxio) :: normconv
1873 integer:: igrid,iigrid,level,ixC^L,ixCC^L
1874 integer:: NumGridsOnLevel(1:nlevelshi)
1875 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,nc,np,ix^D
1877 integer :: itag,ipe,Morton_no,siz_ind
1878 integer :: ind_send(4*^ND),ind_recv(4*^ND)
1879 integer :: levmin_recv,levmax_recv,level_recv,igrid_recv,ixrvC^L,ixrvCC^L
1880 integer,
allocatable :: intstatus(:,:)
1881 logical :: fileopen,conv_grid,cond_grid_recv
1882 character(len=80):: filename
1883 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
1884 character(len=1024) :: outfilehead
1887 inquire(qunit,opened=fileopen)
1888 if(.not.fileopen)
then
1892 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu"
1894 open(qunit,file=filename,status=
'unknown',form=
'formatted')
1897 write(qunit,
'(a)')
'<?xml version="1.0"?>'
1898 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
1899 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
1900 write(qunit,
'(a)')
'<UnstructuredGrid>'
1901 write(qunit,
'(a)')
'<FieldData>'
1902 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
1903 'NumberOfTuples="1" format="ascii">'
1905 write(qunit,
'(a)')
'</DataArray>'
1906 write(qunit,
'(a)')
'</FieldData>'
1911 nx^d=ixmhi^d-ixmlo^d+1;
1933 call mpi_send(igrid,1,mpi_integer, 0,itag,
icomm,
ierrmpi)
1940 conv_grid=({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
1942 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.})
1944 call mpi_send(conv_grid,1,mpi_logical,0,itag,
icomm,
ierrmpi)
1946 if (.not.conv_grid) cycle
1947 call calc_x(igrid,xc,xcc)
1948 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1949 ixc^l,ixcc^l,.true.)
1952 ind_send=(/ ixc^l,ixcc^l /)
1954 call mpi_send(ind_send,siz_ind,mpi_integer, 0,itag,
icomm,
ierrmpi)
1955 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,
icomm,
ierrmpi)
1962 call write_vtk(qunit,ixg^
ll,ixc^l,ixcc^l,igrid,nc,np,nx^d,nxc^d,&
1963 normconv,wnamei,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp)
1969 allocate(intstatus(mpi_status_size,1))
1973 call mpi_recv(levmin_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
1976 call mpi_recv(levmax_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
1978 do level=levmin_recv,levmax_recv
1982 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
1984 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
1985 if (level_recv/=level) cycle
1986 call mpi_recv(cond_grid_recv,1,mpi_logical, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
1987 if(.not.cond_grid_recv)cycle
1990 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
1991 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
1992 ixrvccmin^d=ind_recv(2*^nd+^d);ixrvccmax^d=ind_recv(3*^nd+^d);
1993 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2000 call write_vtk(qunit,ixg^
ll,ixrvc^l,ixrvcc^l,igrid_recv,&
2001 nc,np,nx^d,nxc^d,normconv,wnamei,&
2002 xc_tmp_recv,xcc_tmp_recv,wc_tmp_recv,wcc_tmp_recv)
2007 write(qunit,
'(a)')
'</UnstructuredGrid>'
2008 write(qunit,
'(a)')
'</VTKFile>'
2013 if(
mype==0)
deallocate(intstatus)
2253 integer,
intent(in) :: qunit
2255 double precision :: x_TEC(ndim), w_TEC(nw+nwauxio)
2256 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP,xC_TMP_recv
2257 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP,xCC_TMP_recv
2258 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
2259 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
2260 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP,wC_TMP_recv
2261 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP,wCC_TMP_recv
2262 double precision,
dimension(0:nw+nwauxio) :: normconv
2263 integer:: igrid,iigrid,level,igonlevel,iw,idim,ix^D
2264 integer:: NumGridsOnLevel(1:nlevelshi)
2265 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,ixC^L,ixCC^L
2266 integer :: nodesonlevelmype,elemsonlevelmype
2267 integer :: nodes, elems
2268 integer,
allocatable :: intstatus(:,:)
2269 integer :: itag,Morton_no,ipe,levmin_recv,levmax_recv,igrid_recv,level_recv
2270 integer :: ixrvC^L,ixrvCC^L
2271 integer :: ind_send(2*^ND),ind_recv(2*^ND),siz_ind,igonlevel_recv
2272 integer :: NumGridsOnLevel_mype(1:nlevelshi,0:npe-1)
2274 logical :: fileopen,first
2275 character(len=80) :: filename
2276 character(len=1024) :: tecplothead
2277 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
2278 character(len=1024) :: outfilehead
2280 if(nw/=count(
w_write(1:nw)))
then
2281 if(
mype==0) print *,
'tecplot_mpi does not use w_write=F'
2282 call mpistop(
'w_write, tecplot')
2286 if(
mype==0) print *,
'tecplot_mpi with nocartesian'
2289 master_cpu_open :
if (
mype == 0)
then
2290 inquire(qunit,opened=fileopen)
2291 if (.not.fileopen)
then
2295 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".plt"
2296 open(qunit,file=filename,status=
'unknown')
2299 write(tecplothead,
'(a)')
"VARIABLES = "//trim(outfilehead)
2300 write(qunit,
'(a)') tecplothead(1:len_trim(tecplothead))
2301 end if master_cpu_open
2304 numgridsonlevel(1:nlevelshi)=0
2306 numgridsonlevel(level)=0
2310 numgridsonlevel(level)=numgridsonlevel(level)+1
2312 numgridsonlevel_mype(level,0:npe-1)=0
2313 numgridsonlevel_mype(level,
mype) = numgridsonlevel(level)
2314 call mpi_allreduce(mpi_in_place,numgridsonlevel_mype(level,0:npe-1),npe,mpi_integer,&
2316 call mpi_allreduce(mpi_in_place,numgridsonlevel(level),1,mpi_integer,mpi_sum, &
2320 nx^d=ixmhi^d-ixmlo^d+1;
2323 if(
mype==0.and.npe>1)
allocate(intstatus(mpi_status_size,1))
2330 nodes=nodes + numgridsonlevel(level)*{nxc^d*}
2331 elems=elems + numgridsonlevel(level)*{nx^d*}
2334 if (
mype==0)
write(qunit,
"(a,i7,a,1pe12.5,a)") &
2335 'ZONE T="all levels", I=',elems, &
2341 call calc_x(igrid,xc,xcc)
2342 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,ixc^l,ixcc^l,.true.)
2344 {
do ix^db=ixccmin^db,ixccmax^db\}
2345 x_tec(1:ndim)=xcc_tmp(ix^d,1:ndim)*normconv(0)
2346 w_tec(1:nw+nwauxio)=wcc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2347 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2349 else if (mype/=0)
then
2351 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2352 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision,0,itag,icomm,ierrmpi)
2353 call mpi_send(wcc_tmp,1,type_block_wcc_io, 0,itag,icomm,ierrmpi)
2354 call mpi_send(xcc_tmp,1,type_block_xcc_io, 0,itag,icomm,ierrmpi)
2359 do morton_no=morton_start(ipe),morton_stop(ipe)
2361 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2362 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,&
2363 itag,icomm,intstatus(:,1),ierrmpi)
2364 call mpi_recv(wcc_tmp_recv,1,type_block_wcc_io, ipe,itag,&
2365 icomm,intstatus(:,1),ierrmpi)
2366 call mpi_recv(xcc_tmp_recv,1,type_block_xcc_io, ipe,itag,&
2367 icomm,intstatus(:,1),ierrmpi)
2368 {
do ix^db=ixccmin^db,ixccmax^db\}
2369 x_tec(1:ndim)=xcc_tmp_recv(ix^d,1:ndim)*normconv(0)
2370 w_tec(1:nw+nwauxio)=wcc_tmp_recv(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2371 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2380 itag=1000*morton_stop(mype)
2381 call mpi_send(levmin,1,mpi_integer, 0,itag,icomm,ierrmpi)
2382 itag=2000*morton_stop(mype)
2383 call mpi_send(levmax,1,mpi_integer, 0,itag,icomm,ierrmpi)
2386 do level=levmin,levmax
2387 nodesonlevelmype=numgridsonlevel_mype(level,mype)*{nxc^d*}
2388 elemsonlevelmype=numgridsonlevel_mype(level,mype)*{nx^d*}
2389 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
2390 elemsonlevel=numgridsonlevel(level)*{nx^d*}
2397 select case(convert_type)
2402 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2403 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
2404 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2405 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=POINT, ZONETYPE=', &
2406 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2407 do morton_no=morton_start(mype),morton_stop(mype)
2408 igrid = sfc_to_igrid(morton_no)
2411 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2413 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2415 if (node(plevel_,igrid)/=level) cycle
2416 call calc_x(igrid,xc,xcc)
2417 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2418 ixc^l,ixcc^l,.true.)
2421 ind_send=(/ ixc^l /)
2423 call mpi_send(ind_send,siz_ind, mpi_integer, 0,itag,icomm,ierrmpi)
2424 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,icomm,ierrmpi)
2426 call mpi_send(wc_tmp,1,type_block_wc_io, 0,itag,icomm,ierrmpi)
2427 call mpi_send(xc_tmp,1,type_block_xc_io, 0,itag,icomm,ierrmpi)
2429 {
do ix^db=ixcmin^db,ixcmax^db\}
2430 x_tec(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0)
2431 w_tec(1:nw+nwauxio)=wc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2432 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2436 case(
'tecplotCCmpi')
2442 if(ndim+nw+nwauxio>99)
call mpistop(
"adjust format specification in writeout")
2443 if(nw+nwauxio==1)
then
2446 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2447 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
2448 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2449 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2450 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
2451 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2453 if(ndim+nw+nwauxio<10)
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,i1,a,a)") &
2457 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2458 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2459 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2460 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2462 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2463 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
2464 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2465 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2466 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2467 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2473 do morton_no=morton_start(mype),morton_stop(mype)
2474 igrid = sfc_to_igrid(morton_no)
2477 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2479 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2481 if (node(plevel_,igrid)/=level) cycle
2482 call calc_x(igrid,xc,xcc)
2483 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2486 ind_send=(/ ixc^l /)
2489 call mpi_send(ind_send,siz_ind, mpi_integer, 0,itag,icomm,ierrmpi)
2490 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,icomm,ierrmpi)
2491 call mpi_send(xc_tmp,1,type_block_xc_io, 0,itag,icomm,ierrmpi)
2493 write(qunit,fmt=
"(100(e14.6))") xc_tmp(ixc^s,idim)*normconv(0)
2498 do morton_no=morton_start(mype),morton_stop(mype)
2499 igrid = sfc_to_igrid(morton_no)
2501 itag=morton_no*(ndim+iw)
2502 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2503 itag=igrid*(ndim+iw)
2504 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2506 if (node(plevel_,igrid)/=level) cycle
2507 call calc_x(igrid,xc,xcc)
2508 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2509 ixc^l,ixcc^l,.true.)
2511 ind_send=(/ ixcc^l /)
2513 itag=igrid*(ndim+iw)
2514 call mpi_send(ind_send,siz_ind, mpi_integer, 0,itag,icomm,ierrmpi)
2515 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,icomm,ierrmpi)
2516 call mpi_send(wcc_tmp,1,type_block_wcc_io, 0,itag,icomm,ierrmpi)
2518 write(qunit,fmt=
"(100(e14.6))") wcc_tmp(ixcc^s,iw)*normconv(iw)
2523 call mpistop(
'no such tecplot type')
2527 do morton_no=morton_start(mype),morton_stop(mype)
2528 igrid = sfc_to_igrid(morton_no)
2531 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2533 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2535 if(node(plevel_,igrid)/=level) cycle
2536 igonlevel=igonlevel+1
2539 call mpi_send(igonlevel,1,mpi_integer, 0,itag,icomm,ierrmpi)
2547 if(mype==0 .and.npe>1)
then
2549 itag=1000*morton_stop(ipe)
2550 call mpi_recv(levmin_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2551 itag=2000*morton_stop(ipe)
2552 call mpi_recv(levmax_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2553 do level=levmin_recv,levmax_recv
2554 nodesonlevelmype=numgridsonlevel_mype(level,ipe)*{nxc^d*}
2555 elemsonlevelmype=numgridsonlevel_mype(level,ipe)*{nx^d*}
2556 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
2557 elemsonlevel=numgridsonlevel(level)*{nx^d*}
2558 select case(convert_type)
2563 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2564 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
2565 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2566 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=POINT, ZONETYPE=', &
2567 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2568 do morton_no=morton_start(ipe),morton_stop(ipe)
2570 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2572 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2573 if (level_recv/=level) cycle
2576 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,&
2577 icomm,intstatus(:,1),ierrmpi)
2578 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
2579 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2580 ,icomm,intstatus(:,1),ierrmpi)
2581 call mpi_recv(wc_tmp_recv,1,type_block_wc_io, ipe,itag,&
2582 icomm,intstatus(:,1),ierrmpi)
2583 call mpi_recv(xc_tmp_recv,1,type_block_xc_io, ipe,itag,&
2584 icomm,intstatus(:,1),ierrmpi)
2585 {
do ix^db=ixrvcmin^db,ixrvcmax^db\}
2586 x_tec(1:ndim)=xc_tmp_recv(ix^d,1:ndim)*normconv(0)
2587 w_tec(1:nw+nwauxio)=wc_tmp_recv(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2588 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2591 case(
'tecplotCCmpi')
2597 if(ndim+nw+nwauxio>99)
call mpistop(
"adjust format specification in writeout")
2598 if(nw+nwauxio==1)
then
2601 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2602 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
2603 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2604 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2605 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
2606 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2608 if(ndim+nw+nwauxio<10)
then
2610 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2611 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,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,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2615 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2617 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2618 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
2619 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2620 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2621 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2622 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2627 do morton_no=morton_start(ipe),morton_stop(ipe)
2629 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2630 itag=igrid_recv*idim
2631 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2632 if (level_recv/=level) cycle
2634 itag=igrid_recv*idim
2635 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2636 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
2637 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2638 ,icomm,intstatus(:,1),ierrmpi)
2639 call mpi_recv(xc_tmp_recv,1,type_block_xc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2640 write(qunit,fmt=
"(100(e14.6))") xc_tmp_recv(ixrvc^s,idim)*normconv(0)
2644 do morton_no=morton_start(ipe),morton_stop(ipe)
2645 itag=morton_no*(ndim+iw)
2646 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2647 itag=igrid_recv*(ndim+iw)
2648 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2649 if (level_recv/=level) cycle
2651 itag=igrid_recv*(ndim+iw)
2652 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2653 ixrvccmin^d=ind_recv(^d);ixrvccmax^d=ind_recv(^nd+^d);
2654 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2655 ,icomm,intstatus(:,1),ierrmpi)
2656 call mpi_recv(wcc_tmp_recv,1,type_block_wcc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2657 write(qunit,fmt=
"(100(e14.6))") wcc_tmp_recv(ixrvcc^s,iw)*normconv(iw)
2661 call mpistop(
'no such tecplot type')
2664 do morton_no=morton_start(ipe),morton_stop(ipe)
2666 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2668 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2669 if (level_recv/=level) cycle
2671 call mpi_recv(igonlevel_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2680 call mpi_barrier(icomm,ierrmpi)
2681 if(mype==0)
deallocate(intstatus)
2961 integer,
intent(in) :: qunit
2963 double precision :: x_VTK(1:3)
2964 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC_TMP
2965 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC_TMP
2966 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC_TMP
2967 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC_TMP
2968 double precision,
dimension(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:nw&
+nwauxio) :: w
2969 double precision :: normconv(0:nw+nwauxio)
2970 double precision :: zlength
2971 double precision ::d3grid,zlengsc,zgridsc
2973 integer:: igrid,iigrid,level,igonlevel,icel,ixCmin1,ixCmin2,&
2974 ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,ixCCmax1,&
2976 integer:: NumGridsOnLevel(1:nlevelshi)
2977 integer :: nx1,nx2,nx3,nxC1,nxC2,nxC3,nodesonlevel,elemsonlevel,nc,np,&
2978 VTK_type,ix1,ix2,ix3
2979 integer :: size_length,recsep,k,iw
2980 integer :: length,lengthcc,offset_points,offset_cells, length_coords,&
2981 length_conn,length_offsets
2982 integer :: i3grid,n3grid
2985 character(len=6):: bufform
2986 character(len=80):: filename
2987 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:3+nw+nwauxio)
2988 character(len=1024) :: outfilehead
2991 if(
mype==0) print *,
'unstructuredvtkB23 not parallel, use vtumpi'
2992 call mpistop(
'npe>1, unstructuredvtkB23')
2998 inquire(qunit,opened=fileopen)
2999 if(.not.fileopen)
then
3003 open(qunit,file=filename,status=
'replace')
3007 write(qunit,
'(a)')
'<?xml version="1.0"?>'
3008 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
3009 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
3010 write(qunit,
'(a)')
'<UnstructuredGrid>'
3011 write(qunit,
'(a)')
'<FieldData>'
3012 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
3013 'NumberOfTuples="1" format="ascii">'
3015 write(qunit,
'(a)')
'</DataArray>'
3016 write(qunit,
'(a)')
'</FieldData>'
3019 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3020 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3025 lengthcc=nc*size_real
3027 length_coords=3*length
3028 length_conn=2**3*size_int*nc
3029 length_offsets=nc*size_int
3034 zlengsc=2.d0*zgridsc
3035 zlength=zlengsc*(xprobmax1-xprobmin1)
3038 do iigrid=1,igridstail; igrid=igrids(iigrid);
3043 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3046 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3049 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3050 n3grid=nint(zlength/d3grid)
3055 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3056 '" NumberOfCells="',nc,
'">'
3057 write(qunit,
'(a)')
'<PointData>'
3060 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3061 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3062 write(qunit,
'(a)')
'</DataArray>'
3063 offset=offset+length+size_int
3066 do iw=nw+1,nw+nwauxio
3067 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3068 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3069 write(qunit,
'(a)')
'</DataArray>'
3070 offset=offset+length+size_int
3073 write(qunit,
'(a)')
'</PointData>'
3075 write(qunit,
'(a)')
'<Points>'
3076 write(qunit,
'(a,i16,a)') &
3077 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3080 offset=offset+length_coords+size_int
3081 write(qunit,
'(a)')
'</Points>'
3084 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3085 '" NumberOfCells="',nc,
'">'
3086 write(qunit,
'(a)')
'<CellData>'
3089 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3090 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3091 write(qunit,
'(a)')
'</DataArray>'
3092 offset=offset+lengthcc+size_int
3095 do iw=nw+1,nw+nwauxio
3096 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3097 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3098 write(qunit,
'(a)')
'</DataArray>'
3099 offset=offset+lengthcc+size_int
3102 write(qunit,
'(a)')
'</CellData>'
3103 write(qunit,
'(a)')
'<Points>'
3104 write(qunit,
'(a,i16,a)') &
3105 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3108 offset=offset+length_coords+size_int
3109 write(qunit,
'(a)')
'</Points>'
3111 write(qunit,
'(a)')
'<Cells>'
3113 write(qunit,
'(a,i16,a)')&
3114 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',&
3116 offset=offset+length_conn+size_int
3118 write(qunit,
'(a,i16,a)') &
3119 '<DataArray type="Int32" Name="offsets" format="appended" offset="',&
3121 offset=offset+length_offsets+size_int
3123 write(qunit,
'(a,i16,a)') &
3124 '<DataArray type="Int32" Name="types" format="appended" offset="',&
3126 offset=offset+size_length+nc*size_int
3127 write(qunit,
'(a)')
'</Cells>'
3128 write(qunit,
'(a)')
'</Piece>'
3135 write(qunit,
'(a)')
'</UnstructuredGrid>'
3136 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
3138 open(qunit,file=filename,form=
'unformatted',access=
'stream',status=
'old',position=
'append')
3140 write(qunit) trim(buffer)
3144 do iigrid=1,igridstail; igrid=igrids(iigrid);
3149 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3152 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3155 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3156 n3grid=nint(zlength/d3grid)
3161 ixglo1,ixglo2,ixghi1,ixghi2,ps(igrid)%w,ps(igrid)%x)
3165 do ix3=ixglo1,ixghi1
3166 w(ixglo1:ixghi1,ixglo2:ixghi2,ix3,1:nw)=ps(igrid)%w(ixglo1:ixghi1,&
3170 call calc_grid23(qunit,igrid,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
3171 ixcmin1,ixcmin2,ixcmin3,ixcmax1,ixcmax2,ixcmax3,ixccmin1,ixccmin2,&
3172 ixccmin3,ixccmax1,ixccmax2,ixccmax3,.true.,i3grid,d3grid,w,zlength,zgridsc)
3178 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3179 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3181 write(qunit) lengthcc
3182 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3183 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3188 do iw=nw+1,nw+nwauxio
3192 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3193 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3195 write(qunit) lengthcc
3196 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3197 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3202 write(qunit) length_coords
3203 do ix3=ixcmin3,ixcmax3
3204 do ix2=ixcmin2,ixcmax2
3205 do ix1=ixcmin1,ixcmax1
3207 x_vtk(1:3)=xc_tmp(ix1,ix2,ix3,1:3)*normconv(0);
3209 write(qunit) real(x_vtk(k))
3214 write(qunit) length_conn
3219 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3220 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3221 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3222 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
3223 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
3224 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3225 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3226 ix3*nxc2*nxc1+ ix2*nxc1+ix1
3230 write(qunit) length_offsets
3232 write(qunit) icel*(2**3)
3235 write(qunit) size_int*nc
3237 write(qunit) vtk_type
3246 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
3248 write(qunit,
'(a)')
'</AppendedData>'
3249 write(qunit,
'(a)')
'</VTKFile>'
3263 integer,
intent(in) :: qunit
3265 double precision :: x_VTK(1:3)
3266 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC_TMP
3267 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC_TMP
3268 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC_TMP
3269 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC_TMP
3270 double precision,
dimension(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:nw&
+nwauxio) :: w
3271 double precision :: normconv(0:nw+nwauxio)
3272 double precision ::d3grid,zlengsc,zgridsc
3273 double precision :: zlength
3275 integer:: igrid,iigrid,level,igonlevel,icel,ixCmin1,ixCmin2,&
3276 ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,ixCCmax1,&
3278 integer:: NumGridsOnLevel(1:nlevelshi)
3279 integer :: nx1,nx2,nx3,nxC1,nxC2,nxC3,nodesonlevel,elemsonlevel,nc,np,&
3280 VTK_type,ix1,ix2,ix3
3281 integer :: size_length,recsep,k,iw
3282 integer :: length,lengthcc,offset_points,offset_cells, length_coords,&
3283 length_conn,length_offsets
3284 integer :: i3grid,n3grid
3286 character(len=80):: filename
3287 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:3+nw+nwauxio)
3288 character(len=1024) :: outfilehead
3290 character(len=6):: bufform
3293 if(
mype==0) print *,
'unstructuredvtkBsym23 not parallel, use vtumpi'
3294 call mpistop(
'npe>1, unstructuredvtkBsym23')
3301 inquire(qunit,opened=fileopen)
3302 if(.not.fileopen)
then
3306 open(qunit,file=filename,status=
'unknown')
3311 write(qunit,
'(a)')
'<?xml version="1.0"?>'
3312 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
3313 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
3314 write(qunit,
'(a)')
'<UnstructuredGrid>'
3315 write(qunit,
'(a)')
'<FieldData>'
3316 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
3317 'NumberOfTuples="1" format="ascii">'
3319 write(qunit,
'(a)')
'</DataArray>'
3320 write(qunit,
'(a)')
'</FieldData>'
3323 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3324 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3329 lengthcc=nc*size_real
3331 length_coords=3*length
3332 length_conn=2**3*size_int*nc
3333 length_offsets=nc*size_int
3339 zlength=zlengsc*(xprobmax1-xprobmin1)
3342 do iigrid=1,igridstail; igrid=igrids(iigrid);
3347 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3350 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3353 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3354 n3grid=nint(zlength/d3grid)
3360 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3361 '" NumberOfCells="',nc,
'">'
3362 write(qunit,
'(a)')
'<PointData>'
3365 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3366 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3367 write(qunit,
'(a)')
'</DataArray>'
3368 offset=offset+length+size_length
3371 do iw=nw+1,nw+nwauxio
3372 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3373 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3374 write(qunit,
'(a)')
'</DataArray>'
3375 offset=offset+length+size_length
3378 write(qunit,
'(a)')
'</PointData>'
3379 write(qunit,
'(a)')
'<Points>'
3380 write(qunit,
'(a,i16,a)') &
3381 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3384 offset=offset+length_coords+size_length
3385 write(qunit,
'(a)')
'</Points>'
3388 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3389 '" NumberOfCells="',nc,
'">'
3390 write(qunit,
'(a)')
'<CellData>'
3393 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3394 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3395 write(qunit,
'(a)')
'</DataArray>'
3396 offset=offset+lengthcc+size_length
3399 do iw=nw+1,nw+nwauxio
3400 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3401 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3402 write(qunit,
'(a)')
'</DataArray>'
3403 offset=offset+lengthcc+size_length
3406 write(qunit,
'(a)')
'</CellData>'
3408 write(qunit,
'(a)')
'<Points>'
3409 write(qunit,
'(a,i16,a)') &
3410 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3413 offset=offset+length_coords+size_length
3414 write(qunit,
'(a)')
'</Points>'
3416 write(qunit,
'(a)')
'<Cells>'
3418 write(qunit,
'(a,i16,a)')&
3419 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',&
3421 offset=offset+length_conn+size_length
3423 write(qunit,
'(a,i16,a)') &
3424 '<DataArray type="Int32" Name="offsets" format="appended" offset="',&
3426 offset=offset+length_offsets+size_length
3428 write(qunit,
'(a,i16,a)') &
3429 '<DataArray type="Int32" Name="types" format="appended" offset="',&
3431 offset=offset+size_length+nc*size_int
3432 write(qunit,
'(a)')
'</Cells>'
3433 write(qunit,
'(a)')
'</Piece>'
3439 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3440 '" NumberOfCells="',nc,
'">'
3441 write(qunit,
'(a)')
'<PointData>'
3444 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3445 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3446 write(qunit,
'(a)')
'</DataArray>'
3447 offset=offset+length+size_length
3450 do iw=nw+1,nw+nwauxio
3451 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3452 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3453 write(qunit,
'(a)')
'</DataArray>'
3454 offset=offset+length+size_length
3457 write(qunit,
'(a)')
'</PointData>'
3458 write(qunit,
'(a)')
'<Points>'
3459 write(qunit,
'(a,i16,a)') &
3460 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3463 offset=offset+length_coords+size_length
3464 write(qunit,
'(a)')
'</Points>'
3467 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3468 '" NumberOfCells="',nc,
'">'
3469 write(qunit,
'(a)')
'<CellData>'
3472 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3473 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3474 write(qunit,
'(a)')
'</DataArray>'
3475 offset=offset+lengthcc+size_length
3478 do iw=nw+1,nw+nwauxio
3479 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3480 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3481 write(qunit,
'(a)')
'</DataArray>'
3482 offset=offset+lengthcc+size_length
3485 write(qunit,
'(a)')
'</CellData>'
3486 write(qunit,
'(a)')
'<Points>'
3487 write(qunit,
'(a,i16,a)') &
3488 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3491 offset=offset+length_coords+size_length
3492 write(qunit,
'(a)')
'</Points>'
3494 write(qunit,
'(a)')
'<Cells>'
3496 write(qunit,
'(a,i16,a)')&
3497 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',&
3499 offset=offset+length_conn+size_length
3501 write(qunit,
'(a,i16,a)') &
3502 '<DataArray type="Int32" Name="offsets" format="appended" offset="',&
3504 offset=offset+length_offsets+size_length
3506 write(qunit,
'(a,i16,a)') &
3507 '<DataArray type="Int32" Name="types" format="appended" offset="',&
3509 offset=offset+size_length+nc*size_int
3510 write(qunit,
'(a)')
'</Cells>'
3511 write(qunit,
'(a)')
'</Piece>'
3519 write(qunit,
'(a)')
'</UnstructuredGrid>'
3520 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
3522 open(qunit,file=filename,form=
'unformatted',access=
'stream',status=
'old',position=
'append')
3524 write(qunit) trim(buffer)
3527 do iigrid=1,igridstail; igrid=igrids(iigrid);
3532 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3535 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3538 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3539 n3grid=nint(zlength/d3grid)
3544 ixglo1,ixglo2,ixghi1,ixghi2,ps(igrid)%w,ps(igrid)%x)
3548 do ix3=ixglo1,ixghi1
3549 w(ixglo1:ixghi1,ixglo2:ixghi2,ix3,1:nw)=ps(igrid)%w(ixglo1:ixghi1,&
3553 call calc_grid23(qunit,igrid,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
3554 ixcmin1,ixcmin2,ixcmin3,ixcmax1,ixcmax2,ixcmax3,ixccmin1,ixccmin2,&
3555 ixccmin3,ixccmax1,ixccmax2,ixccmax3,.true.,i3grid,d3grid,w,zlength,zgridsc)
3562 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3563 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3565 write(qunit) lengthcc
3566 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3567 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3572 do iw=nw+1,nw+nwauxio
3576 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3577 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3579 write(qunit) lengthcc
3580 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3581 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3586 write(qunit) length_coords
3587 do ix3=ixcmin3,ixcmax3
3588 do ix2=ixcmin2,ixcmax2
3589 do ix1=ixcmin1,ixcmax1
3591 x_vtk(1:3)=xc_tmp(ix1,ix2,ix3,1:3)*normconv(0);
3593 write(qunit) real(x_vtk(k))
3598 write(qunit) length_conn
3603 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3604 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3605 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3606 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
3607 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
3608 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3609 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3610 ix3*nxc2*nxc1+ ix2*nxc1+ix1
3614 write(qunit) length_offsets
3616 write(qunit) icel*(2**3)
3619 write(qunit) size_int*nc
3621 write(qunit) vtk_type
3627 if(iw==2 .or. iw==4 .or. iw==7)
then
3628 wc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,iw)=&
3629 -wc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,iw)
3630 wcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,iw)=&
3631 -wcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,iw)
3636 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3637 =ixcmax1,ixcmin1,-1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3639 write(qunit) lengthcc
3640 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3641 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3646 do iw=nw+1,nw+nwauxio
3650 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3651 =ixcmax1,ixcmin1,-1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3653 write(qunit) lengthcc
3654 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3655 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3660 write(qunit) length_coords
3661 do ix3=ixcmin3,ixcmax3
3662 do ix2=ixcmin2,ixcmax2
3663 do ix1=ixcmax1,ixcmin1,-1
3665 x_vtk(1:3)=xc_tmp(ix1,ix2,ix3,1:3)*normconv(0);
3668 write(qunit) real(x_vtk(k))
3673 write(qunit) length_conn
3678 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3679 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3680 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3681 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
3682 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
3683 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3684 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3685 ix3*nxc2*nxc1+ ix2*nxc1+ix1
3689 write(qunit) length_offsets
3691 write(qunit) icel*(2**3)
3694 write(qunit) size_int*nc
3696 write(qunit) vtk_type
3705 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
3706 write(qunit,
'(a)')
'</AppendedData>'
3707 write(qunit,
'(a)')
'</VTKFile>'
3712 subroutine calc_grid23(qunit,igrid,xC_TMP,xCC_TMP,wC_TMP,wCC_TMP,normconv,&
3713 ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,&
3714 ixCCmax1,ixCCmax2,ixCCmax3,first,i3grid,d3grid,w,zlength,zgridsc)
3722 integer,
intent(in) :: qunit, igrid,i3grid
3723 logical,
intent(in) :: first
3725 double precision :: dx1,dx2,dx3,d3grid,zlength,zgridsc
3726 double precision :: ldw(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1),&
3727 dwC(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1)
3728 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC
3729 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC
3730 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC
3731 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC
3732 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC_TMP
3733 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC_TMP
3734 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC_TMP
3735 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC_TMP
3736 double precision,
dimension(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:nw&
+nwauxio) :: w
3737 double precision,
dimension(0:nw+nwauxio) :: normconv
3738 integer :: nx1,nx2,nx3, nxC1,nxC2,nxC3, ix1,ix2,ix3, ix, iw, level, idir
3739 integer :: ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,&
3740 ixCCmin2,ixCCmin3,ixCCmax1,ixCCmax2,ixCCmax3,nxCC1,nxCC2,nxCC3
3741 integer :: idims,jxCmin1,jxCmin2,jxCmin3,jxCmax1,jxCmax2,jxCmax3
3742 logical,
save :: subfirst=.true.
3745 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3747 dx1=
dx(1,level);dx2=
dx(2,level);dx3=zgridsc*
dx(1,level);
3762 nxcc1=nx1;nxcc2=nx2;nxcc3=nx3;
3763 ixccmin1=ixmlo1;ixccmin2=ixmlo2;ixccmin3=ixmlo1; ixccmax1=ixmhi1
3764 ixccmax2=ixmhi2;ixccmax3=ixmhi1;
3765 do ix=ixccmin1,ixccmax1
3766 xcc(ix,ixccmin2:ixccmax2,ixccmin3:ixccmax3,1)=
rnode(rpxmin1_,igrid)&
3767 +(dble(ix-ixccmin1)+half)*dx1
3769 do ix=ixccmin2,ixccmax2
3770 xcc(ixccmin1:ixccmax1,ix,ixccmin3:ixccmax3,2)=
rnode(rpxmin2_,igrid)&
3771 +(dble(ix-ixccmin2)+half)*dx2
3773 do ix=ixccmin3,ixccmax3
3774 xcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ix,3)=-zlength/two+&
3775 dble(i3grid-1)*d3grid+(dble(ix-ixccmin3)+half)*dx3
3779 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3780 ixcmin1=ixmlo1-1;ixcmin2=ixmlo2-1;ixcmin3=ixmlo1-1; ixcmax1=ixmhi1
3781 ixcmax2=ixmhi2;ixcmax3=ixmhi1;
3782 do ix=ixcmin1,ixcmax1
3783 xc(ix,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1)=
rnode(rpxmin1_,igrid)&
3784 +dble(ix-ixcmin1)*dx1
3786 do ix=ixcmin2,ixcmax2
3787 xc(ixcmin1:ixcmax1,ix,ixcmin3:ixcmax3,2)=
rnode(rpxmin2_,igrid)&
3788 +dble(ix-ixcmin2)*dx2
3790 do ix=ixcmin3,ixcmax3
3791 xc(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ix,3)=-zlength/two+&
3792 dble(i3grid-1)*d3grid+dble(ix-ixcmin3)*dx3
3802 jxcmin1=ixghi1+1-
nghostcells;jxcmin2=ixglo2;jxcmin3=ixglo1;
3803 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixghi1;
3804 do ix1=jxcmin1,jxcmax1
3805 w(ix1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw) = w(jxcmin1&
3806 -1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw)
3808 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixglo1;
3809 jxcmax1=ixglo1-1+
nghostcells;jxcmax2=ixghi2;jxcmax3=ixghi1;
3810 do ix1=jxcmin1,jxcmax1
3811 w(ix1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw) = w(jxcmax1&
3812 +1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw)
3815 jxcmin1=ixglo1;jxcmin2=ixghi2+1-
nghostcells;jxcmin3=ixglo1;
3816 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixghi1;
3817 do ix2=jxcmin2,jxcmax2
3818 w(jxcmin1:jxcmax1,ix2,jxcmin3:jxcmax3,nw-nwextra+1:nw) &
3819 = w(jxcmin1:jxcmax1,jxcmin2-1,jxcmin3:jxcmax3,nw-nwextra+1:nw)
3821 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixglo1;
3822 jxcmax1=ixghi1;jxcmax2=ixglo2-1+
nghostcells;jxcmax3=ixghi1;
3823 do ix2=jxcmin2,jxcmax2
3824 w(jxcmin1:jxcmax1,ix2,jxcmin3:jxcmax3,nw-nwextra+1:nw) &
3825 = w(jxcmin1:jxcmax1,jxcmax2+1,jxcmin3:jxcmax3,nw-nwextra+1:nw)
3828 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixghi1+1-
nghostcells;
3829 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixghi1;
3830 do ix3=jxcmin3,jxcmax3
3831 w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,ix3,nw-nwextra+1:nw) &
3832 = w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,jxcmin3-1,nw-nwextra+1:nw)
3834 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixglo1;
3835 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixglo1-1+
nghostcells;
3836 do ix3=jxcmin3,jxcmax3
3837 w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,ix3,nw-nwextra+1:nw) &
3838 = w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,jxcmax3+1,nw-nwextra+1:nw)
3853 +1,ixglo2+1,ixglo1+1,ixghi1-1,ixghi2-1,ixghi1-1,w,xcc,normconv)
3858 wcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,:)=w(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,:)
3860 do ix3=ixccmin3,ixccmax3
3861 do ix2=ixccmin2,ixccmax2
3862 do ix1=ixccmin1,ixccmax1
3863 wcc(ix1,ix2,ix3,iw_mag(:))=wcc(ix1,ix2,ix3,iw_mag(:))+ps(igrid)%B0(ix1,ix2,&
3870 do ix3=ixccmin3,ixccmax3
3871 do ix2=ixccmin2,ixccmax2
3872 do ix1=ixccmin1,ixccmax1
3873 wcc(ix1,ix2,ix3,iw_e)=w(ix1,ix2,ix3,iw_e) +half*sum(ps(igrid)%B0(ix1,&
3874 ix2,:,0)**2 ) + sum(w(ix1,ix2,ix3,&
3875 iw_mag(:))*ps(igrid)%B0(ix1,ix2,:,0))
3885 if (
b0field.and.iw>iw_mag(1)-1.and.iw<=iw_mag(
ndir))
then
3887 do ix3=ixcmin3,ixcmax3
3888 do ix2=ixcmin2,ixcmax2
3889 do ix1=ixcmin1,ixcmax1
3890 wc(ix1,ix2,ix3,iw)=sum(w(ix1:ix1+1,ix2:ix2+1,ix3,iw) &
3891 +ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3892 ,idir,0))/dble(2**3)+&
3893 sum(w(ix1:ix1+1,ix2:ix2+1,ix3+1,iw) &
3894 +ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3895 ,idir,0))/dble(2**3)
3900 do ix3=ixcmin3,ixcmax3
3901 do ix2=ixcmin2,ixcmax2
3902 do ix1=ixcmin1,ixcmax1
3903 wc(ix1,ix2,ix3,iw)=sum(w(ix1:ix1+1,ix2:ix2+1,ix3:ix3&
3911 do ix3=ixcmin3,ixcmax3
3912 do ix2=ixcmin2,ixcmax2
3913 do ix1=ixcmin1,ixcmax1
3914 wc(ix1,ix2,ix3,iw_e)=sum( w(ix1:ix1+1,ix2:ix2+1,ix3,iw_e) &
3915 +half*sum(ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3916 ,:,0)**2,dim=
ndim+1) + sum( w(ix1:ix1+1,ix2:ix2+1,ix3&
3917 ,iw_mag(:))*ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3918 ,:,0),dim=
ndim+1) ) /dble(2**3)+&
3919 sum( w(ix1:ix1+1,ix2:ix2+1,ix3+1,iw_e) &
3920 +half*sum(ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3921 ,:,0)**2,dim=
ndim+1) + sum( w(ix1:ix1+1,ix2:ix2+1,ix3&
3922 +1,iw_mag(:))*ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3923 ,:,0),dim=
ndim+1) ) /dble(2**3)
3930 xc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:3) &
3931 = xc(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:3)
3932 wc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:nw&
3933 +
nwauxio) = wc(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:nw&
3935 xcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,&
3936 1:3) = xcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,&
3937 ixccmin3:ixccmax3,1:3)
3938 wcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,1:nw&
3939 +
nwauxio) = wcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,&
3948 integer,
intent(in) :: qunit, igrid
3950 integer :: nx1,nx2,nx3, nxC1,nxC2,nxC3, ix1,ix2,ix3
3952 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3953 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3957 write(qunit,
'(8(i7,1x))')&
3958 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3959 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&