All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- New integrators
- feuler.f90
- New C-I tests
- ros_minver
- ros_upcase
- Added scripts to run C-I tests manually (for development/debugging)
- Brought updates for GEOS-Chem into the main line of development
- Added #MINVERSION switch to force KPP to stop unless a minimum version is used
- Added #UPPERCASEF90 to generate F90 code with the .F90 suffixes
- Removed EQUIVALENCE statements from F90-generated code; VAR and FIX now point to C witihin integrators. This is to ensure thread-safe operation when using KPP-generated code in an OpenMP parallel environment.
- Bug fixes:
- Make sure to inline parameter "sp" into the _Global.F90 file when the "#DOUBLE off" option is used.
- Code updates
- Rewrote code to remove compiler warnings
- Fortran-90 makefiles now use GFORTRAN as the default compiler option
- Added ReadTheDocs output
- Updated top-of-file comment headers to point to the KPP Github site and to acknowledge new authors
- Routine Fun() now returns optional arguments Aout and Vdotout
- Updates for building on MacOS
- Reduce size of MAX_EQN and MAX_SPECIES to get KPP to run within 65532 kb of stack memory
- Brought updates from the MECCA branch into the main line of
development:
- new integrators: beuler.f90, rosenbrock_mz.f90, rosenbrock_posdef.f90, rosenbrock_posdef_h211b_qssa.f90
- several memory sizes (MAX_EQN, ...) increased to allow large chemical mechanisms
- new Makefile target: list
- LaTeX User Manual added
- Now use ICNTRL(15) to decide whether or not to toggle calling the Update_SUN, Update_RCONST, and Update_PHOTO routines from within the integrator
- Workaround for F90 derived-type objects in inlined code (i.e. properly parse State_Het%xArea, etc).
- Write global variables NUMDEN, MW, SR_MW, SR_TEMP, TEMP_OVER_K300, K300_OVER_TEMP to gckpp_Global.F90
- Documentation for ReadTheDocs (in the docs folder)
- Github issue templates
- MAX_INLINE (max # of inlined code lines to read) is now 200000
- Version number in gdata.h is now 2.3.2
- README.md now contains the ReadTheDocs badge
- README.md now points to kpp.readthedocs.io for documentation
- Comment out the Update_Sun() functions in update_sun.F90, update_sun.F
- Default rate law functions are no longer written to gckpp_Rates.F90
- Documentation for ReadTheDocs (in the docs folder)
- Github issue templates
- Version number in gdata.h is now 2.3.1
- README.md now contains the ReadTheDocs badge
- README.md now points to kpp.readthedocs.io for documentation
- Added README.md for the GC_updates branch
- Added MIT license for the GC_updates branch
- Add Aout argument to return reaction rates from SUBROUTINE Fun
- Rename KPP/kpp_2.2.3_01 folder to KPP/kpp-code
- Now write gckpp_Model.F90 and gckpp_Precision.F90 from gen.c
- Do not write file creation & time to KPP-generated files
- Now create Fortran-90 source code files with *.F90 instead of *.f90
- Remove calls to UPDATE_SUN and UPDATE_RCONST from all *.f90 integrators
- Increase MAX_INLINE from 20000 to 50000
- Add MIT license files and update README.md accordingly
- Create README.md for main branch
- Set FLEX_LIB_DIR using FLEX_HOME env variable if it is defined
- Added an exponential integrator
- Added array to *_Monitor for family names (FAM_NAMES) string vector
- Added functionality for Prod/Loss families using FAMILY token
- Add scripts necessary to build a new mechanism for GEOS-Chem
- Completed the prod/loss option (token: #FLUX [on/off])
- Added OMP THREADPRIVATE to LinearAlgebra.F90
- Added rosenbrock_split.def integrator definition
- Added OMPThreadPrivate function for F77
- Added declaration of "A" in *_Function.F90
- Added OMPThreadPrivate Functionality to F90 output
- Completed the split-form Function for f90
- Increase maximum number of equations
- Increase MAX_FAMILIES parameter from 50 to 300
- Extend equation length limit to 200 characters.
- Also changed the species name for a family to the family name itself.
- Modified Families to minimize the number of additional species created
- Rename and change indexing convention
- Remove unnecessary files
- Remove files for GEOS-Chem from top-level directory; these are now in the GEOS-Chem source code
- Delete the old name directory
- Fix to add coefficients to *_Monitor.f90
- Fixed a pad processing of terms leading to LOSS fam also generating PROD terms.
- Fix input argument to ComputeFamilies() from VAR to V - MSL
- Parameter NFAM was not defined. This is fixed. (MSL)
- Added fix to camculate NET rather than GROSS prod/loss families - MSL
- Add fix to calculate NET rather than GROSS prod/loss families - MSL
- Re-fixed the equivalence statement needed for GEOS-Chem to work. MSL
- Corrected miniterpretation of the split-form Function for f90.
- several int/*.f90: TABs converted to spaces
- several dvode files converted to unix file format
- kpp/int/beuler.f90:
- factor 101 added to Hstart
- description of the error numbers IERR added
- kpp/int/rosenbrock_posdef_h211b_qssa.f90: USE KPP_ROOT_Function, ONLY: Fun_Split
- several limits increased:
- src/gdata.h: #define MAX_K 1000
- src/scan.l: char crtToken[1000]; char nextToken[1000]; char crtFile[1000]; char crt_rate[1000];
- src/scan.y: %union{char str[1000];};
- new integrator beuler.f90 (based on sdirk.f90)
- src/gen.c: bug fix in GenerateParamHeader(): char name[MAX_SPNAME] instead of name[20]
- kpp.el updated: #REPLACE, #ENDREPLACE, uncertainty of rate coefficient
- Makefile.defs.Linux: compiler option -Wno-implicit-function-declaration
- upgrade to the official KPP version 2.2.3
- rosenbrock_mz.f90-orig deleted
- new function StoichNum to get stoichiometric numbers:
- src/gen.c: new function GenerateFun_Split()
- kp4.sh: GenerateStoichNum added to KPP_SUBROUTINE_LIST
- src/code_f90.c: Maximum number of continuation lines MAX_NO_OF_LINES increased again, now to 250
- src/gdata.h: info adjusted
- src/gen.c: "USE kpp_Parameters" added to SUBROUTINE Initialize to allow species-specific code in #INLINE F90_INIT
- several int/*.f90: TABs converted to spaces
- int/rosenbrock_mz.f90: loop fusion according to BULL
- new file Makefile.m
Changes by Domenico Taraborrelli:
- option for faster chemistry calculation by alternative time stepping
(integrator rosenbrock_posdef_h211b_qssa)
- modified files:
- src/gen.c: new function GenerateFun_Split
- kp4.sh: GenerateFun_Split added to KPP_SUBROUTINE_LIST
- new integrator files: rosenbrock_posdef_h211b_qssa.def, rosenbrock_posdef_h211b_qssa.f90
- modified files:
- src/gdata.h: several limits increased to allow larger mechanisms: #define MAX_EQN 11000 #define MAX_SPECIES 3500 #define MAX_EQNTAG 32 #define MAX_K 300
- src/gen.c:
- crow and diag deleted because they are not used
- Fortran90 double precision changed to SELECTED_REAL_KIND(12,307)
- src/Makefile: PHONY target list added to list the configuration
- src/scan.h: MAX_INLINE increased to 100000
- src/scan.l: several limits increased to allow larger mechanisms: char crtToken[300]; char nextToken[300]; char crtFile[300]; char crt_rate[300];
- src/scan.y:
- "char" increased to 300 (must be the same as MAX_K)
- util/sutil.f90: TABs converted to spaces
- Makefile, Makefile.defs, Makefile.defs.*, src/Makefile: changes to allow compilation on different machines
- src/code_matlab.c: "#include <time.h>" added because it is necessary for time_t, see: http://en.wikipedia.org/wiki/Time_t
- src/scanutil.c:
- "#include <malloc.h>" removed because it comes from <stdlib.h> (this had caused a problem on MAC-OSX)
- src/scan.y:
- "#include <malloc.h>" removed because it comes from <stdlib.h> (this had caused a problem on MAC-OSX)
- using GNU Bison 2.3 now instead of 2.1
- src/code_f90.c and src/gdata.h: changes in MAX_EQNTAG etc. to avoid problems with long equation tags
- kpp_lsode.f90, kpp_seulex.f90, rosenbrock.f90, rosenbrock_posdef.f90, runge_kutta.f90, and sdirk.f90: IERR_NAMES (for error messages) adapted to correct syntax
- src/code_f90.c:
- Maximum number of continuation lines increased to 100. If MAX_NO_OF_LINES is too small, kpp may split lines incorrectly.
- code_f90.c: added FlushBuf() to F90_DeclareData (otherwise MAX_OUTBUF would have to be very large for large reaction mechanisms)
- gen.c: The declaration of RTOLS was deleted because it is not needed by the integrators. If the driver programs need it, they can define it themselves.
- Makefile: new option maintainer-clean is now consistent with src/Makefile
- src/code_f90.c: string length of F90_types and in subroutine F90_DeclareData increased from 12 to 32 to avoid problems with long species names and long equation tags
- It looks like the model is hypersensitive to negative concentrations; many times when small negative concentrations are produced the entire future trajectory is put in jeopardy. In the new integrator rosenbrock_posdef.f90, this is fixed by changing "CALL WCOPY(N,Ynew,1,Y,1)" to "Y = MAX(Ynew,ZERO)".
- rosenbrock_soa deleted
- util/sutil.c: new subroutine KppDecompCmplxR
- new files: examples/cell.kpp, examples/saprc2006.kpp, int/runge_kutta.c, and int/sdirk.c
- int/kpp_lsode.f90: like all other integrators, kpp_lsode now also returns IERR==1 after successful completion
- src/Makefile, scan.l, scan.y: yacc replaced by bison, implementing the bug fixes suggested by Jason Lander
- models/CMAQ added
- changes in int/runge_kutta_adj.f90 and int/runge_kutta_tlm.f90
- util/blas.c: new subroutines Set2Zero and WADD
- util/blas.f90: new subroutines WGEFA and WGESL
- util/sutil.f90: new subroutines KppDecompCmplxR, KppSolveCmplxR, and KppSolveTRCmplxR
- new integrators kpp_sdirk4, rosenbrock_soa, runge_kutta, and sdirk
- integrators rosenbrock, rosenbrock_tlm, and rosenbrock_adj: completely revised
- new kpp command #DECLARE [SYMBOL|VALUE]
- util/blas.f90: new subroutine WADD
- util/sutil.f90: new subroutines KppSolveTRIndirect and KppSolveTRCmplx
- several files examples/* added
- changes in drv/general_adj.f90 and drv/general_tlm.f90
- examples/mimi* deleted