xref: /petsc/src/ts/tutorials/advection-diffusion-reaction/shashi.F90 (revision 67a7e5664dbd74f8cf41eb0ac547412553fcafae)
1c4762a1bSJed Brown
2c4762a1bSJed Brown      program main
3c4762a1bSJed Brown#include <petsc/finclude/petsc.h>
4c4762a1bSJed Brown      use petsc
5c4762a1bSJed Brown      implicit none
6c4762a1bSJed Brown
7c4762a1bSJed Brown! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
8c4762a1bSJed Brown!                   Variable declarations
9c4762a1bSJed Brown! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
10c4762a1bSJed Brown!
11c4762a1bSJed Brown!  Variables:
12c4762a1bSJed Brown!     snes        - nonlinear solver
13c4762a1bSJed Brown!     x, r        - solution, residual vectors
14c4762a1bSJed Brown!     J           - Jacobian matrix
15c4762a1bSJed Brown!
16c4762a1bSJed Brown      SNES     snes
17c4762a1bSJed Brown      Vec      x,r,lb,ub
18c4762a1bSJed Brown      Mat      J
19c4762a1bSJed Brown      PetscErrorCode  ierr
20*67a7e566SJose E. Roman      PetscInt i2
21c4762a1bSJed Brown      PetscMPIInt size
22c4762a1bSJed Brown      PetscScalar,pointer :: xx(:)
23c4762a1bSJed Brown      PetscScalar zero,big
24c4762a1bSJed Brown      SNESLineSearch ls
25c4762a1bSJed Brown
26c4762a1bSJed Brown!  Note: Any user-defined Fortran routines (such as FormJacobian)
27c4762a1bSJed Brown!  MUST be declared as external.
28c4762a1bSJed Brown
29c4762a1bSJed Brown      external FormFunction, FormJacobian
30c4762a1bSJed Brown      external ShashiPostCheck
31c4762a1bSJed Brown
32c4762a1bSJed Brown! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
33c4762a1bSJed Brown!                   Macro definitions
34c4762a1bSJed Brown! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
35c4762a1bSJed Brown!
36c4762a1bSJed Brown!  Macros to make clearer the process of setting values in vectors and
37c4762a1bSJed Brown!  getting values from vectors.  These vectors are used in the routines
38c4762a1bSJed Brown!  FormFunction() and FormJacobian().
39c4762a1bSJed Brown!   - The element lx_a(ib) is element ib in the vector x
40c4762a1bSJed Brown!
41c4762a1bSJed Brown#define lx_a(ib) lx_v(lx_i + (ib))
42c4762a1bSJed Brown#define lf_a(ib) lf_v(lf_i + (ib))
43c4762a1bSJed Brown!
44c4762a1bSJed Brown! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
45c4762a1bSJed Brown!                 Beginning of program
46c4762a1bSJed Brown! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
47c4762a1bSJed Brown
48d8606c27SBarry Smith      PetscCallA(PetscInitialize(ierr))
49d8606c27SBarry Smith      PetscCallMPIA(MPI_Comm_size(PETSC_COMM_WORLD,size,ierr))
50c4762a1bSJed Brown      if (size .ne. 1) then; SETERRA(PETSC_COMM_WORLD,1,'requires one process'); endif
51c4762a1bSJed Brown
52c4762a1bSJed Brown      big  = 2.88
53c4762a1bSJed Brown      big  = PETSC_INFINITY
54c4762a1bSJed Brown      zero = 0.0
55c4762a1bSJed Brown      i2  = 26
56c4762a1bSJed Brown! - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - -
57c4762a1bSJed Brown!  Create nonlinear solver context
58c4762a1bSJed Brown! - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - -
59c4762a1bSJed Brown
60d8606c27SBarry Smith      PetscCallA(SNESCreate(PETSC_COMM_WORLD,snes,ierr))
61c4762a1bSJed Brown
62c4762a1bSJed Brown! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
63c4762a1bSJed Brown!  Create matrix and vector data structures; set corresponding routines
64c4762a1bSJed Brown! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
65c4762a1bSJed Brown
66c4762a1bSJed Brown!  Create vectors for solution and nonlinear function
67c4762a1bSJed Brown
68d8606c27SBarry Smith      PetscCallA(VecCreateSeq(PETSC_COMM_SELF,i2,x,ierr))
69d8606c27SBarry Smith      PetscCallA(VecDuplicate(x,r,ierr))
70c4762a1bSJed Brown
71c4762a1bSJed Brown!  Create Jacobian matrix data structure
72c4762a1bSJed Brown
73d8606c27SBarry Smith      PetscCallA(MatCreateDense(PETSC_COMM_SELF,26,26,26,26,PETSC_NULL_SCALAR,J,ierr))
74c4762a1bSJed Brown
75c4762a1bSJed Brown!  Set function evaluation routine and vector
76c4762a1bSJed Brown
77d8606c27SBarry Smith      PetscCallA(SNESSetFunction(snes,r,FormFunction,0,ierr))
78c4762a1bSJed Brown
79c4762a1bSJed Brown!  Set Jacobian matrix data structure and Jacobian evaluation routine
80c4762a1bSJed Brown
81d8606c27SBarry Smith      PetscCallA(SNESSetJacobian(snes,J,J,FormJacobian,0,ierr))
82c4762a1bSJed Brown
83d8606c27SBarry Smith      PetscCallA(VecDuplicate(x,lb,ierr))
84d8606c27SBarry Smith      PetscCallA(VecDuplicate(x,ub,ierr))
85d8606c27SBarry Smith      PetscCallA(VecSet(lb,zero,ierr))
86d8606c27SBarry Smith!      PetscCallA(VecGetArrayF90(lb,xx,ierr))
87f3009475SJose E. Roman!      PetscCallA(ShashiLowerBound(xx))
88d8606c27SBarry Smith!      PetscCallA(VecRestoreArrayF90(lb,xx,ierr))
89d8606c27SBarry Smith      PetscCallA(VecSet(ub,big,ierr))
90d8606c27SBarry Smith!      PetscCallA(SNESVISetVariableBounds(snes,lb,ub,ierr))
91c4762a1bSJed Brown
92d8606c27SBarry Smith      PetscCallA(SNESGetLineSearch(snes,ls,ierr))
93d8606c27SBarry Smith      PetscCallA(SNESLineSearchSetPostCheck(ls,ShashiPostCheck,0,ierr))
94d8606c27SBarry Smith      PetscCallA(SNESSetType(snes,SNESVINEWTONRSLS,ierr))
95c4762a1bSJed Brown
96d8606c27SBarry Smith      PetscCallA(SNESSetFromOptions(snes,ierr))
97c4762a1bSJed Brown
98c4762a1bSJed Brown!     set initial guess
99c4762a1bSJed Brown
100d8606c27SBarry Smith      PetscCallA(VecGetArrayF90(x,xx,ierr))
101f3009475SJose E. Roman      PetscCallA(ShashiInitialGuess(xx))
102d8606c27SBarry Smith      PetscCallA(VecRestoreArrayF90(x,xx,ierr))
103c4762a1bSJed Brown
104d8606c27SBarry Smith      PetscCallA(SNESSolve(snes,PETSC_NULL_VEC,x,ierr))
105c4762a1bSJed Brown
106c4762a1bSJed Brown! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
107c4762a1bSJed Brown!  Free work space.  All PETSc objects should be destroyed when they
108c4762a1bSJed Brown!  are no longer needed.
109c4762a1bSJed Brown! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
110d8606c27SBarry Smith      PetscCallA(VecDestroy(lb,ierr))
111d8606c27SBarry Smith      PetscCallA(VecDestroy(ub,ierr))
112d8606c27SBarry Smith      PetscCallA(VecDestroy(x,ierr))
113d8606c27SBarry Smith      PetscCallA(VecDestroy(r,ierr))
114d8606c27SBarry Smith      PetscCallA(MatDestroy(J,ierr))
115d8606c27SBarry Smith      PetscCallA(SNESDestroy(snes,ierr))
116d8606c27SBarry Smith      PetscCallA(PetscFinalize(ierr))
117c4762a1bSJed Brown      end
118c4762a1bSJed Brown!
119c4762a1bSJed Brown! ------------------------------------------------------------------------
120c4762a1bSJed Brown!
121c4762a1bSJed Brown!  FormFunction - Evaluates nonlinear function, F(x).
122c4762a1bSJed Brown!
123c4762a1bSJed Brown!  Input Parameters:
124c4762a1bSJed Brown!  snes - the SNES context
125c4762a1bSJed Brown!  x - input vector
126c4762a1bSJed Brown!  dummy - optional user-defined context (not used here)
127c4762a1bSJed Brown!
128c4762a1bSJed Brown!  Output Parameter:
129c4762a1bSJed Brown!  f - function vector
130c4762a1bSJed Brown!
131c4762a1bSJed Brown      subroutine FormFunction(snes,x,f,dummy,ierr)
132c4762a1bSJed Brown#include <petsc/finclude/petscsnes.h>
133c4762a1bSJed Brown      use petscsnes
134c4762a1bSJed Brown      implicit none
135c4762a1bSJed Brown      SNES     snes
136c4762a1bSJed Brown      Vec      x,f
137c4762a1bSJed Brown      PetscErrorCode ierr
138c4762a1bSJed Brown      integer dummy(*)
139c4762a1bSJed Brown
140c4762a1bSJed Brown!  Declarations for use with local arrays
141c4762a1bSJed Brown
142c4762a1bSJed Brown      PetscScalar  lx_v(2),lf_v(2)
143c4762a1bSJed Brown      PetscOffset  lx_i,lf_i
144c4762a1bSJed Brown
145c4762a1bSJed Brown!  Get pointers to vector data.
146c4762a1bSJed Brown!    - For default PETSc vectors, VecGetArray() returns a pointer to
147c4762a1bSJed Brown!      the data array.  Otherwise, the routine is implementation dependent.
148c4762a1bSJed Brown!    - You MUST call VecRestoreArray() when you no longer need access to
149c4762a1bSJed Brown!      the array.
150c4762a1bSJed Brown!    - Note that the Fortran interface to VecGetArray() differs from the
151c4762a1bSJed Brown!      C version.  See the Fortran chapter of the users manual for details.
152c4762a1bSJed Brown
153d8606c27SBarry Smith      PetscCall(VecGetArrayRead(x,lx_v,lx_i,ierr))
154d8606c27SBarry Smith      PetscCall(VecGetArray(f,lf_v,lf_i,ierr))
155f3009475SJose E. Roman      PetscCall(ShashiFormFunction(lx_a(1),lf_a(1)))
156d8606c27SBarry Smith      PetscCall(VecRestoreArrayRead(x,lx_v,lx_i,ierr))
157d8606c27SBarry Smith      PetscCall(VecRestoreArray(f,lf_v,lf_i,ierr))
158c4762a1bSJed Brown
159c4762a1bSJed Brown      return
160c4762a1bSJed Brown      end
161c4762a1bSJed Brown
162c4762a1bSJed Brown! ---------------------------------------------------------------------
163c4762a1bSJed Brown!
164c4762a1bSJed Brown!  FormJacobian - Evaluates Jacobian matrix.
165c4762a1bSJed Brown!
166c4762a1bSJed Brown!  Input Parameters:
167c4762a1bSJed Brown!  snes - the SNES context
168c4762a1bSJed Brown!  x - input vector
169c4762a1bSJed Brown!  dummy - optional user-defined context (not used here)
170c4762a1bSJed Brown!
171c4762a1bSJed Brown!  Output Parameters:
172c4762a1bSJed Brown!  A - Jacobian matrix
173c4762a1bSJed Brown!  B - optionally different preconditioning matrix
174c4762a1bSJed Brown!  flag - flag indicating matrix structure
175c4762a1bSJed Brown!
176c4762a1bSJed Brown      subroutine FormJacobian(snes,X,jac,B,dummy,ierr)
177c4762a1bSJed Brown#include <petsc/finclude/petscsnes.h>
178c4762a1bSJed Brown      use petscsnes
179c4762a1bSJed Brown      implicit none
180c4762a1bSJed Brown      SNES         snes
181c4762a1bSJed Brown      Vec          X
182c4762a1bSJed Brown      Mat          jac,B
183c4762a1bSJed Brown      PetscErrorCode ierr
184c4762a1bSJed Brown      integer dummy(*)
185c4762a1bSJed Brown
186c4762a1bSJed Brown!  Declarations for use with local arrays
187c4762a1bSJed Brown
188c4762a1bSJed Brown      PetscScalar lx_v(1),lf_v(1)
189c4762a1bSJed Brown      PetscOffset lx_i,lf_i
190c4762a1bSJed Brown
191c4762a1bSJed Brown!  Get pointer to vector data
192c4762a1bSJed Brown
193d8606c27SBarry Smith      PetscCall(VecGetArrayRead(x,lx_v,lx_i,ierr))
194d8606c27SBarry Smith      PetscCall(MatDenseGetArray(B,lf_v,lf_i,ierr))
195f3009475SJose E. Roman      PetscCall(ShashiFormJacobian(lx_a(1),lf_a(1)))
196d8606c27SBarry Smith      PetscCall(MatDenseRestoreArray(B,lf_v,lf_i,ierr))
197d8606c27SBarry Smith      PetscCall(VecRestoreArrayRead(x,lx_v,lx_i,ierr))
198c4762a1bSJed Brown
199c4762a1bSJed Brown!  Assemble matrix
200c4762a1bSJed Brown
201d8606c27SBarry Smith      PetscCall(MatAssemblyBegin(jac,MAT_FINAL_ASSEMBLY,ierr))
202d8606c27SBarry Smith      PetscCall(MatAssemblyEnd(jac,MAT_FINAL_ASSEMBLY,ierr))
203c4762a1bSJed Brown
204c4762a1bSJed Brown      return
205c4762a1bSJed Brown      end
206c4762a1bSJed Brown
207c4762a1bSJed Brown            subroutine ShashiLowerBound(an_r)
208c4762a1bSJed Brown!        implicit PetscScalar (a-h,o-z)
209c4762a1bSJed Brown        implicit none
210c4762a1bSJed Brown        PetscScalar an_r(26)
211c4762a1bSJed Brown        PetscInt i
212c4762a1bSJed Brown
213c4762a1bSJed Brown        do i=2,26
214c4762a1bSJed Brown           an_r(i) = 1000.0/6.023D+23
215c4762a1bSJed Brown        enddo
216c4762a1bSJed Brown        return
217c4762a1bSJed Brown        end
218c4762a1bSJed Brown
219c4762a1bSJed Brown            subroutine ShashiInitialGuess(an_r)
220c4762a1bSJed Brown!        implicit PetscScalar (a-h,o-z)
221c4762a1bSJed Brown        implicit none
222c4762a1bSJed Brown        PetscScalar an_c_additive
223c4762a1bSJed Brown        PetscScalar       an_h_additive
224c4762a1bSJed Brown        PetscScalar an_o_additive
225c4762a1bSJed Brown        PetscScalar   atom_c_init
226c4762a1bSJed Brown        PetscScalar atom_h_init
227c4762a1bSJed Brown        PetscScalar atom_n_init
228c4762a1bSJed Brown        PetscScalar atom_o_init
229c4762a1bSJed Brown        PetscScalar h_init
230c4762a1bSJed Brown        PetscScalar p_init
231c4762a1bSJed Brown        PetscInt nfuel
232c4762a1bSJed Brown        PetscScalar temp,pt
233*67a7e566SJose E. Roman        PetscScalar an_r(26)
234c4762a1bSJed Brown        PetscInt an_h(1),an_c(1)
235c4762a1bSJed Brown
236c4762a1bSJed Brown        pt = 0.1
237c4762a1bSJed Brown        atom_c_init =6.7408177364816552D-022
238c4762a1bSJed Brown        atom_h_init = 2.0
239c4762a1bSJed Brown        atom_o_init = 1.0
240c4762a1bSJed Brown        atom_n_init = 3.76
241c4762a1bSJed Brown        nfuel = 1
242c4762a1bSJed Brown        an_c(1) = 1
243c4762a1bSJed Brown        an_h(1) = 4
244c4762a1bSJed Brown        an_c_additive = 2
245c4762a1bSJed Brown        an_h_additive = 6
246c4762a1bSJed Brown        an_o_additive = 1
247c4762a1bSJed Brown        h_init = 128799.7267952987
248c4762a1bSJed Brown        p_init = 0.1
249c4762a1bSJed Brown        temp = 1500
250c4762a1bSJed Brown
251c4762a1bSJed Brown      an_r( 1) =     1.66000D-24
252c4762a1bSJed Brown      an_r( 2) =     1.66030D-22
253c4762a1bSJed Brown      an_r( 3) =     5.00000D-01
254c4762a1bSJed Brown      an_r( 4) =     1.66030D-22
255c4762a1bSJed Brown      an_r( 5) =     1.66030D-22
256c4762a1bSJed Brown      an_r( 6) =     1.88000D+00
257c4762a1bSJed Brown      an_r( 7) =     1.66030D-22
258c4762a1bSJed Brown      an_r( 8) =     1.66030D-22
259c4762a1bSJed Brown      an_r( 9) =     1.66030D-22
260c4762a1bSJed Brown      an_r(10) =     1.66030D-22
261c4762a1bSJed Brown      an_r(11) =     1.66030D-22
262c4762a1bSJed Brown      an_r(12) =     1.66030D-22
263c4762a1bSJed Brown      an_r(13) =     1.66030D-22
264c4762a1bSJed Brown      an_r(14) =     1.00000D+00
265c4762a1bSJed Brown      an_r(15) =     1.66030D-22
266c4762a1bSJed Brown      an_r(16) =     1.66030D-22
267c4762a1bSJed Brown      an_r(17) =     1.66000D-24
268c4762a1bSJed Brown      an_r(18) =     1.66030D-24
269c4762a1bSJed Brown      an_r(19) =     1.66030D-24
270c4762a1bSJed Brown      an_r(20) =     1.66030D-24
271c4762a1bSJed Brown      an_r(21) =     1.66030D-24
272c4762a1bSJed Brown      an_r(22) =     1.66030D-24
273c4762a1bSJed Brown      an_r(23) =     1.66030D-24
274c4762a1bSJed Brown      an_r(24) =     1.66030D-24
275c4762a1bSJed Brown      an_r(25) =     1.66030D-24
276c4762a1bSJed Brown      an_r(26) =     1.66030D-24
277c4762a1bSJed Brown
278c4762a1bSJed Brown      an_r = 0
279c4762a1bSJed Brown      an_r( 3) =     .5
280c4762a1bSJed Brown      an_r( 6) =     1.88000
281c4762a1bSJed Brown      an_r(14) =     1.
282c4762a1bSJed Brown
283c4762a1bSJed Brown#if defined(solution)
284c4762a1bSJed Brown      an_r( 1) =      3.802208D-33
285c4762a1bSJed Brown      an_r( 2) =      1.298287D-29
286c4762a1bSJed Brown      an_r( 3) =      2.533067D-04
287c4762a1bSJed Brown      an_r( 4) =      6.865078D-22
288c4762a1bSJed Brown      an_r( 5) =      9.993125D-01
289c4762a1bSJed Brown      an_r( 6) =      1.879964D+00
290c4762a1bSJed Brown      an_r( 7) =      4.449489D-13
291c4762a1bSJed Brown      an_r( 8) =      3.428687D-07
292c4762a1bSJed Brown      an_r( 9) =      7.105138D-05
293c4762a1bSJed Brown      an_r(10) =      1.094368D-04
294c4762a1bSJed Brown      an_r(11) =      2.362305D-06
295c4762a1bSJed Brown      an_r(12) =      1.107145D-09
296c4762a1bSJed Brown      an_r(13) =      1.276162D-24
297c4762a1bSJed Brown      an_r(14) =      6.315538D-04
298c4762a1bSJed Brown      an_r(15) =      2.356540D-09
299c4762a1bSJed Brown      an_r(16) =      2.048248D-09
300c4762a1bSJed Brown      an_r(17) =      1.966187D-22
301c4762a1bSJed Brown      an_r(18) =      7.856497D-29
302c4762a1bSJed Brown      an_r(19) =      1.987840D-36
303c4762a1bSJed Brown      an_r(20) =      8.182441D-22
304c4762a1bSJed Brown      an_r(21) =      2.684880D-16
305c4762a1bSJed Brown      an_r(22) =      2.680473D-16
306c4762a1bSJed Brown      an_r(23) =      6.594967D-18
307c4762a1bSJed Brown      an_r(24) =      2.509714D-21
308c4762a1bSJed Brown      an_r(25) =      3.096459D-21
309c4762a1bSJed Brown      an_r(26) =      6.149551D-18
310c4762a1bSJed Brown#endif
311c4762a1bSJed Brown
312c4762a1bSJed Brown      return
313c4762a1bSJed Brown      end
314c4762a1bSJed Brown
315c4762a1bSJed Brown      subroutine ShashiFormFunction(an_r,f_eq)
316c4762a1bSJed Brown!       implicit PetscScalar (a-h,o-z)
317c4762a1bSJed Brown        implicit none
318c4762a1bSJed Brown        PetscScalar an_c_additive
319c4762a1bSJed Brown        PetscScalar       an_h_additive
320c4762a1bSJed Brown        PetscScalar an_o_additive
321c4762a1bSJed Brown        PetscScalar   atom_c_init
322c4762a1bSJed Brown        PetscScalar atom_h_init
323c4762a1bSJed Brown        PetscScalar atom_n_init
324c4762a1bSJed Brown        PetscScalar atom_o_init
325c4762a1bSJed Brown        PetscScalar h_init
326c4762a1bSJed Brown        PetscScalar p_init
327c4762a1bSJed Brown        PetscInt nfuel
328c4762a1bSJed Brown        PetscScalar temp,pt
329c4762a1bSJed Brown        PetscScalar an_r(26),k_eq(23),f_eq(26)
330*67a7e566SJose E. Roman        PetscScalar H_molar(26)
331c4762a1bSJed Brown        PetscInt an_h(1),an_c(1)
332c4762a1bSJed Brown        PetscScalar part_p(26),idiff
333c4762a1bSJed Brown        PetscInt i_cc,i_hh,i_h2o
334*67a7e566SJose E. Roman        PetscScalar an_t,sum_h
335c4762a1bSJed Brown        PetscScalar a_io2
336c4762a1bSJed Brown        PetscInt i,ip
337c4762a1bSJed Brown        pt = 0.1
338c4762a1bSJed Brown        atom_c_init =6.7408177364816552D-022
339c4762a1bSJed Brown        atom_h_init = 2.0
340c4762a1bSJed Brown        atom_o_init = 1.0
341c4762a1bSJed Brown        atom_n_init = 3.76
342c4762a1bSJed Brown        nfuel = 1
343c4762a1bSJed Brown        an_c(1) = 1
344c4762a1bSJed Brown        an_h(1) = 4
345c4762a1bSJed Brown        an_c_additive = 2
346c4762a1bSJed Brown        an_h_additive = 6
347c4762a1bSJed Brown        an_o_additive = 1
348c4762a1bSJed Brown        h_init = 128799.7267952987
349c4762a1bSJed Brown        p_init = 0.1
350c4762a1bSJed Brown        temp = 1500
351c4762a1bSJed Brown
352c4762a1bSJed Brown       k_eq( 1) =     1.75149D-05
353c4762a1bSJed Brown       k_eq( 2) =     4.01405D-06
354c4762a1bSJed Brown       k_eq( 3) =     6.04663D-14
355c4762a1bSJed Brown       k_eq( 4) =     2.73612D-01
356c4762a1bSJed Brown       k_eq( 5) =     3.25592D-03
357c4762a1bSJed Brown       k_eq( 6) =     5.33568D+05
358c4762a1bSJed Brown       k_eq( 7) =     2.07479D+05
359c4762a1bSJed Brown       k_eq( 8) =     1.11841D-02
360c4762a1bSJed Brown       k_eq( 9) =     1.72684D-03
361c4762a1bSJed Brown       k_eq(10) =     1.98588D-07
362c4762a1bSJed Brown       k_eq(11) =     7.23600D+27
363c4762a1bSJed Brown       k_eq(12) =     5.73926D+49
364c4762a1bSJed Brown       k_eq(13) =     1.00000D+00
365c4762a1bSJed Brown       k_eq(14) =     1.64493D+16
366c4762a1bSJed Brown       k_eq(15) =     2.73837D-29
367c4762a1bSJed Brown       k_eq(16) =     3.27419D+50
368c4762a1bSJed Brown       k_eq(17) =     1.72447D-23
369c4762a1bSJed Brown       k_eq(18) =     4.24657D-06
370c4762a1bSJed Brown       k_eq(19) =     1.16065D-14
371c4762a1bSJed Brown       k_eq(20) =     3.28020D+25
372c4762a1bSJed Brown       k_eq(21) =     1.06291D+00
373c4762a1bSJed Brown       k_eq(22) =     9.11507D+02
374c4762a1bSJed Brown       k_eq(23) =     6.02837D+03
375c4762a1bSJed Brown
376c4762a1bSJed Brown       H_molar( 1) =     3.26044D+03
377c4762a1bSJed Brown       H_molar( 2) =    -8.00407D+04
378c4762a1bSJed Brown       H_molar( 3) =     4.05873D+04
379c4762a1bSJed Brown       H_molar( 4) =    -3.31849D+05
380c4762a1bSJed Brown       H_molar( 5) =    -1.93654D+05
381c4762a1bSJed Brown       H_molar( 6) =     3.84035D+04
382c4762a1bSJed Brown       H_molar( 7) =     4.97589D+05
383c4762a1bSJed Brown       H_molar( 8) =     2.74483D+05
384c4762a1bSJed Brown       H_molar( 9) =     1.30022D+05
385c4762a1bSJed Brown       H_molar(10) =     7.58429D+04
386c4762a1bSJed Brown       H_molar(11) =     2.42948D+05
387c4762a1bSJed Brown       H_molar(12) =     1.44588D+05
388c4762a1bSJed Brown       H_molar(13) =    -7.16891D+04
389c4762a1bSJed Brown       H_molar(14) =     3.63075D+04
390c4762a1bSJed Brown       H_molar(15) =     9.23880D+04
391c4762a1bSJed Brown       H_molar(16) =     6.50477D+04
392c4762a1bSJed Brown       H_molar(17) =     3.04310D+05
393c4762a1bSJed Brown       H_molar(18) =     7.41707D+05
394c4762a1bSJed Brown       H_molar(19) =     6.32767D+05
395c4762a1bSJed Brown       H_molar(20) =     8.90624D+05
396c4762a1bSJed Brown       H_molar(21) =     2.49805D+04
397c4762a1bSJed Brown       H_molar(22) =     6.43473D+05
398c4762a1bSJed Brown       H_molar(23) =     1.02861D+06
399c4762a1bSJed Brown       H_molar(24) =    -6.07503D+03
400c4762a1bSJed Brown       H_molar(25) =     1.27020D+05
401c4762a1bSJed Brown       H_molar(26) =    -1.07011D+05
402c4762a1bSJed Brown!=============
403c4762a1bSJed Brown      an_t = 0
404c4762a1bSJed Brown      sum_h = 0
405c4762a1bSJed Brown
406c4762a1bSJed Brown      do i = 1,26
407c4762a1bSJed Brown         an_t = an_t + an_r(i)
408c4762a1bSJed Brown      enddo
409c4762a1bSJed Brown
410c4762a1bSJed Brown        f_eq(1) = atom_h_init                                           &
411c4762a1bSJed Brown     &          - (an_h(1)*an_r(1) + an_h_additive*an_r(2)              &
412c4762a1bSJed Brown     &              + 2*an_r(5) + an_r(10) + an_r(11) + 2*an_r(14)      &
413c4762a1bSJed Brown     &              + an_r(16)+ 2*an_r(17) + an_r(19)                   &
414c4762a1bSJed Brown     &              +an_r(20) + 3*an_r(22)+an_r(26))
415c4762a1bSJed Brown
416c4762a1bSJed Brown        f_eq(2) = atom_o_init                                           &
417c4762a1bSJed Brown     &          - (an_o_additive*an_r(2) + 2*an_r(3)                    &
418c4762a1bSJed Brown     &             + 2*an_r(4) + an_r(5)                                &
419c4762a1bSJed Brown     &             + an_r(8) + an_r(9) + an_r(10) + an_r(12) + an_r(13) &
420c4762a1bSJed Brown     &             + 2*an_r(15) + 2*an_r(16)+ an_r(20) + an_r(22)       &
421c4762a1bSJed Brown     &             + an_r(23) + 2*an_r(24) + 1*an_r(25)+an_r(26))
422c4762a1bSJed Brown
423c4762a1bSJed Brown        f_eq(3) = an_r(2)-1.0d-150
424c4762a1bSJed Brown
425c4762a1bSJed Brown        f_eq(4) = atom_c_init                                           &
426c4762a1bSJed Brown     &          - (an_c(1)*an_r(1) + an_c_additive * an_r(2)            &
427c4762a1bSJed Brown     &          + an_r(4) + an_r(13)+ 2*an_r(17) + an_r(18)             &
428c4762a1bSJed Brown     &          + an_r(19) + an_r(20))
429c4762a1bSJed Brown
430c4762a1bSJed Brown        do ip = 1,26
431c4762a1bSJed Brown           part_p(ip) = (an_r(ip)/an_t) * pt
432c4762a1bSJed Brown        enddo
433c4762a1bSJed Brown
434c4762a1bSJed Brown        i_cc      = an_c(1)
435c4762a1bSJed Brown        i_hh      = an_h(1)
436c4762a1bSJed Brown        a_io2      = i_cc + i_hh/4.0
437c4762a1bSJed Brown        i_h2o     = i_hh/2
438c4762a1bSJed Brown        idiff     = (i_cc + i_h2o) - (a_io2 + 1)
439c4762a1bSJed Brown
440c4762a1bSJed Brown        f_eq(5) = k_eq(11)*an_r(1)*an_r(3)**a_io2                       &
441c4762a1bSJed Brown     &          - (an_r(4)**i_cc)*(an_r(5)**i_h2o)*((pt/an_t)**idiff)
442c4762a1bSJed Brown!           write(6,*)f_eq(5),an_r(1), an_r(3), an_r(4),an_r(5),' II'
443c4762a1bSJed Brown!          stop
444c4762a1bSJed Brown        f_eq(6) = atom_n_init                                           &
445c4762a1bSJed Brown     &          - (2*an_r(6) + an_r(7) + an_r(9) + 2*an_r(12)           &
446c4762a1bSJed Brown     &              + an_r(15)                                          &
447c4762a1bSJed Brown     &              + an_r(23))
448c4762a1bSJed Brown
449c4762a1bSJed Brown      f_eq( 7) = part_p(11)                                             &
450c4762a1bSJed Brown     &         - (k_eq( 1) * sqrt(part_p(14)+1d-23))
451c4762a1bSJed Brown      f_eq( 8) = part_p( 8)                                             &
452c4762a1bSJed Brown     &         - (k_eq( 2) * sqrt(part_p( 3)+1d-23))
453c4762a1bSJed Brown
454c4762a1bSJed Brown      f_eq( 9) = part_p( 7)                                             &
455c4762a1bSJed Brown     &         - (k_eq( 3) * sqrt(part_p( 6)+1d-23))
456c4762a1bSJed Brown
457c4762a1bSJed Brown      f_eq(10) = part_p(10)                                             &
458c4762a1bSJed Brown     &         - (k_eq( 4) * sqrt(part_p( 3)+1d-23))                    &
459c4762a1bSJed Brown     &         * sqrt(part_p(14))
460c4762a1bSJed Brown
461c4762a1bSJed Brown      f_eq(11) = part_p( 9)                                             &
462c4762a1bSJed Brown     &         - (k_eq( 5) * sqrt(part_p( 3)+1d-23))                    &
463c4762a1bSJed Brown     &         * sqrt(part_p( 6)+1d-23)
464c4762a1bSJed Brown      f_eq(12) = part_p( 5)                                             &
465c4762a1bSJed Brown     &         - (k_eq( 6) * sqrt(part_p( 3)+1d-23))                    &
466c4762a1bSJed Brown     &         * (part_p(14))
467c4762a1bSJed Brown
468c4762a1bSJed Brown      f_eq(13) = part_p( 4)                                             &
469c4762a1bSJed Brown     &         - (k_eq( 7) * sqrt(part_p(3)+1.0d-23))                   &
470c4762a1bSJed Brown     &         * (part_p(13))
471c4762a1bSJed Brown
472c4762a1bSJed Brown      f_eq(14) = part_p(15)                                             &
473c4762a1bSJed Brown     &         - (k_eq( 8) * sqrt(part_p(3)+1.0d-50))                   &
474c4762a1bSJed Brown     &         * (part_p( 9))
475c4762a1bSJed Brown      f_eq(15) = part_p(16)                                             &
476c4762a1bSJed Brown     &         - (k_eq( 9) * part_p( 3))                                &
477c4762a1bSJed Brown     &         * sqrt(part_p(14)+1d-23)
478c4762a1bSJed Brown
479c4762a1bSJed Brown      f_eq(16) = part_p(12)                                             &
480c4762a1bSJed Brown     &         - (k_eq(10) * sqrt(part_p( 3)+1d-23))                    &
481c4762a1bSJed Brown     &         * (part_p( 6))
482c4762a1bSJed Brown
483c4762a1bSJed Brown      f_eq(17) = part_p(14)*part_p(18)**2                               &
484c4762a1bSJed Brown     &         - (k_eq(15) * part_p(17))
485c4762a1bSJed Brown
486c4762a1bSJed Brown      f_eq(18) = (part_p(13)**2)                                        &
487c4762a1bSJed Brown     &     - (k_eq(16) * part_p(3)*part_p(18)**2)
488c4762a1bSJed Brown      print*,f_eq(18),part_p(3),part_p(18),part_p(13),k_eq(16)
489c4762a1bSJed Brown
490c4762a1bSJed Brown      f_eq(19) = part_p(19)*part_p(3) - k_eq(17)*part_p(13)*part_p(10)
491c4762a1bSJed Brown
492c4762a1bSJed Brown      f_eq(20) = part_p(21)*part_p(20) - k_eq(18)*part_p(19)*part_p(8)
493c4762a1bSJed Brown
494c4762a1bSJed Brown      f_eq(21) = part_p(21)*part_p(23) - k_eq(19)*part_p(7)*part_p(8)
495c4762a1bSJed Brown
496c4762a1bSJed Brown      f_eq(22) = part_p(5)*part_p(11) - k_eq(20)*part_p(21)*part_p(22)
497c4762a1bSJed Brown
498c4762a1bSJed Brown      f_eq(23) = part_p(24) - k_eq(21)*part_p(21)*part_p(3)
499c4762a1bSJed Brown
500c4762a1bSJed Brown      f_eq(24) =  part_p(3)*part_p(25) - k_eq(22)*part_p(24)*part_p(8)
501c4762a1bSJed Brown
502c4762a1bSJed Brown      f_eq(25) =  part_p(26) - k_eq(23)*part_p(21)*part_p(10)
503c4762a1bSJed Brown
504c4762a1bSJed Brown      f_eq(26) = -(an_r(20) + an_r(22) + an_r(23))                      &
505c4762a1bSJed Brown     &          +(an_r(21) + an_r(24) + an_r(25) + an_r(26))
506c4762a1bSJed Brown
507c4762a1bSJed Brown             do i = 1,26
508c4762a1bSJed Brown                 write(44,*)i,f_eq(i)
509c4762a1bSJed Brown              enddo
510c4762a1bSJed Brown
511c4762a1bSJed Brown      return
512c4762a1bSJed Brown      end
513c4762a1bSJed Brown
514c4762a1bSJed Brown      subroutine ShashiFormJacobian(an_r,d_eq)
515c4762a1bSJed Brown!        implicit PetscScalar (a-h,o-z)
516c4762a1bSJed Brown        implicit none
517c4762a1bSJed Brown        PetscScalar an_c_additive
518c4762a1bSJed Brown        PetscScalar       an_h_additive
519c4762a1bSJed Brown        PetscScalar an_o_additive
520c4762a1bSJed Brown        PetscScalar   atom_c_init
521c4762a1bSJed Brown        PetscScalar atom_h_init
522c4762a1bSJed Brown        PetscScalar atom_n_init
523c4762a1bSJed Brown        PetscScalar atom_o_init
524c4762a1bSJed Brown        PetscScalar h_init
525c4762a1bSJed Brown        PetscScalar p_init
526c4762a1bSJed Brown        PetscInt nfuel
527c4762a1bSJed Brown        PetscScalar temp,pt
528*67a7e566SJose E. Roman        PetscScalar an_t,ai_o2
529c4762a1bSJed Brown        PetscScalar an_tot1_d,an_tot1
530c4762a1bSJed Brown        PetscScalar an_tot2_d,an_tot2
531c4762a1bSJed Brown        PetscScalar const5,const3,const2
532c4762a1bSJed Brown        PetscScalar const_cube
533c4762a1bSJed Brown        PetscScalar const_five
534c4762a1bSJed Brown        PetscScalar const_four
535c4762a1bSJed Brown        PetscScalar const_six
536*67a7e566SJose E. Roman        PetscInt jj,jb,ii3,id,ib,i
537c4762a1bSJed Brown        PetscScalar pt2,pt1
538*67a7e566SJose E. Roman        PetscScalar an_r(26),k_eq(23)
539c4762a1bSJed Brown        PetscScalar d_eq(26,26),H_molar(26)
540c4762a1bSJed Brown        PetscInt an_h(1),an_c(1)
541*67a7e566SJose E. Roman        PetscScalar ai_pwr1,idiff
542c4762a1bSJed Brown        PetscInt i_cc,i_hh
543c4762a1bSJed Brown        PetscInt i_h2o,i_pwr2,i_co2_h2o
544c4762a1bSJed Brown        PetscScalar pt_cube,pt_five
545c4762a1bSJed Brown        PetscScalar pt_four
546*67a7e566SJose E. Roman        PetscScalar pt_val1,pt_val2
547c4762a1bSJed Brown        PetscInt j
548c4762a1bSJed Brown
549c4762a1bSJed Brown        pt = 0.1
550c4762a1bSJed Brown        atom_c_init =6.7408177364816552D-022
551c4762a1bSJed Brown        atom_h_init = 2.0
552c4762a1bSJed Brown        atom_o_init = 1.0
553c4762a1bSJed Brown        atom_n_init = 3.76
554c4762a1bSJed Brown        nfuel = 1
555c4762a1bSJed Brown        an_c(1) = 1
556c4762a1bSJed Brown        an_h(1) = 4
557c4762a1bSJed Brown        an_c_additive = 2
558c4762a1bSJed Brown        an_h_additive = 6
559c4762a1bSJed Brown        an_o_additive = 1
560c4762a1bSJed Brown        h_init = 128799.7267952987
561c4762a1bSJed Brown        p_init = 0.1
562c4762a1bSJed Brown        temp = 1500
563c4762a1bSJed Brown
564c4762a1bSJed Brown       k_eq( 1) =     1.75149D-05
565c4762a1bSJed Brown       k_eq( 2) =     4.01405D-06
566c4762a1bSJed Brown       k_eq( 3) =     6.04663D-14
567c4762a1bSJed Brown       k_eq( 4) =     2.73612D-01
568c4762a1bSJed Brown       k_eq( 5) =     3.25592D-03
569c4762a1bSJed Brown       k_eq( 6) =     5.33568D+05
570c4762a1bSJed Brown       k_eq( 7) =     2.07479D+05
571c4762a1bSJed Brown       k_eq( 8) =     1.11841D-02
572c4762a1bSJed Brown       k_eq( 9) =     1.72684D-03
573c4762a1bSJed Brown       k_eq(10) =     1.98588D-07
574c4762a1bSJed Brown       k_eq(11) =     7.23600D+27
575c4762a1bSJed Brown       k_eq(12) =     5.73926D+49
576c4762a1bSJed Brown       k_eq(13) =     1.00000D+00
577c4762a1bSJed Brown       k_eq(14) =     1.64493D+16
578c4762a1bSJed Brown       k_eq(15) =     2.73837D-29
579c4762a1bSJed Brown       k_eq(16) =     3.27419D+50
580c4762a1bSJed Brown       k_eq(17) =     1.72447D-23
581c4762a1bSJed Brown       k_eq(18) =     4.24657D-06
582c4762a1bSJed Brown       k_eq(19) =     1.16065D-14
583c4762a1bSJed Brown       k_eq(20) =     3.28020D+25
584c4762a1bSJed Brown       k_eq(21) =     1.06291D+00
585c4762a1bSJed Brown       k_eq(22) =     9.11507D+02
586c4762a1bSJed Brown       k_eq(23) =     6.02837D+03
587c4762a1bSJed Brown
588c4762a1bSJed Brown       H_molar( 1) =     3.26044D+03
589c4762a1bSJed Brown       H_molar( 2) =    -8.00407D+04
590c4762a1bSJed Brown       H_molar( 3) =     4.05873D+04
591c4762a1bSJed Brown       H_molar( 4) =    -3.31849D+05
592c4762a1bSJed Brown       H_molar( 5) =    -1.93654D+05
593c4762a1bSJed Brown       H_molar( 6) =     3.84035D+04
594c4762a1bSJed Brown       H_molar( 7) =     4.97589D+05
595c4762a1bSJed Brown       H_molar( 8) =     2.74483D+05
596c4762a1bSJed Brown       H_molar( 9) =     1.30022D+05
597c4762a1bSJed Brown       H_molar(10) =     7.58429D+04
598c4762a1bSJed Brown       H_molar(11) =     2.42948D+05
599c4762a1bSJed Brown       H_molar(12) =     1.44588D+05
600c4762a1bSJed Brown       H_molar(13) =    -7.16891D+04
601c4762a1bSJed Brown       H_molar(14) =     3.63075D+04
602c4762a1bSJed Brown       H_molar(15) =     9.23880D+04
603c4762a1bSJed Brown       H_molar(16) =     6.50477D+04
604c4762a1bSJed Brown       H_molar(17) =     3.04310D+05
605c4762a1bSJed Brown       H_molar(18) =     7.41707D+05
606c4762a1bSJed Brown       H_molar(19) =     6.32767D+05
607c4762a1bSJed Brown       H_molar(20) =     8.90624D+05
608c4762a1bSJed Brown       H_molar(21) =     2.49805D+04
609c4762a1bSJed Brown       H_molar(22) =     6.43473D+05
610c4762a1bSJed Brown       H_molar(23) =     1.02861D+06
611c4762a1bSJed Brown       H_molar(24) =    -6.07503D+03
612c4762a1bSJed Brown       H_molar(25) =     1.27020D+05
613c4762a1bSJed Brown       H_molar(26) =    -1.07011D+05
614c4762a1bSJed Brown
615c4762a1bSJed Brown!
616c4762a1bSJed Brown!=======
617c4762a1bSJed Brown      do jb = 1,26
618c4762a1bSJed Brown         do ib = 1,26
619c4762a1bSJed Brown            d_eq(ib,jb) = 0.0d0
620c4762a1bSJed Brown         end do
621c4762a1bSJed Brown      end do
622c4762a1bSJed Brown
623c4762a1bSJed Brown        an_t = 0.0
624c4762a1bSJed Brown      do id = 1,26
625c4762a1bSJed Brown         an_t = an_t + an_r(id)
626c4762a1bSJed Brown      enddo
627c4762a1bSJed Brown
628c4762a1bSJed Brown!====
629c4762a1bSJed Brown!====
630c4762a1bSJed Brown        d_eq(1,1) = -an_h(1)
631c4762a1bSJed Brown        d_eq(1,2) = -an_h_additive
632c4762a1bSJed Brown        d_eq(1,5) = -2
633c4762a1bSJed Brown        d_eq(1,10) = -1
634c4762a1bSJed Brown        d_eq(1,11) = -1
635c4762a1bSJed Brown        d_eq(1,14) = -2
636c4762a1bSJed Brown        d_eq(1,16) = -1
637c4762a1bSJed Brown        d_eq(1,17) = -2
638c4762a1bSJed Brown        d_eq(1,19) = -1
639c4762a1bSJed Brown        d_eq(1,20) = -1
640c4762a1bSJed Brown        d_eq(1,22) = -3
641c4762a1bSJed Brown        d_eq(1,26) = -1
642c4762a1bSJed Brown
643c4762a1bSJed Brown        d_eq(2,2) = -1*an_o_additive
644c4762a1bSJed Brown        d_eq(2,3) = -2
645c4762a1bSJed Brown        d_eq(2,4) = -2
646c4762a1bSJed Brown        d_eq(2,5) = -1
647c4762a1bSJed Brown        d_eq(2,8) = -1
648c4762a1bSJed Brown        d_eq(2,9) = -1
649c4762a1bSJed Brown        d_eq(2,10) = -1
650c4762a1bSJed Brown        d_eq(2,12) = -1
651c4762a1bSJed Brown        d_eq(2,13) = -1
652c4762a1bSJed Brown        d_eq(2,15) = -2
653c4762a1bSJed Brown        d_eq(2,16) = -2
654c4762a1bSJed Brown        d_eq(2,20) = -1
655c4762a1bSJed Brown        d_eq(2,22) = -1
656c4762a1bSJed Brown        d_eq(2,23) = -1
657c4762a1bSJed Brown        d_eq(2,24) = -2
658c4762a1bSJed Brown        d_eq(2,25) = -1
659c4762a1bSJed Brown        d_eq(2,26) = -1
660c4762a1bSJed Brown
661c4762a1bSJed Brown        d_eq(6,6) = -2
662c4762a1bSJed Brown        d_eq(6,7) = -1
663c4762a1bSJed Brown        d_eq(6,9) = -1
664c4762a1bSJed Brown        d_eq(6,12) = -2
665c4762a1bSJed Brown        d_eq(6,15) = -1
666c4762a1bSJed Brown        d_eq(6,23) = -1
667c4762a1bSJed Brown
668c4762a1bSJed Brown        d_eq(4,1) = -an_c(1)
669c4762a1bSJed Brown        d_eq(4,2) = -an_c_additive
670c4762a1bSJed Brown        d_eq(4,4) = -1
671c4762a1bSJed Brown        d_eq(4,13) = -1
672c4762a1bSJed Brown        d_eq(4,17) = -2
673c4762a1bSJed Brown        d_eq(4,18) = -1
674c4762a1bSJed Brown        d_eq(4,19) = -1
675c4762a1bSJed Brown        d_eq(4,20) = -1
676c4762a1bSJed Brown
677c4762a1bSJed Brown!----------
678c4762a1bSJed Brown        const2 = an_t*an_t
679c4762a1bSJed Brown        const3 = (an_t)*sqrt(an_t)
680c4762a1bSJed Brown        const5 = an_t*const3
681c4762a1bSJed Brown
682c4762a1bSJed Brown           const_cube =  an_t*an_t*an_t
683c4762a1bSJed Brown           const_four =  const2*const2
684c4762a1bSJed Brown           const_five =  const2*const_cube
685c4762a1bSJed Brown           const_six  = const_cube*const_cube
686c4762a1bSJed Brown           pt_cube = pt*pt*pt
687c4762a1bSJed Brown           pt_four = pt_cube*pt
688c4762a1bSJed Brown           pt_five = pt_cube*pt*pt
689c4762a1bSJed Brown
690c4762a1bSJed Brown           i_cc = an_c(1)
691c4762a1bSJed Brown           i_hh = an_h(1)
692c4762a1bSJed Brown           ai_o2     = i_cc + float(i_hh)/4.0
693c4762a1bSJed Brown           i_co2_h2o = i_cc + i_hh/2
694c4762a1bSJed Brown           i_h2o     = i_hh/2
695c4762a1bSJed Brown           ai_pwr1  = 1 + i_cc + float(i_hh)/4.0
696c4762a1bSJed Brown           i_pwr2  = i_cc + i_hh/2
697c4762a1bSJed Brown           idiff     = (i_cc + i_h2o) - (ai_o2 + 1)
698c4762a1bSJed Brown
699c4762a1bSJed Brown           pt1   = pt**(ai_pwr1)
700c4762a1bSJed Brown           an_tot1 = an_t**(ai_pwr1)
701c4762a1bSJed Brown           pt_val1 = (pt/an_t)**(ai_pwr1)
702c4762a1bSJed Brown           an_tot1_d = an_tot1*an_t
703c4762a1bSJed Brown
704c4762a1bSJed Brown           pt2   = pt**(i_pwr2)
705c4762a1bSJed Brown           an_tot2 = an_t**(i_pwr2)
706c4762a1bSJed Brown           pt_val2 = (pt/an_t)**(i_pwr2)
707c4762a1bSJed Brown           an_tot2_d = an_tot2*an_t
708c4762a1bSJed Brown
709c4762a1bSJed Brown           d_eq(5,1) =                                                  &
710c4762a1bSJed Brown     &           -(an_r(4)**i_cc)*(an_r(5)**i_h2o)                      &
711c4762a1bSJed Brown     &           *((pt/an_t)**idiff) *(-idiff/an_t)
712c4762a1bSJed Brown
713c4762a1bSJed Brown           do jj = 2,26
714c4762a1bSJed Brown              d_eq(5,jj) = d_eq(5,1)
715c4762a1bSJed Brown           enddo
716c4762a1bSJed Brown
717c4762a1bSJed Brown           d_eq(5,1) = d_eq(5,1) + k_eq(11)* (an_r(3) **ai_o2)
718c4762a1bSJed Brown
719c4762a1bSJed Brown           d_eq(5,3) = d_eq(5,3) + k_eq(11)* (ai_o2*an_r(3)**(ai_o2-1)) &
720c4762a1bSJed Brown     &                           * an_r(1)
721c4762a1bSJed Brown
722c4762a1bSJed Brown           d_eq(5,4) = d_eq(5,4) - (i_cc*an_r(4)**(i_cc-1))*            &
723c4762a1bSJed Brown     &                           (an_r(5)**i_h2o)* ((pt/an_t)**idiff)
724c4762a1bSJed Brown           d_eq(5,5) = d_eq(5,5)                                        &
725c4762a1bSJed Brown     &               - (i_h2o*(an_r(5)**(i_h2o-1)))                     &
726c4762a1bSJed Brown     &               * (an_r(4)**i_cc)* ((pt/an_t)**idiff)
727c4762a1bSJed Brown
728c4762a1bSJed Brown           d_eq(3,1) = -(an_r(4)**2)*(an_r(5)**3)*(pt/an_t)*(-1.0/an_t)
729c4762a1bSJed Brown           do jj = 2,26
730c4762a1bSJed Brown              d_eq(3,jj) = d_eq(3,1)
731c4762a1bSJed Brown           enddo
732c4762a1bSJed Brown
733c4762a1bSJed Brown           d_eq(3,2) = d_eq(3,2) + k_eq(12)* (an_r(3)**3)
734c4762a1bSJed Brown
735c4762a1bSJed Brown           d_eq(3,3) = d_eq(3,3) + k_eq(12)* (3*an_r(3)**2)*an_r(2)
736c4762a1bSJed Brown
737c4762a1bSJed Brown           d_eq(3,4) = d_eq(3,4) - 2*an_r(4)*(an_r(5)**3)*(pt/an_t)
738c4762a1bSJed Brown
739c4762a1bSJed Brown           d_eq(3,5) = d_eq(3,5) - 3*(an_r(5)**2)*(an_r(4)**2)*(pt/an_t)
740c4762a1bSJed Brown!     &                           *(pt_five/const_five)
741c4762a1bSJed Brown
742c4762a1bSJed Brown           do ii3 = 1,26
743c4762a1bSJed Brown              d_eq(3,ii3) = 0.0d0
744c4762a1bSJed Brown           enddo
745c4762a1bSJed Brown           d_eq(3,2) = 1.0d0
746c4762a1bSJed Brown
747c4762a1bSJed Brown        d_eq(7,1) = pt*an_r(11)*(-1.0)/const2                           &
748c4762a1bSJed Brown     &            -k_eq(1)*sqrt(pt)*sqrt(an_r(14)+1d-50)*(-0.5/const3)
749c4762a1bSJed Brown
750c4762a1bSJed Brown        do jj = 2,26
751c4762a1bSJed Brown           d_eq(7,jj) = d_eq(7,1)
752c4762a1bSJed Brown        enddo
753c4762a1bSJed Brown
754c4762a1bSJed Brown        d_eq(7,11) = d_eq(7,11) + pt/an_t
755c4762a1bSJed Brown        d_eq(7,14) = d_eq(7,14)                                         &
756c4762a1bSJed Brown     &            - k_eq(1)*sqrt(pt)*(0.5/(sqrt((an_r(14)+1d-50)*an_t)))
757c4762a1bSJed Brown
758c4762a1bSJed Brown        d_eq(8,1) = pt*an_r(8)*(-1.0)/const2                            &
759c4762a1bSJed Brown     &            -k_eq(2)*sqrt(pt)*sqrt(an_r(3)+1.0d-50)*(-0.5/const3)
760c4762a1bSJed Brown
761c4762a1bSJed Brown        do jj = 2,26
762c4762a1bSJed Brown           d_eq(8,jj) = d_eq(8,1)
763c4762a1bSJed Brown        enddo
764c4762a1bSJed Brown
765c4762a1bSJed Brown        d_eq(8,3) = d_eq(8,3)                                           &
766c4762a1bSJed Brown     &            -k_eq(2)*sqrt(pt)*(0.5/(sqrt((an_r(3)+1.0d-50)*an_t)))
767c4762a1bSJed Brown        d_eq(8,8) = d_eq(8,8) + pt/an_t
768c4762a1bSJed Brown
769c4762a1bSJed Brown        d_eq(9,1) = pt*an_r(7)*(-1.0)/const2                            &
770c4762a1bSJed Brown     &            -k_eq(3)*sqrt(pt)*sqrt(an_r(6))*(-0.5/const3)
771c4762a1bSJed Brown
772c4762a1bSJed Brown        do jj = 2,26
773c4762a1bSJed Brown           d_eq(9,jj) = d_eq(9,1)
774c4762a1bSJed Brown        enddo
775c4762a1bSJed Brown
776c4762a1bSJed Brown        d_eq(9,7) = d_eq(9,7) + pt/an_t
777c4762a1bSJed Brown        d_eq(9,6) = d_eq(9,6)                                           &
778c4762a1bSJed Brown     &             -k_eq(3)*sqrt(pt)*(0.5/(sqrt(an_r(6)*an_t)))
779c4762a1bSJed Brown
780c4762a1bSJed Brown        d_eq(10,1) = pt*an_r(10)*(-1.0)/const2                          &
781c4762a1bSJed Brown     &             -k_eq(4)*(pt)*sqrt((an_r(3)+1.0d-50)                 &
782c4762a1bSJed Brown     &       *an_r(14))*(-1.0/const2)
783c4762a1bSJed Brown        do jj = 2,26
784c4762a1bSJed Brown           d_eq(10,jj) = d_eq(10,1)
785c4762a1bSJed Brown        enddo
786c4762a1bSJed Brown
787c4762a1bSJed Brown        d_eq(10,3) = d_eq(10,3)                                         &
788c4762a1bSJed Brown     &           -k_eq(4)*(pt)*sqrt(an_r(14))                           &
789c4762a1bSJed Brown     &           *(0.5/(sqrt(an_r(3)+1.0d-50)*an_t))
790c4762a1bSJed Brown        d_eq(10,10) = d_eq(10,10) + pt/an_t
791c4762a1bSJed Brown        d_eq(10,14) = d_eq(10,14)                                       &
792c4762a1bSJed Brown     &           -k_eq(4)*(pt)*sqrt(an_r(3)+1.0d-50)                    &
793c4762a1bSJed Brown     &            *(0.5/(sqrt(an_r(14)+1.0d-50)*an_t))
794c4762a1bSJed Brown
795c4762a1bSJed Brown        d_eq(11,1) = pt*an_r(9)*(-1.0)/const2                           &
796c4762a1bSJed Brown     &             -k_eq(5)*(pt)*sqrt((an_r(3)+1.0d-50)*an_r(6))        &
797c4762a1bSJed Brown     &             *(-1.0/const2)
798c4762a1bSJed Brown
799c4762a1bSJed Brown        do jj = 2,26
800c4762a1bSJed Brown           d_eq(11,jj) = d_eq(11,1)
801c4762a1bSJed Brown        enddo
802c4762a1bSJed Brown
803c4762a1bSJed Brown        d_eq(11,3) = d_eq(11,3)                                         &
804c4762a1bSJed Brown     &            -k_eq(5)*(pt)*sqrt(an_r(6))*(0.5/                     &
805c4762a1bSJed Brown     &       (sqrt(an_r(3)+1.0d-50)*an_t))
806c4762a1bSJed Brown        d_eq(11,6) = d_eq(11,6)                                         &
807c4762a1bSJed Brown     &            -k_eq(5)*(pt)*sqrt(an_r(3)+1.0d-50)                   &
808c4762a1bSJed Brown     &       *(0.5/(sqrt(an_r(6))*an_t))
809c4762a1bSJed Brown        d_eq(11,9) = d_eq(11,9) + pt/an_t
810c4762a1bSJed Brown
811c4762a1bSJed Brown        d_eq(12,1) = pt*an_r(5)*(-1.0)/const2                           &
812c4762a1bSJed Brown     &             -k_eq(6)*(pt**1.5)*sqrt(an_r(3)+1.0d-50)             &
813c4762a1bSJed Brown     &             *(an_r(14))*(-1.5/const5)
814c4762a1bSJed Brown
815c4762a1bSJed Brown        do jj = 2,26
816c4762a1bSJed Brown           d_eq(12,jj) = d_eq(12,1)
817c4762a1bSJed Brown        enddo
818c4762a1bSJed Brown
819c4762a1bSJed Brown        d_eq(12,3) = d_eq(12,3)                                         &
820c4762a1bSJed Brown     &            -k_eq(6)*(pt**1.5)*((an_r(14)+1.0d-50)/const3)        &
821c4762a1bSJed Brown     &            *(0.5/sqrt(an_r(3)+1.0d-50))
822c4762a1bSJed Brown
823c4762a1bSJed Brown        d_eq(12,5) = d_eq(12,5) + pt/an_t
824c4762a1bSJed Brown        d_eq(12,14) = d_eq(12,14)                                       &
825c4762a1bSJed Brown     &            -k_eq(6)*(pt**1.5)*(sqrt(an_r(3)+1.0d-50)/const3)
826c4762a1bSJed Brown
827c4762a1bSJed Brown        d_eq(13,1) = pt*an_r(4)*(-1.0)/const2                           &
828c4762a1bSJed Brown     &             -k_eq(7)*(pt**1.5)*sqrt(an_r(3)+1.0d-50)             &
829c4762a1bSJed Brown     &             *(an_r(13))*(-1.5/const5)
830c4762a1bSJed Brown
831c4762a1bSJed Brown        do jj = 2,26
832c4762a1bSJed Brown           d_eq(13,jj) = d_eq(13,1)
833c4762a1bSJed Brown        enddo
834c4762a1bSJed Brown
835c4762a1bSJed Brown        d_eq(13,3) = d_eq(13,3)                                         &
836c4762a1bSJed Brown     &            -k_eq(7)*(pt**1.5)*(an_r(13)/const3)                  &
837c4762a1bSJed Brown     &            *(0.5/sqrt(an_r(3)+1.0d-50))
838c4762a1bSJed Brown
839c4762a1bSJed Brown        d_eq(13,4) = d_eq(13,4) + pt/an_t
840c4762a1bSJed Brown        d_eq(13,13) = d_eq(13,13)                                       &
841c4762a1bSJed Brown     &            -k_eq(7)*(pt**1.5)*(sqrt(an_r(3)+1.0d-50)/const3)
842c4762a1bSJed Brown
843c4762a1bSJed Brown        d_eq(14,1) = pt*an_r(15)*(-1.0)/const2                          &
844c4762a1bSJed Brown     &             -k_eq(8)*(pt**1.5)*sqrt(an_r(3)+1.0d-50)             &
845c4762a1bSJed Brown     &             *(an_r(9))*(-1.5/const5)
846c4762a1bSJed Brown
847c4762a1bSJed Brown        do jj = 2,26
848c4762a1bSJed Brown           d_eq(14,jj) = d_eq(14,1)
849c4762a1bSJed Brown        enddo
850c4762a1bSJed Brown
851c4762a1bSJed Brown        d_eq(14,3) = d_eq(14,3)                                         &
852c4762a1bSJed Brown     &            -k_eq(8)*(pt**1.5)*(an_r(9)/const3)                   &
853c4762a1bSJed Brown     &            *(0.5/sqrt(an_r(3)+1.0d-50))
854c4762a1bSJed Brown        d_eq(14,9) = d_eq(14,9)                                         &
855c4762a1bSJed Brown     &            -k_eq(8)*(pt**1.5)*(sqrt(an_r(3)+1.0d-50)/const3)
856c4762a1bSJed Brown        d_eq(14,15) = d_eq(14,15)+ pt/an_t
857c4762a1bSJed Brown
858c4762a1bSJed Brown        d_eq(15,1) = pt*an_r(16)*(-1.0)/const2                          &
859c4762a1bSJed Brown     &             -k_eq(9)*(pt**1.5)*sqrt(an_r(14)+1.0d-50)            &
860c4762a1bSJed Brown     &             *(an_r(3))*(-1.5/const5)
861c4762a1bSJed Brown
862c4762a1bSJed Brown        do jj = 2,26
863c4762a1bSJed Brown           d_eq(15,jj) = d_eq(15,1)
864c4762a1bSJed Brown        enddo
865c4762a1bSJed Brown
866c4762a1bSJed Brown        d_eq(15,3) = d_eq(15,3)                                         &
867c4762a1bSJed Brown     &            -k_eq(9)*(pt**1.5)*(sqrt(an_r(14)+1.0d-50)/const3)
868c4762a1bSJed Brown        d_eq(15,14) = d_eq(15,14)                                       &
869c4762a1bSJed Brown     &            -k_eq(9)*(pt**1.5)*(an_r(3)/const3)                   &
870c4762a1bSJed Brown     &            *(0.5/sqrt(an_r(14)+1.0d-50))
871c4762a1bSJed Brown        d_eq(15,16) = d_eq(15,16) + pt/an_t
872c4762a1bSJed Brown
873c4762a1bSJed Brown        d_eq(16,1) = pt*an_r(12)*(-1.0)/const2                          &
874c4762a1bSJed Brown     &             -k_eq(10)*(pt**1.5)*sqrt(an_r(3)+1.0d-50)            &
875c4762a1bSJed Brown     &             *(an_r(6))*(-1.5/const5)
876c4762a1bSJed Brown
877c4762a1bSJed Brown        do jj = 2,26
878c4762a1bSJed Brown           d_eq(16,jj) = d_eq(16,1)
879c4762a1bSJed Brown        enddo
880c4762a1bSJed Brown
881c4762a1bSJed Brown        d_eq(16,3) = d_eq(16,3)                                         &
882c4762a1bSJed Brown     &             -k_eq(10)*(pt**1.5)*(an_r(6)/const3)                 &
883c4762a1bSJed Brown     &             *(0.5/sqrt(an_r(3)+1.0d-50))
884c4762a1bSJed Brown
885c4762a1bSJed Brown        d_eq(16,6) = d_eq(16,6)                                         &
886c4762a1bSJed Brown     &             -k_eq(10)*(pt**1.5)*(sqrt(an_r(3)+1.0d-50)/const3)
887c4762a1bSJed Brown        d_eq(16,12) = d_eq(16,12) + pt/an_t
888c4762a1bSJed Brown
889c4762a1bSJed Brown        const_cube =  an_t*an_t*an_t
890c4762a1bSJed Brown        const_four =  const2*const2
891c4762a1bSJed Brown
892c4762a1bSJed Brown        d_eq(17,1) = an_r(14)*an_r(18)*an_r(18)*(pt**3)*(-3/const_four) &
893c4762a1bSJed Brown     &             - k_eq(15) * an_r(17)*pt * (-1/const2)
894c4762a1bSJed Brown        do jj = 2,26
895c4762a1bSJed Brown           d_eq(17,jj) = d_eq(17,1)
896c4762a1bSJed Brown        enddo
897c4762a1bSJed Brown        d_eq(17,14) = d_eq(17,14) + an_r(18)*an_r(18)*(pt**3)/const_cube
898c4762a1bSJed Brown        d_eq(17,17) = d_eq(17,17) - k_eq(15)*pt/an_t
899c4762a1bSJed Brown        d_eq(17,18) = d_eq(17,18) + 2*an_r(18)*an_r(14)                 &
900c4762a1bSJed Brown     &                            *(pt**3)/const_cube
901c4762a1bSJed Brown
902c4762a1bSJed Brown        d_eq(18,1) = an_r(13)*an_r(13)*(pt**2)*(-2/const_cube)          &
903c4762a1bSJed Brown     &             - k_eq(16) * an_r(3)*an_r(18)*an_r(18)               &
904c4762a1bSJed Brown     &              * (pt*pt*pt) * (-3/const_four)
905c4762a1bSJed Brown        do jj = 2,26
906c4762a1bSJed Brown           d_eq(18,jj) = d_eq(18,1)
907c4762a1bSJed Brown        enddo
908c4762a1bSJed Brown        d_eq(18,3) = d_eq(18,3)                                         &
909c4762a1bSJed Brown     &             - k_eq(16) *an_r(18)* an_r(18)*pt*pt*pt /const_cube
910c4762a1bSJed Brown        d_eq(18,13) = d_eq(18,13)                                       &
911c4762a1bSJed Brown     &              + 2* an_r(13)*pt*pt /const2
912c4762a1bSJed Brown        d_eq(18,18) = d_eq(18,18) -k_eq(16)*an_r(3)                     &
913c4762a1bSJed Brown     &              * 2*an_r(18)*pt*pt*pt/const_cube
914c4762a1bSJed Brown
915c4762a1bSJed Brown!====for eq 19
916c4762a1bSJed Brown
917c4762a1bSJed Brown        d_eq(19,1) = an_r(3)*an_r(19)*(pt**2)*(-2/const_cube)           &
918c4762a1bSJed Brown     &             - k_eq(17)*an_r(13)*an_r(10)*pt*pt * (-2/const_cube)
919c4762a1bSJed Brown        do jj = 2,26
920c4762a1bSJed Brown           d_eq(19,jj) = d_eq(19,1)
921c4762a1bSJed Brown        enddo
922c4762a1bSJed Brown        d_eq(19,13) = d_eq(19,13)                                       &
923c4762a1bSJed Brown     &             - k_eq(17) *an_r(10)*pt*pt /const2
924c4762a1bSJed Brown        d_eq(19,10) = d_eq(19,10)                                       &
925c4762a1bSJed Brown     &             - k_eq(17) *an_r(13)*pt*pt /const2
926c4762a1bSJed Brown        d_eq(19,3) = d_eq(19,3) + an_r(19)*pt*pt/const2
927c4762a1bSJed Brown        d_eq(19,19) = d_eq(19,19) + an_r(3)*pt*pt/const2
928c4762a1bSJed Brown!====for eq 20
929c4762a1bSJed Brown
930c4762a1bSJed Brown        d_eq(20,1) = an_r(21)*an_r(20)*(pt**2)*(-2/const_cube)          &
931c4762a1bSJed Brown     &             - k_eq(18) * an_r(19)*an_r(8)*pt*pt * (-2/const_cube)
932c4762a1bSJed Brown        do jj = 2,26
933c4762a1bSJed Brown           d_eq(20,jj) = d_eq(20,1)
934c4762a1bSJed Brown        enddo
935c4762a1bSJed Brown        d_eq(20,8) = d_eq(20,8)                                         &
936c4762a1bSJed Brown     &             - k_eq(18) *an_r(19)*pt*pt /const2
937c4762a1bSJed Brown        d_eq(20,19) = d_eq(20,19)                                       &
938c4762a1bSJed Brown     &             - k_eq(18) *an_r(8)*pt*pt /const2
939c4762a1bSJed Brown        d_eq(20,20) = d_eq(20,20) + an_r(21)*pt*pt/const2
940c4762a1bSJed Brown        d_eq(20,21) = d_eq(20,21) + an_r(20)*pt*pt/const2
941c4762a1bSJed Brown
942c4762a1bSJed Brown!========
943c4762a1bSJed Brown!====for eq 21
944c4762a1bSJed Brown
945c4762a1bSJed Brown        d_eq(21,1) = an_r(21)*an_r(23)*(pt**2)*(-2/const_cube)          &
946c4762a1bSJed Brown     &             - k_eq(19)*an_r(7)*an_r(8)*pt*pt * (-2/const_cube)
947c4762a1bSJed Brown        do jj = 2,26
948c4762a1bSJed Brown           d_eq(21,jj) = d_eq(21,1)
949c4762a1bSJed Brown        enddo
950c4762a1bSJed Brown        d_eq(21,7) = d_eq(21,7)                                         &
951c4762a1bSJed Brown     &             - k_eq(19) *an_r(8)*pt*pt /const2
952c4762a1bSJed Brown        d_eq(21,8) = d_eq(21,8)                                         &
953c4762a1bSJed Brown     &             - k_eq(19) *an_r(7)*pt*pt /const2
954c4762a1bSJed Brown        d_eq(21,21) = d_eq(21,21) + an_r(23)*pt*pt/const2
955c4762a1bSJed Brown        d_eq(21,23) = d_eq(21,23) + an_r(21)*pt*pt/const2
956c4762a1bSJed Brown
957c4762a1bSJed Brown!========
958c4762a1bSJed Brown!  for 22
959c4762a1bSJed Brown        d_eq(22,1) = an_r(5)*an_r(11)*(pt**2)*(-2/const_cube)           &
960c4762a1bSJed Brown     &         -k_eq(20)*an_r(21)*an_r(22)*pt*pt * (-2/const_cube)
961c4762a1bSJed Brown        do jj = 2,26
962c4762a1bSJed Brown           d_eq(22,jj) = d_eq(22,1)
963c4762a1bSJed Brown        enddo
964c4762a1bSJed Brown        d_eq(22,21) = d_eq(22,21)                                       &
965c4762a1bSJed Brown     &             - k_eq(20) *an_r(22)*pt*pt /const2
966c4762a1bSJed Brown        d_eq(22,22) = d_eq(22,22)                                       &
967c4762a1bSJed Brown     &             - k_eq(20) *an_r(21)*pt*pt /const2
968c4762a1bSJed Brown        d_eq(22,11) = d_eq(22,11) + an_r(5)*pt*pt/(const2)
969c4762a1bSJed Brown        d_eq(22,5) = d_eq(22,5) + an_r(11)*pt*pt/(const2)
970c4762a1bSJed Brown
971c4762a1bSJed Brown!========
972c4762a1bSJed Brown!  for 23
973c4762a1bSJed Brown
974c4762a1bSJed Brown        d_eq(23,1) = an_r(24)*(pt)*(-1/const2)                          &
975c4762a1bSJed Brown     &             - k_eq(21)*an_r(21)*an_r(3)*pt*pt * (-2/const_cube)
976c4762a1bSJed Brown        do jj = 2,26
977c4762a1bSJed Brown           d_eq(23,jj) = d_eq(23,1)
978c4762a1bSJed Brown        enddo
979c4762a1bSJed Brown        d_eq(23,3) = d_eq(23,3)                                         &
980c4762a1bSJed Brown     &             - k_eq(21) *an_r(21)*pt*pt /const2
981c4762a1bSJed Brown        d_eq(23,21) = d_eq(23,21)                                       &
982c4762a1bSJed Brown     &             - k_eq(21) *an_r(3)*pt*pt /const2
983c4762a1bSJed Brown        d_eq(23,24) = d_eq(23,24) + pt/(an_t)
984c4762a1bSJed Brown
985c4762a1bSJed Brown!========
986c4762a1bSJed Brown!  for 24
987c4762a1bSJed Brown        d_eq(24,1) = an_r(3)*an_r(25)*(pt**2)*(-2/const_cube)           &
988c4762a1bSJed Brown     &             - k_eq(22)*an_r(24)*an_r(8)*pt*pt * (-2/const_cube)
989c4762a1bSJed Brown        do jj = 2,26
990c4762a1bSJed Brown           d_eq(24,jj) = d_eq(24,1)
991c4762a1bSJed Brown        enddo
992c4762a1bSJed Brown        d_eq(24,8) = d_eq(24,8)                                         &
993c4762a1bSJed Brown     &             - k_eq(22) *an_r(24)*pt*pt /const2
994c4762a1bSJed Brown        d_eq(24,24) = d_eq(24,24)                                       &
995c4762a1bSJed Brown     &             - k_eq(22) *an_r(8)*pt*pt /const2
996c4762a1bSJed Brown        d_eq(24,3) = d_eq(24,3) + an_r(25)*pt*pt/const2
997c4762a1bSJed Brown        d_eq(24,25) = d_eq(24,25) + an_r(3)*pt*pt/const2
998c4762a1bSJed Brown
999c4762a1bSJed Brown!========
1000c4762a1bSJed Brown!for 25
1001c4762a1bSJed Brown
1002c4762a1bSJed Brown        d_eq(25,1) = an_r(26)*(pt)*(-1/const2)                          &
1003c4762a1bSJed Brown     &       - k_eq(23)*an_r(21)*an_r(10)*pt*pt * (-2/const_cube)
1004c4762a1bSJed Brown        do jj = 2,26
1005c4762a1bSJed Brown           d_eq(25,jj) = d_eq(25,1)
1006c4762a1bSJed Brown        enddo
1007c4762a1bSJed Brown        d_eq(25,10) = d_eq(25,10)                                       &
1008c4762a1bSJed Brown     &             - k_eq(23) *an_r(21)*pt*pt /const2
1009c4762a1bSJed Brown        d_eq(25,21) = d_eq(25,21)                                       &
1010c4762a1bSJed Brown     &             - k_eq(23) *an_r(10)*pt*pt /const2
1011c4762a1bSJed Brown        d_eq(25,26) = d_eq(25,26) + pt/(an_t)
1012c4762a1bSJed Brown
1013c4762a1bSJed Brown!============
1014c4762a1bSJed Brown!  for 26
1015c4762a1bSJed Brown        d_eq(26,20) = -1
1016c4762a1bSJed Brown        d_eq(26,22) = -1
1017c4762a1bSJed Brown        d_eq(26,23) = -1
1018c4762a1bSJed Brown        d_eq(26,21) = 1
1019c4762a1bSJed Brown        d_eq(26,24) = 1
1020c4762a1bSJed Brown        d_eq(26,25) = 1
1021c4762a1bSJed Brown        d_eq(26,26) = 1
1022c4762a1bSJed Brown
1023c4762a1bSJed Brown           do j = 1,26
1024c4762a1bSJed Brown         do i = 1,26
1025c4762a1bSJed Brown                write(44,*)i,j,d_eq(i,j)
1026c4762a1bSJed Brown              enddo
1027c4762a1bSJed Brown           enddo
1028c4762a1bSJed Brown
1029c4762a1bSJed Brown        return
1030c4762a1bSJed Brown        end
1031c4762a1bSJed Brown
1032c4762a1bSJed Brown      subroutine ShashiPostCheck(ls,X,Y,W,c_Y,c_W,dummy)
1033c4762a1bSJed Brown#include <petsc/finclude/petscsnes.h>
1034c4762a1bSJed Brown      use petscsnes
1035c4762a1bSJed Brown      implicit none
1036c4762a1bSJed Brown      SNESLineSearch ls
1037c4762a1bSJed Brown      PetscErrorCode ierr
1038c4762a1bSJed Brown      Vec X,Y,W
1039c4762a1bSJed Brown      PetscObject dummy
1040c4762a1bSJed Brown      PetscBool c_Y,c_W
1041c4762a1bSJed Brown      PetscScalar,pointer :: xx(:)
1042c4762a1bSJed Brown      PetscInt i
1043d8606c27SBarry Smith      PetscCall(VecGetArrayF90(W,xx,ierr))
1044c4762a1bSJed Brown      do i=1,26
1045c4762a1bSJed Brown         if (xx(i) < 0.0) then
1046c4762a1bSJed Brown            xx(i) = 0.0
1047c4762a1bSJed Brown            c_W = PETSC_TRUE
1048c4762a1bSJed Brown         endif
1049c4762a1bSJed Brown        if (xx(i) > 3.0) then
1050c4762a1bSJed Brown           xx(i) = 3.0
1051c4762a1bSJed Brown        endif
1052c4762a1bSJed Brown      enddo
1053d8606c27SBarry Smith      PetscCall(VecRestoreArrayF90(W,xx,ierr))
1054c4762a1bSJed Brown      return
1055c4762a1bSJed Brown      end
1056