Changeset 2359 for LMDZ5/trunk/libf/phylmd/physiq.F90
- Timestamp:
- Sep 4, 2015, 6:48:31 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/physiq.F90
r2357 r2359 143 143 !====================================================================== 144 144 ! Clef controlant l'activation du cycle diurne: 145 !cc LOGICAL cycle_diurne 146 !cc PARAMETER (cycle_diurne=.FALSE.) 145 ! en attente du codage des cles par Fred 146 INTEGER iflag_cycle_diurne 147 PARAMETER (iflag_cycle_diurne=1) 147 148 !====================================================================== 148 149 ! Modele thermique du sol, a activer pour le cycle diurne: … … 589 590 ! 590 591 REAL dist, rmu0(klon), fract(klon) 591 REAL zdtime, zlongi 592 REAL zrmu0(klon), zfract(klon), swradcorr(klon) 593 REAL zdtime, zdtime1, zdtime2, zlongi 592 594 ! 593 595 REAL qcheck … … 1070 1072 print*,'iflag_coupl,iflag_clos,iflag_wake', & 1071 1073 iflag_coupl,iflag_clos,iflag_wake 1072 print*,' CYCLE_DIURNE',cycle_diurne1074 print*,'iflag_CYCLE_DIURNE', iflag_cycle_diurne 1073 1075 ! 1074 1076 IF (iflag_con.EQ.2.AND.iflag_cld_th.GT.-1) THEN … … 1122 1124 ENDIF 1123 1125 1124 !IM cf. AM 081204 BEG1125 PRINT*,'cycle_diurne3 =',cycle_diurne1126 !IM cf. AM 081204 END1127 !1128 1126 CALL printflag( tabcntr0,radpas,ok_journe, & 1129 1127 ok_instan, ok_region ) … … 1149 1147 ENDIF 1150 1148 ! 1151 IF (dtime*REAL(radpas).GT.21600..AND. cycle_diurne) THEN1149 IF (dtime*REAL(radpas).GT.21600..AND.iflag_cycle_diurne.GE.1) THEN 1152 1150 WRITE(lunout,*)'Nbre d appels au rayonnement insuffisant' 1153 1151 WRITE(lunout,*)"Au minimum 4 appels par jour si cycle diurne" … … 1821 1819 ! non nul aux poles. 1822 1820 IF (abs(solarlong0-1000.)<1.e-4) then 1823 call zenang_an( cycle_diurne,jH_cur,rlat,rlon,rmu0,fract)1821 call zenang_an(iflag_cycle_diurne.GE.1,jH_cur,rlat,rlon,rmu0,fract) 1824 1822 ELSE 1825 ! Avec ou sans cycle diurne 1826 IF (cycle_diurne) THEN 1823 ! recode par Olivier Boucher en sept 2015 1824 SELECT CASE (iflag_cycle_diurne) 1825 CASE(0) 1826 ! Sans cycle diurne 1827 CALL angle(zlongi, rlat, fract, rmu0) 1828 CASE(1) 1829 ! Avec cycle diurne sans application des poids 1830 ! bit comparable a l ancienne formulation cycle_diurne=true 1831 ! on integre entre gmtime et gmtime+radpas 1827 1832 zdtime=dtime*REAL(radpas) ! pas de temps du rayonnement (s) 1828 CALL zenang(zlongi,jH_cur,zdtime,rlat,rlon,rmu0,fract) 1829 ELSE 1830 CALL angle(zlongi, rlat, fract, rmu0) 1831 ENDIF 1833 CALL zenang(zlongi,jH_cur,0.0,zdtime,rlat,rlon,rmu0,fract) 1834 CASE(2) 1835 ! Avec cycle diurne sans application des poids 1836 ! On integre entre gmtime-pdtphys et gmtime+pdtphys*(radpas-1) 1837 ! Comme cette routine est appele a tous les pas de temps de la physique 1838 ! meme si le rayonnement n'est pas appele je remonte en arriere les 1839 ! radpas-1 pas de temps suivant. Petite ruse pour prendre en compte le 1840 ! premier pas de temps la physique ou itaprad=0 1841 zdtime1=dtime*REAL(-MOD(itaprad,4)-1) 1842 zdtime2=dtime*REAL(radpas-MOD(itaprad,4)-1) 1843 CALL zenang(zlongi,jH_cur,zdtime1,zdtime2,rlat,rlon,rmu0,fract) 1844 END SELECT 1832 1845 ENDIF 1833 1834 ! AI Janv 20141835 do i = 1, klon1836 if (fract(i).le.0.) then1837 JrNt(i)=0.1838 else1839 JrNt(i)=1.1840 endif1841 enddo1842 1846 1843 1847 if (mydebug) then … … 3562 3566 topsw0,toplw0,solsw0,sollw0, & 3563 3567 lwdn0, lwdn, lwup0, lwup, & 3564 swdn0, swdn, swup0,swup, &3568 zswdn0, zswdn, zswup0, zswup, & 3565 3569 ok_ade, ok_aie, & 3566 3570 tau_aero, piz_aero, cg_aero, & … … 3608 3612 topsw0,toplw0,solsw0,sollw0, & 3609 3613 lwdn0, lwdn, lwup0, lwup, & 3610 swdn0, swdn, swup0,swup, &3614 zswdn0, zswdn, zswup0, zswup, & 3611 3615 topswad_aero, solswad_aero, & 3612 3616 topswai_aero, solswai_aero, & … … 3664 3668 topsw0p,toplw0p,solsw0p,sollw0p, & 3665 3669 lwdn0p, lwdnp, lwup0p, lwupp, & 3666 swdn0p, swdnp, swup0p,swupp, &3670 zswdn0p, zswdnp, zswup0p, zswupp, & 3667 3671 topswad_aerop, solswad_aerop, & 3668 3672 topswai_aerop, solswai_aerop, & … … 3706 3710 swup=0. ! MPL 27102011 pour les fichiers AMMA_profiles et AMMA_scalars 3707 3711 swup0=0. 3708 swdn=0.3709 swdn0=0.3712 zswdn=0. 3713 zswdn0=0. 3710 3714 lwup=0. 3711 3715 lwup0=0. … … 3715 3719 3716 3720 ! 3721 ! Calculer les poids a appliquer sur le SW 3722 ! sortie JrNt = jour-nuit 3723 ! recode par Olivier Boucher en sept 2015 3724 ! 3725 3726 SELECT CASE (iflag_cycle_diurne) 3727 ! 3728 CASE(0) 3729 ! Sans cycle diurne 3730 swradcorr=1.0 3731 JrNt = 1.0 3732 CASE(1) 3733 ! Avec cycle diurne sans les poids 3734 swradcorr=1.0 3735 JrNt=0.0 3736 WHERE (fract.GT.0.0) JrNt=1.0 3737 CASE(2) 3738 ! Avec cycle diurne et les poids 3739 zdtime1=-dtime !--on corrige le rayonnement pour representer le 3740 zdtime2=0.0 !--pas de temps de la physique qui se termine 3741 CALL zenang(zlongi,jH_cur,zdtime1,zdtime2,rlat,rlon,zrmu0,zfract) 3742 swradcorr=0.0 3743 WHERE (rmu0.GE.1.e-10 .OR. fract.GE.1.e-10) swradcorr=zfract/fract*zrmu0/rmu0 3744 JrNt=0.0 3745 WHERE (zfract.GT.0.0) JrNt=1.0 3746 END SELECT 3747 3748 ! 3749 ! Corriger les flux SW pour le cycle diurne ameliore 3750 ! recode par Olivier Boucher en sept 2015 3751 ! 3752 3753 DO k=1, klev+1 3754 swdn0(:,k)=swradcorr(:)*zswdn0(:,k) 3755 swdn(:,k) =swradcorr(:)*zswdn(:,k) 3756 swup0(:,k)=swradcorr(:)*zswup0(:,k) 3757 swup(:,k) =swradcorr(:)*zswup(:,k) 3758 ENDDO 3759 if (ok_4xCO2atm) then 3760 DO k=1, klev+1 3761 swdn0p(:,k)=swradcorr(:)*zswdn0p(:,k) 3762 swdnp(:,k) =swradcorr(:)*zswdnp(:,k) 3763 swup0p(:,k)=swradcorr(:)*zswup0p(:,k) 3764 swupp(:,k) =swradcorr(:)*zswupp(:,k) 3765 ENDDO 3766 endif 3767 3768 ! 3717 3769 ! Ajouter la tendance des rayonnements (tous les pas) 3718 3770 ! 3719 d_t_swr(:,:)=heat(:,:)*dtime/RDAY 3720 d_t_lwr(:,:)=-cool(:,:)*dtime/RDAY 3721 d_t_sw0(:,:)=heat0(:,:)*dtime/RDAY 3722 d_t_lw0(:,:)=-cool0(:,:)*dtime/RDAY 3771 3772 DO k=1, klev 3773 d_t_swr(:,k)=swradcorr(:)*heat(:,k)*dtime/RDAY 3774 d_t_sw0(:,k)=swradcorr(:)*heat0(:,k)*dtime/RDAY 3775 d_t_lwr(:,k)=-cool(:,k)*dtime/RDAY 3776 d_t_lw0(:,k)=-cool0(:,k)*dtime/RDAY 3777 ENDDO 3778 3723 3779 CALL add_phys_tend(du0,dv0,d_t_swr,dq0,dql0,dqi0,paprs,'SW',abortphy) 3724 3780 CALL add_phys_tend(du0,dv0,d_t_lwr,dq0,dql0,dqi0,paprs,'LW',abortphy)
Note: See TracChangeset
for help on using the changeset viewer.