A second method of defining an inlet condition which converges towards an infinite channel profile is based simply on feedback from values computed at inlet cell centers (combining the inlet boundary conditions and the effect of wall friction on the inlet walls). It assumes the mesh is very regular and orthogonal, at least on the first two inlet cell layers (using a gradient correction in the case of a less regular mesh might work, but has never been tested.
Local variables to be added
The following local variables need to be defined for the examples in this section:
integer ifac, iel, ii, ilelt, nlelt
double precision xustar2, xdh, d2s3, rhomoy
double precision acc(2), fmprsc, fmul, uref2, vnrm
integer, allocatable, dimension(:) :: lstelt, mrkcel
double precision, dimension(:), pointer :: bfpro_rom
double precision, dimension(:), pointer :: cvar_r11, cvar_r22, cvar_r33
double precision, dimension(:), pointer :: cvar_r12, cvar_r23, cvar_r13
double precision, dimension(:), pointer :: cvar_k, cvar_ep, cvar_phi
double precision, dimension(:), pointer :: cvar_omg
double precision, dimension(:), pointer :: cvar_al, cvar_fb
double precision, dimension(:), pointer :: cvar_nusa
double precision, dimension(:), pointer :: cvar_scal
double precision, dimension(:,:), pointer :: cvar_vel
Initialization and finalization
Initialization and finalization is similar to that of the base examples
Body
Here, we define an inlet boundary condition for a very long channel or duct with a section matching the boundary faces of group 'INLET'.
We fix a mean inlet velocity, and use a feedback loop assuming a fixed-point type behavior will allow us to reach a state matching that of a very long inlet channel.
- Warning
- We assume other boundary conditions are defined before this one (ideally, using the GUI).
-
We also assume that the mesh is orthogonal at the inlet, and we are using a RANS (not LES) computation. to the current inlet.
For EBRSM of V2f models, to avoid laminarization at the inlet, the initial velocity (at the first time step) is divided by 10 on inlet faces adjacent to the boundary, so as to ensure a velocity gradient and turbulent production. Otherwise, the initialization may fail.
fmprsc = 1.d0
mrkcel(iel) = 0
enddo
mrkcel(iel) = 1
endif
enddo
endif
do ilelt = 1, nlelt
ifac = lstelt(ilelt)
if (mrkcel(iel) .eq. 1) then
rcodcl(ifac,
iu,1) = fmprsc/10.d0
endif
endif
uref2 = rcodcl(ifac,
iu,1)**2 &
uref2 = max(uref2,1.d-12)
xdh = 1.d0
rhomoy = bfpro_rom(ifac)
rcodcl)
rcodcl(ifac,
isca(ii),1) = 1.d0
enddo
endif
enddo
deallocate(mrkcel)
endif
else
acc(1) = 0.d0
acc(2) = 0.d0
do ilelt = 1, nlelt
ifac = lstelt(ilelt)
vnrm = sqrt(cvar_vel(1,iel)**2 + cvar_vel(2,iel)**2 + cvar_vel(3,iel)**2)
acc(1) = acc(1) + vnrm*
surfbn(ifac)
acc(2) = acc(2) +
surfbn(ifac)
enddo
endif
fmul = fmprsc/(acc(1)/acc(2))
do ilelt = 1, nlelt
ifac = lstelt(ilelt)
vnrm = sqrt(cvar_vel(1,iel)**2 + cvar_vel(2,iel)**2 + cvar_vel(3,iel)**2)
rcodcl(ifac,
ik,1) = cvar_k(iel)
rcodcl(ifac,
iep,1) = cvar_ep(iel)
rcodcl(ifac,
ir11,1) = cvar_r11(iel)
rcodcl(ifac,
ir22,1) = cvar_r22(iel)
rcodcl(ifac,
ir33,1) = cvar_r33(iel)
rcodcl(ifac,
ir12,1) = cvar_r12(iel)
rcodcl(ifac,
ir13,1) = cvar_r13(iel)
rcodcl(ifac,
ir23,1) = cvar_r23(iel)
rcodcl(ifac,
iep,1) = cvar_ep(iel)
rcodcl(ifac,
ial,1) = cvar_al(iel)
endif
rcodcl(ifac,
ik,1) = cvar_k(iel)
rcodcl(ifac,
iep,1) = cvar_ep(iel)
rcodcl(ifac,
iphi,1) = cvar_phi(iel)
rcodcl(ifac,
ifb,1) = cvar_fb(iel)
elseif (
iturb.eq.51)
then
rcodcl(ifac,
ial,1) = cvar_al(iel)
endif
elseif (
iturb.eq.60)
then
rcodcl(ifac,
ik,1) = cvar_k(iel)
rcodcl(ifac,
iomg,1) = cvar_omg(iel)
elseif (
iturb.eq.70)
then
rcodcl(ifac,
inusa,1) = cvar_nusa(iel)
endif
rcodcl(ifac,
isca(ii),1) = cvar_scal(ii)
enddo
endif
enddo
endif