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

Last change on this file since 5157 was 5144, checked in by abarral, 3 months ago

Put YOMCST.h into modules

  • Property svn:executable set to *
File size: 8.5 KB
RevLine 
[3817]1MODULE screenc_mod
[5099]2
[5144]3  ! This module contains some procedures for calculation of the correction
4  ! of temperature, specific humidity and wind at a reference level
[5099]5
[3817]6  USE cdrag_mod
7  IMPLICIT NONE
8
9CONTAINS
[5099]10
[5144]11  !****************************************************************************************
[5099]12
[5144]13  !r original routine svn3623
[5099]14
[5144]15  SUBROUTINE screenc(klon, knon, nsrf, zxli, &
16          speed, temp, q_zref, zref, &
17          ts, qsurf, z0m, z0h, psol, &
18          ustar, testar, qstar, okri, ri1, &
19          pref, delu, delte, delq, s_pblh, prain, tsol, pat1)
20    USE lmdz_flux_arp, ONLY: fsens, flat, betaevap, ust, tg, ok_flux_surf, ok_prescr_ust, ok_prescr_beta, ok_forc_tsurf
21    USE lmdz_yomcst
[5139]22
[5144]23    IMPLICIT NONE
24    !-----------------------------------------------------------------------
[5099]25
[5144]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.
[5099]30
[5144]31    ! Reference : Hess, Colman et McAvaney (1995)
[5099]32
[5144]33    ! I. Musat, 01.07.2002
34    !-----------------------------------------------------------------------
[5099]35
[5144]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
[5099]54
[5144]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
[5099]59
[5144]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
[4722]68
[5144]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
[5099]73
[5144]74    REAL, DIMENSION(klon), INTENT(OUT) :: pref, delu, delte, delq
[5099]75
[5144]76    ! Variables locales
77    INTEGER :: i
78    REAL, DIMENSION(klon) :: cdram, cdrah, cdran, zri1, gref, ycdragm, zri_zero
[5099]79
[5144]80    !-------------------------------------------------------------------------
81    DO i = 1, knon
82      gref(i) = zref * RG
83    ENDDO
[5099]84
[5144]85    ! Richardson at reference level
[5099]86
[5144]87    !      CALL coefcdrag (klon, knon, nsrf, zxli, &
88    !                    speed, temp, q_zref, gref, &
89    !                    psol, ts, qsurf, rugos, &
90    !                    okri, ri1, &
91    !                    cdram, cdrah, cdran, zri1, &
92    !                    pref)
93    ! Fuxing WANG, 04/03/2015, replace the coefcdrag by the merged version: cdrag
94    CALL cdrag (knon, nsrf, &
95            speed, temp, q_zref, gref, &
96            psol, s_pblh, ts, qsurf, z0m, z0h, &
97            zri_zero, 0, &
98            cdram, cdrah, zri1, pref, prain, tsol, pat1)
99    DO i = 1, knon
100      IF(ok_prescr_ust) THEN
101        ! La aussi il faut forcer avec ust (FC + MPL 20160210)
102        ycdragm(i) = ust * ust / (1. + speed(i)) / speed(i)
103        cdram = ycdragm
104        delu(i) = ust / sqrt(cdram(i))
105      ELSE
106        delu(i) = ustar(i) / sqrt(cdram(i))
107      ENDIF
108      delte(i) = (testar(i) * sqrt(cdram(i))) / &
109              cdrah(i)
110      delq(i) = (qstar(i) * sqrt(cdram(i))) / &
111              cdrah(i)
112    ENDDO
[5099]113
[5144]114  END SUBROUTINE screenc
[5105]115
[5144]116  SUBROUTINE screencn(klon, knon, nsrf, zxli, &
117          speed, temp, q_zref, zref, &
118          ts, qsurf, z0m, z0h, psol, &
119          cdrm, cdrh, okri, &
120          ri1, iri1, &
121          pref, delm, delh, zri1, s_pblh, prain, tsol, pat1)
122    USE lmdz_flux_arp, ONLY: fsens, flat, betaevap, ust, tg, ok_flux_surf, ok_prescr_ust, ok_prescr_beta, ok_forc_tsurf
123    USE lmdz_yomcst
[5099]124
[5144]125    IMPLICIT NONE
126    !-----------------------------------------------------------------------
[5139]127
[5144]128    ! Objet : calcul "correcteur" des anomalies du vent, de la temperature
129    !         potentielle et de l'humidite relative au niveau de reference zref et
130    !         par rapport au 1er niveau (pour u) ou a la surface (pour theta et q)
131    !         a partir des equations de Louis.
[5099]132
[5144]133    ! Reference : Hess, Colman et McAvaney (1995)
[5099]134
[5144]135    ! I. Musat, 01.07.2002
136    !-----------------------------------------------------------------------
[5099]137
[5144]138    ! klon----input-I- dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude)
139    ! knon----input-I- nombre de points pour un type de surface
140    ! nsrf----input-I- indice pour le type de surface; voir indice_sol_mod.F90
141    ! zxli----input-L- TRUE si calcul des cdrags selon Laurent Li
142    ! speed---input-R- module du vent au 1er niveau du modele
143    ! temp----input-R- temperature de l'air au 1er niveau du modele
144    ! q_zref--input-R- humidite relative au 1er niveau du modele
145    ! zref----input-R- altitude de reference
146    ! ts------input-R- temperature de l'air a la surface
147    ! qsurf---input-R- humidite relative a la surface
148    ! z0m, z0h---input-R- rugosite
149    ! psol----input-R- pression au sol
150    ! ustar---input-R- facteur d'echelle pour le vent
151    ! testar--input-R- facteur d'echelle pour la temperature potentielle
152    ! qstar---input-R- facteur d'echelle pour l'humidite relative
153    ! okri----input-L- TRUE si on veut tester le nb. Richardson entre la sfce
154    !                  et zref par rapport au Ri entre la sfce et la 1ere couche
155    ! ri1-----input-R- nb. Richardson entre la surface et la 1ere couche
[5099]156
[5144]157    ! pref----input-R- pression au niveau de reference
158    ! delu----input-R- anomalie du vent par rapport au 1er niveau
159    ! delte---input-R- anomalie de la temperature potentielle par rapport a la surface
160    ! delq----input-R- anomalie de l'humidite relative par rapport a la surface
[5099]161
[5144]162    INTEGER, INTENT(IN) :: klon, knon, nsrf
163    LOGICAL, INTENT(IN) :: zxli, okri
164    REAL, DIMENSION(klon), INTENT(IN) :: speed, temp, q_zref
165    REAL, INTENT(IN) :: zref
166    REAL, DIMENSION(klon), INTENT(IN) :: ts, qsurf, psol
167    REAL, DIMENSION(klon), INTENT(INOUT) :: z0m, z0h
168    REAL, DIMENSION(klon), INTENT(IN) :: cdrm, cdrh, ri1
169    REAL, DIMENSION(klon), INTENT(INOUT) :: s_pblh
170    REAL, DIMENSION(klon), INTENT(IN) :: prain
171    REAL, DIMENSION(klon), INTENT(IN) :: tsol
172    REAL, DIMENSION(klon), INTENT(IN) :: pat1 !pression premier lev
173    INTEGER, INTENT(IN) :: iri1 ! Richardson de la 1ere couche
[5099]174
[5144]175    REAL, DIMENSION(klon), INTENT(OUT) :: pref, delm, delh, zri1
176    !171220     REAL, DIMENSION(klon) :: cdram, cdrah, zri1
177    REAL, DIMENSION(klon) :: cdram, cdrah
178    !-----------------------------------------------------------------------
[5099]179
[5144]180    ! Variables locales
181    INTEGER :: i
182    REAL, DIMENSION(klon) :: cdran, gref, ycdragm
[5099]183
[5144]184    !-------------------------------------------------------------------------
185    DO i = 1, knon
186      gref(i) = zref * RG
187    ENDDO
[5099]188
[5144]189    ! Richardson at reference level
[5099]190
[5144]191    CALL cdrag(knon, nsrf, &
192            speed, temp, q_zref, gref, &
193            psol, s_pblh, ts, qsurf, z0m, z0h, &
194            ri1, iri1, &
195            cdram, cdrah, zri1, pref, prain, tsol, pat1)
196    DO i = 1, knon
197      delm(i) = sqrt(cdrm(i)) / sqrt(cdram(i))
198      !verifier que temp est un temperat potentielle.
199      delh(i) = (cdrh(i) * sqrt(cdram(i))) / &
200              (cdrah(i) * sqrt(cdrm(i)))
201    ENDDO
[5099]202
[5144]203  END SUBROUTINE screencn
[3817]204END MODULE screenc_mod
Note: See TracBrowser for help on using the repository browser.