Load internal BC property for 2D Slice.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(treelmesh_type), | intent(in) | :: | tree | |||
type(tem_BC_prop_type), | intent(inout) | :: | me |
Boundary condition construct to load the data into |
||
integer, | intent(in), | optional | :: | nSides |
Required sides to set, defaults to 26. |
subroutine load_BC_intern_2D( tree, me, nSides )
! ---------------------------------------------------------------------------
type(treelmesh_type), intent(in) :: tree
!> Boundary condition construct to load the data into
type(tem_BC_prop_type), intent(inout) :: me
!> Required sides to set, defaults to 26.
integer, intent(in), optional :: nSides
! ---------------------------------------------------------------------------
integer :: iElem
integer :: neigh_coord(4)
integer :: my_coord(4)
integer(kind=long_k) :: tID, neighID
! ---------------------------------------------------------------------------
if (present(nSides)) then
me%nSides = nSides
else
me%nSides = 26
end if
me%nBCtypes = 0
allocate(me%BC_label(me%nBCtypes))
allocate(me%boundary_ID(me%nSides, me%Property%nElems))
me%boundary_ID = 0_long_k
do iElem=1,me%Property%nElems
tID = tree%treeID(me%Property%ElemID(iElem))
me%boundary_ID(q__B, iElem) = -tID
me%boundary_ID(q__T, iElem) = -tID
if (me%nSides > 6) then
my_coord = tem_coordofID(tID)
! Neighbor in the west
neigh_coord = my_coord + [-1, 0, 0, 0]
neighID = tem_IdOfCoord(neigh_coord)
me%boundary_ID(q_BW, iElem) = -neighID
me%boundary_ID(q_TW, iElem) = -neighID
! Neighbor in the east
neigh_coord = my_coord + [+1, 0, 0, 0]
neighID = tem_IdOfCoord(neigh_coord)
me%boundary_ID(q_BE, iElem) = -neighID
me%boundary_ID(q_TE, iElem) = -neighID
! Neighbor in the south
neigh_coord = my_coord + [0, -1, 0, 0]
neighID = tem_IdOfCoord(neigh_coord)
me%boundary_ID(q_BS, iElem) = -neighID
me%boundary_ID(q_TS, iElem) = -neighID
! Neighbor in the north
neigh_coord = my_coord + [0, +1, 0, 0]
neighID = tem_IdOfCoord(neigh_coord)
me%boundary_ID(q_BN, iElem) = -neighID
me%boundary_ID(q_TN, iElem) = -neighID
if (me%nSides > 18) then
! Neighbor in the south-west
neigh_coord = my_coord + [-1, -1, 0, 0]
neighID = tem_IdOfCoord(neigh_coord)
me%boundary_ID(qBSW, iElem) = -neighID
me%boundary_ID(qTSW, iElem) = -neighID
! Neighbor in the south-east
neigh_coord = my_coord + [+1, -1, 0, 0]
neighID = tem_IdOfCoord(neigh_coord)
me%boundary_ID(qBSE, iElem) = -neighID
me%boundary_ID(qTSE, iElem) = -neighID
! Neighbor in the north-west
neigh_coord = my_coord + [-1, +1, 0, 0]
neighID = tem_IdOfCoord(neigh_coord)
me%boundary_ID(qBNW, iElem) = -neighID
me%boundary_ID(qTNW, iElem) = -neighID
! Neighbor in the north-east
neigh_coord = my_coord + [+1, +1, 0, 0]
neighID = tem_IdOfCoord(neigh_coord)
me%boundary_ID(qBNE, iElem) = -neighID
me%boundary_ID(qTNE, iElem) = -neighID
end if
end if
end do
end subroutine load_BC_intern_2D