Ignore:
Timestamp:
Jul 29, 2024, 11:01:04 PM (3 months ago)
Author:
abarral
Message:

Put YOMCST.h into modules

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Amaury_dev/libf/phylmd/screenc_mod.F90

    r5139 r5144  
    1 
    21MODULE screenc_mod
    32
    4 ! This module contains some procedures for calculation of the correction
    5 ! of temperature, specific humidity and wind at a reference level
     3  ! This module contains some procedures for calculation of the correction
     4  ! of temperature, specific humidity and wind at a reference level
    65
    76  USE cdrag_mod
     
    109CONTAINS
    1110
    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 lmdz_flux_arp, ONLY: fsens, flat, betaevap, ust, tg, ok_flux_surf, ok_prescr_ust, ok_prescr_beta, ok_forc_tsurf
    22 
    23       IMPLICIT 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       include "YOMCST.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 
    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 lmdz_flux_arp, ONLY: fsens, flat, betaevap, ust, tg, ok_flux_surf, ok_prescr_ust, ok_prescr_beta, ok_forc_tsurf
    126 
    127       IMPLICIT 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       include "YOMCST.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 
    207       END SUBROUTINE screencn
     11  !****************************************************************************************
     12
     13  !r original routine svn3623
     14
     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
     22
     23    IMPLICIT 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    ! Variables locales
     77    INTEGER :: i
     78    REAL, DIMENSION(klon) :: cdram, cdrah, cdran, zri1, gref, ycdragm, zri_zero
     79
     80    !-------------------------------------------------------------------------
     81    DO i = 1, knon
     82      gref(i) = zref * RG
     83    ENDDO
     84
     85    ! Richardson at reference level
     86
     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
     113
     114  END SUBROUTINE screenc
     115
     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
     124
     125    IMPLICIT NONE
     126    !-----------------------------------------------------------------------
     127
     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.
     132
     133    ! Reference : Hess, Colman et McAvaney (1995)
     134
     135    ! I. Musat, 01.07.2002
     136    !-----------------------------------------------------------------------
     137
     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
     156
     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
     161
     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
     174
     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    !-----------------------------------------------------------------------
     179
     180    ! Variables locales
     181    INTEGER :: i
     182    REAL, DIMENSION(klon) :: cdran, gref, ycdragm
     183
     184    !-------------------------------------------------------------------------
     185    DO i = 1, knon
     186      gref(i) = zref * RG
     187    ENDDO
     188
     189    ! Richardson at reference level
     190
     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
     202
     203  END SUBROUTINE screencn
    208204END MODULE screenc_mod
Note: See TracChangeset for help on using the changeset viewer.