Changeset 5144 for LMDZ6/branches/Amaury_dev/libf/phylmdiso
- Timestamp:
- Jul 29, 2024, 11:01:04 PM (3 months ago)
- Location:
- LMDZ6/branches/Amaury_dev/libf/phylmdiso
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/phylmdiso/add_phys_tend_mod.F90
r5137 r5144 161 161 #endif 162 162 #endif 163 164 USE lmdz_yomcst 165 163 166 IMPLICIT NONE 164 include "YOMCST.h"165 167 166 168 ! Arguments : … … 685 687 , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col 686 688 USE lmdz_clesphys 689 USE lmdz_yomcst 687 690 688 691 IMPLICIT NONE 689 include "YOMCST.h"690 692 691 693 ! Arguments : … … 835 837 zh_qw_col, zh_ql_col, zh_qs_col, zh_qbs_col, zh_col) 836 838 839 USE lmdz_yomcst 837 840 IMPLICIT NONE 838 include "YOMCST.h"839 841 840 842 INTEGER, INTENT(IN) :: nlon,nlev … … 916 918 , rain_lsc, snow_lsc 917 919 USE climb_hq_mod, ONLY: d_h_col_vdf, f_h_bnd 920 USE lmdz_yomcst 921 918 922 IMPLICIT NONE 919 include "YOMCST.h"920 923 921 924 ! Arguments : -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/ajsec.F90
r5117 r5144 19 19 #endif 20 20 #endif 21 USE lmdz_yomcst 21 22 IMPLICIT NONE 22 23 ! ====================================================================== … … 29 30 ! d_t-----output-R-Incrementation de la temperature 30 31 ! ====================================================================== 31 include "YOMCST.h"32 32 REAL paprs(klon, klev+1), pplay(klon, klev) 33 33 REAL t(klon, klev), q(klon, klev) … … 313 313 #endif 314 314 #endif 315 USE lmdz_yomcst 316 315 317 IMPLICIT NONE 316 318 ! ====================================================================== … … 323 325 ! d_t-----output-R-Incrementation de la temperature 324 326 ! ====================================================================== 325 include "YOMCST.h"326 327 REAL paprs(klon, klev+1), pplay(klon, klev) 327 328 REAL t(klon, klev), q(klon, klev) … … 579 580 SUBROUTINE ajsec_old(paprs, pplay, t, d_t) 580 581 USE dimphy 582 USE lmdz_yomcst 583 581 584 IMPLICIT NONE 582 585 ! ====================================================================== … … 589 592 ! d_t-----output-R-Incrementation de la temperature 590 593 ! ====================================================================== 591 include "YOMCST.h"592 594 REAL paprs(klon, klev+1), pplay(klon, klev) 593 595 REAL t(klon, klev) -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/calwake.F90
r5117 r5144 42 42 #endif 43 43 #endif 44 USE lmdz_yomcst 45 44 46 IMPLICIT NONE 45 47 ! ====================================================================== 46 include "YOMCST.h"47 48 48 49 ! Arguments -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/change_srf_frac_mod.F90
r5137 r5144 38 38 #endif 39 39 USE lmdz_clesphys ! albedo SB 40 USE lmdz_yomcst 40 41 41 INCLUDE "YOMCST.h" 42 42 43 IMPLICIT NONE 43 44 44 45 -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/clift.F90
r5116 r5144 1 2 1 ! $Header$ 3 2 4 3 SUBROUTINE clift(p, t, rr, rs, plcl, dplcldt, dplcldq) 5 IMPLICIT NONE 4 USE lmdz_yomcst 5 6 IMPLICIT NONE 6 7 ! *************************************************************** 7 8 ! * * … … 41 42 ! on utilise les constantes thermo du Centre Europeen: (sb) 42 43 43 include "YOMCST.h" 44 REAL :: p,t,rr,rs,plcl,dplcldt,dplcldq,cpd,cpv,cl,cpvmcl,eps,alv0,a,b 45 REAL :: rh,chi,alv 44 REAL :: p, t, rr, rs, plcl, dplcldt, dplcldq, cpd, cpv, cl, cpvmcl, eps, alv0, a, b 45 REAL :: rh, chi, alv 46 46 47 47 cpd = rcpd … … 49 49 cl = rcw 50 50 cpvmcl = cl - cpv 51 eps = rd /rv51 eps = rd / rv 52 52 alv0 = rlvtt 53 53 … … 57 57 b = 122.0 58 58 59 rh = rr /rs60 chi = t /(a-b*rh-t)61 plcl = p *(rh**chi)59 rh = rr / rs 60 chi = t / (a - b * rh - t) 61 plcl = p * (rh**chi) 62 62 63 alv = alv0 - cpvmcl *(t-273.15)63 alv = alv0 - cpvmcl * (t - 273.15) 64 64 65 65 ! -- sb: correction: 66 66 ! DPLCLDQ = PLCL*CHI*( 1./RR - B*CHI/T/RS*ALOG(RH) ) 67 dplcldq = plcl *chi*(1./rr+b*chi/t/rs*alog(rh))67 dplcldq = plcl * chi * (1. / rr + b * chi / t / rs * alog(rh)) 68 68 ! sb -- 69 69 70 dplcldt = plcl*chi*((a-b*rh*(1.+alv/rv/t))/t**2*chi*alog(rh)-alv/rv/t**2) 71 72 70 dplcldt = plcl * chi * ((a - b * rh * (1. + alv / rv / t)) / t**2 * chi * alog(rh) - alv / rv / t**2) 73 71 74 72 END SUBROUTINE clift -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/climb_hq_mod.F90
r5139 r5144 57 57 ) 58 58 USE lmdz_compbl, ONLY: iflag_pbl, iflag_pbl_split, iflag_order2_sollw, ifl_pbltree 59 USE lmdz_yomcst 59 60 #ifdef ISOVERIF 60 61 USE isotopes_mod, ONLY: iso_eau,iso_HDO … … 126 127 ! Include 127 128 !**************************************************************************************** 128 INCLUDE "YOMCST.h"129 129 130 130 #ifdef ISO … … 421 421 ! where X is H or Q, and k the vertical level k=1,klev 422 422 423 INCLUDE "YOMCST.h" 423 USE lmdz_yomcst 424 425 IMPLICIT NONE 426 424 427 ! Input arguments 425 428 !**************************************************************************************** … … 499 502 500 503 USE lmdz_compbl, ONLY: iflag_pbl, iflag_pbl_split, iflag_order2_sollw, ifl_pbltree 504 USE lmdz_yomcst 501 505 #ifdef ISOVERIF 502 506 USE infotrac_phy, ONLY: nzone … … 552 556 !#endif 553 557 #endif 554 555 ! Include 556 !**************************************************************************************** 557 INCLUDE "YOMCST.h" 558 !**************************************************************************************** 558 559 559 ! 1) 560 560 ! Definition of some variables -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/concvl.F90
r5143 r5144 43 43 USE dimphy 44 44 USE infotrac_phy, ONLY: nbtr 45 USE lmdz_ YOETHF45 USE lmdz_yoethf 46 46 #ifdef ISO 47 47 USE infotrac_phy, ONLY: ntraciso=>ntiso … … 67 67 USE lmdz_conema3 68 68 USE lmdz_fcttre, ONLY: foeew, foede, qsats, qsatl, dqsats, dqsatl, thermcep 69 USE lmdz_yomcst 69 70 70 71 IMPLICIT NONE … … 296 297 !$OMP THREADPRIVATE(itap, igout) 297 298 298 299 include "YOMCST.h" 300 include "YOMCST2.h" 299 include "YOMCST2.h" 301 300 302 301 IF (first) THEN -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/cv3_enthalpmix.F90
r5143 r5144 18 18 ! ************************************************************** 19 19 USE lmdz_cvthermo 20 USE lmdz_ YOETHF20 USE lmdz_yoethf 21 21 USE lmdz_fcttre, ONLY: foeew, foede, qsats, qsatl, dqsats, dqsatl, thermcep 22 USE lmdz_yomcst 22 23 23 24 IMPLICIT NONE … … 32 33 ! =============================================================== 33 34 34 include "YOMCST.h"35 35 !inputs: 36 36 INTEGER, INTENT (IN) :: nd, len -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/cv3_estatmix.F90
r5143 r5144 19 19 ! **************************************************************** 20 20 USE lmdz_cvthermo 21 USE lmdz_ YOETHF21 USE lmdz_yoethf 22 22 USE lmdz_fcttre, ONLY: foeew, foede, qsats, qsatl, dqsats, dqsatl, thermcep 23 USE lmdz_yomcst 23 24 24 25 IMPLICIT NONE … … 33 34 ! =============================================================== 34 35 35 include "YOMCST.h"36 36 !inputs: 37 37 INTEGER, INTENT (IN) :: nd, len -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/cv_driver.F90
r5142 r5144 1267 1267 SUBROUTINE cv_thermo(iflag_con) 1268 1268 USE lmdz_cvthermo 1269 USE lmdz_yomcst 1269 1270 1270 1271 IMPLICIT NONE … … 1273 1274 ! Set thermodynamical constants for convectL 1274 1275 ! ------------------------------------------------------------- 1275 1276 include "YOMCST.h"1277 1276 1278 1277 INTEGER iflag_con -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/isotopes_routines_mod.F90
r5143 r5144 12843 12843 USE isotrac_mod, ONLY: izone_cont,index_zone,index_iso 12844 12844 #endif 12845 USE lmdz_ YOETHF12845 USE lmdz_yoethf 12846 12846 USE lmdz_fcttre, ONLY: foeew, foede, qsats, qsatl, dqsats, dqsatl, thermcep 12847 12847 … … 13407 13407 & bassin_map 13408 13408 #endif 13409 USE lmdz_ YOETHF13409 USE lmdz_yoethf 13410 13410 USE lmdz_fcttre, ONLY: foeew, foede, qsats, qsatl, dqsats, dqsatl, thermcep 13411 13411 … … 14318 14318 & bassin_map 14319 14319 #endif 14320 USE lmdz_ YOETHF14320 USE lmdz_yoethf 14321 14321 USE lmdz_fcttre, ONLY: foeew, foede, qsats, qsatl, dqsats, dqsatl, thermcep 14322 14322 -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/lmdz_lscp_old.F90
r5143 r5144 68 68 #endif 69 69 70 USE lmdz_ YOETHF70 USE lmdz_yoethf 71 71 USE lmdz_fcttre, ONLY: foeew, foede, qsats, qsatl, dqsats, dqsatl, thermcep 72 USE lmdz_yomcst 72 73 73 74 IMPLICIT NONE … … 97 98 ! fl_cor_ebil= 0 pour reproduire anciens bugs 98 99 !====================================================================== 99 include "YOMCST.h"100 100 101 101 ! Principaux inputs: -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/lmdz_wake.F90
r5141 r5144 42 42 #endif 43 43 USE lmdz_cvthermo 44 USE lmdz_yomcst 44 45 45 46 IMPLICIT NONE … … 136 137 ! Déclaration de variables 137 138 ! ------------------------------------------------------------------------- 138 139 include "YOMCST.h"140 139 141 140 ! Arguments en entree -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/phyaqua_mod.F90
r5137 r5144 1 2 1 ! $Id: phyaqua_mod.F90 3579 2019-10-09 13:11:07Z fairhead $ 3 2 … … 9 8 CONTAINS 10 9 11 SUBROUTINE iniaqua(nlon, year_len,iflag_phys)10 SUBROUTINE iniaqua(nlon, year_len, iflag_phys) 12 11 13 12 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 34 33 USE phys_state_var_mod 35 34 USE time_phylmdz_mod, ONLY: day_ref, ndays, pdtphys, & 36 day_ini,day_end35 day_ini, day_end 37 36 USE indice_sol_mod 38 37 USE lmdz_physical_constants, ONLY: pi 39 ! USE ioipsl38 ! USE ioipsl 40 39 USE lmdz_phys_para, ONLY: is_master 41 40 USE lmdz_phys_transfert_para, ONLY: bcast 42 41 USE lmdz_grid_phy 43 42 USE lmdz_ioipsl_getin_p, ONLY: getin_p 44 USE phys_cal_mod 43 USE phys_cal_mod, ONLY: calend, year_len_phy => year_len 45 44 USE lmdz_clesphys 46 45 #ifdef ISO 47 46 USE infotrac_phy, ONLY: niso 48 47 #endif 48 USE lmdz_yomcst 49 49 50 50 IMPLICIT NONE 51 51 52 include "YOMCST.h"53 52 include "dimsoil.h" 54 53 55 54 INTEGER, INTENT (IN) :: nlon, year_len, iflag_phys 56 55 ! IM ajout latfi, lonfi 57 ! REAL, INTENT (IN) :: lonfi(nlon), latfi(nlon)56 ! REAL, INTENT (IN) :: lonfi(nlon), latfi(nlon) 58 57 59 58 INTEGER type_profil, type_aqua … … 103 102 104 103 INTEGER, SAVE :: read_climoz = 0 ! read ozone climatology 105 !$OMP THREADPRIVATE(read_climoz)104 !$OMP THREADPRIVATE(read_climoz) 106 105 107 106 ! ------------------------------------------------------------------------- … … 119 118 120 119 INTEGER longcles 121 PARAMETER (longcles =20)120 PARAMETER (longcles = 20) 122 121 REAL clesphy0(longcles) 123 122 … … 132 131 133 132 ! Local 134 CHARACTER (LEN =20) :: modname='phyaqua'135 CHARACTER (LEN =80) :: abort_message133 CHARACTER (LEN = 20) :: modname = 'phyaqua' 134 CHARACTER (LEN = 80) :: abort_message 136 135 137 136 … … 145 144 146 145 !IF (calend .EQ. "earth_360d") Then 147 146 year_len_phy = year_len 148 147 !END IF 149 148 150 149 IF (year_len/=360) THEN 151 write (*, *) year_len152 write (*, *) 'iniaqua: 360 day calendar is required !'150 write (*, *) year_len 151 write (*, *) 'iniaqua: 360 day calendar is required !' 153 152 stop 154 153 endif 155 154 156 type_aqua = iflag_phys /100157 type_profil = iflag_phys - type_aqua *100155 type_aqua = iflag_phys / 100 156 type_profil = iflag_phys - type_aqua * 100 158 157 PRINT *, 'iniaqua:type_aqua, type_profil', type_aqua, type_profil 159 158 160 159 IF (klon/=nlon) THEN 161 160 WRITE (*, *) 'iniaqua: klon=', klon, ' nlon=', nlon 162 abort_message = 'probleme de dimensions dans iniaqua'163 CALL abort_physic(modname, abort_message,1)161 abort_message = 'probleme de dimensions dans iniaqua' 162 CALL abort_physic(modname, abort_message, 1) 164 163 END IF 165 164 CALL phys_state_var_init(read_climoz) 166 167 165 168 166 read_climoz = 0 … … 192 190 solaire = 1365. 193 191 CALL getin_p('solaire', solaire) 194 192 195 193 ! CALL getin('albedo',albedo) ! albedo is set below, depending on 196 194 ! type_aqua … … 269 267 IF (grid_type==unstructured) THEN 270 268 CALL writelim_unstruct(klon, phy_nat, phy_alb, phy_sst, phy_bil, phy_rug, phy_ice, & 271 269 phy_fter, phy_foce, phy_flic, phy_fsic) 272 270 ELSE 273 274 275 271 272 CALL writelim(klon, phy_nat, phy_alb, phy_sst, phy_bil, phy_rug, phy_ice, & 273 phy_fter, phy_foce, phy_flic, phy_fsic) 276 274 ENDIF 277 275 … … 284 282 285 283 timestep = pdtphys 286 radpas = nint(rday /timestep/float(nbapp_rad))284 radpas = nint(rday / timestep / float(nbapp_rad)) 287 285 288 286 DO i = 1, longcles … … 348 346 snsrf(:, :) = 0. ! couverture de neige des sous surface 349 347 z0m(:, :) = rugos ! couverture de neige des sous surface 350 z0h=z0m 351 348 z0h = z0m 352 349 353 350 CALL pbl_surface_init(fder, snsrf, qsolsrf, tsoil) … … 358 355 PRINT *, 'iniaqua: before phyredem' 359 356 360 pbl_tke(:, :,:) = 1.e-8357 pbl_tke(:, :, :) = 1.e-8 361 358 falb1 = albedo 362 359 falb2 = albedo … … 376 373 detr_therm = 0. 377 374 ale_bl = 0. 378 ale_bl_trig = 0.379 alp_bl = 0.380 treedrg(:, :,:)=0.375 ale_bl_trig = 0. 376 alp_bl = 0. 377 treedrg(:, :, :) = 0. 381 378 382 379 u10m = 0. 383 380 v10m = 0. 384 381 385 ql_ancien 386 qs_ancien 387 u_ancien 388 v_ancien 389 prw_ancien 382 ql_ancien = 0. 383 qs_ancien = 0. 384 u_ancien = 0. 385 v_ancien = 0. 386 prw_ancien = 0. 390 387 prlw_ancien = 0. 391 prsw_ancien = 0. 392 393 ale_wake = 0. 394 ale_bl_stat = 0. 395 396 397 !ym error : the sub surface dimension is the third not second : forgotten for iniaqua 398 ! falb_dir(:,is_ter,:)=0.08; falb_dir(:,is_lic,:)=0.6 399 ! falb_dir(:,is_oce,:)=0.5; falb_dir(:,is_sic,:)=0.6 400 falb_dir(:,:,is_ter)=0.08; falb_dir(:,:,is_lic)=0.6 401 falb_dir(:,:,is_oce)=0.5; falb_dir(:,:,is_sic)=0.6 402 403 !ym falb_dif has been forgotten, initialize with defaukt value found in phyetat0 or 0 ? 404 !ym probably the uninitialized value was 0 for standard (regular grid) case 405 falb_dif(:,:,:)=0 406 388 prsw_ancien = 0. 389 390 ale_wake = 0. 391 ale_bl_stat = 0. 392 393 394 !ym error : the sub surface dimension is the third not second : forgotten for iniaqua 395 ! falb_dir(:,is_ter,:)=0.08; falb_dir(:,is_lic,:)=0.6 396 ! falb_dir(:,is_oce,:)=0.5; falb_dir(:,is_sic,:)=0.6 397 falb_dir(:, :, is_ter) = 0.08; falb_dir(:, :, is_lic) = 0.6 398 falb_dir(:, :, is_oce) = 0.5; falb_dir(:, :, is_sic) = 0.6 399 400 !ym falb_dif has been forgotten, initialize with defaukt value found in phyetat0 or 0 ? 401 !ym probably the uninitialized value was 0 for standard (regular grid) case 402 falb_dif(:, :, :) = 0 407 403 408 404 CALL phyredem('startphy.nc') … … 410 406 PRINT *, 'iniaqua: after phyredem' 411 407 CALL phys_state_var_end 412 413 408 414 409 END SUBROUTINE iniaqua … … 419 414 SUBROUTINE zenang_an(cycle_diurne, gmtime, rlat, rlon, rmu0, fract) 420 415 USE dimphy 416 USE lmdz_yomcst 417 421 418 IMPLICIT NONE 422 419 ! ==================================================================== … … 450 447 ! pmu0-----OUTPUT: angle zenithal moyen entre gmtime et gmtime+pdtrad 451 448 ! frac-----OUTPUT: ensoleillement moyen entre gmtime et gmtime+pdtrad 452 ! ================================================================ 453 include "YOMCST.h" 454 ! ================================================================ 449 455 450 LOGICAL cycle_diurne 456 451 REAL gmtime … … 461 456 REAL pi_local 462 457 463 464 458 REAL rmu0m(klon), rmu0a(klon) 465 459 466 467 pi_local = 4.0*atan(1.0) 460 pi_local = 4.0 * atan(1.0) 468 461 469 462 ! ================================================================ … … 475 468 ! Calcule du flux moyen 476 469 IF (abs(rlat(i))<=28.75) THEN 477 rmu0m(i) = (210.1924 +206.6059*cos(0.0174533*rlat(i))**2)/1365.470 rmu0m(i) = (210.1924 + 206.6059 * cos(0.0174533 * rlat(i))**2) / 1365. 478 471 ELSE IF (abs(rlat(i))<=43.75) THEN 479 rmu0m(i) = (187.4562 +236.1853*cos(0.0174533*rlat(i))**2)/1365.472 rmu0m(i) = (187.4562 + 236.1853 * cos(0.0174533 * rlat(i))**2) / 1365. 480 473 ELSE IF (abs(rlat(i))<=71.25) THEN 481 rmu0m(i) = (162.4439 +284.1192*cos(0.0174533*rlat(i))**2)/1365.474 rmu0m(i) = (162.4439 + 284.1192 * cos(0.0174533 * rlat(i))**2) / 1365. 482 475 ELSE 483 rmu0m(i) = (172.8125 +183.7673*cos(0.0174533*rlat(i))**2)/1365.476 rmu0m(i) = (172.8125 + 183.7673 * cos(0.0174533 * rlat(i))**2) / 1365. 484 477 END IF 485 478 END DO … … 495 488 496 489 DO i = 1, klon 497 rmu0a(i) = 2. *rmu0m(i)*sqrt(2.)*pi_local/(4.-pi_local)498 rmu0(i) = rmu0a(i) *abs(sin(pi_local*gmtime+pi_local*rlon(i)/360.)) - &499 rmu0a(i)/sqrt(2.)490 rmu0a(i) = 2. * rmu0m(i) * sqrt(2.) * pi_local / (4. - pi_local) 491 rmu0(i) = rmu0a(i) * abs(sin(pi_local * gmtime + pi_local * rlon(i) / 360.)) - & 492 rmu0a(i) / sqrt(2.) 500 493 END DO 501 494 … … 522 515 DO i = 1, klon 523 516 fract(i) = 0.5 524 rmu0(i) = rmu0m(i) *2.517 rmu0(i) = rmu0m(i) * 2. 525 518 END DO 526 519 527 520 END IF 528 521 529 530 522 END SUBROUTINE zenang_an 531 523 … … 533 525 534 526 SUBROUTINE writelim_unstruct(klon, phy_nat, phy_alb, phy_sst, phy_bil, phy_rug, & 535 phy_ice, phy_fter, phy_foce, phy_flic, phy_fsic)527 phy_ice, phy_fter, phy_foce, phy_flic, phy_fsic) 536 528 537 529 USE lmdz_phys_para, ONLY: is_omp_master, klon_mpi … … 553 545 554 546 REAL :: phy_mpi(klon_mpi, 360) ! temporary variable, to store phy_***(:) 555 556 547 ! on the whole physics grid 548 557 549 PRINT *, 'writelim: Ecriture du fichier limit' 558 550 559 551 CALL gather_omp(phy_foce, phy_mpi) 560 IF (is_omp_master) CALL xios_send_field('foce_limout', phy_mpi)552 IF (is_omp_master) CALL xios_send_field('foce_limout', phy_mpi) 561 553 562 554 CALL gather_omp(phy_fsic, phy_mpi) 563 IF (is_omp_master) CALL xios_send_field('fsic_limout', phy_mpi)564 555 IF (is_omp_master) CALL xios_send_field('fsic_limout', phy_mpi) 556 565 557 CALL gather_omp(phy_fter, phy_mpi) 566 IF (is_omp_master) CALL xios_send_field('fter_limout', phy_mpi)567 558 IF (is_omp_master) CALL xios_send_field('fter_limout', phy_mpi) 559 568 560 CALL gather_omp(phy_flic, phy_mpi) 569 IF (is_omp_master) CALL xios_send_field('flic_limout', phy_mpi)561 IF (is_omp_master) CALL xios_send_field('flic_limout', phy_mpi) 570 562 571 563 CALL gather_omp(phy_sst, phy_mpi) 572 IF (is_omp_master) CALL xios_send_field('sst_limout', phy_mpi)564 IF (is_omp_master) CALL xios_send_field('sst_limout', phy_mpi) 573 565 574 566 CALL gather_omp(phy_bil, phy_mpi) 575 IF (is_omp_master) CALL xios_send_field('bils_limout', phy_mpi)567 IF (is_omp_master) CALL xios_send_field('bils_limout', phy_mpi) 576 568 577 569 CALL gather_omp(phy_alb, phy_mpi) 578 IF (is_omp_master) CALL xios_send_field('alb_limout', phy_mpi)570 IF (is_omp_master) CALL xios_send_field('alb_limout', phy_mpi) 579 571 580 572 CALL gather_omp(phy_rug, phy_mpi) 581 IF (is_omp_master) CALL xios_send_field('rug_limout', phy_mpi)573 IF (is_omp_master) CALL xios_send_field('rug_limout', phy_mpi) 582 574 583 575 END SUBROUTINE writelim_unstruct 584 576 585 577 586 587 578 SUBROUTINE writelim(klon, phy_nat, phy_alb, phy_sst, phy_bil, phy_rug, & 588 phy_ice, phy_fter, phy_foce, phy_flic, phy_fsic)579 phy_ice, phy_fter, phy_foce, phy_flic, phy_fsic) 589 580 590 581 USE lmdz_phys_para, ONLY: is_master … … 592 583 USE lmdz_phys_transfert_para, ONLY: gather 593 584 USE phys_cal_mod, ONLY: year_len 594 USE netcdf, ONLY: nf90_clobber,nf90_close,nf90_noerr,nf90_strerror,nf90_put_att,nf90_def_var,&595 nf90_def_dim, nf90_create,nf90_put_var,nf90_unlimited,nf90_global,nf90_64bit_offset,&585 USE netcdf, ONLY: nf90_clobber, nf90_close, nf90_noerr, nf90_strerror, nf90_put_att, nf90_def_var, & 586 nf90_def_dim, nf90_create, nf90_put_var, nf90_unlimited, nf90_global, nf90_64bit_offset, & 596 587 nf90_enddef 597 588 USE lmdz_cppkeys_wrapper, ONLY: nf90_format … … 611 602 612 603 REAL :: phy_glo(klon_glo, year_len) ! temporary variable, to store phy_***(:) 613 604 ! on the whole physics grid 614 605 INTEGER :: k 615 606 INTEGER ierr … … 627 618 PRINT *, 'writelim: Ecriture du fichier limit' 628 619 629 ierr = nf90_create('limit.nc', IOR(nf90_clobber, nf90_64bit_offset), nid)620 ierr = nf90_create('limit.nc', IOR(nf90_clobber, nf90_64bit_offset), nid) 630 621 631 622 ierr = nf90_put_att(nid, nf90_global, 'title', & 632 'Fichier conditions aux limites')623 'Fichier conditions aux limites') 633 624 ! ierr = nf90_def_dim (nid, "points_physiques", klon, ndim) 634 625 ierr = nf90_def_dim(nid, 'points_physiques', klon_glo, ndim) … … 643 634 ierr = nf90_def_var(nid, 'NAT', nf90_format, dims, id_nat) 644 635 ierr = nf90_put_att(nid, id_nat, 'title', & 645 'Nature du sol (0,1,2,3)')636 'Nature du sol (0,1,2,3)') 646 637 647 638 ierr = nf90_def_var(nid, 'SST', nf90_format, dims, id_sst) 648 639 ierr = nf90_put_att(nid, id_sst, 'title', & 649 'Temperature superficielle de la mer')640 'Temperature superficielle de la mer') 650 641 651 642 ierr = nf90_def_var(nid, 'BILS', nf90_format, dims, id_bils) 652 643 ierr = nf90_put_att(nid, id_bils, 'title', & 653 'Reference flux de chaleur au sol')644 'Reference flux de chaleur au sol') 654 645 655 646 ierr = nf90_def_var(nid, 'ALB', nf90_format, dims, id_alb) … … 660 651 661 652 ierr = nf90_def_var(nid, 'FTER', nf90_format, dims, id_fter) 662 ierr = nf90_put_att(nid, id_fter, 'title', 'Frac. Land')653 ierr = nf90_put_att(nid, id_fter, 'title', 'Frac. Land') 663 654 ierr = nf90_def_var(nid, 'FOCE', nf90_format, dims, id_foce) 664 ierr = nf90_put_att(nid, id_foce, 'title', 'Frac. Ocean')655 ierr = nf90_put_att(nid, id_foce, 'title', 'Frac. Ocean') 665 656 ierr = nf90_def_var(nid, 'FSIC', nf90_format, dims, id_fsic) 666 ierr = nf90_put_att(nid, id_fsic, 'title', 'Frac. Sea Ice')657 ierr = nf90_put_att(nid, id_fsic, 'title', 'Frac. Sea Ice') 667 658 ierr = nf90_def_var(nid, 'FLIC', nf90_format, dims, id_flic) 668 ierr = nf90_put_att(nid, id_flic, 'title', 'Frac. Land Ice')659 ierr = nf90_put_att(nid, id_flic, 'title', 'Frac. Land Ice') 669 660 670 661 ierr = nf90_enddef(nid) … … 780 771 SUBROUTINE profil_sst(nlon, rlatd, type_profil, phy_sst) 781 772 USE dimphy 782 USE phys_cal_mod 773 USE phys_cal_mod, ONLY: year_len 783 774 IMPLICIT NONE 784 775 … … 787 778 INTEGER imn, imx, amn, amx, kmn, kmx 788 779 INTEGER p, pplus, nlat_max 789 PARAMETER (nlat_max =72)780 PARAMETER (nlat_max = 72) 790 781 REAL x_anom_sst(nlat_max) 791 CHARACTER (LEN =20) :: modname='profil_sst'792 CHARACTER (LEN =80) :: abort_message782 CHARACTER (LEN = 20) :: modname = 'profil_sst' 783 CHARACTER (LEN = 80) :: abort_message 793 784 794 785 IF (klon/=nlon) THEN 795 abort_message='probleme de dimensions dans profil_sst'796 CALL abort_physic(modname,abort_message,1)786 abort_message = 'probleme de dimensions dans profil_sst' 787 CALL abort_physic(modname, abort_message, 1) 797 788 ENDIF 798 789 WRITE (*, *) ' profil_sst: type_profil=', type_profil … … 805 796 ! Méthode 1 "Control" faible plateau à l'Equateur 806 797 DO j = 1, klon 807 phy_sst(j, i) = 273. + 27. *(1-sin(1.5*rlatd(j))**2)798 phy_sst(j, i) = 273. + 27. * (1 - sin(1.5 * rlatd(j))**2) 808 799 ! PI/3=1.047197551 809 800 IF ((rlatd(j)>1.0471975) .OR. (rlatd(j)<-1.0471975)) THEN … … 815 806 ! Méthode 2 "Flat" fort plateau à l'Equateur 816 807 DO j = 1, klon 817 phy_sst(j, i) = 273. + 27. *(1-sin(1.5*rlatd(j))**4)808 phy_sst(j, i) = 273. + 27. * (1 - sin(1.5 * rlatd(j))**4) 818 809 IF ((rlatd(j)>1.0471975) .OR. (rlatd(j)<-1.0471975)) THEN 819 810 phy_sst(j, i) = 273. … … 821 812 END DO 822 813 END IF 823 824 814 825 815 IF (type_profil==3) THEN 826 816 ! Méthode 3 "Qobs" plateau réel à l'Equateur 827 817 DO j = 1, klon 828 phy_sst(j, i) = 273. + 0.5 *27.*(2-sin(1.5*rlatd(j))**2-sin(1.5* &829 rlatd(j))**4)818 phy_sst(j, i) = 273. + 0.5 * 27. * (2 - sin(1.5 * rlatd(j))**2 - sin(1.5 * & 819 rlatd(j))**4) 830 820 IF ((rlatd(j)>1.0471975) .OR. (rlatd(j)<-1.0471975)) THEN 831 821 phy_sst(j, i) = 273. … … 837 827 ! Méthode 4 : Méthode 3 + SST+2 "Qobs" plateau réel à l'Equateur 838 828 DO j = 1, klon 839 phy_sst(j, i) = 273. + 0.5 *29.*(2-sin(1.5*rlatd(j))**2-sin(1.5* &840 rlatd(j))**4)829 phy_sst(j, i) = 273. + 0.5 * 29. * (2 - sin(1.5 * rlatd(j))**2 - sin(1.5 * & 830 rlatd(j))**4) 841 831 IF ((rlatd(j)>1.0471975) .OR. (rlatd(j)<-1.0471975)) THEN 842 832 phy_sst(j, i) = 273. … … 848 838 ! Méthode 5 : Méthode 3 + +2K "Qobs" plateau réel à l'Equateur 849 839 DO j = 1, klon 850 phy_sst(j, i) = 273. + 2. + 0.5 *27.*(2-sin(1.5*rlatd(j))**2-sin(1.5 &851 *rlatd(j))**4)840 phy_sst(j, i) = 273. + 2. + 0.5 * 27. * (2 - sin(1.5 * rlatd(j))**2 - sin(1.5 & 841 * rlatd(j))**4) 852 842 IF ((rlatd(j)>1.0471975) .OR. (rlatd(j)<-1.0471975)) THEN 853 843 phy_sst(j, i) = 273. + 2. … … 863 853 END DO 864 854 END IF 865 866 855 867 856 IF (type_profil==7) THEN … … 876 865 ! Méthode 8 profil anomalies SST du modèle couplé AR4 877 866 DO j = 1, klon 878 IF (rlatd(j)==rlatd(j -1)) THEN867 IF (rlatd(j)==rlatd(j - 1)) THEN 879 868 phy_sst(j, i) = 273. + x_anom_sst(pplus) + & 880 0.5*27.*(2-sin(1.5*rlatd(j))**2-sin(1.5*rlatd(j))**4)869 0.5 * 27. * (2 - sin(1.5 * rlatd(j))**2 - sin(1.5 * rlatd(j))**4) 881 870 IF ((rlatd(j)>1.0471975) .OR. (rlatd(j)<-1.0471975)) THEN 882 871 phy_sst(j, i) = 273. + x_anom_sst(pplus) … … 886 875 pplus = 73 - p 887 876 phy_sst(j, i) = 273. + x_anom_sst(pplus) + & 888 0.5*27.*(2-sin(1.5*rlatd(j))**2-sin(1.5*rlatd(j))**4)877 0.5 * 27. * (2 - sin(1.5 * rlatd(j))**2 - sin(1.5 * rlatd(j))**4) 889 878 IF ((rlatd(j)>1.0471975) .OR. (rlatd(j)<-1.0471975)) THEN 890 879 phy_sst(j, i) = 273. + x_anom_sst(pplus) … … 898 887 ! Méthode 5 : Méthode 3 + -2K "Qobs" plateau réel à l'Equateur 899 888 DO j = 1, klon 900 phy_sst(j, i) = 273. - 2. + 0.5 *27.*(2-sin(1.5*rlatd(j))**2-sin(1.5 &901 *rlatd(j))**4)889 phy_sst(j, i) = 273. - 2. + 0.5 * 27. * (2 - sin(1.5 * rlatd(j))**2 - sin(1.5 & 890 * rlatd(j))**4) 902 891 IF ((rlatd(j)>1.0471975) .OR. (rlatd(j)<-1.0471975)) THEN 903 892 phy_sst(j, i) = 273. - 2. … … 905 894 END DO 906 895 END IF 907 908 896 909 897 IF (type_profil==10) THEN 910 898 ! Méthode 10 : Méthode 3 + +4K "Qobs" plateau réel à l'Equateur 911 899 DO j = 1, klon 912 phy_sst(j, i) = 273. + 4. + 0.5 *27.*(2-sin(1.5*rlatd(j))**2-sin(1.5 &913 *rlatd(j))**4)900 phy_sst(j, i) = 273. + 4. + 0.5 * 27. * (2 - sin(1.5 * rlatd(j))**2 - sin(1.5 & 901 * rlatd(j))**4) 914 902 IF ((rlatd(j)>1.0471975) .OR. (rlatd(j)<-1.0471975)) THEN 915 903 phy_sst(j, i) = 273. + 4. … … 921 909 ! Méthode 11 : Méthode 3 + 4CO2 "Qobs" plateau réel à l'Equateur 922 910 DO j = 1, klon 923 phy_sst(j, i) = 273. + 0.5 *27.*(2-sin(1.5*rlatd(j))**2-sin(1.5* &924 rlatd(j))**4)911 phy_sst(j, i) = 273. + 0.5 * 27. * (2 - sin(1.5 * rlatd(j))**2 - sin(1.5 * & 912 rlatd(j))**4) 925 913 IF ((rlatd(j)>1.0471975) .OR. (rlatd(j)<-1.0471975)) THEN 926 914 phy_sst(j, i) = 273. … … 932 920 ! Méthode 12 : Méthode 10 + 4CO2 "Qobs" plateau réel à l'Equateur 933 921 DO j = 1, klon 934 phy_sst(j, i) = 273. + 4. + 0.5 *27.*(2-sin(1.5*rlatd(j))**2-sin(1.5 &935 *rlatd(j))**4)922 phy_sst(j, i) = 273. + 4. + 0.5 * 27. * (2 - sin(1.5 * rlatd(j))**2 - sin(1.5 & 923 * rlatd(j))**4) 936 924 IF ((rlatd(j)>1.0471975) .OR. (rlatd(j)<-1.0471975)) THEN 937 925 phy_sst(j, i) = 273. + 4. … … 943 931 ! Méthode 13 "Qmax" plateau réel à l'Equateur augmenté ! 944 932 DO j = 1, klon 945 phy_sst(j, i) = 273. + 0.5 *29.*(2-sin(1.5*rlatd(j))**2-sin(1.5* &946 rlatd(j))**4)933 phy_sst(j, i) = 273. + 0.5 * 29. * (2 - sin(1.5 * rlatd(j))**2 - sin(1.5 * & 934 rlatd(j))**4) 947 935 IF ((rlatd(j)>1.0471975) .OR. (rlatd(j)<-1.0471975)) THEN 948 936 phy_sst(j, i) = 273. … … 954 942 ! Méthode 13 "Qmax2K" plateau réel à l'Equateur augmenté +2K ! 955 943 DO j = 1, klon 956 phy_sst(j, i) = 273. + 2. + 0.5 *29.*(2-sin(1.5*rlatd(j))**2-sin(1.5 &957 *rlatd(j))**4)944 phy_sst(j, i) = 273. + 2. + 0.5 * 29. * (2 - sin(1.5 * rlatd(j))**2 - sin(1.5 & 945 * rlatd(j))**4) 958 946 IF ((rlatd(j)>1.0471975) .OR. (rlatd(j)<-1.0471975)) THEN 959 947 phy_sst(j, i) = 273. … … 963 951 964 952 IF (type_profil==20) THEN 965 PRINT*,'Profile SST 20'966 ! Méthode 13 "Qmax2K" plateau réel é| l'Equateur augmenté +2K967 968 do j=1,klon969 phy_sst(j,i)=248.+55.*(1-sin(rlatd(j))**2)970 enddo953 PRINT*, 'Profile SST 20' 954 ! Méthode 13 "Qmax2K" plateau réel é| l'Equateur augmenté +2K 955 956 do j = 1, klon 957 phy_sst(j, i) = 248. + 55. * (1 - sin(rlatd(j))**2) 958 enddo 971 959 endif 972 960 973 961 IF (type_profil==21) THEN 974 PRINT*,'Profile SST 21'975 ! Méthode 13 "Qmax2K" plateau réel é| l'Equateur augmenté +2K976 do j=1,klon977 phy_sst(j,i)=252.+55.*(1-sin(rlatd(j))**2)978 enddo962 PRINT*, 'Profile SST 21' 963 ! Méthode 13 "Qmax2K" plateau réel é| l'Equateur augmenté +2K 964 do j = 1, klon 965 phy_sst(j, i) = 252. + 55. * (1 - sin(rlatd(j))**2) 966 enddo 979 967 endif 980 968 981 982 983 969 END DO 984 970 985 971 ! IM beg : verif profil SST: phy_sst 986 amn = min(phy_sst(1, 1), 1000.)987 amx = max(phy_sst(1, 1), -1000.)972 amn = min(phy_sst(1, 1), 1000.) 973 amx = max(phy_sst(1, 1), -1000.) 988 974 imn = 1 989 975 kmn = 1 … … 992 978 DO k = 1, year_len 993 979 DO i = 2, nlon 994 IF (phy_sst(i, k)<amn) THEN980 IF (phy_sst(i, k)<amn) THEN 995 981 amn = phy_sst(i, k) 996 982 imn = i 997 983 kmn = k 998 984 END IF 999 IF (phy_sst(i, k)>amx) THEN985 IF (phy_sst(i, k)>amx) THEN 1000 986 amx = phy_sst(i, k) 1001 987 imx = i … … 1009 995 ! IM end : verif profil SST: phy_sst 1010 996 1011 1012 997 END SUBROUTINE profil_sst 1013 998 -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/phyetat0_mod.F90
r5139 r5144 62 62 #endif 63 63 #endif 64 USE lmdz_yomcst 64 65 65 66 IMPLICIT NONE … … 69 70 !====================================================================== 70 71 include "dimsoil.h" 71 include "YOMCST.h"72 72 !====================================================================== 73 73 CHARACTER*(*) fichnom -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/physiq_mod.F90
r5143 r5144 424 424 USE lmdz_conema3 425 425 USE lmdz_dimpft, ONLY: nvm_lmdz 426 USE lmdz_ YOETHF426 USE lmdz_yoethf 427 427 USE lmdz_fcttre, ONLY: foeew, foede, qsats, qsatl, dqsats, dqsatl, thermcep 428 USE lmdz_yomcst 428 429 429 430 IMPLICIT NONE … … 1268 1269 REAL :: ro3i ! 0<=ro3i<=360 ; required time index in NetCDF file for 1269 1270 ! the ozone fields, old method. 1270 1271 include "YOMCST.h"1272 1271 1273 1272 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/reevap.F90
r5143 r5144 16 16 #endif 17 17 18 USE lmdz_ YOETHF18 USE lmdz_yoethf 19 19 USE lmdz_fcttre, ONLY: foeew, foede, qsats, qsatl, dqsats, dqsatl, thermcep 20 USE lmdz_yomcst 20 21 21 22 IMPLICIT NONE … … 32 33 33 34 !--------Stochastic Boundary Layer Triggering: ALE_BL-------- 34 !---Propri\'et\'es du thermiques au LCL35 include "YOMCST.h"36 !IM 100106 BEG : pouvoir sortir les ctes de la physique37 35 38 36 DO ixt=1,1+ntiso
Note: See TracChangeset
for help on using the changeset viewer.