Changeset 3898 for trunk/LMDZ.VENUS
- Timestamp:
- Aug 19, 2025, 10:22:45 AM (3 months ago)
- Location:
- trunk/LMDZ.VENUS/libf/phyvenus
- Files:
-
- 4 edited
-
clmain_ideal.F (modified) (12 diffs)
-
physiq_mod.F (modified) (1 diff)
-
radlwsw_NewtonCool.F (modified) (6 diffs)
-
soil.F (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.VENUS/libf/phyvenus/clmain_ideal.F
r3884 r3898 1 ! 2 ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/clmain.F,v 1.3 2005/02/07 16:41:35 fairhead Exp $ 3 ! 1 MODULE clmain_ideal_mod 2 3 IMPLICIT NONE 4 5 CONTAINS 4 6 c 5 7 c … … 19 21 20 22 c--------------------------------------------------------------- 21 c POUR VENUS 22 c 23 c Routine pour une Couche Limite ultra-simple: 24 c - Rayleigh friction dans la couche la plus basse, tau=3Ed=2.6e5s 23 c VENUS 24 c Routine for a very simple idealized Planetary Boundary layer scheme: 25 c - Rayleigh friction in the lowest atmospheric layer, tau=3Ed=2.6e5s 25 26 c - Kedd=0.15 m^2/s 26 27 27 28 c S Lebonnois, 10/11/08 28 29 c--------------------------------------------------------------- 29 USE ioipsl 30 use dimphy 31 use mod_grid_phy_lmdz, only: nbp_lev 30 31 use dimphy, only: klon, klev 32 32 use soil_mod, only: nsoilmx 33 use clesphys_mod 34 use YOMCST_mod 33 35 34 IMPLICIT none 36 35 c====================================================================== 37 c Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818 38 c Objet: interface de "couche limite" (diffusion verticale) 39 c Arguments: 40 c dtime----input-R- interval du temps (secondes) 41 c itap-----input-I- numero du pas de temps 42 c t--------input-R- temperature (K) 43 c u--------input-R- vitesse u 44 c v--------input-R- vitesse v 45 c ts-------input-R- temperature du sol (en Kelvin) 46 c paprs----input-R- pression a intercouche (Pa) 47 c pplay----input-R- pression au milieu de couche (Pa) 48 c radsol---input-R- flux radiatif net (positif vers le sol) en W/m**2 49 c rlat-----input-R- latitude en degree 50 c cufi-----input-R- resolution des mailles en x (m) 51 c cvfi-----input-R- resolution des mailles en y (m) 52 c 53 c d_t------output-R- le changement pour "t" 54 c d_u------output-R- le changement pour "u" 55 c d_v------output-R- le changement pour "v" 56 c d_ts-----output-R- le changement pour "ts" 57 c flux_t---output-R- flux de chaleur sensible (CpT) J/m**2/s (W/m**2) 58 c (orientation positive vers le bas) 59 c flux_u---output-R- tension du vent X: (kg m/s)/(m**2 s) ou Pascal 60 c flux_v---output-R- tension du vent Y: (kg m/s)/(m**2 s) ou Pascal 61 c dflux_t derive du flux sensible 62 cAA on rajoute en output yu1 et yv1 qui sont les vents dans 63 cAA la premiere couche 64 c====================================================================== 65 #include "iniprint.h" 66 #include "compbl.h" 67 c 68 REAL dtime 69 integer itap 70 REAL t(klon,klev) 71 REAL u(klon,klev), v(klon,klev) 72 REAL paprs(klon,klev+1), pplay(klon,klev), radsol(klon) 73 ! ADAPTATION GCM POUR CP(T) 74 real ppk(klon,klev) 75 REAL rlon(klon), rlat(klon), cufi(klon), cvfi(klon) 76 REAL d_t(klon, klev) 77 REAL d_u(klon, klev), d_v(klon, klev) 78 REAL flux_t(klon,klev) 79 REAL dflux_t(klon) 80 81 REAL flux_u(klon,klev), flux_v(klon,klev) 82 REAL cdragh(klon), cdragm(klon) 83 real rmu0(klon) ! cosinus de l'angle solaire zenithal 84 LOGICAL debut, lafin 85 c 86 REAL ts(klon) 87 REAL d_ts(klon) 88 REAL albe(klon) 36 c 37 REAL,INTENT(IN) :: dtime ! physics time step (s) 38 integer,intent(in) :: itap ! physics time step counter 39 REAL,INTENT(IN) :: t(klon,klev) ! atmospheric temperature (K) 40 REAL,INTENT(IN) :: u(klon,klev) ! zonal wind (m/s) 41 REAL,INTENT(IN) :: v(klon,klev) ! meridional wind (m/s) 42 REAL,INTENT(IN) :: paprs(klon,klev+1) ! pressure at layer boundaries (Pa) 43 REAL,INTENT(IN) :: pplay(klon,klev) ! pressure at mid-layer (Pa) 44 REAL,INTENT(IN) :: radsol(klon) ! Net radiative flux (positive downwards) in W/m2 45 ! ADAPTATION GCM FOR CP(T) 46 real,intent(in) :: ppk(klon,klev) 47 real,intent(in) :: rlon(klon) ! longitudes (deg) 48 real,intent(in) :: rlat(klon) ! latitudes (deg) 49 real,intent(in) :: cufi(klon) ! mesh resolution (m) 50 real,intent(in) :: cvfi(klon) ! mesh resolution (m) 51 REAL,INTENT(OUT) :: d_t(klon, klev) ! temperature increment (K) 52 REAL,INTENT(OUT) :: d_u(klon, klev) ! zonal wind increment (m/s) 53 REAL,INTENT(OUT) :: d_v(klon, klev) ! meridional wind increment (m/s) 54 REAL,INTENT(OUT) :: flux_t(klon,klev) ! latent heat flux (CpT) J/m**2/s (W/m**2) 55 ! (positive when downwards) 56 REAL,INTENT(OUT) :: dflux_t(klon) ! derivative of sensible heat flux 57 58 REAL,INTENT(OUT) :: flux_u(klon,klev) ! zonal wind stress (kg m/s)/(m**2 s) or Pa 59 REAL,INTENT(OUT) :: flux_v(klon,klev) ! meridional wind stress (kg m/s)/(m**2 s) or Pa 60 REAL,INTENT(OUT) :: cdragh(klon) 61 REAL,INTENt(OUT) :: cdragm(klon) 62 real,intent(in) :: rmu0(klon) ! cosine of solar zenithal angle 63 LOGICAL,INTENT(IN) :: debut ! .true. if first call to physics 64 LOGICAL,INTENT(IN) :: lafin ! .true. if last call to physics 65 c 66 REAL,INTENT(IN) :: ts(klon) ! surface temperature (K) 67 REAL,INTENT(OUT) :: d_ts(klon) ! surface temperature increment (K) 68 REAL,INTENT(INOUT) :: albe(klon) ! albedo of the surface 89 69 C 90 REAL fder(klon)91 REAL sollw(klon), solsw(klon), sollwdown(klon)70 REAL,INTENT(IN) :: fder(klon) 71 REAL,INTENT(IN) :: sollw(klon), solsw(klon), sollwdown(klon) 92 72 cAA 93 REAL zcoefh(klon,klev)94 REAL zu1(klon)95 REAL zv1(klon)73 REAL,INTENT(OUT) :: zcoefh(klon,klev) 74 REAL,INTENT(OUT) :: zu1(klon) ! zonal wind in 1st layer (m/s) 75 REAL,INTENT(OUT) :: zv1(klon) ! meridional wind in 1st layer (m/s) 96 76 cAA 97 77 c$$$ PB ajout pour soil 98 REAL ftsoil(klon,nsoilmx) 78 REAL,INTENT(INOUT) :: ftsoil(klon,nsoilmx) ! subsurface temperatures (K) 79 99 80 REAL ytsoil(klon,nsoilmx) 100 c======================================================================101 EXTERNAL clqh, clvent, coefkz102 81 c====================================================================== 103 82 REAL yts(klon) … … 127 106 real yustar(klon),y_cd_m(klon),y_cd_h(klon) 128 107 c 129 c#include "YOMCST.h"130 108 REAL u1lay(klon), v1lay(klon) 131 109 REAL delp(klon,klev) … … 134 112 135 113 c====================================================================== 136 REAL zx_alf1, zx_alf2 ! valeur ambiante par extrapola.114 REAL zx_alf1, zx_alf2 ! ambient values used for extrapolation 137 115 c====================================================================== 138 c139 LOGICAL zxli ! utiliser un jeu de fonctions simples140 PARAMETER (zxli=.FALSE.)141 116 c 142 117 REAL zt, zdelta, zcor … … 148 123 c========================================================= 149 124 150 DO k = 1, klev ! epaisseur de couche125 DO k = 1, klev ! thickness of atmospheric layers 151 126 DO i = 1, klon 152 127 delp(i,k) = paprs(i,k)-paprs(i,k+1) 153 128 ENDDO 154 129 ENDDO 155 DO i = 1, klon ! vent de la premiere couche130 DO i = 1, klon ! wind in the first layer 156 131 ccc zx_alf1 = (paprs(i,1)-pplay(i,2))/(pplay(i,1)-pplay(i,2)) 157 132 zx_alf1 = 1.0 … … 212 187 ENDDO 213 188 c 214 c chercher les indices:189 c identify indexes: 215 190 DO j = 1, klon 216 191 ni(j) = j … … 255 230 c 256 231 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 257 c RAYLEIGH FRICTION (implicit scheme) dans 1ere couche258 c Ref: th�se deC. Lee Oxford 2006232 c RAYLEIGH FRICTION (implicit scheme) in the first layer 233 c Ref: PhD of C. Lee Oxford 2006 259 234 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 260 235 … … 266 241 267 242 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 268 c Coefficient de diffusion verticale243 c Coefficient for vertical diffusion 269 244 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 270 245 … … 272 247 273 248 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 274 c c alculer la diffusion des vitesses "u" et"v"249 c compute diffusion for winds "u" and "v" 275 250 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 276 251 … … 280 255 s y_d_v,y_flux_v) 281 256 282 c pour le couplage257 c for the coupling 283 258 ytaux = y_flux_u(:,1) 284 259 ytauy = y_flux_v(:,1) 285 260 286 261 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 287 c pas de diffusion de "q" et de"h"262 c no diffusion for "q" and "h" 288 263 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 289 264 … … 291 266 292 267 c========================= 293 c FIN: tendances268 c END: compute tendencies 294 269 c========================= 295 270 … … 336 311 c print*,"y_d_t apres clqh=",y_d_t(klon/2,:) 337 312 338 RETURN339 END 340 313 END SUBROUTINE clmain_ideal 314 315 END MODULE clmain_ideal_mod -
trunk/LMDZ.VENUS/libf/phyvenus/physiq_mod.F
r3895 r3898 87 87 use soil_mod, only: nsoilmx 88 88 use hgardfou_mod, only: hgardfou 89 use clmain_ideal_mod, only: clmain_ideal 89 90 use clesphys_mod 90 91 use YOMCST_mod -
trunk/LMDZ.VENUS/libf/phyvenus/radlwsw_NewtonCool.F
r3884 r3898 19 19 USE phys_state_var_mod, only: heat,cool,radsol, 20 20 . topsw,toplw,solsw,sollw,sollwdown,lwnet,swnet,zt_eq 21 USE YOMCST_mod 21 USE YOMCST_mod, ONLY: RPI 22 22 IMPLICIT none 23 c include "YOMCST.h"24 23 25 24 c ARGUMENTS … … 30 29 c LOCAL VARIABLES 31 30 INTEGER i,j,k 32 integer nlevCLee,level33 parameter (nlevCLee=30)31 integer level 32 integer,parameter :: nlevCLee=30 34 33 REAL pressCLee(nlevCLee+1),tempCLee(nlevCLee+1) 35 34 real dt_epCLee(nlevCLee+1),etaCLee(nlevCLee+1) 36 real tauCLee37 parameter (tauCLee=25*86400) ! en s 35 real,parameter :: tauCLee=25*86400 ! in s 36 38 37 real ztemp,zdt,fact 39 38 real dTsdt(klev) … … 61 60 62 61 logical,save :: firstcall=.true. 62 C$OMP THREADPRIVATE(firstcall) 63 63 64 64 c Initialisations … … 67 67 if (firstcall) then 68 68 ! build zt_eq(), reference temperature field towards which to relax. 69 PRINT*,"******* ATTENTION, NEWTONIAN COOLING ********"69 PRINT*,"******* WARNING, NEWTONIAN COOLING ********" 70 70 71 71 pressCLee = etaCLee * 9.2e6 … … 94 94 endif ! firstcall 95 95 96 c+++++++ BOUCLE SUR LA GRILLE+++++++++++++++++++++++++96 c+++++++ LOOP ON COLUMNS +++++++++++++++++++++++++ 97 97 DO j = 1,klon 98 98 99 99 do k = 1,klev 100 dTsdt(k) = -(pt(j,k)-zt_eq(j,k))/tauCLee ! en K/s100 dTsdt(k) = -(pt(j,k)-zt_eq(j,k))/tauCLee ! in K/s 101 101 enddo 102 102 103 radsol(j) = 0. ! + vers bas104 topsw(j) = 0. ! + vers bas105 toplw(j) = 0. ! + vers haut106 solsw(j) = 0. ! + vers bas107 sollw(j) = 0. ! + vers bas108 sollwdown(j) = 0. ! + vers bas103 radsol(j) = 0. ! positive downwards 104 topsw(j) = 0. ! positive downwards 105 toplw(j) = 0. ! positive upwards 106 solsw(j) = 0. ! positive downwards 107 sollw(j) = 0. ! positive downwards 108 sollwdown(j) = 0. ! positive downwards 109 109 110 110 DO k = 1, klev+1 … … 119 119 c 120 120 ENDDO !j 121 c+++++++ FIN BOUCLE SUR LA GRILLE+++++++++++++++++++++++++121 c+++++++ END LOOP ON COLUMNS +++++++++++++++++++++++++ 122 122 123 123 END SUBROUTINE radlwsw_newtoncool -
trunk/LMDZ.VENUS/libf/phyvenus/soil.F
r3884 r3898 52 52 53 53 use dimphy, only: klon 54 use clesphys_mod 55 use YOMCST_mod 54 use clesphys_mod, only: inertie 55 56 56 IMPLICIT NONE 57 c include "YOMCST.h"58 57 59 58 c----------------------------------------------------------------------- … … 61 60 c --------- 62 61 63 REAL, intent(IN) :: ptimestep 64 INTEGER, intent(IN) :: knon 65 REAL, intent(IN) :: ptsrf(klon) 66 REAL, intent(OUT) :: ptsoil(klon,nsoilmx) 67 REAL, intent(OUT) :: pcapcal(klon),pfluxgrd(klon) 62 REAL, intent(IN) :: ptimestep ! physics time step (s) 63 INTEGER, intent(IN) :: knon ! number of columns 64 REAL, intent(IN) :: ptsrf(klon) ! surface temperature (K) 65 REAL, intent(OUT) :: ptsoil(klon,nsoilmx) ! sub-surface temperature (K) 66 REAL, intent(OUT) :: pcapcal(klon) ! surfacic specific heat (W*m-2*s*K-1) 67 real,intent(out) :: pfluxgrd(klon) ! surface diffusive flux from ground (Wm-2) 68 68 69 69 c----------------------------------------------------------------------- … … 79 79 c ---------------------- 80 80 REAL,SAVE :: dz1(nsoilmx),dz2(nsoilmx) 81 c$OMP THREADPRIVATE(dz1,dz2) 81 82 REAL,allocatable,save :: zc(:,:),zd(:,:) 83 c$OMP THREADPRIVATE(zc,zd) 82 84 REAL,SAVE :: lambda 85 c$OMP THREADPRIVATE(lambda) 83 86 LOGICAL,SAVE :: firstcall=.true. 87 c$OMP THREADPRIVATE(firstcall) 84 88 85 89 c-----------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.
