1 | !_______________________________________________________________________ |
---|
2 | ! DVODE_F90 Conversion Change Record |
---|
3 | ! Last change: ST 01/01/08 |
---|
4 | ! ST 06/15/04: |
---|
5 | ! Convert test program dtest.f to dtest.f90 |
---|
6 | ! Use unix2dos on vode.f |
---|
7 | ! Use Metcalf converter to produce dvode_1.f90 from vode.f |
---|
8 | ! Change some of the Metcalf formatting |
---|
9 | ! Trim trailing blanks to produce dvode_2.f90 |
---|
10 | ! ST 06/16/04: |
---|
11 | ! Dimension RPAR, IPAR, ATOL, ITOL as(*) or (1) in the documentation |
---|
12 | ! prologue and in dtest.f to produce dvode_3.f90 |
---|
13 | ! Convert DVNORM to a subroutine DVNORMST to produce dvode_4.f90 |
---|
14 | ! Convert IXSAV to a subroutine IXSAVST to produce dvode_5.f90 |
---|
15 | ! Replace DUMACH and DUMSET by F90 intrinsic calculation to |
---|
16 | ! produce dvode_6.f90 |
---|
17 | ! Convert IUMACH to subroutine IUMACHST to produce dvode_.7f90 |
---|
18 | ! Convert function DDOT to subroutine DDOTST |
---|
19 | ! Convert function IDAMAX to subroutine IDAMAXST to produce |
---|
20 | ! dvode_.9f90 |
---|
21 | ! Note: DVNORM, IXSAV, IUMACH, DDOT, IDAMAX later changed |
---|
22 | ! back to original forms (see 06/23/04 below) |
---|
23 | ! Convert dvode_9.f90 to a module DVODE_M.F90=dvode_10.f90 |
---|
24 | ! Convert dvode_10.f90 to dvode_11.f90 with dynamic storage |
---|
25 | ! allocation for the nonuser portions of the RWORK and IWORK |
---|
26 | ! arrays. |
---|
27 | ! Deallocate work arrays at the start of new problems (ISTATE=1) |
---|
28 | ! to produce dvode_12.f90 |
---|
29 | ! ST 06/17/04: |
---|
30 | ! Remove LRWUSER and LIWUSER from call list. Set internally to |
---|
31 | ! 22 and 30, respectively. |
---|
32 | ! Set lengths LRW and LIW of the allocatable works arrays |
---|
33 | ! according to value of MF and MAXORD and verify that the |
---|
34 | ! lengths of the arrays allocated are identical to |
---|
35 | ! original minimum sizes in dvode.f. Inserted IMPLICIT NONE |
---|
36 | ! and necessary declarations in all routines to produce |
---|
37 | ! dvode13.f90 |
---|
38 | ! Get rid of warning messages for conditional arithmetic |
---|
39 | ! tests on equality to produce dvode14.f90 |
---|
40 | ! Replace LE, GE, LT, GT, NE, EQ with <=, >=, <, >, /=, == |
---|
41 | ! to produce dvode15.f90 |
---|
42 | ! Miscellaneous cleanup to produce dvode16.f90 |
---|
43 | ! ST 06/18/04: |
---|
44 | ! Move DATA constants to PRIVATE section and eliminated the |
---|
45 | ! corresponding SAVE statements to produce dvode17.f90 |
---|
46 | ! Move the DVOD02 common block to PRIVATE section to |
---|
47 | ! produce dvode18.f90 |
---|
48 | ! Move the DVOD01 common block to PRIVATE section to |
---|
49 | ! produce dvode19.f90 |
---|
50 | ! Modify DVSRCO to reflect above changes to produce dvode20.f90 |
---|
51 | ! Add interface DVINDY_USER to allow the user to interpolate |
---|
52 | ! the derivative to produce dvode21.f90 |
---|
53 | ! ST 06/19/04: |
---|
54 | ! Add SET_OPTS function and GET_STATS subroutine. |
---|
55 | ! Add PUBLIC data type VODE_OPTS |
---|
56 | ! Remove MF, ITOL, ATOL, RTOL, IOPT, RUSER, IUSER from dvode |
---|
57 | ! argument list (passed via fields in OPTS) |
---|
58 | ! Add OPTS to dvode call list to produce dvode22.f90 |
---|
59 | ! ST 06/20/04: |
---|
60 | ! Add INTERFACE VODE_F90 to allow OPTIONS and JAC to be |
---|
61 | ! OPTIONAL, to produce dvode_f90_m23.f90 |
---|
62 | ! ST 06/21/04 |
---|
63 | ! Add short summary of usage for DVODE_F90 |
---|
64 | ! Eliminate RPAR and IPAR |
---|
65 | ! Modify prologue example programs to reflect changes |
---|
66 | ! ST 06/22/04 |
---|
67 | ! Make necessary changes to accommodate ISTATE=3 calls |
---|
68 | ! to produce dvode_f90_m24.f90 ** not yet tested ** |
---|
69 | ! ST 06/23/04 |
---|
70 | ! Reactivate DVNLSD in its original form (passed as argument) |
---|
71 | ! to produce (v25) |
---|
72 | ! Reactivate DVNORM in its original form (as a function) (v26) |
---|
73 | ! Reactivate DDOT in its original form (as a function) (v27) |
---|
74 | ! Reactivate IDAMAX in its original form (as a function) (v28) |
---|
75 | ! Reactivate IXSAV and IUMACH in their original form (as |
---|
76 | ! functions) to produce dvode_f90_m29.f90 |
---|
77 | ! Convert new PRINT statements to (terminal) XERRDV error |
---|
78 | ! messages |
---|
79 | ! Debug INDEX = 3 changes to produce dvode_f90_m29.f90 |
---|
80 | ! (test program = check3.f90) |
---|
81 | ! ST 06/23/04 |
---|
82 | ! Change name of DYINDY to DVINDY_CORE and DYINDY_USER to |
---|
83 | ! DVINDY to produce dvode_f90_m31.f90 |
---|
84 | ! ST 06/29/04 |
---|
85 | ! Add routine SET_IAJA to calculate sparse pointer arrays |
---|
86 | ! to produce dvode_f90_m32.f90 |
---|
87 | ! ST 07/02/04 |
---|
88 | ! Rewrite SET_OPTS to produce dvode_f90_m34.f90 |
---|
89 | ! Test various input options in demo34.f90 |
---|
90 | ! GB 07/05/04 |
---|
91 | ! Change AE/RE options to ABSERR/RELERR |
---|
92 | ! ST 07/18/04 |
---|
93 | ! Finish first stab at implementing MA28 |
---|
94 | ! ST 07/26/04 |
---|
95 | ! Finish second stab at implementing MA28 and MOSS |
---|
96 | ! ST 07/27/04 |
---|
97 | ! Finish third stab at implementing MA28 and MOSS |
---|
98 | ! ST 07/28/04 |
---|
99 | ! Test sparse option with the column humidification problem |
---|
100 | ! ST 07/29/04 |
---|
101 | ! Adapt LCHECK and LROOTS subroutines from LSODAR and add |
---|
102 | ! to DVODE_F90 |
---|
103 | ! ST 07/31/04 |
---|
104 | ! Make JAC and GFUN optional; the VODE_F90 interface calls |
---|
105 | ! DVODE in one of four ways depending on presence of |
---|
106 | ! JAC and/or GFUN |
---|
107 | ! Error if SET_OPTS not called before DVODE_F90 called |
---|
108 | ! for the first time |
---|
109 | ! ST 07/31/04 |
---|
110 | ! First stab at root finding |
---|
111 | ! ST 08/02/04 |
---|
112 | ! Finish implementation of LSODAR root finding and adapt |
---|
113 | ! LSODAR demo problems for vode_f90 solution |
---|
114 | ! ST 08/05/04 |
---|
115 | ! Implement temporary changes for optional enforcement of |
---|
116 | ! nonnegativity constraints on the solution |
---|
117 | ! ST 08/06/04 |
---|
118 | ! Replace some labelled DO's and some loops |
---|
119 | ! Modify calls to DVODE_F90 in the test programs and |
---|
120 | ! and verify they work correctly |
---|
121 | ! First cut at printing warning message when |y| < abserr |
---|
122 | ! ST 08/07/04 |
---|
123 | ! Implement nonnegativity option in SET_OPTS and remove |
---|
124 | ! temporary coding from DVODE_F90 |
---|
125 | ! ST 08/08/04 |
---|
126 | ! Remove temporary subroutine DVSTEPS (copy of DVSTEP for |
---|
127 | ! sparse solutions) |
---|
128 | ! Remove dummy PSOL from calls lists for DVSTEP, DVNLSD, |
---|
129 | ! and DVNLSS |
---|
130 | ! ST 08/08/04 |
---|
131 | ! Add short summary of typical OPTIONS settings |
---|
132 | ! Run source thru a spell checker |
---|
133 | ! Take another whack at the documentation prologue for DVODE_F90 |
---|
134 | ! ST 08/11/04 |
---|
135 | ! Solve Robertson problem with nonnegativity, dense and sparse tests |
---|
136 | ! Change how sparse pointers arrays determined via derivative |
---|
137 | ! calls in DVPREPS to be the same as elsewhere |
---|
138 | ! Add easy to use version of SET_OPTS named mortal_opts |
---|
139 | ! Take another whack at the documentation prologue for DVODE_F90 |
---|
140 | ! ST 08/12/04 |
---|
141 | ! Add argument Called_From_Where to CHECK_STAT to indicate where |
---|
142 | ! a storage allocation/deallocation occurred |
---|
143 | ! Add subroutine RELEASE_ARRAYS which may be called to deallocate |
---|
144 | ! the arrays allocated by DVODE_F90 and to determine how much |
---|
145 | ! storage was used |
---|
146 | ! ST 08/13/04 |
---|
147 | ! With the nonnegativity option, project both y and y' |
---|
148 | ! Whack on documentation prologues |
---|
149 | ! Temporary subroutine CHECK_MESSAGES to write all error messages |
---|
150 | ! Renumber error messages |
---|
151 | ! ST 08/16/04 |
---|
152 | ! Cleaner stab at nonnegativity |
---|
153 | ! Temporarily change DVINDY/DVINDY_CORE not to enforce negativity |
---|
154 | ! ST 08/17/04 |
---|
155 | ! Add DVINDY_BNDS for use by the user callable DVINDY to enforce |
---|
156 | ! nonnegativity |
---|
157 | ! Add INTENT attribute to all subroutine and function arguments |
---|
158 | ! ST 08/18/04 |
---|
159 | ! Reorganize type declarations |
---|
160 | ! Make cosmetic header changes |
---|
161 | ! Eliminate NMES from XERRDV and change name to XERRDV |
---|
162 | ! ST 09/05/04 |
---|
163 | ! Stopped being stupid and got nonnegativity to work |
---|
164 | ! ST 09/07/04 |
---|
165 | ! Arbitrary bounds enforcement |
---|
166 | ! ST 10/26/04 |
---|
167 | ! Get rid of some compiler warning messages about tests of equality |
---|
168 | ! ST 11/03/04 |
---|
169 | ! Fix an problem in DVROOTS involving JROOT |
---|
170 | ! ST 11/11/04 |
---|
171 | ! Remove mortal_opts function |
---|
172 | ! ST 12/25/04-12/28/04 |
---|
173 | ! Implement HSL MA48 |
---|
174 | ! ST 01/05/05 |
---|
175 | ! Separate MA28 and MA48 versions |
---|
176 | ! ST 01/09/05 |
---|
177 | ! MA28 Hollerith formats to strings |
---|
178 | ! MA28 lower case |
---|
179 | ! 0 default for lp/mp in MA28 |
---|
180 | ! ST 01/11/05 |
---|
181 | ! Single precision version of MA28 |
---|
182 | ! Save TSAVE in blocks G,H in DVODE |
---|
183 | ! Change DOUBLE PRECISION to REAL(KIND=WP) |
---|
184 | ! Single precision version SVODE_F90 of DVODE_F90 |
---|
185 | ! D* to E* in SVODE_F90, *=0,...,9,-,+ |
---|
186 | ! Some D's replaced by d's to make global replacements possible |
---|
187 | ! D to S in BLAS routines and rest of SVODE_F90 |
---|
188 | ! ST 01/11/05 |
---|
189 | ! Change definition of UMAX in single precision version |
---|
190 | ! ST 02/09/05 |
---|
191 | ! Reorganize documentation prologue |
---|
192 | ! ST 03/30/05 |
---|
193 | ! Implement Alan's fix for root too close to X2 in root finder |
---|
194 | ! ST 05/11/05 |
---|
195 | ! Implement Alan's fix for testing for equality of T in |
---|
196 | ! DVINDY_CORE and DVINDY_BNDS |
---|
197 | ! Implement Alan's fix for nearby zeros in DVCHECK |
---|
198 | ! ST 05/14/05 |
---|
199 | ! Change distribution file to constitute only one F90 module |
---|
200 | ! Miscellaneous cosmetic changes |
---|
201 | ! Replace several decimal values for numbers by named variables |
---|
202 | ! Delete unused LINPACK function DNRM2 |
---|
203 | ! ST 05/15/05 |
---|
204 | ! Determine the working precision and define UMAX for MA28 |
---|
205 | ! accordingly in SET_OPTS |
---|
206 | ! Miscellaneous cosmetic changes |
---|
207 | ! Convert case in MA28 |
---|
208 | ! Modify single precision demo programs to call DVODE |
---|
209 | ! than SVODE |
---|
210 | ! ST 05/16/05 |
---|
211 | ! Define arithmetic constants using _WP extension |
---|
212 | ! ST 06/03/05 |
---|
213 | ! Change name of NULL to MYNULL in MA28 routines |
---|
214 | ! Delete unnecessary commented out statements |
---|
215 | ! ST 06/04/05 |
---|
216 | ! Remove ACOR, SAVF, EWT from the RWORK array |
---|
217 | ! Eliminate LACOR, LSAVF, LEWT pointers |
---|
218 | ! ST 06/05/05 |
---|
219 | ! Remove WM from the RWORK array |
---|
220 | ! Use WM1, WM2 instead of WM(1), WM(2) |
---|
221 | ! ST 06/06/05 |
---|
222 | ! Make changes necessary to allow the maximum order to be |
---|
223 | ! reduced at output points (save YH, WM and restore) |
---|
224 | ! ST 06/07/05 |
---|
225 | ! Make cosmetic changes |
---|
226 | ! ST 06/08/05 |
---|
227 | ! Make cosmetic changes |
---|
228 | ! Add directions for building LAPACK-based and MA48-based |
---|
229 | ! versions |
---|
230 | ! ST 06/11/05 |
---|
231 | ! Standardize declaration and polish with nag |
---|
232 | ! Cosmetic changes |
---|
233 | ! ST 06/12/05 |
---|
234 | ! Cosmetic changes |
---|
235 | ! ST 06/13/05 |
---|
236 | ! Replace USE_LINPACK flag by USE_LAPACK flag |
---|
237 | ! Remove check on sizes of ISTAT and RSTAT arrays in GET_STATS |
---|
238 | ! Add explicit declarations of public and private subroutines |
---|
239 | ! and functions |
---|
240 | ! Add the user callable subroutines to the generic interfaces |
---|
241 | ! block |
---|
242 | ! ST 06/14/05 |
---|
243 | ! Cosmetic changes |
---|
244 | ! ST 07/21/05 |
---|
245 | ! Implement option to increase the elbow room in the MA28 |
---|
246 | ! work arrays |
---|
247 | ! Implement option to invoke MC19 sparse scaling of numerical |
---|
248 | ! Jacobians |
---|
249 | ! Clean up the 2d diurnal kinetics program |
---|
250 | ! ST 07/25/05 |
---|
251 | ! Implement MA28_EPS threshold option for numerical singularity |
---|
252 | ! ST 07/26/05 |
---|
253 | ! Implement MA28_MESSAGES option to control MA28 printing |
---|
254 | ! ST 07/30/05 |
---|
255 | ! Implement sparsity recalculation if a structurally singular |
---|
256 | ! matrix is encountered |
---|
257 | ! ST 07/31/05 |
---|
258 | ! Implement MA28_RPS option to force calculation of a new pivot |
---|
259 | ! sequence if MA28BD encounters a singular matrix |
---|
260 | ! ST 08/02/05 |
---|
261 | ! Add SET_NORMAL_OPTS for normal usage |
---|
262 | ! Add SET_OPTS_2 for changing HMAX, HMIN, and MXSTEP |
---|
263 | ! ST 08/03/05 |
---|
264 | ! Change how swag storage increment for sparse Jacobians determined |
---|
265 | ! Change length of ISTATS to 31 |
---|
266 | ! Change sparse statistics available in GET_STATS |
---|
267 | ! ST 08/10/05 |
---|
268 | ! Add SUB_DIAGONALS and SUP_DIAGONALS option for banded systems |
---|
269 | ! Add BGROUP to compute sparse column grouping for banded |
---|
270 | ! systems with known diagonals and verify it's results |
---|
271 | ! match those of DGROUP |
---|
272 | ! ST 08/11/05 |
---|
273 | ! Add subroutine BANDED_IAJA to compute the sparse matrix |
---|
274 | ! descriptor arrays for a banded matrix with known |
---|
275 | ! diagonals |
---|
276 | ! Make miscellaneous cosmetic changes |
---|
277 | ! ST 08/12/05 |
---|
278 | ! One at a time column version of BANDED_IAJA |
---|
279 | ! Modify DVJAC to handle banded systems using diagonal information |
---|
280 | ! ST 08/16/05 |
---|
281 | ! Work on documentation for SET_OPTS |
---|
282 | ! ST 08/17/05 |
---|
283 | ! Use DTEMP rather than SAVF in DVPREPS |
---|
284 | ! ST 08/18/05 |
---|
285 | ! Add CONSTANT_JACOBIAN option |
---|
286 | ! ST 08/23/05 |
---|
287 | ! Add SET_INTERMEDIATE_OPTS and work on the documentation for each |
---|
288 | ! of SET_NORMAL_OPTS, SET_INTERMEDIATE_OPTS, and SET_OPTS |
---|
289 | ! ST 08/24/05 |
---|
290 | ! Add warning if default error tolerances used |
---|
291 | ! Work on OPTs documentation |
---|
292 | ! ST 08/25/05 |
---|
293 | ! Make miscellaneous cosmetic changes |
---|
294 | ! ST 08/28/05 |
---|
295 | ! Work on the MA48 based sparse solution option |
---|
296 | ! ST 08/29/05 |
---|
297 | ! Fixes in the MA48 version |
---|
298 | ! ST 09/05/05 |
---|
299 | ! Put back the IMPLICIT NONE statements that nag tools deleted |
---|
300 | ! ST 09/06/05 |
---|
301 | ! Do not allow default error tolerances to be used |
---|
302 | ! ST 09/08/05 |
---|
303 | ! Add the USE_FAST_FACTOR flag in MA48 version |
---|
304 | ! ST 09/11/05 |
---|
305 | ! Add debug prints |
---|
306 | ! ST 09/14/05 |
---|
307 | ! Delete the first two slots in the WM Jacobian array |
---|
308 | ! ST 09/18/05 |
---|
309 | ! Incorporate option to use JACSP for sparse Jacobians |
---|
310 | ! ST 09-19-05 |
---|
311 | ! Change name of DSM to DVDSM |
---|
312 | ! Do not allow NEQ to be reduced |
---|
313 | ! Add flags for consecutive error test failures and for consecutive |
---|
314 | ! corrector failures. |
---|
315 | ! ST 09-20-05 |
---|
316 | ! Modify JACSP to produce JACSPDV |
---|
317 | ! Incorporate option to use JACSPDV for dense Jacobians |
---|
318 | ! Incorporate option to use JACSPDV for banded Jacobians |
---|
319 | ! Incorporate option to use JACSPDV for sparse Jacobians |
---|
320 | ! ST 09-21-05 |
---|
321 | ! Supply YSCALE to JACSPDV |
---|
322 | ! ST 10-04-05 |
---|
323 | ! Make a few changes to introductory comments |
---|
324 | ! ST 12-05 |
---|
325 | ! Add subroutine interfaces |
---|
326 | ! Change some MA28 work arrays to two-dimensional and reference |
---|
327 | ! differently to satisfy the Salford ftn95 compiler |
---|
328 | ! Modify demo programs to make Salford happy |
---|
329 | ! ST 01-01-08 |
---|
330 | ! Fixed bug found by Richard Cox (restore NZ when sparse |
---|
331 | ! analytic Jacobian used) |
---|
332 | ! End DVODE_F90 Conversion Change Record |
---|
333 | !_______________________________________________________________________ |
---|
334 | ! f77 REVISION HISTORY(YYYYMMDD) |
---|
335 | ! 19890615 Date Written. Initial release. |
---|
336 | ! 19890922 Added interrupt/restart ability, minor changes throughout. |
---|
337 | ! 19910228 Minor revisions in line format, prologue, etc. |
---|
338 | ! 19920227 Modifications by D. Pang: |
---|
339 | ! (1) Applied subgennam to get generic intrinsic names. |
---|
340 | ! (2) Changed intrinsic names to generic in comments. |
---|
341 | ! (3) Added *DECK lines before each routine. |
---|
342 | ! 19920721 Names of routines and labelled common blocks changed, so as |
---|
343 | ! to be unique in combined single/real(wp) code (ACH) |
---|
344 | ! 19920722 Minor revisions to prologue (ACH). |
---|
345 | ! 19920831 Conversion to real(wp) done (ACH). |
---|
346 | ! 19921106 Fixed minor bug: ETAQ,ETAQM1 in DVSTEP SAVE statement (ACH) |
---|
347 | ! 19921118 Changed LUNSAV/MFLGSV to IXSAV(ACH). |
---|
348 | ! 19941222 Removed MF overwrite; attached sign to H in est. second |
---|
349 | ! deriv. in DVHIN; misc. comment changes throughout (ACH). |
---|
350 | ! 19970515 Minor corrections to comments in prologue, DVJAC(ACH). |
---|
351 | ! 19981111 Corrected Block B by adding final line, GOTO 200 (ACH). |
---|
352 | ! 20020430 Various upgrades (ACH): Use ODEPACK error handler package. |
---|
353 | ! Replaced D1MACH by DUMACH. Various changes to main |
---|
354 | ! prologue and other routine prologues. |
---|