Changeset 1150 for LMDZ4/branches/LMDZ4-dev/libf/phylmd/radlwsw_aero.F90
- Timestamp:
- Apr 17, 2009, 5:34:01 PM (15 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/branches/LMDZ4-dev/libf/phylmd/radlwsw_aero.F90
r1149 r1150 1 ! 2 ! $Header$ 3 ! 4 SUBROUTINE radlwsw(dist, rmu0, fract, 5 . paprs, pplay,tsol,alb1, alb2, t,q,wo, 6 . cldfra, cldemi, cldtaupd, 7 . heat,heat0,cool,cool0,radsol,albpla, 8 . topsw,toplw,solsw,sollw, 9 . sollwdown, 10 . topsw0,toplw0,solsw0,sollw0, 11 . lwdn0, lwdn, lwup0, lwup, 12 . swdn0, swdn, swup0, swup, 13 . ok_ade, ok_aie, 14 . tau_ae, piz_ae, cg_ae, 15 . topswad, solswad, 16 . cldtaupi, topswai, solswai,qsat,flwc,fiwc) 17 c 18 USE dimphy 19 IMPLICIT none 20 c====================================================================== 21 c Auteur(s): Z.X. Li (LMD/CNRS) date: 19960719 22 c Objet: interface entre le modele et les rayonnements 23 c Arguments: 24 c dist-----input-R- distance astronomique terre-soleil 25 c rmu0-----input-R- cosinus de l'angle zenithal 26 c fract----input-R- duree d'ensoleillement normalisee 27 c co2_ppm--input-R- concentration du gaz carbonique (en ppm) 28 c solaire--input-R- constante solaire (W/m**2) 29 c paprs----input-R- pression a inter-couche (Pa) 30 c pplay----input-R- pression au milieu de couche (Pa) 31 c tsol-----input-R- temperature du sol (en K) 32 c alb1-----input-R- albedo du sol(entre 0 et 1) dans l'interval visible 33 c alb2-----input-R- albedo du sol(entre 0 et 1) dans l'interval proche infra-rouge 34 c t--------input-R- temperature (K) 35 c q--------input-R- vapeur d'eau (en kg/kg) 36 c wo-------input-R- contenu en ozone (en kg/kg) correction MPL 100505 37 c cldfra---input-R- fraction nuageuse (entre 0 et 1) 38 c cldtaupd---input-R- epaisseur optique des nuages dans le visible (present-day value) 39 c cldemi---input-R- emissivite des nuages dans l'IR (entre 0 et 1) 40 c ok_ade---input-L- apply the Aerosol Direct Effect or not? 41 c ok_aie---input-L- apply the Aerosol Indirect Effect or not? 42 c tau_ae, piz_ae, cg_ae-input-R- aerosol optical properties (calculated in aeropt.F) 43 c cldtaupi-input-R- epaisseur optique des nuages dans le visible 44 c calculated for pre-industrial (pi) aerosol concentrations, i.e. with smaller 45 c droplet concentration, thus larger droplets, thus generally cdltaupi cldtaupd 46 c it is needed for the diagnostics of the aerosol indirect radiative forcing 47 c 48 c heat-----output-R- echauffement atmospherique (visible) (K/jour) 49 c cool-----output-R- refroidissement dans l'IR (K/jour) 50 c radsol---output-R- bilan radiatif net au sol (W/m**2) (+ vers le bas) 51 c albpla---output-R- albedo planetaire (entre 0 et 1) 52 c topsw----output-R- flux solaire net au sommet de l'atm. 53 c toplw----output-R- ray. IR montant au sommet de l'atmosphere 54 c solsw----output-R- flux solaire net a la surface 55 c sollw----output-R- ray. IR montant a la surface 56 c solswad---output-R- ray. solaire net absorbe a la surface (aerosol dir) 57 c topswad---output-R- ray. solaire absorbe au sommet de l'atm. (aerosol dir) 58 c solswai---output-R- ray. solaire net absorbe a la surface (aerosol ind) 59 c topswai---output-R- ray. solaire absorbe au sommet de l'atm. (aerosol ind) 60 c 61 c ATTENTION: swai and swad have to be interpreted in the following manner: 62 c --------- 63 c ok_ade=F & ok_aie=F -both are zero 64 c ok_ade=T & ok_aie=F -aerosol direct forcing is F_{AD} = topsw-topswad 65 c indirect is zero 66 c ok_ade=F & ok_aie=T -aerosol indirect forcing is F_{AI} = topsw-topswai 67 c direct is zero 68 c ok_ade=T & ok_aie=T -aerosol indirect forcing is F_{AI} = topsw-topswai 69 c aerosol direct forcing is F_{AD} = topswai-topswad 70 c 71 72 c====================================================================== 73 cym#include "dimensions.h" 74 cym#include "dimphy.h" 75 cym#include "raddim.h" 76 #include "YOETHF.h" 77 c 78 real rmu0(klon), fract(klon), dist 79 cIM real co2_ppm 80 cIM real solaire 81 #include "clesphys.h" 82 c 83 real paprs(klon,klev+1), pplay(klon,klev) 84 real alb1(klon), alb2(klon), tsol(klon) 85 real t(klon,klev), q(klon,klev), wo(klon,klev) 86 real cldfra(klon,klev), cldemi(klon,klev), cldtaupd(klon,klev) 87 real heat(klon,klev), cool(klon,klev) 88 real heat0(klon,klev), cool0(klon,klev) 89 real radsol(klon), topsw(klon), toplw(klon) 90 real solsw(klon), sollw(klon), albpla(klon) 91 real topsw0(klon), toplw0(klon), solsw0(klon), sollw0(klon) 92 real sollwdown(klon) 93 cIM output 3D 94 REAL*8 ZFSUP(KDLON,KFLEV+1) 95 REAL*8 ZFSDN(KDLON,KFLEV+1) 96 REAL*8 ZFSUP0(KDLON,KFLEV+1) 97 REAL*8 ZFSDN0(KDLON,KFLEV+1) 98 c 99 REAL*8 ZFLUP(KDLON,KFLEV+1) 100 REAL*8 ZFLDN(KDLON,KFLEV+1) 101 REAL*8 ZFLUP0(KDLON,KFLEV+1) 102 REAL*8 ZFLDN0(KDLON,KFLEV+1) 103 c 104 REAL*8 zx_alpha1, zx_alpha2 105 c 106 #include "YOMCST.h" 107 c 108 INTEGER k, kk, i, j, iof, nb_gr 109 EXTERNAL LW_LMDAR4,SW_LMDAR4 110 c 111 cIM ctes ds clesphys.h REAL*8 RCO2, RCH4, RN2O, RCFC11, RCFC12 112 REAL*8 PSCT 113 c 114 REAL*8 PALBD(kdlon,2), PALBP(kdlon,2) 115 REAL*8 PEMIS(kdlon), PDT0(kdlon), PVIEW(kdlon) 116 REAL*8 PPSOL(kdlon), PDP(kdlon,klev) 117 REAL*8 PTL(kdlon,kflev+1), PPMB(kdlon,kflev+1) 118 REAL*8 PTAVE(kdlon,kflev) 119 REAL*8 PWV(kdlon,kflev), PQS(kdlon,kflev), POZON(kdlon,kflev) 120 REAL*8 PAER(kdlon,kflev,5) 121 REAL*8 PCLDLD(kdlon,kflev) 122 REAL*8 PCLDLU(kdlon,kflev) 123 REAL*8 PCLDSW(kdlon,kflev) 124 REAL*8 PTAU(kdlon,2,kflev) 125 REAL*8 POMEGA(kdlon,2,kflev) 126 REAL*8 PCG(kdlon,2,kflev) 127 c 128 REAL*8 zfract(kdlon), zrmu0(kdlon), zdist 129 c 130 REAL*8 zheat(kdlon,kflev), zcool(kdlon,kflev) 131 REAL*8 zheat0(kdlon,kflev), zcool0(kdlon,kflev) 132 REAL*8 ztopsw(kdlon), ztoplw(kdlon) 133 REAL*8 zsolsw(kdlon), zsollw(kdlon), zalbpla(kdlon) 134 cIM 135 REAL*8 zsollwdown(kdlon) 136 c 137 REAL*8 ztopsw0(kdlon), ztoplw0(kdlon) 138 REAL*8 zsolsw0(kdlon), zsollw0(kdlon) 139 REAL*8 zznormcp 140 cIM output 3D : SWup, SWdn, LWup, LWdn 141 REAL swdn(klon,kflev+1),swdn0(klon,kflev+1) 142 REAL swup(klon,kflev+1),swup0(klon,kflev+1) 143 REAL lwdn(klon,kflev+1),lwdn0(klon,kflev+1) 144 REAL lwup(klon,kflev+1),lwup0(klon,kflev+1) 145 REAL qsat(klon,klev),flwc(klon,klev),fiwc(klon,klev) 146 c-OB 147 cjq the following quantities are needed for the aerosol radiative forcings 148 149 real topswad(klon), solswad(klon) ! output: aerosol direct forcing at TOA and surface 150 real topswai(klon), solswai(klon) ! output: aerosol indirect forcing atTOA and surface 151 real tau_ae(klon,klev,2), piz_ae(klon,klev,2), cg_ae(klon,klev,2) ! aerosol optical properties (see aeropt.F) 152 real cldtaupi(klon,klev) ! cloud optical thickness for pre-industrial aerosol concentrations 153 ! (i.e., with a smaller droplet concentrationand thus larger droplet radii) 154 logical ok_ade, ok_aie ! switches whether to use aerosol direct (indirect) effects or not 155 real*8 tauae(kdlon,kflev,2) ! aer opt properties 156 real*8 pizae(kdlon,kflev,2) 157 real*8 cgae(kdlon,kflev,2) 158 REAL*8 PTAUA(kdlon,2,kflev) ! present-day value of cloud opt thickness (PTAU is pre-industrial value), local use 159 REAL*8 POMEGAA(kdlon,2,kflev) ! dito for single scatt albedo 160 REAL*8 ztopswad(kdlon), zsolswad(kdlon) ! Aerosol direct forcing at TOAand surface 161 REAL*8 ztopswai(kdlon), zsolswai(kdlon) ! dito, indirect 162 cjq-end 163 !rv 164 tauae(:,:,:)=0. 165 pizae(:,:,:)=0. 166 cgae(:,:,:)=0. 167 !rv 168 169 c 170 c------------------------------------------- 171 nb_gr = klon / kdlon 172 IF (nb_gr*kdlon .NE. klon) THEN 173 PRINT*, "kdlon mauvais:", klon, kdlon, nb_gr 174 CALL abort 175 ENDIF 176 IF (kflev .NE. klev) THEN 177 PRINT*, "kflev differe de klev, kflev, klev" 178 CALL abort 179 ENDIF 180 c------------------------------------------- 181 DO k = 1, klev 182 DO i = 1, klon 183 heat(i,k)=0. 184 cool(i,k)=0. 185 heat0(i,k)=0. 186 cool0(i,k)=0. 187 ENDDO 188 ENDDO 189 c 190 zdist = dist 191 c 192 cIM anciennes valeurs 193 c RCO2 = co2_ppm * 1.0e-06 * 44.011/28.97 194 c 195 cIM : on met RCO2, RCH4, RN2O, RCFC11 et RCFC12 dans clesphys.h /lecture ds conf_phys.F90 196 c RCH4 = 1.65E-06* 16.043/28.97 197 c RN2O = 306.E-09* 44.013/28.97 198 c RCFC11 = 280.E-12* 137.3686/28.97 199 c RCFC12 = 484.E-12* 120.9140/28.97 200 cIM anciennes valeurs 201 c RCH4 = 1.72E-06* 16.043/28.97 202 c RN2O = 310.E-09* 44.013/28.97 203 c 204 c PRINT*,'IMradlwsw : solaire, co2= ', solaire, co2_ppm 205 PSCT = solaire/zdist/zdist 206 c 207 DO 99999 j = 1, nb_gr 208 iof = kdlon*(j-1) 209 c 1 SUBROUTINE radlwsw_aero( & 2 dist, rmu0, fract, solaire, & 3 paprs, pplay,tsol,albedo, alblw, & 4 t,q,wo,& 5 cldfra, cldemi, cldtaupd,& 6 ok_ade, ok_aie,& 7 tau_aero, piz_aero, cg_aero,& 8 cldtaupi, new_aod, & 9 heat,heat0,cool,cool0,radsol,albpla,& 10 topsw,toplw,solsw,sollw,& 11 sollwdown,& 12 topsw0,toplw0,solsw0,sollw0,& 13 lwdn0, lwdn, lwup0, lwup,& 14 swdn0, swdn, swup0, swup,& 15 topswad_aero, solswad_aero,& 16 topswai_aero, solswai_aero, & 17 topswad0_aero, solswad0_aero,& 18 topsw_aero, topsw0_aero,& 19 solsw_aero, solsw0_aero) 20 21 22 23 USE DIMPHY 24 25 IMPLICIT NONE 26 !====================================================================== 27 ! Auteur(s): Z.X. Li (LMD/CNRS) date: 19960719 28 ! Objet: interface entre le modele et les rayonnements 29 ! Arguments: 30 ! dist-----input-R- distance astronomique terre-soleil 31 ! rmu0-----input-R- cosinus de l'angle zenithal 32 ! fract----input-R- duree d'ensoleillement normalisee 33 ! co2_ppm--input-R- concentration du gaz carbonique (en ppm) 34 ! solaire--input-R- constante solaire (W/m**2) 35 ! paprs----input-R- pression a inter-couche (Pa) 36 ! pplay----input-R- pression au milieu de couche (Pa) 37 ! tsol-----input-R- temperature du sol (en K) 38 ! albedo---input-R- albedo du sol (entre 0 et 1) 39 ! t--------input-R- temperature (K) 40 ! q--------input-R- vapeur d'eau (en kg/kg) 41 ! wo-------input-R- contenu en ozone (en kg/kg) correction MPL 100505 42 ! cldfra---input-R- fraction nuageuse (entre 0 et 1) 43 ! cldtaupd---input-R- epaisseur optique des nuages dans le visible (present-day value) 44 ! cldemi---input-R- emissivite des nuages dans l'IR (entre 0 et 1) 45 ! ok_ade---input-L- apply the Aerosol Direct Effect or not? 46 ! ok_aie---input-L- apply the Aerosol Indirect Effect or not? 47 ! tau_ae, piz_ae, cg_ae-input-R- aerosol optical properties (calculated in aeropt.F) 48 ! cldtaupi-input-R- epaisseur optique des nuages dans le visible 49 ! calculated for pre-industrial (pi) aerosol concentrations, i.e. with smaller 50 ! droplet concentration, thus larger droplets, thus generally cdltaupi cldtaupd 51 ! it is needed for the diagnostics of the aerosol indirect radiative forcing 52 ! 53 ! heat-----output-R- echauffement atmospherique (visible) (K/jour) 54 ! cool-----output-R- refroidissement dans l'IR (K/jour) 55 ! radsol---output-R- bilan radiatif net au sol (W/m**2) (+ vers le bas) 56 ! albpla---output-R- albedo planetaire (entre 0 et 1) 57 ! topsw----output-R- flux solaire net au sommet de l'atm. 58 ! toplw----output-R- ray. IR montant au sommet de l'atmosphere 59 ! solsw----output-R- flux solaire net a la surface 60 ! sollw----output-R- ray. IR montant a la surface 61 ! solswad---output-R- ray. solaire net absorbe a la surface (aerosol dir) 62 ! topswad---output-R- ray. solaire absorbe au sommet de l'atm. (aerosol dir) 63 ! solswai---output-R- ray. solaire net absorbe a la surface (aerosol ind) 64 ! topswai---output-R- ray. solaire absorbe au sommet de l'atm. (aerosol ind) 65 ! 66 ! ATTENTION: swai and swad have to be interpreted in the following manner: 67 ! --------- 68 ! ok_ade=F & ok_aie=F -both are zero 69 ! ok_ade=T & ok_aie=F -aerosol direct forcing is F_{AD} = topsw-topswad 70 ! indirect is zero 71 ! ok_ade=F & ok_aie=T -aerosol indirect forcing is F_{AI} = topsw-topswai 72 ! direct is zero 73 ! ok_ade=T & ok_aie=T -aerosol indirect forcing is F_{AI} = topsw-topswai 74 ! aerosol direct forcing is F_{AD} = topswai-topswad 75 ! 76 77 !====================================================================== 78 79 ! ==================================================================== 80 ! Adapte au modele de chimie INCA par Celine Deandreis & Anne Cozic -- 2009 81 ! 1 = ZERO 82 ! 2 = AER total 83 ! 3 = NAT 84 ! 4 = BC 85 ! 5 = SO4 86 ! 6 = POM 87 ! 7 = DUST 88 ! 8 = SS 89 ! 9 = NO3 90 ! 91 ! ==================================================================== 92 include "YOETHF.h" 93 include "YOMCST.h" 94 95 ! Input arguments 96 REAL, INTENT(in) :: solaire 97 REAL, INTENT(in) :: dist 98 REAL, INTENT(in) :: rmu0(KLON), fract(KLON) 99 REAL, INTENT(in) :: paprs(KLON,KLEV+1), pplay(KLON,KLEV) 100 REAL, INTENT(in) :: albedo(KLON), alblw(KLON), tsol(KLON) 101 REAL, INTENT(in) :: t(KLON,KLEV), q(KLON,KLEV), wo(KLON,KLEV) 102 LOGICAL, INTENT(in) :: ok_ade, ok_aie ! switches whether to use aerosol direct (indirect) effects or not 103 REAL, INTENT(in) :: cldfra(KLON,KLEV), cldemi(KLON,KLEV), cldtaupd(KLON,KLEV) 104 REAL, INTENT(in) :: tau_aero(KLON,KLEV,9,2) ! aerosol optical properties (see aeropt.F) 105 REAL, INTENT(in) :: piz_aero(KLON,KLEV,9,2) ! aerosol optical properties (see aeropt.F) 106 REAL, INTENT(in) :: cg_aero(KLON,KLEV,9,2) ! aerosol optical properties (see aeropt.F) 107 REAL, INTENT(in) :: cldtaupi(KLON,KLEV) ! cloud optical thickness for pre-industrial aerosol concentrations 108 LOGICAL, INTENT(in) :: new_aod ! flag pour retrouver les resultats exacts de l'AR4 dans le cas ou l'on ne travaille qu'avec les sulfates 109 110 ! Output arguments 111 REAL, INTENT(out) :: heat(KLON,KLEV), cool(KLON,KLEV) 112 REAL, INTENT(out) :: heat0(KLON,KLEV), cool0(KLON,KLEV) 113 REAL, INTENT(out) :: radsol(KLON), topsw(KLON), toplw(KLON) 114 REAL, INTENT(out) :: solsw(KLON), sollw(KLON), albpla(KLON) 115 REAL, INTENT(out) :: topsw0(KLON), toplw0(KLON), solsw0(KLON), sollw0(KLON) 116 REAL, INTENT(out) :: sollwdown(KLON) 117 REAL, INTENT(out) :: swdn(KLON,kflev+1),swdn0(KLON,kflev+1) 118 REAL, INTENT(out) :: swup(KLON,kflev+1),swup0(KLON,kflev+1) 119 REAL, INTENT(out) :: lwdn(KLON,kflev+1),lwdn0(KLON,kflev+1) 120 REAL, INTENT(out) :: lwup(KLON,kflev+1),lwup0(KLON,kflev+1) 121 REAL, INTENT(out) :: topswad_aero(KLON), solswad_aero(KLON) ! output: aerosol direct forcing at TOA and surface 122 REAL, INTENT(out) :: topswai_aero(KLON), solswai_aero(KLON) ! output: aerosol indirect forcing atTOA and surface 123 REAL, DIMENSION(klon), INTENT(out) :: topswad0_aero 124 REAL, DIMENSION(klon), INTENT(out) :: solswad0_aero 125 REAL, DIMENSION(kdlon,9), INTENT(out) :: topsw_aero 126 REAL, DIMENSION(kdlon,9), INTENT(out) :: topsw0_aero 127 REAL, DIMENSION(kdlon,9), INTENT(out) :: solsw_aero 128 REAL, DIMENSION(kdlon,9), INTENT(out) :: solsw0_aero 129 130 ! Local variables 131 REAL*8 ZFSUP(KDLON,KFLEV+1) 132 REAL*8 ZFSDN(KDLON,KFLEV+1) 133 REAL*8 ZFSUP0(KDLON,KFLEV+1) 134 REAL*8 ZFSDN0(KDLON,KFLEV+1) 135 REAL*8 ZFLUP(KDLON,KFLEV+1) 136 REAL*8 ZFLDN(KDLON,KFLEV+1) 137 REAL*8 ZFLUP0(KDLON,KFLEV+1) 138 REAL*8 ZFLDN0(KDLON,KFLEV+1) 139 REAL*8 zx_alpha1, zx_alpha2 140 INTEGER k, kk, i, j, iof, nb_gr 141 REAL*8 PSCT 142 REAL*8 PALBD(kdlon,2), PALBP(kdlon,2) 143 REAL*8 PEMIS(kdlon), PDT0(kdlon), PVIEW(kdlon) 144 REAL*8 PPSOL(kdlon), PDP(kdlon,KLEV) 145 REAL*8 PTL(kdlon,kflev+1), PPMB(kdlon,kflev+1) 146 REAL*8 PTAVE(kdlon,kflev) 147 REAL*8 PWV(kdlon,kflev), PQS(kdlon,kflev), POZON(kdlon,kflev) 148 REAL*8 PAER(kdlon,kflev,5) 149 REAL*8 PCLDLD(kdlon,kflev) 150 REAL*8 PCLDLU(kdlon,kflev) 151 REAL*8 PCLDSW(kdlon,kflev) 152 REAL*8 PTAU(kdlon,2,kflev) 153 REAL*8 POMEGA(kdlon,2,kflev) 154 REAL*8 PCG(kdlon,2,kflev) 155 REAL*8 zfract(kdlon), zrmu0(kdlon), zdist 156 REAL*8 zheat(kdlon,kflev), zcool(kdlon,kflev) 157 REAL*8 zheat0(kdlon,kflev), zcool0(kdlon,kflev) 158 REAL*8 ztopsw(kdlon), ztoplw(kdlon) 159 REAL*8 zsolsw(kdlon), zsollw(kdlon), zalbpla(kdlon) 160 REAL*8 zsollwdown(kdlon) 161 REAL*8 ztopsw0(kdlon), ztoplw0(kdlon) 162 REAL*8 zsolsw0(kdlon), zsollw0(kdlon) 163 REAL*8 zznormcp 164 REAL*8 tauaero(kdlon,kflev,9,2) ! aer opt properties 165 REAL*8 pizaero(kdlon,kflev,9,2) 166 REAL*8 cgaero(kdlon,kflev,9,2) 167 REAL*8 PTAUA(kdlon,2,kflev) ! present-day value of cloud opt thickness (PTAU is pre-industrial value), local use 168 REAL*8 POMEGAA(kdlon,2,kflev) ! dito for single scatt albedo 169 REAL*8 ztopswadaero(kdlon), zsolswadaero(kdlon) ! Aerosol direct forcing at TOAand surface 170 REAL*8 ztopswad0aero(kdlon), zsolswad0aero(kdlon) ! Aerosol direct forcing at TOAand surface 171 REAL*8 ztopswaiaero(kdlon), zsolswaiaero(kdlon) ! dito, indirect 172 REAL*8 ztopsw_aero(kdlon,9), ztopsw0_aero(kdlon,9) 173 REAL*8 zsolsw_aero(kdlon,9), zsolsw0_aero(kdlon,9) 174 175 ! initialisation 176 tauaero(:,:,:,:)=0. 177 pizaero(:,:,:,:)=0. 178 cgaero(:,:,:,:)=0. 179 180 ! 181 !------------------------------------------- 182 nb_gr = KLON / kdlon 183 IF (nb_gr*kdlon .NE. KLON) THEN 184 PRINT*, "kdlon mauvais:", KLON, kdlon, nb_gr 185 CALL abort 186 ENDIF 187 IF (kflev .NE. KLEV) THEN 188 PRINT*, "kflev differe de KLEV, kflev, KLEV" 189 CALL abort 190 ENDIF 191 !------------------------------------------- 192 DO k = 1, KLEV 193 DO i = 1, KLON 194 heat(i,k)=0. 195 cool(i,k)=0. 196 heat0(i,k)=0. 197 cool0(i,k)=0. 198 ENDDO 199 ENDDO 200 ! 201 zdist = dist 202 ! 203 PSCT = solaire/zdist/zdist 204 DO j = 1, nb_gr 205 iof = kdlon*(j-1) 206 DO i = 1, kdlon 207 zfract(i) = fract(iof+i) 208 zrmu0(i) = rmu0(iof+i) 209 PALBD(i,1) = albedo(iof+i) 210 PALBD(i,2) = alblw(iof+i) 211 PALBP(i,1) = albedo(iof+i) 212 PALBP(i,2) = alblw(iof+i) 213 PEMIS(i) = 1.0 214 PVIEW(i) = 1.66 215 PPSOL(i) = paprs(iof+i,1) 216 zx_alpha1 = (paprs(iof+i,1)-pplay(iof+i,2))/(pplay(iof+i,1)-pplay(iof+i,2)) 217 zx_alpha2 = 1.0 - zx_alpha1 218 PTL(i,1) = t(iof+i,1) * zx_alpha1 + t(iof+i,2) * zx_alpha2 219 PTL(i,KLEV+1) = t(iof+i,KLEV) 220 PDT0(i) = tsol(iof+i) - PTL(i,1) 221 ENDDO 222 DO k = 2, kflev 210 223 DO i = 1, kdlon 211 zfract(i) = fract(iof+i) 212 zrmu0(i) = rmu0(iof+i) 213 PALBD(i,1) = alb1(iof+i) 214 ! PALBD(i,2) = alb1(iof+i) 215 PALBD(i,2) = alb2(iof+i) 216 PALBP(i,1) = alb1(iof+i) 217 ! PALBP(i,2) = alb1(iof+i) 218 PALBP(i,2) = alb2(iof+i) 219 cIM cf. JLD pour etre en accord avec ORCHIDEE il faut mettre PEMIS(i) = 0.96 220 PEMIS(i) = 1.0 221 PVIEW(i) = 1.66 222 PPSOL(i) = paprs(iof+i,1) 223 zx_alpha1 = (paprs(iof+i,1)-pplay(iof+i,2)) 224 . / (pplay(iof+i,1)-pplay(iof+i,2)) 225 zx_alpha2 = 1.0 - zx_alpha1 226 PTL(i,1) = t(iof+i,1) * zx_alpha1 + t(iof+i,2) * zx_alpha2 227 PTL(i,klev+1) = t(iof+i,klev) 228 PDT0(i) = tsol(iof+i) - PTL(i,1) 229 ENDDO 230 DO k = 2, kflev 224 PTL(i,k) = (t(iof+i,k)+t(iof+i,k-1))*0.5 225 ENDDO 226 ENDDO 227 DO k = 1, kflev 231 228 DO i = 1, kdlon 232 PTL(i,k) = (t(iof+i,k)+t(iof+i,k-1))*0.5 233 ENDDO 234 ENDDO 229 PDP(i,k) = paprs(iof+i,k)-paprs(iof+i,k+1) 230 PTAVE(i,k) = t(iof+i,k) 231 PWV(i,k) = MAX (q(iof+i,k), 1.0e-12) 232 PQS(i,k) = PWV(i,k) 233 ! wo: cm.atm (epaisseur en cm dans la situation standard) 234 ! POZON: kg/kg 235 POZON(i,k) = MAX(wo(iof+i,k),1.0e-12)*RG/46.6968 & 236 /(paprs(iof+i,k)-paprs(iof+i,k+1))& 237 *(paprs(iof+i,1)/101325.0) 238 PCLDLD(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k) 239 PCLDLU(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k) 240 PCLDSW(i,k) = cldfra(iof+i,k) 241 PTAU(i,1,k) = MAX(cldtaupi(iof+i,k), 1.0e-05)! 1e-12 serait instable 242 PTAU(i,2,k) = MAX(cldtaupi(iof+i,k), 1.0e-05)! pour 32-bit machines 243 POMEGA(i,1,k) = 0.9999 - 5.0e-04 * EXP(-0.5 * PTAU(i,1,k)) 244 POMEGA(i,2,k) = 0.9988 - 2.5e-03 * EXP(-0.05 * PTAU(i,2,k)) 245 PCG(i,1,k) = 0.865 246 PCG(i,2,k) = 0.910 247 !- 248 ! Introduced for aerosol indirect forcings. 249 ! The following values use the cloud optical thickness calculated from 250 ! present-day aerosol concentrations whereas the quantities without the 251 ! "A" at the end are for pre-industial (natural-only) aerosol concentrations 252 ! 253 PTAUA(i,1,k) = MAX(cldtaupd(iof+i,k), 1.0e-05)! 1e-12 serait instable 254 PTAUA(i,2,k) = MAX(cldtaupd(iof+i,k), 1.0e-05)! pour 32-bit machines 255 POMEGAA(i,1,k) = 0.9999 - 5.0e-04 * EXP(-0.5 * PTAUA(i,1,k)) 256 POMEGAA(i,2,k) = 0.9988 - 2.5e-03 * EXP(-0.05 * PTAUA(i,2,k)) 257 ENDDO 258 ENDDO 259 ! 260 DO k = 1, kflev+1 261 DO i = 1, kdlon 262 PPMB(i,k) = paprs(iof+i,k)/100.0 263 ENDDO 264 ENDDO 265 ! 266 DO kk = 1, 5 235 267 DO k = 1, kflev 268 DO i = 1, kdlon 269 PAER(i,k,kk) = 1.0E-15 270 ENDDO 271 ENDDO 272 ENDDO 273 DO k = 1, kflev 236 274 DO i = 1, kdlon 237 PDP(i,k) = paprs(iof+i,k)-paprs(iof+i,k+1) 238 PTAVE(i,k) = t(iof+i,k) 239 PWV(i,k) = MAX (q(iof+i,k), 1.0e-12) 240 PQS(i,k) = PWV(i,k) 241 c wo: cm.atm (epaisseur en cm dans la situation standard) 242 c POZON: kg/kg 243 POZON(i,k) = MAX(wo(iof+i,k),1.0e-12)*RG/46.6968 244 . /(paprs(iof+i,k)-paprs(iof+i,k+1)) 245 . *(paprs(iof+i,1)/101325.0) 246 PCLDLD(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k) 247 PCLDLU(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k) 248 PCLDSW(i,k) = cldfra(iof+i,k) 249 PTAU(i,1,k) = MAX(cldtaupi(iof+i,k), 1.0e-05)! 1e-12 serait instable 250 PTAU(i,2,k) = MAX(cldtaupi(iof+i,k), 1.0e-05)! pour 32-bit machines 251 POMEGA(i,1,k) = 0.9999 - 5.0e-04 * EXP(-0.5 * PTAU(i,1,k)) 252 POMEGA(i,2,k) = 0.9988 - 2.5e-03 * EXP(-0.05 * PTAU(i,2,k)) 253 PCG(i,1,k) = 0.865 254 PCG(i,2,k) = 0.910 255 c-OB 256 cjq Introduced for aerosol indirect forcings. 257 cjq The following values use the cloud optical thickness calculated from 258 cjq present-day aerosol concentrations whereas the quantities without the 259 cjq "A" at the end are for pre-industial (natural-only) aerosol concentrations 260 cjq 261 PTAUA(i,1,k) = MAX(cldtaupd(iof+i,k), 1.0e-05)! 1e-12 serait instable 262 PTAUA(i,2,k) = MAX(cldtaupd(iof+i,k), 1.0e-05)! pour 32-bit machines 263 POMEGAA(i,1,k) = 0.9999 - 5.0e-04 * EXP(-0.5 * PTAUA(i,1,k)) 264 POMEGAA(i,2,k) = 0.9988 - 2.5e-03 * EXP(-0.05 * PTAUA(i,2,k)) 265 cjq-end 266 ENDDO 267 ENDDO 268 c 275 tauaero(i,k,:,1)=tau_aero(iof+i,k,:,1) 276 pizaero(i,k,:,1)=piz_aero(iof+i,k,:,1) 277 cgaero(i,k,:,1) =cg_aero(iof+i,k,:,1) 278 tauaero(i,k,:,2)=tau_aero(iof+i,k,:,2) 279 pizaero(i,k,:,2)=piz_aero(iof+i,k,:,2) 280 cgaero(i,k,:,2) =cg_aero(iof+i,k,:,2) 281 ENDDO 282 ENDDO 283 ! 284 !====================================================================== 285 CALL LW_LMDAR4(& 286 PPMB, PDP,& 287 PPSOL,PDT0,PEMIS,& 288 PTL, PTAVE, PWV, POZON, PAER,& 289 PCLDLD,PCLDLU,& 290 PVIEW,& 291 zcool, zcool0,& 292 ztoplw,zsollw,ztoplw0,zsollw0,& 293 zsollwdown,& 294 ZFLUP, ZFLDN, ZFLUP0,ZFLDN0) 295 296 297 IF (.NOT. new_aod) THEN 298 ! use old version 299 CALL SW_LMDAR4(PSCT, zrmu0, zfract,& 300 PPMB, PDP, & 301 PPSOL, PALBD, PALBP,& 302 PTAVE, PWV, PQS, POZON, PAER,& 303 PCLDSW, PTAU, POMEGA, PCG,& 304 zheat, zheat0,& 305 zalbpla,ztopsw,zsolsw,ztopsw0,zsolsw0,& 306 ZFSUP,ZFSDN,ZFSUP0,ZFSDN0,& 307 tau_aero(:,:,5,:), piz_aero(:,:,5,:), cg_aero(:,:,5,:),& 308 PTAUA, POMEGAA,& 309 ztopswadaero,zsolswadaero,& 310 ztopswaiaero,zsolswaiaero,& 311 ok_ade, ok_aie) 312 ELSE 313 314 CALL SW_AERO(PSCT, zrmu0, zfract,& 315 PPMB, PDP,& 316 PPSOL, PALBD, PALBP,& 317 PTAVE, PWV, PQS, POZON, PAER,& 318 PCLDSW, PTAU, POMEGA, PCG,& 319 zheat, zheat0,& 320 zalbpla,ztopsw,zsolsw,ztopsw0,zsolsw0,& 321 ZFSUP,ZFSDN,ZFSUP0,ZFSDN0,& 322 tauaero, pizaero, cgaero, & 323 PTAUA, POMEGAA,& 324 ztopswadaero,zsolswadaero,& 325 ztopswad0aero,zsolswad0aero,& 326 ztopswaiaero,zsolswaiaero, & 327 ztopsw_aero,ztopsw0_aero,& 328 zsolsw_aero,zsolsw0_aero,& 329 ok_ade, ok_aie) 330 331 ENDIF 332 !====================================================================== 333 DO i = 1, kdlon 334 radsol(iof+i) = zsolsw(i) + zsollw(i) 335 topsw(iof+i) = ztopsw(i) 336 toplw(iof+i) = ztoplw(i) 337 solsw(iof+i) = zsolsw(i) 338 sollw(iof+i) = zsollw(i) 339 sollwdown(iof+i) = zsollwdown(i) 269 340 DO k = 1, kflev+1 341 lwdn0 ( iof+i,k) = ZFLDN0 ( i,k) 342 lwdn ( iof+i,k) = ZFLDN ( i,k) 343 lwup0 ( iof+i,k) = ZFLUP0 ( i,k) 344 lwup ( iof+i,k) = ZFLUP ( i,k) 345 ENDDO 346 topsw0(iof+i) = ztopsw0(i) 347 toplw0(iof+i) = ztoplw0(i) 348 solsw0(iof+i) = zsolsw0(i) 349 sollw0(iof+i) = zsollw0(i) 350 albpla(iof+i) = zalbpla(i) 351 352 DO k = 1, kflev+1 353 swdn0 ( iof+i,k) = ZFSDN0 ( i,k) 354 swdn ( iof+i,k) = ZFSDN ( i,k) 355 swup0 ( iof+i,k) = ZFSUP0 ( i,k) 356 swup ( iof+i,k) = ZFSUP ( i,k) 357 ENDDO 358 ENDDO 359 !-transform the aerosol forcings, if they have 360 ! to be calculated 361 IF (ok_ade) THEN 362 DO i = 1, kdlon 363 topswad_aero(iof+i) = ztopswadaero(i) 364 topswad0_aero(iof+i) = ztopswad0aero(i) 365 solswad_aero(iof+i) = zsolswadaero(i) 366 solswad0_aero(iof+i) = zsolswad0aero(i) 367 topsw_aero(iof+i,:) = ztopsw_aero(iof+i,:) 368 topsw0_aero(iof+i,:) = ztopsw0_aero(iof+i,:) 369 solsw_aero(iof+i,:) = zsolsw_aero(iof+i,:) 370 solsw0_aero(iof+i,:) = zsolsw0_aero(iof+i,:) 371 372 ENDDO 373 ELSE 374 DO i = 1, kdlon 375 topswad_aero(iof+i) = 0.0 376 solswad_aero(iof+i) = 0.0 377 topswad0_aero(iof+i) = 0.0 378 solswad0_aero(iof+i) = 0.0 379 topsw_aero(iof+i,:) = 0. 380 topsw0_aero(iof+i,:) =0. 381 solsw_aero(iof+i,:) = 0. 382 solsw0_aero(iof+i,:) = 0. 383 ENDDO 384 ENDIF 385 IF (ok_aie) THEN 386 DO i = 1, kdlon 387 topswai_aero(iof+i) = ztopswaiaero(i) 388 solswai_aero(iof+i) = zsolswaiaero(i) 389 ENDDO 390 ELSE 391 DO i = 1, kdlon 392 topswai_aero(iof+i) = 0.0 393 solswai_aero(iof+i) = 0.0 394 ENDDO 395 ENDIF 396 DO k = 1, kflev 270 397 DO i = 1, kdlon 271 PPMB(i,k) = paprs(iof+i,k)/100.0 272 ENDDO 273 ENDDO 274 c 275 DO kk = 1, 5 276 DO k = 1, kflev 277 DO i = 1, kdlon 278 PAER(i,k,kk) = 1.0E-15 279 ENDDO 280 ENDDO 281 ENDDO 282 c-OB 283 DO k = 1, kflev 284 DO i = 1, kdlon 285 tauae(i,k,1)=tau_ae(iof+i,k,1) 286 pizae(i,k,1)=piz_ae(iof+i,k,1) 287 cgae(i,k,1) =cg_ae(iof+i,k,1) 288 tauae(i,k,2)=tau_ae(iof+i,k,2) 289 pizae(i,k,2)=piz_ae(iof+i,k,2) 290 cgae(i,k,2) =cg_ae(iof+i,k,2) 291 ENDDO 292 ENDDO 293 c 294 c===== si iflag_rrtm=0 ================================================ 295 cIM ctes ds clesphys.h CALL LW(RCO2,RCH4,RN2O,RCFC11,RCFC12, 296 cIM ctes ds clesphys.h CALL SW(PSCT, RCO2, zrmu0, zfract, 297 c 298 if (iflag_rrtm.eq.0) then 299 CALL LW_LMDAR4( 300 . PPMB, PDP, 301 . PPSOL,PDT0,PEMIS, 302 . PTL, PTAVE, PWV, POZON, PAER, 303 . PCLDLD,PCLDLU, 304 . PVIEW, 305 . zcool, zcool0, 306 . ztoplw,zsollw,ztoplw0,zsollw0, 307 . zsollwdown, 308 . ZFLUP, ZFLDN, ZFLUP0,ZFLDN0) 309 CALL SW_LMDAR4(PSCT, zrmu0, zfract, 310 S PPMB, PDP, 311 S PPSOL, PALBD, PALBP, 312 S PTAVE, PWV, PQS, POZON, PAER, 313 S PCLDSW, PTAU, POMEGA, PCG, 314 S zheat, zheat0, 315 S zalbpla,ztopsw,zsolsw,ztopsw0,zsolsw0, 316 S ZFSUP,ZFSDN,ZFSUP0,ZFSDN0, 317 S tauae, pizae, cgae, ! aerosol optical properties 318 s PTAUA, POMEGAA, 319 s ztopswad,zsolswad,ztopswai,zsolswai, ! diagnosed aerosol forcing 320 J ok_ade, ok_aie) ! apply aerosol effects or not? 321 else 322 c===== si iflag_rrtm=1, on passe dans SW via RECMWFL =============== 323 PRINT*, "Cette option ne fonctionne pas encore !!!" 324 CALL abort 325 endif ! if(iflag_rrtm=0) 326 327 c====================================================================== 328 DO i = 1, kdlon 329 radsol(iof+i) = zsolsw(i) + zsollw(i) 330 topsw(iof+i) = ztopsw(i) 331 toplw(iof+i) = ztoplw(i) 332 solsw(iof+i) = zsolsw(i) 333 sollw(iof+i) = zsollw(i) 334 sollwdown(iof+i) = zsollwdown(i) 335 cIM 336 DO k = 1, kflev+1 337 lwdn0 ( iof+i,k) = ZFLDN0 ( i,k) 338 lwdn ( iof+i,k) = ZFLDN ( i,k) 339 lwup0 ( iof+i,k) = ZFLUP0 ( i,k) 340 lwup ( iof+i,k) = ZFLUP ( i,k) 341 ENDDO 342 c 343 topsw0(iof+i) = ztopsw0(i) 344 toplw0(iof+i) = ztoplw0(i) 345 solsw0(iof+i) = zsolsw0(i) 346 sollw0(iof+i) = zsollw0(i) 347 albpla(iof+i) = zalbpla(i) 348 cIM 349 DO k = 1, kflev+1 350 swdn0 ( iof+i,k) = ZFSDN0 ( i,k) 351 swdn ( iof+i,k) = ZFSDN ( i,k) 352 swup0 ( iof+i,k) = ZFSUP0 ( i,k) 353 swup ( iof+i,k) = ZFSUP ( i,k) 354 ENDDO !k=1, kflev+1 355 ENDDO 356 cjq-transform the aerosol forcings, if they have 357 cjq to be calculated 358 IF (ok_ade) THEN 359 DO i = 1, kdlon 360 topswad(iof+i) = ztopswad(i) 361 solswad(iof+i) = zsolswad(i) 362 ENDDO 363 ELSE 364 DO i = 1, kdlon 365 topswad(iof+i) = 0.0 366 solswad(iof+i) = 0.0 367 ENDDO 368 ENDIF 369 IF (ok_aie) THEN 370 DO i = 1, kdlon 371 topswai(iof+i) = ztopswai(i) 372 solswai(iof+i) = zsolswai(i) 373 ENDDO 374 ELSE 375 DO i = 1, kdlon 376 topswai(iof+i) = 0.0 377 solswai(iof+i) = 0.0 378 ENDDO 379 ENDIF 380 cjq-end 381 DO k = 1, kflev 382 c DO i = 1, kdlon 383 c heat(iof+i,k) = zheat(i,k) 384 c cool(iof+i,k) = zcool(i,k) 385 c heat0(iof+i,k) = zheat0(i,k) 386 c cool0(iof+i,k) = zcool0(i,k) 387 c ENDDO 388 DO i = 1, kdlon 389 C scale factor to take into account the difference between 390 C dry air and watter vapour scpecific heat capacity 391 zznormcp=1.0+RVTMP2*PWV(i,k) 392 heat(iof+i,k) = zheat(i,k)/zznormcp 393 cool(iof+i,k) = zcool(i,k)/zznormcp 394 heat0(iof+i,k) = zheat0(i,k)/zznormcp 395 cool0(iof+i,k) = zcool0(i,k)/zznormcp 396 ENDDO 397 ENDDO 398 c 399 99999 CONTINUE 400 RETURN 401 END 398 ! scale factor to take into account the difference between 399 ! dry air and watter vapour scpecifi! heat capacity 400 zznormcp=1.0+RVTMP2*PWV(i,k) 401 heat(iof+i,k) = zheat(i,k)/zznormcp 402 cool(iof+i,k) = zcool(i,k)/zznormcp 403 heat0(iof+i,k) = zheat0(i,k)/zznormcp 404 cool0(iof+i,k) = zcool0(i,k)/zznormcp 405 ENDDO 406 ENDDO 407 ! 408 ENDDO 409 410 411 ENDSUBROUTINE radlwsw_aero 412 413
Note: See TracChangeset
for help on using the changeset viewer.