Local variables
integer ifac, iel, ii
integer inod
integer ilelt, nlelt
double precision delta, deltaa
integer, allocatable, dimension(:) :: lstelt
Initialization and finalization
The following initialization block needs to be added for the following examples:
At the end of the subroutine, it is recommended to deallocate the work array:
In theory Fortran 95 deallocates locally-allocated arrays automatically, but deallocating arrays in a symetric manner to their allocation is good pratice, and avoids using a different logic C and Fortran.
Assign boundary conditions to boundary faces
One may use selection criteria to filter boundary case subsets.
Loop on faces from a subset.
Set the boundary condition for each face.
Calculation of displacement at current time step
deltaa = sin(3.141596d0*(ntcabs-1)/50.d0)
delta = sin(3.141596d0*ntcabs/50.d0)
Example 1
Example : For boundary faces of color 4 assign a fixed velocity
call getfbr(
'4', nlelt, lstelt)
do ilelt = 1, nlelt
ifac = lstelt(ilelt)
iel = ifabor(ifac)
ialtyb(ifac) = ivimpo
rcodcl(ifac,iuma,1) = 0.d0
rcodcl(ifac,ivma,1) = 0.d0
rcodcl(ifac,iwma,1) = (delta-deltaa)/
dt(iel)
enddo
Example 2
Example: For boundary face of color 5 assign a fixed displacement on nodes
call getfbr(
'5', nlelt, lstelt)
do ilelt = 1, nlelt
ifac = lstelt(ilelt)
do ii = ipnfbr(ifac), ipnfbr(ifac+1)-1
inod = nodfbr(ii)
if (impale(inod).eq.0) then
disale(1,inod) = 0.d0
disale(2,inod) = 0.d0
disale(3,inod) = delta
impale(inod) = 1
endif
enddo
enddo
Example 3
Example : For boundary faces of color 6 assign a sliding boundary
call getfbr(
'6', nlelt, lstelt)
do ilelt = 1, nlelt
ifac = lstelt(ilelt)
ialtyb(ifac) = igliss
enddo
Example 4
Example : Prescribe elsewhere a fixed boundary
call getfbr(
'not (4 or 5 or 6)', nlelt, lstelt)
do ilelt = 1, nlelt
ifac = lstelt(ilelt)
ialtyb(ifac) = ibfixe
enddo