Builds and writes block file.
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