SetUpCaseBlock Subroutine

subroutine SetUpCaseBlock()

Builds and writes block file.

Arguments

None

Calls

proc~~setupcaseblock~4~~CallsGraph proc~setupcaseblock~4 SetUpCaseBlock none~get parser_obj%Get proc~setupcaseblock~4->none~get none~initialize~10 block_obj%Initialize proc~setupcaseblock~4->none~initialize~10 proc~block_obj_partition block_obj%block_obj_Partition proc~setupcaseblock~4->proc~block_obj_partition proc~block_obj_setconveniencepointers block_obj%block_obj_SetConveniencePointers proc~setupcaseblock~4->proc~block_obj_setconveniencepointers proc~block_obj_setperiodicity block_obj%block_obj_SetPeriodicity proc~setupcaseblock~4->proc~block_obj_setperiodicity proc~block_obj_setupuniformgrid block_obj%block_obj_SetupUniformGrid proc~setupcaseblock~4->proc~block_obj_setupuniformgrid 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->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_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_updateextents->proc~axis_obj_init

Called by

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

Source Code

    subroutine SetUpCaseBlock()
      !> Builds and writes block file.
      implicit none
      ! Work variables
      character(str64) :: filename
      real(wp)         :: L(3),xlo(3),xhi(3)
      integer          :: N(3), ngc, ilo(3),ihi(3), Nb(3)
      integer          :: dir
      integer          :: i,j,k
      real(wp)         :: r

      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      )

      ! Domain extents
      xlo = [-0.5_wp*L(1), 0.0_wp,-0.5_wp*L(3)]
      xhi = [ 0.5_wp*L(1), L(2),   0.5_wp*L(3)]
      ilo = [1,1,1] ; ihi = N

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

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

      select case (CASE_ID)
      case (CASE_NORMAL_WALL, CASE_NORMAL_PAIR,CASE_NORMAL_IB)

        ! Create a uniform block
        call block%SetupUniformGrid(xlo,xhi,ilo,ihi)

      case (CASE_CHANNEL_WALL,CASE_CHANNEL_IB)

        ! Create a grid, locally refined at the wall
        ! ------------------------------------------
        call parser%Get("Stretching",  r  )

        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

          ! Stretched y-axis
          do j=lo(2),hi(2)+1
            y(j)= (j-lo(2))*L(2)/real(hi(2)-lo(2)+1,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

          ! 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

      end select

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

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

      return
    end subroutine SetUpCaseBlock