source: palm/trunk/UTIL/chemistry/gasphase_preproc/kpp/int/oldies/kpp_rodas.f @ 2696

Last change on this file since 2696 was 2696, checked in by kanani, 6 years ago

Merge of branch palm4u into trunk

File size: 18.7 KB
Line 
1      SUBROUTINE INTEGRATE( TIN, TOUT )
2         
3      IMPLICIT KPP_REAL (A-H,O-Z)       
4      INCLUDE 'KPP_ROOT_params.h'
5      INCLUDE 'KPP_ROOT_global.h'
6
7C TIN - Start Time
8      KPP_REAL TIN
9C TOUT - End Time
10      KPP_REAL TOUT
11      INTEGER i
12     
13      PARAMETER (LWORK=2*NVAR*NVAR+14*NVAR+20,LIWORK=NVAR+20)
14      KPP_REAL WORK(LWORK)
15      INTEGER IWORK(LIWORK)
16      EXTERNAL FUNC_CHEM,JAC_CHEM
17
18
19      ITOL=1     ! --- VECTOR TOLERANCES
20      IJAC=1     ! --- COMPUTE THE JACOBIAN ANALYTICALLY
21      MLJAC=NVAR ! --- JACOBIAN IS A FULL MATRIX
22      MUJAC=NVAR ! --- JACOBIAN IS A FULL MATRIX
23      IMAS=0     ! --- DIFFERENTIAL EQUATION IS IN EXPLICIT FORM
24      IOUT=0     ! --- OUTPUT ROUTINE IS NOT USED DURING INTEGRATION
25      IDFX=0     ! --- INTERNAL TIME DERIVATIVE
26
27      DO i=1,20
28        IWORK(i) = 0
29        WORK(i) = 0.D0
30      ENDDO
31
32      IWORK(3) = 1
33
34      CALL ATMRODAS(NVAR,FUNC_CHEM,Autonomous,TIN,VAR,TOUT,
35     &                  STEPMIN,RTOL,ATOL,ITOL,
36     &                  JAC_CHEM,IJAC,MLJAC,MUJAC,FUNC_CHEM,IDFX,
37     &                  FUNC_CHEM,IMAS,
38     &                  WORK,LWORK,IWORK,LIWORK,IDID)
39
40      IF (IDID.LT.0) THEN
41        print *,'ATMRODAS: Unsucessfull exit at T=',
42     &          TIN,' (IDID=',IDID,')'
43      ENDIF
44
45
46      RETURN
47      END
48
49
50      SUBROUTINE ATMRODAS(N,FCN,IFCN,X,Y,XEND,H,
51     &                  RelTol,AbsTol,ITOL,
52     &                  JAC ,IJAC,MLJAC,MUJAC,DFX,IDFX,
53     &                  MAS ,IMAS,
54     &                  WORK,LWORK,IWORK,LIWORK,IDID)
55C ----------------------------------------------------------
56C     NUMERICAL SOLUTION OF A STIFF (OR DIFFERENTIAL ALGEBRAIC)
57C     SYSTEM OF FIRST 0RDER ORDINARY DIFFERENTIAL EQUATIONS  MY'=F(X,Y).
58C     THIS IS AN EMBEDDED ROSENBROCK METHOD OF ORDER (3)4 
59C     (WITH STEP SIZE CONTROL).
60C     C.F. SECTIONS IV.7  AND VI.3
61C
62C     AUTHORS: E. HAIRER AND G. WANNER
63C              UNIVERSITE DE GENEVE, DEPT. DE MATHEMATIQUES
64C              CH-1211 GENEVE 24, SWITZERLAND
65C              E-MAIL:  HAIRER@DIVSUN.UNIGE.CH,  WANNER@DIVSUN.UNIGE.CH
66C ---------------------------------------------------------
67C *** *** *** *** *** *** *** *** *** *** *** *** ***
68C          DECLARATIONS
69C *** *** *** *** *** *** *** *** *** *** *** *** ***
70      IMPLICIT KPP_REAL (A-H,O-Z)
71      DIMENSION Y(N),AbsTol(*),RelTol(*),WORK(LWORK),IWORK(LIWORK)
72      LOGICAL AUTNMS,IMPLCT,JBAND,ARRET,PRED
73      EXTERNAL FCN,JAC,DFX,MAS
74      COMMON /STATISTICS/ NFCN,NACCPT,NREJCT,NSTEP,NJAC,NDEC,NSOL
75C *** *** *** *** *** *** ***
76C        SETTING THE PARAMETERS
77C *** *** *** *** *** *** ***
78      ARRET=.FALSE.
79      METH = 1
80      NMAX=100000
81C -------- PRED   STEP SIZE CONTROL
82      IF(IWORK(3).LE.1)THEN
83         PRED=.TRUE.
84      ELSE
85         PRED=.FALSE.
86      END IF
87      UROUND=1.D-16
88      NM1 = N
89      M1  = N
90      M2  = N
91C -------- MAXIMAL STEP SIZE
92      IF(WORK(2).EQ.0.D0)THEN
93         HMAX=XEND-X
94      ELSE
95         HMAX=WORK(2)
96      END IF
97C -------  FAC1,FAC2     PARAMETERS FOR STEP SIZE SELECTION
98      IF(WORK(3).EQ.0.D0)THEN
99         FAC1=5.D0
100      ELSE
101         FAC1=1.D0/WORK(3)
102      END IF
103      IF(WORK(4).EQ.0.D0)THEN
104         FAC2=1.D0/6.0D0
105      ELSE
106         FAC2=1.D0/WORK(4)
107      END IF
108      IF (FAC1.LT.1.0D0.OR.FAC2.GT.1.0D0) THEN
109            WRITE(6,*)' CURIOUS INPUT WORK(3,4)=',WORK(3),WORK(4)
110            ARRET=.TRUE.
111         END IF
112C --------- SAFE     SAFETY FACTOR IN STEP SIZE PREDICTION
113      SAFE=0.9D0
114C --------- CHECK IF TOLERANCES ARE O.K.
115      IF (ITOL.EQ.0) THEN
116          IF (AbsTol(1).LE.0.D0.OR.RelTol(1).LE.10.D0*UROUND) THEN
117              WRITE (6,*) ' TOLERANCES ARE TOO SMALL'
118              ARRET=.TRUE.
119          END IF
120      ELSE
121          DO I=1,N
122             IF (AbsTol(I).LE.0.D0.OR.RelTol(I).LE.10.D0*UROUND) THEN
123                WRITE (6,*) ' TOLERANCES(',I,') ARE TOO SMALL'
124                ARRET=.TRUE.
125             END IF
126          END DO
127      END IF
128     
129      IF (ARRET) STOP
130      NM1 = N
131C *** *** *** *** *** *** *** *** *** *** *** *** ***
132C         COMPUTATION OF ARRAY ENTRIES
133C *** *** *** *** *** *** *** *** *** *** *** *** ***
134C ---- AUTONOMOUS, IMPLICIT, BANDED OR NOT ?
135      AUTNMS=IFCN.EQ.0
136      IMPLCT=IMAS.NE.0
137      JBAND=MLJAC.LT.NM1
138C -------- COMPUTATION OF THE ROW-DIMENSIONS OF THE 2-ARRAYS ---
139C -- JACOBIAN AND MATRIX E
140         MLJAC=NM1
141         MUJAC=NM1
142         LDJAC=NM1
143         LDE=NM1
144C -- MASS MATRIX
145      IF (IMPLCT) THEN
146         print *, 'Implicit 1'
147      ELSE
148         LDMAS=0
149         IJOB=1
150      END IF
151      LDMAS2=MAX(1,LDMAS)
152C ------- PREPARE THE ENTRY-POINTS FOR THE ARRAYS IN WORK -----
153      IEYNEW=21
154      IEDY1=IEYNEW+N
155      IEDY=IEDY1+N
156      IEAK1=IEDY+N
157      IEAK2=IEAK1+N
158      IEAK3=IEAK2+N
159      IEAK4=IEAK3+N
160      IEAK5=IEAK4+N
161      IEAK6=IEAK5+N
162      IEFX =IEAK6+N
163      IECON=IEFX+N
164      IEJAC=IECON+4*N
165      IEMAS=IEJAC+N*LDJAC
166      IEE  =IEMAS+NM1*LDMAS
167C ------ TOTAL STORAGE REQUIREMENT -----------
168      ISTORE=IEE+NM1*LDE-1
169      IF(ISTORE.GT.LWORK)THEN
170         WRITE(6,*)' INSUFFICIENT STORAGE FOR WORK, MIN. LWORK=',ISTORE
171         ARRET=.TRUE.
172      END IF
173C ------- ENTRY POINTS FOR INTEGER WORKSPACE -----
174      IEIP=21
175      ISTORE=IEIP+NM1-1
176      IF(ISTORE.GT.LIWORK)THEN
177         WRITE(6,*)' INSUFF. STORAGE FOR IWORK, MIN. LIWORK=',ISTORE
178         ARRET=.TRUE.
179      END IF
180C ------ WHEN A FAIL HAS OCCURED, WE RETURN WITH IDID=-1
181      IF (ARRET) THEN
182         IDID=-1
183         RETURN
184      END IF
185C -------- CALL TO CORE INTEGRATOR ------------
186      CALL ROSCOR(N,FCN,X,Y,XEND,HMAX,H,RelTol,AbsTol,ITOL,JAC,IJAC,
187     &   MLJAC,MUJAC,DFX,IDFX,MAS,MLMAS,MUMAS,IOUT,IDID,NMAX,
188     &   UROUND,METH,IJOB,FAC1,FAC2,SAFE,AUTNMS,IMPLCT,JBAND,PRED,LDJAC,
189     &   LDE,LDMAS2,WORK(IEYNEW),WORK(IEDY1),WORK(IEDY),WORK(IEAK1),
190     &   WORK(IEAK2),WORK(IEAK3),WORK(IEAK4),WORK(IEAK5),WORK(IEAK6),
191     &   WORK(IEFX),WORK(IEJAC),WORK(IEE),WORK(IEMAS),IWORK(IEIP),
192     &   WORK(IECON),
193     &   M1,M2,NM1,NFCN,NJAC,NSTEP,NACCPT,NREJCT,NDEC,NSOL)
194      IWORK(14)=NFCN
195      IWORK(15)=NJAC
196      IWORK(16)=NSTEP
197      IWORK(17)=NACCPT
198      IWORK(18)=NREJCT
199      IWORK(19)=NDEC
200      IWORK(20)=NSOL
201C ----------- RETURN -----------
202      RETURN
203      END
204C
205C
206C
207C  ----- ... AND HERE IS THE CORE INTEGRATOR  ----------
208C
209      SUBROUTINE ROSCOR(N,FCN,X,Y,XEND,HMAX,H,RelTol,AbsTol,
210     &  ITOL,JAC,IJAC,
211     &  MLJAC,MUJAC,DFX,IDFX,MAS,MLMAS,MUMAS,IOUT,IDID,NMAX,
212     &  UROUND,METH,IJOB,FAC1,FAC2,SAFE,AUTNMS,IMPLCT,BANDED,
213     &  PRED,LDJAC,
214     &  LDE,LDMAS,YNEW,DY1,DY,AK1,AK2,AK3,AK4,AK5,AK6,
215     &  FX,FJAC,E,FMAS,IP,CONT,
216     &  M1,M2,NM1,NFCN,NJAC,NSTEP,NACCPT,NREJCT,NDEC,NSOL)
217C ----------------------------------------------------------
218C     CORE INTEGRATOR FOR RODAS
219C     PARAMETERS SAME AS IN RODAS WITH WORKSPACE ADDED
220C ----------------------------------------------------------
221C         DECLARATIONS
222C ----------------------------------------------------------
223      IMPLICIT KPP_REAL (A-H,O-Z)       
224      INCLUDE 'KPP_ROOT_params.h'
225      INCLUDE 'KPP_ROOT_sparse.h'
226      DIMENSION Y(N),YNEW(N),DY1(N),DY(N),AK1(N),
227     *  AK2(N),AK3(N),AK4(N),AK5(N),AK6(N),FX(N),
228     *  FJAC(LU_NONZERO),E(LDE,NM1),FMAS(LDMAS,NM1),
229     *  AbsTol(*),RelTol(*)
230      DIMENSION CONT(4*N)
231      INTEGER IP(NM1)
232      LOGICAL REJECT,AUTNMS,IMPLCT,BANDED
233      LOGICAL ONE,LAST,PRED,SINGULAR
234      EXTERNAL FCN, MAS, JAC, DFX
235      COMMON/LINAL/MLE,MUE,MBJAC,MBB,MDIAG,MDIFF,MBDIAG
236      COMMON /CONROS/XOLD,HOUT,NN
237C *** *** *** *** *** *** ***
238C  INITIALISATIONS
239C *** *** *** *** *** *** ***
240      NN=N
241      NN2=2*N
242      NN3=3*N
243      LRC=4*N
244C ------- COMPUTE MASS MATRIX FOR IMPLICIT CASE ----------
245      IF (IMPLCT) CALL MAS (NM1,FMAS,LDMAS)
246C ------ SET THE PARAMETERS OF THE METHOD -----
247      CALL ROCOE(METH,A21,A31,A32,A41,A42,A43,A51,A52,A53,A54,
248     &    C21,C31,C32,C41,C42,C43,C51,C52,C53,C54,C61,
249     &    C62,C63,C64,C65,GAMMA,C2,C3,C4,D1,D2,D3,D4,
250     &    D21,D22,D23,D24,D25,D31,D32,D33,D34,D35)
251C --- INITIAL PREPARATIONS
252      IF (M1.GT.0) IJOB=IJOB+10
253      POSNEG=SIGN(1.D0,XEND-X)
254      HMAXN=DMIN1(DABS(HMAX),DABS(XEND-X))
255      IF (DABS(H).LE.10.D0*UROUND) H=1.0D-6
256      H=DMIN1(DABS(H),HMAXN)
257      H=SIGN(H,POSNEG)
258      HACC = H
259      ERRACC = 1.0d0
260      REJECT=.FALSE.
261      LAST=.FALSE.
262      NSING=0
263      IRTRN=1
264      IF (AUTNMS) THEN
265         HD1=0.0D0
266         HD2=0.0D0
267         HD3=0.0D0
268         HD4=0.0D0
269      END IF
270C -------- PREPARE BAND-WIDTHS --------
271      MBDIAG=MUMAS+1
272
273C --- BASIC INTEGRATION STEP
274      LAST = .FALSE.
275      DO WHILE (.NOT.LAST)
276      IF (.NOT. REJECT) THEN
277      IF (NSTEP.GT.NMAX) CALL FAIL_EXIT(3,X,IDID,H,NMAX)
278      IF ( 0.1D0*DABS(H) .LE. DABS(X)*UROUND )
279     *       CALL FAIL_EXIT(2,X,IDID,H,NMAX)
280      HOPT=H
281      IF ((X+H*1.0001D0-XEND)*POSNEG.GE.0.D0) THEN
282         H=XEND-X
283         LAST=.TRUE.
284      END IF
285C *** *** *** *** *** *** ***
286C  COMPUTATION OF THE JACOBIAN
287C *** *** *** *** *** *** ***
288      CALL FCN(N,X,Y,DY1)
289      CALL JAC(N,X,Y,FJAC,LDJAC)
290      NFCN=NFCN+1
291      NJAC=NJAC+1
292
293      IF (.NOT.AUTNMS) THEN
294C --- COMPUTE NUMERICALLY THE DERIVATIVE WITH RESPECT TO X
295            DELT=DSQRT(UROUND*DMAX1(1.D-5,DABS(X)))
296            XDELT=X+DELT
297            CALL FCN(N,XDELT,Y,AK1)
298            DO J=1,N
299               FX(J)=(AK1(J)-DY1(J))/DELT
300            END DO
301      END IF
302      END IF
303
304C *** *** *** *** *** *** ***
305C  COMPUTE THE STAGES
306C *** *** *** *** *** *** ***
307      SINGULAR = .TRUE.
308      DO WHILE (SINGULAR)
309        FAC=1.D0/(H*GAMMA)
310        CALL DECOMR(N,FJAC,LDJAC,FMAS,LDMAS,MLMAS,MUMAS,
311     &            M1,M2,NM1,FAC,E,LDE,IP,IER,IJOB,IMPLCT,IP)
312        SINGULAR = IER.NE.0
313        IF (SINGULAR) THEN
314          NSING=NSING+1
315          IF (NSING.GE.5) CALL FAIL_EXIT(1,X,IDID,H,NMAX)
316          H=H*0.5D0
317          REJECT=.TRUE.
318          LAST=.FALSE.
319          ONE = .FALSE.
320        END IF
321      END DO
322
323      NDEC=NDEC+1
324C --- PREPARE FOR THE COMPUTATION OF THE 6 STAGES
325      HC21=C21/H
326      HC31=C31/H
327      HC32=C32/H
328      HC41=C41/H
329      HC42=C42/H
330      HC43=C43/H
331      HC51=C51/H
332      HC52=C52/H
333      HC53=C53/H
334      HC54=C54/H
335      HC61=C61/H
336      HC62=C62/H
337      HC63=C63/H
338      HC64=C64/H
339      HC65=C65/H
340      IF (.NOT.AUTNMS) THEN
341         HD1=H*D1
342         HD2=H*D2
343         HD3=H*D3
344         HD4=H*D4
345      END IF
346C --- THE STAGES
347      CALL SLVROD(N,FJAC,LDJAC,MLJAC,MUJAC,FMAS,LDMAS,MLMAS,MUMAS,
348     &    M1,M2,NM1,FAC,E,LDE,IP,DY1,AK1,FX,YNEW,HD1,IJOB,.FALSE.)
349      DO  I=1,N
350         YNEW(I)=Y(I)+A21*AK1(I)
351      END DO
352      CALL FCN(N,X+C2*H,YNEW,DY)
353      DO I=1,N
354         YNEW(I)=HC21*AK1(I)
355      END DO
356      CALL SLVROD(N,FJAC,LDJAC,MLJAC,MUJAC,FMAS,LDMAS,MLMAS,MUMAS,
357     &    M1,M2,NM1,FAC,E,LDE,IP,DY,AK2,FX,YNEW,HD2,IJOB,.TRUE.)
358      DO I=1,N
359         YNEW(I)=Y(I)+A31*AK1(I)+A32*AK2(I)
360      END DO
361      CALL FCN(N,X+C3*H,YNEW,DY)
362      DO I=1,N
363         YNEW(I)=HC31*AK1(I)+HC32*AK2(I)
364      END DO
365      CALL SLVROD(N,FJAC,LDJAC,MLJAC,MUJAC,FMAS,LDMAS,MLMAS,MUMAS,
366     &    M1,M2,NM1,FAC,E,LDE,IP,DY,AK3,FX,YNEW,HD3,IJOB,.TRUE.)
367      DO I=1,N
368         YNEW(I)=Y(I)+A41*AK1(I)+A42*AK2(I)+A43*AK3(I)
369      END DO
370      CALL FCN(N,X+C4*H,YNEW,DY)
371      DO I=1,N
372         YNEW(I)=HC41*AK1(I)+HC42*AK2(I)+HC43*AK3(I)
373      END DO
374      CALL SLVROD(N,FJAC,LDJAC,MLJAC,MUJAC,FMAS,LDMAS,MLMAS,MUMAS,
375     &    M1,M2,NM1,FAC,E,LDE,IP,DY,AK4,FX,YNEW,HD4,IJOB,.TRUE.)
376      DO I=1,N
377         YNEW(I)=Y(I)+A51*AK1(I)+A52*AK2(I)+A53*AK3(I)+A54*AK4(I)
378      END DO
379      CALL FCN(N,X+H,YNEW,DY)
380      DO I=1,N
381         AK6(I)=HC52*AK2(I)+HC54*AK4(I)+HC51*AK1(I)+HC53*AK3(I)
382      END DO
383      CALL SLVROD(N,FJAC,LDJAC,MLJAC,MUJAC,FMAS,LDMAS,MLMAS,MUMAS,
384     &    M1,M2,NM1,FAC,E,LDE,IP,DY,AK5,FX,AK6,0.D0,IJOB,.TRUE.)
385C ------------ EMBEDDED SOLUTION ---------------
386      DO I=1,N
387         YNEW(I)=YNEW(I)+AK5(I) 
388      END DO
389      CALL FCN(N,X+H,YNEW,DY)
390      DO I=1,N
391         AK5(I)=HC61*AK1(I)+HC62*AK2(I)+HC65*AK5(I)
392     &              +HC64*AK4(I)+HC63*AK3(I)
393      END DO
394      CALL SLVROD(N,FJAC,LDJAC,MLJAC,MUJAC,FMAS,LDMAS,MLMAS,MUMAS,
395     &    M1,M2,NM1,FAC,E,LDE,IP,DY,AK6,FX,AK5,0.D0,IJOB,.TRUE.)
396C ------------ NEW SOLUTION ---------------
397      DO  I=1,N
398         YNEW(I)=YNEW(I)+AK6(I) 
399      END DO
400      NSOL=NSOL+6
401      NFCN=NFCN+5
402
403C *** *** *** *** *** *** ***
404C  ERROR ESTIMATION 
405C *** *** *** *** *** *** ***
406      NSTEP=NSTEP+1
407C ------------ COMPUTE ERROR ESTIMATION ----------------
408      ERR=0.0D0
409      DO I=1,N
410         IF (ITOL.EQ.0) THEN
411            SK=AbsTol(1)+RelTol(1)*DMAX1(DABS(Y(I)),DABS(YNEW(I)))
412         ELSE
413            SK=AbsTol(I)+RelTol(I)*DMAX1(DABS(Y(I)),DABS(YNEW(I)))
414         END IF
415         ERR=ERR+(AK6(I)/SK)**2
416c2           ERR = DMAX1(ERR, AK6(I)/SK)
417      END DO
418      ERR=DSQRT(ERR/N)
419     
420C --- COMPUTATION OF HNEW
421C --- WE REQUIRE .2<=HNEW/H<=6.
422      FAC=DMAX1(FAC2,DMIN1(FAC1,(ERR)**0.25D0/SAFE))
423      HNEW=DMAX1(H/FAC, STEPMIN) 
424
425C *** *** *** *** *** *** ***
426C  IS THE ERROR SMALL ENOUGH ?
427C *** *** *** *** *** *** ***
428
429      IF ( (ERR.LE.1.D0).or.(H.LE.STEPMIN) ) THEN
430C --- STEP IS ACCEPTED 
431         NACCPT=NACCPT+1
432         IF (PRED) THEN
433C       --- PREDICTIVE CONTROLLER OF GUSTAFSSON
434            IF (NACCPT.GT.1) THEN
435               FACGUS=(HACC/H)*(ERR**2/ERRACC)**0.25D0/SAFE
436               FACGUS=DMAX1(FAC2,DMIN1(FAC1,FACGUS))
437               FAC=DMAX1(FAC,FACGUS)
438               HNEW=DMAX1(H/FAC, STEPMIN)
439            END IF
440            HACC=H
441            ERRACC=DMAX1(1.0D-2,ERR)
442         END IF
443         DO I=1,N
444            Y(I)=YNEW(I)
445         END DO
446         XOLD=X
447         X=X+H
448         IF (DABS(HNEW).GT.HMAXN) HNEW=POSNEG*HMAXN
449         IF (REJECT) HNEW=POSNEG*DMIN1(DABS(HNEW),DABS(H))
450         REJECT=.FALSE.
451         H=HNEW
452      ELSE
453C --- STEP IS REJECTED 
454         REJECT=.TRUE.
455         LAST=.FALSE.
456         H=HNEW
457         IF (NACCPT.GE.1) NREJCT=NREJCT+1
458      END IF
459      END DO
460      RETURN
461      END
462C
463      SUBROUTINE FAIL_EXIT(NERR,X,IDID,H,NMAX)
464      INTEGER NERR, NMAX
465      KPP_REAL X, H
466      GO TO (1,2,3,4) NERR
467 1    CONTINUE
468      WRITE(6,979)X   
469      WRITE(6,*) ' MATRIX IS REPEATEDLY SINGULAR, IER=',IER
470      IDID=-4
471      STOP
472 2    CONTINUE
473      WRITE(6,979)X   
474      WRITE(6,*) ' STEP SIZE TOO SMALL, H=',H
475      IDID=-3
476      STOP
477 3    CONTINUE
478      WRITE(6,979)X   
479      WRITE(6,*) ' MORE THAN NMAX =',NMAX,'STEPS ARE NEEDED'
480      IDID=-2
481      STOP
482C --- EXIT CAUSED BY solout
483 4    CONTINUE
484      WRITE(6,979)X
485 979  FORMAT(' EXIT OF RODAS AT X=',E18.4)
486      IDID=2
487      RETURN
488      END
489     
490      SUBROUTINE ROCOE(METH,A21,A31,A32,A41,A42,A43,A51,A52,A53,A54,
491     &  C21,C31,C32,C41,C42,C43,C51,C52,C53,C54,C61,
492     &  C62,C63,C64,C65,GAMMA,C2,C3,C4,D1,D2,D3,D4,
493     &  D21,D22,D23,D24,D25,D31,D32,D33,D34,D35)
494      IMPLICIT KPP_REAL (A-H,O-Z)
495
496      if (METH.ne.1) print *, 'WRONG CHOICE OF METHOD'
497        C2=0.386D0
498        C3=0.21D0
499        C4=0.63D0
500        BET2P=0.0317D0
501        BET3P=0.0635D0
502        BET4P=0.3438D0
503       D1= 0.2500000000000000D+00
504       D2=-0.1043000000000000D+00
505       D3= 0.1035000000000000D+00
506       D4=-0.3620000000000023D-01
507       A21= 0.1544000000000000D+01
508       A31= 0.9466785280815826D+00
509       A32= 0.2557011698983284D+00
510       A41= 0.3314825187068521D+01
511       A42= 0.2896124015972201D+01
512       A43= 0.9986419139977817D+00
513       A51= 0.1221224509226641D+01
514       A52= 0.6019134481288629D+01
515       A53= 0.1253708332932087D+02
516       A54=-0.6878860361058950D+00
517       C21=-0.5668800000000000D+01
518       C31=-0.2430093356833875D+01
519       C32=-0.2063599157091915D+00
520       C41=-0.1073529058151375D+00
521       C42=-0.9594562251023355D+01
522       C43=-0.2047028614809616D+02
523       C51= 0.7496443313967647D+01
524       C52=-0.1024680431464352D+02
525       C53=-0.3399990352819905D+02
526       C54= 0.1170890893206160D+02
527       C61= 0.8083246795921522D+01
528       C62=-0.7981132988064893D+01
529       C63=-0.3152159432874371D+02
530       C64= 0.1631930543123136D+02
531       C65=-0.6058818238834054D+01
532       GAMMA= 0.2500000000000000D+00 
533
534       D21= 0.1012623508344586D+02
535       D22=-0.7487995877610167D+01
536       D23=-0.3480091861555747D+02
537       D24=-0.7992771707568823D+01
538       D25= 0.1025137723295662D+01
539       D31=-0.6762803392801253D+00
540       D32= 0.6087714651680015D+01
541       D33= 0.1643084320892478D+02
542       D34= 0.2476722511418386D+02
543       D35=-0.6594389125716872D+01
544      RETURN
545      END
546C
547
548C ******************************************
549C     VERSION OF SEPTEMBER 18, 1995     
550C ******************************************
551C
552      SUBROUTINE DECOMR(N,FJAC,LDJAC,FMAS,LDMAS,MLMAS,MUMAS,
553     &            M1,M2,NM1,FAC1,E1,LDE1,IP1,IER,IJOB,CALHES,IPHES)
554      IMPLICIT KPP_REAL (A-H,O-Z)       
555      INCLUDE 'KPP_ROOT_params.h'
556      INCLUDE 'KPP_ROOT_sparse.h'
557      DIMENSION FJAC(LU_NONZERO),FMAS(LDMAS,NM1),E1(LU_NONZERO),
558     &          IP1(NM1),IPHES(N)
559      LOGICAL CALHES
560      COMMON/LINAL/MLE,MUE,MBJAC,MBB,MDIAG,MDIFF,MBDIAG
561C
562
563
564C ---  B=IDENTITY, JACOBIAN A FULL MATRIX
565      DO J=1,LU_NONZERO
566         E1(J) = -FJAC(J)
567      END DO
568      DO J=1,N
569         E1(LU_DIAG(J)) = E1(LU_DIAG(J)) + FAC1
570      END DO
571      CALL KppDecomp (E1,IER)
572      RETURN
573      END
574C
575C     END OF SUBROUTINE DECOMR
576C
577C ***********************************************************
578C
579C
580C
581C
582      SUBROUTINE SLVROD(N,FJAC,LDJAC,MLJAC,MUJAC,FMAS,LDMAS,MLMAS,MUMAS,
583     &          M1,M2,NM1,FAC1,E,LDE,IP,DY,AK,FX,YNEW,HD,IJOB,STAGE1)
584      IMPLICIT KPP_REAL (A-H,O-Z)       
585      INCLUDE 'KPP_ROOT_params.h'
586      INCLUDE 'KPP_ROOT_sparse.h'
587      DIMENSION FJAC(LU_NONZERO),FMAS(LDMAS,NM1),E(LU_NONZERO),
588     &          IP(NM1),DY(N),AK(N),FX(N),YNEW(N)
589      LOGICAL STAGE1
590      COMMON/LINAL/MLE,MUE,MBJAC,MBB,MDIAG,MDIFF,MBDIAG
591C
592      IF (HD.EQ.0.D0) THEN
593         DO  I=1,N
594           AK(I)=DY(I)
595         END DO
596      ELSE
597         DO I=1,N
598            AK(I)=DY(I)+HD*FX(I)
599         END DO
600      END IF
601
602C ---  B=IDENTITY, JACOBIAN A FULL MATRIX
603      IF (STAGE1) THEN
604         DO I=1,N
605            AK(I)=AK(I)+YNEW(I)
606         END DO
607      END IF
608      CALL KppSolve (E,AK)
609      RETURN
610      END
611C
612C     END OF SUBROUTINE SLVROD
613C
614C
615C ***********************************************************
616
617 
618      SUBROUTINE FUNC_CHEM(N, T, Y, P)
619      INCLUDE 'KPP_ROOT_params.h'
620      INCLUDE 'KPP_ROOT_global.h'
621      INTEGER N
622      KPP_REAL   T, Told
623      KPP_REAL   Y(NVAR), P(NVAR)
624      Told = TIME
625      TIME = T
626      CALL Update_SUN()
627      CALL Update_RCONST()
628      CALL Fun( Y,  FIX, RCONST, P )
629      TIME = Told
630      RETURN
631      END
632
633 
634      SUBROUTINE JAC_CHEM(N, T, Y, J)
635      INCLUDE 'KPP_ROOT_params.h'
636      INCLUDE 'KPP_ROOT_global.h'
637      INTEGER N
638      KPP_REAL   Told, T
639      KPP_REAL   Y(NVAR), J(LU_NONZERO)
640      Told = TIME
641      TIME = T
642      CALL Update_SUN()
643      CALL Update_RCONST()
644      CALL Jac_SP( Y,  FIX, RCONST, J )
645      TIME = Told
646      RETURN
647      END                                                                                                                 
Note: See TracBrowser for help on using the repository browser.