Changeset 5144 for LMDZ6/branches/Amaury_dev/libf/phylmd/screenc_mod.F90
- Timestamp:
- Jul 29, 2024, 11:01:04 PM (3 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/phylmd/screenc_mod.F90
r5139 r5144 1 2 1 MODULE screenc_mod 3 2 4 ! This module contains some procedures for calculation of the correction5 ! of temperature, specific humidity and wind at a reference level3 ! This module contains some procedures for calculation of the correction 4 ! of temperature, specific humidity and wind at a reference level 6 5 7 6 USE cdrag_mod … … 10 9 CONTAINS 11 10 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 208 204 END MODULE screenc_mod
Note: See TracChangeset
for help on using the changeset viewer.