/[lmdze]/trunk/Sources/phylmd/Radlwsw/sw.f
ViewVC logotype

Diff of /trunk/Sources/phylmd/Radlwsw/sw.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 217 by guez, Thu Mar 30 14:25:18 2017 UTC revision 220 by guez, Tue Apr 4 14:52:21 2017 UTC
# Line 7  contains Line 7  contains
7    SUBROUTINE SW(PSCT, PRMU0, PFRAC, PPMB, PDP, PPSOL, PALBD, PALBP, PTAVE, &    SUBROUTINE SW(PSCT, PRMU0, PFRAC, PPMB, PDP, PPSOL, PALBD, PALBP, PTAVE, &
8         PWV, PQS, POZON, PCLDSW, PTAU, POMEGA, PCG, PHEAT, PHEAT0, PALBPLA, &         PWV, PQS, POZON, PCLDSW, PTAU, POMEGA, PCG, PHEAT, PHEAT0, PALBPLA, &
9         PTOPSW, PSOLSW, PTOPSW0, PSOLSW0, ZFSUP, ZFSDN, ZFSUP0, ZFSDN0, &         PTOPSW, PSOLSW, PTOPSW0, PSOLSW0, ZFSUP, ZFSDN, ZFSUP0, ZFSDN0, &
10         PTOPSWAD, PSOLSWAD, PTOPSWAI, PSOLSWAI, ok_ade)         PTOPSWAD, PSOLSWAD, ok_ade)
11    
12      ! Purpose.      ! Purpose.
13      ! This routine computes the shortwave radiation fluxes in two      ! This routine computes the shortwave radiation fluxes in two
# Line 34  contains Line 34  contains
34      USE suphec_m, ONLY: rcpd, rday, rg      USE suphec_m, ONLY: rcpd, rday, rg
35      use sw1s_m, only: sw1s      use sw1s_m, only: sw1s
36      use sw2s_m, only: sw2s      use sw2s_m, only: sw2s
37        use swu_m, only: swu
38    
39      ! ARGUMENTS:      ! ARGUMENTS:
40    
# Line 65  contains Line 66  contains
66      DOUBLE PRECISION ZFSUP0(KDLON, KFLEV+1)      DOUBLE PRECISION ZFSUP0(KDLON, KFLEV+1)
67      DOUBLE PRECISION ZFSDN0(KDLON, KFLEV+1)      DOUBLE PRECISION ZFSDN0(KDLON, KFLEV+1)
68    
69      DOUBLE PRECISION, intent(out):: PTOPSWAD(KDLON)      DOUBLE PRECISION, intent(out):: PTOPSWAD(KDLON)
70      ! (diagnosed aerosol forcing)SHORTWAVE FLUX AT T.O.A.(+AEROSOL DIR)      ! (diagnosed aerosol forcing)SHORTWAVE FLUX AT T.O.A.(+AEROSOL DIR)
71    
72      DOUBLE PRECISION, intent(out):: PSOLSWAD(KDLON)      DOUBLE PRECISION, intent(out):: PSOLSWAD(KDLON)
73      ! (diagnosed aerosol forcing)SHORTWAVE FLUX AT SURFACE(+AEROSOL DIR)      ! (diagnosed aerosol forcing)SHORTWAVE FLUX AT SURFACE(+AEROSOL DIR)
74    
     DOUBLE PRECISION, intent(out):: PTOPSWAI(KDLON)  
     ! (diagnosed aerosol forcing)SHORTWAVE FLUX AT T.O.A.(+AEROSOL IND)  
   
     DOUBLE PRECISION, intent(out):: PSOLSWAI(KDLON)  
     ! (diagnosed aerosol forcing)SHORTWAVE FLUX AT SURFACE(+AEROSOL IND)  
   
75      logical, intent(in):: ok_ade ! use aerosol forcings or not?      logical, intent(in):: ok_ade ! use aerosol forcings or not?
76    
77      ! Local:      ! Local:
78    
79      DOUBLE PRECISION ZOZ(KDLON, KFLEV)      DOUBLE PRECISION ZOZ(KDLON, KFLEV)
80      DOUBLE PRECISION ZAKI(KDLON, 2)      DOUBLE PRECISION ZAKI(KDLON, 2)
81      DOUBLE PRECISION ZCLD(KDLON, KFLEV)      DOUBLE PRECISION ZCLD(KDLON, KFLEV)
82      DOUBLE PRECISION ZCLEAR(KDLON)      DOUBLE PRECISION ZCLEAR(KDLON)
83      DOUBLE PRECISION ZDSIG(KDLON, KFLEV)      DOUBLE PRECISION ZDSIG(KDLON, KFLEV)
84      DOUBLE PRECISION ZFACT(KDLON)      DOUBLE PRECISION ZFACT(KDLON)
85      DOUBLE PRECISION ZFD(KDLON, KFLEV+1)      DOUBLE PRECISION ZFD(KDLON, KFLEV+1)
# Line 103  contains Line 98  contains
98      INTEGER:: itapsw = 0      INTEGER:: itapsw = 0
99      LOGICAL:: appel1er = .TRUE.      LOGICAL:: appel1er = .TRUE.
100      !jq-Introduced for aerosol forcings      !jq-Introduced for aerosol forcings
     logical, save:: flag_aer  
101    
102      !jq - Fluxes including aerosol effects      !jq - Fluxes including aerosol effects
103      DOUBLE PRECISION, save:: ZFSUPAD(KDLON, KFLEV+1)      DOUBLE PRECISION, save:: ZFSUPAD(KDLON, KFLEV+1)
104      DOUBLE PRECISION, save:: ZFSDNAD(KDLON, KFLEV+1)      DOUBLE PRECISION, save:: ZFSDNAD(KDLON, KFLEV+1)
     DOUBLE PRECISION, save:: ZFSUPAI(KDLON, KFLEV+1)  
     DOUBLE PRECISION, save:: ZFSDNAI(KDLON, KFLEV+1)  
105    
106      logical:: initialized = .false.      logical:: initialized = .false.
107      REAL, PARAMETER :: dobson_u = 2.1415E-05 ! Dobson unit, in kg m-2      REAL, PARAMETER :: dobson_u = 2.1415E-05 ! Dobson unit, in kg m-2
# Line 117  contains Line 109  contains
109      !-------------------------------------------------------------------      !-------------------------------------------------------------------
110    
111      if(.not.initialized) then      if(.not.initialized) then
        flag_aer=.false.  
112         initialized=.TRUE.         initialized=.TRUE.
113         ZFSUPAD = 0.         ZFSUPAD = 0.
114         ZFSDNAD = 0.         ZFSDNAD = 0.
        ZFSUPAI = 0.  
        ZFSDNAI = 0.  
115      endif      endif
116      !rv      !rv
117    
# Line 132  contains Line 121  contains
121         appel1er = .FALSE.         appel1er = .FALSE.
122      ENDIF      ENDIF
123    
124      IF (MOD(itapsw, swpas).EQ.0) THEN      IF (MOD(itapsw, swpas) == 0) THEN
125         DO JK = 1 , KFLEV         DO JK = 1, KFLEV
126            DO JL = 1, KDLON            DO JL = 1, KDLON
127               ZCLDSW0(JL, JK) = 0.0               ZCLDSW0(JL, JK) = 0.0
128               ZOZ(JL, JK) = POZON(JL, JK) / (dobson_u * 1E3 * rg) * PDP(JL, JK)               ZOZ(JL, JK) = POZON(JL, JK) / (dobson_u * 1E3 * rg) * PDP(JL, JK)
# Line 145  contains Line 134  contains
134              PRMU0, PFRAC, PTAVE, PWV, &              PRMU0, PFRAC, PTAVE, PWV, &
135              ZAKI, ZCLD, ZCLEAR, ZDSIG, ZFACT, ZRMU, ZSEC, ZUD)              ZAKI, ZCLD, ZCLEAR, ZDSIG, ZFACT, ZRMU, ZSEC, ZUD)
136         INU = 1         INU = 1
137         CALL SW1S(INU, flag_aer, PALBD, PALBP, PCG, ZCLD, ZCLEAR, ZDSIG, &         CALL SW1S(INU, PALBD, PALBP, PCG, ZCLD, ZCLEAR, ZDSIG, POMEGA, ZOZ, &
138              POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD, ZFD, ZFU)              ZRMU, ZSEC, PTAU, ZUD, ZFD, ZFU)
139         INU = 2         INU = 2
140         CALL SW2S(INU, flag_aer, ZAKI, PALBD, PALBP, PCG, ZCLD, ZCLEAR, ZDSIG, &         CALL SW2S(INU, ZAKI, PALBD, PALBP, PCG, ZCLD, ZCLEAR, ZDSIG, POMEGA, &
141              POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD, PWV, PQS, ZFDOWN, ZFUP)              ZOZ, ZRMU, ZSEC, PTAU, ZUD, PWV, PQS, ZFDOWN, ZFUP)
142         DO JK = 1 , KFLEV+1         DO JK = 1, KFLEV+1
143            DO JL = 1, KDLON            DO JL = 1, KDLON
144               ZFSUP0(JL, JK) = (ZFUP(JL, JK) + ZFU(JL, JK)) * ZFACT(JL)               ZFSUP0(JL, JK) = (ZFUP(JL, JK) + ZFU(JL, JK)) * ZFACT(JL)
145               ZFSDN0(JL, JK) = (ZFDOWN(JL, JK) + ZFD(JL, JK)) * ZFACT(JL)               ZFSDN0(JL, JK) = (ZFDOWN(JL, JK) + ZFD(JL, JK)) * ZFACT(JL)
146            ENDDO            ENDDO
147         ENDDO         ENDDO
148    
        flag_aer= .false.  
149         CALL SWU(PSCT, PCLDSW, PPMB, PPSOL, &         CALL SWU(PSCT, PCLDSW, PPMB, PPSOL, &
150              PRMU0, PFRAC, PTAVE, PWV, &              PRMU0, PFRAC, PTAVE, PWV, &
151              ZAKI, ZCLD, ZCLEAR, ZDSIG, ZFACT, ZRMU, ZSEC, ZUD)              ZAKI, ZCLD, ZCLEAR, ZDSIG, ZFACT, ZRMU, ZSEC, ZUD)
152         INU = 1         INU = 1
153         CALL SW1S(INU, .false., PALBD, PALBP, PCG, ZCLD, ZCLEAR, ZDSIG, &         CALL SW1S(INU, PALBD, PALBP, PCG, ZCLD, ZCLEAR, ZDSIG, POMEGA, ZOZ, &
154              POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD, ZFD, ZFU)              ZRMU, ZSEC, PTAU, ZUD, ZFD, ZFU)
155         INU = 2         INU = 2
156         CALL SW2S(INU, .false., ZAKI, PALBD, PALBP, PCG, ZCLD, ZCLEAR, ZDSIG, &         CALL SW2S(INU, ZAKI, PALBD, PALBP, PCG, ZCLD, ZCLEAR, ZDSIG, POMEGA, &
157              POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD, PWV, PQS, ZFDOWN, ZFUP)              ZOZ, ZRMU, ZSEC, PTAU, ZUD, PWV, PQS, ZFDOWN, ZFUP)
158    
159         ! cloudy-sky:         ! cloudy-sky:
160    
161         DO JK = 1 , KFLEV+1         DO JK = 1, KFLEV+1
162            DO JL = 1, KDLON            DO JL = 1, KDLON
163               ZFSUP(JL, JK) = (ZFUP(JL, JK) + ZFU(JL, JK)) * ZFACT(JL)               ZFSUP(JL, JK) = (ZFUP(JL, JK) + ZFU(JL, JK)) * ZFACT(JL)
164               ZFSDN(JL, JK) = (ZFDOWN(JL, JK) + ZFD(JL, JK)) * ZFACT(JL)               ZFSDN(JL, JK) = (ZFDOWN(JL, JK) + ZFD(JL, JK)) * ZFACT(JL)
# Line 179  contains Line 167  contains
167    
168         IF (ok_ade) THEN         IF (ok_ade) THEN
169            ! cloudy-sky + aerosol dir OB            ! cloudy-sky + aerosol dir OB
           flag_aer= .true.  
170            CALL SWU(PSCT, PCLDSW, PPMB, PPSOL, PRMU0, PFRAC, PTAVE, PWV, ZAKI, &            CALL SWU(PSCT, PCLDSW, PPMB, PPSOL, PRMU0, PFRAC, PTAVE, PWV, ZAKI, &
171                 ZCLD, ZCLEAR, ZDSIG, ZFACT, ZRMU, ZSEC, ZUD)                 ZCLD, ZCLEAR, ZDSIG, ZFACT, ZRMU, ZSEC, ZUD)
172            INU = 1            INU = 1
173            CALL SW1S(INU, .true., PALBD, PALBP, PCG, ZCLD, ZCLEAR, ZDSIG, &            CALL SW1S(INU, PALBD, PALBP, PCG, ZCLD, ZCLEAR, ZDSIG, POMEGA, ZOZ, &
174                 POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD, ZFD, ZFU)                 ZRMU, ZSEC, PTAU, ZUD, ZFD, ZFU)
175            INU = 2            INU = 2
176            CALL SW2S(INU, .true., ZAKI, PALBD, PALBP, PCG, ZCLD, ZCLEAR, &            CALL SW2S(INU, ZAKI, PALBD, PALBP, PCG, ZCLD, ZCLEAR, ZDSIG, &
177                 ZDSIG, POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD, PWV, PQS, ZFDOWN, &                 POMEGA, ZOZ, ZRMU, ZSEC, PTAU, ZUD, PWV, PQS, ZFDOWN, ZFUP)
178                 ZFUP)            DO JK = 1, KFLEV+1
           DO JK = 1 , KFLEV+1  
179               DO JL = 1, KDLON               DO JL = 1, KDLON
180                  ZFSUPAD(JL, JK) = ZFSUP(JL, JK)                  ZFSUPAD(JL, JK) = ZFSUP(JL, JK)
181                  ZFSDNAD(JL, JK) = ZFSDN(JL, JK)                  ZFSDNAD(JL, JK) = ZFSDN(JL, JK)
182                  ZFSUP(JL, JK) = (ZFUP(JL, JK) + ZFU(JL, JK)) * ZFACT(JL)                  ZFSUP(JL, JK) = (ZFUP(JL, JK) + ZFU(JL, JK)) * ZFACT(JL)
183                  ZFSDN(JL, JK) = (ZFDOWN(JL, JK) + ZFD(JL, JK)) * ZFACT(JL)                  ZFSDN(JL, JK) = (ZFDOWN(JL, JK) + ZFD(JL, JK)) * ZFACT(JL)
184               ENDDO               ENDDO
# Line 225  contains Line 211  contains
211    
212         PSOLSWAD(i) = ZFSDNAD(i, 1) - ZFSUPAD(i, 1)         PSOLSWAD(i) = ZFSDNAD(i, 1) - ZFSUPAD(i, 1)
213         PTOPSWAD(i) = ZFSDNAD(i, KFLEV+1) - ZFSUPAD(i, KFLEV+1)         PTOPSWAD(i) = ZFSDNAD(i, KFLEV+1) - ZFSUPAD(i, KFLEV+1)
   
        PSOLSWAI(i) = ZFSDNAI(i, 1) - ZFSUPAI(i, 1)  
        PTOPSWAI(i) = ZFSDNAI(i, KFLEV+1) - ZFSUPAI(i, KFLEV+1)  
214      ENDDO      ENDDO
215    
216    END SUBROUTINE SW    END SUBROUTINE SW

Legend:
Removed from v.217  
changed lines
  Added in v.220

  ViewVC Help
Powered by ViewVC 1.1.21