source: LMDZ6/trunk/libf/phylmd/screenc_mod.f90 @ 5276

Last change on this file since 5276 was 5274, checked in by abarral, 9 months ago

Replace yomcst.h by existing module

  • Property svn:executable set to *
File size: 9.9 KB
Line 
1!
2MODULE screenc_mod
3!
4! This module contains some procedures for calculation of the correction
5! of temperature, specific humidity and wind at a reference level
6!
7  USE cdrag_mod
8  IMPLICIT NONE
9
10CONTAINS
11!
12!****************************************************************************************
13!
14!r original routine svn3623
15!
16      SUBROUTINE screenc(klon, knon, nsrf, zxli, &
17                         speed, temp, q_zref, zref, &
18                         ts, qsurf, z0m, z0h, psol, &
19                         ustar, testar, qstar, okri, ri1, &
20                         pref, delu, delte, delq, s_pblh, prain, tsol, pat1)
21      USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO                   &
22          , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA                  &
23          , R_ecc, R_peri, R_incl                                      &
24          , RA, RG, R1SA                                         &
25          , RSIGMA                                                     &
26          , R, RMD, RMV, RD, RV, RCPD                    &
27          , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12        &
28          , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w                    &
29          , RCW, RCS                                                 &
30          , RLVTT, RLSTT, RLMLT, RTT, RATM                           &
31          , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS            &
32          , RALPD, RBETD, RGAMD
33IMPLICIT NONE
34!-----------------------------------------------------------------------
35!
36! Objet : calcul "correcteur" des anomalies du vent, de la temperature
37!         potentielle et de l'humidite relative au niveau de reference zref et
38!         par rapport au 1er niveau (pour u) ou a la surface (pour theta et q)
39!         a partir des equations de Louis.
40!
41! Reference : Hess, Colman et McAvaney (1995)
42!
43! I. Musat, 01.07.2002
44!-----------------------------------------------------------------------
45!
46! klon----input-I- dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude)
47! knon----input-I- nombre de points pour un type de surface
48! nsrf----input-I- indice pour le type de surface; voir indice_sol_mod.F90
49! zxli----input-L- TRUE si calcul des cdrags selon Laurent Li
50! speed---input-R- module du vent au 1er niveau du modele
51! temp----input-R- temperature de l'air au 1er niveau du modele
52! q_zref--input-R- humidite relative au 1er niveau du modele
53! zref----input-R- altitude de reference
54! ts------input-R- temperature de l'air a la surface
55! qsurf---input-R- humidite relative a la surface
56! z0m, z0h---input-R- rugosite
57! psol----input-R- pression au sol
58! ustar---input-R- facteur d'echelle pour le vent
59! testar--input-R- facteur d'echelle pour la temperature potentielle
60! qstar---input-R- facteur d'echelle pour l'humidite relative
61! okri----input-L- TRUE si on veut tester le nb. Richardson entre la sfce
62!                  et zref par rapport au Ri entre la sfce et la 1ere couche
63! ri1-----input-R- nb. Richardson entre la surface et la 1ere couche
64!
65! pref----input-R- pression au niveau de reference
66! delu----input-R- anomalie du vent par rapport au 1er niveau
67! delte---input-R- anomalie de la temperature potentielle par rapport a la surface
68! delq----input-R- anomalie de l'humidite relative par rapport a la surface
69!
70      INTEGER, intent(in) :: klon, knon, nsrf
71      LOGICAL, intent(in) :: zxli, okri
72      REAL, dimension(klon), intent(in) :: speed, temp, q_zref
73      REAL, intent(in) :: zref
74      REAL, dimension(klon), intent(IN) :: ts
75      REAL, dimension(klon), intent(in) :: qsurf, psol
76      REAL, dimension(klon), intent(inout):: z0m, z0h
77      REAL, dimension(klon), intent(in) :: ustar, testar, qstar, ri1
78
79      REAL, dimension(klon), intent(inout) :: s_pblh
80      REAL, dimension(klon), intent(in) :: prain
81      REAL, dimension(klon), intent(in) :: tsol
82      REAL, DIMENSION(klon), INTENT(IN)    :: pat1 !pression premier lev
83!
84      REAL, dimension(klon), intent(out) :: pref, delu, delte, delq
85!-----------------------------------------------------------------------
86
87      include "flux_arp.h"
88!
89! Variables locales 
90      INTEGER :: i
91      REAL, dimension(klon) :: cdram, cdrah, cdran, zri1, gref,ycdragm,zri_zero
92!
93!-------------------------------------------------------------------------
94      DO i=1, knon
95        gref(i) = zref*RG
96      ENDDO
97!
98! Richardson at reference level
99!
100!      CALL coefcdrag (klon, knon, nsrf, zxli, &
101!                    speed, temp, q_zref, gref, &
102!                    psol, ts, qsurf, rugos, &
103!                    okri, ri1, &
104!                    cdram, cdrah, cdran, zri1, &
105!                    pref)
106! Fuxing WANG, 04/03/2015, replace the coefcdrag by the merged version: cdrag
107      CALL cdrag (knon, nsrf, &
108                    speed, temp, q_zref, gref, &
109                    psol, s_pblh, ts, qsurf, z0m, z0h, &
110                    zri_zero,0,                &
111                    cdram, cdrah, zri1, pref, prain, tsol, pat1)
112      DO i = 1, knon
113        IF(ok_prescr_ust) THEN
114! La aussi il faut forcer avec ust (FC + MPL 20160210)
115        ycdragm(i) = ust*ust/(1.+speed(i))/speed(i)
116        cdram=ycdragm
117        delu(i) = ust/sqrt(cdram(i))
118        ELSE
119        delu(i) = ustar(i)/sqrt(cdram(i))
120        ENDIF
121        delte(i)= (testar(i)* sqrt(cdram(i)))/ &
122                   cdrah(i)
123        delq(i)= (qstar(i)* sqrt(cdram(i)))/ &
124                  cdrah(i)
125      ENDDO
126!
127      RETURN
128      END SUBROUTINE screenc
129!
130      SUBROUTINE screencn(klon, knon, nsrf, zxli, &
131                         speed, temp, q_zref, zref, &
132                         ts, qsurf, z0m, z0h, psol, &
133                         cdrm, cdrh,  okri, &
134                         ri1, iri1, &
135                         pref, delm, delh, zri1, s_pblh, prain, tsol, pat1)
136      USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO                   &
137          , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA                  &
138          , R_ecc, R_peri, R_incl                                      &
139          , RA, RG, R1SA                                         &
140          , RSIGMA                                                     &
141          , R, RMD, RMV, RD, RV, RCPD                    &
142          , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12        &
143          , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w                    &
144          , RCW, RCS                                                 &
145          , RLVTT, RLSTT, RLMLT, RTT, RATM                           &
146          , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS            &
147          , RALPD, RBETD, RGAMD
148IMPLICIT NONE
149!-----------------------------------------------------------------------
150!
151! Objet : calcul "correcteur" des anomalies du vent, de la temperature
152!         potentielle et de l'humidite relative au niveau de reference zref et
153!         par rapport au 1er niveau (pour u) ou a la surface (pour theta et q)
154!         a partir des equations de Louis.
155!
156! Reference : Hess, Colman et McAvaney (1995)
157!
158! I. Musat, 01.07.2002
159!-----------------------------------------------------------------------
160!
161! klon----input-I- dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude)
162! knon----input-I- nombre de points pour un type de surface
163! nsrf----input-I- indice pour le type de surface; voir indice_sol_mod.F90
164! zxli----input-L- TRUE si calcul des cdrags selon Laurent Li
165! speed---input-R- module du vent au 1er niveau du modele
166! temp----input-R- temperature de l'air au 1er niveau du modele
167! q_zref--input-R- humidite relative au 1er niveau du modele
168! zref----input-R- altitude de reference
169! ts------input-R- temperature de l'air a la surface
170! qsurf---input-R- humidite relative a la surface
171! z0m, z0h---input-R- rugosite
172! psol----input-R- pression au sol
173! ustar---input-R- facteur d'echelle pour le vent
174! testar--input-R- facteur d'echelle pour la temperature potentielle
175! qstar---input-R- facteur d'echelle pour l'humidite relative
176! okri----input-L- TRUE si on veut tester le nb. Richardson entre la sfce
177!                  et zref par rapport au Ri entre la sfce et la 1ere couche
178! ri1-----input-R- nb. Richardson entre la surface et la 1ere couche
179!
180! pref----input-R- pression au niveau de reference
181! delu----input-R- anomalie du vent par rapport au 1er niveau
182! delte---input-R- anomalie de la temperature potentielle par rapport a la surface
183! delq----input-R- anomalie de l'humidite relative par rapport a la surface
184!
185      INTEGER, intent(in) :: klon, knon, nsrf
186      LOGICAL, intent(in) :: zxli, okri
187      REAL, dimension(klon), intent(in) :: speed, temp, q_zref
188      REAL, intent(in) :: zref
189      REAL, dimension(klon), intent(in) :: ts, qsurf, psol
190      REAL, dimension(klon), intent(inout) :: z0m, z0h
191      REAL, dimension(klon), intent(in) :: cdrm, cdrh, ri1
192      REAL, dimension(klon), intent(inout) :: s_pblh
193      REAL, dimension(klon), intent(in) :: prain
194      REAL, dimension(klon), intent(in) :: tsol
195      REAL, DIMENSION(klon), INTENT(IN) :: pat1 !pression premier lev
196      INTEGER, INTENT(IN)  :: iri1 ! Richardson de la 1ere couche
197!
198      REAL, dimension(klon), intent(out) :: pref, delm, delh, zri1
199!171220     REAL, dimension(klon) :: cdram, cdrah, zri1
200      REAL, dimension(klon) :: cdram, cdrah
201!-----------------------------------------------------------------------
202
203      include "flux_arp.h"
204!
205! Variables locales 
206      INTEGER :: i
207      REAL, dimension(klon) :: cdran, gref,ycdragm
208!
209!-------------------------------------------------------------------------
210      DO i=1, knon
211        gref(i) = zref*RG
212      ENDDO
213!
214! Richardson at reference level
215!
216      CALL cdrag(knon, nsrf, &
217                    speed, temp, q_zref, gref, &
218                    psol, s_pblh, ts, qsurf, z0m, z0h, &
219                    ri1, iri1, &
220                    cdram, cdrah, zri1, pref, prain, tsol, pat1)
221      DO i = 1, knon
222        delm(i) = sqrt(cdrm(i))/sqrt(cdram(i))
223!verifier que temp est un temperat potentielle.
224        delh(i)= (cdrh(i)* sqrt(cdram(i)))/ &
225                   (cdrah(i)*sqrt(cdrm(i)))
226      ENDDO
227!
228      RETURN
229      END SUBROUTINE screencn
230END MODULE screenc_mod
Note: See TracBrowser for help on using the repository browser.