Changeset 3595 for LMDZ6/trunk/libf/phylmd
- Timestamp:
- Oct 29, 2019, 9:48:03 AM (5 years ago)
- Location:
- LMDZ6/trunk/libf/phylmd/dyn1d
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/dyn1d/mod_1D_cases_read_std.F90
r3594 r3595 393 393 ! Activation de quelques cles en fonction des variables disponibles 394 394 !----------------------------------------------------------------------- 395 if ( 1 == 0) THEN395 if ( 1 == 1 ) THEN 396 396 if ( name_var(i) == 'temp_nudg' .and. nint(nudging_t)==0) stop 'Nudging inconsistency temp' 397 397 if ( name_var(i) == 'qv_nudg' .and. nint(nudging_qv)==0) stop 'Nudging inconsistency qv' -
LMDZ6/trunk/libf/phylmd/dyn1d/scm.F90
r3594 r3595 59 59 ! DECLARATIONS 60 60 !===================================================================== 61 62 #undef OUTPUT_PHYS_SCM 61 63 62 64 !--------------------------------------------------------------------- … … 142 144 ! (cf read_tsurf1d.F) 143 145 144 real wwww145 !vertical advection computation146 ! real d_t_z(llm), d_q_z(llm)147 ! real d_t_dyn_z(llm), dq_dyn_z(llm)148 ! real zz(llm)149 ! real zfact150 151 146 !flag forcings 152 147 logical :: nudge_wind=.true. … … 191 186 real :: sfdt, cfdt 192 187 real :: du_phys(llm),dv_phys(llm),dt_phys(llm) 193 real :: dt_dyn(llm) 188 real :: w_adv(llm),z_adv(llm) 189 real :: d_t_vert_adv(llm),d_u_vert_adv(llm),d_v_vert_adv(llm) 194 190 real :: dt_cooling(llm),d_t_adv(llm),d_t_nudge(llm) 195 191 real :: d_u_nudge(llm),d_v_nudge(llm) … … 201 197 REAL, ALLOCATABLE, DIMENSION(:,:):: q 202 198 REAL, ALLOCATABLE, DIMENSION(:,:):: dq 203 REAL, ALLOCATABLE, DIMENSION(:,:):: d q_dyn199 REAL, ALLOCATABLE, DIMENSION(:,:):: d_q_vert_adv 204 200 REAL, ALLOCATABLE, DIMENSION(:,:):: d_q_adv 205 201 REAL, ALLOCATABLE, DIMENSION(:,:):: d_q_nudge … … 269 265 dv_phys(:)=0. 270 266 dt_phys(:)=0. 271 dt_dyn(:)=0. 267 d_t_vert_adv(:)=0. 268 d_u_vert_adv(:)=0. 269 d_v_vert_adv(:)=0. 272 270 dt_cooling(:)=0. 273 271 d_t_adv(:)=0. … … 420 418 allocate(q(llm,nqtot)) ; q(:,:)=0. 421 419 allocate(dq(llm,nqtot)) 422 allocate(d q_dyn(llm,nqtot))420 allocate(d_q_vert_adv(llm,nqtot)) 423 421 allocate(d_q_adv(llm,nqtot)) 424 422 allocate(d_q_nudge(llm,nqtot)) … … 427 425 q(:,:) = 0. 428 426 dq(:,:) = 0. 429 d q_dyn(:,:) = 0.427 d_q_vert_adv(:,:) = 0. 430 428 d_q_adv(:,:) = 0. 431 429 d_q_nudge(:,:) = 0. … … 808 806 ! raz for safety 809 807 do l=1,llm 810 d q_dyn(l,1) = 0.808 d_q_vert_adv(l,1) = 0. 811 809 enddo 812 810 endif … … 819 817 ! 820 818 !===================================================================== 819 #ifdef OUTPUT_PHYS_SCM 821 820 CALL iophys_ini 821 #endif 822 822 ! START OF THE TEMPORAL LOOP : 823 823 !===================================================================== … … 841 841 #include "1D_interp_cases.h" 842 842 ! Vertical advection 843 ! call lstendH(llm,nqtot,omega,d t_dyn,dq_dyn,q,temp,u,v,play)843 ! call lstendH(llm,nqtot,omega,d_t_vert_adv,d_q_vert_adv,q,temp,u,v,play) 844 844 ! print*,'B d_t_adv ',d_t_adv(1:20)*86400 845 ! print*,'B d t_dyn ',dt_dyn(1:20)*86400845 ! print*,'B d_t_vert_adv ',d_t_vert_adv(1:20)*86400 846 846 ! print*,'B dt omega ',omega 847 teta=temp*(pzero/play)**rkappa 848 do l=2,llm-1 849 dt_dyn(l)=-(omega(l)*(teta(l+1)-teta(l-1))/(play(l+1)-play(l-1)))/(pzero/play(l))**rkappa 850 dq_dyn(l,1)=-omega(l)*(q(l+1,1)-q(l-1,1))/(play(l+1)-play(l-1)) 851 enddo 852 d_t_adv(:)=d_t_adv(:)+dt_dyn(:) 853 d_q_adv(:,1)=d_q_adv(:,1)+dq_dyn(:,1) 854 855 print*,'OMEGA ',omega_mod_cas(10),omega(10) 847 856 848 !--------------------------------------------------------------------- 857 849 ! Geopotential : … … 863 855 & (play(l)-play(l+1))/(play(l)+play(l+1)) 864 856 enddo 857 858 !--------------------------------------------------------------------- 859 ! Vertical advection 860 !--------------------------------------------------------------------- 861 862 IF ( forc_w+forc_omega > 0 ) THEN 863 864 IF ( forc_w == 1 ) THEN 865 w_adv=w_mod_cas 866 z_adv=phi/RG 867 ELSE 868 w_adv=omega 869 z_adv=play 870 ENDIF 871 872 teta=temp*(pzero/play)**rkappa 873 do l=2,llm-1 874 d_u_vert_adv(l)=-w_adv(l)*(u(l+1)-u(l-1))/(z_adv(l+1)-z_adv(l-1)) 875 d_v_vert_adv(l)=-w_adv(l)*(v(l+1)-v(l-1))/(z_adv(l+1)-z_adv(l-1)) 876 d_t_vert_adv(l)=-(w_adv(l)*(teta(l+1)-teta(l-1))/(z_adv(l+1)-z_adv(l-1)))/(pzero/play(l))**rkappa 877 d_q_vert_adv(l,1)=-w_adv(l)*(q(l+1,1)-q(l-1,1))/(z_adv(l+1)-z_adv(l-1)) 878 enddo 879 d_t_adv(:)=d_t_adv(:)+d_t_vert_adv(:) 880 d_q_adv(:,1)=d_q_adv(:,1)+d_q_vert_adv(:,1) 881 882 print*,'OMEGA ',w_adv(10),z_adv(10) 883 884 ENDIF 865 885 866 886 !--------------------------------------------------------------------- … … 882 902 & presnivs(l),u(l),v(l),temp(l),q(l,1),q(l,2),omega2(l),l=1,llm) 883 903 endif 884 885 CALL iophys_ecrit('dtadv',klev,'dtadv','K/day',86400*d_t_adv)886 CALL iophys_ecrit('dtdyn',klev,'dtdyn','K/day',86400*dt_dyn)887 904 888 905 !--------------------------------------------------------------------- … … 1021 1038 & d_q_nudge(l,1)=(qv_nudg_mod_cas(l)-q(l,1))/nudging_qv 1022 1039 ENDDO 1040 1041 #ifdef OUTPUT_PHYS_SCM 1042 CALL iophys_ecrit('w_adv',klev,'w_adv','K/day',w_adv) 1043 CALL iophys_ecrit('z_adv',klev,'z_adv','K/day',z_adv) 1044 CALL iophys_ecrit('dtadv',klev,'dtadv','K/day',86400*d_t_adv) 1045 CALL iophys_ecrit('dtdyn',klev,'dtdyn','K/day',86400*d_t_vert_adv) 1023 1046 CALL iophys_ecrit('qv',klev,'qv','g/kg',1000*q(:,1)) 1024 1047 CALL iophys_ecrit('qvnud',klev,'qvnud','g/kg',1000*u_nudg_mod_cas) … … 1027 1050 CALL iophys_ecrit('v',klev,'v','m/s',v) 1028 1051 CALL iophys_ecrit('vnud',klev,'vnud','m/s',v_nudg_mod_cas) 1052 CALL iophys_ecrit('temp',klev,'temp','K',temp) 1053 CALL iophys_ecrit('tempnud',klev,'temp_nudg_mod_cas','K',temp_nudg_mod_cas) 1029 1054 CALL iophys_ecrit('dtnud',klev,'dtnud','K/day',86400*d_t_nudge) 1030 1055 CALL iophys_ecrit('dqnud',klev,'dqnud','K/day',1000*86400*d_q_nudge(:,1)) 1056 #endif 1031 1057 1032 1058 !
Note: See TracChangeset
for help on using the changeset viewer.