Changeset 1539 for LMDZ5/trunk/libf/phylmd/physiq.F
- Timestamp:
- Jun 9, 2011, 12:13:33 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/physiq.F
r1538 r1539 44 44 45 45 46 !IM stations CFMIP 47 USE CFMIP_point_locations 46 48 IMPLICIT none 47 49 c====================================================================== … … 699 701 cAA 700 702 REAL coefh(klon,klev) ! coef d'echange pour phytrac, valable pour 2<=k<=klev 703 REAL coefm(klon,klev) ! coef d'echange pour U, V 701 704 REAL u1(klon) ! vents dans la premiere couche U 702 705 REAL v1(klon) ! vents dans la premiere couche V … … 1011 1014 REAL zx_tmp_fi2d(klon) ! variable temporaire grille physique 1012 1015 REAL zx_tmp_fi3d(klon,klev) ! variable temporaire pour champs 3D 1016 REAL zx_tmp_fi3d1(klon,klev+1) !variable temporaire pour champs 3D (kelvp1) 1013 1017 c#ifdef histNMC 1014 1018 cym A voir plus tard !!!! … … 1041 1045 REAL ue_lay(klon,klev) ! transport zonal de l'energie a chaque niveau vert. 1042 1046 REAL uq_lay(klon,klev) ! transport zonal de l'eau a chaque niveau vert. 1043 c1044 cIM 280405 END1045 1047 c 1046 1048 INTEGER nhori, nvert, nvert1, nvert3 … … 1188 1190 REAL grain(1), gtsol(1), gt2m(1), gprw(1) 1189 1191 1192 cIM stations CFMIP 1193 INTEGER, SAVE :: nCFMIP 1194 c$OMP THREADPRIVATE(nCFMIP) 1195 INTEGER, PARAMETER :: npCFMIP=120 1196 INTEGER, ALLOCATABLE, SAVE :: tabCFMIP(:) 1197 REAL, ALLOCATABLE, SAVE :: lonCFMIP(:), latCFMIP(:) 1198 c$OMP THREADPRIVATE(tabCFMIP, lonCFMIP, latCFMIP) 1199 INTEGER, ALLOCATABLE, SAVE :: tabijGCM(:) 1200 REAL, ALLOCATABLE, SAVE :: lonGCM(:), latGCM(:) 1201 c$OMP THREADPRIVATE(tabijGCM, lonGCM, latGCM) 1202 INTEGER, ALLOCATABLE, SAVE :: iGCM(:), jGCM(:) 1203 c$OMP THREADPRIVATE(iGCM, jGCM) 1204 logical, dimension(nfiles) :: phys_out_filestations 1205 logical, parameter :: lNMC=.FALSE. 1206 1207 cIM betaCRF 1208 REAL, SAVE :: pfree, beta_pbl, beta_free 1209 c$OMP THREADPRIVATE(pfree, beta_pbl, beta_free) 1210 REAL, SAVE :: lon1_beta, lon2_beta, lat1_beta, lat2_beta 1211 c$OMP THREADPRIVATE(lon1_beta, lon2_beta, lat1_beta, lat2_beta) 1212 LOGICAL, SAVE :: mskocean_beta 1213 c$OMP THREADPRIVATE(mskocean_beta) 1214 REAL, dimension(klon, klev) :: beta ! facteur sur cldtaurad et cldemirad pour evaluer les retros liees aux CRF 1215 REAL, dimension(klon, klev) :: cldtaurad ! epaisseur optique pour radlwsw,COSP 1216 REAL, dimension(klon, klev) :: cldemirad ! emissivite pour radlwsw,COSP 1217 1190 1218 cIM for NMC files 1191 1219 missing_val=nf90_fill_real … … 1472 1500 1473 1501 c================================================================================ 1474 1502 cIM stations CFMIP 1503 nCFMIP=npCFMIP 1504 OPEN(98,file='npCFMIP_param.data',status='old', 1505 $ form='formatted',err=999) 1506 READ(98,*,end=998) nCFMIP 1507 998 CONTINUE 1508 CLOSE(98) 1509 CONTINUE 1510 IF(nCFMIP.GT.npCFMIP) THEN 1511 print*,'nCFMIP > npCFMIP : augmenter npCFMIP et recompiler' 1512 CALL abort 1513 else 1514 print*,'physiq npCFMIP=',npCFMIP,'nCFMIP=',nCFMIP 1515 ENDIF 1516 c 1517 ALLOCATE(tabCFMIP(nCFMIP)) 1518 ALLOCATE(lonCFMIP(nCFMIP), latCFMIP(nCFMIP)) 1519 ALLOCATE(tabijGCM(nCFMIP)) 1520 ALLOCATE(lonGCM(nCFMIP), latGCM(nCFMIP)) 1521 ALLOCATE(iGCM(nCFMIP), jGCM(nCFMIP)) 1522 c 1523 c lecture des nCFMIP stations CFMIP, de leur numero 1524 c et des coordonnees geographiques lonCFMIP, latCFMIP 1525 c 1526 CALL read_CFMIP_point_locations(nCFMIP, tabCFMIP, 1527 $lonCFMIP, latCFMIP) 1528 c 1529 c identification des 1530 c 1) coordonnees lonGCM, latGCM des points CFMIP dans la grille de LMDZ 1531 c 2) indices points tabijGCM de la grille physique 1d sur klon points 1532 c 3) indices iGCM, jGCM de la grille physique 2d 1533 c 1534 CALL LMDZ_CFMIP_point_locations(nCFMIP, lonCFMIP, latCFMIP, 1535 $tabijGCM, lonGCM, latGCM, iGCM, jGCM) 1536 c 1537 999 CONTINUE 1475 1538 ENDIF !debut 1476 1539 1477 1540 DO i=1,klon 1478 1541 rugoro(i) = f_rugoro * MAX(1.0e-05, zstd(i)*zsig(i)/2.0) … … 1512 1575 . lmt_pas 1513 1576 c 1514 cIM 030306 END1515 1516 1577 capemaxcels = 't_max(X)' 1517 1578 t2mincels = 't_min(X)' … … 1530 1591 1531 1592 c$OMP MASTER 1532 call phys_output_open(jjmp1,nlevSTD,clevSTD,nbteta, 1533 & ctetaSTD,dtime,ok_veget, 1534 & type_ocean,iflag_pbl,ok_mensuel,ok_journe, 1535 & ok_hf,ok_instan,ok_LES,ok_ade,ok_aie, 1536 & read_climoz, new_aod, aerosol_couple 1593 call phys_output_open(rlon,rlat,nCFMIP,tabijGCM, 1594 & iGCM,jGCM,lonGCM,latGCM, 1595 & jjmp1,nlevSTD,clevSTD, 1596 & nbteta, ctetaSTD, dtime,ok_veget, 1597 & type_ocean,iflag_pbl,ok_mensuel,ok_journe, 1598 & ok_hf,ok_instan,ok_LES,ok_ade,ok_aie, 1599 & read_climoz, phys_out_filestations, 1600 & new_aod, aerosol_couple 1537 1601 & ) 1538 1602 c$OMP END MASTER … … 1555 1619 #endif 1556 1620 1557 cIM 250308bad guide ecrit_hf2mth = 30*1/ecrit_hf1558 1621 ecrit_hf2mth = ecrit_mth/ecrit_hf 1559 1622 … … 1568 1631 ecrit_reg = ecrit_reg * un_jour 1569 1632 ecrit_tra = ecrit_tra * un_jour 1570 ecrit_ISCCP = ecrit_ISCCP * un_jour1571 1633 ecrit_LES = ecrit_LES * un_jour 1572 1634 c … … 1574 1636 . ecrit_hf,ecrit_day,ecrit_mth,ecrit_reg,ecrit_tra,ecrit_ISCCP, 1575 1637 . ecrit_hf2mth 1576 cIM 030306 END1577 1578 1638 1579 1639 cXXXPB Positionner date0 pour initialisation de ORCHIDEE … … 1633 1693 END IF 1634 1694 C$omp end single 1695 c 1696 cIM betaCRF 1697 pfree=70000. !Pa 1698 beta_pbl=1. 1699 beta_free=1. 1700 lon1_beta=-180. 1701 lon2_beta=+180. 1702 lat1_beta=90. 1703 lat2_beta=-90. 1704 mskocean_beta=.FALSE. 1705 1706 OPEN(99,file='beta_crf.data',status='old', 1707 $ form='formatted',err=9999) 1708 READ(99,*,end=9998) pfree 1709 READ(99,*,end=9998) beta_pbl 1710 READ(99,*,end=9998) beta_free 1711 READ(99,*,end=9998) lon1_beta 1712 READ(99,*,end=9998) lon2_beta 1713 READ(99,*,end=9998) lat1_beta 1714 READ(99,*,end=9998) lat2_beta 1715 READ(99,*,end=9998) mskocean_beta 1716 9998 Continue 1717 CLOSE(99) 1718 9999 Continue 1719 WRITE(*,*)'pfree=',pfree 1720 WRITE(*,*)'beta_pbl=',beta_pbl 1721 WRITE(*,*)'beta_free=',beta_free 1722 WRITE(*,*)'lon1_beta=',lon1_beta 1723 WRITE(*,*)'lon2_beta=',lon2_beta 1724 WRITE(*,*)'lat1_beta=',lat1_beta 1725 WRITE(*,*)'lat2_beta=',lat2_beta 1726 WRITE(*,*)'mskocean_beta=',mskocean_beta 1635 1727 ENDIF 1636 1728 ! … … 1949 2041 s zxtsol, zxfluxlat, zt2m, qsat2m, 1950 2042 s d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, 1951 s coefh, slab_wfbils,2043 s coefh, coefm, slab_wfbils, 1952 2044 d qsol, zq2m, s_pblh, s_lcl, 1953 2045 d s_capCL, s_oliqCL, s_cteiCL,s_pblT, … … 1965 2057 ! ajout des tendances de la diffusion turbulente 1966 2058 CALL add_phys_tend(d_u_vdf,d_v_vdf,d_t_vdf,d_q_vdf,dql0,'vdf') 1967 1968 2059 !----------------------------------------------------------------------------------------- 1969 2060 … … 2103 2194 enddo 2104 2195 enddo 2105 2106 2196 2107 2197 cc-- Calcul de l'energie disponible ALE (J/kg) et de la puissance disponible ALP (W/m2) … … 2524 2614 2525 2615 2526 2527 2616 c Ajustement sec 2528 2617 c ============== … … 2740 2829 2741 2830 2742 2743 2831 c 2744 2832 c Appeler le processus de condensation a grande echelle … … 2873 2961 & tausum_aero, tau3d_aero) 2874 2962 ELSE 2875 cIM 170310 BEG2876 2963 tausum_aero(:,:,:) = 0. 2877 cIM 170310 END2878 2964 tau_aero(:,:,:,:) = 0. 2879 2965 piz_aero(:,:,:,:) = 0. … … 3149 3235 endif 3150 3236 c 3237 cIM betaCRF 3238 c 3239 cldtaurad = cldtau 3240 cldemirad = cldemi 3241 c 3242 if(lon1_beta.EQ.-180..AND.lon2_beta.EQ.180..AND. 3243 $lat1_beta.EQ.90..AND.lat2_beta.EQ.-90.) THEN 3244 c 3245 c global 3246 c 3247 DO k=1, klev 3248 DO i=1, klon 3249 if (pplay(i,k).GE.pfree) THEN 3250 beta(i,k) = beta_pbl 3251 else 3252 beta(i,k) = beta_free 3253 endif 3254 if (mskocean_beta) THEN 3255 beta(i,k) = beta(i,k) * pctsrf(i,is_oce) 3256 endif 3257 cldtaurad(i,k) = cldtau(i,k) * beta(i,k) 3258 cldemirad(i,k) = cldemi(i,k) * beta(i,k) 3259 ENDDO 3260 ENDDO 3261 c 3262 else 3263 c 3264 c regional 3265 c 3266 DO k=1, klev 3267 DO i=1,klon 3268 c 3269 if (rlon(i).ge.lon1_beta.AND.rlon(i).le.lon2_beta.AND. 3270 $ rlat(i).le.lat1_beta.AND.rlat(i).ge.lat2_beta) THEN 3271 if (pplay(i,k).GE.pfree) THEN 3272 beta(i,k) = beta_pbl 3273 else 3274 beta(i,k) = beta_free 3275 endif 3276 if (mskocean_beta) THEN 3277 beta(i,k) = beta(i,k) * pctsrf(i,is_oce) 3278 endif 3279 cldtaurad(i,k) = cldtau(i,k) * beta(i,k) 3280 cldemirad(i,k) = cldemi(i,k) * beta(i,k) 3281 endif 3282 c 3283 ENDDO 3284 ENDDO 3285 c 3286 endif 3287 c 3151 3288 c Appeler le rayonnement mais calculer tout d'abord l'albedo du sol. 3152 3289 c … … 3177 3314 e paprs, pplay,zxtsol,albsol1, albsol2, t_seri,q_seri, 3178 3315 e wo(:, :, 1), 3179 e cldfra, cldemi , cldtau,3316 e cldfra, cldemirad, cldtaurad, 3180 3317 s heat,heat0,cool,cool0,radsol,albpla, 3181 3318 s topsw,toplw,solsw,sollw, … … 3195 3332 #endif 3196 3333 ELSE 3197 3334 c 3335 cIM calcul radiatif pour le cas actuel 3336 c 3337 RCO2 = RCO2_act 3338 RCH4 = RCH4_act 3339 RN2O = RN2O_act 3340 RCFC11 = RCFC11_act 3341 RCFC12 = RCFC12_act 3342 c 3198 3343 CALL radlwsw 3199 3344 e (dist, rmu0, fract, 3200 3345 e paprs, pplay,zxtsol,albsol1, albsol2, 3201 3346 e t_seri,q_seri,wo, 3202 e cldfra, cldemi , cldtau,3347 e cldfra, cldemirad, cldtaurad, 3203 3348 e ok_ade, ok_aie, 3204 3349 e tau_aero, piz_aero, cg_aero, … … 3218 3363 o topswcf_aero, solswcf_aero) 3219 3364 3220 3365 c 3366 cIM 2eme calcul radiatif pour le cas perturbe ou au moins un 3367 cIM des taux doit etre different du taux actuel 3368 cIM Par defaut on a les taux perturbes egaux aux taux actuels 3369 c 3370 if (RCO2_per.NE.RCO2_act.OR.RCH4_per.NE.RCH4_act.OR. 3371 $RN2O_per.NE.RN2O_act.OR.RCFC11_per.NE.RCFC11_act.OR. 3372 $RCFC12_per.NE.RCFC12_act) THEN 3373 c 3374 RCO2 = RCO2_per 3375 RCH4 = RCH4_per 3376 RN2O = RN2O_per 3377 RCFC11 = RCFC11_per 3378 RCFC12 = RCFC12_per 3379 c 3380 CALL radlwsw 3381 e (dist, rmu0, fract, 3382 e paprs, pplay,zxtsol,albsol1, albsol2, 3383 e t_seri,q_seri,wo, 3384 e cldfra, cldemi, cldtau, 3385 e ok_ade, ok_aie, 3386 e tau_aero, piz_aero, cg_aero, 3387 e cldtaupi,new_aod, 3388 e zqsat, flwc, fiwc, 3389 s heatp,heat0p,coolp,cool0p,radsolp,albplap, 3390 s topswp,toplwp,solswp,sollwp, 3391 s sollwdownp, 3392 s topsw0p,toplw0p,solsw0p,sollw0p, 3393 s lwdn0p, lwdnp, lwup0p, lwupp, 3394 s swdn0p, swdnp, swup0p, swupp, 3395 s topswad_aerop, solswad_aerop, 3396 s topswai_aerop, solswai_aerop, 3397 o topswad0_aerop, solswad0_aerop, 3398 o topsw_aerop, topsw0_aerop, 3399 o solsw_aerop, solsw0_aerop, 3400 o topswcf_aerop, solswcf_aerop) 3401 endif 3402 c 3221 3403 ENDIF ! aerosol_couple 3222 3404 itaprad = 0 … … 3384 3566 c 3385 3567 c ajout des tendances 3386 CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0,' lif')3568 CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0,'hin') 3387 3569 3388 3570 ENDIF … … 3397 3579 call writefield_phy('v_seri',v_seri,llm) 3398 3580 call writefield_phy('t_seri',t_seri,llm) 3399 3581 call writefield_phy('q_seri',q_seri,llm) 3400 3582 endif 3401 3583 … … 3465 3647 $ prfl(:,1:klev),psfl(:,1:klev), 3466 3648 $ pmflxr(:,1:klev),pmflxs(:,1:klev), 3467 $ mr_ozone,cldtau , cldemi)3649 $ mr_ozone,cldtaurad, cldemirad) 3468 3650 3469 3651 ! L calipso2D,calipso3D,cfadlidar,parasolrefl,atb,betamol, … … 3616 3798 c 3617 3799 cIM initialisation 5eme fichier de sortie 3618 cIM ajoute 5eme niveau 170310 BEG3619 3800 twriteSTD(:,:,5)=tlevSTD(:,:) 3620 3801 qwriteSTD(:,:,5)=qlevSTD(:,:) … … 3624 3805 vwriteSTD(:,:,5)=vlevSTD(:,:) 3625 3806 wwriteSTD(:,:,5)=wlevSTD(:,:) 3807 c 3808 cIM initialisation 6eme fichier de sortie 3809 twriteSTD(:,:,6)=tlevSTD(:,:) 3810 qwriteSTD(:,:,6)=qlevSTD(:,:) 3811 rhwriteSTD(:,:,6)=rhlevSTD(:,:) 3812 phiwriteSTD(:,:,6)=philevSTD(:,:) 3813 uwriteSTD(:,:,6)=ulevSTD(:,:) 3814 vwriteSTD(:,:,6)=vlevSTD(:,:) 3815 wwriteSTD(:,:,6)=wlevSTD(:,:) 3626 3816 cIM for NMC files 3627 3817 DO n=1, nlevSTD3
Note: See TracChangeset
for help on using the changeset viewer.