write_forest Subroutine

public subroutine write_forest(file_handle)

Uses

  • proc~~write_forest~~UsesGraph proc~write_forest write_forest module~mod_forest mod_forest proc~write_forest->module~mod_forest module~mod_global_parameters mod_global_parameters proc~write_forest->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) :: file_handle

Calls

proc~~write_forest~~CallsGraph proc~write_forest write_forest mpi_file_write mpi_file_write proc~write_forest->mpi_file_write

Called by

proc~~write_forest~~CalledByGraph proc~write_forest write_forest proc~convert_dat_generic convert_dat_generic proc~convert_dat_generic->proc~write_forest proc~write_snapshot write_snapshot proc~write_snapshot->proc~write_forest proc~convert_all convert_all proc~convert_all->proc~convert_dat_generic proc~saveamrfile saveamrfile proc~saveamrfile->proc~write_snapshot proc~timeintegration timeintegration proc~timeintegration->proc~saveamrfile proc~main main proc~main->proc~timeintegration program~agile agile program~agile->proc~main

Source Code

  subroutine write_forest(file_handle)
    use mod_forest
    use mod_global_parameters

    integer, intent(in) :: file_handle

    integer, dimension(MPI_STATUS_SIZE) :: status
    integer :: ig1,ig2,ig3,isfc
    logical :: leafbuf(nleafbuf)
    integer :: nbuffered

    nbuffered = 0
    do isfc=1,nglev1
       ig1=sfc_iglevel1(1,isfc)
       ig2=sfc_iglevel1(2,isfc)
       ig3=sfc_iglevel1(3,isfc)
       call write_node(tree_root(ig1,ig2,ig3))
    end do
    call flush_leafbuf

    contains

      recursive subroutine write_node(tree)
        implicit none

        type(tree_node_ptr) :: tree

        integer :: ic1,ic2,ic3

        if (nbuffered == nleafbuf) call flush_leafbuf
        nbuffered = nbuffered + 1
        leafbuf(nbuffered) = tree%node%leaf

        if (.not.tree%node%leaf) then
           do ic3=1,2
           do ic2=1,2
           do ic1=1,2
              call write_node(tree%node%child(ic1,ic2,ic3))
           end do
           end do
           end do
        end if

      end subroutine write_node

      subroutine flush_leafbuf
        implicit none

        if (nbuffered == 0) return
        call MPI_FILE_WRITE(file_handle,leafbuf,nbuffered,MPI_LOGICAL,status,&
           ierrmpi)
        nbuffered = 0

      end subroutine flush_leafbuf

  end subroutine write_forest