source: LMDZ5/trunk/libf/phylmd/tend_to_tke.F90 @ 2722

Last change on this file since 2722 was 2722, checked in by fhourdin, 8 years ago

Routine permettant d'ajouter des termes sources de TKE provenant
des autres paramétrisations.

File size: 4.9 KB
RevLine 
[2722]1!***************************************************************************************
2! tend_to_tke.F90
3!*************
4!
5! Subroutine that adds a tendency on the TKE created by the
6! fluxes of momentum retrieved from the wind speed tendencies
7! of the physics.
8!
9! The basic concept is the following:
10! the TKE equation writes  de/dt = -u'w' du/dz -v'w' dv/dz +g/theta dtheta/dz +......
11!
12!
13! We expect contributions to the term u'w' and v'w' that do not come from the Yamada
14! scheme, for instance: gravity waves, drag from high vegetation..... These contributions
15! need to be accounted for.
16! we explicitely calculate the fluxes, integrating the wind speed
17!                        tendency from the top of the atmospher
18!
19!
20!
21! contacts: Frederic Hourdin, Etienne Vignon
22!
23! History:
24!---------
25! - 1st redaction, Etienne, 15/10/2016
26! Ajout des 4 sous surfaces pour la tke
27! on sort l'ajout des tendances du if sur les deux cas, pour ne pas
28! dupliuqer les lignes
29! on enleve le pas de temps qui disprait dans les calculs
30!
31!
32!**************************************************************************************
33
34 SUBROUTINE tend_to_tke(dt,plev,exner,temp,windu,windv,dt_a,du_a,dv_a,tke)
35
36 USE dimphy, ONLY: klon, klev
37 USE indice_sol_mod, ONLY: nbsrf
38 USE  phys_local_var_mod, only: dtke_t, dtke_u, dtke_v
39#include "YOMCST.h"
40
41! Declarations
42!==============
43
44
45! Inputs
46!-------
47  REAL dt                   ! Time step [s]
48  REAL plev(klon,klev+1)    ! inter-layer pressure [Pa]
49  REAL temp(klon,klev)      ! temperature [K], grid-cell average or for a one subsurface
50  REAL windu(klon,klev)     ! zonal wind [m/s], grid-cell average or for a one subsurface
51  REAL windv(klon,klev)     ! meridonal wind [m/s], grid-cell average or for a one subsurface
52  REAL exner(klon,klev)     ! Fonction d'Exner = T/theta
53  REAL dt_a(klon,klev)      ! Temperature tendency [K], grid-cell average or for a one subsurface
54  REAL du_a(klon,klev)      ! Zonal wind speed tendency [m/s], grid-cell average or for a one subsurface
55  REAL dv_a(klon,klev)      ! Meridional wind speed tendency [m/s], grid-cell average or for a one subsurface
56
57! Inputs/Outputs
58!---------------
59  REAL tke(klon,klev,nbsrf)       ! Turbulent Kinetic energy [m2/s2], grid-cell average or for a subsurface
60
61
62! Local
63!-------
64
65
66  INTEGER ig,k,isrf                 ! indices
67  REAL    masse(klon,klev)          ! mass in the layers [kg/m2]
68  REAL    unsmasse(klon,klev+1)     ! linear mass in the layers [kg/m2]
69  REAL    flux_rhotw(klon,klev+1)   ! flux massique de tempe. pot. rho*u'*theta'
70  REAL    flux_rhouw(klon,klev+1)   ! flux massique de quantit?? de mouvement rho*u'*w' [kg/m/s2]
71  REAL    flux_rhovw(klon,klev+1)   ! flux massique de quantit?? de mouvement rho*v'*w' [kg/m/s2]
72  REAL    tendt(klon,klev)        ! new temperature tke tendency [m2/s2/s]
73  REAL    tendu(klon,klev)        ! new zonal tke tendency [m2/s2/s]
74  REAL    tendv(klon,klev)        ! new meridonal tke tendency [m2/s2/s]
75 
76
77
78
79! First calculations:
80!=====================
81
82      unsmasse(:,:)=0.
83      DO k=1,klev
84         masse(:,k)=(plev(:,k)-plev(:,k+1))/RG
85         unsmasse(:,k)=unsmasse(:,k)+0.5/masse(:,k)
86         unsmasse(:,k+1)=unsmasse(:,k+1)+0.5/masse(:,k)
87      END DO
88
89      tendu(:,:)=0.0
90      tendv(:,:)=0.0
91
92! Method 1: Calculation of fluxes using a downward integration
93!============================================================
94
95
96 
97! Flux calculation
98
99 flux_rhotw(:,klev+1)=0.
100 flux_rhouw(:,klev+1)=0.
101 flux_rhovw(:,klev+1)=0.
102
103   DO k=klev,1,-1
104      flux_rhotw(:,k)=flux_rhotw(:,k+1)+masse(:,k)*dt_a(:,k)/exner(:,k)
105      flux_rhouw(:,k)=flux_rhouw(:,k+1)+masse(:,k)*du_a(:,k)
106      flux_rhovw(:,k)=flux_rhovw(:,k+1)+masse(:,k)*dv_a(:,k)
107   ENDDO
108
109
110! TKE update:
111
112   DO k=2,klev
113      tendt(:,k)=-flux_rhotw(:,k)*(exner(:,k)-exner(:,k-1))*unsmasse(:,k)*RCPD
114      tendu(:,k)=-flux_rhouw(:,k)*(windu(:,k)-windu(:,k-1))*unsmasse(:,k)
115      tendv(:,k)=-flux_rhovw(:,k)*(windv(:,k)-windv(:,k-1))*unsmasse(:,k)
116   ENDDO
117   tendt(:,1)=-flux_rhotw(:,1)*(exner(:,1)-1.)*unsmasse(:,1)*RCPD
118   tendu(:,1)=-1.*flux_rhouw(:,1)*windu(:,1)*unsmasse(:,1)
119   tendv(:,1)=-1.*flux_rhovw(:,1)*windv(:,1)*unsmasse(:,1)
120
121
122 DO isrf=1,nbsrf
123    DO k=1,klev
124       tke(:,k,isrf)= tke(:,k,isrf)+tendu(:,k)+tendv(:,k)+tendt(:,k)
125       tke(:,k,isrf)= max(tke(:,k,isrf),1.e-10)
126    ENDDO
127 ENDDO
128
129 dtke_t(:,:)=tendt(:,:)
130 dtke_u(:,:)=tendu(:,:)
131 dtke_v(:,:)=tendv(:,:)
132
133
134  IF (klon==1) THEN
135  CALL iophys_ecrit('u',klev,'u','',windu)
136  CALL iophys_ecrit('v',klev,'v','',windu)
137  CALL iophys_ecrit('t',klev,'t','',temp)
138  CALL iophys_ecrit('tke1',klev,'tke1','',tke(:,1:klev,1))
139  CALL iophys_ecrit('tke2',klev,'tke2','',tke(:,1:klev,2))
140  CALL iophys_ecrit('tke3',klev,'tke3','',tke(:,1:klev,3))
141  CALL iophys_ecrit('tke4',klev,'tke4','',tke(:,1:klev,4))
142  CALL iophys_ecrit('theta',klev,'theta','',temp/exner)
143  CALL iophys_ecrit('Duv',klev,'Duv','',tendu(:,1:klev)+tendv(:,1:klev))
144  CALL iophys_ecrit('Dt',klev,'Dt','',tendt(:,1:klev))
145  ENDIF
146
147 END SUBROUTINE tend_to_tke
Note: See TracBrowser for help on using the repository browser.