SetUpCaseBlock Subroutine

subroutine SetUpCaseBlock()

Builds and writes block file.

Arguments

None

Calls

proc~~setupcaseblock~2~~CallsGraph proc~setupcaseblock~2 SetUpCaseBlock none~get parser_obj%Get proc~setupcaseblock~2->none~get none~initialize~10 block_obj%Initialize proc~setupcaseblock~2->none~initialize~10 proc~block_obj_partition block_obj%block_obj_Partition proc~setupcaseblock~2->proc~block_obj_partition proc~block_obj_setconveniencepointers block_obj%block_obj_SetConveniencePointers proc~setupcaseblock~2->proc~block_obj_setconveniencepointers proc~block_obj_setperiodicity block_obj%block_obj_SetPeriodicity proc~setupcaseblock~2->proc~block_obj_setperiodicity proc~parser_obj_read0d parser_obj%parser_obj_read0D none~get->proc~parser_obj_read0d proc~parser_obj_read1d parser_obj%parser_obj_read1D none~get->proc~parser_obj_read1d proc~block_obj_init block_obj%block_obj_Init none~initialize~10->proc~block_obj_init proc~block_obj_init2 block_obj%block_obj_Init2 none~initialize~10->proc~block_obj_init2 proc~block_obj_partition->proc~block_obj_setconveniencepointers proc~axis_obj_final axis_obj%axis_obj_Final proc~block_obj_partition->proc~axis_obj_final proc~axis_obj_init axis_obj%axis_obj_Init proc~block_obj_partition->proc~axis_obj_init proc~block_obj_setupmpitypes block_obj%block_obj_SetupMPITypes proc~block_obj_partition->proc~block_obj_setupmpitypes proc~block_obj_subdivideblock block_obj%block_obj_SubDivideBlock proc~block_obj_partition->proc~block_obj_subdivideblock proc~block_obj_updategridghostcells block_obj%block_obj_UpdateGridGhostCells proc~block_obj_partition->proc~block_obj_updategridghostcells proc~block_obj_updatemidpoints block_obj%block_obj_UpdateMidPoints proc~block_obj_partition->proc~block_obj_updatemidpoints proc~block_obj_updatespacing block_obj%block_obj_UpdateSpacing proc~block_obj_partition->proc~block_obj_updatespacing proc~parallel_obj_topology parallel_obj%parallel_obj_Topology proc~block_obj_partition->proc~parallel_obj_topology proc~block_obj_setupuniformgrid block_obj%block_obj_SetupUniformGrid proc~block_obj_init2->proc~block_obj_setupuniformgrid mpi_type_commit mpi_type_commit proc~block_obj_setupmpitypes->mpi_type_commit mpi_type_free mpi_type_free proc~block_obj_setupmpitypes->mpi_type_free mpi_type_vector mpi_type_vector proc~block_obj_setupmpitypes->mpi_type_vector mpi_irecv mpi_irecv proc~block_obj_updategridghostcells->mpi_irecv mpi_isend mpi_isend proc~block_obj_updategridghostcells->mpi_isend mpi_wait mpi_wait proc~block_obj_updategridghostcells->mpi_wait mpi_waitall mpi_waitall proc~block_obj_updategridghostcells->mpi_waitall proc~block_obj_updateextents block_obj%block_obj_UpdateExtents proc~block_obj_updategridghostcells->proc~block_obj_updateextents mpi_cart_coords mpi_cart_coords proc~parallel_obj_topology->mpi_cart_coords mpi_cart_create mpi_cart_create proc~parallel_obj_topology->mpi_cart_create mpi_cart_rank mpi_cart_rank proc~parallel_obj_topology->mpi_cart_rank mpi_cart_shift mpi_cart_shift proc~parallel_obj_topology->mpi_cart_shift mpi_comm_rank mpi_comm_rank proc~parallel_obj_topology->mpi_comm_rank mpi_dims_create mpi_dims_create proc~parallel_obj_topology->mpi_dims_create none~assigndefault parser_obj%AssignDefault proc~parser_obj_read0d->none~assigndefault proc~parser_obj_fetchlabelid parser_obj%parser_obj_FetchLabelID proc~parser_obj_read0d->proc~parser_obj_fetchlabelid proc~parser_obj_read1d->none~assigndefault proc~parser_obj_read1d->proc~parser_obj_fetchlabelid proc~parser_obj_assigndefault0d parser_obj%parser_obj_AssignDefault0D none~assigndefault->proc~parser_obj_assigndefault0d proc~parser_obj_assigndefault1d parser_obj%parser_obj_AssignDefault1D none~assigndefault->proc~parser_obj_assigndefault1d proc~block_obj_setupuniformgrid->proc~block_obj_setconveniencepointers proc~block_obj_setupuniformgrid->proc~axis_obj_init proc~block_obj_setupuniformgrid->proc~block_obj_setupmpitypes proc~block_obj_setupuniformgrid->proc~block_obj_updategridghostcells proc~block_obj_setupuniformgrid->proc~block_obj_updatemidpoints proc~block_obj_setupuniformgrid->proc~block_obj_updatespacing proc~block_obj_updateextents->proc~axis_obj_init

Called by

proc~~setupcaseblock~2~~CalledByGraph proc~setupcaseblock~2 SetUpCaseBlock program~main~2 main program~main~2->proc~setupcaseblock~2

Source Code

    subroutine SetUpCaseBlock()
      !> Builds and writes block file.
      implicit none
      ! Work variables
      character(str64) :: filename
      real(wp)         :: L(3)
      integer          :: N(3), ngc, Nb(3)
      integer          :: dir
      integer          :: i,j,k
      integer          :: nwall
      integer          :: hif
      integer          :: lof
      integer          :: Nf

      call parser%Get('Block file',           filename              )
      call parser%Get("Domain size",          L                     )
      call parser%Get("Grid points",          N                     )
      call parser%Get("Ghost cells",          ngc                   )
      call parser%Get("Partition",            Nb                    )
      call parser%Get("Number of wall cells", nwall,    default = 4 )

      ! Initialize the main block
      call block%Initialize(ngc,parallel)

      ! Setup the domain periodicity
      call block%SetPeriodicity([.true.,.false.,.true.])

      ! Create a uniform grid, with extra cells
      ! in wall
      ! ------------------------------------------
      associate (lo=>block%lo, hi=>block%hi)
        ! Setup bounds
        lo = [1,1,1]
        hi = N

        ! Initialize axes
        do dir=1,3
          call block%axis(dir)%Initialize(lo(dir),hi(dir),ngc)
        end do
        call block%SetConveniencePointers()
      end associate

      associate (x=>block%x, y=>block%y, z=>block%z, &
        lo =>block%lo, hi=>block%hi)
        ! Uniform x-axis
        do i=lo(1),hi(1)+1
          x(i)= (i-lo(1))*L(1)/real(hi(1)-lo(1)+1,wp)
        end do

        ! y-axis
        Nf  = N(2)-2*nwall  ! Total number of points within fluid
        lof = lo(2)+nwall   ! Minimum position within fluid
        hif = lof + Nf - 1  ! Maximum position within fluid

        ! Inner channel points
        do j=lof,hif+1
          y(j)= (j-lof)*L(2)/real(Nf,wp) - 0.5_wp*L(2)
          !y(j)= 0.5_wp*L(2)*tanh(r*y(j)/(0.5_wp*L(2)))/tanh(r)
        end do
        ! Bottom wall points
        do j=lo(2),lof-1
          y(j) = y(lof)-(lof-j)*(y(lof+1)-y(lof))
        end do
        ! Top wall points
        do j=hif+2,hi(2)+1
          y(j) = y(hif+1)+(j-(hif+1))*(y(hif+1)-y(hif))
        end do

        ! Store IB positions
        IBy(1) = y(lof)
        IBy(2) = y(hif+1)

        ! Uniform z-axis
        do k=lo(3),hi(3)+1
          z(k)= (k-lo(3))*L(3)/real(hi(3)-lo(3)+1,wp) - 0.5_wp*L(3)
        end do
      end associate

      ! Partition block for parallel initializations
      call block%Partition(Nb)

      ! Write block to disk
      call block%Write(filename)

      return
    end subroutine SetUpCaseBlock