Changeset 3756 for LMDZ6/trunk
- Timestamp:
- Jul 10, 2020, 11:50:17 PM (4 years ago)
- Location:
- LMDZ6/trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/DefLists/field_def_lmdz.xml
r3702 r3756 142 142 <field id="SWdnSFCclr" long_name="SWdn clear sky at surface" unit="W/m2" /> 143 143 <field id="SWdnSFCcleanclr" long_name="SWdn clean (no aerosol) clear sky at surface" unit="W/m2" /> 144 <field id="fdiffSWdnSFC" long_name="Fraction of diffuse SWdn at surface" unit="-" /> 144 145 <field id="LWupSFC" long_name="Upwd. IR rad. at surface" unit="W/m2" /> 145 146 <field id="LWupSFCclr" long_name="CS Upwd. IR rad. at surface" unit="W/m2" /> -
LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90
r3435 r3756 164 164 rlon, rlat, rugoro, rmu0, & 165 165 zsig, lwdown_m, pphi, cldt, & 166 rain_f, snow_f, solsw_m, sol lw_m, &166 rain_f, snow_f, solsw_m, solswfdiff_m, sollw_m, & 167 167 gustiness, & 168 168 t, q, u, v, & … … 318 318 REAL, DIMENSION(klon), INTENT(IN) :: snow_f ! snow fall 319 319 REAL, DIMENSION(klon), INTENT(IN) :: solsw_m ! net shortwave radiation at mean surface 320 REAL, DIMENSION(klon), INTENT(IN) :: solswfdiff_m ! diffuse fraction fordownward shortwave radiation at mean surface 320 321 REAL, DIMENSION(klon), INTENT(IN) :: sollw_m ! net longwave radiation at mean surface 321 322 REAL, DIMENSION(klon,klev), INTENT(IN) :: t ! temperature (K) … … 453 454 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxu ! u wind tension, mean for each grid point 454 455 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxv ! v wind tension, mean for each grid point 455 REAL, DIMENSION(klon, nbsrf+1), INTENT(INOUT) 456 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) 456 REAL, DIMENSION(klon, nbsrf+1), INTENT(INOUT) :: z0m,z0h ! rugosity length (m) 457 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: agesno ! age of snow at surface 457 458 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: solsw ! net shortwave radiation at surface 458 459 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: sollw ! net longwave radiation at surface 459 460 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: d_ts ! change in temperature at surface 460 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) 461 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface 461 462 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: fluxlat ! latent flux 462 463 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: t2m ! temperature at 2 meter height … … 965 966 yqsurf = 0.0 ; yalb = 0.0 ; yalb_vis = 0.0 966 967 !albedo SB <<< 967 yrain_f = 0.0 ; ysnow_f = 0.0 ; yfder = 0.0 ; ysolsw = 0.0 968 yrain_f = 0.0 ; ysnow_f = 0.0 ; yfder = 0.0 ; ysolsw = 0.0 968 969 ysollw = 0.0 ; yz0m = 0.0 ; yz0h = 0.0 ; yu1 = 0.0 969 970 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 … … 1183 1184 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1184 1185 1186 !--OB this line is not satisfactory because alb is the direct albedo not total albedo 1185 1187 solsw(i,nsrf) = solsw_m(i) * (1.-alb(i,nsrf)) / (1.-alb_m(i)) 1186 1188 ENDDO … … 1205 1207 !>al1 1206 1208 1209 !--OB add diffuse fraction of SW down 1210 DO n=1,nbcf_out 1211 IF (cfname_out(n) == "swdownfdiff" ) fields_out(:,n) = solswfdiff_m(:) 1212 ENDDO 1207 1213 ! >> PC 1208 1214 IF (carbon_cycle_cpl .AND. carbon_cycle_tr .AND. nbcf_out.GT.0 ) THEN -
LMDZ6/trunk/libf/phylmd/phyetat0.F90
r3581 r3756 15 15 ftsol, pbl_tke, pctsrf, q_ancien, ql_ancien, qs_ancien, radpas, radsol, rain_fall, ratqs, & 16 16 rnebcon, rugoro, sig1, snow_fall, solaire_etat0, sollw, sollwdown, & 17 solsw, t_ancien, u_ancien, v_ancien, w01, wake_cstar, wake_deltaq, &17 solsw, solswfdiff, t_ancien, u_ancien, v_ancien, w01, wake_cstar, wake_deltaq, & 18 18 wake_deltat, wake_delta_pbl_TKE, delta_tsurf, wake_fip, wake_pe, & 19 19 wake_s, wake_dens, zgam, zmax0, zmea, zpic, zsig, & … … 307 307 308 308 found=phyetat0_get(1,solsw,"solsw","net SW radiation surf",0.) 309 found=phyetat0_get(1,solswfdiff,"solswfdiff","fraction of SW radiation surf that is diffuse",1.) 309 310 found=phyetat0_get(1,sollw,"sollw","net LW radiation surf",0.) 310 311 found=phyetat0_get(1,sollwdown,"sollwdown","down LW radiation surf",0.) 311 312 IF (.NOT. found) THEN 312 sollwdown = 0. ; zts=0.313 donsrf=1,nbsrf313 sollwdown(:) = 0. ; zts(:)=0. 314 DO nsrf=1,nbsrf 314 315 zts(:)=zts(:)+ftsol(:,nsrf)*pctsrf(:,nsrf) 315 enddo316 ENDDO 316 317 sollwdown(:)=sollw(:)+RSIGMA*zts(:)**4 317 318 ENDIF -
LMDZ6/trunk/libf/phylmd/phyredem.F90
r3506 r3756 27 27 ale_wake, ale_bl_stat, & 28 28 du_gwd_rando, du_gwd_front, u10m, v10m, & 29 treedrg 29 treedrg, solswfdiff 30 30 USE geometry_mod, ONLY : longitude_deg, latitude_deg 31 31 USE iostart, ONLY: open_restartphy, close_restartphy, enddef_restartphy, put_field, put_var … … 184 184 185 185 CALL put_field(pass,"solsw", "Rayonnement solaire a la surface", solsw) 186 187 CALL put_field(pass,"solswfdiff", "Fraction du rayonnement solaire a la surface qui est diffus", solswfdiff) 186 188 187 189 CALL put_field(pass,"sollw", "Rayonnement IF a la surface", sollw) -
LMDZ6/trunk/libf/phylmd/phys_output_ctrlout_mod.F90
r3702 r3756 461 461 TYPE(ctrl_out), SAVE :: o_SWupSFCcleanclr = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 462 462 'SWupSFCcleanclr', 'SWup clear sky clean (no aerosol) at surface', 'W/m2', (/ ('', i=1, 10) /)) 463 TYPE(ctrl_out), SAVE :: o_SWdnSFC = ctrl_out((/ 1, 1, 10, 10, 5, 10, 11, 11, 11, 11/), & 463 TYPE(ctrl_out), SAVE :: o_fdiffSWdnSFC = ctrl_out((/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11/), & 464 'fdiffSWdnSFC', 'Fraction of diffuse SWdn at surface', 'W/m2', (/ ('', i=1, 10) /)) 465 TYPE(ctrl_out), SAVE :: o_SWdnSFC = ctrl_out((/ 1, 1, 1, 10, 5, 10, 11, 11, 11, 11/), & 464 466 'SWdnSFC', 'SWdn at surface', 'W/m2', (/ ('', i=1, 10) /)) 465 467 TYPE(ctrl_out), SAVE :: o_SWdnSFCclr = ctrl_out((/ 1, 4, 10, 10, 5, 10, 11, 11, 11, 11/), & -
LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90
r3748 r3756 45 45 o_snow, o_msnow, o_fsnow, o_evap, o_ep,o_epmax_diag, & ! epmax_cape 46 46 o_tops, o_tops0, o_topl, o_topl0, & 47 o_SWupTOA, o_SWupTOAclr, o_SWupTOAcleanclr, o_SWdnTOA, &47 o_SWupTOA, o_SWupTOAclr, o_SWupTOAcleanclr, o_SWdnTOA, o_fdiffSWdnSFC, & 48 48 o_SWdnTOAclr, o_nettop, o_SWup200, & 49 49 o_SWup200clr, o_SWdn200, o_SWdn200clr, & … … 223 223 qsol, z0m, z0h, fevap, agesno, & 224 224 nday_rain, rain_con, snow_con, & 225 topsw, toplw, toplw0, swup, swdn, &225 topsw, toplw, toplw0, swup, swdn, solswfdiff, & 226 226 topsw0, swupc0, swdnc0, swup0, swdn0, SWup200, SWup200clr, & 227 227 SWdn200, SWdn200clr, LWup200, LWup200clr, & … … 938 938 ENDIF 939 939 CALL histwrite_phy(o_SWdnSFCcleanclr, zx_tmp_fi2d) 940 941 CALL histwrite_phy(o_fdiffSWdnSFC, solswfdiff) 940 942 941 943 IF (vars_defined) THEN -
LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90
r3496 r3756 47 47 !albedo SB >>> 48 48 REAL, ALLOCATABLE, SAVE :: falb_dif(:,:,:), falb_dir(:,:,:) 49 real, allocatable, save:: chl_con(:)49 REAL, ALLOCATABLE, SAVE :: chl_con(:) 50 50 !$OMP THREADPRIVATE(falb_dir,falb_dif,chl_con) 51 51 !albedo SB <<< … … 54 54 REAL, ALLOCATABLE, SAVE :: rain_fall(:), snow_fall(:) 55 55 !$OMP THREADPRIVATE( rain_fall, snow_fall) 56 REAL, ALLOCATABLE, SAVE :: solsw(:), sol lw(:)57 !$OMP THREADPRIVATE(solsw, sol lw)56 REAL, ALLOCATABLE, SAVE :: solsw(:), solswfdiff(:), sollw(:) 57 !$OMP THREADPRIVATE(solsw, solswfdiff, sollw) 58 58 REAL, ALLOCATABLE, SAVE :: radsol(:) 59 59 !$OMP THREADPRIVATE(radsol) … … 358 358 REAL,ALLOCATABLE,SAVE :: albplap(:) 359 359 !$OMP THREADPRIVATE(albplap) 360 REAL,ALLOCATABLE,SAVE :: solswp(:), sol lwp(:)361 !$OMP THREADPRIVATE(solswp, sol lwp)360 REAL,ALLOCATABLE,SAVE :: solswp(:), solswfdiffp(:), sollwp(:) 361 !$OMP THREADPRIVATE(solswp, solswfdiffp, sollwp) 362 362 REAL,ALLOCATABLE,SAVE :: sollwdownp(:) 363 363 !$OMP THREADPRIVATE(sollwdownp) … … 466 466 ALLOCATE(rain_fall(klon)) 467 467 ALLOCATE(snow_fall(klon)) 468 ALLOCATE(solsw(klon), sol lw(klon))468 ALLOCATE(solsw(klon), solswfdiff(klon), sollw(klon)) 469 469 sollw=0.0 470 470 ALLOCATE(radsol(klon)) … … 597 597 ALLOCATE(radsolp(klon), topswp(klon), toplwp(klon)) 598 598 ALLOCATE(albplap(klon)) 599 ALLOCATE(solswp(klon), sol lwp(klon))599 ALLOCATE(solswp(klon), solswfdiffp(klon), sollwp(klon)) 600 600 ALLOCATE(gustiness(klon)) 601 601 ALLOCATE(sollwdownp(klon)) … … 628 628 !!! fin nrlmd le 10/04/2012 629 629 IF (ok_gwd_rando) THEN 630 allocate(du_gwd_rando(klon, klev))630 ALLOCATE(du_gwd_rando(klon, klev)) 631 631 du_gwd_rando(:,:)=0. 632 632 ENDIF … … 644 644 include "clesphys.h" 645 645 646 deallocate(pctsrf, ftsol, falb1, falb2)647 deallocate(qsol,fevap,z0m,z0h,agesno)646 DEALLOCATE(pctsrf, ftsol, falb1, falb2) 647 DEALLOCATE(qsol,fevap,z0m,z0h,agesno) 648 648 !FC 649 deallocate(treedrg)650 deallocate(rain_fall, snow_fall, solsw, sollw, radsol, swradcorr)651 deallocate(zmea, zstd, zsig, zgam)652 deallocate(zthe, zpic, zval)653 deallocate(rugoro, t_ancien, q_ancien, clwcon, rnebcon)654 deallocate(qs_ancien, ql_ancien)655 deallocate(prw_ancien, prlw_ancien, prsw_ancien)656 deallocate(qtc_cv,sigt_cv)657 deallocate(u_ancien, v_ancien)658 deallocate(tr_ancien) !RomP659 deallocate(ratqs, pbl_tke,coefh,coefm)649 DEALLOCATE(treedrg) 650 DEALLOCATE(rain_fall, snow_fall, solsw, solswfdiff, sollw, radsol, swradcorr) 651 DEALLOCATE(zmea, zstd, zsig, zgam) 652 DEALLOCATE(zthe, zpic, zval) 653 DEALLOCATE(rugoro, t_ancien, q_ancien, clwcon, rnebcon) 654 DEALLOCATE(qs_ancien, ql_ancien) 655 DEALLOCATE(prw_ancien, prlw_ancien, prsw_ancien) 656 DEALLOCATE(qtc_cv,sigt_cv) 657 DEALLOCATE(u_ancien, v_ancien) 658 DEALLOCATE(tr_ancien) !RomP 659 DEALLOCATE(ratqs, pbl_tke,coefh,coefm) 660 660 !nrlmd< 661 deallocate(delta_tsurf)661 DEALLOCATE(delta_tsurf) 662 662 !>nrlmd 663 deallocate(zmax0, f0)664 deallocate(sig1, w01)665 deallocate(entr_therm, fm_therm)666 deallocate(detr_therm)667 deallocate(clwcon0th, rnebcon0th)663 DEALLOCATE(zmax0, f0) 664 DEALLOCATE(sig1, w01) 665 DEALLOCATE(entr_therm, fm_therm) 666 DEALLOCATE(detr_therm) 667 DEALLOCATE(clwcon0th, rnebcon0th) 668 668 ! radiation outputs 669 deallocate(swdnc0, swdn0, swdn)670 deallocate(swupc0, swup0, swup)671 deallocate(lwdnc0, lwdn0, lwdn)672 deallocate(lwupc0, lwup0, lwup)673 deallocate(SWdn200clr, SWdn200)674 deallocate(SWup200clr, SWup200)675 deallocate(LWdn200clr, LWdn200)676 deallocate(LWup200clr, LWup200)677 deallocate(LWdnTOA, LWdnTOAclr)669 DEALLOCATE(swdnc0, swdn0, swdn) 670 DEALLOCATE(swupc0, swup0, swup) 671 DEALLOCATE(lwdnc0, lwdn0, lwdn) 672 DEALLOCATE(lwupc0, lwup0, lwup) 673 DEALLOCATE(SWdn200clr, SWdn200) 674 DEALLOCATE(SWup200clr, SWup200) 675 DEALLOCATE(LWdn200clr, LWdn200) 676 DEALLOCATE(LWup200clr, LWup200) 677 DEALLOCATE(LWdnTOA, LWdnTOAclr) 678 678 ! pressure level 679 deallocate(tsumSTD)680 deallocate(usumSTD, vsumSTD)681 deallocate(wsumSTD, phisumSTD)682 deallocate(tnondef)683 deallocate(qsumSTD, rhsumSTD)684 deallocate(uvsumSTD)685 deallocate(vqsumSTD)686 deallocate(vTsumSTD)687 deallocate(wqsumSTD)688 deallocate(vphisumSTD)689 deallocate(wTsumSTD)690 deallocate(u2sumSTD)691 deallocate(v2sumSTD)692 deallocate(T2sumSTD)693 deallocate(O3sumSTD)694 deallocate(O3daysumSTD)679 DEALLOCATE(tsumSTD) 680 DEALLOCATE(usumSTD, vsumSTD) 681 DEALLOCATE(wsumSTD, phisumSTD) 682 DEALLOCATE(tnondef) 683 DEALLOCATE(qsumSTD, rhsumSTD) 684 DEALLOCATE(uvsumSTD) 685 DEALLOCATE(vqsumSTD) 686 DEALLOCATE(vTsumSTD) 687 DEALLOCATE(wqsumSTD) 688 DEALLOCATE(vphisumSTD) 689 DEALLOCATE(wTsumSTD) 690 DEALLOCATE(u2sumSTD) 691 DEALLOCATE(v2sumSTD) 692 DEALLOCATE(T2sumSTD) 693 DEALLOCATE(O3sumSTD) 694 DEALLOCATE(O3daysumSTD) 695 695 !IM beg 696 deallocate(wlevSTD,ulevSTD,vlevSTD,tlevSTD,qlevSTD,rhlevSTD,philevSTD)697 deallocate(uvSTD,vqSTD,vTSTD,wqSTD,vphiSTD,wTSTD,u2STD,v2STD,T2STD,O3STD,O3daySTD)696 DEALLOCATE(wlevSTD,ulevSTD,vlevSTD,tlevSTD,qlevSTD,rhlevSTD,philevSTD) 697 DEALLOCATE(uvSTD,vqSTD,vTSTD,wqSTD,vphiSTD,wTSTD,u2STD,v2STD,T2STD,O3STD,O3daySTD) 698 698 !IM end 699 deallocate(seed_old)700 deallocate(zuthe, zvthe)701 deallocate(alb_neig)702 deallocate(ema_cbmf)703 deallocate(ema_pcb, ema_pct)704 deallocate(Mipsh, Ma, qcondc)705 deallocate(wd, sigd)706 deallocate(cin, ALE, ALP)707 deallocate(ftd, fqd)708 deallocate(Ale_bl, Alp_bl)709 deallocate(ale_wake)710 deallocate(ale_bl_stat)711 deallocate(lalim_conv, wght_th)712 deallocate(wake_deltat, wake_deltaq)713 deallocate(wake_s, awake_dens, wake_dens)714 deallocate(wake_Cstar, wake_pe, wake_fip)699 DEALLOCATE(seed_old) 700 DEALLOCATE(zuthe, zvthe) 701 DEALLOCATE(alb_neig) 702 DEALLOCATE(ema_cbmf) 703 DEALLOCATE(ema_pcb, ema_pct) 704 DEALLOCATE(Mipsh, Ma, qcondc) 705 DEALLOCATE(wd, sigd) 706 DEALLOCATE(cin, ALE, ALP) 707 DEALLOCATE(ftd, fqd) 708 DEALLOCATE(Ale_bl, Alp_bl) 709 DEALLOCATE(ale_wake) 710 DEALLOCATE(ale_bl_stat) 711 DEALLOCATE(lalim_conv, wght_th) 712 DEALLOCATE(wake_deltat, wake_deltaq) 713 DEALLOCATE(wake_s, awake_dens, wake_dens) 714 DEALLOCATE(wake_Cstar, wake_pe, wake_fip) 715 715 !jyg< 716 deallocate(wake_delta_pbl_TKE)716 DEALLOCATE(wake_delta_pbl_TKE) 717 717 !>jyg 718 deallocate(pfrac_impa, pfrac_nucl)719 deallocate(pfrac_1nucl)720 deallocate(total_rain, nday_rain)721 deallocate(paire_ter)722 deallocate(albsol1, albsol2)718 DEALLOCATE(pfrac_impa, pfrac_nucl) 719 DEALLOCATE(pfrac_1nucl) 720 DEALLOCATE(total_rain, nday_rain) 721 DEALLOCATE(paire_ter) 722 DEALLOCATE(albsol1, albsol2) 723 723 !albedo SB >>> 724 deallocate(albsol_dir,albsol_dif,falb_dir,falb_dif,chl_con)724 DEALLOCATE(albsol_dir,albsol_dif,falb_dir,falb_dif,chl_con) 725 725 !albedo SB <<< 726 deallocate(wo)727 deallocate(clwcon0,rnebcon0)728 deallocate(heat, heat0)729 deallocate(cool, cool0)730 deallocate(heat_volc, cool_volc)731 deallocate(topsw, toplw)732 deallocate(sollwdown, sollwdownclr)733 deallocate(gustiness)734 deallocate(toplwdown, toplwdownclr)735 deallocate(topsw0,toplw0,solsw0,sollw0)736 deallocate(albpla)726 DEALLOCATE(wo) 727 DEALLOCATE(clwcon0,rnebcon0) 728 DEALLOCATE(heat, heat0) 729 DEALLOCATE(cool, cool0) 730 DEALLOCATE(heat_volc, cool_volc) 731 DEALLOCATE(topsw, toplw) 732 DEALLOCATE(sollwdown, sollwdownclr) 733 DEALLOCATE(gustiness) 734 DEALLOCATE(toplwdown, toplwdownclr) 735 DEALLOCATE(topsw0,toplw0,solsw0,sollw0) 736 DEALLOCATE(albpla) 737 737 !IM ajout variables CFMIP2/CMIP5 738 deallocate(heatp, coolp)739 deallocate(heat0p, cool0p)740 deallocate(radsolp, topswp, toplwp)741 deallocate(albplap)742 deallocate(solswp, sollwp)743 deallocate(sollwdownp)744 deallocate(topsw0p,toplw0p)745 deallocate(solsw0p,sollw0p)746 deallocate(lwdnc0p, lwdn0p, lwdnp)747 deallocate(lwupc0p, lwup0p, lwupp)748 deallocate(swdnc0p, swdn0p, swdnp)749 deallocate(swupc0p, swup0p, swupp)750 deallocate(cape)751 deallocate(pbase,bbase)752 deallocate(zqasc)753 deallocate(ibas_con, itop_con)754 deallocate(rain_con, snow_con)755 deallocate(rlonPOS)756 deallocate(newsst)757 deallocate(ustar,u10m, v10m,wstar)758 deallocate(topswad, solswad)759 deallocate(topswai, solswai)760 deallocate(tau_aero,piz_aero,cg_aero)761 deallocate(tau_aero_sw_rrtm,piz_aero_sw_rrtm,cg_aero_sw_rrtm)762 deallocate(tau_aero_lw_rrtm,piz_aero_lw_rrtm,cg_aero_lw_rrtm)763 deallocate(ccm)764 if (ok_gwd_rando) deallocate(du_gwd_rando)765 if (.not. ok_hines .and. ok_gwd_rando) deallocate(du_gwd_front)738 DEALLOCATE(heatp, coolp) 739 DEALLOCATE(heat0p, cool0p) 740 DEALLOCATE(radsolp, topswp, toplwp) 741 DEALLOCATE(albplap) 742 DEALLOCATE(solswp, solswfdiffp, sollwp) 743 DEALLOCATE(sollwdownp) 744 DEALLOCATE(topsw0p,toplw0p) 745 DEALLOCATE(solsw0p,sollw0p) 746 DEALLOCATE(lwdnc0p, lwdn0p, lwdnp) 747 DEALLOCATE(lwupc0p, lwup0p, lwupp) 748 DEALLOCATE(swdnc0p, swdn0p, swdnp) 749 DEALLOCATE(swupc0p, swup0p, swupp) 750 DEALLOCATE(cape) 751 DEALLOCATE(pbase,bbase) 752 DEALLOCATE(zqasc) 753 DEALLOCATE(ibas_con, itop_con) 754 DEALLOCATE(rain_con, snow_con) 755 DEALLOCATE(rlonPOS) 756 DEALLOCATE(newsst) 757 DEALLOCATE(ustar,u10m, v10m,wstar) 758 DEALLOCATE(topswad, solswad) 759 DEALLOCATE(topswai, solswai) 760 DEALLOCATE(tau_aero,piz_aero,cg_aero) 761 DEALLOCATE(tau_aero_sw_rrtm,piz_aero_sw_rrtm,cg_aero_sw_rrtm) 762 DEALLOCATE(tau_aero_lw_rrtm,piz_aero_lw_rrtm,cg_aero_lw_rrtm) 763 DEALLOCATE(ccm) 764 if (ok_gwd_rando) DEALLOCATE(du_gwd_rando) 765 if (.not. ok_hines .and. ok_gwd_rando) DEALLOCATE(du_gwd_front) 766 766 767 767 !!! nrlmd le 10/04/2012 768 deallocate(ale_bl_trig)768 DEALLOCATE(ale_bl_trig) 769 769 !!! fin nrlmd le 10/04/2012 770 770 is_initialized=.FALSE. -
LMDZ6/trunk/libf/phylmd/physiq_mod.F90
r3726 r3756 2514 2514 longitude_deg, latitude_deg, rugoro, zrmu0, & 2515 2515 zsig, sollwdown, pphi, cldt, & 2516 rain_fall, snow_fall, solsw, sol lw, &2516 rain_fall, snow_fall, solsw, solswfdiff, sollw, & 2517 2517 gustiness, & 2518 2518 t_seri, q_seri, u_seri, v_seri, & … … 4143 4143 heat,heat0,cool,cool0,albpla, & 4144 4144 heat_volc,cool_volc, & 4145 topsw,toplw,solsw,sol lw, &4145 topsw,toplw,solsw,solswfdiff,sollw, & 4146 4146 sollwdown, & 4147 4147 topsw0,toplw0,solsw0,sollw0, & … … 4230 4230 heatp,heat0p,coolp,cool0p,albplap, & 4231 4231 heat_volc,cool_volc, & 4232 topswp,toplwp,solswp,sol lwp, &4232 topswp,toplwp,solswp,solswfdiffp,sollwp, & 4233 4233 sollwdownp, & 4234 4234 topsw0p,toplw0p,solsw0p,sollw0p, & -
LMDZ6/trunk/libf/phylmd/radlwsw_m.F90
r3666 r3756 26 26 heat,heat0,cool,cool0,albpla,& 27 27 heat_volc, cool_volc,& 28 topsw,toplw,solsw,sol lw,&28 topsw,toplw,solsw,solswfdiff,sollw,& 29 29 sollwdown,& 30 30 topsw0,toplw0,solsw0,sollw0,& … … 117 117 ! toplw----output-R- ray. IR montant au sommet de l'atmosphere 118 118 ! solsw----output-R- flux solaire net a la surface 119 ! solswfdiff----output-R- fraction de rayonnement diffus pour le flux solaire descendant a la surface 119 120 ! sollw----output-R- ray. IR montant a la surface 120 121 ! solswad---output-R- ray. solaire net absorbe a la surface (aerosol dir) … … 188 189 REAL, INTENT(in) :: tsol(KLON) 189 190 REAL, INTENT(in) :: alb_dir(KLON,NSW),alb_dif(KLON,NSW) 190 real, intent(in) :: SFRWL(6)191 REAL, INTENT(in) :: SFRWL(6) 191 192 !albedo SB <<< 192 193 REAL, INTENT(in) :: t(KLON,KLEV), q(KLON,KLEV) … … 235 236 REAL, INTENT(out) :: heat_volc(KLON,KLEV), cool_volc(KLON,KLEV) !NL 236 237 REAL, INTENT(out) :: topsw(KLON), toplw(KLON) 237 REAL, INTENT(out) :: solsw(KLON), sollw(KLON), albpla(KLON) 238 REAL, INTENT(out) :: solsw(KLON), sollw(KLON), albpla(KLON), solswfdiff(KLON) 238 239 REAL, INTENT(out) :: topsw0(KLON), toplw0(KLON), solsw0(KLON), sollw0(KLON) 239 240 REAL, INTENT(out) :: sollwdown(KLON) … … 286 287 REAL(KIND=8) PWV(kdlon,kflev), PQS(kdlon,kflev) 287 288 288 real(kind=8) POZON(kdlon, kflev, size(wo, 3)) ! mass fraction of ozone289 REAL(kind=8) POZON(kdlon, kflev, size(wo, 3)) ! mass fraction of ozone 289 290 ! "POZON(:, :, 1)" is for the average day-night field, 290 291 ! "POZON(:, :, 2)" is for daylight time. … … 302 303 REAL(KIND=8) zheat_volc(kdlon,kflev), zcool_volc(kdlon,kflev) !NL 303 304 REAL(KIND=8) ztopsw(kdlon), ztoplw(kdlon) 304 REAL(KIND=8) zsolsw(kdlon), zsollw(kdlon), zalbpla(kdlon) 305 REAL(KIND=8) zsolsw(kdlon), zsollw(kdlon), zalbpla(kdlon), zsolswfdiff(kdlon) 305 306 REAL(KIND=8) zsollwdown(kdlon) 306 307 REAL(KIND=8) ztopsw0(kdlon), ztoplw0(kdlon) … … 329 330 !MPL input supplementaires pour RECMWFL 330 331 ! flwc, fiwc = Liquid Water Content & Ice Water Content (kg/kg) 331 332 REAL(KIND=8) GEMU(klon) 332 333 !MPL input RECMWFL: 333 334 ! Tableaux aux niveaux inverses pour respecter convention Arpege 334 335 335 REAL(KIND=8) ref_liq_i(klon,klev) ! cloud droplet radius present-day from newmicro (inverted) 336 REAL(KIND=8) ref_ice_i(klon,klev) ! ice crystal radius present-day from newmicro (inverted) 336 337 !--OB 337 338 338 REAL(KIND=8) ref_liq_pi_i(klon,klev) ! cloud droplet radius pre-industrial from newmicro (inverted) 339 REAL(KIND=8) ref_ice_pi_i(klon,klev) ! ice crystal radius pre-industrial from newmicro (inverted) 339 340 !--end OB 340 341 342 343 341 REAL(KIND=8) paprs_i(klon,klev+1) 342 REAL(KIND=8) pplay_i(klon,klev) 343 REAL(KIND=8) cldfra_i(klon,klev) 344 REAL(KIND=8) POZON_i(kdlon,kflev, size(wo, 3)) ! mass fraction of ozone 344 345 ! "POZON(:, :, 1)" is for the average day-night field, 345 346 ! "POZON(:, :, 2)" is for daylight time. 346 347 !!!!! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6 347 348 349 350 348 REAL(KIND=8) PAER_i(kdlon,kflev,6) 349 REAL(KIND=8) PDP_i(klon,klev) 350 REAL(KIND=8) t_i(klon,klev),q_i(klon,klev),qsat_i(klon,klev) 351 REAL(KIND=8) flwc_i(klon,klev),fiwc_i(klon,klev) 351 352 !MPL output RECMWFL: 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 353 REAL(KIND=8) ZEMTD (klon,klev+1),ZEMTD_i (klon,klev+1) 354 REAL(KIND=8) ZEMTU (klon,klev+1),ZEMTU_i (klon,klev+1) 355 REAL(KIND=8) ZTRSO (klon,klev+1),ZTRSO_i (klon,klev+1) 356 REAL(KIND=8) ZTH (klon,klev+1),ZTH_i (klon,klev+1) 357 REAL(KIND=8) ZCTRSO(klon,2) 358 REAL(KIND=8) ZCEMTR(klon,2) 359 REAL(KIND=8) ZTRSOD(klon) 360 REAL(KIND=8) ZLWFC (klon,2) 361 REAL(KIND=8) ZLWFT (klon,klev+1),ZLWFT_i (klon,klev+1) 362 REAL(KIND=8) ZSWFC (klon,2) 363 REAL(KIND=8) ZSWFT (klon,klev+1),ZSWFT_i (klon,klev+1) 364 REAL(KIND=8) ZFLUCDWN_i(klon,klev+1),ZFLUCUP_i(klon,klev+1) 365 REAL(KIND=8) PPIZA_TOT(klon,klev,NSW) 366 REAL(KIND=8) PCGA_TOT(klon,klev,NSW) 367 REAL(KIND=8) PTAU_TOT(klon,klev,NSW) 368 REAL(KIND=8) PPIZA_NAT(klon,klev,NSW) 369 REAL(KIND=8) PCGA_NAT(klon,klev,NSW) 370 REAL(KIND=8) PTAU_NAT(klon,klev,NSW) 370 371 #ifdef CPP_RRTM 371 372 372 REAL(KIND=8) PTAU_LW_TOT(klon,klev,NLW) 373 REAL(KIND=8) PTAU_LW_NAT(klon,klev,NLW) 373 374 #endif 374 375 376 377 375 REAL(KIND=8) PSFSWDIR(klon,NSW) 376 REAL(KIND=8) PSFSWDIF(klon,NSW) 377 REAL(KIND=8) PFSDNN(klon) 378 REAL(KIND=8) PFSDNV(klon) 378 379 !MPL On ne redefinit pas les tableaux ZFLUX,ZFLUC, 379 380 !MPL ZFSDWN,ZFCDWN,ZFSUP,ZFCUP car ils existent deja 380 381 !MPL sous les noms de ZFLDN,ZFLDN0,ZFLUP,ZFLUP0, 381 382 !MPL ZFSDN,ZFSDN0,ZFSUP,ZFSUP0 382 383 384 385 386 387 388 389 390 391 383 REAL(KIND=8) ZFLUX_i (klon,2,klev+1) 384 REAL(KIND=8) ZFLUC_i (klon,2,klev+1) 385 REAL(KIND=8) ZFSDWN_i (klon,klev+1) 386 REAL(KIND=8) ZFCDWN_i (klon,klev+1) 387 REAL(KIND=8) ZFCCDWN_i (klon,klev+1) 388 REAL(KIND=8) ZFSUP_i (klon,klev+1) 389 REAL(KIND=8) ZFCUP_i (klon,klev+1) 390 REAL(KIND=8) ZFCCUP_i (klon,klev+1) 391 REAL(KIND=8) ZFLCCDWN_i (klon,klev+1) 392 REAL(KIND=8) ZFLCCUP_i (klon,klev+1) 392 393 ! 3 lignes suivantes a activer pour CCMVAL (MPL 20100412) 393 394 ! REAL(KIND=8) RSUN(3,2) 394 395 ! REAL(KIND=8) SUN(3) 395 396 ! REAL(KIND=8) SUN_FRACT(2) 396 real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2397 REAL, PARAMETER:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2 397 398 CHARACTER (LEN=80) :: abort_message 398 399 CHARACTER (LEN=80) :: modname='radlwsw_m' 399 400 400 call assert(size(wo, 1) == klon, size(wo, 2) == klev, "radlwsw wo") 401 REAL zdir, zdif 402 403 CALL assert(size(wo, 1) == klon, size(wo, 2) == klev, "radlwsw wo") 401 404 ! initialisation 402 405 ist=1 … … 414 417 zsolsw0_aero(:,:) = 0. !ym missing init : warning : not initialized in SW_AEROAR4 415 418 416 417 ZTOPSWADAERO(:) = 0. !ym missing init 418 ZSOLSWADAERO(:) = 0. !ym missing init 419 ZTOPSWAD0AERO(:) = 0. !ym missing init 420 ZSOLSWAD0AERO(:) = 0. !ym missing init 421 ZTOPSWAIAERO(:) = 0. !ym missing init 422 ZSOLSWAIAERO(:) = 0. !ym missing init 423 ZTOPSWCF_AERO(:,:)= 0.!ym missing init 424 ZSOLSWCF_AERO(:,:) =0. !ym missing init 419 ZTOPSWADAERO(:) = 0. !ym missing init 420 ZSOLSWADAERO(:) = 0. !ym missing init 421 ZTOPSWAD0AERO(:) = 0. !ym missing init 422 ZSOLSWAD0AERO(:) = 0. !ym missing init 423 ZTOPSWAIAERO(:) = 0. !ym missing init 424 ZSOLSWAIAERO(:) = 0. !ym missing init 425 ZTOPSWCF_AERO(:,:)= 0.!ym missing init 426 ZSOLSWCF_AERO(:,:) =0. !ym missing init 425 427 426 428 ! … … 454 456 #ifdef REPROBUS 455 457 IF (iflag_rrtm==0) THEN 456 if(ok_SUNTIME) PSCT = solaireTIME/zdist/zdist458 IF (ok_SUNTIME) PSCT = solaireTIME/zdist/zdist 457 459 print*,'Constante solaire: ',PSCT*zdist*zdist 458 END 460 ENDIF 459 461 #endif 460 END 462 ENDIF 461 463 462 464 DO j = 1, nb_gr … … 541 543 CALL RAD_INTERACTIF(POZON,iof) 542 544 #endif 543 END IF 544 545 ENDIF 545 546 ! 546 547 DO k = 1, kflev+1 … … 568 569 ENDDO 569 570 ENDDO 570 571 571 ! 572 572 !===== iflag_rrtm ================================================ 573 573 ! 574 574 IF (iflag_rrtm == 0) THEN !!!! remettre 0 juste pour tester l'ancien rayt via rrtm 575 ! 575 576 !--- Mise a zero des tableaux output du rayonnement LW-AR4 ---------- 576 577 DO k = 1, kflev+1 … … 651 652 zsolswaiaero(i)=0. 652 653 ENDDO 654 655 !--fraction of diffuse radiation in surface SW downward radiation 656 !--not computed with old radiation scheme 657 zsolswfdiff(:) = -999.999 658 653 659 ! print *,'Avant SW_LMDAR4: PSCT zrmu0 zfract',PSCT, zrmu0, zfract 654 660 ! daylight ozone, if we have it, for short wave … … 676 682 DO i=1,kdlon 677 683 DO k=1,kflev+1 678 ! print *,'iof i k klon klev=',iof,i,k,klon,klev679 684 lwdn0 ( iof+i,k) = ZFLDN0 ( i,k) 680 685 lwdn ( iof+i,k) = ZFLDN ( i,k) … … 687 692 ENDDO 688 693 ENDDO 689 ! print*,'SW_AR4 ZFSDN0 1 , klev:',ZFSDN0(1:klon,1),ZFSDN0(1:klon,klev) 690 ! print*,'SW_AR4 swdn0 1 , klev:',swdn0(1:klon,1),swdn0(1:klon,klev) 691 ! print*,'SW_AR4 ZFSUP0 1 , klev:',ZFSUP0(1:klon,1),ZFSUP0(1:klon,klev) 692 ! print*,'SW_AR4 swup0 1 , klev:',swup0(1:klon,1),swup0(1:klon,klev) 693 ! print*,'SW_AR4 ZFSDN 1 , klev:',ZFSDN(1:klon,1) ,ZFSDN(1:klon,klev) 694 ! print*,'SW_AR4 ZFSUP 1 , klev:',ZFSUP(1:klon,1) ,ZFSUP(1:klon,klev) 694 ! 695 695 ELSE 696 696 #ifdef CPP_RRTM … … 700 700 DO k = 1, kflev+1 701 701 DO i = 1, kdlon 702 ZEMTD_i(i,k)=0.703 ZEMTU_i(i,k)=0.704 ZTRSO_i(i,k)=0.705 ZTH_i(i,k)=0.706 ZLWFT_i(i,k)=0.707 ZSWFT_i(i,k)=0.708 ZFLUX_i(i,1,k)=0.709 ZFLUX_i(i,2,k)=0.710 ZFLUC_i(i,1,k)=0.711 ZFLUC_i(i,2,k)=0.712 ZFSDWN_i(i,k)=0.713 ZFCDWN_i(i,k)=0.714 ZFCCDWN_i(i,k)=0.715 ZFSUP_i(i,k)=0.716 ZFCUP_i(i,k)=0.717 ZFCCUP_i(i,k)=0.718 ZFLCCDWN_i(i,k)=0.719 ZFLCCUP_i(i,k)=0.702 ZEMTD_i(i,k)=0. 703 ZEMTU_i(i,k)=0. 704 ZTRSO_i(i,k)=0. 705 ZTH_i(i,k)=0. 706 ZLWFT_i(i,k)=0. 707 ZSWFT_i(i,k)=0. 708 ZFLUX_i(i,1,k)=0. 709 ZFLUX_i(i,2,k)=0. 710 ZFLUC_i(i,1,k)=0. 711 ZFLUC_i(i,2,k)=0. 712 ZFSDWN_i(i,k)=0. 713 ZFCDWN_i(i,k)=0. 714 ZFCCDWN_i(i,k)=0. 715 ZFSUP_i(i,k)=0. 716 ZFCUP_i(i,k)=0. 717 ZFCCUP_i(i,k)=0. 718 ZFLCCDWN_i(i,k)=0. 719 ZFLCCUP_i(i,k)=0. 720 720 ENDDO 721 721 ENDDO … … 771 771 PFSDNV(i)=0. 772 772 DO kk = 1, NSW 773 PSFSWDIR(i,kk)=0.774 PSFSWDIF(i,kk)=0.773 PSFSWDIR(i,kk)=0. 774 PSFSWDIF(i,kk)=0. 775 775 ENDDO 776 776 ENDDO … … 779 779 ! On met les donnees dans l'ordre des niveaux arpege 780 780 paprs_i(:,1)=paprs(:,klev+1) 781 dok=1,klev781 DO k=1,klev 782 782 paprs_i(1:klon,k+1) =paprs(1:klon,klev+1-k) 783 783 pplay_i(1:klon,k) =pplay(1:klon,klev+1-k) … … 794 794 ref_liq_pi_i(1:klon,k) =ref_liq_pi(1:klon,klev+1-k) 795 795 ref_ice_pi_i(1:klon,k) =ref_ice_pi(1:klon,klev+1-k) 796 enddo797 dok=1,kflev796 ENDDO 797 DO k=1,kflev 798 798 POZON_i(1:klon,k,:)=POZON(1:klon,kflev+1-k,:) 799 799 !!! POZON_i(1:klon,k)=POZON(1:klon,k) !!! on laisse 1=sol et klev=top 800 800 ! print *,'Juste avant RECMWFL: k tsol temp',k,tsol,t(1,k) 801 801 !!!!!!! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6 802 doi=1,6802 DO i=1,6 803 803 PAER_i(1:klon,k,i)=PAER(1:klon,kflev+1-k,i) 804 enddo805 enddo804 ENDDO 805 ENDDO 806 806 ! print *,'RADLWSW: avant RECMWFL, RI0,rmu0=',solaire,rmu0 807 807 … … 832 832 ! s 'RECMWF ') 833 833 ! 834 if(lldebug) then834 IF (lldebug) THEN 835 835 CALL writefield_phy('paprs_i',paprs_i,klev+1) 836 836 CALL writefield_phy('pplay_i',pplay_i,klev) … … 846 846 CALL writefield_phy('palbd_new',PALBD_NEW,NSW) 847 847 CALL writefield_phy('palbp_new',PALBP_NEW,NSW) 848 endif848 ENDIF 849 849 850 850 ! Nouvel appel a RECMWF (celui du cy32t0) … … 876 876 877 877 ! print *,'RADLWSW: apres RECMWF' 878 if(lldebug) then878 IF (lldebug) THEN 879 879 CALL writefield_phy('zemtd_i',ZEMTD_i,klev+1) 880 880 CALL writefield_phy('zemtu_i',ZEMTU_i,klev+1) … … 901 901 CALL writefield_phy('zfcdwn_i',ZFCDWN_i,klev+1) 902 902 CALL writefield_phy('zfcup_i',ZFCUP_i,klev+1) 903 endif903 ENDIF 904 904 ! --------- output RECMWFL 905 905 ! ZEMTD (KPROMA,KLEV+1) ; TOTAL DOWNWARD LONGWAVE EMISSIVITY … … 952 952 ZFLDNC0(i,k+1)= ZFLCCDWN_i(i,k+1) 953 953 ZFLUPC0(i,k+1)= ZFLCCUP_i(i,k+1) 954 IF (ok_volcan) THEN954 IF (ok_volcan) THEN 955 955 ZSWADAERO(i,k+1)=ZSWADAERO(i,k+1)*fract(i) !--NL 956 956 ENDIF … … 992 992 ! On renseigne les champs LMDz, pour avoir la meme chose qu'en sortie de 993 993 ! LW_LMDAR4 et SW_LMDAR4 994 995 !--fraction of diffuse radiation in surface SW downward radiation 996 DO i = 1, kdlon 997 IF (fract(i).GT.0.0) THEN 998 zdir=SUM(PSFSWDIR(i,:)) 999 zdif=SUM(PSFSWDIF(i,:)) 1000 zsolswfdiff(i) = zdif/(zdir+zdif) 1001 ELSE !--night 1002 zsolswfdiff(i) = 1.0 1003 ENDIF 1004 ENDDO 1005 ! 994 1006 DO i = 1, kdlon 995 1007 zsolsw(i) = ZSWFT(i,1) … … 1009 1021 ztoplw0(i) = ZLWFT0_i(i,klev+1)*(-1) 1010 1022 ! 1011 1023 IF (fract(i) == 0.) THEN 1012 1024 !!!!! A REVOIR MPL (20090630) ca n a pas de sens quand fract=0 1013 1025 ! pas plus que dans le sw_AR4 … … 1030 1042 ! ZLWFT(klon,k),ZSWFT 1031 1043 1032 dok=1,kflev1033 doi=1,kdlon1044 DO k=1,kflev 1045 DO i=1,kdlon 1034 1046 zheat(i,k)=(ZSWFT(i,k+1)-ZSWFT(i,k))*RDAY*RG/RCPD/PDP(i,k) 1035 1047 zheat0(i,k)=(ZSWFT0_i(i,k+1)-ZSWFT0_i(i,k))*RDAY*RG/RCPD/PDP(i,k) 1036 1048 zcool(i,k)=(ZLWFT(i,k)-ZLWFT(i,k+1))*RDAY*RG/RCPD/PDP(i,k) 1037 1049 zcool0(i,k)=(ZLWFT0_i(i,k)-ZLWFT0_i(i,k+1))*RDAY*RG/RCPD/PDP(i,k) 1038 IF (ok_volcan) THEN1050 IF (ok_volcan) THEN 1039 1051 zheat_volc(i,k)=(ZSWADAERO(i,k+1)-ZSWADAERO(i,k))*RG/RCPD/PDP(i,k) !NL 1040 1052 zcool_volc(i,k)=(ZLWADAERO(i,k)-ZLWADAERO(i,k+1))*RG/RCPD/PDP(i,k) !NL … … 1043 1055 ! ZFLUCUP_i(i,k)=ZFLUC_i(i,1,k) 1044 1056 ! ZFLUCDWN_i(i,k)=ZFLUC_i(i,2,k) 1045 enddo1046 enddo1057 ENDDO 1058 ENDDO 1047 1059 #else 1048 1060 abort_message="You should compile with -rrtm if running with iflag_rrtm=1" … … 1056 1068 toplw(iof+i) = ztoplw(i) 1057 1069 solsw(iof+i) = zsolsw(i) 1070 solswfdiff(iof+i) = zsolswfdiff(i) 1058 1071 sollw(iof+i) = zsollw(i) 1059 1072 sollwdown(iof+i) = zsollwdown(i)
Note: See TracChangeset
for help on using the changeset viewer.