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

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

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

revision 206 by guez, Wed Apr 29 15:47:56 2015 UTC revision 207 by guez, Thu Sep 1 10:30:53 2016 UTC
# Line 1  Line 1 
1  SUBROUTINE swde(pgg, pref, prmuz, pto1, pw, pre1, pre2, ptr1, ptr2)  module swde_m
2    USE dimens_m  
   USE dimphy  
   USE raddim  
3    IMPLICIT NONE    IMPLICIT NONE
4    
5    ! ------------------------------------------------------------------  contains
6    ! PURPOSE.  
7    ! --------    SUBROUTINE swde(pgg, pref, prmuz, pto1, pw, pre1, pre2, ptr1, ptr2)
8    ! COMPUTES THE REFLECTIVITY AND TRANSMISSIVITY OF A CLOUDY      USE dimens_m
9    ! LAYER USING THE DELTA-EDDINGTON'S APPROXIMATION.      USE dimphy
10        USE raddim
11    ! METHOD.      ! ------------------------------------------------------------------
12    ! -------      ! PURPOSE.
13        ! --------
14    ! STANDARD DELTA-EDDINGTON LAYER CALCULATIONS.      ! COMPUTES THE REFLECTIVITY AND TRANSMISSIVITY OF A CLOUDY
15        ! LAYER USING THE DELTA-EDDINGTON'S APPROXIMATION.
16    ! REFERENCE.  
17    ! ----------      ! METHOD.
18        ! -------
19    ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND  
20    ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS      ! STANDARD DELTA-EDDINGTON LAYER CALCULATIONS.
21    
22    ! AUTHOR.      ! REFERENCE.
23    ! -------      ! ----------
24    ! JEAN-JACQUES MORCRETTE  *ECMWF*  
25        ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
26    ! MODIFICATIONS.      ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS
27    ! --------------  
28    ! ORIGINAL : 88-12-15      ! AUTHOR.
29    ! ------------------------------------------------------------------      ! -------
30    ! * ARGUMENTS:      ! JEAN-JACQUES MORCRETTE  *ECMWF*
31    
32    DOUBLE PRECISION pgg(kdlon) ! ASSYMETRY FACTOR      ! MODIFICATIONS.
33    DOUBLE PRECISION pref(kdlon) ! REFLECTIVITY OF THE UNDERLYING LAYER      ! --------------
34    DOUBLE PRECISION prmuz(kdlon) ! COSINE OF SOLAR ZENITH ANGLE      ! ORIGINAL : 88-12-15
35    DOUBLE PRECISION pto1(kdlon) ! OPTICAL THICKNESS      ! ------------------------------------------------------------------
36    DOUBLE PRECISION pw(kdlon) ! SINGLE SCATTERING ALBEDO      ! * ARGUMENTS:
37    DOUBLE PRECISION pre1(kdlon) ! LAYER REFLECTIVITY (NO UNDERLYING-LAYER REFLECTION)  
38    DOUBLE PRECISION pre2(kdlon) ! LAYER REFLECTIVITY      DOUBLE PRECISION pgg(kdlon) ! ASSYMETRY FACTOR
39    DOUBLE PRECISION ptr1(kdlon) ! LAYER TRANSMISSIVITY (NO UNDERLYING-LAYER REFLECTION)      DOUBLE PRECISION pref(kdlon) ! REFLECTIVITY OF THE UNDERLYING LAYER
40    DOUBLE PRECISION ptr2(kdlon) ! LAYER TRANSMISSIVITY      DOUBLE PRECISION prmuz(kdlon) ! COSINE OF SOLAR ZENITH ANGLE
41        DOUBLE PRECISION pto1(kdlon) ! OPTICAL THICKNESS
42    ! * LOCAL VARIABLES:      DOUBLE PRECISION pw(kdlon) ! SINGLE SCATTERING ALBEDO
43        DOUBLE PRECISION pre1(kdlon) ! LAYER REFLECTIVITY (NO UNDERLYING-LAYER REFLECTION)
44    INTEGER jl      DOUBLE PRECISION pre2(kdlon) ! LAYER REFLECTIVITY
45    DOUBLE PRECISION zff, zgp, ztop, zwcp, zdt, zx1, zwm      DOUBLE PRECISION ptr1(kdlon) ! LAYER TRANSMISSIVITY (NO UNDERLYING-LAYER REFLECTION)
46    DOUBLE PRECISION zrm2, zrk, zx2, zrp, zalpha, zbeta, zarg      DOUBLE PRECISION ptr2(kdlon) ! LAYER TRANSMISSIVITY
47    DOUBLE PRECISION zexmu0, zarg2, zexkp, zexkm, zxp2p, zxm2p, zap2b  
48    DOUBLE PRECISION zam2b      ! * LOCAL VARIABLES:
49    DOUBLE PRECISION za11, za12, za13, za21, za22, za23  
50    DOUBLE PRECISION zdena, zc1a, zc2a, zri0a, zri1a      INTEGER jl
51    DOUBLE PRECISION zri0b, zri1b      DOUBLE PRECISION zff, zgp, ztop, zwcp, zdt, zx1, zwm
52    DOUBLE PRECISION zb21, zb22, zb23, zdenb, zc1b, zc2b      DOUBLE PRECISION zrm2, zrk, zx2, zrp, zalpha, zbeta, zarg
53    DOUBLE PRECISION zri0c, zri1c, zri0d, zri1d      DOUBLE PRECISION zexmu0, zarg2, zexkp, zexkm, zxp2p, zxm2p, zap2b
54    ! ------------------------------------------------------------------      DOUBLE PRECISION zam2b
55        DOUBLE PRECISION za11, za12, za13, za21, za22, za23
56    ! *         1.      DELTA-EDDINGTON CALCULATIONS      DOUBLE PRECISION zdena, zc1a, zc2a, zri0a, zri1a
57        DOUBLE PRECISION zri0b, zri1b
58        DOUBLE PRECISION zb21, zb22, zb23, zdenb, zc1b, zc2b
59    DO jl = 1, kdlon      DOUBLE PRECISION zri0c, zri1c, zri0d, zri1d
60        ! ------------------------------------------------------------------
61      ! *         1.1     SET UP THE DELTA-MODIFIED PARAMETERS  
62        ! *         1.      DELTA-EDDINGTON CALCULATIONS
63    
64      zff = pgg(jl)*pgg(jl)  
65      zgp = pgg(jl)/(1.+pgg(jl))      DO jl = 1, kdlon
66      ztop = (1.-pw(jl)*zff)*pto1(jl)  
67      zwcp = (1-zff)*pw(jl)/(1.-pw(jl)*zff)         ! *         1.1     SET UP THE DELTA-MODIFIED PARAMETERS
68      zdt = 2./3.  
69      zx1 = 1. - zwcp*zgp  
70      zwm = 1. - zwcp         zff = pgg(jl)*pgg(jl)
71      zrm2 = prmuz(jl)*prmuz(jl)         zgp = pgg(jl)/(1.+pgg(jl))
72      zrk = sqrt(3.*zwm*zx1)         ztop = (1.-pw(jl)*zff)*pto1(jl)
73      zx2 = 4.*(1.-zrk*zrk*zrm2)         zwcp = (1-zff)*pw(jl)/(1.-pw(jl)*zff)
74      zrp = zrk/zx1         zdt = 2./3.
75      zalpha = 3.*zwcp*zrm2*(1.+zgp*zwm)/zx2         zx1 = 1. - zwcp*zgp
76      zbeta = 3.*zwcp*prmuz(jl)*(1.+3.*zgp*zrm2*zwm)/zx2         zwm = 1. - zwcp
77      ! MAF      ZARG=MIN(ZTOP/PRMUZ(JL),200.)         zrm2 = prmuz(jl)*prmuz(jl)
78      zarg = min(ztop/prmuz(jl), 2.0D+2)         zrk = sqrt(3.*zwm*zx1)
79      zexmu0 = exp(-zarg)         zx2 = 4.*(1.-zrk*zrk*zrm2)
80      ! MAF      ZARG2=MIN(ZRK*ZTOP,200.)         zrp = zrk/zx1
81      zarg2 = min(zrk*ztop, 2.0D+2)         zalpha = 3.*zwcp*zrm2*(1.+zgp*zwm)/zx2
82      zexkp = exp(zarg2)         zbeta = 3.*zwcp*prmuz(jl)*(1.+3.*zgp*zrm2*zwm)/zx2
83      zexkm = 1./zexkp         ! MAF      ZARG=MIN(ZTOP/PRMUZ(JL),200.)
84      zxp2p = 1. + zdt*zrp         zarg = min(ztop/prmuz(jl), 2.0D+2)
85      zxm2p = 1. - zdt*zrp         zexmu0 = exp(-zarg)
86      zap2b = zalpha + zdt*zbeta         ! MAF      ZARG2=MIN(ZRK*ZTOP,200.)
87      zam2b = zalpha - zdt*zbeta         zarg2 = min(zrk*ztop, 2.0D+2)
88           zexkp = exp(zarg2)
89      ! *         1.2     WITHOUT REFLECTION FROM THE UNDERLYING LAYER         zexkm = 1./zexkp
90           zxp2p = 1. + zdt*zrp
91           zxm2p = 1. - zdt*zrp
92      za11 = zxp2p         zap2b = zalpha + zdt*zbeta
93      za12 = zxm2p         zam2b = zalpha - zdt*zbeta
94      za13 = zap2b  
95      za22 = zxp2p*zexkp         ! *         1.2     WITHOUT REFLECTION FROM THE UNDERLYING LAYER
96      za21 = zxm2p*zexkm  
97      za23 = zam2b*zexmu0  
98      zdena = za11*za22 - za21*za12         za11 = zxp2p
99      zc1a = (za22*za13-za12*za23)/zdena         za12 = zxm2p
100      zc2a = (za11*za23-za21*za13)/zdena         za13 = zap2b
101      zri0a = zc1a + zc2a - zalpha         za22 = zxp2p*zexkp
102      zri1a = zrp*(zc1a-zc2a) - zbeta         za21 = zxm2p*zexkm
103      pre1(jl) = (zri0a-zdt*zri1a)/prmuz(jl)         za23 = zam2b*zexmu0
104      zri0b = zc1a*zexkm + zc2a*zexkp - zalpha*zexmu0         zdena = za11*za22 - za21*za12
105      zri1b = zrp*(zc1a*zexkm-zc2a*zexkp) - zbeta*zexmu0         zc1a = (za22*za13-za12*za23)/zdena
106      ptr1(jl) = zexmu0 + (zri0b+zdt*zri1b)/prmuz(jl)         zc2a = (za11*za23-za21*za13)/zdena
107           zri0a = zc1a + zc2a - zalpha
108      ! *         1.3     WITH REFLECTION FROM THE UNDERLYING LAYER         zri1a = zrp*(zc1a-zc2a) - zbeta
109           pre1(jl) = (zri0a-zdt*zri1a)/prmuz(jl)
110           zri0b = zc1a*zexkm + zc2a*zexkp - zalpha*zexmu0
111      zb21 = za21 - pref(jl)*zxp2p*zexkm         zri1b = zrp*(zc1a*zexkm-zc2a*zexkp) - zbeta*zexmu0
112      zb22 = za22 - pref(jl)*zxm2p*zexkp         ptr1(jl) = zexmu0 + (zri0b+zdt*zri1b)/prmuz(jl)
113      zb23 = za23 - pref(jl)*zexmu0*(zap2b-prmuz(jl))  
114      zdenb = za11*zb22 - zb21*za12         ! *         1.3     WITH REFLECTION FROM THE UNDERLYING LAYER
115      zc1b = (zb22*za13-za12*zb23)/zdenb  
116      zc2b = (za11*zb23-zb21*za13)/zdenb  
117      zri0c = zc1b + zc2b - zalpha         zb21 = za21 - pref(jl)*zxp2p*zexkm
118      zri1c = zrp*(zc1b-zc2b) - zbeta         zb22 = za22 - pref(jl)*zxm2p*zexkp
119      pre2(jl) = (zri0c-zdt*zri1c)/prmuz(jl)         zb23 = za23 - pref(jl)*zexmu0*(zap2b-prmuz(jl))
120      zri0d = zc1b*zexkm + zc2b*zexkp - zalpha*zexmu0         zdenb = za11*zb22 - zb21*za12
121      zri1d = zrp*(zc1b*zexkm-zc2b*zexkp) - zbeta*zexmu0         zc1b = (zb22*za13-za12*zb23)/zdenb
122      ptr2(jl) = zexmu0 + (zri0d+zdt*zri1d)/prmuz(jl)         zc2b = (za11*zb23-zb21*za13)/zdenb
123           zri0c = zc1b + zc2b - zalpha
124    END DO         zri1c = zrp*(zc1b-zc2b) - zbeta
125    RETURN         pre2(jl) = (zri0c-zdt*zri1c)/prmuz(jl)
126  END SUBROUTINE swde         zri0d = zc1b*zexkm + zc2b*zexkp - zalpha*zexmu0
127           zri1d = zrp*(zc1b*zexkm-zc2b*zexkp) - zbeta*zexmu0
128           ptr2(jl) = zexmu0 + (zri0d+zdt*zri1d)/prmuz(jl)
129    
130        END DO
131        RETURN
132      END SUBROUTINE swde
133    
134    end module swde_m

Legend:
Removed from v.206  
changed lines
  Added in v.207

  ViewVC Help
Powered by ViewVC 1.1.21