source: LMDZ6/trunk/libf/phylmd/tend_to_tke.f90 @ 5274

Last change on this file since 5274 was 5274, checked in by abarral, 5 hours ago

Replace yomcst.h by existing module

File size: 5.8 KB
RevLine 
[2728]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
[3198]34 SUBROUTINE tend_to_tke(dt,plev,exner,temp,windu,windv,dt_a,du_a,dv_a,pctsrf,tke)
[2728]35
36 USE dimphy, ONLY: klon, klev
37 USE indice_sol_mod, ONLY: nbsrf
[3210]38
[5274]39USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO                   &
40          , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA                  &
41          , R_ecc, R_peri, R_incl                                      &
42          , RA, RG, R1SA                                         &
43          , RSIGMA                                                     &
44          , R, RMD, RMV, RD, RV, RCPD                    &
45          , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12        &
46          , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w                    &
47          , RCW, RCS                                                 &
48          , RLVTT, RLSTT, RLMLT, RTT, RATM                           &
49          , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS            &
50          , RALPD, RBETD, RGAMD
[3210]51IMPLICIT NONE
[2728]52
[5274]53
[2728]54! Declarations
55!==============
56
57
58! Inputs
59!-------
60  REAL dt                   ! Time step [s]
61  REAL plev(klon,klev+1)    ! inter-layer pressure [Pa]
62  REAL temp(klon,klev)      ! temperature [K], grid-cell average or for a one subsurface
63  REAL windu(klon,klev)     ! zonal wind [m/s], grid-cell average or for a one subsurface
64  REAL windv(klon,klev)     ! meridonal wind [m/s], grid-cell average or for a one subsurface
65  REAL exner(klon,klev)     ! Fonction d'Exner = T/theta
66  REAL dt_a(klon,klev)      ! Temperature tendency [K], grid-cell average or for a one subsurface
67  REAL du_a(klon,klev)      ! Zonal wind speed tendency [m/s], grid-cell average or for a one subsurface
68  REAL dv_a(klon,klev)      ! Meridional wind speed tendency [m/s], grid-cell average or for a one subsurface
[3198]69  REAL pctsrf(klon,nbsrf+1)       ! Turbulent Kinetic energy [m2/s2], grid-cell average or for a subsurface
[2728]70
71! Inputs/Outputs
72!---------------
[3188]73  REAL tke(klon,klev+1,nbsrf+1)       ! Turbulent Kinetic energy [m2/s2], grid-cell average or for a subsurface
[2728]74
75
76! Local
77!-------
78
79
[3210]80  INTEGER i,k,isrf                 ! indices
[2728]81  REAL    masse(klon,klev)          ! mass in the layers [kg/m2]
82  REAL    unsmasse(klon,klev+1)     ! linear mass in the layers [kg/m2]
83  REAL    flux_rhotw(klon,klev+1)   ! flux massique de tempe. pot. rho*u'*theta'
84  REAL    flux_rhouw(klon,klev+1)   ! flux massique de quantit?? de mouvement rho*u'*w' [kg/m/s2]
85  REAL    flux_rhovw(klon,klev+1)   ! flux massique de quantit?? de mouvement rho*v'*w' [kg/m/s2]
86  REAL    tendt(klon,klev)        ! new temperature tke tendency [m2/s2/s]
87  REAL    tendu(klon,klev)        ! new zonal tke tendency [m2/s2/s]
88  REAL    tendv(klon,klev)        ! new meridonal tke tendency [m2/s2/s]
89 
90
91
92
93! First calculations:
94!=====================
95
96      unsmasse(:,:)=0.
97      DO k=1,klev
98         masse(:,k)=(plev(:,k)-plev(:,k+1))/RG
99         unsmasse(:,k)=unsmasse(:,k)+0.5/masse(:,k)
100         unsmasse(:,k+1)=unsmasse(:,k+1)+0.5/masse(:,k)
101      END DO
102
103      tendu(:,:)=0.0
104      tendv(:,:)=0.0
105
106! Method 1: Calculation of fluxes using a downward integration
107!============================================================
108
109
110 
111! Flux calculation
112
113 flux_rhotw(:,klev+1)=0.
114 flux_rhouw(:,klev+1)=0.
115 flux_rhovw(:,klev+1)=0.
116
117   DO k=klev,1,-1
118      flux_rhotw(:,k)=flux_rhotw(:,k+1)+masse(:,k)*dt_a(:,k)/exner(:,k)
119      flux_rhouw(:,k)=flux_rhouw(:,k+1)+masse(:,k)*du_a(:,k)
120      flux_rhovw(:,k)=flux_rhovw(:,k+1)+masse(:,k)*dv_a(:,k)
121   ENDDO
122
123
124! TKE update:
125
126   DO k=2,klev
127      tendt(:,k)=-flux_rhotw(:,k)*(exner(:,k)-exner(:,k-1))*unsmasse(:,k)*RCPD
128      tendu(:,k)=-flux_rhouw(:,k)*(windu(:,k)-windu(:,k-1))*unsmasse(:,k)
129      tendv(:,k)=-flux_rhovw(:,k)*(windv(:,k)-windv(:,k-1))*unsmasse(:,k)
130   ENDDO
131   tendt(:,1)=-flux_rhotw(:,1)*(exner(:,1)-1.)*unsmasse(:,1)*RCPD
132   tendu(:,1)=-1.*flux_rhouw(:,1)*windu(:,1)*unsmasse(:,1)
133   tendv(:,1)=-1.*flux_rhovw(:,1)*windv(:,1)*unsmasse(:,1)
134
135
[3208]136 DO isrf=1,nbsrf
[2728]137    DO k=1,klev
[3198]138       DO i=1,klon
139          IF (pctsrf(i,isrf)>0.) THEN
140            tke(i,k,isrf)= tke(i,k,isrf)+tendu(i,k)+tendv(i,k)+tendt(i,k)
141            tke(i,k,isrf)= max(tke(i,k,isrf),1.e-10)
142          ENDIF
143       ENDDO
[2728]144    ENDDO
145 ENDDO
146
147
[2897]148!  IF (klon==1) THEN
149!  CALL iophys_ecrit('u',klev,'u','',windu)
150!  CALL iophys_ecrit('v',klev,'v','',windu)
151!  CALL iophys_ecrit('t',klev,'t','',temp)
152!  CALL iophys_ecrit('tke1',klev,'tke1','',tke(:,1:klev,1))
153!  CALL iophys_ecrit('tke2',klev,'tke2','',tke(:,1:klev,2))
154!  CALL iophys_ecrit('tke3',klev,'tke3','',tke(:,1:klev,3))
155!  CALL iophys_ecrit('tke4',klev,'tke4','',tke(:,1:klev,4))
156!  CALL iophys_ecrit('theta',klev,'theta','',temp/exner)
157!  CALL iophys_ecrit('Duv',klev,'Duv','',tendu(:,1:klev)+tendv(:,1:klev))
158!  CALL iophys_ecrit('Dt',klev,'Dt','',tendt(:,1:klev))
159!  ENDIF
[2728]160
[3188]161 END SUBROUTINE tend_to_tke
Note: See TracBrowser for help on using the repository browser.