!copyright (C) 2001 MSC-RPN COMM %%%RPNPHY%%%
*** S/P LIN_KDIF_SIMP1
SUBROUTINE LIN_KDIF_SIMP1( D, DSIZ, F, FSIZ, V, VSIZ, NI, NK ) 1,1
#include "impnone.cdk"
*
INTEGER DSIZ, FSIZ, VSIZ, NI, NK
REAL D(DSIZ), F(FSIZ), V(VSIZ)
*
*Author
* Y. Delage (Aug 99) - Make surface layer (CM, CT) linear and
* consistent with K profiles.
* - Provide more realistic profiles for
* diffusion coefficients than in
* in the old fisimp series
*Revision
* 001 S. Laroche (Dec 01) - add to simplified physics package
* 002 S. Laroche (May 02) - cleanup diagnostic fields
* 003 S. Laroche (Nov 02) - Implementation of robust near surface diagnostics
*
*Object
* To calculate the (unnormalized) diffusion coefficients KM and KT
* and the (unnormalized) boundary conditions for the diffusion of
* wind, temperature, and moisture
* using simplified physical parameterizations.
* The normalizations are done in S/P DIFVER5.
*Arguments
*
* - Input/Output -
* F field of permanent physics variables
* V volatile bus
* FSIZ dimension of F
* VSIZ dimension of V
*
* - Input -
* KDIF work field (diffusion coefficient)
* ZEDIAG work field (modified ZE values for diagnostic)
* UET work field (friction velocity)
* NI horizontal dimension
* NK vertical dimension
*
*
*Notes
* DRAG = false : only a background value of diffusion coefficients
* DRAG = true : boundary layer dependent on z0 and on latitude
* CHAUF= true : surface heat flux over oceans dependent also on z0t
* EVAP = true : evaporation over oceans dependent also on z0t
*
**
INTEGER K,I
REAL KDIF(NI,NK),ZEDIAG(NI,NK),UET(NI)
REAL lnz0,lnz0t,lnza,lnzu,lnzt,ruv,rtq,ctu
REAL DIFBAK
DATA DIFBAK/0.1/
SAVE DIFBAK
*
*
#include "indx_sfc.cdk"
#include "phy_macros_f.h"
#include "phybus.cdk"
#include "options.cdk"
#include "consphy.cdk"
#include "dintern.cdk"
#include "surfcon.cdk"
#include "fintern.cdk"
#include "zuzt.cdk"
*
integer IK
* fonction-formule pour l'adressage
IK(i,k) = (K-1)*NI + I -1
*
******************************************************************
*
* INITIALISATION ET DIFFUSION DE 'BACKGROUD'
*
DO I=1,NI
F(Z0T +I-1) = 0.0001
V(BM +I-1) = 0.0
V(BT +I-1) = 0.0
V(ALFAT+I-1) = 0.0
V(ALFAQ+I-1) = 0.0
*
F(TSURF+I-1) = F(TWATER+I-1)
F(QSURF+(indx_agrege-1)*NI+I-1) = foqst(F(TSURF+I-1),D(PMOINS+I-1))
UET(I) = 0.001
ENDDO
*
DO K=1,NK
DO I=1,NI
V(GTE+IK(I,K)) = -GRAV/CPD
V(GQ +IK(I,K)) = 0.0
ENDDO
ENDDO
DO K=1,NK-1
DO I=1,NI
V(KM+IK(I,K)) = DIFBAK
V(KT+IK(I,K)) = DIFBAK/BETA
ENDDO
ENDDO
********************************************************************
*
* COUCHE LIMITE INDEPENDANTE DE L'ETAT ATMOSPHERIQUE
IF (DRAG) THEN
*
DO K=1,NK-2
DO I=1,NI
ZEDIAG(I,K)=V(ZE+IK(I,K))
ENDDO
ENDDO
K=NK-1
DO I=1,NI
ZEDIAG(I,K)=V(ZA+I-1)
ENDDO
*
*
* CALCUL DES COEFFICIENTS DE DIFFUSION
*
CALL KDIFSIMP
(KDIF,UET,ZEDIAG,F(Z0),V(FCOR),DIFBAK,NK-1,NI)
*
DO K=1,NK-1
DO I=1,NI
V(KM+IK(I,K)) = KDIF(I,K)
V(KT+IK(I,K)) = KDIF(I,K)/BETA
ENDDO
ENDDO
*
DO I=1,NI
*
lnza = ALOG (V(ZA+I-1)+F(Z0+I-1))
lnz0 = ALOG(F(Z0+I-1))
lnz0t = ALOG(F(Z0T+I-1))
lnzu = ALOG (ZU + F(Z0+I-1))
lnzt = ALOG (ZT + F(Z0T+I-1))
*
* Note: Les flux de chaleur et d'humidite sont nuls sur les
* continents. MG est le masque terre/mer.
* F(MG+I) = 1.0 sur la terre
* F(MG+I) = 0.0 sur l'eau
*
V(BM+I-1) = karman/(lnza-lnz0)*UET(i)
CTU = karman/((lnza-lnz0t)*BETA)*UET(i)*(1.-NINT(F(MG+I-1)))
*
* PROFILS LOGARITHMIQUES POUR NIVEAU DIAGNOSTIQUE
*
ruv = (lnzu-lnz0)/(lnza-lnz0)
rtq = ((lnzt-lnz0t)/(lnza-lnz0t))*(1.-NINT(F(MG+I-1)))
F(udiag+i-1) = D(UMOINS+IK(I,NK)) * ruv
F(vdiag+i-1) = D(VMOINS+IK(I,NK)) * ruv
*
* CHOIX PLUS ROBUSTE POUR T ET HU DIAGNOSTIQUE (= AU NIVEAU SUPERIEUR)
*
F(tdiag+i-1) = D(TMOINS +IK(I,NK))
F(qdiag+i-1) = D(HUMOINS +IK(I,NK))
*
* OPTION A ETRE CONSIDEREE DANS LE FUTURE
* NOTE: le TLM/ADJ ne sont pas encore disponible pour cette option
*
C F(tdiag+i-1) = -zt*(grav/cpd) + F(TSURF+I-1)
C $ + ((D(TMOINS +IK(I,NK)) + V(ZA+I-1)*(grav/cpd)) - F(TSURF+I-1)) * rtq
C F(qdiag+i-1) = F(QSURF+(indx_agrege-1)*NI+I-1)
C $ + (D(HUMOINS +IK(I,NK)) - F(QSURF+(indx_agrege-1)*NI+I-1)) * rtq
*
*
* FLUX DE CHALEUR ET HUMIDITE
*
V(BT +I-1) = 0.0
V(ALFAT+I-1) = 0.0
V(ALFAQ+I-1) = 0.0
IF(CHAUF) THEN
V(BT +I-1) = CTU
V(ALFAT+I-1) = -CTU*(F(TSURF+I-1) - V(ZA+I-1)*(grav/cpd))
ENDIF
*
* FLUX DE VAPEUR ET HUMIDITE DIAGNOSTIQUE A Z=ZT
*
IF(EVAP) THEN
V(BT +I-1) = CTU
V(ALFAQ+I-1) = -CTU*(F(QSURF+(indx_agrege-1)*NI+I-1))
ENDIF
*
*
END DO
*
ENDIF
****************************************************************************
*
RETURN
END