Changeset 1534 for LMDZ4/branches/LMDZ4_AR5/libf/phylmd/physiq.F
- Timestamp:
- Jun 3, 2011, 7:28:17 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/branches/LMDZ4_AR5/libf/phylmd/physiq.F
r1533 r1534 42 42 use radlwsw_m, only: radlwsw 43 43 44 !IM stations CFMIP 45 USE CFMIP_point_locations 44 46 IMPLICIT none 45 47 c====================================================================== … … 676 678 cAA 677 679 REAL coefh(klon,klev) ! coef d'echange pour phytrac, valable pour 2<=k<=klev 680 REAL coefm(klon,klev) ! coef d'echange pour U, V 678 681 REAL u1(klon) ! vents dans la premiere couche U 679 682 REAL v1(klon) ! vents dans la premiere couche V … … 986 989 REAL zx_tmp_fi2d(klon) ! variable temporaire grille physique 987 990 REAL zx_tmp_fi3d(klon,klev) ! variable temporaire pour champs 3D 991 REAL zx_tmp_fi3d1(klon,klev+1) !variable temporaire pour champs 3D (kelvp1) 988 992 c#ifdef histNMC 989 993 cym A voir plus tard !!!! … … 1016 1020 REAL ue_lay(klon,klev) ! transport zonal de l'energie a chaque niveau vert. 1017 1021 REAL uq_lay(klon,klev) ! transport zonal de l'eau a chaque niveau vert. 1018 c1019 cIM 280405 END1020 1022 c 1021 1023 INTEGER nhori, nvert, nvert1, nvert3 … … 1159 1161 REAL grain(1), gtsol(1), gt2m(1), gprw(1) 1160 1162 1163 cIM stations CFMIP 1164 INTEGER, SAVE :: nCFMIP 1165 c$OMP THREADPRIVATE(nCFMIP) 1166 INTEGER, PARAMETER :: npCFMIP=120 1167 INTEGER, ALLOCATABLE, SAVE :: tabCFMIP(:) 1168 REAL, ALLOCATABLE, SAVE :: lonCFMIP(:), latCFMIP(:) 1169 c$OMP THREADPRIVATE(tabCFMIP, lonCFMIP, latCFMIP) 1170 INTEGER, ALLOCATABLE, SAVE :: tabijGCM(:) 1171 REAL, ALLOCATABLE, SAVE :: lonGCM(:), latGCM(:) 1172 c$OMP THREADPRIVATE(tabijGCM, lonGCM, latGCM) 1173 INTEGER, ALLOCATABLE, SAVE :: iGCM(:), jGCM(:) 1174 c$OMP THREADPRIVATE(iGCM, jGCM) 1175 logical, dimension(nfiles) :: phys_out_filestations 1176 logical, parameter :: lNMC=.FALSE. 1177 1178 cIM betaCRF 1179 REAL, SAVE :: pfree, beta_pbl, beta_free 1180 c$OMP THREADPRIVATE(pfree, beta_pbl, beta_free) 1181 REAL, SAVE :: lon1_beta, lon2_beta, lat1_beta, lat2_beta 1182 c$OMP THREADPRIVATE(lon1_beta, lon2_beta, lat1_beta, lat2_beta) 1183 LOGICAL, SAVE :: mskocean_beta 1184 c$OMP THREADPRIVATE(mskocean_beta) 1185 REAL, dimension(klon, klev) :: beta ! facteur sur cldtaurad et cldemirad pour evaluer les retros liees aux CRF 1186 REAL, dimension(klon, klev) :: cldtaurad ! epaisseur optique pour radlwsw,COSP 1187 REAL, dimension(klon, klev) :: cldemirad ! emissivite pour radlwsw,COSP 1188 1161 1189 cIM for NMC files 1162 1190 missing_val=nf90_fill_real … … 1443 1471 1444 1472 c================================================================================ 1445 1473 cIM stations CFMIP 1474 nCFMIP=npCFMIP 1475 OPEN(98,file='npCFMIP_param.data',status='old', 1476 $ form='formatted',err=999) 1477 READ(98,*,end=998) nCFMIP 1478 998 CONTINUE 1479 CLOSE(98) 1480 999 CONTINUE 1481 IF(nCFMIP.GT.npCFMIP) THEN 1482 print*,'nCFMIP > npCFMIP : augmenter npCFMIP et recompiler' 1483 CALL abort 1484 else 1485 print*,'physiq npCFMIP=',npCFMIP,'nCFMIP=',nCFMIP 1486 ENDIF 1487 c 1488 ALLOCATE(tabCFMIP(nCFMIP)) 1489 ALLOCATE(lonCFMIP(nCFMIP), latCFMIP(nCFMIP)) 1490 ALLOCATE(tabijGCM(nCFMIP)) 1491 ALLOCATE(lonGCM(nCFMIP), latGCM(nCFMIP)) 1492 ALLOCATE(iGCM(nCFMIP), jGCM(nCFMIP)) 1493 c 1494 c lecture des nCFMIP stations CFMIP, de leur numero 1495 c et des coordonnees geographiques lonCFMIP, latCFMIP 1496 c 1497 CALL read_CFMIP_point_locations(nCFMIP, tabCFMIP, 1498 $lonCFMIP, latCFMIP) 1499 c 1500 c identification des 1501 c 1) coordonnees lonGCM, latGCM des points CFMIP dans la grille de LMDZ 1502 c 2) indices points tabijGCM de la grille physique 1d sur klon points 1503 c 3) indices iGCM, jGCM de la grille physique 2d 1504 c 1505 CALL LMDZ_CFMIP_point_locations(nCFMIP, lonCFMIP, latCFMIP, 1506 $tabijGCM, lonGCM, latGCM, iGCM, jGCM) 1507 c 1446 1508 ENDIF !debut 1447 1509 1448 1510 DO i=1,klon 1449 1511 rugoro(i) = f_rugoro * MAX(1.0e-05, zstd(i)*zsig(i)/2.0) … … 1483 1545 . lmt_pas 1484 1546 c 1485 cIM 030306 END1486 1487 1547 capemaxcels = 't_max(X)' 1488 1548 t2mincels = 't_min(X)' … … 1501 1561 1502 1562 c$OMP MASTER 1503 call phys_output_open(jjmp1,nlevSTD,clevSTD,nbteta, 1504 & ctetaSTD,dtime,ok_veget, 1505 & type_ocean,iflag_pbl,ok_mensuel,ok_journe, 1506 & ok_hf,ok_instan,ok_LES,ok_ade,ok_aie, 1507 & read_climoz, new_aod, aerosol_couple) 1563 call phys_output_open(rlon,rlat,nCFMIP,tabijGCM, 1564 & iGCM,jGCM,lonGCM,latGCM, 1565 & jjmp1,nlevSTD,clevSTD, 1566 & nbteta, ctetaSTD, dtime,ok_veget, 1567 & type_ocean,iflag_pbl,ok_mensuel,ok_journe, 1568 & ok_hf,ok_instan,ok_LES,ok_ade,ok_aie, 1569 & read_climoz, phys_out_filestations, 1570 & new_aod, aerosol_couple 1571 & ) 1508 1572 c$OMP END MASTER 1509 1573 c$OMP BARRIER … … 1525 1589 #endif 1526 1590 1527 cIM 250308bad guide ecrit_hf2mth = 30*1/ecrit_hf1528 1591 ecrit_hf2mth = ecrit_mth/ecrit_hf 1529 1592 … … 1538 1601 ecrit_reg = ecrit_reg * un_jour 1539 1602 ecrit_tra = ecrit_tra * un_jour 1540 ecrit_ISCCP = ecrit_ISCCP * un_jour1541 1603 ecrit_LES = ecrit_LES * un_jour 1542 1604 c … … 1544 1606 . ecrit_hf,ecrit_day,ecrit_mth,ecrit_reg,ecrit_tra,ecrit_ISCCP, 1545 1607 . ecrit_hf2mth 1546 cIM 030306 END1547 1548 1608 1549 1609 cXXXPB Positionner date0 pour initialisation de ORCHIDEE … … 1603 1663 END IF 1604 1664 C$omp end single 1665 c 1666 cIM betaCRF 1667 pfree=70000. !Pa 1668 beta_pbl=1. 1669 beta_free=1. 1670 lon1_beta=-180. 1671 lon2_beta=+180. 1672 lat1_beta=90. 1673 lat2_beta=-90. 1674 mskocean_beta=.FALSE. 1675 1676 OPEN(99,file='beta_crf.data',status='old', 1677 $ form='formatted',err=9999) 1678 READ(99,*,end=9998) pfree 1679 READ(99,*,end=9998) beta_pbl 1680 READ(99,*,end=9998) beta_free 1681 READ(99,*,end=9998) lon1_beta 1682 READ(99,*,end=9998) lon2_beta 1683 READ(99,*,end=9998) lat1_beta 1684 READ(99,*,end=9998) lat2_beta 1685 READ(99,*,end=9998) mskocean_beta 1686 9998 Continue 1687 CLOSE(99) 1688 9999 Continue 1689 WRITE(*,*)'pfree=',pfree 1690 WRITE(*,*)'beta_pbl=',beta_pbl 1691 WRITE(*,*)'beta_free=',beta_free 1692 WRITE(*,*)'lon1_beta=',lon1_beta 1693 WRITE(*,*)'lon2_beta=',lon2_beta 1694 WRITE(*,*)'lat1_beta=',lat1_beta 1695 WRITE(*,*)'lat2_beta=',lat2_beta 1696 WRITE(*,*)'mskocean_beta=',mskocean_beta 1605 1697 ENDIF 1606 1698 ! … … 1906 1998 s zxtsol, zxfluxlat, zt2m, qsat2m, 1907 1999 s d_t_vdf, d_q_vdf, d_u_vdf, d_v_vdf, 1908 s coefh, slab_wfbils,2000 s coefh, coefm, slab_wfbils, 1909 2001 d qsol, zq2m, s_pblh, s_lcl, 1910 2002 d s_capCL, s_oliqCL, s_cteiCL,s_pblT, … … 2933 3025 mass_solu_aero_pi(:,:) = ccm(:,:,2) 2934 3026 END IF 2935 3027 c 2936 3028 if (ok_newmicro) then 2937 3029 CALL newmicro (paprs, pplay,ok_newmicro, … … 2954 3046 endif 2955 3047 c 3048 cIM betaCRF 3049 c 3050 cldtaurad = cldtau 3051 cldemirad = cldemi 3052 c 3053 if(lon1_beta.EQ.-180..AND.lon2_beta.EQ.180..AND. 3054 $lat1_beta.EQ.90..AND.lat2_beta.EQ.-90.) THEN 3055 c 3056 c global 3057 c 3058 DO k=1, klev 3059 DO i=1, klon 3060 if (pplay(i,k).GE.pfree) THEN 3061 beta(i,k) = beta_pbl 3062 else 3063 beta(i,k) = beta_free 3064 endif 3065 if (mskocean_beta) THEN 3066 beta(i,k) = beta(i,k) * pctsrf(i,is_oce) 3067 endif 3068 cldtaurad(i,k) = cldtau(i,k) * beta(i,k) 3069 cldemirad(i,k) = cldemi(i,k) * beta(i,k) 3070 ENDDO 3071 ENDDO 3072 c 3073 else 3074 c 3075 c regional 3076 c 3077 DO k=1, klev 3078 DO i=1,klon 3079 c 3080 if (rlon(i).ge.lon1_beta.AND.rlon(i).le.lon2_beta.AND. 3081 $ rlat(i).le.lat1_beta.AND.rlat(i).ge.lat2_beta) THEN 3082 if (pplay(i,k).GE.pfree) THEN 3083 beta(i,k) = beta_pbl 3084 else 3085 beta(i,k) = beta_free 3086 endif 3087 if (mskocean_beta) THEN 3088 beta(i,k) = beta(i,k) * pctsrf(i,is_oce) 3089 endif 3090 cldtaurad(i,k) = cldtau(i,k) * beta(i,k) 3091 cldemirad(i,k) = cldemi(i,k) * beta(i,k) 3092 endif 3093 c 3094 ENDDO 3095 ENDDO 3096 c 3097 endif 3098 c 2956 3099 c Appeler le rayonnement mais calculer tout d'abord l'albedo du sol. 2957 3100 c … … 2982 3125 e paprs, pplay,zxtsol,albsol1, albsol2, t_seri,q_seri, 2983 3126 e wo(:, :, 1), 2984 e cldfra, cldemi , cldtau,3127 e cldfra, cldemirad, cldtaurad, 2985 3128 s heat,heat0,cool,cool0,radsol,albpla, 2986 3129 s topsw,toplw,solsw,sollw, … … 3000 3143 #endif 3001 3144 ELSE 3002 3145 c 3146 cIM calcul radiatif pour le cas actuel 3147 c 3148 RCO2 = RCO2_act 3149 RCH4 = RCH4_act 3150 RN2O = RN2O_act 3151 RCFC11 = RCFC11_act 3152 RCFC12 = RCFC12_act 3153 c 3003 3154 CALL radlwsw 3004 3155 e (dist, rmu0, fract, 3005 3156 e paprs, pplay,zxtsol,albsol1, albsol2, 3006 3157 e t_seri,q_seri,wo, 3007 e cldfra, cldemi , cldtau,3158 e cldfra, cldemirad, cldtaurad, 3008 3159 e ok_ade, ok_aie, 3009 3160 e tau_aero, piz_aero, cg_aero, … … 3023 3174 o topswcf_aero, solswcf_aero) 3024 3175 3025 3176 c 3177 cIM 2eme calcul radiatif pour le cas perturbe ou au moins un 3178 cIM des taux doit etre different du taux actuel 3179 cIM Par defaut on a les taux perturbes egaux aux taux actuels 3180 c 3181 if (RCO2_per.NE.RCO2_act.OR.RCH4_per.NE.RCH4_act.OR. 3182 $RN2O_per.NE.RN2O_act.OR.RCFC11_per.NE.RCFC11_act.OR. 3183 $RCFC12_per.NE.RCFC12_act) THEN 3184 c 3185 RCO2 = RCO2_per 3186 RCH4 = RCH4_per 3187 RN2O = RN2O_per 3188 RCFC11 = RCFC11_per 3189 RCFC12 = RCFC12_per 3190 c 3191 CALL radlwsw 3192 e (dist, rmu0, fract, 3193 e paprs, pplay,zxtsol,albsol1, albsol2, 3194 e t_seri,q_seri,wo, 3195 e cldfra, cldemi, cldtau, 3196 e ok_ade, ok_aie, 3197 e tau_aero, piz_aero, cg_aero, 3198 e cldtaupi,new_aod, 3199 e zqsat, flwc, fiwc, 3200 s heatp,heat0p,coolp,cool0p,radsolp,albplap, 3201 s topswp,toplwp,solswp,sollwp, 3202 s sollwdownp, 3203 s topsw0p,toplw0p,solsw0p,sollw0p, 3204 s lwdn0p, lwdnp, lwup0p, lwupp, 3205 s swdn0p, swdnp, swup0p, swupp, 3206 s topswad_aerop, solswad_aerop, 3207 s topswai_aerop, solswai_aerop, 3208 o topswad0_aerop, solswad0_aerop, 3209 o topsw_aerop, topsw0_aerop, 3210 o solsw_aerop, solsw0_aerop, 3211 o topswcf_aerop, solswcf_aerop) 3212 endif 3213 c 3026 3214 ENDIF ! aerosol_couple 3027 3215 itaprad = 0 … … 3184 3372 c 3185 3373 c ajout des tendances 3186 CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0,' lif')3374 CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0,'hin') 3187 3375 3188 3376 ENDIF … … 3260 3448 $ prfl(:,1:klev),psfl(:,1:klev), 3261 3449 $ pmflxr(:,1:klev),pmflxs(:,1:klev), 3262 $ mr_ozone,cldtau , cldemi)3450 $ mr_ozone,cldtaurad, cldemirad) 3263 3451 3264 3452 ! L calipso2D,calipso3D,cfadlidar,parasolrefl,atb,betamol, … … 3416 3604 vwriteSTD(:,:,5)=vlevSTD(:,:) 3417 3605 wwriteSTD(:,:,5)=wlevSTD(:,:) 3606 c 3607 cIM initialisation 6eme fichier de sortie 3608 twriteSTD(:,:,6)=tlevSTD(:,:) 3609 qwriteSTD(:,:,6)=qlevSTD(:,:) 3610 rhwriteSTD(:,:,6)=rhlevSTD(:,:) 3611 phiwriteSTD(:,:,6)=philevSTD(:,:) 3612 uwriteSTD(:,:,6)=ulevSTD(:,:) 3613 vwriteSTD(:,:,6)=vlevSTD(:,:) 3614 wwriteSTD(:,:,6)=wlevSTD(:,:) 3418 3615 cIM for NMC files 3419 3616 DO n=1, nlevSTD3
Note: See TracChangeset
for help on using the changeset viewer.