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
797 integer,
intent(in) :: qunit
799 double precision :: x_VTK(1:3)
800 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
801 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
802 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
803 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
804 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio):: wC_TMP
805 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
806 double precision :: normconv(0:nw+nwauxio)
807 integer,
allocatable :: intstatus(:,:)
809 integer :: itag,ipe,igrid,level,icel,ixC^L,ixCC^L,Morton_no,Morton_length
810 integer :: nx^D,nxC^D,nc,np,VTK_type,ix^D,filenr
812 integer:: length,lengthcc,length_coords,length_conn,length_offsets
814 character(len=80):: filename
815 character(len=19):: offset_char
816 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
817 character(len=1024) :: outfilehead
818 logical :: fileopen,cell_corner=.false.
819 logical,
allocatable :: Morton_aim(:),Morton_aim_p(:)
834 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
836 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then
837 morton_aim_p(morton_no)=.true.
841 call mpi_allreduce(morton_aim_p,morton_aim,morton_length,mpi_logical,mpi_lor,&
844 case(
'vtuB',
'vtuBmpi')
846 case(
'vtuBCC',
'vtuBCCmpi')
851 if(.not. morton_aim(morton_no)) cycle
854 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
868 inquire(qunit,opened=fileopen)
869 if(.not.fileopen)
then
873 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu"
875 open(qunit,file=filename,status=
'replace')
879 write(qunit,
'(a)')
'<?xml version="1.0"?>'
880 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
881 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
882 write(qunit,
'(a)')
'<UnstructuredGrid>'
883 write(qunit,
'(a)')
'<FieldData>'
884 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
885 'NumberOfTuples="1" format="ascii">'
887 write(qunit,
'(a)')
'</DataArray>'
888 write(qunit,
'(a)')
'</FieldData>'
891 nx^d=ixmhi^d-ixmlo^d+1;
896 lengthcc=nc*size_real
897 length_coords=3*length
898 length_conn=2**^nd*size_int*nc
899 length_offsets=nc*size_int
903 if(.not. morton_aim(morton_no)) cycle
906 write(qunit,
'(a,i7,a,i7,a)') &
907 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
908 write(qunit,
'(a)')
'<PointData>'
913 write(offset_char,
'(i19)') offset
914 write(qunit,
'(a,a,a,a,a)')&
915 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
916 '" format="appended" offset="',trim(adjustl(offset_char)),
'">'
917 write(qunit,
'(a)')
'</DataArray>'
918 offset=offset+length+size_int
920 write(qunit,
'(a)')
'</PointData>'
921 write(qunit,
'(a)')
'<Points>'
922 write(offset_char,
'(i19)') offset
923 write(qunit,
'(a,a,a)') &
924 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
926 offset=offset+length_coords+size_int
927 write(qunit,
'(a)')
'</Points>'
930 write(qunit,
'(a,i7,a,i7,a)') &
931 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
932 write(qunit,
'(a)')
'<CellData>'
937 write(offset_char,
'(i19)') offset
938 write(qunit,
'(a,a,a,a,a)')&
939 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
940 '" format="appended" offset="',trim(adjustl(offset_char)),
'">'
941 write(qunit,
'(a)')
'</DataArray>'
942 offset=offset+lengthcc+size_int
944 write(qunit,
'(a)')
'</CellData>'
945 write(qunit,
'(a)')
'<Points>'
946 write(offset_char,
'(i19)') offset
947 write(qunit,
'(a,a,a)') &
948 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
950 offset=offset+length_coords+size_int
951 write(qunit,
'(a)')
'</Points>'
953 write(qunit,
'(a)')
'<Cells>'
955 write(offset_char,
'(i19)') offset
956 write(qunit,
'(a,a,a)')&
957 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
958 offset=offset+length_conn+size_int
960 write(offset_char,
'(i19)') offset
961 write(qunit,
'(a,a,a)') &
962 '<DataArray type="Int32" Name="offsets" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
963 offset=offset+length_offsets+size_int
965 write(offset_char,
'(i19)') offset
966 write(qunit,
'(a,a,a)') &
967 '<DataArray type="Int32" Name="types" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
968 offset=offset+size_int+nc*size_int
969 write(qunit,
'(a)')
'</Cells>'
970 write(qunit,
'(a)')
'</Piece>'
976 if(.not. morton_aim(morton_no)) cycle
979 write(qunit,
'(a,i7,a,i7,a)') &
980 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
981 write(qunit,
'(a)')
'<PointData>'
986 write(offset_char,
'(i19)') offset
987 write(qunit,
'(a,a,a,a,a)')&
988 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
989 '" format="appended" offset="',trim(adjustl(offset_char)),
'">'
990 write(qunit,
'(a)')
'</DataArray>'
991 offset=offset+length+size_int
993 write(qunit,
'(a)')
'</PointData>'
994 write(qunit,
'(a)')
'<Points>'
995 write(offset_char,
'(i19)') offset
996 write(qunit,
'(a,a,a)') &
997 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
999 offset=offset+length_coords+size_int
1000 write(qunit,
'(a)')
'</Points>'
1003 write(qunit,
'(a,i7,a,i7,a)') &
1004 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1005 write(qunit,
'(a)')
'<CellData>'
1010 write(offset_char,
'(i19)') offset
1011 write(qunit,
'(a,a,a,a,a)')&
1012 '<DataArray type="Float32" Name="',trim(wnamei(iw)), &
1013 '" format="appended" offset="',trim(adjustl(offset_char)),
'">'
1014 write(qunit,
'(a)')
'</DataArray>'
1015 offset=offset+lengthcc+size_int
1017 write(qunit,
'(a)')
'</CellData>'
1018 write(qunit,
'(a)')
'<Points>'
1019 write(offset_char,
'(i19)') offset
1020 write(qunit,
'(a,a,a)') &
1021 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
1023 offset=offset+length_coords+size_int
1024 write(qunit,
'(a)')
'</Points>'
1026 write(qunit,
'(a)')
'<Cells>'
1028 write(offset_char,
'(i19)') offset
1029 write(qunit,
'(a,a,a)')&
1030 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
1031 offset=offset+length_conn+size_int
1033 write(offset_char,
'(i19)') offset
1034 write(qunit,
'(a,a,a)') &
1035 '<DataArray type="Int32" Name="offsets" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
1036 offset=offset+length_offsets+size_int
1038 write(offset_char,
'(i19)') offset
1039 write(qunit,
'(a,a,a)') &
1040 '<DataArray type="Int32" Name="types" format="appended" offset="',trim(adjustl(offset_char)),
'"/>'
1041 offset=offset+size_int+nc*size_int
1042 write(qunit,
'(a)')
'</Cells>'
1043 write(qunit,
'(a)')
'</Piece>'
1048 write(qunit,
'(a)')
'</UnstructuredGrid>'
1049 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
1051 open(qunit,file=filename,access=
'stream',form=
'unformatted',position=
'append')
1053 write(qunit) trim(buf)
1056 if(.not. morton_aim(morton_no)) cycle
1058 call calc_x(igrid,xc,xcc)
1059 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1060 ixc^l,ixcc^l,.true.)
1065 if(cell_corner)
then
1067 write(qunit) {(|}real(wc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixcmin^d,ixcmax^d)}
1069 write(qunit) lengthcc
1070 write(qunit) {(|}real(wcc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixccmin^d,ixccmax^d)}
1074 write(qunit) length_coords
1075 {
do ix^db=ixcmin^db,ixcmax^db \}
1077 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1079 write(qunit) real(x_vtk(k))
1083 write(qunit) length_conn
1086 write(qunit) length_offsets
1088 write(qunit) icel*(2**^nd)
1092 write(qunit) size_int*nc
1094 write(qunit) vtk_type
1097 allocate(intstatus(mpi_status_size,1))
1099 ixccmin^d=ixmlo^d; ixccmax^d=ixmhi^d;
1100 ixcmin^d=ixmlo^d-1; ixcmax^d=ixmhi^d;
1103 if(.not. morton_aim(morton_no)) cycle
1106 if(cell_corner)
then
1115 if(cell_corner)
then
1117 write(qunit) {(|}real(wc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixcmin^d,ixcmax^d)}
1119 write(qunit) lengthcc
1120 write(qunit) {(|}real(wcc_tmp(ix^d,iw)*normconv(iw)),{ix^d=ixccmin^d,ixccmax^d)}
1123 write(qunit) length_coords
1124 {
do ix^db=ixcmin^db,ixcmax^db \}
1126 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1128 write(qunit) real(x_vtk(k))
1131 write(qunit) length_conn
1133 write(qunit) length_offsets
1135 write(qunit) icel*(2**^nd)
1138 write(qunit) size_int*nc
1140 write(qunit) vtk_type
1146 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
1147 write(qunit,
'(a)')
'</AppendedData>'
1148 write(qunit,
'(a)')
'</VTKFile>'
1150 deallocate(intstatus)
1153 deallocate(morton_aim,morton_aim_p)
1168 integer,
intent(in) :: qunit
1170 double precision :: x_VTK(1:3)
1171 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP
1172 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP
1173 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1174 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1175 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio):: wC_TMP
1176 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP
1177 double precision :: normconv(0:nw+nwauxio)
1178 integer,
allocatable :: intstatus(:,:)
1180 integer :: itag,ipe,igrid,level,icel,ixC^L,ixCC^L,Morton_no,Morton_length
1181 integer :: nx^D,nxC^D,nc,np,VTK_type,ix^D,filenr
1183 integer:: length,lengthcc,length_coords,length_conn,length_offsets
1185 character(len=80):: filename
1186 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
1187 character(len=1024) :: outfilehead
1188 logical :: fileopen,cell_corner=.false.
1189 logical,
allocatable :: Morton_aim(:),Morton_aim_p(:)
1196 morton_aim_p=.false.
1204 if(({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
1206 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.}))
then
1207 morton_aim_p(morton_no)=.true.
1211 call mpi_allreduce(morton_aim_p,morton_aim,morton_length,mpi_logical,mpi_lor,&
1214 case(
'vtuB64',
'vtuBmpi64')
1216 case(
'vtuBCC64',
'vtuBCCmpi64')
1221 if(.not. morton_aim(morton_no)) cycle
1223 call calc_x(igrid,xc,xcc)
1224 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1225 ixc^l,ixcc^l,.true.)
1228 if(cell_corner)
then
1237 inquire(qunit,opened=fileopen)
1238 if(.not.fileopen)
then
1242 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu"
1244 open(qunit,file=filename,status=
'replace')
1248 write(qunit,
'(a)')
'<?xml version="1.0"?>'
1249 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
1250 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
1251 write(qunit,
'(a)')
'<UnstructuredGrid>'
1252 write(qunit,
'(a)')
'<FieldData>'
1253 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
1254 'NumberOfTuples="1" format="ascii">'
1256 write(qunit,
'(a)')
'</DataArray>'
1257 write(qunit,
'(a)')
'</FieldData>'
1259 nx^d=ixmhi^d-ixmlo^d+1;
1263 length=np*size_double
1264 lengthcc=nc*size_double
1265 length_coords=3*length
1266 length_conn=2**^nd*size_int*nc
1267 length_offsets=nc*size_int
1270 if(.not. morton_aim(morton_no)) cycle
1271 if(cell_corner)
then
1273 write(qunit,
'(a,i7,a,i7,a)') &
1274 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1275 write(qunit,
'(a)')
'<PointData>'
1280 write(qunit,
'(a,a,a,i16,a)')&
1281 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1282 '" format="appended" offset="',offset,
'">'
1283 write(qunit,
'(a)')
'</DataArray>'
1284 offset=offset+length+size_int
1286 write(qunit,
'(a)')
'</PointData>'
1287 write(qunit,
'(a)')
'<Points>'
1288 write(qunit,
'(a,i16,a)') &
1289 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1291 offset=offset+length_coords+size_int
1292 write(qunit,
'(a)')
'</Points>'
1295 write(qunit,
'(a,i7,a,i7,a)') &
1296 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1297 write(qunit,
'(a)')
'<CellData>'
1302 write(qunit,
'(a,a,a,i16,a)')&
1303 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1304 '" format="appended" offset="',offset,
'">'
1305 write(qunit,
'(a)')
'</DataArray>'
1306 offset=offset+lengthcc+size_int
1308 write(qunit,
'(a)')
'</CellData>'
1309 write(qunit,
'(a)')
'<Points>'
1310 write(qunit,
'(a,i16,a)') &
1311 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1313 offset=offset+length_coords+size_int
1314 write(qunit,
'(a)')
'</Points>'
1316 write(qunit,
'(a)')
'<Cells>'
1318 write(qunit,
'(a,i16,a)')&
1319 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>'
1320 offset=offset+length_conn+size_int
1322 write(qunit,
'(a,i16,a)') &
1323 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>'
1324 offset=offset+length_offsets+size_int
1326 write(qunit,
'(a,i16,a)') &
1327 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>'
1328 offset=offset+size_int+nc*size_int
1329 write(qunit,
'(a)')
'</Cells>'
1330 write(qunit,
'(a)')
'</Piece>'
1336 if(.not. morton_aim(morton_no)) cycle
1337 if(cell_corner)
then
1339 write(qunit,
'(a,i7,a,i7,a)') &
1340 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1341 write(qunit,
'(a)')
'<PointData>'
1346 write(qunit,
'(a,a,a,i16,a)')&
1347 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1348 '" format="appended" offset="',offset,
'">'
1349 write(qunit,
'(a)')
'</DataArray>'
1350 offset=offset+length+size_int
1352 write(qunit,
'(a)')
'</PointData>'
1353 write(qunit,
'(a)')
'<Points>'
1354 write(qunit,
'(a,i16,a)') &
1355 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1357 offset=offset+length_coords+size_int
1358 write(qunit,
'(a)')
'</Points>'
1361 write(qunit,
'(a,i7,a,i7,a)') &
1362 '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">'
1363 write(qunit,
'(a)')
'<CellData>'
1368 write(qunit,
'(a,a,a,i16,a)')&
1369 '<DataArray type="Float64" Name="',trim(wnamei(iw)), &
1370 '" format="appended" offset="',offset,
'">'
1371 write(qunit,
'(a)')
'</DataArray>'
1372 offset=offset+lengthcc+size_int
1374 write(qunit,
'(a)')
'</CellData>'
1375 write(qunit,
'(a)')
'<Points>'
1376 write(qunit,
'(a,i16,a)') &
1377 '<DataArray type="Float64" NumberOfComponents="3" format="appended" offset="',offset,
'"/>'
1379 offset=offset+length_coords+size_int
1380 write(qunit,
'(a)')
'</Points>'
1382 write(qunit,
'(a)')
'<Cells>'
1384 write(qunit,
'(a,i16,a)')&
1385 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',offset,
'"/>'
1386 offset=offset+length_conn+size_int
1388 write(qunit,
'(a,i16,a)') &
1389 '<DataArray type="Int32" Name="offsets" format="appended" offset="',offset,
'"/>'
1390 offset=offset+length_offsets+size_int
1392 write(qunit,
'(a,i16,a)') &
1393 '<DataArray type="Int32" Name="types" format="appended" offset="',offset,
'"/>'
1394 offset=offset+size_int+nc*size_int
1395 write(qunit,
'(a)')
'</Cells>'
1396 write(qunit,
'(a)')
'</Piece>'
1400 write(qunit,
'(a)')
'</UnstructuredGrid>'
1401 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
1403 open(qunit,file=filename,access=
'stream',form=
'unformatted',position=
'append')
1405 write(qunit) trim(buf)
1407 if(.not. morton_aim(morton_no)) cycle
1409 call calc_x(igrid,xc,xcc)
1410 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1411 ixc^l,ixcc^l,.true.)
1416 if(cell_corner)
then
1418 write(qunit) {(|}wc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
1420 write(qunit) lengthcc
1421 write(qunit) {(|}wcc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
1424 write(qunit) length_coords
1425 {
do ix^db=ixcmin^db,ixcmax^db \}
1427 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1429 write(qunit) x_vtk(k)
1432 write(qunit) length_conn
1434 write(qunit) length_offsets
1436 write(qunit) icel*(2**^nd)
1439 write(qunit) size_int*nc
1441 write(qunit) vtk_type
1444 allocate(intstatus(mpi_status_size,1))
1446 ixccmin^d=ixmlo^d; ixccmax^d=ixmhi^d;
1447 ixcmin^d=ixmlo^d-1; ixcmax^d=ixmhi^d;
1450 if(.not. morton_aim(morton_no)) cycle
1453 if(cell_corner)
then
1462 if(cell_corner)
then
1464 write(qunit) {(|}wc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixcmin^d,ixcmax^d)}
1466 write(qunit) lengthcc
1467 write(qunit) {(|}wcc_tmp(ix^d,iw)*normconv(iw),{ix^d=ixccmin^d,ixccmax^d)}
1470 write(qunit) length_coords
1471 {
do ix^db=ixcmin^db,ixcmax^db \}
1473 x_vtk(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0);
1475 write(qunit) x_vtk(k)
1478 write(qunit) length_conn
1480 write(qunit) length_offsets
1482 write(qunit) icel*(2**^nd)
1485 write(qunit) size_int*nc
1487 write(qunit) vtk_type
1493 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
1494 write(qunit,
'(a)')
'</AppendedData>'
1495 write(qunit,
'(a)')
'</VTKFile>'
1497 deallocate(intstatus)
1499 deallocate(morton_aim,morton_aim_p)
1900 integer,
intent(in) :: qunit
1902 double precision :: x_VTK(1:3)
1903 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP,xC_TMP_recv
1904 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP,xCC_TMP_recv
1905 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
1906 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
1907 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP,wC_TMP_recv
1908 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP,wCC_TMP_recv
1909 double precision,
dimension(0:nw+nwauxio) :: normconv
1910 integer:: igrid,iigrid,level,ixC^L,ixCC^L
1911 integer:: NumGridsOnLevel(1:nlevelshi)
1912 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,nc,np,ix^D
1914 integer :: itag,ipe,Morton_no,siz_ind
1915 integer :: ind_send(4*^ND),ind_recv(4*^ND)
1916 integer :: levmin_recv,levmax_recv,level_recv,igrid_recv,ixrvC^L,ixrvCC^L
1917 integer,
allocatable :: intstatus(:,:)
1918 logical :: fileopen,conv_grid,cond_grid_recv
1919 character(len=80):: filename
1920 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
1921 character(len=1024) :: outfilehead
1924 inquire(qunit,opened=fileopen)
1925 if(.not.fileopen)
then
1929 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".vtu"
1931 open(qunit,file=filename,status=
'unknown',form=
'formatted')
1934 write(qunit,
'(a)')
'<?xml version="1.0"?>'
1935 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
1936 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
1937 write(qunit,
'(a)')
'<UnstructuredGrid>'
1938 write(qunit,
'(a)')
'<FieldData>'
1939 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
1940 'NumberOfTuples="1" format="ascii">'
1942 write(qunit,
'(a)')
'</DataArray>'
1943 write(qunit,
'(a)')
'</FieldData>'
1948 nx^d=ixmhi^d-ixmlo^d+1;
1970 call mpi_send(igrid,1,mpi_integer, 0,itag,
icomm,
ierrmpi)
1977 conv_grid=({
rnode(
rpxmin^
d_,igrid)>=xprobmin^d+(xprobmax^d-xprobmin^d)&
1979 <=xprobmax^d-(xprobmax^d-xprobmin^d)*
writespshift(^d,2)|.and.})
1981 call mpi_send(conv_grid,1,mpi_logical,0,itag,
icomm,
ierrmpi)
1983 if (.not.conv_grid) cycle
1984 call calc_x(igrid,xc,xcc)
1985 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
1986 ixc^l,ixcc^l,.true.)
1989 ind_send=(/ ixc^l,ixcc^l /)
1991 call mpi_send(ind_send,siz_ind,mpi_integer, 0,itag,
icomm,
ierrmpi)
1992 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,
icomm,
ierrmpi)
1999 call write_vtk(qunit,ixg^
ll,ixc^l,ixcc^l,igrid,nc,np,nx^d,nxc^d,&
2000 normconv,wnamei,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp)
2006 allocate(intstatus(mpi_status_size,1))
2010 call mpi_recv(levmin_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
2013 call mpi_recv(levmax_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
2015 do level=levmin_recv,levmax_recv
2019 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
2021 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
2022 if (level_recv/=level) cycle
2023 call mpi_recv(cond_grid_recv,1,mpi_logical, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
2024 if(.not.cond_grid_recv)cycle
2027 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,
icomm,intstatus(:,1),
ierrmpi)
2028 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
2029 ixrvccmin^d=ind_recv(2*^nd+^d);ixrvccmax^d=ind_recv(3*^nd+^d);
2030 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2037 call write_vtk(qunit,ixg^
ll,ixrvc^l,ixrvcc^l,igrid_recv,&
2038 nc,np,nx^d,nxc^d,normconv,wnamei,&
2039 xc_tmp_recv,xcc_tmp_recv,wc_tmp_recv,wcc_tmp_recv)
2044 write(qunit,
'(a)')
'</UnstructuredGrid>'
2045 write(qunit,
'(a)')
'</VTKFile>'
2050 if(
mype==0)
deallocate(intstatus)
2287 integer,
intent(in) :: qunit
2289 double precision :: x_TEC(ndim), w_TEC(nw+nwauxio)
2290 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC_TMP,xC_TMP_recv
2291 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC_TMP,xCC_TMP_recv
2292 double precision,
dimension(ixMlo^D-1:ixMhi^D,ndim) :: xC
2293 double precision,
dimension(ixMlo^D:ixMhi^D,ndim) :: xCC
2294 double precision,
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP,wC_TMP_recv
2295 double precision,
dimension(ixMlo^D:ixMhi^D,nw+nwauxio) :: wCC_TMP,wCC_TMP_recv
2296 double precision,
dimension(0:nw+nwauxio) :: normconv
2297 integer:: igrid,iigrid,level,igonlevel,iw,idim,ix^D
2298 integer:: NumGridsOnLevel(1:nlevelshi)
2299 integer :: nx^D,nxC^D,nodesonlevel,elemsonlevel,ixC^L,ixCC^L
2300 integer :: nodesonlevelmype,elemsonlevelmype
2301 integer :: nodes, elems
2302 integer,
allocatable :: intstatus(:,:)
2303 integer :: itag,Morton_no,ipe,levmin_recv,levmax_recv,igrid_recv,level_recv
2304 integer :: ixrvC^L,ixrvCC^L
2305 integer :: ind_send(2*^ND),ind_recv(2*^ND),siz_ind,igonlevel_recv
2306 integer :: NumGridsOnLevel_mype(1:nlevelshi,0:npe-1)
2308 logical :: fileopen,first
2309 character(len=80) :: filename
2310 character(len=1024) :: tecplothead
2311 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
2312 character(len=1024) :: outfilehead
2314 if(nw/=count(
w_write(1:nw)))
then
2315 if(
mype==0) print *,
'tecplot_mpi does not use w_write=F'
2316 call mpistop(
'w_write, tecplot')
2320 if(
mype==0) print *,
'tecplot_mpi with nocartesian'
2323 master_cpu_open :
if (
mype == 0)
then
2324 inquire(qunit,opened=fileopen)
2325 if (.not.fileopen)
then
2329 write(filename,
'(a,i4.4,a)') trim(
base_filename),filenr,
".plt"
2330 open(qunit,file=filename,status=
'unknown')
2333 write(tecplothead,
'(a)')
"VARIABLES = "//trim(outfilehead)
2334 write(qunit,
'(a)') tecplothead(1:len_trim(tecplothead))
2335 end if master_cpu_open
2338 numgridsonlevel(1:nlevelshi)=0
2340 numgridsonlevel(level)=0
2344 numgridsonlevel(level)=numgridsonlevel(level)+1
2346 numgridsonlevel_mype(level,0:npe-1)=0
2347 numgridsonlevel_mype(level,
mype) = numgridsonlevel(level)
2348 call mpi_allreduce(mpi_in_place,numgridsonlevel_mype(level,0:npe-1),npe,mpi_integer,&
2350 call mpi_allreduce(mpi_in_place,numgridsonlevel(level),1,mpi_integer,mpi_sum, &
2354 nx^d=ixmhi^d-ixmlo^d+1;
2357 if(
mype==0.and.npe>1)
allocate(intstatus(mpi_status_size,1))
2364 nodes=nodes + numgridsonlevel(level)*{nxc^d*}
2365 elems=elems + numgridsonlevel(level)*{nx^d*}
2368 if (
mype==0)
write(qunit,
"(a,i7,a,1pe12.5,a)") &
2369 'ZONE T="all levels", I=',elems, &
2375 call calc_x(igrid,xc,xcc)
2376 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,ixc^l,ixcc^l,.true.)
2378 {
do ix^db=ixccmin^db,ixccmax^db\}
2379 x_tec(1:ndim)=xcc_tmp(ix^d,1:ndim)*normconv(0)
2380 w_tec(1:nw+nwauxio)=wcc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2381 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2383 else if (mype/=0)
then
2385 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2386 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision,0,itag,icomm,ierrmpi)
2387 call mpi_send(wcc_tmp,1,type_block_wcc_io, 0,itag,icomm,ierrmpi)
2388 call mpi_send(xcc_tmp,1,type_block_xcc_io, 0,itag,icomm,ierrmpi)
2393 do morton_no=morton_start(ipe),morton_stop(ipe)
2395 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2396 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,&
2397 itag,icomm,intstatus(:,1),ierrmpi)
2398 call mpi_recv(wcc_tmp_recv,1,type_block_wcc_io, ipe,itag,&
2399 icomm,intstatus(:,1),ierrmpi)
2400 call mpi_recv(xcc_tmp_recv,1,type_block_xcc_io, ipe,itag,&
2401 icomm,intstatus(:,1),ierrmpi)
2402 {
do ix^db=ixccmin^db,ixccmax^db\}
2403 x_tec(1:ndim)=xcc_tmp_recv(ix^d,1:ndim)*normconv(0)
2404 w_tec(1:nw+nwauxio)=wcc_tmp_recv(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2405 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2414 itag=1000*morton_stop(mype)
2415 call mpi_send(levmin,1,mpi_integer, 0,itag,icomm,ierrmpi)
2416 itag=2000*morton_stop(mype)
2417 call mpi_send(levmax,1,mpi_integer, 0,itag,icomm,ierrmpi)
2420 do level=levmin,levmax
2421 nodesonlevelmype=numgridsonlevel_mype(level,mype)*{nxc^d*}
2422 elemsonlevelmype=numgridsonlevel_mype(level,mype)*{nx^d*}
2423 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
2424 elemsonlevel=numgridsonlevel(level)*{nx^d*}
2431 select case(convert_type)
2436 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2437 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
2438 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2439 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=POINT, ZONETYPE=', &
2440 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2441 do morton_no=morton_start(mype),morton_stop(mype)
2442 igrid = sfc_to_igrid(morton_no)
2445 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2447 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2449 if (node(plevel_,igrid)/=level) cycle
2450 call calc_x(igrid,xc,xcc)
2451 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2452 ixc^l,ixcc^l,.true.)
2455 ind_send=(/ ixc^l /)
2457 call mpi_send(ind_send,siz_ind, mpi_integer, 0,itag,icomm,ierrmpi)
2458 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,icomm,ierrmpi)
2460 call mpi_send(wc_tmp,1,type_block_wc_io, 0,itag,icomm,ierrmpi)
2461 call mpi_send(xc_tmp,1,type_block_xc_io, 0,itag,icomm,ierrmpi)
2463 {
do ix^db=ixcmin^db,ixcmax^db\}
2464 x_tec(1:ndim)=xc_tmp(ix^d,1:ndim)*normconv(0)
2465 w_tec(1:nw+nwauxio)=wc_tmp(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2466 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2470 case(
'tecplotCCmpi')
2476 if(ndim+nw+nwauxio>99)
call mpistop(
"adjust format specification in writeout")
2477 if(nw+nwauxio==1)
then
2480 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2481 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
2482 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2483 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2484 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
2485 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2487 if(ndim+nw+nwauxio<10)
then
2489 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2490 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i1,a,a)") &
2491 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2492 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2493 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2494 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2496 if (mype==0.and.(nodesonlevelmype>0.and.elemsonlevelmype>0))&
2497 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
2498 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2499 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2500 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2501 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2507 do morton_no=morton_start(mype),morton_stop(mype)
2508 igrid = sfc_to_igrid(morton_no)
2511 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
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,&
2520 ind_send=(/ ixc^l /)
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(xc_tmp,1,type_block_xc_io, 0,itag,icomm,ierrmpi)
2527 write(qunit,fmt=
"(100(e14.6))") xc_tmp(ixc^s,idim)*normconv(0)
2532 do morton_no=morton_start(mype),morton_stop(mype)
2533 igrid = sfc_to_igrid(morton_no)
2535 itag=morton_no*(ndim+iw)
2536 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2537 itag=igrid*(ndim+iw)
2538 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2540 if (node(plevel_,igrid)/=level) cycle
2541 call calc_x(igrid,xc,xcc)
2542 call calc_grid(qunit,igrid,xc,xcc,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
2543 ixc^l,ixcc^l,.true.)
2545 ind_send=(/ ixcc^l /)
2547 itag=igrid*(ndim+iw)
2548 call mpi_send(ind_send,siz_ind, mpi_integer, 0,itag,icomm,ierrmpi)
2549 call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision, 0,itag,icomm,ierrmpi)
2550 call mpi_send(wcc_tmp,1,type_block_wcc_io, 0,itag,icomm,ierrmpi)
2552 write(qunit,fmt=
"(100(e14.6))") wcc_tmp(ixcc^s,iw)*normconv(iw)
2557 call mpistop(
'no such tecplot type')
2561 do morton_no=morton_start(mype),morton_stop(mype)
2562 igrid = sfc_to_igrid(morton_no)
2565 call mpi_send(igrid,1,mpi_integer, 0,itag,icomm,ierrmpi)
2567 call mpi_send(node(plevel_,igrid),1,mpi_integer, 0,itag,icomm,ierrmpi)
2569 if(node(plevel_,igrid)/=level) cycle
2570 igonlevel=igonlevel+1
2573 call mpi_send(igonlevel,1,mpi_integer, 0,itag,icomm,ierrmpi)
2581 if(mype==0 .and.npe>1)
then
2583 itag=1000*morton_stop(ipe)
2584 call mpi_recv(levmin_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2585 itag=2000*morton_stop(ipe)
2586 call mpi_recv(levmax_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2587 do level=levmin_recv,levmax_recv
2588 nodesonlevelmype=numgridsonlevel_mype(level,ipe)*{nxc^d*}
2589 elemsonlevelmype=numgridsonlevel_mype(level,ipe)*{nx^d*}
2590 nodesonlevel=numgridsonlevel(level)*{nxc^d*}
2591 elemsonlevel=numgridsonlevel(level)*{nx^d*}
2592 select case(convert_type)
2597 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2598 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,a)") &
2599 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2600 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=POINT, ZONETYPE=', &
2601 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2602 do morton_no=morton_start(ipe),morton_stop(ipe)
2604 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2606 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2607 if (level_recv/=level) cycle
2610 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,&
2611 icomm,intstatus(:,1),ierrmpi)
2612 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
2613 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2614 ,icomm,intstatus(:,1),ierrmpi)
2615 call mpi_recv(wc_tmp_recv,1,type_block_wc_io, ipe,itag,&
2616 icomm,intstatus(:,1),ierrmpi)
2617 call mpi_recv(xc_tmp_recv,1,type_block_xc_io, ipe,itag,&
2618 icomm,intstatus(:,1),ierrmpi)
2619 {
do ix^db=ixrvcmin^db,ixrvcmax^db\}
2620 x_tec(1:ndim)=xc_tmp_recv(ix^d,1:ndim)*normconv(0)
2621 w_tec(1:nw+nwauxio)=wc_tmp_recv(ix^d,1:nw+nwauxio)*normconv(1:nw+nwauxio)
2622 write(qunit,fmt=
"(100(e14.6))") x_tec, w_tec
2625 case(
'tecplotCCmpi')
2631 if(ndim+nw+nwauxio>99)
call mpistop(
"adjust format specification in writeout")
2632 if(nw+nwauxio==1)
then
2635 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2636 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,a)") &
2637 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2638 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2639 ndim+1,
']=CELLCENTERED), ZONETYPE=', &
2640 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2642 if(ndim+nw+nwauxio<10)
then
2644 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2645 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i1,a,a)") &
2646 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2647 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2648 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2649 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2651 if(nodesonlevelmype>0.and.elemsonlevelmype>0) &
2652 write(qunit,
"(a,i7,a,a,i7,a,i7,a,f25.16,a,i1,a,i2,a,a)") &
2653 'ZONE T="',level,
'"',
', N=',nodesonlevelmype,
', E=',elemsonlevelmype, &
2654 ', SOLUTIONTIME=',global_time*time_convert_factor,
', DATAPACKING=BLOCK, VARLOCATION=([', &
2655 ndim+1,
'-',ndim+nw+nwauxio,
']=CELLCENTERED), ZONETYPE=', &
2656 {^ifoned
'FELINESEG'}{^iftwod
'FEQUADRILATERAL'}{^ifthreed
'FEBRICK'}
2661 do morton_no=morton_start(ipe),morton_stop(ipe)
2663 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2664 itag=igrid_recv*idim
2665 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2666 if (level_recv/=level) cycle
2668 itag=igrid_recv*idim
2669 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2670 ixrvcmin^d=ind_recv(^d);ixrvcmax^d=ind_recv(^nd+^d);
2671 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2672 ,icomm,intstatus(:,1),ierrmpi)
2673 call mpi_recv(xc_tmp_recv,1,type_block_xc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2674 write(qunit,fmt=
"(100(e14.6))") xc_tmp_recv(ixrvc^s,idim)*normconv(0)
2678 do morton_no=morton_start(ipe),morton_stop(ipe)
2679 itag=morton_no*(ndim+iw)
2680 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2681 itag=igrid_recv*(ndim+iw)
2682 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2683 if (level_recv/=level) cycle
2685 itag=igrid_recv*(ndim+iw)
2686 call mpi_recv(ind_recv,siz_ind, mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2687 ixrvccmin^d=ind_recv(^d);ixrvccmax^d=ind_recv(^nd+^d);
2688 call mpi_recv(normconv,nw+nwauxio+1, mpi_double_precision,ipe,itag&
2689 ,icomm,intstatus(:,1),ierrmpi)
2690 call mpi_recv(wcc_tmp_recv,1,type_block_wcc_io, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2691 write(qunit,fmt=
"(100(e14.6))") wcc_tmp_recv(ixrvcc^s,iw)*normconv(iw)
2695 call mpistop(
'no such tecplot type')
2698 do morton_no=morton_start(ipe),morton_stop(ipe)
2700 call mpi_recv(igrid_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2702 call mpi_recv(level_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2703 if (level_recv/=level) cycle
2705 call mpi_recv(igonlevel_recv,1,mpi_integer, ipe,itag,icomm,intstatus(:,1),ierrmpi)
2714 call mpi_barrier(icomm,ierrmpi)
2715 if(mype==0)
deallocate(intstatus)
2976 integer,
intent(in) :: qunit
2978 double precision :: x_VTK(1:3)
2979 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC_TMP
2980 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC_TMP
2981 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC_TMP
2982 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC_TMP
2983 double precision,
dimension(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:nw&
+nwauxio) :: w
2984 double precision :: normconv(0:nw+nwauxio)
2985 double precision :: zlength
2986 double precision ::d3grid,zlengsc,zgridsc
2988 integer:: igrid,iigrid,level,igonlevel,icel,ixCmin1,ixCmin2,&
2989 ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,ixCCmax1,&
2991 integer:: NumGridsOnLevel(1:nlevelshi)
2992 integer :: nx1,nx2,nx3,nxC1,nxC2,nxC3,nodesonlevel,elemsonlevel,nc,np,&
2993 VTK_type,ix1,ix2,ix3
2994 integer :: size_length,recsep,k,iw
2995 integer :: length,lengthcc,offset_points,offset_cells, length_coords,&
2996 length_conn,length_offsets
2997 integer :: i3grid,n3grid
3000 character(len=6):: bufform
3001 character(len=80):: filename
3002 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:3+nw+nwauxio)
3003 character(len=1024) :: outfilehead
3006 if(
mype==0) print *,
'unstructuredvtkB23 not parallel, use vtumpi'
3007 call mpistop(
'npe>1, unstructuredvtkB23')
3013 inquire(qunit,opened=fileopen)
3014 if(.not.fileopen)
then
3018 open(qunit,file=filename,status=
'replace')
3022 write(qunit,
'(a)')
'<?xml version="1.0"?>'
3023 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
3024 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
3025 write(qunit,
'(a)')
'<UnstructuredGrid>'
3026 write(qunit,
'(a)')
'<FieldData>'
3027 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
3028 'NumberOfTuples="1" format="ascii">'
3030 write(qunit,
'(a)')
'</DataArray>'
3031 write(qunit,
'(a)')
'</FieldData>'
3034 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3035 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3040 lengthcc=nc*size_real
3042 length_coords=3*length
3043 length_conn=2**3*size_int*nc
3044 length_offsets=nc*size_int
3049 zlengsc=2.d0*zgridsc
3050 zlength=zlengsc*(xprobmax1-xprobmin1)
3053 do iigrid=1,igridstail; igrid=igrids(iigrid);
3058 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3061 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3064 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3065 n3grid=nint(zlength/d3grid)
3070 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3071 '" NumberOfCells="',nc,
'">'
3072 write(qunit,
'(a)')
'<PointData>'
3075 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3076 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3077 write(qunit,
'(a)')
'</DataArray>'
3078 offset=offset+length+size_int
3081 do iw=nw+1,nw+nwauxio
3082 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3083 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3084 write(qunit,
'(a)')
'</DataArray>'
3085 offset=offset+length+size_int
3088 write(qunit,
'(a)')
'</PointData>'
3090 write(qunit,
'(a)')
'<Points>'
3091 write(qunit,
'(a,i16,a)') &
3092 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3095 offset=offset+length_coords+size_int
3096 write(qunit,
'(a)')
'</Points>'
3099 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3100 '" NumberOfCells="',nc,
'">'
3101 write(qunit,
'(a)')
'<CellData>'
3104 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3105 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3106 write(qunit,
'(a)')
'</DataArray>'
3107 offset=offset+lengthcc+size_int
3110 do iw=nw+1,nw+nwauxio
3111 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3112 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3113 write(qunit,
'(a)')
'</DataArray>'
3114 offset=offset+lengthcc+size_int
3117 write(qunit,
'(a)')
'</CellData>'
3118 write(qunit,
'(a)')
'<Points>'
3119 write(qunit,
'(a,i16,a)') &
3120 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3123 offset=offset+length_coords+size_int
3124 write(qunit,
'(a)')
'</Points>'
3126 write(qunit,
'(a)')
'<Cells>'
3128 write(qunit,
'(a,i16,a)')&
3129 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',&
3131 offset=offset+length_conn+size_int
3133 write(qunit,
'(a,i16,a)') &
3134 '<DataArray type="Int32" Name="offsets" format="appended" offset="',&
3136 offset=offset+length_offsets+size_int
3138 write(qunit,
'(a,i16,a)') &
3139 '<DataArray type="Int32" Name="types" format="appended" offset="',&
3141 offset=offset+size_length+nc*size_int
3142 write(qunit,
'(a)')
'</Cells>'
3143 write(qunit,
'(a)')
'</Piece>'
3150 write(qunit,
'(a)')
'</UnstructuredGrid>'
3151 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
3153 open(qunit,file=filename,form=
'unformatted',access=
'stream',status=
'old',position=
'append')
3155 write(qunit) trim(buffer)
3159 do iigrid=1,igridstail; igrid=igrids(iigrid);
3164 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3167 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3170 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3171 n3grid=nint(zlength/d3grid)
3176 ixglo1,ixglo2,ixghi1,ixghi2,ps(igrid)%w,ps(igrid)%x)
3180 do ix3=ixglo1,ixghi1
3181 w(ixglo1:ixghi1,ixglo2:ixghi2,ix3,1:nw)=ps(igrid)%w(ixglo1:ixghi1,&
3185 call calc_grid23(qunit,igrid,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
3186 ixcmin1,ixcmin2,ixcmin3,ixcmax1,ixcmax2,ixcmax3,ixccmin1,ixccmin2,&
3187 ixccmin3,ixccmax1,ixccmax2,ixccmax3,.true.,i3grid,d3grid,w,zlength,zgridsc)
3193 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3194 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3196 write(qunit) lengthcc
3197 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3198 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3203 do iw=nw+1,nw+nwauxio
3207 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3208 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3210 write(qunit) lengthcc
3211 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3212 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3217 write(qunit) length_coords
3218 do ix3=ixcmin3,ixcmax3
3219 do ix2=ixcmin2,ixcmax2
3220 do ix1=ixcmin1,ixcmax1
3222 x_vtk(1:3)=xc_tmp(ix1,ix2,ix3,1:3)*normconv(0);
3224 write(qunit) real(x_vtk(k))
3229 write(qunit) length_conn
3234 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3235 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3236 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3237 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
3238 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
3239 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3240 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3241 ix3*nxc2*nxc1+ ix2*nxc1+ix1
3245 write(qunit) length_offsets
3247 write(qunit) icel*(2**3)
3250 write(qunit) size_int*nc
3252 write(qunit) vtk_type
3261 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
3263 write(qunit,
'(a)')
'</AppendedData>'
3264 write(qunit,
'(a)')
'</VTKFile>'
3278 integer,
intent(in) :: qunit
3280 double precision :: x_VTK(1:3)
3281 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC_TMP
3282 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC_TMP
3283 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC_TMP
3284 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC_TMP
3285 double precision,
dimension(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:nw&
+nwauxio) :: w
3286 double precision :: normconv(0:nw+nwauxio)
3287 double precision ::d3grid,zlengsc,zgridsc
3288 double precision :: zlength
3290 integer:: igrid,iigrid,level,igonlevel,icel,ixCmin1,ixCmin2,&
3291 ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,ixCCmax1,&
3293 integer:: NumGridsOnLevel(1:nlevelshi)
3294 integer :: nx1,nx2,nx3,nxC1,nxC2,nxC3,nodesonlevel,elemsonlevel,nc,np,&
3295 VTK_type,ix1,ix2,ix3
3296 integer :: size_length,recsep,k,iw
3297 integer :: length,lengthcc,offset_points,offset_cells, length_coords,&
3298 length_conn,length_offsets
3299 integer :: i3grid,n3grid
3301 character(len=80):: filename
3302 character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:3+nw+nwauxio)
3303 character(len=1024) :: outfilehead
3305 character(len=6):: bufform
3308 if(
mype==0) print *,
'unstructuredvtkBsym23 not parallel, use vtumpi'
3309 call mpistop(
'npe>1, unstructuredvtkBsym23')
3316 inquire(qunit,opened=fileopen)
3317 if(.not.fileopen)
then
3321 open(qunit,file=filename,status=
'unknown')
3326 write(qunit,
'(a)')
'<?xml version="1.0"?>'
3327 write(qunit,
'(a)',advance=
'no')
'<VTKFile type="UnstructuredGrid"'
3328 write(qunit,
'(a)')
' version="0.1" byte_order="LittleEndian">'
3329 write(qunit,
'(a)')
'<UnstructuredGrid>'
3330 write(qunit,
'(a)')
'<FieldData>'
3331 write(qunit,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
3332 'NumberOfTuples="1" format="ascii">'
3334 write(qunit,
'(a)')
'</DataArray>'
3335 write(qunit,
'(a)')
'</FieldData>'
3338 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3339 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3344 lengthcc=nc*size_real
3346 length_coords=3*length
3347 length_conn=2**3*size_int*nc
3348 length_offsets=nc*size_int
3354 zlength=zlengsc*(xprobmax1-xprobmin1)
3357 do iigrid=1,igridstail; igrid=igrids(iigrid);
3362 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3365 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3368 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3369 n3grid=nint(zlength/d3grid)
3375 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3376 '" NumberOfCells="',nc,
'">'
3377 write(qunit,
'(a)')
'<PointData>'
3380 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3381 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3382 write(qunit,
'(a)')
'</DataArray>'
3383 offset=offset+length+size_length
3386 do iw=nw+1,nw+nwauxio
3387 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3388 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3389 write(qunit,
'(a)')
'</DataArray>'
3390 offset=offset+length+size_length
3393 write(qunit,
'(a)')
'</PointData>'
3394 write(qunit,
'(a)')
'<Points>'
3395 write(qunit,
'(a,i16,a)') &
3396 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3399 offset=offset+length_coords+size_length
3400 write(qunit,
'(a)')
'</Points>'
3403 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3404 '" NumberOfCells="',nc,
'">'
3405 write(qunit,
'(a)')
'<CellData>'
3408 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3409 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3410 write(qunit,
'(a)')
'</DataArray>'
3411 offset=offset+lengthcc+size_length
3414 do iw=nw+1,nw+nwauxio
3415 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3416 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3417 write(qunit,
'(a)')
'</DataArray>'
3418 offset=offset+lengthcc+size_length
3421 write(qunit,
'(a)')
'</CellData>'
3423 write(qunit,
'(a)')
'<Points>'
3424 write(qunit,
'(a,i16,a)') &
3425 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3428 offset=offset+length_coords+size_length
3429 write(qunit,
'(a)')
'</Points>'
3431 write(qunit,
'(a)')
'<Cells>'
3433 write(qunit,
'(a,i16,a)')&
3434 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',&
3436 offset=offset+length_conn+size_length
3438 write(qunit,
'(a,i16,a)') &
3439 '<DataArray type="Int32" Name="offsets" format="appended" offset="',&
3441 offset=offset+length_offsets+size_length
3443 write(qunit,
'(a,i16,a)') &
3444 '<DataArray type="Int32" Name="types" format="appended" offset="',&
3446 offset=offset+size_length+nc*size_int
3447 write(qunit,
'(a)')
'</Cells>'
3448 write(qunit,
'(a)')
'</Piece>'
3454 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3455 '" NumberOfCells="',nc,
'">'
3456 write(qunit,
'(a)')
'<PointData>'
3459 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3460 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3461 write(qunit,
'(a)')
'</DataArray>'
3462 offset=offset+length+size_length
3465 do iw=nw+1,nw+nwauxio
3466 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3467 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3468 write(qunit,
'(a)')
'</DataArray>'
3469 offset=offset+length+size_length
3472 write(qunit,
'(a)')
'</PointData>'
3473 write(qunit,
'(a)')
'<Points>'
3474 write(qunit,
'(a,i16,a)') &
3475 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3478 offset=offset+length_coords+size_length
3479 write(qunit,
'(a)')
'</Points>'
3482 write(qunit,
'(a,i7,a,i7,a)')
'<Piece NumberOfPoints="',np,&
3483 '" NumberOfCells="',nc,
'">'
3484 write(qunit,
'(a)')
'<CellData>'
3487 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3488 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3489 write(qunit,
'(a)')
'</DataArray>'
3490 offset=offset+lengthcc+size_length
3493 do iw=nw+1,nw+nwauxio
3494 write(qunit,
'(a,a,a,i16,a)')
'<DataArray type="Float32" Name="',&
3495 trim(wnamei(iw)),
'" format="appended" offset="',offset,
'">'
3496 write(qunit,
'(a)')
'</DataArray>'
3497 offset=offset+lengthcc+size_length
3500 write(qunit,
'(a)')
'</CellData>'
3501 write(qunit,
'(a)')
'<Points>'
3502 write(qunit,
'(a,i16,a)') &
3503 '<DataArray type="Float32" NumberOfComponents="3" format="appended" offset="',&
3506 offset=offset+length_coords+size_length
3507 write(qunit,
'(a)')
'</Points>'
3509 write(qunit,
'(a)')
'<Cells>'
3511 write(qunit,
'(a,i16,a)')&
3512 '<DataArray type="Int32" Name="connectivity" format="appended" offset="',&
3514 offset=offset+length_conn+size_length
3516 write(qunit,
'(a,i16,a)') &
3517 '<DataArray type="Int32" Name="offsets" format="appended" offset="',&
3519 offset=offset+length_offsets+size_length
3521 write(qunit,
'(a,i16,a)') &
3522 '<DataArray type="Int32" Name="types" format="appended" offset="',&
3524 offset=offset+size_length+nc*size_int
3525 write(qunit,
'(a)')
'</Cells>'
3526 write(qunit,
'(a)')
'</Piece>'
3534 write(qunit,
'(a)')
'</UnstructuredGrid>'
3535 write(qunit,
'(a)')
'<AppendedData encoding="raw">'
3537 open(qunit,file=filename,form=
'unformatted',access=
'stream',status=
'old',position=
'append')
3539 write(qunit) trim(buffer)
3542 do iigrid=1,igridstail; igrid=igrids(iigrid);
3547 if ((
rnode(rpxmin1_,igrid)>=xprobmin1+(xprobmax1-xprobmin1)&
3550 .and.(
rnode(rpxmax1_,igrid)<=xprobmax1-(xprobmax1-xprobmin1)&
3553 d3grid=zgridsc*(
rnode(rpxmax1_,igrid)-
rnode(rpxmin1_,igrid))
3554 n3grid=nint(zlength/d3grid)
3559 ixglo1,ixglo2,ixghi1,ixghi2,ps(igrid)%w,ps(igrid)%x)
3563 do ix3=ixglo1,ixghi1
3564 w(ixglo1:ixghi1,ixglo2:ixghi2,ix3,1:nw)=ps(igrid)%w(ixglo1:ixghi1,&
3568 call calc_grid23(qunit,igrid,xc_tmp,xcc_tmp,wc_tmp,wcc_tmp,normconv,&
3569 ixcmin1,ixcmin2,ixcmin3,ixcmax1,ixcmax2,ixcmax3,ixccmin1,ixccmin2,&
3570 ixccmin3,ixccmax1,ixccmax2,ixccmax3,.true.,i3grid,d3grid,w,zlength,zgridsc)
3577 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3578 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3580 write(qunit) lengthcc
3581 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3582 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3587 do iw=nw+1,nw+nwauxio
3591 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3592 =ixcmin1,ixcmax1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3594 write(qunit) lengthcc
3595 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3596 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3601 write(qunit) length_coords
3602 do ix3=ixcmin3,ixcmax3
3603 do ix2=ixcmin2,ixcmax2
3604 do ix1=ixcmin1,ixcmax1
3606 x_vtk(1:3)=xc_tmp(ix1,ix2,ix3,1:3)*normconv(0);
3608 write(qunit) real(x_vtk(k))
3613 write(qunit) length_conn
3618 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3619 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3620 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3621 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
3622 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
3623 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3624 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3625 ix3*nxc2*nxc1+ ix2*nxc1+ix1
3629 write(qunit) length_offsets
3631 write(qunit) icel*(2**3)
3634 write(qunit) size_int*nc
3636 write(qunit) vtk_type
3642 if(iw==2 .or. iw==4 .or. iw==7)
then
3643 wc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,iw)=&
3644 -wc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,iw)
3645 wcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,iw)=&
3646 -wcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,iw)
3651 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3652 =ixcmax1,ixcmin1,-1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3654 write(qunit) lengthcc
3655 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3656 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3661 do iw=nw+1,nw+nwauxio
3665 write(qunit) (((real(wc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3666 =ixcmax1,ixcmin1,-1),ix2=ixcmin2,ixcmax2),ix3=ixcmin3,ixcmax3)
3668 write(qunit) lengthcc
3669 write(qunit) (((real(wcc_tmp(ix1,ix2,ix3,iw)*normconv(iw)),ix1&
3670 =ixccmin1,ixccmax1),ix2=ixccmin2,ixccmax2),ix3&
3675 write(qunit) length_coords
3676 do ix3=ixcmin3,ixcmax3
3677 do ix2=ixcmin2,ixcmax2
3678 do ix1=ixcmax1,ixcmin1,-1
3680 x_vtk(1:3)=xc_tmp(ix1,ix2,ix3,1:3)*normconv(0);
3683 write(qunit) real(x_vtk(k))
3688 write(qunit) length_conn
3693 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3694 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3695 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3696 (ix3-1)*nxc2*nxc1+ ix2*nxc1+ix1,&
3697 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1-1,&
3698 ix3*nxc2*nxc1+(ix2-1)*nxc1+ix1,&
3699 ix3*nxc2*nxc1+ ix2*nxc1+ix1-1,&
3700 ix3*nxc2*nxc1+ ix2*nxc1+ix1
3704 write(qunit) length_offsets
3706 write(qunit) icel*(2**3)
3709 write(qunit) size_int*nc
3711 write(qunit) vtk_type
3720 open(qunit,file=filename,status=
'unknown',form=
'formatted',position=
'append')
3721 write(qunit,
'(a)')
'</AppendedData>'
3722 write(qunit,
'(a)')
'</VTKFile>'
3727 subroutine calc_grid23(qunit,igrid,xC_TMP,xCC_TMP,wC_TMP,wCC_TMP,normconv,&
3728 ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,&
3729 ixCCmax1,ixCCmax2,ixCCmax3,first,i3grid,d3grid,w,zlength,zgridsc)
3737 integer,
intent(in) :: qunit, igrid,i3grid
3738 logical,
intent(in) :: first
3740 double precision :: dx1,dx2,dx3,d3grid,zlength,zgridsc
3741 double precision :: ldw(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1),&
3742 dwC(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1)
3743 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC
3744 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC
3745 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC
3746 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC
3747 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,3) :: xC_TMP
3748 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,&
3) :: xCC_TMP
3749 double precision,
dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo1&
-1:ixMhi1,nw+nwauxio) :: wC_TMP
3750 double precision,
dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo1:ixMhi1,nw&
+nwauxio) :: wCC_TMP
3751 double precision,
dimension(ixGlo1:ixGhi1,ixGlo2:ixGhi2,ixGlo1:ixGhi1,1:nw&
+nwauxio) :: w
3752 double precision,
dimension(0:nw+nwauxio) :: normconv
3753 integer :: nx1,nx2,nx3, nxC1,nxC2,nxC3, ix1,ix2,ix3, ix, iw, level, idir
3754 integer :: ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,&
3755 ixCCmin2,ixCCmin3,ixCCmax1,ixCCmax2,ixCCmax3,nxCC1,nxCC2,nxCC3
3756 integer :: idims,jxCmin1,jxCmin2,jxCmin3,jxCmax1,jxCmax2,jxCmax3
3757 logical,
save :: subfirst=.true.
3760 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3762 dx1=
dx(1,level);dx2=
dx(2,level);dx3=zgridsc*
dx(1,level);
3777 nxcc1=nx1;nxcc2=nx2;nxcc3=nx3;
3778 ixccmin1=ixmlo1;ixccmin2=ixmlo2;ixccmin3=ixmlo1; ixccmax1=ixmhi1
3779 ixccmax2=ixmhi2;ixccmax3=ixmhi1;
3780 do ix=ixccmin1,ixccmax1
3781 xcc(ix,ixccmin2:ixccmax2,ixccmin3:ixccmax3,1)=
rnode(rpxmin1_,igrid)&
3782 +(dble(ix-ixccmin1)+half)*dx1
3784 do ix=ixccmin2,ixccmax2
3785 xcc(ixccmin1:ixccmax1,ix,ixccmin3:ixccmax3,2)=
rnode(rpxmin2_,igrid)&
3786 +(dble(ix-ixccmin2)+half)*dx2
3788 do ix=ixccmin3,ixccmax3
3789 xcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ix,3)=-zlength/two+&
3790 dble(i3grid-1)*d3grid+(dble(ix-ixccmin3)+half)*dx3
3794 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3795 ixcmin1=ixmlo1-1;ixcmin2=ixmlo2-1;ixcmin3=ixmlo1-1; ixcmax1=ixmhi1
3796 ixcmax2=ixmhi2;ixcmax3=ixmhi1;
3797 do ix=ixcmin1,ixcmax1
3798 xc(ix,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1)=
rnode(rpxmin1_,igrid)&
3799 +dble(ix-ixcmin1)*dx1
3801 do ix=ixcmin2,ixcmax2
3802 xc(ixcmin1:ixcmax1,ix,ixcmin3:ixcmax3,2)=
rnode(rpxmin2_,igrid)&
3803 +dble(ix-ixcmin2)*dx2
3805 do ix=ixcmin3,ixcmax3
3806 xc(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ix,3)=-zlength/two+&
3807 dble(i3grid-1)*d3grid+dble(ix-ixcmin3)*dx3
3817 jxcmin1=ixghi1+1-
nghostcells;jxcmin2=ixglo2;jxcmin3=ixglo1;
3818 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixghi1;
3819 do ix1=jxcmin1,jxcmax1
3820 w(ix1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw) = w(jxcmin1&
3821 -1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw)
3823 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixglo1;
3824 jxcmax1=ixglo1-1+
nghostcells;jxcmax2=ixghi2;jxcmax3=ixghi1;
3825 do ix1=jxcmin1,jxcmax1
3826 w(ix1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw) = w(jxcmax1&
3827 +1,jxcmin2:jxcmax2,jxcmin3:jxcmax3,nw-nwextra+1:nw)
3830 jxcmin1=ixglo1;jxcmin2=ixghi2+1-
nghostcells;jxcmin3=ixglo1;
3831 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixghi1;
3832 do ix2=jxcmin2,jxcmax2
3833 w(jxcmin1:jxcmax1,ix2,jxcmin3:jxcmax3,nw-nwextra+1:nw) &
3834 = w(jxcmin1:jxcmax1,jxcmin2-1,jxcmin3:jxcmax3,nw-nwextra+1:nw)
3836 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixglo1;
3837 jxcmax1=ixghi1;jxcmax2=ixglo2-1+
nghostcells;jxcmax3=ixghi1;
3838 do ix2=jxcmin2,jxcmax2
3839 w(jxcmin1:jxcmax1,ix2,jxcmin3:jxcmax3,nw-nwextra+1:nw) &
3840 = w(jxcmin1:jxcmax1,jxcmax2+1,jxcmin3:jxcmax3,nw-nwextra+1:nw)
3843 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixghi1+1-
nghostcells;
3844 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixghi1;
3845 do ix3=jxcmin3,jxcmax3
3846 w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,ix3,nw-nwextra+1:nw) &
3847 = w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,jxcmin3-1,nw-nwextra+1:nw)
3849 jxcmin1=ixglo1;jxcmin2=ixglo2;jxcmin3=ixglo1;
3850 jxcmax1=ixghi1;jxcmax2=ixghi2;jxcmax3=ixglo1-1+
nghostcells;
3851 do ix3=jxcmin3,jxcmax3
3852 w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,ix3,nw-nwextra+1:nw) &
3853 = w(jxcmin1:jxcmax1,jxcmin2:jxcmax2,jxcmax3+1,nw-nwextra+1:nw)
3868 +1,ixglo2+1,ixglo1+1,ixghi1-1,ixghi2-1,ixghi1-1,w,xcc,normconv)
3873 wcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,:)=w(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,:)
3875 do ix3=ixccmin3,ixccmax3
3876 do ix2=ixccmin2,ixccmax2
3877 do ix1=ixccmin1,ixccmax1
3878 wcc(ix1,ix2,ix3,iw_mag(:))=wcc(ix1,ix2,ix3,iw_mag(:))+ps(igrid)%B0(ix1,ix2,&
3885 do ix3=ixccmin3,ixccmax3
3886 do ix2=ixccmin2,ixccmax2
3887 do ix1=ixccmin1,ixccmax1
3888 wcc(ix1,ix2,ix3,iw_e)=w(ix1,ix2,ix3,iw_e) +half*sum(ps(igrid)%B0(ix1,&
3889 ix2,:,0)**2 ) + sum(w(ix1,ix2,ix3,&
3890 iw_mag(:))*ps(igrid)%B0(ix1,ix2,:,0))
3900 if (
b0field.and.iw>iw_mag(1)-1.and.iw<=iw_mag(
ndir))
then
3902 do ix3=ixcmin3,ixcmax3
3903 do ix2=ixcmin2,ixcmax2
3904 do ix1=ixcmin1,ixcmax1
3905 wc(ix1,ix2,ix3,iw)=sum(w(ix1:ix1+1,ix2:ix2+1,ix3,iw) &
3906 +ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3907 ,idir,0))/dble(2**3)+&
3908 sum(w(ix1:ix1+1,ix2:ix2+1,ix3+1,iw) &
3909 +ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3910 ,idir,0))/dble(2**3)
3915 do ix3=ixcmin3,ixcmax3
3916 do ix2=ixcmin2,ixcmax2
3917 do ix1=ixcmin1,ixcmax1
3918 wc(ix1,ix2,ix3,iw)=sum(w(ix1:ix1+1,ix2:ix2+1,ix3:ix3&
3926 do ix3=ixcmin3,ixcmax3
3927 do ix2=ixcmin2,ixcmax2
3928 do ix1=ixcmin1,ixcmax1
3929 wc(ix1,ix2,ix3,iw_e)=sum( w(ix1:ix1+1,ix2:ix2+1,ix3,iw_e) &
3930 +half*sum(ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3931 ,:,0)**2,dim=
ndim+1) + sum( w(ix1:ix1+1,ix2:ix2+1,ix3&
3932 ,iw_mag(:))*ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3933 ,:,0),dim=
ndim+1) ) /dble(2**3)+&
3934 sum( w(ix1:ix1+1,ix2:ix2+1,ix3+1,iw_e) &
3935 +half*sum(ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3936 ,:,0)**2,dim=
ndim+1) + sum( w(ix1:ix1+1,ix2:ix2+1,ix3&
3937 +1,iw_mag(:))*ps(igrid)%B0(ix1:ix1+1,ix2:ix2+1&
3938 ,:,0),dim=
ndim+1) ) /dble(2**3)
3945 xc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:3) &
3946 = xc(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:3)
3947 wc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:nw&
3948 +
nwauxio) = wc(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:nw&
3950 xcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,&
3951 1:3) = xcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,&
3952 ixccmin3:ixccmax3,1:3)
3953 wcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,1:nw&
3954 +
nwauxio) = wcc(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixccmin3:ixccmax3,&
3963 integer,
intent(in) :: qunit, igrid
3965 integer :: nx1,nx2,nx3, nxC1,nxC2,nxC3, ix1,ix2,ix3
3967 nx1=ixmhi1-ixmlo1+1;nx2=ixmhi2-ixmlo2+1;nx3=ixmhi1-ixmlo1+1;
3968 nxc1=nx1+1;nxc2=nx2+1;nxc3=nx3+1;
3972 write(qunit,
'(8(i7,1x))')&
3973 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1-1, &
3974 (ix3-1)*nxc2*nxc1+(ix2-1)*nxc1+ix1,&