Changeset 1215 for LMDZ4/branches/LMDZ4-dev/libf/phylmd
- Timestamp:
- Jul 23, 2009, 5:52:59 PM (15 years ago)
- Location:
- LMDZ4/branches/LMDZ4-dev/libf/phylmd
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/branches/LMDZ4-dev/libf/phylmd/ozonecm_m.F90
r1188 r1215 6 6 contains 7 7 8 SUBROUTINE ozonecm(rjour,rlat,paprs,o3)8 function ozonecm(rjour,rlat,paprs) 9 9 10 10 ! The ozone climatology is based on an analytic formula which fits the … … 22 22 23 23 USE dimphy, only: klon, klev 24 use assert_m, only: assert 24 25 25 26 REAL, INTENT (IN) :: rjour 26 REAL, INTENT (IN) :: rlat(klon), paprs(klon,klev+1) 27 REAL o3(klon,klev) 28 ! "o3(j, k)" is the column-density of ozone in cell "(j, k)", that is 27 REAL, INTENT (IN) :: rlat(:) ! (klon) 28 REAL, INTENT (IN) :: paprs(:, :) ! (klon,klev+1) 29 30 REAL ozonecm(klon,klev) 31 ! "ozonecm(j, k)" is the column-density of ozone in cell "(j, k)", that is 29 32 ! between interface "k" and interface "k + 1", in kDU. 30 33 … … 47 50 !---------------------------------------------------------- 48 51 52 call assert((/size(rlat), size(paprs, 1)/) == klon, "ozonecm klon") 53 call assert(size(paprs, 2) == klev + 1, "ozonecm klev") 54 49 55 pi = 4. * atan(1.) 50 56 DO k = 1, klev 51 57 DO i = 1, klon 52 58 zslat = sin(pi / 180. * rlat(i)) 53 zsint = sin(2 .*pi*(rjour+15.)/an)54 zcost = cos(2 .*pi*(rjour+15.)/an)59 zsint = sin(2 * pi * (rjour + 15.) / an) 60 zcost = cos(2 * pi * (rjour + 15.) / an) 55 61 z = 0.0531 + zsint * (-0.001595+0.009443*zslat) & 56 62 + zcost * (-0.001344-0.00346*zslat) & … … 79 85 80 86 field(:,klev+1) = 0. 81 forall (k = 1: klev) o 3(:,k) = field(:,k) - field(:,k+1)87 forall (k = 1: klev) ozonecm(:,k) = field(:,k) - field(:,k+1) 82 88 83 END SUBROUTINEozonecm89 END function ozonecm 84 90 85 91 end module ozonecm_m -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/phys_output_mod.F90
r1214 r1215 907 907 CALL histdef3d(iff,o_rnebcon%flag,o_rnebcon%name, "Convective Cloud Fraction", "-") 908 908 CALL histdef3d(iff,o_rhum%flag,o_rhum%name, "Relative humidity", "-") 909 CALL histdef3d(iff,o_ozone%flag,o_ozone%name, "Ozone concentration", "ppmv")909 CALL histdef3d(iff,o_ozone%flag,o_ozone%name, "Ozone mole fraction", "-") 910 910 CALL histdef3d(iff,o_dtphy%flag,o_dtphy%name, "Physics dT", "K/s") 911 911 CALL histdef3d(iff,o_dqphy%flag,o_dqphy%name, "Physics dQ", "(kg/kg)/s") -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/phys_output_write.h
r1213 r1215 909 909 910 910 IF (o_ozone%flag(iff)<=lev_files(iff)) THEN 911 DO k=1, klev 912 DO i=1, klon 913 zx_tmp_fi3d(i,k)=wo(i,k)*RG/46.6968 914 $ /(paprs(i,k)-paprs(i,k+1)) 915 $ *(paprs(i,1)/101325.0) 916 ENDDO !i 917 ENDDO !k 918 CALL histwrite_phy(nid_files(iff),o_ozone%name,itau_w,zx_tmp_fi3d) 911 CALL histwrite_phy(nid_files(iff), o_ozone%name, itau_w, 912 $ wo * dobson_u * 1e3 / zmasse / rmo3 * rmd) 919 913 ENDIF 920 914 -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/phys_state_var_mod.F90
r1183 r1215 202 202 REAL,ALLOCATABLE,SAVE :: albsol1(:), albsol2(:) 203 203 !$OMP THREADPRIVATE(albsol1,albsol2) 204 REAL,ALLOCATABLE,SAVE :: wo(:,:) 205 !$OMP THREADPRIVATE(wo) 206 ! 204 205 REAL, ALLOCATABLE, SAVE:: wo(:,:) 206 ! column-density of ozone in a layer, in kilo-Dobsons 207 !$OMP THREADPRIVATE(wo) 208 207 209 ! heat : chauffage solaire 208 210 ! heat0: chauffage solaire ciel clair -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/physiq.F
r1213 r1215 1722 1722 ! Convert from mole fraction of ozone to column density of ozone in a 1723 1723 ! cell, in kDU: 1724 wo = wo * 48. / 29.* zmasse / dobson_u / 1e31724 wo = wo * rmo3 / rmd * zmasse / dobson_u / 1e3 1725 1725 C (By regridding ozone values for LMDZ only once per day, we 1726 1726 C have already neglected the variation of pressure in one … … 1728 1728 C "zmasse" changes a little.) 1729 1729 else 1730 CALL ozonecm(real(days_elapsed+1), rlat, paprs, wo) 1731 1730 wo = ozonecm(real(days_elapsed+1), rlat, paprs) 1732 1731 end if 1733 1732 ENDIF -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/radiation_AR4.F
r1106 r1215 89 89 C* LOCAL VARIABLES: 90 90 C 91 REAL*8 ZOZ(KDLON,KFLEV) 91 real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2 92 93 REAL(kind=8) ZOZ(KDLON,KFLEV) 94 ! column-density of ozone in layer, in kilo-Dobsons 95 92 96 REAL*8 ZAKI(KDLON,2) 93 97 REAL*8 ZCLD(KDLON,KFLEV) … … 178 182 DO JL = 1, KDLON 179 183 ZCLDSW0(JL,JK) = 0.0 180 ZOZ(JL,JK) = POZON(JL,JK) *46.6968/RG181 . *PDP(JL,JK)*(101325.0/PPSOL(JL))184 ZOZ(JL,JK) = POZON(JL,JK) / dobson_u / 1e3 / RG * PDP(JL,JK) 185 $ * (101325. / PPSOL(JL)) 182 186 ENDDO 183 187 ENDDO … … 2477 2481 REAL*8 PPMB(KDLON,KFLEV+1) ! HALF LEVEL PRESSURE (mb) 2478 2482 REAL*8 PPSOL(KDLON) ! SURFACE PRESSURE (Pa) 2479 REAL *8 POZON(KDLON,KFLEV) ! O3 CONCENTRATION (kg/kg)2483 REAL(kind=8) POZON(KDLON,KFLEV) ! O3 mass fraction 2480 2484 REAL*8 PTL(KDLON,KFLEV+1) ! HALF LEVEL TEMPERATURE (K) 2481 2485 REAL*8 PAER(KDLON,KFLEV,5) ! OPTICAL THICKNESS OF THE AEROSOLS … … 2503 2507 C------------------------------------------------------------------------- 2504 2508 REAL*8 ZABCU(KDLON,NUA,3*KFLEV+1) 2505 REAL*8 ZOZ(KDLON,KFLEV) 2506 c 2509 2510 REAL(kind=8) ZOZ(KDLON,KFLEV) 2511 ! equivalent pressure of ozone in a layer, in Pa 2512 2507 2513 cym REAL*8 ZFLUX(KDLON,2,KFLEV+1) ! RADIATIVE FLUXES (1:up; 2:down) 2508 2514 cym REAL*8 ZFLUC(KDLON,2,KFLEV+1) ! CLEAR-SKY RADIATIVE FLUXES … … 2550 2556 C 2551 2557 IF (MOD(itaplw0,lw0pas).EQ.0) THEN 2552 DO k = 1, KFLEV ! convertir ozone de kg/kg en pa/pa 2553 DO i = 1, KDLON 2554 c convertir ozone de kg/kg en pa (modif MPL 100505) 2555 ZOZ(i,k) = POZON(i,k)*PDP(i,k) * RMD/RMO3 2556 c print *,'LW: ZOZ*10**6=',ZOZ(i,k)*1000000. 2557 ENDDO 2558 c Compute equivalent pressure of ozone from mass fraction: 2559 DO k = 1, KFLEV 2560 DO i = 1, KDLON 2561 ZOZ(i,k) = POZON(i,k)*PDP(i,k) * RMD/RMO3 2562 ENDDO 2558 2563 ENDDO 2559 2564 cIM ctes ds clesphys.h CALL LWU(RCO2,RCH4, RN2O, RCFC11, RCFC12, -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/radlwsw.F90
r1160 r1215 40 40 ! t--------input-R- temperature (K) 41 41 ! q--------input-R- vapeur d'eau (en kg/kg) 42 ! wo-------input-R- contenu en ozone (en kg/kg) correction MPL 10050543 42 ! cldfra---input-R- fraction nuageuse (entre 0 et 1) 44 43 ! cldtaupd---input-R- epaisseur optique des nuages dans le visible (present-day value) … … 101 100 REAL, INTENT(in) :: paprs(KLON,KLEV+1), pplay(KLON,KLEV) 102 101 REAL, INTENT(in) :: alb1(KLON), alb2(KLON), tsol(KLON) 103 REAL, INTENT(in) :: t(KLON,KLEV), q(KLON,KLEV), wo(KLON,KLEV) 102 REAL, INTENT(in) :: t(KLON,KLEV), q(KLON,KLEV) 103 104 REAL, INTENT(in)::wo(KLON,KLEV) 105 ! column-density of ozone in a layer, in kilo-Dobsons 106 104 107 LOGICAL, INTENT(in) :: ok_ade, ok_aie ! switches whether to use aerosol direct (indirect) effects or not 105 108 REAL, INTENT(in) :: cldfra(KLON,KLEV), cldemi(KLON,KLEV), cldtaupd(KLON,KLEV) … … 150 153 REAL*8 PTL(kdlon,kflev+1), PPMB(kdlon,kflev+1) 151 154 REAL*8 PTAVE(kdlon,kflev) 152 REAL*8 PWV(kdlon,kflev), PQS(kdlon,kflev), POZON(kdlon,kflev) 155 REAL*8 PWV(kdlon,kflev), PQS(kdlon,kflev) 156 real(kind=8) POZON(kdlon,kflev) ! mass fraction of ozone 153 157 REAL*8 PAER(kdlon,kflev,5) 154 158 REAL*8 PCLDLD(kdlon,kflev) … … 177 181 REAL*8 ztopsw_aero(kdlon,9), ztopsw0_aero(kdlon,9) 178 182 REAL*8 zsolsw_aero(kdlon,9), zsolsw0_aero(kdlon,9) 183 real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2 184 179 185 180 186 ! initialisation … … 236 242 PWV(i,k) = MAX (q(iof+i,k), 1.0e-12) 237 243 PQS(i,k) = PWV(i,k) 238 ! wo: cm.atm (epaisseur en cm dans la situation standard) 239 ! POZON: kg/kg 240 POZON(i,k) = MAX(wo(iof+i,k),1.0e-12)*RG/46.6968 & 241 /(paprs(iof+i,k)-paprs(iof+i,k+1))& 242 *(paprs(iof+i,1)/101325.0) 244 POZON(i,k) = MAX(wo(iof+i, k), 1e-12) * RG * dobson_u * 1e3 & 245 /(paprs(iof+i, k) - paprs(iof+i, k+1)) & 246 * (paprs(iof+i, 1) / 101325.) 243 247 PCLDLD(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k) 244 248 PCLDLU(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k) -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/sw_aeroAR4.F90
r1159 r1215 89 89 !* LOCAL VARIABLES: 90 90 ! 91 REAL*8 ZOZ(KDLON,KFLEV) 91 real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2 92 93 REAL(kind=8) ZOZ(KDLON,KFLEV) 94 ! column-density of ozone in layer, in kilo-Dobsons 95 92 96 REAL*8 ZAKI(KDLON,2) 93 97 REAL*8 ZCLD(KDLON,KFLEV) … … 203 207 DO JL = 1, KDLON 204 208 ZCLDSW0(JL,JK) = 0.0 205 ZOZ(JL,JK) = POZON(JL,JK) *46.6968/RG&206 * PDP(JL,JK)*(101325.0/PPSOL(JL))209 ZOZ(JL,JK) = POZON(JL,JK) / dobson_u / 1e3 / RG * PDP(JL,JK) & 210 * (101325. / PPSOL(JL)) 207 211 ENDDO 208 212 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.