calc_x Subroutine

public subroutine calc_x(igrid, xC, xCC)

Uses

  • proc~~calc_x~~UsesGraph proc~calc_x calc_x module~mod_geometry mod_geometry proc~calc_x->module~mod_geometry module~mod_global_parameters mod_global_parameters proc~calc_x->module~mod_global_parameters module~mod_comm_lib mod_comm_lib module~mod_geometry->module~mod_comm_lib 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

computes cell corner (xC) and cell center (xCC) coordinates

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: igrid
double precision, intent(out) :: xC(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,ixMlo3-1:ixMhi3,ndim)
double precision, intent(out) :: xCC(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo3:ixMhi3,ndim)

Called by

proc~~calc_x~~CalledByGraph proc~calc_x calc_x proc~collapse_subnode collapse_subnode proc~collapse_subnode->proc~calc_x proc~fill_subnode fill_subnode proc~fill_subnode->proc~calc_x proc~imagedatavtk_mpi ImageDataVtk_mpi proc~imagedatavtk_mpi->proc~calc_x proc~punstructuredvtk_mpi punstructuredvtk_mpi proc~punstructuredvtk_mpi->proc~calc_x proc~punstructuredvtkb_mpi punstructuredvtkB_mpi proc~punstructuredvtkb_mpi->proc~calc_x proc~tecplot tecplot proc~tecplot->proc~calc_x proc~tecplot_mpi tecplot_mpi proc~tecplot_mpi->proc~calc_x proc~unstructuredvtk unstructuredvtk proc~unstructuredvtk->proc~calc_x proc~unstructuredvtk_mpi unstructuredvtk_mpi proc~unstructuredvtk_mpi->proc~calc_x proc~unstructuredvtkb unstructuredvtkB proc~unstructuredvtkb->proc~calc_x proc~unstructuredvtkb64 unstructuredvtkB64 proc~unstructuredvtkb64->proc~calc_x proc~generate_plotfile generate_plotfile proc~generate_plotfile->proc~imagedatavtk_mpi proc~generate_plotfile->proc~punstructuredvtk_mpi proc~generate_plotfile->proc~punstructuredvtkb_mpi proc~generate_plotfile->proc~tecplot proc~generate_plotfile->proc~tecplot_mpi proc~generate_plotfile->proc~unstructuredvtk proc~generate_plotfile->proc~unstructuredvtk_mpi proc~generate_plotfile->proc~unstructuredvtkb proc~generate_plotfile->proc~unstructuredvtkb64 proc~put_collapse put_collapse proc~put_collapse->proc~collapse_subnode proc~select_slice select_slice proc~select_slice->proc~fill_subnode proc~main main proc~main->proc~generate_plotfile proc~timeintegration timeintegration proc~main->proc~timeintegration proc~put_slice put_slice proc~put_slice->proc~select_slice proc~saveamrfile saveamrfile proc~saveamrfile->proc~generate_plotfile proc~write_collapsed write_collapsed proc~saveamrfile->proc~write_collapsed proc~write_slice write_slice proc~saveamrfile->proc~write_slice proc~write_collapsed->proc~put_collapse proc~timeintegration->proc~saveamrfile proc~write_slice->proc~put_slice program~agile agile program~agile->proc~main

Source Code

  subroutine calc_x(igrid,xC,xCC)
    use mod_global_parameters
    use mod_geometry, only: r_of_s

    integer, intent(in)               :: igrid
    double precision, intent(out)     :: xC(ixMlo1-1:ixMhi1,ixMlo2-1:ixMhi2,&
       ixMlo3-1:ixMhi3,ndim)
    double precision, intent(out)     :: xCC(ixMlo1:ixMhi1,ixMlo2:ixMhi2,&
       ixMlo3:ixMhi3,ndim)

    integer                           :: ixCmin1,ixCmin2,ixCmin3,ixCmax1,&
       ixCmax2,ixCmax3, idims, level, ix

    level=node(plevel_,igrid)

    ! coordinates of cell centers
    xCC(ixMlo1:ixMhi1,ixMlo2:ixMhi2,ixMlo3:ixMhi3,:)=ps(igrid)%x(ixMlo1:ixMhi1,&
       ixMlo2:ixMhi2,ixMlo3:ixMhi3,:)

    ! coordinates of cell corners
    ixCmin1=ixMlo1-1;ixCmin2=ixMlo2-1;ixCmin3=ixMlo3-1; ixCmax1=ixMhi1
    ixCmax2=ixMhi2;ixCmax3=ixMhi3;
    if(slab_uniform)then
       do idims=1,ndim
         xC(ixCmin1:ixCmax1,ixCmin2:ixCmax2,ixCmin3:ixCmax3,&
            idims)=ps(igrid)%x(ixCmin1:ixCmax1,ixCmin2:ixCmax2,ixCmin3:ixCmax3,&
            idims)+0.5d0*dx(idims,level)
       end do
    else
       ! Any non-Cartesian coordinate.  ps%x is the cell's volume barycentre,
       ! not the midpoint of its faces, so x + dx/2 is not a corner: build the
       ! coordinate faces analytically from the block corner instead, which is
       ! both exact and the same expression fill_geometry_device uses.  Cell ix
       ! spans the logical interval [xmin + (ix-nghostcells-1)*d,
       ! xmin + (ix-nghostcells)*d], and xC(ix) is its upper face - so the
       ! range starting at ixMlo-1 delivers the lower face of the first mesh
       ! cell as its first entry, exactly as before.
       do ix=ixCmin1,ixCmax1
         xC(ix,ixCmin2:ixCmax2,ixCmin3:ixCmax3,1)= &
            rnode(rpxmin1_,igrid)+dble(ix-nghostcells)*rnode(rpdx1_,igrid)
       end do
       do ix=ixCmin2,ixCmax2
         xC(ixCmin1:ixCmax1,ix,ixCmin3:ixCmax3,2)= &
            rnode(rpxmin2_,igrid)+dble(ix-nghostcells)*rnode(rpdx2_,igrid)
       end do
       do ix=ixCmin3,ixCmax3
         xC(ixCmin1:ixCmax1,ixCmin2:ixCmax2,ix,3)= &
            rnode(rpxmin3_,igrid)+dble(ix-nghostcells)*rnode(rpdx3_,igrid)
       end do
    endif

  end subroutine calc_x