source: LMDZ6/branches/Amaury_dev/libf/phylmd/screenc_mod.F90 @ 5117

Last change on this file since 5117 was 5117, checked in by abarral, 4 months ago

rename modules properly lmdz_*
move some unused files to obsolete/
(lint) uppercase fortran keywords

  • Property svn:executable set to *
File size: 8.4 KB
RevLine 
[5099]1
[3817]2MODULE screenc_mod
[5099]3
[3817]4! This module contains some procedures for calculation of the correction
5! of temperature, specific humidity and wind at a reference level
[5099]6
[3817]7  USE cdrag_mod
8  IMPLICIT NONE
9
10CONTAINS
[5099]11
[3817]12!****************************************************************************************
[5099]13
[3817]14!r original routine svn3623
[5099]15
[3817]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, &
[4722]20                         pref, delu, delte, delq, s_pblh, prain, tsol, pat1)
[3817]21      IMPLICIT NONE
22!-----------------------------------------------------------------------
[5099]23
[3817]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.
[5099]28
[3817]29! Reference : Hess, Colman et McAvaney (1995)
[5099]30
[3817]31! I. Musat, 01.07.2002
32!-----------------------------------------------------------------------
[5099]33
[3817]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
[5099]52
[3817]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
[5099]57
[5117]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
[4722]66
[5117]67      REAL, DIMENSION(klon), INTENT(INOUT) :: s_pblh
68      REAL, DIMENSION(klon), INTENT(IN) :: prain
69      REAL, DIMENSION(klon), INTENT(IN) :: tsol
[4722]70      REAL, DIMENSION(klon), INTENT(IN)    :: pat1 !pression premier lev     
[5099]71
[5117]72      REAL, DIMENSION(klon), INTENT(OUT) :: pref, delu, delte, delq
[3817]73!-----------------------------------------------------------------------
74      include "YOMCST.h"
75      include "flux_arp.h"
[5099]76
[3817]77! Variables locales 
78      INTEGER :: i
[5117]79      REAL, DIMENSION(klon) :: cdram, cdrah, cdran, zri1, gref,ycdragm,zri_zero
[5099]80
[3817]81!-------------------------------------------------------------------------
82      DO i=1, knon
83        gref(i) = zref*RG
84      ENDDO
[5099]85
[3817]86! Richardson at reference level
[5099]87
[3817]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, &
[4722]97                    psol, s_pblh, ts, qsurf, z0m, z0h, &
[4478]98                    zri_zero,0,                &
[4722]99                    cdram, cdrah, zri1, pref, prain, tsol, pat1)
[3817]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
[5099]114
[5105]115
[3817]116      END SUBROUTINE screenc
[5099]117
[3817]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, &
[4722]123                         pref, delm, delh, zri1, s_pblh, prain, tsol, pat1)
[3817]124      IMPLICIT NONE
125!-----------------------------------------------------------------------
[5099]126
[3817]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.
[5099]131
[3817]132! Reference : Hess, Colman et McAvaney (1995)
[5099]133
[3817]134! I. Musat, 01.07.2002
135!-----------------------------------------------------------------------
[5099]136
[3817]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
[5099]155
[3817]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
[5099]160
[5117]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
[4722]171      REAL, DIMENSION(klon), INTENT(IN) :: pat1 !pression premier lev     
[3817]172      INTEGER, INTENT(IN)  :: iri1 ! Richardson de la 1ere couche
[5099]173
[5117]174      REAL, DIMENSION(klon), INTENT(OUT) :: pref, delm, delh, zri1
175!171220     REAL, DIMENSION(klon) :: cdram, cdrah, zri1
176      REAL, DIMENSION(klon) :: cdram, cdrah
[3817]177!-----------------------------------------------------------------------
178      include "YOMCST.h"
179      include "flux_arp.h"
[5099]180
[3817]181! Variables locales 
182      INTEGER :: i
[5117]183      REAL, DIMENSION(klon) :: cdran, gref,ycdragm
[5099]184
[3817]185!-------------------------------------------------------------------------
186      DO i=1, knon
187        gref(i) = zref*RG
188      ENDDO
[5099]189
[3817]190! Richardson at reference level
[5099]191
[4478]192      CALL cdrag(knon, nsrf, &
[3817]193                    speed, temp, q_zref, gref, &
[4722]194                    psol, s_pblh, ts, qsurf, z0m, z0h, &
[3817]195                    ri1, iri1, &
[4722]196                    cdram, cdrah, zri1, pref, prain, tsol, pat1)
[3817]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
[5099]203
[5105]204
[3817]205      END SUBROUTINE screencn
206END MODULE screenc_mod
Note: See TracBrowser for help on using the repository browser.