Changeset 3974
- Timestamp:
- Jul 30, 2021, 4:27:30 PM (3 years ago)
- Location:
- LMDZ6/trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/DefLists/physiq.def_NPv6.1
r3621 r3974 169 169 iflag_albedo=1 170 170 171 # Controle de la definition de l'inertie thermique du sol dans le modele "bucket": 172 # 0 (default) : constant 173 # 1 : fonction lineaire de qsol 174 # 2 : 2 fonctions lineaires de qsol : 175 # une pour "sable" (boite lat/lon pour Sahara), une pour le reste (limons et argile) 176 # 3 : fonction lineaire de qsol, valeurs entre 900 pour qsol=0 et 2000 pour qsol=150 177 iflag_inertie=0 178 171 179 # Frequence appel convection. Nombre appels par jour 172 180 nbapp_cv=48 -
LMDZ6/trunk/libf/phylmd/comsoil.h
r2915 r3974 4 4 5 5 common /comsoil/inertie_sol,inertie_sno,inertie_sic,inertie_lic, & 6 & iflag_sic 6 & iflag_sic,iflag_inertie 7 7 real inertie_sol,inertie_sno,inertie_sic,inertie_lic 8 integer iflag_sic 8 integer iflag_sic,iflag_inertie 9 9 !$OMP THREADPRIVATE(/comsoil/) -
LMDZ6/trunk/libf/phylmd/conf_phys_m.F90
r3948 r3974 183 183 REAL,SAVE :: exposant_glace_omp 184 184 REAL,SAVE :: rei_min_omp, rei_max_omp 185 INTEGER,SAVE :: iflag_sic_omp 185 INTEGER,SAVE :: iflag_sic_omp, iflag_inertie_omp 186 186 REAL,SAVE :: inertie_sol_omp,inertie_sno_omp,inertie_sic_omp 187 187 REAL,SAVE :: inertie_lic_omp … … 1325 1325 CALL getin('iflag_sic',iflag_sic_omp) 1326 1326 ! 1327 !Config Key = iflag_inertie 1328 !Config Desc = 1329 !Config Def = 0 1330 !Config Help = 1331 ! 1332 iflag_inertie_omp = 0 1333 CALL getin('iflag_inertie',iflag_inertie_omp) 1334 ! 1327 1335 !Config Key = inertie_sic 1328 1336 !Config Desc = … … 2395 2403 albsno0 = albsno0_omp 2396 2404 iflag_sic = iflag_sic_omp 2405 iflag_inertie = iflag_inertie_omp 2397 2406 inertie_sol = inertie_sol_omp 2398 2407 inertie_sic = inertie_sic_omp … … 2881 2890 WRITE(lunout,*) ' albsno0 = ', albsno0 2882 2891 WRITE(lunout,*) ' iflag_sic = ', iflag_sic 2892 WRITE(lunout,*) ' iflag_inertie = ', iflag_inertie 2883 2893 WRITE(lunout,*) ' inertie_sol = ', inertie_sol 2884 2894 WRITE(lunout,*) ' inertie_sic = ', inertie_sic -
LMDZ6/trunk/libf/phylmd/ocean_forced_mod.F90
r3815 r3974 180 180 ! 181 181 USE dimphy 182 USE geometry_mod, ONLY: longitude,latitude 182 183 USE calcul_fluxs_mod 183 184 USE surface_data, ONLY : calice, calsno … … 260 261 IF (soil_model) THEN 261 262 ! update tsoil and calculate soilcap and soilflux 262 CALL soil(dtime, is_sic, knon, snow, tsurf_tmp, tsoil,soilcap, soilflux) 263 CALL soil(dtime, is_sic, knon, snow, tsurf_tmp, qsol, & 264 & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil,soilcap, soilflux) 263 265 cal(1:knon) = RCPD / soilcap(1:knon) 264 266 radsol(1:knon) = radsol(1:knon) + soilflux(1:knon) -
LMDZ6/trunk/libf/phylmd/soil.F90
r2915 r3974 2 2 ! $Header$ 3 3 ! 4 SUBROUTINE soil(ptimestep, indice, knon, snow, ptsrf, &5 ptsoil, pcapcal, pfluxgrd)4 SUBROUTINE soil(ptimestep, indice, knon, snow, ptsrf, qsol, & 5 lon, lat, ptsoil, pcapcal, pfluxgrd) 6 6 7 7 USE dimphy … … 21 21 ! the surface conduction flux pcapcal 22 22 ! 23 ! Update: 2021/07 : soil thermal inertia, formerly a constant value, 24 ! ------ can also be now a function of soil moisture (F Cheruy's idea) 25 ! depending on iflag_inertie, read from physiq.def via conf_phys_m.F90 26 ! ("Stage L3" Eve Rebouillat, with E Vignon, A Sima, F Cheruy) 23 27 ! 24 28 ! Method: Implicit time integration … … 48 52 ! snow(klon) snow 49 53 ! ptsrf(klon) surface temperature at time-step t (K) 54 ! qsol(klon) soil moisture (kg/m2 or mm) 55 ! lon(klon) longitude in radian 56 ! lat(klon) latitude in radian 50 57 ! ptsoil(klon,nsoilmx) temperature inside the ground (K) 51 58 ! pcapcal(klon) surfacic specific heat (W*m-2*s*K-1) … … 60 67 ! --------- 61 68 REAL, INTENT(IN) :: ptimestep 62 INTEGER, INTENT(IN) :: indice, knon 69 INTEGER, INTENT(IN) :: indice, knon !, knindex 63 70 REAL, DIMENSION(klon), INTENT(IN) :: snow 64 71 REAL, DIMENSION(klon), INTENT(IN) :: ptsrf 65 72 REAL, DIMENSION(klon), INTENT(IN) :: qsol 73 REAL, DIMENSION(klon), INTENT(IN) :: lon 74 REAL, DIMENSION(klon), INTENT(IN) :: lat 75 66 76 REAL, DIMENSION(klon,nsoilmx), INTENT(INOUT) :: ptsoil 67 77 REAL, DIMENSION(klon), INTENT(OUT) :: pcapcal … … 182 192 ! knon, knindex, ztherm_i) 183 193 ELSE IF (indice == is_ter) THEN 194 ! 195 ! La relation entre l'inertie thermique du sol et qsol change d'apres 196 ! iflag_inertie, defini dans physiq.def, et appele via comsoil.h 197 ! 184 198 DO ig = 1, knon 185 ztherm_i(ig) = inertie_sol 199 ! iflag_inertie=0 correspond au cas inertie=constant, comme avant 200 IF (iflag_inertie==0) THEN 201 ztherm_i(ig) = inertie_sol 202 ELSE IF (iflag_inertie == 1) THEN 203 ! I = a_qsol * qsol + b modele lineaire deduit d'une 204 ! regression lineaire I = a_mrsos * mrsos + b obtenue sur 205 ! sorties MO d'une simulation LMDZOR(CMIP6) sur l'annee 2000 206 ! sur tous les points avec frac_snow=0 207 ! Difference entre qsol et mrsos prise en compte par un 208 ! facteur d'echelle sur le coefficient directeur de regression: 209 ! fact = 35./150. = mrsos_max/qsol_max 210 ! et a_qsol = a_mrsos * fact (car a = dI/dHumidite) 211 ztherm_i(ig) = 30.0 *35.0/150.0 *qsol(ig) +770.0 212 ! AS : pour qsol entre 0 - 150, on a I entre 770 - 1820 213 ELSE IF (iflag_inertie == 2) THEN 214 ! deux regressions lineaires, sur les memes sorties, 215 ! distinguant le type de sol : sable ou autre (limons/argile) 216 ! Implementation simple : regression type "sable" seulement pour 217 ! Sahara, defini par une "boite" lat/lon (NB : en radians !! ) 218 IF (lon(ig)>-0.35 .AND. lon(ig)<0.70 .AND. lat(ig)>0.17 .AND. lat(ig)<0.52) THEN 219 ! Valeurs theoriquement entre 728 et 2373 ; qsol valeurs basses 220 ztherm_i(ig) = 47. *35.0/150.0 *qsol(ig) +728. ! boite type "sable" pour Sahara 221 ELSE 222 ! Valeurs theoriquement entre 550 et 1940 ; qsol valeurs moyennes et hautes 223 ztherm_i(ig) = 41. *35.0/150.0 *qsol(ig) +505. 224 ENDIF 225 ELSE IF (iflag_inertie == 3) THEN 226 ! AS : idee a tester : 227 ! si la relation doit etre une droite, 228 ! definissons-la en fonction des valeurs min et max de qsol (0:150), 229 ! et de l'inertie (900 : 2000 ou 2400 ; choix ici: 2000) 230 ! I = I_min + qsol * (I_max - I_min)/(qsol_max - qsol_min) 231 ztherm_i(ig) = 900. + qsol(ig) * (2000. - 900.)/150. 232 ELSE 233 WRITE (lunout,*) "Le choix iflag_inertie = ",iflag_inertie," n'est pas defini. Veuillez choisir un entier entre 0 et 3" 234 ENDIF 235 ! 236 ! Fin de l'introduction de la relation entre l'inertie thermique du sol et qsol 237 !------------------------------------------- 238 !AS : donc le moindre flocon de neige sur un point de grid 239 ! fait que l'inertie du point passe a la valeur pour neige ! 186 240 IF (snow(ig) > 0.0) ztherm_i(ig) = inertie_sno 241 187 242 ENDDO 188 243 ! CALL iophys_ecrit_index('ztherm_ter', 1, 'ztherm_ter', 'USI', & -
LMDZ6/trunk/libf/phylmd/surf_land_bucket_mod.F90
r2351 r3974 24 24 USE cpl_mod 25 25 USE dimphy 26 USE geometry_mod, ONLY: l atitude26 USE geometry_mod, ONLY: longitude,latitude 27 27 USE mod_grid_phy_lmdz 28 28 USE mod_phys_lmdz_para … … 103 103 104 104 ! calculate temperature, heat capacity and conduction flux in soil 105 IF (soil_model) THEN 106 CALL soil(dtime, is_ter, knon, snow, tsurf, tsoil, soilcap, soilflux) 105 IF (soil_model) THEN 106 CALL soil(dtime, is_ter, knon, snow, tsurf, qsol, & 107 & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux) 108 107 109 DO i=1, knon 108 110 cal(i) = RCPD / soilcap(i) -
LMDZ6/trunk/libf/phylmd/surf_landice_mod.F90
r3903 r3974 25 25 26 26 USE dimphy 27 USE geometry_mod, ONLY : longitude,latitude 27 28 USE surface_data, ONLY : type_ocean, calice, calsno, landice_opt, iflag_albcalc 28 29 USE fonte_neige_mod, ONLY : fonte_neige,run_off_lic,fqcalving_global,ffonte_global,fqfonte_global,runofflic_global … … 278 279 ! use soil model and recalculate properly cal 279 280 IF (soil_model) THEN 280 CALL soil(dtime, is_lic, knon, snow, tsurf, tsoil, soilcap, soilflux) 281 CALL soil(dtime, is_lic, knon, snow, tsurf, qsol, & 282 & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux) 281 283 cal(1:knon) = RCPD / soilcap(1:knon) 282 284 radsol(1:knon) = radsol(1:knon) + soilflux(1:knon)
Note: See TracChangeset
for help on using the changeset viewer.