integrate_subnode Subroutine

public subroutine integrate_subnode(igrid, jgrid, dir)

Uses

  • proc~~integrate_subnode~~UsesGraph proc~integrate_subnode integrate_subnode module~mod_forest mod_forest proc~integrate_subnode->module~mod_forest module~mod_global_parameters mod_global_parameters proc~integrate_subnode->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) :: igrid
integer, intent(in) :: jgrid
integer, intent(in) :: dir

Calls

proc~~integrate_subnode~~CallsGraph proc~integrate_subnode integrate_subnode proc~mpistop mpistop proc~integrate_subnode->proc~mpistop mpi_abort mpi_abort proc~mpistop->mpi_abort

Called by

proc~~integrate_subnode~~CalledByGraph proc~integrate_subnode integrate_subnode proc~put_collapse put_collapse proc~put_collapse->proc~integrate_subnode proc~write_collapsed write_collapsed proc~write_collapsed->proc~put_collapse proc~saveamrfile saveamrfile proc~saveamrfile->proc~write_collapsed proc~timeintegration timeintegration proc~timeintegration->proc~saveamrfile proc~main main proc~main->proc~timeintegration program~agile agile program~agile->proc~main

Source Code

subroutine integrate_subnode(igrid,jgrid,dir)
use mod_forest, only: tree_node_ptr, igrid_to_node
use mod_global_parameters
integer, intent(in)                        :: igrid, jgrid, dir
! .. local ..
type(tree_node_ptr)                        :: tree
integer                                    :: nx1,nx2,nx3
integer                                    :: ig1,ig2,ig3, level, ig1targetmin,&
   ig2targetmin,ig3targetmin, ig1targetmax,ig2targetmax,ig3targetmax
integer                                    :: ix1targetmin,ix1targetmax,&
   ix2targetmin,ix2targetmax,ix3targetmin,ix3targetmax, idim1targetmin,&
   idim1targetmax,idim2targetmin,idim2targetmax,idim3targetmin,idim3targetmax
integer                                    :: ixMdimlo1,ixMdimlo2,ixMdimlo3,&
   ixMdimhi1,ixMdimhi2,ixMdimhi3, ix1orig,ix2orig,ix3orig, ix1,ix2,ix3

integer                                    ::  igdim1,igdim2

!-----------------------------------------------------------------------------
tree%node => igrid_to_node(igrid, mype)%node
 ig1 = tree%node%ig1;  ig2 = tree%node%ig2;  ig3 = tree%node%ig3;
level = tree%node%level
! number of cells per grid.
nx1=ixMhi1-ixMlo1+1;nx2=ixMhi2-ixMlo2+1;nx3=ixMhi3-ixMlo3+1;

! assumes uniform cartesian grid with factor 2 refinement per dimension

if (level > collapseLevel) then
   ig1targetmin = int(dble(ig1-1)/2.0d0**(level-collapseLevel))+1
   ig1targetmax = ig1targetmin
else if (level < collapseLevel) then
   ig1targetmin = int(2.0d0**(collapseLevel-level))*(ig1-1)+1
   ig1targetmax = int(2.0d0**(collapseLevel-level))*ig1
else
   ig1targetmin = ig1
   ig1targetmax = ig1
end if
ix1targetmin = nx1*(ig1targetmin-1)+1
ix1targetmax = nx1*ig1targetmax


if (level > collapseLevel) then
   ig2targetmin = int(dble(ig2-1)/2.0d0**(level-collapseLevel))+1
   ig2targetmax = ig2targetmin
else if (level < collapseLevel) then
   ig2targetmin = int(2.0d0**(collapseLevel-level))*(ig2-1)+1
   ig2targetmax = int(2.0d0**(collapseLevel-level))*ig2
else
   ig2targetmin = ig2
   ig2targetmax = ig2
end if
ix2targetmin = nx2*(ig2targetmin-1)+1
ix2targetmax = nx2*ig2targetmax


if (level > collapseLevel) then
   ig3targetmin = int(dble(ig3-1)/2.0d0**(level-collapseLevel))+1
   ig3targetmax = ig3targetmin
else if (level < collapseLevel) then
   ig3targetmin = int(2.0d0**(collapseLevel-level))*(ig3-1)+1
   ig3targetmax = int(2.0d0**(collapseLevel-level))*ig3
else
   ig3targetmin = ig3
   ig3targetmax = ig3
end if
ix3targetmin = nx3*(ig3targetmin-1)+1
ix3targetmax = nx3*ig3targetmax



select case(dir)
case (1)
   igdim1=(ig2-1)*nx2
   igdim2=(ig3-1)*nx3
   idim1targetmin=ix2targetmin;idim1targetmax=ix2targetmax; 
   idim2targetmin=ix3targetmin;idim2targetmax=ix3targetmax;
   ixMdimlo1=ixMlo2;ixMdimhi1=ixMhi2;
   ixMdimlo2=ixMlo3;ixMdimhi2=ixMhi3;
case (2)
   igdim1=(ig1-1)*nx1
   igdim2=(ig3-1)*nx3
   idim1targetmin=ix1targetmin;idim1targetmax=ix1targetmax; 
   idim2targetmin=ix3targetmin;idim2targetmax=ix3targetmax;
   ixMdimlo1=ixMlo1;ixMdimhi1=ixMhi1;
   ixMdimlo2=ixMlo3;ixMdimhi2=ixMhi3;
case (3)
   igdim1=(ig1-1)*nx1
   igdim2=(ig2-1)*nx2
   idim1targetmin=ix1targetmin;idim1targetmax=ix1targetmax; 
   idim2targetmin=ix2targetmin;idim2targetmax=ix2targetmax;
   ixMdimlo1=ixMlo1;ixMdimhi1=ixMhi1;
   ixMdimlo2=ixMlo2;ixMdimhi2=ixMhi2;
case default
   call mpistop("slice direction not clear in integrate_subnode")
end select

if (level >= collapseLevel) then
   do ix1orig = ixMdimlo1,ixMdimhi1
      do ix2orig = ixMdimlo2,ixMdimhi2
 ix1 = int(dble(ix1orig-nghostcells+igdim1-1)*2.0d0**(collapseLevel-level))+1
 ix2 = int(dble(ix2orig-nghostcells+igdim2-1)*2.0d0**(collapseLevel-level))+1
         collapsedData(ix1,ix2,1:nw+nwauxio) = collapsedData(ix1,ix2,&
            1:nw+nwauxio) + ps_sub(jgrid)%w(ix1orig,ix2orig,&
            1:nw+nwauxio) / 2.0d0**(2*(level-collapseLevel))
      end do
   end do
else

   do ix1 = idim1targetmin,idim1targetmax

   do ix2 = idim2targetmin,idim2targetmax
  ix1orig = int(dble(ix1-idim1targetmin)/2.0d0**(collapseLevel-level))+1+&
     nghostcells 
 ix2orig = int(dble(ix2-idim2targetmin)/2.0d0**(collapseLevel-level))+1+&
    nghostcells 
 collapsedData(ix1,ix2,1:nw+nwauxio) = collapsedData(ix1,ix2,&
    1:nw+nwauxio) + ps_sub(jgrid)%w(ix1orig,ix2orig,1:nw+nwauxio)
  enddo
 enddo
end if




end subroutine integrate_subnode