source: LMDZ6/branches/PBLSURF_GPUPORT/libf/phylmd/screenc_mod.f90 @ 5914

Last change on this file since 5914 was 5882, checked in by yann meurdesoif, 8 weeks ago

GPU port of stdlevvar & stdlevvarn
YM

  • 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
22      USE flux_arp_mod_h
23IMPLICIT NONE
24!-----------------------------------------------------------------------
25!
26! Objet : calcul "correcteur" des anomalies du vent, de la temperature
27!         potentielle et de l'humidite relative au niveau de reference zref et
28!         par rapport au 1er niveau (pour u) ou a la surface (pour theta et q)
29!         a partir des equations de Louis.
30!
31! Reference : Hess, Colman et McAvaney (1995)
32!
33! I. Musat, 01.07.2002
34!-----------------------------------------------------------------------
35!
36! klon----input-I- dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude)
37! knon----input-I- nombre de points pour un type de surface
38! nsrf----input-I- indice pour le type de surface; voir indice_sol_mod.F90
39! zxli----input-L- TRUE si calcul des cdrags selon Laurent Li
40! speed---input-R- module du vent au 1er niveau du modele
41! temp----input-R- temperature de l'air au 1er niveau du modele
42! q_zref--input-R- humidite relative au 1er niveau du modele
43! zref----input-R- altitude de reference
44! ts------input-R- temperature de l'air a la surface
45! qsurf---input-R- humidite relative a la surface
46! z0m, z0h---input-R- rugosite
47! psol----input-R- pression au sol
48! ustar---input-R- facteur d'echelle pour le vent
49! testar--input-R- facteur d'echelle pour la temperature potentielle
50! qstar---input-R- facteur d'echelle pour l'humidite relative
51! okri----input-L- TRUE si on veut tester le nb. Richardson entre la sfce
52!                  et zref par rapport au Ri entre la sfce et la 1ere couche
53! ri1-----input-R- nb. Richardson entre la surface et la 1ere couche
54!
55! pref----input-R- pression au niveau de reference
56! delu----input-R- anomalie du vent par rapport au 1er niveau
57! delte---input-R- anomalie de la temperature potentielle par rapport a la surface
58! delq----input-R- anomalie de l'humidite relative par rapport a la surface
59!
60      INTEGER, intent(in) :: klon, knon, nsrf
61      LOGICAL, intent(in) :: zxli, okri
62      REAL, dimension(klon), intent(in) :: speed, temp, q_zref
63      REAL, intent(in) :: zref
64      REAL, dimension(klon), intent(IN) :: ts
65      REAL, dimension(klon), intent(in) :: qsurf, psol
66      REAL, dimension(klon), intent(inout):: z0m, z0h
67      REAL, dimension(klon), intent(in) :: ustar, testar, qstar, ri1
68
69      REAL, dimension(klon), intent(inout) :: s_pblh
70      REAL, dimension(klon), intent(in) :: prain
71      REAL, dimension(klon), intent(in) :: tsol
72      REAL, DIMENSION(klon), INTENT(IN)    :: pat1 !pression premier lev
73!
74      REAL, dimension(klon), intent(out) :: pref, delu, delte, delq
75!-----------------------------------------------------------------------
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!$gpum horizontal knon klon
125      USE yomcst_mod_h
126      USE flux_arp_mod_h
127IMPLICIT NONE
128!-----------------------------------------------------------------------
129!
130! Objet : calcul "correcteur" des anomalies du vent, de la temperature
131!         potentielle et de l'humidite relative au niveau de reference zref et
132!         par rapport au 1er niveau (pour u) ou a la surface (pour theta et q)
133!         a partir des equations de Louis.
134!
135! Reference : Hess, Colman et McAvaney (1995)
136!
137! I. Musat, 01.07.2002
138!-----------------------------------------------------------------------
139!
140! klon----input-I- dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude)
141! knon----input-I- nombre de points pour un type de surface
142! nsrf----input-I- indice pour le type de surface; voir indice_sol_mod.F90
143! zxli----input-L- TRUE si calcul des cdrags selon Laurent Li
144! speed---input-R- module du vent au 1er niveau du modele
145! temp----input-R- temperature de l'air au 1er niveau du modele
146! q_zref--input-R- humidite relative au 1er niveau du modele
147! zref----input-R- altitude de reference
148! ts------input-R- temperature de l'air a la surface
149! qsurf---input-R- humidite relative a la surface
150! z0m, z0h---input-R- rugosite
151! psol----input-R- pression au sol
152! ustar---input-R- facteur d'echelle pour le vent
153! testar--input-R- facteur d'echelle pour la temperature potentielle
154! qstar---input-R- facteur d'echelle pour l'humidite relative
155! okri----input-L- TRUE si on veut tester le nb. Richardson entre la sfce
156!                  et zref par rapport au Ri entre la sfce et la 1ere couche
157! ri1-----input-R- nb. Richardson entre la surface et la 1ere couche
158!
159! pref----input-R- pression au niveau de reference
160! delu----input-R- anomalie du vent par rapport au 1er niveau
161! delte---input-R- anomalie de la temperature potentielle par rapport a la surface
162! delq----input-R- anomalie de l'humidite relative par rapport a la surface
163!
164      INTEGER, intent(in) :: klon, knon, nsrf
165      LOGICAL, intent(in) :: zxli, okri
166      REAL, dimension(klon), intent(in) :: speed, temp, q_zref
167      REAL, intent(in) :: zref
168      REAL, dimension(klon), intent(in) :: ts, qsurf, psol
169      REAL, dimension(klon), intent(inout) :: z0m, z0h
170      REAL, dimension(klon), intent(in) :: cdrm, cdrh, ri1
171      REAL, dimension(klon), intent(inout) :: s_pblh
172      REAL, dimension(klon), intent(in) :: prain
173      REAL, dimension(klon), intent(in) :: tsol
174      REAL, DIMENSION(klon), INTENT(IN) :: pat1 !pression premier lev
175      INTEGER, INTENT(IN)  :: iri1 ! Richardson de la 1ere couche
176!
177      REAL, dimension(klon), intent(out) :: pref, delm, delh, zri1
178!171220     REAL, dimension(klon) :: cdram, cdrah, zri1
179      REAL, dimension(klon) :: cdram, cdrah
180!-----------------------------------------------------------------------
181      !
182! Variables locales 
183      INTEGER :: i
184      REAL, dimension(klon) :: cdran, gref,ycdragm
185!
186!-------------------------------------------------------------------------
187      DO i=1, knon
188        gref(i) = zref*RG
189      ENDDO
190!
191! Richardson at reference level
192!
193      CALL cdrag(knon, nsrf, &
194                    speed, temp, q_zref, gref, &
195                    psol, s_pblh, ts, qsurf, z0m, z0h, &
196                    ri1, iri1, &
197                    cdram, cdrah, zri1, pref, prain, tsol, pat1)
198      DO i = 1, knon
199        delm(i) = sqrt(cdrm(i))/sqrt(cdram(i))
200!verifier que temp est un temperat potentielle.
201        delh(i)= (cdrh(i)* sqrt(cdram(i)))/ &
202                   (cdrah(i)*sqrt(cdrm(i)))
203      ENDDO
204!
205      RETURN
206      END SUBROUTINE screencn
207END MODULE screenc_mod
Note: See TracBrowser for help on using the repository browser.