Changeset 687 for LMDZ4/trunk
- Timestamp:
- Apr 4, 2006, 5:03:00 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/trunk/libf/phylmd/physiq.F
r678 r687 42 42 #define histmth 43 43 #define histins 44 #define histISCCP 45 #define histREGDYN 46 #define histmthNMC 44 c #define histISCCP 45 c #define histmthNMC 47 46 c====================================================================== 48 47 c modif ( P. Le Van , 12/10/98 ) … … 70 69 c d_q_dyn-input-R-tendance dynamique pour "q" (kg/kg/s) 71 70 c omega---input-R-vitesse verticale en Pa/s 72 c 71 cIM comgeomphy.h BEG 72 c cuphy----input-R-resolution des mailles en x (m) 73 c cvphy----input-R-resolution des mailles en y (m) 74 cIM comgeomphy.h END 73 75 c d_u-----output-R-tendance physique de "u" (m/s/s) 74 76 c d_v-----output-R-tendance physique de "v" (m/s/s) … … 125 127 cIM "slab" ocean 126 128 REAL tslab(klon) !Temperature du slab-ocean 127 SAVE tslab129 cIM SAVE tslab 128 130 REAL seaice(klon) !glace de mer (kg/m2) 129 SAVE seaice131 cIM SAVE seaice 130 132 REAL fluxo(klon) !flux turbulents ocean-glace de mer 131 133 REAL fluxg(klon) !flux turbulents ocean-atmosphere 132 c 134 cIM 135 REAL amn, amx 133 136 c====================================================================== 134 137 c Clef controlant l'activation du cycle diurne: … … 250 253 #include "raddim.h" 251 254 c 252 cIM 080304 REAL swdn0(klon,2), swdn(klon,2), swup0(klon,2), swup(klon,2)253 255 REAL swdn0(klon,klevp1), swdn(klon,klevp1) 254 256 REAL swup0(klon,klevp1), swup(klon,klevp1) … … 380 382 INTEGER imin_debut, nbpti 381 383 INTEGER jmin_debut, nbptj 382 c 383 REAL nbsunlit(nregISCtot,klon) !nbsunlit : moyenne de sunlit 384 INTEGER ncol, seed(klon) 385 384 cIM parametres ISCCP BEG 385 INTEGER nbapp_isccp,isccppas 386 INTEGER n, napisccp 387 c PARAMETER(napisccp=3) 388 PARAMETER(napisccp=1) 389 INTEGER ifreq_isccp(napisccp), freqin_pdt(napisccp) 390 DATA ifreq_isccp/3/ 391 SAVE ifreq_isccp 392 CHARACTER*5 typinout(napisccp) 393 DATA typinout/'i3od'/ 394 cIM verif boxptop BEG 395 CHARACTER*1 verticaxe(napisccp) 396 DATA verticaxe/'1'/ 397 cIM verif boxptop END 398 INTEGER nvlev(napisccp) 399 c INTEGER nvlev 400 REAL t1, aa 401 REAL seed_re(klon,napisccp) 402 INTEGER seed_old(klon,napisccp) 403 SAVE seed_old 404 INTEGER iphy(iim,jjmp1) 405 cIM parametres ISCCP END 406 c 386 407 c ncol = nb. de sous-colonnes pour chaque maille du GCM 387 c PARAMETER(ncol=100) 388 c PARAMETER(ncol=625) 389 c PARAMETER(ncol=10) 390 PARAMETER(ncol=25) 408 c ncolmx = No. max. de sous-colonnes pour chaque maille du GCM 409 INTEGER ncol(napisccp), ncolmx, seed(klon,napisccp) 410 REAL nbsunlit(nregISCtot,klon,napisccp) !nbsunlit : moyenne de sunlit 411 PARAMETER(ncolmx=1500) 412 c 413 cIM verif boxptop BEG 414 REAL vertlev(ncolmx,napisccp) 415 cIM verif boxptop END 416 c 391 417 REAL tautab(0:255) 392 418 INTEGER invtau(-20:45000) … … 413 439 REAL dem_sH2B(klon,klev) 414 440 REAL dem_cH2B(klon,klev) 415 416 c output from ISCCP simulator 417 REAL fq_isccp(klon,7,7) 418 REAL totalcldarea(klon) 419 REAL meanptop(klon) 420 REAL meantaucld(klon) 421 REAL boxtau(klon,ncol) 422 REAL boxptop(klon,ncol) 423 c 424 INTEGER l, kmax, lmax 425 PARAMETER(kmax=8, lmax=8) 441 c 442 INTEGER kmax, lmax, lmax3 443 PARAMETER(kmax=8, lmax=8, lmax3=3) 426 444 INTEGER kmaxm1, lmaxm1 427 445 PARAMETER(kmaxm1=kmax-1, lmaxm1=lmax-1) … … 430 448 .jjmp1x7=jjmp1*lmaxm1) 431 449 c 450 c output from ISCCP simulator 451 REAL fq_isccp(klon,kmaxm1,lmaxm1,napisccp) 452 REAL fq_is_true(klon,kmaxm1,lmaxm1,napisccp) 453 REAL totalcldarea(klon,napisccp) 454 REAL meanptop(klon,napisccp) 455 REAL meantaucld(klon,napisccp) 456 REAL boxtau(klon,ncolmx,napisccp) 457 REAL boxptop(klon,ncolmx,napisccp) 458 REAL zx_tmp_fi3d_bx(klon,ncolmx) 459 REAL zx_tmp_3d_bx(iim,jjmp1,ncolmx) 460 c 461 REAL cld_fi3d(klon,lmax3) 462 REAL cld_3d(iim,jjmp1,lmax3) 463 c 432 464 INTEGER iw, iwmax 433 465 REAL wmin, pas_w 434 466 c PARAMETER(wmin=-100.,pas_w=10.,iwmax=30) 435 PARAMETER(wmin=-200.,pas_w=10.,iwmax=40) 467 cIM 051005 PARAMETER(wmin=-200.,pas_w=10.,iwmax=40) 468 PARAMETER(wmin=-100.,pas_w=10.,iwmax=20) 436 469 REAL o500(klon) 437 470 c … … 440 473 INTEGER nreg, nbregdyn 441 474 PARAMETER(nbregdyn=5) 442 REAL histoW(kmaxm1,lmaxm1,iwmax,nbregdyn) 443 REAL nhistoW(kmaxm1,lmaxm1,iwmax,nbregdyn) 444 REAL nhistoWt(kmaxm1,lmaxm1,iwmax,nbregdyn) 445 SAVE nhistoWt 475 cIM 051005 BEG 476 c REAL histoW(iwmax,nbregdyn,napisccp) 477 c REAL nhistoW(iwmax,nbregdyn,napisccp) 478 c REAL histoWn(iwmax,nbregdyn) 479 c REAL nhistoWn(iwmax,nbregdyn) 480 cIM 090905 END 446 481 447 482 INTEGER linv 448 483 INTEGER pct_ocean(klon,nbregdyn) 484 SAVE pct_ocean 449 485 450 486 c sorties ISCCP … … 455 491 c save ok_isccp, ecrit_isccp, nid_isccp 456 492 save nid_isccp 457 cIM 090704 BEG458 INTEGER nbapp_isccp,isccppas459 493 460 494 #undef histISCCP … … 467 501 cIM 190504 #endif 468 502 469 c sorties statistiques regime dynamique470 c logical ok_regdyn471 c real ecrit_regdyn472 integer nid_regdyn473 c save ok_regdyn, ecrit_regdyn, nid_regdyn474 save nid_regdyn475 476 #undef histREGDYN477 #define histREGDYN478 cIM 190504 #ifdef histREGDYN479 c data ok_regdyn,ecrit_regdyn/.true.,0.125/480 c data ok_regdyn,ecrit_regdyn/.true.,1./481 cIM 190504 data ok_regdyn/.true./482 cIM 190504 #else483 cIM 190504 data ok_regdyn/.false./484 cIM 190504 #endif485 486 503 REAL zx_tau(kmaxm1), zx_pc(lmaxm1), zx_o500(iwmax) 487 504 DATA zx_tau/0.0, 0.3, 1.3, 3.6, 9.4, 23., 60./ 488 DATA zx_pc/50., 180., 310., 440., 560., 680., 800./ 505 cIM bad 151205 DATA zx_pc/50., 180., 310., 440., 560., 680., 800./ 506 DATA zx_pc/180., 310., 440., 560., 680., 800., 1000./ 489 507 490 508 c cldtopres pression au sommet des nuages 491 REAL cldtopres(lmaxm1) 492 DATA cldtopres/50., 180., 310., 440., 560., 680., 800./ 509 REAL cldtopres(lmaxm1), cldtopres3(lmax3) 510 cIM 151205 erreur DATA cldtopres/50., 180., 310., 440., 560., 680., 800./ 511 DATA cldtopres/180., 310., 440., 560., 680., 800., 1000./ 512 DATA cldtopres3/440., 680., 1000./ 513 cIM 051005 BEG 514 REAL tmp_his1_3d(iwmax,kmaxm1,lmaxm1,nbregdyn,napisccp) 515 REAL tmp_his2_3d(iwmax,kmaxm1,lmaxm1,nbregdyn,napisccp) 516 REAL tmp_his3_3d(iwmax,kmaxm1,lmaxm1,nbregdyn,napisccp) 517 cIM 051005 END 493 518 494 519 INTEGER komega, nhoriRD … … 503 528 c cnameisccp 504 529 CHARACTER *27 cnameisccp(lmaxm1,kmaxm1) 505 506 .'pc= 50-180hPa, tau< 0.3',530 cIM bad 151205 DATA cnameisccp/'pc< 50hPa, tau< 0.3', 531 DATA cnameisccp/'pc= 50-180hPa, tau< 0.3', 507 532 . 'pc= 180-310hPa, tau< 0.3', 508 533 . 'pc= 310-440hPa, tau< 0.3', … … 510 535 . 'pc= 560-680hPa, tau< 0.3', 511 536 . 'pc= 680-800hPa, tau< 0.3', 512 . 'pc < 50hPa, tau= 0.3-1.3',537 . 'pc= 800-1000hPa, tau< 0.3', 513 538 . 'pc= 50-180hPa, tau= 0.3-1.3', 514 539 . 'pc= 180-310hPa, tau= 0.3-1.3', … … 517 542 . 'pc= 560-680hPa, tau= 0.3-1.3', 518 543 . 'pc= 680-800hPa, tau= 0.3-1.3', 519 . 'pc < 50hPa, tau= 1.3-3.6',544 . 'pc= 800-1000hPa, tau= 0.3-1.3', 520 545 . 'pc= 50-180hPa, tau= 1.3-3.6', 521 546 . 'pc= 180-310hPa, tau= 1.3-3.6', … … 524 549 . 'pc= 560-680hPa, tau= 1.3-3.6', 525 550 . 'pc= 680-800hPa, tau= 1.3-3.6', 526 . 'pc < 50hPa, tau= 3.6-9.4',551 . 'pc= 800-1000hPa, tau= 1.3-3.6', 527 552 . 'pc= 50-180hPa, tau= 3.6-9.4', 528 553 . 'pc= 180-310hPa, tau= 3.6-9.4', … … 531 556 . 'pc= 560-680hPa, tau= 3.6-9.4', 532 557 . 'pc= 680-800hPa, tau= 3.6-9.4', 533 . 'pc < 50hPa, tau= 9.4-23',558 . 'pc= 800-1000hPa, tau= 3.6-9.4', 534 559 . 'pc= 50-180hPa, tau= 9.4-23', 535 560 . 'pc= 180-310hPa, tau= 9.4-23', … … 538 563 . 'pc= 560-680hPa, tau= 9.4-23', 539 564 . 'pc= 680-800hPa, tau= 9.4-23', 540 . 'pc < 50hPa, tau= 23-60',565 . 'pc= 800-1000hPa, tau= 9.4-23', 541 566 . 'pc= 50-180hPa, tau= 23-60', 542 567 . 'pc= 180-310hPa, tau= 23-60', … … 545 570 . 'pc= 560-680hPa, tau= 23-60', 546 571 . 'pc= 680-800hPa, tau= 23-60', 547 . 'pc < 50hPa, tau> 60.',572 . 'pc= 800-1000hPa, tau= 23-60', 548 573 . 'pc= 50-180hPa, tau> 60.', 549 574 . 'pc= 180-310hPa, tau> 60.', … … 551 576 . 'pc= 440-560hPa, tau> 60.', 552 577 . 'pc= 560-680hPa, tau> 60.', 553 . 'pc= 680-800hPa, tau> 60.'/ 578 . 'pc= 680-800hPa, tau> 60.', 579 . 'pc= 800-1000hPa, tau> 60.'/ 554 580 c 555 581 c REAL zx_lonx7(iimx7), zx_latx7(jjmp1x7) … … 562 588 c 563 589 logical ok_hf 564 cIM200505 integer ecrit_hf565 cIM200505 integer ecrit_hf2mth566 cIM200505 save ecrit_hf2mth567 590 c 568 591 integer nid_hf, nid_hf3d 569 cIM200505 save ok_hf, ecrit_hf, nid_hf, nid_hf3d570 592 save ok_hf, nid_hf, nid_hf3d 571 593 572 594 c QUESTION : noms de variables ? 573 595 596 #undef histhf 597 #define histhf 574 598 #ifdef histhf 575 599 cIM 130904 data ok_hf,ecrit_hf/.true.,0.25/ … … 623 647 REAL ftsol(klon,nbsrf) 624 648 SAVE ftsol ! temperature du sol 649 cIM 650 REAL newsst(klon) !temperature de l'ocean 651 SAVE newsst 625 652 c 626 653 REAL ftsoil(klon,nsoilmx,nbsrf) … … 778 805 cym 779 806 REAL bils(klon) ! bilan de chaleur au sol 807 REAL wfbilo(klon,nbsrf) ! bilan d'eau, pour chaque 808 C ! type de sous-surface et pondere par la fraction 780 809 REAL wfbils(klon,nbsrf) ! bilan de chaleur au sol, pour chaque 781 810 C ! type de sous-surface et pondere par la fraction … … 810 839 REAL wo(klon,klev) 811 840 SAVE wo ! ozone 841 cIM sorties 842 REAL un_jour 843 PARAMETER(un_jour=86400.) 812 844 c====================================================================== 813 845 c … … 924 956 REAL zx_t, zx_qs, zdelta, zcor, zfra, zlvdcp, zlsdcp 925 957 real zqsat(klon,klev) 926 INTEGER i, k, iq, ig, j, nsrf, ll, iiq958 INTEGER i, k, iq, ig, j, nsrf, ll, l, iiq 927 959 REAL t_coup 928 960 PARAMETER (t_coup=234.0) … … 1050 1082 c 1051 1083 c====================================================================== 1052 cIM200505 INTEGER ecrit_mth1053 cIM200505 SAVE ecrit_mth ! frequence d'ecriture (fichier mensuel)1054 1084 c 1055 1085 cIM cf. AM 081204 BEG … … 1068 1098 1069 1099 c 1070 cIM200505 INTEGER ecrit_day1071 cIM200505 SAVE ecrit_day ! frequence d'ecriture (fichier journalier)1072 c1073 cIM200505 INTEGER ecrit_ins1074 cIM200505 SAVE ecrit_ins ! frequence d'ecriture (fichier instantane)1075 c1076 cIM200505 INTEGER ecrit_reg1077 cIM200505 SAVE ecrit_reg ! frequence d'ecriture1078 c1079 1100 integer itau_w ! pas de temps ecriture = itap + itau_phy 1080 1101 c … … 1090 1111 1091 1112 REAL zx_rh(klon,klev) 1113 cIM RH a 2m (la surface) 1114 REAL rh2m(klon), qsat2m(klon) 1115 REAL zx_rh2m(klon,nbsrf), zx_qsat2m(klon,nbsrf) 1116 REAL zx_qs1(klon,nbsrf), zx_t1(klon,nbsrf), zdelta1(klon,nbsrf) 1117 REAL zcor1(klon,nbsrf) 1118 REAL tpot(klon), tpote(klon) 1119 REAL Lheat 1092 1120 1093 1121 INTEGER length … … 1096 1124 c 1097 1125 INTEGER ndex2d(iim*jjmp1),ndex3d(iim*jjmp1*klev) 1126 cIM 1127 INTEGER ndex2d1(iwmax) 1098 1128 c 1099 1129 cIM AMIP2 BEG … … 1127 1157 c 1128 1158 INTEGER nid_day, nid_mth, nid_ins, nid_nmc, nid_day_seri 1159 INTEGER nid_ctesGCM 1129 1160 SAVE nid_day, nid_mth, nid_ins, nid_nmc, nid_day_seri 1161 SAVE nid_ctesGCM 1130 1162 c 1131 1163 cIM 280405 BEG … … 1140 1172 cIM 280405 END 1141 1173 c 1142 INTEGER nhori, nvert, nvert1 1143 c REAL zstok 1144 REAL zsto, zout, zsto1, zsto2 1145 c REAL zstoave, zstoin 1146 REAL zstophy, zstorad, zstohf, zstoday, zstomth 1174 INTEGER nhori, nvert, nvert1, nvert3 1175 REAL zsto, zsto1, zsto2 1176 REAL zstophy, zstorad, zstohf, zstoday, zstomth, zout 1177 REAL zcals(napisccp), zcalh(napisccp), zoutj(napisccp) 1178 REAL zout_isccp(napisccp) 1179 SAVE zcals, zcalh, zoutj, zout_isccp 1180 1147 1181 real zjulian 1148 1182 save zjulian … … 1176 1210 REAL zero_v(klon) 1177 1211 CHARACTER*15 ztit 1178 INTEGER ip_ebil ! PRINT level for energy conserv. diag. 1179 SAVE ip_ebil 1180 DATA ip_ebil/0/ 1181 INTEGER if_ebil ! level for energy conserv. dignostics 1182 SAVE if_ebil 1212 1183 1213 c+jld ec_conser 1184 1214 REAL d_t_ec(klon,klev) ! tendance du a la conersion Ec -> E thermique … … 1245 1275 SAVE clwcon0 1246 1276 SAVE paire_ter 1247 1248 1277 c SAVE nhistoW 1278 c SAVE histoW 1249 1279 c SAVE anne 20/09/2005 1250 1280 SAVE pblh … … 1267 1297 #include "YOETHF.h" 1268 1298 #include "FCTTRE.h" 1299 cIM 100106 BEG : pouvoir sortir les ctes de la physique 1300 #include "conema3.h" 1301 #include "fisrtilp.h" 1302 #include "nuage.h" 1303 #include "compbl.h" 1304 cIM 100106 END : pouvoir sortir les ctes de la physique 1305 c 1269 1306 c====================================================================== 1270 1307 modname = 'physiq' 1271 IF (if_ebil.ge.1) THEN 1308 cIM 1309 IF (ip_ebil_phy.ge.1) THEN 1272 1310 DO i=1,klon 1273 1311 zero_v(i)=0. … … 1319 1357 clwcon(:,:) = 0.0 1320 1358 paire_ter(:) = 0.0 1321 1322 1359 c nhistoW(:,:,:,:) = 0.0 1360 c histoW(:,:,:,:) = 0.0 1323 1361 ! fin anne 1324 1362 ! Anne 12/09/2005 … … 1339 1377 wfbils(:,:)=0 1340 1378 cym 1341 IF (if_ebil.ge.1) d_h_vcol_phy=0. 1379 cIM 1380 IF (ip_ebil_phy.ge.1) d_h_vcol_phy=0. 1342 1381 c 1343 1382 c appel a la lecture du run.def physique … … 1345 1384 call conf_phys(ocean, ok_veget, ok_journe, ok_mensuel, 1346 1385 . ok_instan, fact_cldcon, facttemps,ok_newmicro, 1347 . iflag_cldcon,ratqsbas,ratqshaut, if_ebil, 1386 cIM . iflag_cldcon,ratqsbas,ratqshaut, if_ebil, 1387 . iflag_cldcon,ratqsbas,ratqshaut, 1348 1388 . ok_ade, ok_aie, 1349 1389 . bl95_b0, bl95_b1, … … 1363 1403 . ocean, tslab,seaice, 1364 1404 . fqsurf,qsol,fsnow, 1365 . falbe, falblw, fevap, rain_fall,snow_fall,solsw, sollwdown, 1405 cIM 220306 . falbe, falblw, fevap, rain_fall,snow_fall,solsw, sollwdown, 1406 . falbe, falblw, fevap, rain_fall,snow_fall,solsw, sollw, 1366 1407 . dlw,radsol,frugs,agesno,clesphy0, 1367 1408 . zmea,zstd,zsig,zgam,zthe,zpic,zval,rugoro,tabcntr0, … … 1425 1466 1426 1467 WRITE(lunout,*)"*** Convection de Kerry Emanuel 4.3 " 1468 WRITE(lunout,*) 1469 . "On va utiliser le melange convectif des traceurs qui" 1470 WRITE(lunout,*)"est calcule dans convect4.3" 1471 WRITE(lunout,*)" !!! penser aux logical flags de phytrac" 1427 1472 1428 1473 DO i = 1, klon … … 1500 1545 cIM200505 . ecrit_reg 1501 1546 cIM200505 ENDIF 1502 c 1503 cIM 230505 BEG 1504 ecrit_ins = NINT(ecrit_ins/dtime) 1505 ecrit_hf = NINT(ecrit_hf/dtime) 1506 c ecrit_hf2mth = 4*30 1507 ecrit_day = NINT(ecrit_day/dtime) 1508 ecrit_mth = NINT(ecrit_mth/dtime) 1509 ecrit_tra = NINT(86400.*ecrit_tra/dtime) 1510 ecrit_reg = NINT(ecrit_reg/dtime) 1511 cIM 230505 END 1547 cIM 030306 BEG 1548 cIM ecrit_hf2mth = nombre de pas de temps de calcul de hf par mois apres lequel on ecrit 1549 cIM : ne pas modifier ecrit_hf2mth 1550 c 1551 ecrit_hf2mth = 30*1/ecrit_hf 1552 c ecrit_ins, ecrit_tra en secondes, chaque pas de temps de la physique 1553 ecrit_ins = dtime 1554 ecrit_tra = dtime 1555 cIM on passe les frequences de jours en secondes : ecrit_ins, ecrit_hf, ecrit_day, ecrit_mth, ecrit_tra, ecrit_reg 1556 ecrit_hf = ecrit_hf * un_jour 1557 ecrit_day = ecrit_day * un_jour 1558 ecrit_mth = ecrit_mth * un_jour 1559 ecrit_reg = ecrit_reg * un_jour 1560 cIM 030306 END 1512 1561 c 1513 1562 c Initialiser le couplage si necessaire … … 1548 1597 c#include "ini_bilKP_ins.h" 1549 1598 c#include "ini_bilKP_ave.h" 1550 #include "ini_histday_seri.h"1551 1599 #endif 1552 1600 … … 1563 1611 #endif 1564 1612 1613 #undef histmthNMC 1614 #define histmthNMC 1565 1615 #ifdef histmthNMC 1566 1616 #include "ini_histmthNMC.h" 1567 1617 #endif 1568 1618 1569 #ifdef histREGDYN 1570 #include "ini_histREGDYN.h" 1571 #endif 1572 1573 c#undef histmthNMC 1574 c#define histmthNMC 1575 #ifdef histmthNMC 1576 #include "ini_histmthNMC.h" 1577 #endif 1619 #include "ini_histday_seri.h" 1620 1621 #include "ini_paramLMDZ_phy.h" 1578 1622 1579 1623 #endif … … 1684 1728 ENDDO 1685 1729 ENDDO 1686 C 1687 IF (i f_ebil.ge.1) THEN1730 cIM 1731 IF (ip_ebil_phy.ge.1) THEN 1688 1732 ztit='after dynamic' 1689 CALL diagetpq(airephy,ztit,ip_ebil ,1,1,dtime1733 CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime 1690 1734 e , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay 1691 1735 s , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec) … … 1694 1738 C est egale a la variation de la physique au pas de temps precedent. 1695 1739 C Donc la somme de ces 2 variations devrait etre nulle. 1696 call diagphy(airephy,ztit,ip_ebil 1740 call diagphy(airephy,ztit,ip_ebil_phy 1697 1741 e , zero_v, zero_v, zero_v, zero_v, zero_v 1698 1742 e , zero_v, zero_v, zero_v, ztsol … … 1730 1774 c Verifier les temperatures 1731 1775 c 1776 cIM BEG 1777 IF (check) THEN 1778 amn=MIN(ftsol(1,is_ter),1000.) 1779 amx=MAX(ftsol(1,is_ter),-1000.) 1780 DO i=2, klon 1781 amn=MIN(ftsol(i,is_ter),amn) 1782 amx=MAX(ftsol(i,is_ter),amx) 1783 ENDDO 1784 c 1785 PRINT*,' debut avant hgardfou min max ftsol',itap,amn,amx 1786 ENDIF !(check) THEN 1787 cIM END 1788 c 1732 1789 CALL hgardfou(t_seri,ftsol,'debutphy') 1790 c 1791 cIM BEG 1792 IF (check) THEN 1793 amn=MIN(ftsol(1,is_ter),1000.) 1794 amx=MAX(ftsol(1,is_ter),-1000.) 1795 DO i=2, klon 1796 amn=MIN(ftsol(i,is_ter),amn) 1797 amx=MAX(ftsol(i,is_ter),amx) 1798 ENDDO 1799 c 1800 PRINT*,' debut apres hgardfou min max ftsol',itap,amn,amx 1801 ENDIF !(check) THEN 1802 cIM END 1733 1803 c 1734 1804 c Incrementer le compteur de la physique … … 1764 1834 ENDDO 1765 1835 ENDDO 1766 c 1767 IF (i f_ebil.ge.2) THEN1836 cIM 1837 IF (ip_ebil_phy.ge.2) THEN 1768 1838 ztit='after reevap' 1769 CALL diagetpq(airephy,ztit,ip_ebil ,2,1,dtime1839 CALL diagetpq(airephy,ztit,ip_ebil_phy,2,1,dtime 1770 1840 e , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay 1771 1841 s , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec) 1772 call diagphy(airephy,ztit,ip_ebil 1842 call diagphy(airephy,ztit,ip_ebil_phy 1773 1843 e , zero_v, zero_v, zero_v, zero_v, zero_v 1774 1844 e , zero_v, zero_v, zero_v, ztsol … … 1839 1909 fder = dlw 1840 1910 1911 IF (check) THEN 1912 amn=MIN(tslab(1),1000.) 1913 amx=MAX(tslab(1),-1000.) 1914 DO i=2, klon 1915 amn=MIN(tslab(i),amn) 1916 amx=MAX(tslab(i),amx) 1917 ENDDO 1918 c 1919 PRINT*,' debut avant clqh min max tslab',amn,amx 1920 ENDIF !(check) THEN 1921 c 1841 1922 CALL clmain(dtime,itap,date0,pctsrf,pctsrf_new, 1842 1923 e t_seri,q_seri,u_seri,v_seri, … … 1857 1938 s dsens, devap, 1858 1939 s ycoefh,yu1,yv1, t2m, q2m, u10m, v10m, 1859 cIM cf. AM 081204 BEG1860 1940 s pblh,capCL,oliqCL,cteiCL,pblT, 1861 1941 s therm,trmb1,trmb2,trmb3,plcl, 1862 cIM cf. AM 081204 END1863 1942 s fqcalving, ffonte, run_off_lic_0, 1864 1943 cIM "slab" ocean … … 1903 1982 ENDDO 1904 1983 ENDDO 1905 c 1906 IF (i f_ebil.ge.2) THEN1984 cIM 1985 IF (ip_ebil_phy.ge.2) THEN 1907 1986 ztit='after clmain' 1908 CALL diagetpq(airephy,ztit,ip_ebil ,2,2,dtime1987 CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime 1909 1988 e , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay 1910 1989 s , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec) 1911 call diagphy(airephy,ztit,ip_ebil 1990 call diagphy(airephy,ztit,ip_ebil_phy 1912 1991 e , zero_v, zero_v, zero_v, zero_v, sens 1913 1992 e , evap , zero_v, zero_v, ztsol … … 1957 2036 wfbils(i,nsrf) = ( fsolsw(i,nsrf) + fsollw(i,nsrf) 1958 2037 $ + fluxt(i,1,nsrf) + fluxlat(i,nsrf) ) * pctsrf(i,nsrf) 2038 cIM 2039 wfbilo(i,nsrf) = ( fevap(i,nsrf) - 2040 $ (rain_fall(i) + snow_fall(i)) ) * pctsrf(i,nsrf) 1959 2041 zxtsol(i) = zxtsol(i) + ftsol(i,nsrf)*pctsrf(i,nsrf) 1960 2042 zxfluxlat(i) = zxfluxlat(i) + fluxlat(i,nsrf)*pctsrf(i,nsrf) … … 1983 2065 ENDDO 1984 2066 2067 IF (check) THEN 2068 amn=MIN(ftsol(1,is_ter),1000.) 2069 amx=MAX(ftsol(1,is_ter),-1000.) 2070 DO i=2, klon 2071 amn=MIN(ftsol(i,is_ter),amn) 2072 amx=MAX(ftsol(i,is_ter),amx) 2073 ENDDO 2074 c 2075 PRINT*,' debut apres d_ts min max ftsol',itap,amn,amx 2076 ENDIF !(check) THEN 1985 2077 c 1986 2078 c Si une sous-fraction n'existe pas, elle prend la temp. moyenne … … 1988 2080 DO nsrf = 1, nbsrf 1989 2081 DO i = 1, klon 1990 IF (pctsrf(i,nsrf) .LT. epsfra) ftsol(i,nsrf) = zxtsol(i) 1991 cccIM 1992 IF (pctsrf(i,nsrf) .LT. epsfra) t2m(i,nsrf) = zt2m(i) 1993 IF (pctsrf(i,nsrf) .LT. epsfra) q2m(i,nsrf) = zq2m(i) 1994 IF (pctsrf(i,nsrf) .LT. epsfra) u10m(i,nsrf) = zu10m(i) 1995 IF (pctsrf(i,nsrf) .LT. epsfra) v10m(i,nsrf) = zv10m(i) 1996 cIM cf JLD ?? 1997 IF (pctsrf(i,nsrf) .LT. epsfra) ffonte(i,nsrf) = zxffonte(i) 1998 IF (pctsrf(i,nsrf) .LT. epsfra) 1999 . fqcalving(i,nsrf) = zxfqcalving(i) 2000 cIM cf. AM 081204 BEG 2001 IF (pctsrf(i,nsrf) .LT. epsfra) pblh(i,nsrf)=s_pblh(i) 2002 IF (pctsrf(i,nsrf) .LT. epsfra) plcl(i,nsrf)=s_lcl(i) 2003 IF (pctsrf(i,nsrf) .LT. epsfra) capCL(i,nsrf)=s_capCL(i) 2004 IF (pctsrf(i,nsrf) .LT. epsfra) oliqCL(i,nsrf)=s_oliqCL(i) 2005 IF (pctsrf(i,nsrf) .LT. epsfra) cteiCL(i,nsrf)=s_cteiCL(i) 2006 IF (pctsrf(i,nsrf) .LT. epsfra) pblT(i,nsrf)=s_pblT(i) 2007 IF (pctsrf(i,nsrf) .LT. epsfra) therm(i,nsrf)=s_therm(i) 2008 IF (pctsrf(i,nsrf) .LT. epsfra) trmb1(i,nsrf)=s_trmb1(i) 2009 IF (pctsrf(i,nsrf) .LT. epsfra) trmb2(i,nsrf)=s_trmb2(i) 2010 IF (pctsrf(i,nsrf) .LT. epsfra) trmb3(i,nsrf)=s_trmb3(i) 2082 IF (pctsrf(i,nsrf) .LT. epsfra.OR.t2m(i,nsrf).EQ.0.) THEN 2083 ftsol(i,nsrf) = zxtsol(i) 2084 t2m(i,nsrf) = zt2m(i) 2085 q2m(i,nsrf) = zq2m(i) 2086 u10m(i,nsrf) = zu10m(i) 2087 v10m(i,nsrf) = zv10m(i) 2088 ffonte(i,nsrf) = zxffonte(i) 2089 fqcalving(i,nsrf) = zxfqcalving(i) 2090 pblh(i,nsrf)=s_pblh(i) 2091 plcl(i,nsrf)=s_lcl(i) 2092 capCL(i,nsrf)=s_capCL(i) 2093 oliqCL(i,nsrf)=s_oliqCL(i) 2094 cteiCL(i,nsrf)=s_cteiCL(i) 2095 pblT(i,nsrf)=s_pblT(i) 2096 therm(i,nsrf)=s_therm(i) 2097 trmb1(i,nsrf)=s_trmb1(i) 2098 trmb2(i,nsrf)=s_trmb2(i) 2099 trmb3(i,nsrf)=s_trmb3(i) 2100 ENDIF 2011 2101 ENDDO 2012 2102 ENDDO 2013 c2014 2103 c 2015 2104 c Calculer la derive du flux infrarouge … … 2174 2263 ENDDO 2175 2264 ENDDO 2176 c 2177 IF (i f_ebil.ge.2) THEN2265 cIM 2266 IF (ip_ebil_phy.ge.2) THEN 2178 2267 ztit='after convect' 2179 CALL diagetpq(airephy,ztit,ip_ebil ,2,2,dtime2268 CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime 2180 2269 e , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay 2181 2270 s , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec) 2182 call diagphy(airephy,ztit,ip_ebil 2271 call diagphy(airephy,ztit,ip_ebil_phy 2183 2272 e , zero_v, zero_v, zero_v, zero_v, zero_v 2184 2273 e , zero_v, rain_con, snow_con, ztsol … … 2264 2353 c 2265 2354 c=================================================================== 2266 c 2267 IF (i f_ebil.ge.2) THEN2355 cIM 2356 IF (ip_ebil_phy.ge.2) THEN 2268 2357 ztit='after dry_adjust' 2269 CALL diagetpq(airephy,ztit,ip_ebil ,2,2,dtime2358 CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime 2270 2359 e , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay 2271 2360 s , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec) … … 2362 2451 WRITE(lunout,*)"Precip=", zx_t 2363 2452 ENDIF 2364 c 2365 IF (i f_ebil.ge.2) THEN2453 cIM 2454 IF (ip_ebil_phy.ge.2) THEN 2366 2455 ztit='after fisrt' 2367 CALL diagetpq(airephy,ztit,ip_ebil ,2,2,dtime2456 CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime 2368 2457 e , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay 2369 2458 s , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec) 2370 call diagphy(airephy,ztit,ip_ebil 2459 call diagphy(airephy,ztit,ip_ebil_phy 2371 2460 e , zero_v, zero_v, zero_v, zero_v, zero_v 2372 2461 e , zero_v, rain_lsc, snow_lsc, ztsol … … 2471 2560 snow_fall(i) = snow_con(i) + snow_lsc(i) 2472 2561 ENDDO 2473 c 2474 IF (i f_ebil.ge.2) THEN2562 cIM 2563 IF (ip_ebil_phy.ge.2) THEN 2475 2564 ztit="after diagcld" 2476 CALL diagetpq(airephy,ztit,ip_ebil ,2,2,dtime2565 CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime 2477 2566 e , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay 2478 2567 s , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec) … … 2501 2590 ENDDO 2502 2591 ENDDO 2592 c 2593 cIM Calculer l'humidite relative a 2m (rh2m) pour diagnostique 2594 cIM ajout dependance type surface 2595 DO i = 1, klon 2596 rh2m(i)=0. 2597 qsat2m(i)=0. 2598 DO nsrf=1, nbsrf 2599 zx_t1(i,nsrf) = t2m(i,nsrf) 2600 IF (thermcep) THEN 2601 zdelta1(i,nsrf) = MAX(0.,SIGN(1.,rtt-zx_t1(i,nsrf))) 2602 zx_qs1(i,nsrf) = r2es * 2603 $ FOEEW(zx_t1(i,nsrf),zdelta1(i,nsrf))/paprs(i,1) 2604 zx_qs1(i,nsrf) = MIN(0.5,zx_qs1(i,nsrf)) 2605 zcor1(i,nsrf) = 1./(1.-retv*zx_qs1(i,nsrf)) 2606 zx_qs1(i,nsrf) = zx_qs1(i,nsrf)*zcor1(i,nsrf) 2607 ELSE 2608 c 2609 IF (zx_t.LT.RTT) THEN 2610 zx_qs = qsats(zx_t)/paprs(i,1) 2611 ELSE 2612 zx_qs = qsatl(zx_t)/paprs(i,1) 2613 ENDIF 2614 ENDIF 2615 zx_rh2m(i,nsrf) = q2m(i,nsrf)/zx_qs1(i,nsrf) 2616 zx_qsat2m(i,nsrf)=zx_qs1(i,nsrf) 2617 rh2m(i) = rh2m(i)+zx_rh2m(i,nsrf)*pctsrf(i,nsrf) 2618 qsat2m(i)=qsat2m(i)+zx_qsat2m(i,nsrf)*pctsrf(i,nsrf) 2619 ENDDO !nsrf 2620 ENDDO 2621 c 2622 cIM Calcul temp.potentielle a 2m (tpot) et temp. potentielle 2623 c equivalente a 2m (tpote) pour diagnostique 2624 c 2625 DO i = 1, klon 2626 tpot(i)=zt2m(i)*(100000./paprs(i,1))**RKAPPA 2627 IF (thermcep) THEN 2628 IF(zt2m(i).LT.RTT) then 2629 Lheat=RLSTT 2630 ELSE 2631 Lheat=RLVTT 2632 ENDIF 2633 ELSE 2634 IF (zt2m(i).LT.RTT) THEN 2635 Lheat=RLSTT 2636 ELSE 2637 Lheat=RLVTT 2638 ENDIF 2639 ENDIF 2640 tpote(i) = tpot(i)* 2641 . EXP((Lheat *qsat2m(i))/(RCPD*zt2m(i))) 2642 ENDDO 2643 c 2503 2644 cjq - introduce the aerosol direct and first indirect radiative forcings 2504 2645 cjq - Johannes Quaas, 27/11/2003 (quaas@lmd.jussieu.fr) … … 2643 2784 ENDDO 2644 2785 ENDDO 2645 c 2646 IF (i f_ebil.ge.2) THEN2786 cIM 2787 IF (ip_ebil_phy.ge.2) THEN 2647 2788 ztit='after rad' 2648 CALL diagetpq(airephy,ztit,ip_ebil ,2,2,dtime2789 CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime 2649 2790 e , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay 2650 2791 s , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec) 2651 call diagphy(airephy,ztit,ip_ebil 2792 call diagphy(airephy,ztit,ip_ebil_phy 2652 2793 e , topsw, toplw, solsw, sollw, zero_v 2653 2794 e , zero_v, zero_v, zero_v, ztsol … … 2788 2929 C aam, torsfc) 2789 2930 cIM cf. FLott END 2790 c 2791 IF (i f_ebil.ge.2) THEN2931 cIM 2932 IF (ip_ebil_phy.ge.2) THEN 2792 2933 ztit='after orography' 2793 CALL diagetpq(airephy,ztit,ip_ebil ,2,2,dtime2934 CALL diagetpq(airephy,ztit,ip_ebil_phy,2,2,dtime 2794 2935 e , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay 2795 2936 s , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec) … … 2883 3024 s ve, vq, ue, uq) 2884 3025 c 2885 cIM diag. bilKP 3026 cIM global posePB BEG 3027 IF(1.EQ.0) THEN 2886 3028 c 2887 3029 CALL transp_lay (paprs,zxtsol, … … 2889 3031 s ve_lay, vq_lay, ue_lay, uq_lay) 2890 3032 c 3033 ENDIF !(1.EQ.0) THEN 3034 cIM global posePB END 2891 3035 c Accumuler les variables a stocker dans les fichiers histoire: 2892 3036 c … … 2902 3046 END DO 2903 3047 c-jld ec_conser 2904 IF (if_ebil.ge.1) THEN 3048 cIM 3049 IF (ip_ebil_phy.ge.1) THEN 2905 3050 ztit='after physic' 2906 CALL diagetpq(airephy,ztit,ip_ebil ,1,1,dtime3051 CALL diagetpq(airephy,ztit,ip_ebil_phy,1,1,dtime 2907 3052 e , t_seri,q_seri,ql_seri,qs_seri,u_seri,v_seri,paprs,pplay 2908 3053 s , d_h_vcol, d_qt, d_qw, d_ql, d_qs, d_ec) … … 2911 3056 C est egale a la variation de la physique au pas de temps precedent. 2912 3057 C Donc la somme de ces 2 variations devrait etre nulle. 2913 call diagphy(airephy,ztit,ip_ebil 3058 call diagphy(airephy,ztit,ip_ebil_phy 2914 3059 e , topsw, toplw, solsw, sollw, sens 2915 3060 e , evap, rain_fall, snow_fall, ztsol … … 3001 3146 c 3002 3147 cIM rajout diagnostiques bilan KP pour analyse MJO par Jun-Ichi Yano 3003 c #include "write_bilKP_ins.h"3004 c #include "write_bilKP_ave.h"3148 cIM global posePB#include "write_bilKP_ins.h" 3149 cIM global posePB#include "write_bilKP_ave.h" 3005 3150 c 3006 3151 c Sauvegarder les valeurs de t et q a la fin de la physique: … … 3025 3170 #ifdef histday 3026 3171 #include "write_histday.h" 3027 #include "write_histday_seri.h"3028 3172 #endif 3029 3173 … … 3036 3180 #endif 3037 3181 3038 #ifdef histREGDYN3039 #include "write_histREGDYN.h"3040 #endif3041 3042 3182 #ifdef histISCCP 3043 3183 #include "write_histISCCP.h" 3044 3184 #endif 3045 3185 3046 3047 3186 #ifdef histmthNMC 3048 3187 #include "write_histmthNMC.h" 3049 3188 #endif 3189 3190 #include "write_histday_seri.h" 3191 3192 #include "write_paramLMDZ_phy.h" 3050 3193 3051 3194 #endif … … 3066 3209 . fqsurf, qsol, 3067 3210 . fsnow, falbe,falblw, fevap, rain_fall, snow_fall, 3068 . solsw, sollwdown,dlw, 3211 cIM . solsw, sollwdown,dlw, 3212 . solsw, sollw,dlw, 3069 3213 . radsol,frugs,agesno, 3070 3214 . zmea,zstd,zsig,zgam,zthe,zpic,zval,rugoro,
Note: See TracChangeset
for help on using the changeset viewer.