source: LMDZ6/trunk/libf/phylmd/screenc_mod.F90 @ 5260

Last change on this file since 5260 was 4722, checked in by Laurent Fairhead, 14 months ago

Modification by O. Torres to the cdrag routines to include different bulk formulae
to calculate cdrag coefficients over ocean as well as an iteration of that
calculation.
The iteration is controlled by flag ok_cdrag_iter which if set to FALSE by default
to converge with previous results.
The choice of bulk formulae is set with the choix_bulk parameter
The number of iterations to run is set with nit_bulk
OT, PB, CD, LF

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