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

Last change on this file since 5296 was 5285, checked in by abarral, 3 days ago

As discussed internally, remove generic ONLY: ... for new _mod_h modules

  • Property svn:executable set to *
File size: 8.4 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
22IMPLICIT NONE
23!-----------------------------------------------------------------------
24!
25! Objet : calcul "correcteur" des anomalies du vent, de la temperature
26!         potentielle et de l'humidite relative au niveau de reference zref et
27!         par rapport au 1er niveau (pour u) ou a la surface (pour theta et q)
28!         a partir des equations de Louis.
29!
30! Reference : Hess, Colman et McAvaney (1995)
31!
32! I. Musat, 01.07.2002
33!-----------------------------------------------------------------------
34!
35! klon----input-I- dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude)
36! knon----input-I- nombre de points pour un type de surface
37! nsrf----input-I- indice pour le type de surface; voir indice_sol_mod.F90
38! zxli----input-L- TRUE si calcul des cdrags selon Laurent Li
39! speed---input-R- module du vent au 1er niveau du modele
40! temp----input-R- temperature de l'air au 1er niveau du modele
41! q_zref--input-R- humidite relative au 1er niveau du modele
42! zref----input-R- altitude de reference
43! ts------input-R- temperature de l'air a la surface
44! qsurf---input-R- humidite relative a la surface
45! z0m, z0h---input-R- rugosite
46! psol----input-R- pression au sol
47! ustar---input-R- facteur d'echelle pour le vent
48! testar--input-R- facteur d'echelle pour la temperature potentielle
49! qstar---input-R- facteur d'echelle pour l'humidite relative
50! okri----input-L- TRUE si on veut tester le nb. Richardson entre la sfce
51!                  et zref par rapport au Ri entre la sfce et la 1ere couche
52! ri1-----input-R- nb. Richardson entre la surface et la 1ere couche
53!
54! pref----input-R- pression au niveau de reference
55! delu----input-R- anomalie du vent par rapport au 1er niveau
56! delte---input-R- anomalie de la temperature potentielle par rapport a la surface
57! delq----input-R- anomalie de l'humidite relative par rapport a la surface
58!
59      INTEGER, intent(in) :: klon, knon, nsrf
60      LOGICAL, intent(in) :: zxli, okri
61      REAL, dimension(klon), intent(in) :: speed, temp, q_zref
62      REAL, intent(in) :: zref
63      REAL, dimension(klon), intent(IN) :: ts
64      REAL, dimension(klon), intent(in) :: qsurf, psol
65      REAL, dimension(klon), intent(inout):: z0m, z0h
66      REAL, dimension(klon), intent(in) :: ustar, testar, qstar, ri1
67
68      REAL, dimension(klon), intent(inout) :: s_pblh
69      REAL, dimension(klon), intent(in) :: prain
70      REAL, dimension(klon), intent(in) :: tsol
71      REAL, DIMENSION(klon), INTENT(IN)    :: pat1 !pression premier lev
72!
73      REAL, dimension(klon), intent(out) :: pref, delu, delte, delq
74!-----------------------------------------------------------------------
75
76      include "flux_arp.h"
77!
78! Variables locales 
79      INTEGER :: i
80      REAL, dimension(klon) :: cdram, cdrah, cdran, zri1, gref,ycdragm,zri_zero
81!
82!-------------------------------------------------------------------------
83      DO i=1, knon
84        gref(i) = zref*RG
85      ENDDO
86!
87! Richardson at reference level
88!
89!      CALL coefcdrag (klon, knon, nsrf, zxli, &
90!                    speed, temp, q_zref, gref, &
91!                    psol, ts, qsurf, rugos, &
92!                    okri, ri1, &
93!                    cdram, cdrah, cdran, zri1, &
94!                    pref)
95! Fuxing WANG, 04/03/2015, replace the coefcdrag by the merged version: cdrag
96      CALL cdrag (knon, nsrf, &
97                    speed, temp, q_zref, gref, &
98                    psol, s_pblh, ts, qsurf, z0m, z0h, &
99                    zri_zero,0,                &
100                    cdram, cdrah, zri1, pref, prain, tsol, pat1)
101      DO i = 1, knon
102        IF(ok_prescr_ust) THEN
103! La aussi il faut forcer avec ust (FC + MPL 20160210)
104        ycdragm(i) = ust*ust/(1.+speed(i))/speed(i)
105        cdram=ycdragm
106        delu(i) = ust/sqrt(cdram(i))
107        ELSE
108        delu(i) = ustar(i)/sqrt(cdram(i))
109        ENDIF
110        delte(i)= (testar(i)* sqrt(cdram(i)))/ &
111                   cdrah(i)
112        delq(i)= (qstar(i)* sqrt(cdram(i)))/ &
113                  cdrah(i)
114      ENDDO
115!
116      RETURN
117      END SUBROUTINE screenc
118!
119      SUBROUTINE screencn(klon, knon, nsrf, zxli, &
120                         speed, temp, q_zref, zref, &
121                         ts, qsurf, z0m, z0h, psol, &
122                         cdrm, cdrh,  okri, &
123                         ri1, iri1, &
124                         pref, delm, delh, zri1, s_pblh, prain, tsol, pat1)
125      USE yomcst_mod_h
126IMPLICIT NONE
127!-----------------------------------------------------------------------
128!
129! Objet : calcul "correcteur" des anomalies du vent, de la temperature
130!         potentielle et de l'humidite relative au niveau de reference zref et
131!         par rapport au 1er niveau (pour u) ou a la surface (pour theta et q)
132!         a partir des equations de Louis.
133!
134! Reference : Hess, Colman et McAvaney (1995)
135!
136! I. Musat, 01.07.2002
137!-----------------------------------------------------------------------
138!
139! klon----input-I- dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude)
140! knon----input-I- nombre de points pour un type de surface
141! nsrf----input-I- indice pour le type de surface; voir indice_sol_mod.F90
142! zxli----input-L- TRUE si calcul des cdrags selon Laurent Li
143! speed---input-R- module du vent au 1er niveau du modele
144! temp----input-R- temperature de l'air au 1er niveau du modele
145! q_zref--input-R- humidite relative au 1er niveau du modele
146! zref----input-R- altitude de reference
147! ts------input-R- temperature de l'air a la surface
148! qsurf---input-R- humidite relative a la surface
149! z0m, z0h---input-R- rugosite
150! psol----input-R- pression au sol
151! ustar---input-R- facteur d'echelle pour le vent
152! testar--input-R- facteur d'echelle pour la temperature potentielle
153! qstar---input-R- facteur d'echelle pour l'humidite relative
154! okri----input-L- TRUE si on veut tester le nb. Richardson entre la sfce
155!                  et zref par rapport au Ri entre la sfce et la 1ere couche
156! ri1-----input-R- nb. Richardson entre la surface et la 1ere couche
157!
158! pref----input-R- pression au niveau de reference
159! delu----input-R- anomalie du vent par rapport au 1er niveau
160! delte---input-R- anomalie de la temperature potentielle par rapport a la surface
161! delq----input-R- anomalie de l'humidite relative par rapport a la surface
162!
163      INTEGER, intent(in) :: klon, knon, nsrf
164      LOGICAL, intent(in) :: zxli, okri
165      REAL, dimension(klon), intent(in) :: speed, temp, q_zref
166      REAL, intent(in) :: zref
167      REAL, dimension(klon), intent(in) :: ts, qsurf, psol
168      REAL, dimension(klon), intent(inout) :: z0m, z0h
169      REAL, dimension(klon), intent(in) :: cdrm, cdrh, ri1
170      REAL, dimension(klon), intent(inout) :: s_pblh
171      REAL, dimension(klon), intent(in) :: prain
172      REAL, dimension(klon), intent(in) :: tsol
173      REAL, DIMENSION(klon), INTENT(IN) :: pat1 !pression premier lev
174      INTEGER, INTENT(IN)  :: iri1 ! Richardson de la 1ere couche
175!
176      REAL, dimension(klon), intent(out) :: pref, delm, delh, zri1
177!171220     REAL, dimension(klon) :: cdram, cdrah, zri1
178      REAL, dimension(klon) :: cdram, cdrah
179!-----------------------------------------------------------------------
180
181      include "flux_arp.h"
182!
183! Variables locales 
184      INTEGER :: i
185      REAL, dimension(klon) :: cdran, gref,ycdragm
186!
187!-------------------------------------------------------------------------
188      DO i=1, knon
189        gref(i) = zref*RG
190      ENDDO
191!
192! Richardson at reference level
193!
194      CALL cdrag(knon, nsrf, &
195                    speed, temp, q_zref, gref, &
196                    psol, s_pblh, ts, qsurf, z0m, z0h, &
197                    ri1, iri1, &
198                    cdram, cdrah, zri1, pref, prain, tsol, pat1)
199      DO i = 1, knon
200        delm(i) = sqrt(cdrm(i))/sqrt(cdram(i))
201!verifier que temp est un temperat potentielle.
202        delh(i)= (cdrh(i)* sqrt(cdram(i)))/ &
203                   (cdrah(i)*sqrt(cdrm(i)))
204      ENDDO
205!
206      RETURN
207      END SUBROUTINE screencn
208END MODULE screenc_mod
Note: See TracBrowser for help on using the repository browser.