marker_set_UpdateNormals Subroutine

private impure subroutine marker_set_UpdateNormals(this, ibN)

Updates the Normals field.

Type Bound

marker_set

Arguments

Type IntentOptional Attributes Name
class(marker_set), intent(inout) :: this

A collection of tessellation elements

type(eulerian_obj_r), intent(inout) :: ibN(3)

Normals field


Calls

proc~~marker_set_updatenormals~~CallsGraph proc~marker_set_updatenormals marker_set%marker_set_UpdateNormals none~updateboundary bc_set%UpdateBoundary proc~marker_set_updatenormals->none~updateboundary proc~eulerian_obj_final eulerian_obj_base%eulerian_obj_Final proc~marker_set_updatenormals->proc~eulerian_obj_final proc~eulerian_obj_init eulerian_obj_base%eulerian_obj_Init proc~marker_set_updatenormals->proc~eulerian_obj_init proc~eulerian_obj_updateghostcells eulerian_obj_base%eulerian_obj_UpdateGhostCells proc~marker_set_updatenormals->proc~eulerian_obj_updateghostcells proc~marker_set_filter marker_set%marker_set_Filter proc~marker_set_updatenormals->proc~marker_set_filter proc~bc_set_updateboundaryscalar bc_set%bc_set_UpdateBoundaryScalar none~updateboundary->proc~bc_set_updateboundaryscalar proc~bc_set_updateboundaryvector bc_set%bc_set_UpdateBoundaryVector none~updateboundary->proc~bc_set_updateboundaryvector proc~eulerian_obj_updateghostcells_x eulerian_obj_base%eulerian_obj_UpdateGhostCells_x proc~eulerian_obj_updateghostcells->proc~eulerian_obj_updateghostcells_x proc~eulerian_obj_updateghostcells_y eulerian_obj_base%eulerian_obj_UpdateGhostCells_y proc~eulerian_obj_updateghostcells->proc~eulerian_obj_updateghostcells_y proc~eulerian_obj_updateghostcells_z eulerian_obj_base%eulerian_obj_UpdateGhostCells_z proc~eulerian_obj_updateghostcells->proc~eulerian_obj_updateghostcells_z extrapolate extrapolate proc~marker_set_filter->extrapolate f f proc~marker_set_filter->f markers markers proc~marker_set_filter->markers n n proc~marker_set_filter->n proc~eulerian_obj_addupghostcells eulerian_obj_base%eulerian_obj_AddUpGhostCells proc~marker_set_filter->proc~eulerian_obj_addupghostcells v v proc~marker_set_filter->v proc~bc_set_updateboundaryscalar->proc~eulerian_obj_updateghostcells proc~bc_set_checkbcexists bc_set%bc_set_CheckBCExists proc~bc_set_updateboundaryscalar->proc~bc_set_checkbcexists proc~bc_set_getbctype bc_set%bc_set_GetBCType proc~bc_set_updateboundaryscalar->proc~bc_set_getbctype proc~bc_set_updateboundarydirichlet bc_set%bc_set_UpdateBoundaryDirichlet proc~bc_set_updateboundaryscalar->proc~bc_set_updateboundarydirichlet proc~bc_set_updateboundaryneumann bc_set%bc_set_UpdateBoundaryNeumann proc~bc_set_updateboundaryscalar->proc~bc_set_updateboundaryneumann proc~bc_set_updateboundarysymmetryplus bc_set%bc_set_UpdateBoundarySymmetryPlus proc~bc_set_updateboundaryscalar->proc~bc_set_updateboundarysymmetryplus proc~bc_set_updateboundaryvector->proc~eulerian_obj_updateghostcells proc~bc_set_updateboundaryvector->proc~bc_set_checkbcexists proc~bc_set_updateboundaryvector->proc~bc_set_getbctype proc~bc_set_getsidedirbyregion bc_set%bc_set_GetSideDirByRegion proc~bc_set_updateboundaryvector->proc~bc_set_getsidedirbyregion proc~bc_set_updateboundaryvector->proc~bc_set_updateboundarydirichlet proc~bc_set_updateboundaryvector->proc~bc_set_updateboundaryneumann proc~bc_set_updateboundarysymmetryminus bc_set%bc_set_UpdateBoundarySymmetryMinus proc~bc_set_updateboundaryvector->proc~bc_set_updateboundarysymmetryminus proc~bc_set_updateboundaryvector->proc~bc_set_updateboundarysymmetryplus proc~eulerian_obj_addupghostcells->proc~eulerian_obj_updateghostcells proc~eulerian_obj_addupghostcells_x eulerian_obj_base%eulerian_obj_AddUpGhostCells_x proc~eulerian_obj_addupghostcells->proc~eulerian_obj_addupghostcells_x proc~eulerian_obj_addupghostcells_y eulerian_obj_base%eulerian_obj_AddUpGhostCells_y proc~eulerian_obj_addupghostcells->proc~eulerian_obj_addupghostcells_y proc~eulerian_obj_addupghostcells_z eulerian_obj_base%eulerian_obj_AddUpGhostCells_z proc~eulerian_obj_addupghostcells->proc~eulerian_obj_addupghostcells_z cell cell proc~eulerian_obj_updateghostcells_x->cell mpi_irecv mpi_irecv proc~eulerian_obj_updateghostcells_x->mpi_irecv mpi_isend mpi_isend proc~eulerian_obj_updateghostcells_x->mpi_isend mpi_waitall mpi_waitall proc~eulerian_obj_updateghostcells_x->mpi_waitall proc~eulerian_obj_updateghostcells_y->cell proc~eulerian_obj_updateghostcells_y->mpi_irecv proc~eulerian_obj_updateghostcells_y->mpi_isend proc~eulerian_obj_updateghostcells_y->mpi_waitall proc~eulerian_obj_updateghostcells_z->cell proc~eulerian_obj_updateghostcells_z->mpi_irecv proc~eulerian_obj_updateghostcells_z->mpi_isend proc~eulerian_obj_updateghostcells_z->mpi_waitall proc~bc_set_getregionindex bc_set%bc_set_GetRegionIndex proc~bc_set_checkbcexists->proc~bc_set_getregionindex proc~region_obj_getbcindex region_obj%region_obj_GetBCIndex proc~bc_set_checkbcexists->proc~region_obj_getbcindex proc~bc_set_getbctype->proc~bc_set_getregionindex proc~bc_set_getbctype->proc~region_obj_getbcindex proc~bc_set_getsidedirbyregion->proc~bc_set_getregionindex proc~bc_set_updateboundarydirichlet->proc~bc_set_getsidedirbyregion proc~bc_set_getbcpointer bc_set%bc_set_GetBCPointer proc~bc_set_updateboundarydirichlet->proc~bc_set_getbcpointer proc~bc_set_getextents bc_set%bc_set_GetExtents proc~bc_set_updateboundarydirichlet->proc~bc_set_getextents proc~bc_set_updateboundaryneumann->proc~bc_set_getsidedirbyregion proc~bc_set_updateboundaryneumann->proc~bc_set_getextents proc~bc_set_updateboundarysymmetryminus->proc~bc_set_getsidedirbyregion proc~bc_set_updateboundarysymmetryminus->proc~bc_set_getextents proc~bc_set_updateboundarysymmetryplus->proc~bc_set_getsidedirbyregion proc~bc_set_updateboundarysymmetryplus->proc~bc_set_getextents proc~eulerian_obj_addupghostcells_x->cell proc~eulerian_obj_addupghostcells_x->mpi_irecv proc~eulerian_obj_addupghostcells_x->mpi_isend proc~eulerian_obj_addupghostcells_x->mpi_waitall proc~eulerian_obj_addupghostcells_y->cell proc~eulerian_obj_addupghostcells_y->mpi_irecv proc~eulerian_obj_addupghostcells_y->mpi_isend proc~eulerian_obj_addupghostcells_y->mpi_waitall proc~eulerian_obj_addupghostcells_z->cell proc~eulerian_obj_addupghostcells_z->mpi_irecv proc~eulerian_obj_addupghostcells_z->mpi_isend proc~eulerian_obj_addupghostcells_z->mpi_waitall proc~bc_set_getbcpointer->proc~bc_set_getregionindex proc~bc_set_getbcpointer->proc~region_obj_getbcindex proc~bc_set_getextents->proc~bc_set_getregionindex none~get~3 hashtbl_obj%Get proc~bc_set_getregionindex->none~get~3 proc~hashtbl_obj_hashstring hashtbl_obj%hashtbl_obj_HashString proc~bc_set_getregionindex->proc~hashtbl_obj_hashstring proc~region_obj_getbcindex->none~get~3 proc~region_obj_getbcindex->proc~hashtbl_obj_hashstring proc~hashtbl_obj_get_int4 hashtbl_obj%hashtbl_obj_Get_int4 none~get~3->proc~hashtbl_obj_get_int4 proc~hashtbl_obj_get_int8 hashtbl_obj%hashtbl_obj_Get_int8 none~get~3->proc~hashtbl_obj_get_int8 proc~hashtbl_obj_get_real_dp hashtbl_obj%hashtbl_obj_Get_real_dp none~get~3->proc~hashtbl_obj_get_real_dp proc~hashtbl_obj_get_real_sp hashtbl_obj%hashtbl_obj_Get_real_sp none~get~3->proc~hashtbl_obj_get_real_sp none~get~2 sllist_obj%Get proc~hashtbl_obj_get_int4->none~get~2 proc~hashtbl_obj_get_int8->none~get~2 proc~hashtbl_obj_get_real_dp->none~get~2 proc~hashtbl_obj_get_real_sp->none~get~2 proc~sllist_obj_get_int4 sllist_obj%sllist_obj_Get_int4 none~get~2->proc~sllist_obj_get_int4 proc~sllist_obj_get_int8 sllist_obj%sllist_obj_Get_int8 none~get~2->proc~sllist_obj_get_int8 proc~sllist_obj_get_real_dp sllist_obj%sllist_obj_Get_real_dp none~get~2->proc~sllist_obj_get_real_dp proc~sllist_obj_get_real_sp sllist_obj%sllist_obj_Get_real_sp none~get~2->proc~sllist_obj_get_real_sp proc~sllist_obj_get_int4->proc~sllist_obj_get_int4 proc~sllist_obj_get_int8->proc~sllist_obj_get_int8 proc~sllist_obj_get_real_dp->proc~sllist_obj_get_real_dp proc~sllist_obj_get_real_sp->proc~sllist_obj_get_real_sp

Called by

proc~~marker_set_updatenormals~~CalledByGraph proc~marker_set_updatenormals marker_set%marker_set_UpdateNormals proc~respart_set_updatenormals ResPart_set%ResPart_set_UpdateNormals proc~respart_set_updatenormals->proc~marker_set_updatenormals proc~cdifs_obj_computesolidvf cdifs_obj%cdifs_obj_ComputeSolidVF proc~cdifs_obj_computesolidvf->proc~respart_set_updatenormals proc~grans_obj_computesolidvf grans_obj%grans_obj_ComputeSolidVF proc~grans_obj_computesolidvf->proc~respart_set_updatenormals proc~cdifs_obj_advancesolutionrp cdifs_obj_AdvanceSolutionRP proc~cdifs_obj_advancesolutionrp->proc~cdifs_obj_computesolidvf proc~cdifs_obj_preparesolver cdifs_obj_PrepareSolver proc~cdifs_obj_preparesolver->proc~cdifs_obj_computesolidvf proc~grans_obj_preparesolver grans_obj_PrepareSolver proc~grans_obj_preparesolver->proc~grans_obj_computesolidvf interface~grans_obj_writeoutputdata grans_obj%grans_obj_WriteOutputData proc~grans_obj_preparesolver->interface~grans_obj_writeoutputdata proc~grans_obj_writeoutputdata grans_obj_WriteOutputData proc~grans_obj_writeoutputdata->proc~grans_obj_computesolidvf interface~cdifs_obj_preparesolver cdifs_obj%cdifs_obj_PrepareSolver interface~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolver interface~grans_obj_preparesolver grans_obj%grans_obj_PrepareSolver interface~grans_obj_preparesolver->proc~grans_obj_preparesolver interface~grans_obj_writeoutputdata->proc~grans_obj_writeoutputdata proc~cdifs_obj_advancesolution cdifs_obj_AdvanceSolution proc~cdifs_obj_advancesolution->proc~cdifs_obj_advancesolutionrp interface~cdifs_obj_advancesolution cdifs_obj%cdifs_obj_AdvanceSolution interface~cdifs_obj_advancesolution->proc~cdifs_obj_advancesolution

Source Code

    impure subroutine marker_set_UpdateNormals(this,ibN)
      !> Updates the Normals field.
      implicit none
      class(marker_set),    intent(inout) :: this                              !! A collection of tessellation elements
      type(eulerian_obj_r), intent(inout) :: ibN(3)                            !! Normals field
      ! work variables
      type(eulerian_obj_r):: tmp(3)
      integer :: i,j,k

      ! Initialize temporary fields
      call tmp(1)%Initialize('ibN1',this%block,this%parallel,0)
      call tmp(2)%Initialize('ibN2',this%block,this%parallel,0)
      call tmp(3)%Initialize('ibN3',this%block,this%parallel,0)

      ! Filter and add to total normals field
      call this%Filter('N1',tmp(1))
      call this%Filter('N2',tmp(2))
      call this%Filter('N3',tmp(3))

      ! Apply boundary conditions
      call this%bcs%UpdateBoundary(tmp)

      ! Interpolate from cell centers to faces
      do k=this%block%lo(3),this%block%hi(3)
        do j=this%block%lo(2),this%block%hi(2)
          do i=this%block%lo(1),this%block%hi(1)
            ibN(1)%cell(i,j,k) = ibN(1)%cell(i,j,k) + dot_product(this%op%c_intrp1m(:,i),tmp(1)%cell(i-this%op%st:i+this%op%st-1,j,k))
            ibN(2)%cell(i,j,k) = ibN(2)%cell(i,j,k) + dot_product(this%op%c_intrp2m(:,j),tmp(2)%cell(i,j-this%op%st:j+this%op%st-1,k))
            ibN(3)%cell(i,j,k) = ibN(3)%cell(i,j,k) + dot_product(this%op%c_intrp3m(:,k),tmp(3)%cell(i,j,k-this%op%st:k+this%op%st-1))
          end do
        end do
      end do

      call ibN(1)%UpdateGhostCells()
      call ibN(2)%UpdateGhostCells()
      call ibN(3)%UpdateGhostCells()

      ! Clear data
      call tmp(1)%Finalize()
      call tmp(2)%Finalize()
      call tmp(3)%Finalize()

      return
    end subroutine marker_set_UpdateNormals