7.2
general documentation
Atmospheric example

Atmospheric example

Local variables to be added

The following local variables need to be defined for the examples in this section:

integer iel
double precision d2s3
double precision zent,xuent,xvent,xkent,xeent,tpent
double precision, dimension(:,:), pointer :: cvar_vel
double precision, dimension(:), pointer :: cvar_k, cvar_ep, cvar_phi, cvar_fb
double precision, dimension(:), pointer :: cvar_omg, cvar_nusa
double precision, dimension(:,:), pointer :: cvar_rij
double precision, dimension(:), pointer :: cvar_scalt

Allocation

Before user initialization, work arrays lstelt must be allocated, like in basic example.

Initialization

The following initialization block needs to be added for the following examples:

! Map field arrays
call field_get_val_v(ivarfl(iu), cvar_vel)
d2s3 = 2.d0/3.d0
!===============================================================================
! Initialize variables using an input meteo profile
! (only if we are not doing a restart)
!===============================================================================
if (isuite.eq.0) then
if (itytur.eq.2) then
call field_get_val_s(ivarfl(ik), cvar_k)
call field_get_val_s(ivarfl(iep), cvar_ep)
elseif (itytur.eq.3) then
call field_get_val_v(ivarfl(irij), cvar_rij)
call field_get_val_s(ivarfl(iep), cvar_ep)
elseif (iturb.eq.50) then
call field_get_val_s(ivarfl(ik), cvar_k)
call field_get_val_s(ivarfl(iep), cvar_ep)
call field_get_val_s(ivarfl(iphi), cvar_phi)
call field_get_val_s(ivarfl(ifb), cvar_fb)
elseif (iturb.eq.60) then
call field_get_val_s(ivarfl(ik), cvar_k)
call field_get_val_s(ivarfl(iomg), cvar_omg)
elseif (iturb.eq.70) then
call field_get_val_s(ivarfl(inusa), cvar_nusa)
endif
do iel = 1, ncel
zent = xyzcen(3,iel)
call intprf(nbmetd, nbmetm, zdmet, tmmet, umet, zent, ttcabs, xuent)
call intprf(nbmetd, nbmetm, zdmet, tmmet, vmet, zent, ttcabs, xvent)
call intprf(nbmetd, nbmetm, zdmet, tmmet, ekmet, zent, ttcabs, xkent)
call intprf(nbmetd, nbmetm, zdmet, tmmet, epmet, zent, ttcabs, xeent)
cvar_vel(1,iel) = xuent
cvar_vel(2,iel) = xvent
cvar_vel(3,iel) = 0.d0
! Initiliation of turbulence variables
if (itytur.eq.2) then
cvar_k(iel) = xkent
cvar_ep(iel) = xeent
elseif (itytur.eq.3) then
cvar_rij(1,iel) = d2s3*xkent
cvar_rij(2,iel) = d2s3*xkent
cvar_rij(3,iel) = d2s3*xkent
cvar_rij(4,iel) = 0.d0
cvar_rij(5,iel) = 0.d0
cvar_rij(6,iel) = 0.d0
cvar_ep(iel) = xeent
elseif (iturb.eq.50) then
cvar_k(iel) = xkent
cvar_ep(iel) = xeent
cvar_phi(iel) = d2s3
cvar_fb(iel) = 0.d0
elseif (iturb.eq.60) then
cvar_k(iel) = xkent
cvar_omg(iel) = xeent/cmu/xkent
elseif (iturb.eq.70) then
cvar_nusa(iel) = cmu*xkent**2/xeent
endif
if (iscalt.ge.0) then
! Assume the scalar is a potential temperature
call intprf(nbmett, nbmetm, ztmet, tmmet, tpmet, zent, ttcabs, tpent)
call field_get_val_s(ivarfl(isca(iscalt)), cvar_scalt)
cvar_scalt(iel) = tpent
endif
enddo
endif

Finalization

At the end of the subroutine, it is recommended to deallocate the work array lstelt, like in basic example.