cdifs_obj_PrepareSolverOperatorsDIV Subroutine

subroutine cdifs_obj_PrepareSolverOperatorsDIV(this)

Uses

  • proc~~cdifs_obj_preparesolveroperatorsdiv~~UsesGraph proc~cdifs_obj_preparesolveroperatorsdiv cdifs_obj_PrepareSolverOperatorsDIV module~leapbc leapBC proc~cdifs_obj_preparesolveroperatorsdiv->module~leapbc iso_fortran_env iso_fortran_env module~leapbc->iso_fortran_env module~leapblock leapBlock module~leapbc->module~leapblock module~leapeulerian leapEulerian module~leapbc->module~leapeulerian module~leapio leapIO module~leapbc->module~leapio module~leapkinds leapKinds module~leapbc->module~leapkinds module~leapparallel leapParallel module~leapbc->module~leapparallel module~leaputils leapUtils module~leapbc->module~leaputils mpi_f08 mpi_f08 module~leapbc->mpi_f08 module~leapblock->iso_fortran_env module~leapblock->module~leapkinds module~leapblock->module~leapparallel module~leapblock->mpi_f08 module~leapio_hdf5 leapIO_hdf5 module~leapblock->module~leapio_hdf5 module~leapeulerian->iso_fortran_env module~leapeulerian->module~leapblock module~leapeulerian->module~leapio module~leapeulerian->module~leapkinds module~leapeulerian->module~leapparallel module~leapeulerian->module~leaputils module~leapeulerian->mpi_f08 module~leapio_h5hut leapIO_h5hut module~leapio->module~leapio_h5hut module~leapio->module~leapio_hdf5 module~leapio_silo leapIO_silo module~leapio->module~leapio_silo module~leapio_xdmf leapIO_xdmf module~leapio->module~leapio_xdmf module~leapkinds->iso_fortran_env module~leapparallel->iso_fortran_env module~leapparallel->module~leapkinds module~leapparallel->mpi_f08 module~leaputils->module~leapkinds module~leapio_h5hut->module~leapkinds module~leapio_h5hut->module~leapparallel module~leapio_h5hut->module~leapio_hdf5 module~leapio_hdf5->module~leapkinds module~leapio_hdf5->module~leapparallel module~leapio_hdf5->module~leaputils hdf5 hdf5 module~leapio_hdf5->hdf5 module~leapio_silo->module~leapkinds module~leapio_silo->module~leapparallel module~leapio_silo->module~leaputils module~leapio_silo->mpi_f08 module~leapio_xdmf->module~leapkinds module~leapio_xdmf->module~leaputils

Generates the divergence operator for the velocity field, and adjusts at the boundaries.

Arguments

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

CDIFS solver


Calls

proc~~cdifs_obj_preparesolveroperatorsdiv~~CallsGraph proc~cdifs_obj_preparesolveroperatorsdiv cdifs_obj_PrepareSolverOperatorsDIV proc~bc_set_checkbcexists bc_set%bc_set_CheckBCExists proc~cdifs_obj_preparesolveroperatorsdiv->proc~bc_set_checkbcexists proc~bc_set_getbctype bc_set%bc_set_GetBCType proc~cdifs_obj_preparesolveroperatorsdiv->proc~bc_set_getbctype proc~bc_set_getextents bc_set%bc_set_GetExtents proc~cdifs_obj_preparesolveroperatorsdiv->proc~bc_set_getextents 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_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~~cdifs_obj_preparesolveroperatorsdiv~~CalledByGraph proc~cdifs_obj_preparesolveroperatorsdiv cdifs_obj_PrepareSolverOperatorsDIV proc~cdifs_obj_preparesolveroperators cdifs_obj_PrepareSolverOperators proc~cdifs_obj_preparesolveroperators->proc~cdifs_obj_preparesolveroperatorsdiv proc~cdifs_obj_preparesolver cdifs_obj_PrepareSolver proc~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolveroperators interface~cdifs_obj_preparesolver cdifs_obj%cdifs_obj_PrepareSolver interface~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolver

Source Code

    subroutine cdifs_obj_PrepareSolverOperatorsDIV(this)
      !> Generates the divergence operator for the velocity
      ! field, and adjusts at the boundaries.
      use leapBC
      implicit none
      class(cdifs_obj), intent(inout) :: this                                  !! CDIFS solver
      ! Work variables
      integer          :: i,j,k,n
      logical          :: found
      type(extent_obj) :: extents
      integer          :: dir
      character(len=2) :: varname(3)
      integer          :: ierr

      ! Allocate array
      associate (lo => this%block%lo, hi => this%block%hi, &
        op => this%op, bcs => this%bcs)
        allocate(this%DIV  (-op%st+1:op%st,lo(1):hi(1),lo(2):hi(2),lo(3):hi(3),3), &
                 source = 0.0_wp, stat=ierr)
        if (ierr.ne.0) call this%parallel%Stop('Unable to allocate DIV array')
      end associate

      ! Define divergence operator
      associate (lo => this%block%lo, hi => this%block%hi, &
        op => this%op, bcs => this%bcs)
        do k=lo(3),hi(3)
          do j=lo(2),hi(2)
            do i=lo(1),hi(1)

              do n=-op%st+1,op%st
                this%DIV(n,i,j,k,1) = this%DIV(n,i,j,k,1) + op%c_d1dx1 (n,i)
                this%DIV(n,i,j,k,2) = this%DIV(n,i,j,k,2) + op%c_d1dx2 (n,j)
                this%DIV(n,i,j,k,3) = this%DIV(n,i,j,k,3) + op%c_d1dx3 (n,k)
              end do

            end do
          end do
        end do

        ! Apply BC
        varname=['V1','V2','V3']
        do n=1,bcs%count
          do dir=1,3
            ! Velocity component in the this direction
            found = bcs%CheckBCExists(bcs%region(n)%name, varname(dir))
            if (found) then
              select case ( bcs%GetBCType(bcs%region(n)%name, varname(dir)) )
              case (BC_NEUMANN)
                ! Get extents
                extents = bcs%GetExtents(bcs%region(n)%name)

                do k=extents%lo(3),extents%hi(3)
                  do j=extents%lo(2),extents%hi(2)
                    do i=extents%lo(1),extents%hi(1)
                      this%DIV(:,i,j,k,dir) = 0.0_wp
                    end do
                  end do
                end do

              end select
            end if
          end do
        end do
      end associate

      return
    end subroutine cdifs_obj_PrepareSolverOperatorsDIV