Changeset 1507
- Timestamp:
- Apr 15, 2011, 12:44:31 PM (14 years ago)
- Location:
- LMDZ5/trunk/libf/phylmd
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/fisrtilp.F90
r1506 r1507 387 387 if (iflag_cldcon <= 4) then 388 388 lognormale = .true. 389 elseif (iflag_cldcon == 6) then389 elseif (iflag_cldcon >= 6) then 390 390 ! lognormale en l'absence des thermiques 391 391 lognormale = fraca(:,k) < 1e-10 -
LMDZ5/trunk/libf/phylmd/phys_local_var_mod.F90
r1424 r1507 40 40 REAL, SAVE, ALLOCATABLE :: d_t_eva(:,:),d_q_eva(:,:) 41 41 !$OMP THREADPRIVATE(d_t_eva,d_q_eva) 42 REAL, SAVE, ALLOCATABLE :: d_t_lscst(:,:),d_q_lscst(:,:) 43 !$OMP THREADPRIVATE(d_t_lscst,d_q_lscst) 44 REAL, SAVE, ALLOCATABLE :: d_t_lscth(:,:),d_q_lscth(:,:) 45 !$OMP THREADPRIVATE(d_t_lscth,d_q_lscth) 46 REAL, SAVE, ALLOCATABLE :: plul_th(:),plul_st(:) 47 !$OMP THREADPRIVATE(plul_th,plul_st) 42 48 !tendances dues a oro et lif 43 49 REAL, SAVE, ALLOCATABLE :: d_t_oli(:,:) … … 188 194 allocate(d_u_ajs(klon,klev),d_v_ajs(klon,klev)) 189 195 allocate(d_t_eva(klon,klev),d_q_eva(klon,klev)) 196 allocate(d_t_lscst(klon,klev),d_q_lscst(klon,klev)) 197 allocate(d_t_lscth(klon,klev),d_q_lscth(klon,klev)) 198 allocate(plul_st(klon),plul_th(klon)) 190 199 allocate(d_t_vdf(klon,klev),d_q_vdf(klon,klev)) 191 200 allocate(d_u_vdf(klon,klev),d_v_vdf(klon,klev)) … … 265 274 deallocate(d_u_ajs,d_v_ajs) 266 275 deallocate(d_t_eva,d_q_eva) 276 deallocate(d_t_lscst,d_q_lscst) 277 deallocate(d_t_lscth,d_q_lscth) 278 deallocate(plul_th,plul_th) 267 279 deallocate(d_t_vdf,d_q_vdf) 268 280 deallocate(d_u_vdf,d_v_vdf) -
LMDZ5/trunk/libf/phylmd/phys_output_mod.F90
r1492 r1507 499 499 type(ctrl_out),save :: o_dteva = ctrl_out((/ 4, 10, 10, 10, 10 /),'dteva') 500 500 type(ctrl_out),save :: o_dqeva = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqeva') 501 502 !!!!!!!!!!!!!!!! Specifique thermiques 503 type(ctrl_out),save :: o_dqlscth = ctrl_out((/ 10, 10, 10, 10, 10 /),'dqlscth') 504 type(ctrl_out),save :: o_dqlscst = ctrl_out((/ 10, 10, 10, 10, 10 /),'dqlscst') 505 type(ctrl_out),save :: o_dtlscth = ctrl_out((/ 10, 10, 10, 10, 10 /),'dtlscth') 506 type(ctrl_out),save :: o_dtlscst = ctrl_out((/ 10, 10, 10, 10, 10 /),'dtlscst') 507 type(ctrl_out),save :: o_plulth = ctrl_out((/ 10, 10, 10, 10, 10 /),'plulth') 508 type(ctrl_out),save :: o_plulst = ctrl_out((/ 10, 10, 10, 10, 10 /),'plulst') 509 type(ctrl_out),save :: o_lmaxth = ctrl_out((/ 10, 10, 10, 10, 10 /),'lmaxth') 510 type(ctrl_out),save :: o_ptconvth = ctrl_out((/ 10, 10, 10, 10, 10 /),'ptconvth') 511 !!!!!!!!!!!!!!!!!!!!!!!! 512 513 501 514 type(ctrl_out),save :: o_ptconv = ctrl_out((/ 4, 10, 10, 10, 10 /),'ptconv') 502 515 type(ctrl_out),save :: o_ratqs = ctrl_out((/ 4, 10, 10, 10, 10 /),'ratqs') … … 1161 1174 ! Wakes 1162 1175 IF(iflag_con.EQ.3) THEN 1163 IF (iflag_wake == 1) THEN1176 IF (iflag_wake >= 1) THEN 1164 1177 CALL histdef2d(iff,o_ale_wk%flag,o_ale_wk%name, "ALE WK", "m2/s2") 1165 1178 CALL histdef2d(iff,o_alp_wk%flag,o_alp_wk%name, "ALP WK", "m2/s2") … … 1193 1206 1194 1207 if(iflag_thermals.gt.1) THEN 1208 CALL histdef3d(iff,o_dqlscth%flag,o_dqlscth%name, "dQ therm.", "(kg/kg)/s") 1209 CALL histdef3d(iff,o_dqlscst%flag,o_dqlscst%name, "dQ strat.", "(kg/kg)/s") 1210 CALL histdef3d(iff,o_dtlscth%flag,o_dtlscth%name, "dQ therm.", "K/s") 1211 CALL histdef3d(iff,o_dtlscst%flag,o_dtlscst%name, "dQ strat.", "K/s") 1212 CALL histdef2d(iff,o_plulth%flag,o_plulth%name, "Rainfall therm.", "K/s") 1213 CALL histdef2d(iff,o_plulst%flag,o_plulst%name, "Rainfall strat.", "K/s") 1214 CALL histdef2d(iff,o_lmaxth%flag,o_lmaxth%name, "Upper level thermals", "") 1215 CALL histdef3d(iff,o_ptconvth%flag,o_ptconvth%name, "POINTS CONVECTIFS therm.", " ") 1195 1216 CALL histdef3d(iff,o_f_th%flag,o_f_th%name, "Thermal plume mass flux", "K/s") 1196 1217 CALL histdef3d(iff,o_e_th%flag,o_e_th%name,"Thermal plume entrainment","K/s") -
LMDZ5/trunk/libf/phylmd/phys_output_write.h
r1492 r1507 583 583 IF (o_mc%flag(iff)<=lev_files(iff)) THEN 584 584 if(iflag_thermals.gt.1)then 585 zx_tmp_fi3d=dnwd+dnwd0+upwd+fm_therm 585 zx_tmp_fi3d=dnwd+dnwd0+upwd+fm_therm(:,1:klev) 586 586 else 587 587 zx_tmp_fi3d=dnwd+dnwd0+upwd … … 708 708 ! Wakes 709 709 IF (iflag_con.EQ.3) THEN 710 IF (iflag_wake .EQ.1) THEN710 IF (iflag_wake>=1) THEN 711 711 IF (o_ale_wk%flag(iff)<=lev_files(iff)) THEN 712 712 CALL histwrite_phy(nid_files(iff),o_ale_wk%name,itau_w,ale_wake) … … 763 763 & o_dqwak%name,itau_w,zx_tmp_fi3d) 764 764 ENDIF 765 ENDIF ! iflag_wake .EQ.1765 ENDIF ! iflag_wake>=1 766 766 767 767 IF (o_Vprecip%flag(iff)<=lev_files(iff)) THEN … … 1356 1356 ENDIF 1357 1357 1358 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1359 ! Sorties specifiques a la separation thermiques/non thermiques 1360 if (iflag_thermals>1) then 1361 1362 IF (o_dtlscth%flag(iff)<=lev_files(iff)) THEN 1363 zx_tmp_fi3d(1:klon,1:klev)=d_t_lscth(1:klon,1:klev)/pdtphys 1364 CALL 1365 s histwrite_phy(nid_files(iff),o_dtlscth%name,itau_w,zx_tmp_fi3d) 1366 ENDIF 1367 1368 IF (o_dtlscst%flag(iff)<=lev_files(iff)) THEN 1369 zx_tmp_fi3d(1:klon,1:klev)=d_t_lscst(1:klon,1:klev)/pdtphys 1370 CALL 1371 s histwrite_phy(nid_files(iff),o_dtlscst%name,itau_w,zx_tmp_fi3d) 1372 ENDIF 1373 1374 IF (o_dqlscth%flag(iff)<=lev_files(iff)) THEN 1375 zx_tmp_fi3d(1:klon,1:klev)=d_q_lscth(1:klon,1:klev)/pdtphys 1376 CALL 1377 s histwrite_phy(nid_files(iff),o_dqlscth%name,itau_w,zx_tmp_fi3d) 1378 ENDIF 1379 1380 IF (o_dqlscst%flag(iff)<=lev_files(iff)) THEN 1381 zx_tmp_fi3d(1:klon,1:klev)=d_q_lscst(1:klon,1:klev)/pdtphys 1382 CALL 1383 s histwrite_phy(nid_files(iff),o_dqlscst%name,itau_w,zx_tmp_fi3d) 1384 ENDIF 1385 1386 IF (o_plulth%flag(iff)<=lev_files(iff)) THEN 1387 CALL histwrite_phy(nid_files(iff),o_plulth%name,itau_w,plul_th) 1388 ENDIF 1389 1390 IF (o_plulst%flag(iff)<=lev_files(iff)) THEN 1391 CALL histwrite_phy(nid_files(iff),o_plulst%name,itau_w,plul_st) 1392 ENDIF 1393 1394 do k=1,klev 1395 do i=1,klon 1396 if (ptconvth(i,k)) then 1397 zx_tmp_fi3d(i,k)=1. 1398 else 1399 zx_tmp_fi3d(i,k)=0. 1400 endif 1401 enddo 1402 enddo 1403 IF (o_ptconvth%flag(iff)<=lev_files(iff)) THEN 1404 CALL 1405 s histwrite_phy(nid_files(iff),o_ptconvth%name,itau_w,zx_tmp_fi3d) 1406 ENDIF 1407 1408 do i=1,klon 1409 zx_tmp_fi2d(1:klon)=lmax_th(:) 1410 enddo 1411 IF (o_ptconvth%flag(iff)<=lev_files(iff)) THEN 1412 CALL 1413 s histwrite_phy(nid_files(iff),o_lmaxth%name,itau_w,zx_tmp_fi2d) 1414 ENDIF 1415 1416 endif ! iflag_thermals>1 1417 1418 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1419 1358 1420 IF (o_dtvdf%flag(iff)<=lev_files(iff)) THEN 1359 1421 zx_tmp_fi3d(1:klon,1:klev)=d_t_vdf(1:klon,1:klev)/pdtphys … … 1433 1495 ENDIF 1434 1496 1435 IF (o_ f0_th%flag(iff)<=lev_files(iff)) THEN1436 CALL histwrite_phy(nid_files(iff),o_zmax_th%name,itau_w,zmax0)1497 IF (o_zmax_th%flag(iff)<=lev_files(iff)) THEN 1498 CALL histwrite_phy(nid_files(iff),o_zmax_th%name,itau_w,zmax_th) 1437 1499 ENDIF 1438 1500 -
LMDZ5/trunk/libf/phylmd/physiq.F
r1506 r1507 173 173 save iflag_ratqs 174 174 c$OMP THREADPRIVATE(iflag_ratqs) 175 real facteur,zfratqs1,zfratqs2 176 175 177 REAL lambda_th(klon,klev),zz,znum,zden 176 178 REAL wmax_th(klon) … … 924 926 save fact_cldcon,facttemps 925 927 c$OMP THREADPRIVATE(fact_cldcon,facttemps) 926 real facteur927 928 928 929 integer iflag_cldcon … … 1440 1441 cCR:04.12.07: initialisations poches froides 1441 1442 c Controle de ALE et ALP pour la fermeture convective (jyg) 1442 if (iflag_wake .eq.1) then1443 if (iflag_wake>=1) then 1443 1444 CALL ini_wake(0.,0.,it_wape_prescr,wape_prescr,fip_prescr 1444 1445 s ,alp_bl_prescr, ale_bl_prescr) … … 1934 1935 ! ajout des tendances de la diffusion turbulente 1935 1936 CALL add_phys_tend(d_u_vdf,d_v_vdf,d_t_vdf,d_q_vdf,dql0,'vdf') 1937 1936 1938 !----------------------------------------------------------------------------------------- 1937 1939 … … 2054 2056 do k=1,klev 2055 2057 do i=1,klon 2056 if (iflag_wake .eq.1) then2058 if (iflag_wake>=1) then 2057 2059 t_wake(i,k) = t_seri(i,k) 2058 2060 . +(1-wake_s(i))*wake_deltat(i,k) … … 2071 2073 enddo 2072 2074 enddo 2075 2073 2076 2074 2077 cc-- Calcul de l'energie disponible ALE (J/kg) et de la puissance disponible ALP (W/m2) … … 2081 2084 c 2082 2085 ccalcul de ale_wake et alp_wake 2083 if (iflag_wake .eq.1) then2086 if (iflag_wake>=1) then 2084 2087 if (itap .le. it_wape_prescr) then 2085 2088 do i = 1,klon … … 2343 2346 cpour la couche limite diffuse pour l instant 2344 2347 c 2345 if (iflag_wake .eq.1) then2348 if (iflag_wake>=1) then 2346 2349 DO k=1,klev 2347 2350 DO i=1,klon … … 2358 2361 ENDDO 2359 2362 ENDDO 2363 2364 if (iflag_wake==2) then 2365 dt_dwn(:,:)= dt_dwn(:,:)+(d_t_eva(:,:)+d_t_lsc(:,:))/dtime 2366 dq_dwn(:,:)= dq_dwn(:,:)+(d_q_eva(:,:)+d_q_lsc(:,:))/dtime 2367 endif 2360 2368 c 2361 2369 ccalcul caracteristiques de la poche froide … … 2474 2482 endif 2475 2483 2484 do i=1,klon 2485 zmax_th(i)=pphi(i,lmax_th(i))/rg 2486 enddo 2487 2476 2488 endif 2477 2489 … … 2604 2616 enddo 2605 2617 2606 else 2618 else if (iflag_ratqs.eq.2) then 2607 2619 2608 2620 do k=1,klev … … 2620 2632 enddo 2621 2633 enddo 2634 2635 else if (iflag_ratqs==3) then 2636 do k=1,klev 2637 ratqss(:,k)=ratqsbas+(ratqshaut-ratqsbas) 2638 s *min( ((paprs(:,1)-pplay(:,k))/70000.)**2 , 1. ) 2639 enddo 2640 2641 else if (iflag_ratqs==4) then 2642 do k=1,klev 2643 ratqss(:,k)=ratqsbas+0.5*(ratqshaut-ratqsbas) 2644 s *( tanh( (50000.-pplay(:,k))/20000.) + 1.) 2645 enddo 2646 2622 2647 endif 2623 2648 … … 2659 2684 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2660 2685 ratqs(:,:)=max(ratqs(:,:),ratqss(:,:)) 2661 else 2686 else if (iflag_cldcon<=6) then 2662 2687 ! on ne prend que le ratqs stable pour fisrtilp 2663 2688 ratqs(:,:)=ratqss(:,:) 2689 else 2690 zfratqs1=exp(-pdtphys/10800.) 2691 zfratqs2=exp(-pdtphys/10800.) 2692 ! print*,'RAPPEL RATQS 1 ',zfratqs1,zfratqs2 2693 ! s ,ratqss(1,14),ratqs(1,14),ratqsc(1,14) 2694 do k=1,klev 2695 do i=1,klon 2696 if (ratqsc(i,k).gt.1.e-10) then 2697 ratqs(i,k)=ratqs(i,k)*zfratqs2 2698 s +(iflag_cldcon/100.)*ratqsc(i,k)*(1.-zfratqs2) 2699 endif 2700 ratqs(i,k)=min(ratqs(i,k)*zfratqs1 2701 s +ratqss(i,k)*(1.-zfratqs1),0.5) 2702 enddo 2703 enddo 2664 2704 endif 2705 2665 2706 2666 2707 … … 2844 2885 if (iflag_cldcon>=5) then 2845 2886 2846 ptconvth(:,:)=fm_therm(:,:)>0. 2887 do k=1,klev 2888 ptconvth(:,k)=fm_therm(:,k+1)>0. 2889 enddo 2847 2890 2848 2891 if (iflag_coupl==4) then … … 2890 2933 2891 2934 ENDIF 2935 2936 ! plulsc(:)=0. 2937 ! do k=1,klev,-1 2938 ! do i=1,klon 2939 ! zzz=prfl(:,k)+psfl(:,k) 2940 ! if (.not.ptconvth.zzz.gt.0.) 2941 ! enddo prfl, psfl, 2942 ! enddo 2892 2943 c 2893 2944 c 2. NUAGES STARTIFORMES … … 3355 3406 IF (MOD(itap,NINT(freq_cosp/dtime)).EQ.0) THEN 3356 3407 3357 !print*,'freq_cosp',freq_cosp3408 print*,'freq_cosp',freq_cosp 3358 3409 mr_ozone=wo(:, :, 1) * dobson_u * 1e3 / zmasse 3359 3410 ! print*,'Dans physiq.F avant appel cosp ref_liq,ref_ice=', … … 3714 3765 3715 3766 3767 3768 c============================================================= 3769 ! Separation entre thermiques et non thermiques dans les sorties 3770 ! de fisrtilp 3771 c============================================================= 3772 3773 if (iflag_thermals>1) then 3774 d_t_lscth=0. 3775 d_t_lscst=0. 3776 d_q_lscth=0. 3777 d_q_lscst=0. 3778 do k=1,klev 3779 do i=1,klon 3780 if (ptconvth(i,k)) then 3781 d_t_lscth(i,k)=d_t_eva(i,k)+d_t_lsc(i,k) 3782 d_q_lscth(i,k)=d_q_eva(i,k)+d_q_lsc(i,k) 3783 else 3784 d_t_lscst(i,k)=d_t_eva(i,k)+d_t_lsc(i,k) 3785 d_q_lscst(i,k)=d_q_eva(i,k)+d_q_lsc(i,k) 3786 endif 3787 enddo 3788 enddo 3789 3790 do i=1,klon 3791 plul_st(i)=prfl(i,lmax_th(i)+1)+psfl(i,lmax_th(i)+1) 3792 plul_th(i)=prfl(i,1)+psfl(i,1) 3793 enddo 3794 endif 3795 3796 3716 3797 #include "phys_output_write.h" 3717 3798
Note: See TracChangeset
for help on using the changeset viewer.