55    integer, 
intent(in) :: dir
 
   56    double precision, 
intent(in) :: xslice
 
   58    double precision,
dimension(0:nw+nwauxio) :: normconv 
 
   59    integer :: Njgrid, jgrid
 
   60    integer, 
dimension(ndim-1) :: ixsubGlo, ixsubGhi
 
   61    integer, 
dimension(ndim-1) :: ixsubMlo, ixsubMhi
 
   62    integer :: size_subblock_io, nx^D, slice_fh, nwexpand
 
   63    integer :: type_subblock_io, type_subblockC_io, type_subblock_x_io, type_subblockC_x_io
 
   64    integer, 
dimension(ndim) :: sizes, subsizes, start
 
   66    double precision, 
dimension(ndim-1) :: xprobminsub, xprobmaxsub
 
   67    integer, 
dimension(ndim-1) :: block_nx_sub, domain_nx_sub
 
   68    logical, 
dimension(ndim-1) :: periodBsub
 
   71    nx^d=ixmhi^d-ixmlo^d+1;
 
   87       if(xslice<xprobmin^d.or.xslice>xprobmax^d) &
 
   88            call mpistop(
"slice out of bounds")
 
   99       sizes(1) = ixghi2; sizes(2) = ixghi3;
 
  100       ixsubglo(1) = ixglo2; ixsubglo(2) = ixglo3;
 
  101       ixsubghi(1) = ixghi2; ixsubghi(2) = ixghi3;
 
  102       subsizes(1)=nx2;subsizes(2)=nx3;
 
  103       start(1)=ixmlo2-1;start(2)=ixmlo3-1;
 
  105       xprobminsub(1)=xprobmin2; xprobmaxsub(1)=xprobmax2;
 
  106       xprobminsub(2)=xprobmin3; xprobmaxsub(2)=xprobmax3;
 
  107       domain_nx_sub(1)=domain_nx2; domain_nx_sub(2)=domain_nx3;
 
  108       block_nx_sub(1)=block_nx2; block_nx_sub(2)=block_nx3;
 
  111       sizes(1) = ixghi1; sizes(2) = ixghi3;
 
  112       ixsubglo(1) = ixglo1; ixsubglo(2) = ixglo3;
 
  113       ixsubghi(1) = ixghi1; ixsubghi(2) = ixghi3;
 
  114       subsizes(1)=nx1;subsizes(2)=nx3;
 
  115       start(1)=ixmlo1-1;start(2)=ixmlo3-1;
 
  117       xprobminsub(1)=xprobmin1; xprobmaxsub(1)=xprobmax1;
 
  118       xprobminsub(2)=xprobmin3; xprobmaxsub(2)=xprobmax3;
 
  119       domain_nx_sub(1)=domain_nx1; domain_nx_sub(2)=domain_nx3;
 
  120       block_nx_sub(1)=block_nx1; block_nx_sub(2)=block_nx3;
 
  123       ixsubglo(1) = ixglo1; ixsubglo(2) = ixglo2;
 
  124       ixsubghi(1) = ixghi1; ixsubghi(2) = ixghi2;
 
  125       sizes(1) = ixghi1; sizes(2) = ixghi2;
 
  126       subsizes(1)=nx1;subsizes(2)=nx2;
 
  127       start(1)=ixmlo1-1;start(2)=ixmlo2-1;
 
  129       xprobminsub(1)=xprobmin1; xprobmaxsub(1)=xprobmax1;
 
  130       xprobminsub(2)=xprobmin2; xprobmaxsub(2)=xprobmax2;
 
  131       domain_nx_sub(1)=domain_nx1; domain_nx_sub(2)=domain_nx2;
 
  132       block_nx_sub(1)=block_nx1; block_nx_sub(2)=block_nx2;
 
  135       call mpistop(
"slice direction not clear in put_slice")
 
  141       ixsubglo(1) = ixglo2; ixsubghi(1) = ixghi2;
 
  146       xprobminsub(1)=xprobmin2; xprobmaxsub(1)=xprobmax2;
 
  147       domain_nx_sub(1)=domain_nx2;
 
  148       block_nx_sub(1)=block_nx2;
 
  151       ixsubglo(1) = ixglo1; ixsubghi(1) = ixghi1;
 
  156       xprobminsub(1)=xprobmin1; xprobmaxsub(1)=xprobmax1;
 
  157       domain_nx_sub(1)=domain_nx1;
 
  158       block_nx_sub(1)=block_nx1;
 
  161       call mpistop(
"slice direction not clear in put_slice")
 
  169    {^de&ixsubmlo(^de-1) = ixsubglo(^de-1)+
nghostcells;}
 
  170    {^de&ixsubmhi(^de-1) = ixsubghi(^de-1)-
nghostcells;}
 
  173    sizes(
ndim)=nw+nwexpand
 
  174    subsizes(
ndim)=nw+nwexpand
 
  178    call mpi_type_create_subarray(
ndim,sizes,subsizes,start, &
 
  179         mpi_order_fortran,mpi_double_precision, &
 
  181    call mpi_type_commit(type_subblock_io,
ierrmpi)
 
  186    call mpi_type_create_subarray(
ndim,sizes,subsizes,start, &
 
  187         mpi_order_fortran,mpi_double_precision, &
 
  189    call mpi_type_commit(type_subblock_x_io,
ierrmpi)
 
  193    subsizes(1:
ndim-1) = subsizes(1:
ndim-1) + 1
 
  194    start(1:
ndim-1)    = start(1:
ndim-1) - 1 
 
  195    sizes(
ndim)=nw+nwexpand
 
  196    subsizes(
ndim)=nw+nwexpand
 
  199    call mpi_type_create_subarray(
ndim,sizes,subsizes,start, &
 
  200         mpi_order_fortran,mpi_double_precision, &
 
  202    call mpi_type_commit(type_subblockc_io,
ierrmpi)
 
  207    call mpi_type_create_subarray(
ndim,sizes,subsizes,start, &
 
  208         mpi_order_fortran,mpi_double_precision, &
 
  210    call mpi_type_commit(type_subblockc_x_io,
ierrmpi)
 
  225       case (
'vtu', 
'vtuCC')
 
  234    call mpi_type_free(type_subblock_io,
ierrmpi)
 
  235    call mpi_type_free(type_subblock_x_io,
ierrmpi)
 
  236    call mpi_type_free(type_subblockc_io,
ierrmpi)
 
  237    call mpi_type_free(type_subblockc_x_io,
ierrmpi)
 
  246      integer :: status(MPI_STATUS_SIZE), ipe
 
  248      character(len=1024) :: filename, xlabel
 
  249      character(len=79)   :: xxlabel
 
  250      character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
 
  251      character(len=1024) :: outfilehead
 
  255         inquire(slice_fh,opened=fileopen)
 
  256         if(.not.fileopen)
then 
  258            write(xlabel,
"(D9.2)")xslice
 
  261               write(xxlabel(1:1),
"(a)") 
"+" 
  263            write(filename,
"(a,i1.1,a,i4.4,a)") trim(
base_filename)//
'_d',dir,
'_x'//trim(xxlabel)//
'_n',
slicenext,
'.vtu' 
  264            open(slice_fh,file=filename,status=
'unknown',form=
'formatted')
 
  269         write(slice_fh,
'(a)')
'<?xml version="1.0"?>' 
  270         write(slice_fh,
'(a)',advance=
'no') 
'<VTKFile type="UnstructuredGrid"' 
  272            write(slice_fh,
'(a)')
' version="0.1" byte_order="LittleEndian">' 
  274            write(slice_fh,
'(a)')
' version="0.1" byte_order="BigEndian">' 
  276         write(slice_fh,
'(a)')
'  <UnstructuredGrid>' 
  277         write(slice_fh,
'(a)')
'<FieldData>' 
  278         write(slice_fh,
'(2a)')
'<DataArray type="Float32" Name="TIME" ',&
 
  279              'NumberOfTuples="1" format="ascii">' 
  281         write(slice_fh,
'(a)')
'</DataArray>' 
  282         write(slice_fh,
'(a)')
'</FieldData>' 
  286            call write_slice_vtk(jgrid,slice_fh,wnamei)
 
  300               if (ipe == 
mype ) 
then  
  301                  call mpi_send(ps_sub(jgrid)%x,1,type_subblock_x_io,0,itag,
icomm,
ierrmpi)
 
  302                  call mpi_send(ps_sub(jgrid)%w,1,type_subblock_io,0,itag+1,
icomm,
ierrmpi)
 
  303                  call mpi_send(ps_sub(jgrid)%xC,1,type_subblockc_x_io,0,itag+2,
icomm,
ierrmpi)
 
  304                  call mpi_send(ps_sub(jgrid)%wC,1,type_subblockc_io,0,itag+3,
icomm,
ierrmpi)
 
  305                  call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision,0,itag+4,
icomm,
ierrmpi)
 
  308                  call mpi_recv(ps_sub(njgrid+1)%x,1,type_subblock_x_io,ipe,itag,
icomm,status,
ierrmpi)
 
  309                  call mpi_recv(ps_sub(njgrid+1)%w,1,type_subblock_io,ipe,itag+1,
icomm,status,
ierrmpi)
 
  310                  call mpi_recv(ps_sub(njgrid+1)%xC,1,type_subblockc_x_io,ipe,itag+2,
icomm,status,
ierrmpi)
 
  311                  call mpi_recv(ps_sub(njgrid+1)%wC,1,type_subblockc_io,ipe,itag+3,
icomm,status,
ierrmpi)
 
  312                  call mpi_recv(normconv,nw+nwauxio+1,mpi_double_precision,ipe,&
 
  314                  call write_slice_vtk(njgrid+1,slice_fh,wnamei)
 
  322         write(slice_fh,
'(a)')
'</UnstructuredGrid>' 
  323         write(slice_fh,
'(a)')
'</VTKFile>' 
 
  331    subroutine write_slice_vtk(jgrid,slice_fh,wnamei)
 
  334      integer, 
intent(in)           :: jgrid, slice_fh
 
  335      character(len=name_len), 
intent(in) :: wnamei(1:nw+nwauxio)
 
  339      double precision              :: x_VTK(1:3)
 
  340      double precision, 
parameter   :: minvalue = 1.0d-99, maxvalue = 1.0d+99
 
  341      integer                       :: ixC^L, ixCC^L, nc, np, iw
 
  342      integer                       :: nx^DM, nxC^DM, icell, ix^DM
 
  345      {^dm&ixccmin^dm = ixsubmlo(^dm);}
 
  346      {^dm&ixccmax^dm = ixsubmhi(^dm);}
 
  347      {^dm&ixcmin^dm  = ixsubmlo(^dm)-1;}
 
  348      {^dm&ixcmax^dm  = ixsubmhi(^dm);}
 
  350      nx^dm=ixccmax^dm-ixccmin^dm+1;
 
  356      write(slice_fh,
'(a,i7,a,i7,a)') &
 
  357           '<Piece NumberOfPoints="',np,
'" NumberOfCells="',nc,
'">' 
  365         write(slice_fh,
'(a)')
'<CellData>' 
  370            write(slice_fh,
'(a,a,a)')&
 
  371                 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">' 
  372            write(slice_fh,
'(200(1pe14.6))') {^dm&(|}
roundoff_minmax(ps_sub(jgrid)%w(ix^dm,iw)*normconv(iw),minvalue,maxvalue),{ix^dm=ixccmin^dm,ixccmax^dm)}
 
  373            write(slice_fh,
'(a)')
'</DataArray>' 
  375         write(slice_fh,
'(a)')
'</CellData>' 
  379         write(slice_fh,
'(a)')
'<PointData>' 
  384            write(slice_fh,
'(a,a,a)')&
 
  385                 '<DataArray type="Float64" Name="',trim(wnamei(iw)),
'" format="ascii">' 
  386            write(slice_fh,
'(200(1pe14.6))') {^dm&(|}
roundoff_minmax(ps_sub(jgrid)%wC(ix^dm,iw)*normconv(iw),minvalue,maxvalue),{ix^dm=ixcmin^dm,ixcmax^dm)}
 
  387            write(slice_fh,
'(a)')
'</DataArray>' 
  389         write(slice_fh,
'(a)')
'</PointData>' 
  400      write(slice_fh,
'(a)')
'<Points>' 
  401      write(slice_fh,
'(a)')
'<DataArray type="Float32" NumberOfComponents="3" format="ascii">' 
  403      {
do ix^dmb=ixcmin^dmb,ixcmax^dmb \}
 
  405            x_vtk(1:
ndim)=ps_sub(jgrid)%xC(ix^dm,1:
ndim)*normconv(0);
 
  406            write(slice_fh,
'(3(1pe14.6))') x_vtk
 
  408      write(slice_fh,
'(a)')
'</DataArray>' 
  409      write(slice_fh,
'(a)')
'</Points>' 
  417      write(slice_fh,
'(a)')
'<Cells>' 
  420      write(slice_fh,
'(a)')
'<DataArray type="Int32" Name="connectivity" format="ascii">' 
  422      {^dm& 
do ix^dmb=1,nx^dmb\}
 
  424      write(slice_fh,
'(2(i7,1x))')ix1-1,ix1
 
  426      write(slice_fh,
'(4(i7,1x))')(ix2-1)*nxc1+ix1-1, &
 
  427           (ix2-1)*nxc1+ix1,ix2*nxc1+ix1-1,ix2*nxc1+ix1
 
  430      write(slice_fh,
'(a)')
'</DataArray>' 
  433      write(slice_fh,
'(a)')
'<DataArray type="Int32" Name="offsets" format="ascii">' 
  435         write(slice_fh,
'(i7)') icell*(2**(^nd-1))
 
  437      write(slice_fh,
'(a)')
'</DataArray>' 
  440      write(slice_fh,
'(a)')
'<DataArray type="Int32" Name="types" format="ascii">' 
  442      {^iftwod vtk_type=3 \}
 
  443      {^ifthreed vtk_type=8 \}
 
  445         write(slice_fh,
'(i2)') vtk_type
 
  447      write(slice_fh,
'(a)')
'</DataArray>' 
  449      write(slice_fh,
'(a)')
'</Cells>' 
  453      write(slice_fh,
'(a)')
'</Piece>' 
  456    end subroutine write_slice_vtk
 
  458    subroutine put_slice_csv
 
  461      integer                       :: iw, ipe, itag
 
  462      integer                       :: status(MPI_STATUS_SIZE)
 
  464      character(len=1024)           :: filename, xlabel
 
  465      character(len=79)             :: xxlabel
 
  466      character(len=name_len)       :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
 
  467      character(len=1024)           :: outfilehead
 
  468      character(len=1024)           :: line
 
  471         inquire(slice_fh,opened=fileopen)
 
  472         if(.not.fileopen)
then 
  474            write(xlabel,
"(D9.2)")xslice
 
  477               write(xxlabel(1:1),
"(a)") 
"+" 
  479            write(filename,
"(a,i1.1,a,i4.4,a)") trim(base_filename)//
'_d',dir,
'_x'//trim(xxlabel)//
'_n',slicenext,
'.csv' 
  480            open(slice_fh,file=filename,status=
'unknown',form=
'formatted')
 
  485         do iw=1,ndim+nw+nwauxio-1
 
  486            line = trim(line)//trim(xandwnamei(iw))//
', ' 
  488         line = trim(line)//trim(xandwnamei(ndim+nw+nwauxio))
 
  489         write(slice_fh,
'(a)')trim(line)
 
  495            call put_slice_line(jgrid,slice_fh)
 
  502            do jgrid=1,morton_sub_stop(ipe)-morton_sub_start(ipe)+1
 
  503               itag=morton_sub_start(ipe)+jgrid-1
 
  504               if (ipe == mype ) 
then  
  505                  call mpi_send(ps_sub(jgrid)%x,1,type_subblock_x_io,0,itag,icomm,ierrmpi)
 
  506                  call mpi_send(ps_sub(jgrid)%w,1,type_subblock_io,0,itag,icomm,ierrmpi)
 
  507                  call mpi_send(normconv,nw+nwauxio+1,mpi_double_precision,0,itag,icomm,ierrmpi)
 
  510                  call mpi_recv(ps_sub(njgrid+1)%x,1,type_subblock_x_io,ipe,itag,icomm,status,ierrmpi)
 
  511                  call mpi_recv(ps_sub(njgrid+1)%w,1,type_subblock_io,ipe,itag,icomm,status,ierrmpi)
 
  512                  call mpi_recv(normconv,nw+nwauxio+1,mpi_double_precision,ipe,&
 
  513                       itag,icomm,status,ierrmpi)
 
  514                  call put_slice_line(njgrid+1,slice_fh)
 
  525    end subroutine put_slice_csv
 
  527    subroutine put_slice_line(jout,file_handle)
 
  528      integer, 
intent(in) :: jout, file_handle
 
  530      double precision, 
parameter :: minvalue = 1.0d-99, maxvalue = 1.0d+99
 
  531      integer :: ix^D,idir,iw
 
  532      character(len=1024) ::line, data
 
  535      do ix2=ixsubmlo(2),ixsubmhi(2)
 
  536         do ix1=ixsubmlo(1),ixsubmhi(1)
 
  539            do ix1=ixsubmlo(1),ixsubmhi(1)
 
  545                  write(
data,
"(es14.6)")
roundoff_minmax(ps_sub(jout)%x(ix1,ix2,idir),minvalue,maxvalue)
 
  548                  write(
data,
"(es14.6)")
roundoff_minmax(ps_sub(jout)%x(ix1,idir),minvalue,maxvalue)
 
  551                  write(
data,
"(es14.6)")
roundoff_minmax(ps_sub(jout)%x(idir),minvalue,maxvalue)
 
  554                  line = trim(line)//trim(data)//
', ' 
  556               do iw = 1,nw+nwauxio-1
 
  558                  write(
data,
"(es14.6)")
roundoff_minmax(ps_sub(jout)%w(ix1,ix2,iw)*normconv(iw),minvalue,maxvalue)
 
  561                  write(
data,
"(es14.6)")
roundoff_minmax(ps_sub(jout)%w(ix1,iw)*normconv(iw),minvalue,maxvalue)
 
  564                  write(
data,
"(es14.6)")
roundoff_minmax(ps_sub(jout)%w(iw)*normconv(iw),minvalue,maxvalue)
 
  566                  line = trim(line)//trim(data)//
', ' 
  569               write(
data,
"(es14.6)")
roundoff_minmax(ps_sub(jout)%w(ix1,ix2,nw+nwauxio)*normconv(nw+nwauxio),minvalue,maxvalue)
 
  572               write(
data,
"(es14.6)")
roundoff_minmax(ps_sub(jout)%w(ix1,nw+nwauxio)*normconv(nw+nwauxio),minvalue,maxvalue)
 
  574               line = trim(line)//trim(data)
 
  575               write(file_handle,
'(a)')trim(line)
 
  584    end subroutine put_slice_line
 
  586    subroutine put_slice_dat
 
  592      integer, 
dimension(max_blocks*2) :: iorequest
 
  593      integer, 
dimension(MPI_STATUS_SIZE,max_blocks) :: iostatus
 
  594      integer(kind=MPI_OFFSET_KIND) :: offset, offset1
 
  596      integer :: amode, status(MPI_STATUS_SIZE), iwrite
 
  597      character(len=1024) :: filename, xlabel
 
  598      character(len=79)   :: xxlabel
 
  599      character(len=name_len) :: dname
 
  601      integer :: nsubparents, iw, ileaf, inode
 
  602      integer(kind=MPI_OFFSET_KIND) :: block_offset, tree_offset
 
  603      integer, 
allocatable :: block_ig_sub(:,:)
 
  604      integer, 
allocatable :: block_lvl_sub(:)
 
  605      integer(kind=MPI_OFFSET_KIND), 
allocatable :: block_offset_sub(:)
 
  606      logical, 
allocatable :: isleaf_sub(:)
 
  614         if (nsubleafs /= 
sfc_sub(0,1)) error stop 
"nsubleafs /= sfc_sub(0,1)" 
  616         allocate(block_ig_sub(ndim-1,nsubleafs))
 
  617         allocate(block_lvl_sub(nsubleafs))
 
  618         allocate(block_offset_sub(nsubleafs))
 
  619         allocate(isleaf_sub(nsubleafs+nsubparents))
 
  621         block_offset = int(0,kind=mpi_offset_kind)
 
  624         do inode=1,nsubleafs+nsubparents
 
  625            if (
sfc_sub(inode,1) == 0) 
then 
  626               isleaf_sub(inode) = .false.
 
  628               isleaf_sub(inode) = .true.
 
  634                     block_ig_sub(:,ileaf) = [ pnode%ig2, pnode%ig3 ]
 
  636                     block_ig_sub(:,ileaf) = [ pnode%ig1, pnode%ig3 ]
 
  638                     block_ig_sub(:,ileaf) = [ pnode%ig1, pnode%ig2 ]
 
  644                     block_ig_sub(:,ileaf) = [ pnode%ig2 ]
 
  646                     block_ig_sub(:,ileaf) = [ pnode%ig1 ]
 
  649               block_lvl_sub(ileaf) = pnode%level
 
  651               block_offset_sub(ileaf) = block_offset
 
  652               block_offset = block_offset + int(2*(ndim-1)*
size_int,kind=mpi_offset_kind)
 
  653               block_offset = block_offset + int(product(block_nx_sub)*nw*
size_double,kind=mpi_offset_kind)
 
  659      write(xlabel,
"(D9.2)")xslice
 
  662         write(xxlabel(1:1),
"(a)") 
"+" 
  664      write(filename,
"(a,i1.1,a,i4.4,a)") trim(base_filename)//
'_d',dir,
'_x'//trim(xxlabel)//
'_n',slicenext,
'.dat' 
  667         open(unit=slice_fh,file=filename,status=
'replace')
 
  674         amode=ior(mpi_mode_append,mpi_mode_wronly)
 
  675         call mpi_file_open(mpi_comm_self,filename,amode,mpi_info_null, &
 
  678         call mpi_file_write(slice_fh, 
version_number, 1, mpi_integer, status, ierrmpi)
 
  680         call mpi_file_write(slice_fh, 0, 1, mpi_integer, status, ierrmpi)
 
  681         call mpi_file_write(slice_fh, 0, 1, mpi_integer, status, ierrmpi)
 
  682         call mpi_file_write(slice_fh, nw, 1, mpi_integer, status, ierrmpi)
 
  683         call mpi_file_write(slice_fh, ndir, 1, mpi_integer, status, ierrmpi)
 
  684         call mpi_file_write(slice_fh, ndim-1, 1, mpi_integer, status, ierrmpi)
 
  685         call mpi_file_write(slice_fh, levmax_sub, 1, mpi_integer, status, ierrmpi)
 
  686         call mpi_file_write(slice_fh, nsubleafs, 1, mpi_integer, status, ierrmpi)
 
  687         call mpi_file_write(slice_fh, nsubparents, 1, mpi_integer, status, ierrmpi)
 
  688         call mpi_file_write(slice_fh, it, 1, mpi_integer, status, ierrmpi)
 
  691         call mpi_file_write(slice_fh, global_time, 1, mpi_double_precision, status, ierrmpi)
 
  693         call mpi_file_write(slice_fh, xprobminsub, ndim-1, &
 
  694               mpi_double_precision, status, ierrmpi)
 
  695         call mpi_file_write(slice_fh, xprobmaxsub, ndim-1, &
 
  696               mpi_double_precision, status, ierrmpi)
 
  697         call mpi_file_write(slice_fh, domain_nx_sub, ndim-1, &
 
  698               mpi_integer, status, ierrmpi)
 
  699         call mpi_file_write(slice_fh, block_nx_sub, ndim-1, &
 
  700               mpi_integer, status, ierrmpi)
 
  703         call mpi_file_write(slice_fh, periodbsub, ndim-1, mpi_logical, status, ierrmpi)
 
  706         call mpi_file_write(slice_fh, geometry_name(1:
name_len), &
 
  707               name_len, mpi_character, status, ierrmpi)
 
  710         call mpi_file_write(slice_fh, stagger_grid, 1, mpi_logical, status, ierrmpi)
 
  715            dname = trim(adjustl((cons_wnames(iw))))
 
  716            call mpi_file_write(slice_fh, dname, 
name_len, mpi_character, status, ierrmpi)
 
  731            call mpi_file_write(slice_fh, snapshotnext, 1, mpi_integer, status, ierrmpi)
 
  733            call mpi_file_write(slice_fh, snapshotnext+1, 1, mpi_integer, status, ierrmpi)
 
  735         call mpi_file_write(slice_fh, slicenext, 1, mpi_integer, status, ierrmpi)
 
  736         call mpi_file_write(slice_fh, collapsenext, 1, mpi_integer, status, ierrmpi)
 
  738         call mpi_file_get_position(slice_fh, tree_offset, ierrmpi)
 
  739         call mpi_file_write(slice_fh, isleaf_sub, nsubleafs+nsubparents, mpi_logical, status, ierrmpi)
 
  740         call mpi_file_write(slice_fh, block_lvl_sub, nsubleafs, mpi_integer, status, ierrmpi)
 
  741         call mpi_file_write(slice_fh, block_ig_sub, 
size(block_ig_sub), mpi_integer, status, ierrmpi)
 
  744         call mpi_file_get_position(slice_fh, block_offset, ierrmpi)
 
  745         block_offset_sub(:) = block_offset_sub(:) + block_offset + &
 
  746            int(nsubleafs*2*
size_int, kind=mpi_offset_kind)
 
  748         call mpi_file_write(slice_fh, block_offset_sub, nsubleafs, mpi_offset, status, ierrmpi)
 
  751         call mpi_file_get_position(slice_fh, block_offset, ierrmpi)
 
  752         if (block_offset - tree_offset /= &
 
  755            print *, 
"Warning: MPI_OFFSET type /= 8 bytes" 
  756            print *, 
"This *could* cause problems when reading .dat files" 
  760         call mpi_file_seek(slice_fh, int(
size_int,kind=mpi_offset_kind), mpi_seek_set, ierrmpi)
 
  761         call mpi_file_write(slice_fh, int(tree_offset), 1, mpi_integer, status, ierrmpi)
 
  762         call mpi_file_write(slice_fh, int(block_offset), 1, mpi_integer, status, ierrmpi)
 
  764         call mpi_file_close(slice_fh,ierrmpi)
 
  768      call mpi_bcast(nsubleafs, 1, mpi_integer, 0, icomm, ierrmpi)
 
  769      call mpi_bcast(nsubparents, 1, mpi_integer, 0, icomm, ierrmpi)
 
  773         allocate(block_offset_sub(nsubleafs))
 
  777      call mpi_bcast(block_offset_sub, nsubleafs, mpi_offset, 0, icomm, ierrmpi)
 
  779      amode=ior(mpi_mode_create,mpi_mode_wronly)
 
  780      call mpi_file_open(icomm,filename,amode,mpi_info_null,slice_fh,ierrmpi)
 
  781      iorequest=mpi_request_null
 
  787         call mpi_file_iwrite_at(slice_fh,offset,0,2*(ndim-1),mpi_integer,iorequest(iwrite),ierrmpi) 
 
  789         offset1=offset+int(2*(ndim-1)*
size_int,kind=mpi_offset_kind)
 
  790         call mpi_file_iwrite_at(slice_fh,offset1,ps_sub(jgrid)%w,1,type_subblock_io, &
 
  791              iorequest(iwrite),ierrmpi)
 
  794      if (iwrite>0) 
call mpi_waitall(iwrite,iorequest,iostatus,ierrmpi)
 
  795      call mpi_barrier(icomm, ierrmpi)
 
  796      call mpi_file_close(slice_fh,ierrmpi)
 
  798      deallocate(block_offset_sub)
 
  800         deallocate(block_ig_sub)
 
  801         deallocate(block_lvl_sub)
 
  802         deallocate(isleaf_sub)
 
  805    end subroutine put_slice_dat
 
  807    subroutine put_slice_zerod
 
  811      integer :: amode, iwrite, status(MPI_STATUS_SIZE)
 
  812      logical, 
save :: opened=.false.
 
  813      character(len=name_len) :: wnamei(1:nw+nwauxio),xandwnamei(1:ndim+nw+nwauxio)
 
  814      character(len=1024) :: outfilehead
 
  815      character(len=1024) ::line, data
 
  816      character(len=1024) :: filename, xlabel
 
  817      character(len=79)   :: xxlabel
 
  821      write(xlabel,
"(D9.2)")xslice
 
  824         write(xxlabel(1:1),
"(a)") 
"+" 
  826      write(filename,
"(a,i1.1,a,i4.4,a)") trim(base_filename)//
'_d',dir,
'_x'//trim(xxlabel)//
'.csv' 
  829      if (.not. opened .and. mype==0) 
then 
  830         amode=ior(mpi_mode_create,mpi_mode_wronly)
 
  831         amode=ior(amode,mpi_mode_append)
 
  832         call mpi_file_open(mpi_comm_self,filename,amode, &
 
  833              mpi_info_null,slice_fh,ierrmpi)
 
  837         do iw=1,nw+nwauxio+ndim
 
  838            line = trim(line)//
', '//trim(xandwnamei(iw))
 
  841         call mpi_file_write(slice_fh,line,len_trim(line), &
 
  842              mpi_character,status,ierrmpi)
 
  843         call mpi_file_write(slice_fh,achar(10),1,mpi_character,status,ierrmpi)
 
  844         call mpi_file_close(slice_fh, ierrmpi)
 
  848      call mpi_barrier(icomm,ierrmpi)
 
  852         amode=ior(mpi_mode_create,mpi_mode_wronly)
 
  853         amode=ior(amode,mpi_mode_append)
 
  854         call mpi_file_open(mpi_comm_self,filename,amode, &
 
  855              mpi_info_null,slice_fh,ierrmpi)
 
  858         write(
data,
"(es14.6)")global_time
 
  860         write(
data,
"(es14.6)")ps_sub(1)%x
 
  861         line =  trim(line)//
', '//trim(data)
 
  863            write(
data,
"(es14.6)")ps_sub(1)%w(iw)*normconv(iw)
 
  864            line = trim(line)//
', '//trim(data)
 
  867         call mpi_file_write(slice_fh,trim(line),len_trim(line), &
 
  868              mpi_character,status,ierrmpi)
 
  869         call mpi_file_write(slice_fh,achar(10),1,mpi_character,status,ierrmpi)
 
  870         call mpi_file_close(slice_fh, ierrmpi)
 
  873    end subroutine put_slice_zerod
 
 
 1053    integer, 
intent(in)                                       :: igrid, dir
 
 1054    integer, 
intent(inout)                                    :: jgrid
 
 1055    logical, 
intent(in)                                       :: active
 
 1056    double precision, 
intent(in)                              :: xslice
 
 1057    double precision,
dimension(0:nw+nwauxio),
intent(out)      :: normconv 
 
 1059    double precision, 
dimension(ixMlo^D-1:ixMhi^D,ndim)       :: xC_TMP, xC
 
 1060    double precision, 
dimension(ixMlo^D:ixMhi^D,ndim)         :: xCC_TMP, xCC
 
 1061    double precision, 
dimension(ixMlo^D-1:ixMhi^D,nw+nwauxio) :: wC_TMP
 
 1062    double precision, 
dimension(ixMlo^D:ixMhi^D,nw+nwauxio)   :: wCC_TMP
 
 1063    double precision, 
dimension(ixG^T)                        :: x_save
 
 1064    integer                :: ixslice, nwexpand, ixC^L, ixCC^L
 
 1065    logical                :: mask(ixG^T)
 
 1087    ixslice = minloc(dabs(xslice-ps(igrid)%x(:,dir)),1,mask(:))
 
 1092       ixslice = minloc(dabs(xslice-ps(igrid)%x(:,ixmlo2,dir)),1,mask(:,ixmlo2))
 
 1094       ixslice = minloc(dabs(xslice-ps(igrid)%x(ixmlo1,:,dir)),1,mask(ixmlo1,:))
 
 1096       call mpistop(
"slice direction not clear in fill_subnode")
 
 1102       ixslice = minloc(dabs(xslice-ps(igrid)%x(:,ixmlo2,ixmlo3,dir)),1,mask(:,ixmlo2,ixmlo3))
 
 1104       ixslice = minloc(dabs(xslice-ps(igrid)%x(ixmlo1,:,ixmlo3,dir)),1,mask(ixmlo1,:,ixmlo3))
 
 1106       ixslice = minloc(dabs(xslice-ps(igrid)%x(ixmlo1,ixmlo2,:,dir)),1,mask(ixmlo1,ixmlo2,:))
 
 1108       call mpistop(
"slice direction not clear in fill_subnode")
 
 1112    call calc_x(igrid,xc,xcc)
 
 1114    xc(:^
d&,dir)  = xslice
 
 1115    xcc(:^
d&,dir) = xslice
 
 1117         ixc^l,ixcc^l,.true.)
 
 1123    ps_sub(jgrid)%w(1:nw+nwexpand) = wcc_tmp(ixslice,1:nw+nwexpand)
 
 1124    ps_sub(jgrid)%x(1:
ndim) = xcc_tmp(ixslice,1:
ndim)
 
 1125    ps_sub(jgrid)%wC(1:nw+nwexpand) = wc_tmp(ixslice,1:nw+nwexpand)
 
 1126    ps_sub(jgrid)%xC(1:
ndim) = xc_tmp(ixslice,1:
ndim)
 
 1131       ps_sub(jgrid)%w(ixccmin2:ixccmax2,1:nw+nwexpand) &
 
 1132            = wcc_tmp(ixslice,ixccmin2:ixccmax2,1:nw+nwexpand)
 
 1133       ps_sub(jgrid)%x(ixccmin2:ixccmax2,1:
ndim) &
 
 1134            = xcc_tmp(ixslice,ixccmin2:ixccmax2,1:
ndim)
 
 1135       ps_sub(jgrid)%wC(ixcmin2:ixcmax2,1:nw+nwexpand) &
 
 1136            = wc_tmp(ixslice,ixcmin2:ixcmax2,1:nw+nwexpand)
 
 1137       ps_sub(jgrid)%xC(ixcmin2:ixcmax2,1:
ndim) &
 
 1138            = xc_tmp(ixslice,ixcmin2:ixcmax2,1:
ndim)
 
 1140       ps_sub(jgrid)%w(ixccmin1:ixccmax1,1:nw+nwexpand) &
 
 1141            = wcc_tmp(ixccmin1:ixccmax1,ixslice,1:nw+nwexpand)
 
 1142       ps_sub(jgrid)%x(ixccmin1:ixccmax1,1:
ndim) &
 
 1143            = xcc_tmp(ixccmin1:ixccmax1,ixslice,1:
ndim)
 
 1144       ps_sub(jgrid)%wC(ixcmin1:ixcmax1,1:nw+nwexpand) &
 
 1145            = wc_tmp(ixcmin1:ixcmax1,ixslice,1:nw+nwexpand)
 
 1146       ps_sub(jgrid)%xC(ixcmin1:ixcmax1,1:
ndim) &
 
 1147            = xc_tmp(ixcmin1:ixcmax1,ixslice,1:
ndim)
 
 1149       call mpistop(
"slice direction not clear in fill_subnode")
 
 1155       ps_sub(jgrid)%w(ixccmin2:ixccmax2,ixccmin3:ixccmax3,1:nw+nwexpand) = &
 
 1156            wcc_tmp(ixslice,ixccmin2:ixccmax2,ixccmin3:ixccmax3,1:nw+nwexpand)
 
 1157       ps_sub(jgrid)%x(ixccmin2:ixccmax2,ixccmin3:ixccmax3,1:
ndim) = &
 
 1158            xcc_tmp(ixslice,ixccmin2:ixccmax2,ixccmin3:ixccmax3,1:
ndim)
 
 1159       ps_sub(jgrid)%wC(ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:nw+nwexpand) = &
 
 1160            wc_tmp(ixslice,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:nw+nwexpand)
 
 1161       ps_sub(jgrid)%xC(ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:
ndim) = &
 
 1162            xc_tmp(ixslice,ixcmin2:ixcmax2,ixcmin3:ixcmax3,1:
ndim)
 
 1164       ps_sub(jgrid)%w(ixccmin1:ixccmax1,ixccmin3:ixccmax3,1:nw+nwexpand) = &
 
 1165            wcc_tmp(ixccmin1:ixccmax1,ixslice,ixccmin3:ixccmax3,1:nw+nwexpand)
 
 1166       ps_sub(jgrid)%x(ixccmin1:ixccmax1,ixccmin3:ixccmax3,1:
ndim) = &
 
 1167            xcc_tmp(ixccmin1:ixccmax1,ixslice,ixccmin3:ixccmax3,1:
ndim)
 
 1168       ps_sub(jgrid)%wC(ixcmin1:ixcmax1,ixcmin3:ixcmax3,1:nw+nwexpand) = &
 
 1169            wc_tmp(ixcmin1:ixcmax1,ixslice,ixcmin3:ixcmax3,1:nw+nwexpand)
 
 1170       ps_sub(jgrid)%xC(ixcmin1:ixcmax1,ixcmin3:ixcmax3,1:
ndim) = &
 
 1171            xc_tmp(ixcmin1:ixcmax1,ixslice,ixcmin3:ixcmax3,1:
ndim) 
 
 1173       ps_sub(jgrid)%w(ixccmin1:ixccmax1,ixccmin2:ixccmax2,1:nw+nwexpand) = &
 
 1174            wcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixslice,1:nw+nwexpand) 
 
 1175       ps_sub(jgrid)%x(ixccmin1:ixccmax1,ixccmin2:ixccmax2,1:
ndim) = &
 
 1176            xcc_tmp(ixccmin1:ixccmax1,ixccmin2:ixccmax2,ixslice,1:
ndim)
 
 1177       ps_sub(jgrid)%wC(ixcmin1:ixcmax1,ixcmin2:ixcmax2,1:nw+nwexpand) = &
 
 1178            wc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixslice,1:nw+nwexpand) 
 
 1179       ps_sub(jgrid)%xC(ixcmin1:ixcmax1,ixcmin2:ixcmax2,1:
ndim) = &
 
 1180            xc_tmp(ixcmin1:ixcmax1,ixcmin2:ixcmax2,ixslice,1:
ndim) 
 
 1182       call mpistop(
"slice direction not clear in fill_subnode")