punstructuredvtk_mpi Subroutine

public subroutine punstructuredvtk_mpi(qunit)

Uses

  • proc~~punstructuredvtk_mpi~~UsesGraph proc~punstructuredvtk_mpi punstructuredvtk_mpi module~mod_calculate_xw mod_calculate_xw proc~punstructuredvtk_mpi->module~mod_calculate_xw module~mod_forest mod_forest proc~punstructuredvtk_mpi->module~mod_forest module~mod_global_parameters mod_global_parameters proc~punstructuredvtk_mpi->module~mod_global_parameters module~mod_basic_types mod_basic_types module~mod_global_parameters->module~mod_basic_types module~mod_connectivity mod_connectivity module~mod_global_parameters->module~mod_connectivity module~mod_constants mod_constants module~mod_global_parameters->module~mod_constants module~mod_physicaldata mod_physicaldata module~mod_global_parameters->module~mod_physicaldata module~mod_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_variables->module~mod_basic_types

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: qunit

Calls

proc~~punstructuredvtk_mpi~~CallsGraph proc~punstructuredvtk_mpi punstructuredvtk_mpi mpi_barrier mpi_barrier proc~punstructuredvtk_mpi->mpi_barrier proc~calc_grid calc_grid proc~punstructuredvtk_mpi->proc~calc_grid proc~calc_x calc_x proc~punstructuredvtk_mpi->proc~calc_x proc~getheadernames getheadernames proc~punstructuredvtk_mpi->proc~getheadernames proc~write_pvtu write_pvtu proc~punstructuredvtk_mpi->proc~write_pvtu proc~write_vtk write_vtk proc~punstructuredvtk_mpi->proc~write_vtk phys_to_primitive phys_to_primitive proc~calc_grid->phys_to_primitive proc~mpistop mpistop proc~calc_grid->proc~mpistop proc~to_cartesian to_cartesian proc~calc_grid->proc~to_cartesian proc~getheadernames->proc~mpistop proc~write_pvtu->proc~getheadernames proc~save_connvtk save_connvtk proc~write_vtk->proc~save_connvtk mpi_abort mpi_abort proc~mpistop->mpi_abort

Called by

proc~~punstructuredvtk_mpi~~CalledByGraph proc~punstructuredvtk_mpi punstructuredvtk_mpi proc~generate_plotfile generate_plotfile proc~generate_plotfile->proc~punstructuredvtk_mpi proc~main main proc~main->proc~generate_plotfile proc~timeintegration timeintegration proc~main->proc~timeintegration proc~saveamrfile saveamrfile proc~saveamrfile->proc~generate_plotfile proc~timeintegration->proc~saveamrfile program~agile agile program~agile->proc~main

Source Code

  subroutine punstructuredvtk_mpi(qunit)
    ! Write one pvtu and vtu files for each processor
    ! Otherwise like unstructuredvtk_mpi
    use mod_forest, only: Morton_start, Morton_stop, sfc_to_igrid
    use mod_global_parameters
    use mod_calculate_xw

    integer, intent(in) ::    qunit

    double precision, dimension(0:nw+nwauxio)                   :: normconv
    double precision, dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,&
       ixMlo3-1:ixMhi3,ndim)         :: xC_TMP
    double precision, dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo3:ixMhi3,&
       ndim)           :: xCC_TMP
    double precision, dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,&
       ixMlo3-1:ixMhi3,ndim)         :: xC
    double precision, dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo3:ixMhi3,&
       ndim)           :: xCC
    double precision, dimension(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,&
       ixMlo3-1:ixMhi3,nw+nwauxio)   :: wC_TMP
    double precision, dimension(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo3:ixMhi3,&
       nw+nwauxio)     :: wCC_TMP
    character(len=name_len)   :: wnamei(1:nw+nwauxio),&
       xandwnamei(1:ndim+nw+nwauxio)
    character(len=1024) :: outfilehead
    integer             :: nx1,nx2,nx3,nxC1,nxC2,nxC3,nc,np, igrid,ixCmin1,&
       ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,&
       ixCCmax1,ixCCmax2,ixCCmax3,level,Morton_no
    character(len=80)   :: pfilename
    integer             :: filenr
    logical             :: fileopen,conv_grid

    ! Write pvtu-file:
    if (mype==0) then
       call write_pvtu(qunit)
    endif
    ! Now write the Source files:
    inquire(qunit,opened=fileopen)
    if(.not.fileopen)then
      ! generate filename
      filenr=snapshotini
      if (autoconvert) filenr=snapshotnext
      ! Open the file for the header part
      write(pfilename,'(a,i4.4,a,i4.4,a)') TRIM(base_filename),filenr,"p",mype,&
         ".vtu"
      open(qunit,file=pfilename,status='unknown',form='formatted')
    end if
    ! generate xml header
    write(qunit,'(a)')'<?xml version="1.0"?>'
    write(qunit,'(a)',advance='no') '<VTKFile type="UnstructuredGrid"'
    write(qunit,'(a)')' version="0.1" byte_order="LittleEndian">'
    write(qunit,'(a)')'  <UnstructuredGrid>'
    write(qunit,'(a)')'<FieldData>'
    write(qunit,'(2a)')'<DataArray type="Float32" Name="TIME" ',&
       'NumberOfTuples="1" format="ascii">'
    write(qunit,*) real(global_time*time_convert_factor)
    write(qunit,'(a)')'</DataArray>'
    write(qunit,'(a)')'</FieldData>'

    call getheadernames(wnamei,xandwnamei,outfilehead)

    ! number of cells, number of corner points, per grid.
    nx1=ixMhi1-ixMlo1+1;nx2=ixMhi2-ixMlo2+1;nx3=ixMhi3-ixMlo3+1;
    nxC1=nx1+1;nxC2=nx2+1;nxC3=nx3+1;
    nc=nx1*nx2*nx3
    np=nxC1*nxC2*nxC3

    ! Note: using the w_write, writelevel, writespshift
    ! we can clip parts of the grid away, select variables, levels etc.
    do level=levmin,levmax
      if (.not.writelevel(level)) cycle
      do Morton_no=Morton_start(mype),Morton_stop(mype)
        igrid=sfc_to_igrid(Morton_no)
        if (node(plevel_,igrid)/=level) cycle
        ! only output a grid when fully within clipped region selected
        ! by writespshift array
        conv_grid=(rnode(rpxmin1_,igrid)>=&
           xprobmin1+(xprobmax1-xprobmin1)*writespshift(1,&
           1).and.rnode(rpxmin2_,igrid)>=xprobmin2+&
           (xprobmax2-xprobmin2)*writespshift(2,1).and.rnode(rpxmin3_,&
           igrid)>=xprobmin3+(xprobmax3-xprobmin3)*writespshift(3,&
           1)).and.(rnode(rpxmax1_,igrid)<=&
           xprobmax1-(xprobmax1-xprobmin1)*writespshift(1,&
           2).and.rnode(rpxmax2_,igrid)<=xprobmax2-(xprobmax2-&
           xprobmin2)*writespshift(2,2).and.rnode(rpxmax3_,&
           igrid)<=xprobmax3-(xprobmax3-xprobmin3)*writespshift(3,2))
        if (.not.conv_grid) cycle
        call calc_x(igrid,xC,xCC)
        call calc_grid(qunit,igrid,xC,xCC,xC_TMP,xCC_TMP,wC_TMP,wCC_TMP,&
           normconv,ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,&
           ixCCmin2,ixCCmin3,ixCCmax1,ixCCmax2,ixCCmax3,.true.)
        call write_vtk(qunit,ixGlo1,ixGlo2,ixGlo3,ixGhi1,ixGhi2,ixGhi3,ixCmin1,&
           ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,ixCCmin1,ixCCmin2,ixCCmin3,&
           ixCCmax1,ixCCmax2,ixCCmax3,igrid,nc,np,nx1,nx2,nx3,nxC1,nxC2,nxC3,&
           normconv,wnamei,xC_TMP,xCC_TMP,wC_TMP,wCC_TMP)
      end do ! Morton_no loop
    end do ! level loop

    write(qunit,'(a)')'  </UnstructuredGrid>'
    write(qunit,'(a)')'</VTKFile>'
    close(qunit)

    if (npe>1) then
      call MPI_BARRIER(icomm,ierrmpi)
    end if

  end subroutine punstructuredvtk_mpi