source: trunk/LMDZ.PLUTO/libf/phypluto/dsolver.F @ 3504

Last change on this file since 3504 was 3409, checked in by afalco, 4 months ago

Pluto PCM:
Take into account zeros in aerosol optical properties.
AF

File size: 3.7 KB
Line 
1      SUBROUTINE DSOLVER(NL,GAMA,CP,CM,CPM1,CMM1,E1,E2,E3,E4,BTOP,
2     *                   BSURF,RSF,XK1,XK2)
3
4C  GCM2.0  Feb 2003
5C
6C DOUBLE PRECISION VERSION OF SOLVER
7
8!!      PARAMETER (NMAX=201)
9      IMPLICIT REAL*8  (A-H,O-Z)
10      DIMENSION GAMA(NL),CP(NL),CM(NL),CPM1(NL),CMM1(NL),XK1(NL),
11     *          XK2(NL),E1(NL),E2(NL),E3(NL),E4(NL)
12      DIMENSION AF(2*NL),BF(2*NL),CF(2*NL),DF(2*NL),XK(2*NL)
13C*********************************************************
14C* THIS SUBROUTINE SOLVES FOR THE COEFFICIENTS OF THE    *
15C* TWO STREAM SOLUTION FOR GENERAL BOUNDARY CONDITIONS   *
16C* NO ASSUMPTION OF THE DEPENDENCE ON OPTICAL DEPTH OF   *
17C* C-PLUS OR C-MINUS HAS BEEN MADE.                      *
18C* NL     = NUMBER OF LAYERS IN THE MODEL                *
19C* CP     = C-PLUS EVALUATED AT TAO=0 (TOP)              *
20C* CM     = C-MINUS EVALUATED AT TAO=0 (TOP)             *
21C* CPM1   = C-PLUS  EVALUATED AT TAOSTAR (BOTTOM)        *
22C* CMM1   = C-MINUS EVALUATED AT TAOSTAR (BOTTOM)        *
23C* EP     = EXP(LAMDA*DTAU)                              *
24C* EM     = 1/EP                                         *
25C* E1     = EP + GAMA *EM                                *
26C* E2     = EP - GAMA *EM                                *
27C* E3     = GAMA*EP + EM                                 *
28C* E4     = GAMA*EP - EM                                 *
29C* BTOP   = THE DIFFUSE RADIATION INTO THE MODEL AT TOP  *
30C* BSURF  = THE DIFFUSE RADIATION INTO THE MODEL AT      *
31C*          THE BOTTOM: INCLUDES EMMISION AND REFLECTION *
32C*          OF THE UNATTENUATED PORTION OF THE DIRECT    *
33C*          BEAM. BSTAR+RSF*FO*EXP(-TAOSTAR/U0)          *
34C* RSF    = REFLECTIVITY OF THE SURFACE                  *
35C* XK1    = COEFFICIENT OF THE POSITIVE EXP TERM         *
36C* XK2    = COEFFICIENT OF THE NEGATIVE EXP TERM         *
37C*********************************************************
38
39C======================================================================C
40
41      L=2*NL
42
43C     ************MIXED COEFFICENTS**********
44C     THIS VERSION AVOIDS SINGULARITIES ASSOC.
45C     WITH W0=0 BY SOLVING FOR XK1+XK2, AND XK1-XK2.
46
47      AF(1) = 0.0
48      BF(1) = GAMA(1)+1.
49      CF(1) = GAMA(1)-1.
50      DF(1) = BTOP-CMM1(1)
51      N     = 0
52      LM2   = L-2
53
54C     EVEN TERMS
55
56      DO I=2,LM2,2
57        N     = N+1
58        AF(I) = (E1(N)+E3(N))*(GAMA(N+1)-1.)
59        BF(I) = (E2(N)+E4(N))*(GAMA(N+1)-1.)
60        IF (BF(I).eq.0) THEN
61            BF(I) = 1e-16
62        END IF
63        CF(I) = 2.0*(1.-GAMA(N+1)**2)
64        DF(I) = (GAMA(N+1)-1.) * (CPM1(N+1) - CP(N)) +
65     *            (1.-GAMA(N+1))* (CM(N)-CMM1(N+1))
66      END DO
67
68      N   = 0
69      LM1 = L-1
70      DO I=3,LM1,2
71        N     = N+1
72        AF(I) = 2.0*(1.-GAMA(N)**2)
73        BF(I) = (E1(N)-E3(N))*(1.+GAMA(N+1))
74        IF (BF(I).eq.0) THEN
75            BF(I) = 1e-16
76        END IF
77        CF(I) = (E1(N)+E3(N))*(GAMA(N+1)-1.)
78        DF(I) = E3(N)*(CPM1(N+1) - CP(N)) + E1(N)*(CM(N) - CMM1(N+1))
79      END DO
80
81      AF(L) = E1(NL)-RSF*E3(NL)
82      BF(L) = E2(NL)-RSF*E4(NL)
83      IF (BF(L).eq.0) THEN
84        BF(L) = 1e-16
85      END IF
86      CF(L) = 0.0
87      DF(L) = BSURF-CP(NL)+RSF*CM(NL)
88
89      CALL DTRIDGL(L,AF,BF,CF,DF,XK)
90
91C     ***UNMIX THE COEFFICIENTS****
92
93      DO 28 N=1,NL
94        XK1(N) = XK(2*N-1)+XK(2*N)
95        XK2(N) = XK(2*N-1)-XK(2*N)
96
97C       NOW TEST TO SEE IF XK2 IS REALLY ZERO TO THE LIMIT OF THE
98C       MACHINE ACCURACY  = 1 .E -30
99C       XK2 IS THE COEFFICEINT OF THE GROWING EXPONENTIAL AND MUST
100C       BE TREATED CAREFULLY
101
102        IF(XK2(N) .EQ. 0.0) GO TO 28
103c        IF (ABS (XK2(N)/XK(2*N-1)) .LT. 1.E-30) XK2(N)=0.0
104
105        IF (ABS (XK2(N)/(XK(2*N-1)+1.e-20)) .LT. 1.E-30) XK2(N)=0.0   ! For debug only (with -Ktrap=fp option)
106
107
108   28 CONTINUE
109
110      RETURN
111      END
Note: See TracBrowser for help on using the repository browser.