KPP revision history¶
Only the major new features are listed here. For a detailed description of the changes, read CHANGELOG.md.
KPP 3.0.2¶
Added a
.readthedocs.yaml
file to the root folder to explicitly state the parameters controlling the documentation build. This will “future-proof” the KPP documentation against issues caused by software updates on the ReadTheDocs platform.
KPP 3.0.1¶
Fixed a segmentation fault that occurred when using the
#STOICMAT
option by using dynamically-sized variablesEqnNr
andMaxNr
rather than static variablesMAX_EQN
andMAX_SPECIES
.
KPP 3.0.0¶
Attention
When you are upgrading from an older KPP version to KPP 3.0.0 or later versions, a few minor changes in your code may be necessary:
The
atoms
file is now calledatoms.kpp
. Thus, you have to change#INCLUDE atoms
to#INCLUDE atoms.kpp
in your KPP input file.The utility functions
ARR
,ARR2
,k_3rd
andk_arr
have been replaced by the new set of the consistent functionsARR_abc
,ARR_ab
,ARR_ac
,k3rd_jpl
,k3rd_jpl_activation
, andk3rd_iupac
. We recommend to upgrade to the new functions, which all use the temperature from thetemp
variable inROOT_Global.f90
. Alternatively, it is possible to copy the old functions into a separate file and make them available via F90_RCONST.If you have been using
ICNTRL(5)
for maximal order in thelsode
integrator, you now have to useICNTRL(10)
instead. The index 5 in theICNTRL
array is now used consistently for the maximum number of Newton iterations in all integrators.The dummy integrator
none
does not exist anymore. Thus, commands such as#INTEGRATOR none
should be removed.
Updated the search for the flex library in
src/Makefile.defs
. The build process will look for the flex: library file (eitherlibfl.so
orlibfl.a
file in several standard locations first. If not found, the build process will look in the path specfiied by environment variableKPP_FLEX_LIB_DIR
.Added content to ReadTheDocs pages and fixed several formatting issues.
Fixed various minor issues in generating C-language code.
Fixed various minor issues in generating Matlab-language code.
C-I tests folders have been renamed for clarity. Also refactored the scripts used to submit C-I tests. Updated the Dockerfile to always request Ubuntu 20.04 and an AMD64 platform, so that the same libraries will always be used when running C-I tests on Azure DevOps.
Fortran type
DOUBLE_COMPLEX
is now replaced byCOMPLEX(kind=dp)
.Fixed incorrect license metadata in
.zenodo.json
, which is used to auto-generate a DOI with each KPP release on Github.Added extra
free()
statements insrc/gen.c
to avoid memory leaks.Fun()
no longer uses Vdotout since it can be retrieved fromVdot
.Fixed a bug in
int/feuler.f90
, where the wrong argument was being passed to routineFun
.
KPP 2.5.0¶
Merged updates from the GEOS-Chem development stream (versions KPP 2.2.4_gc, KPP 2.2.5_gc, KPP 2.3.0_gc, KPP 2.3.1_gc, KPP 2.3.2_gc ) into the mainline KPP development stream. Previously hardwired code has been removed and replaced with code selectable via KPP commands.
Added a new forward-Euler method integrator (
feuler.f90
).Added KPP commands #MINVERSION and #UPPERCASEF90 (along with corresponding continuous integration tests).
Added optional variables
Aout
andVdotout
to subroutine Fun().Replaced Fortran
EQUIVALENCE
statements with thread-safe pointer assignments (Fortran90 only).Converted the KPP user manual to Sphinx/ReadTheDocs format (this now replaces the prior ReadTheDocs documentaton).
Added updates to allow KPP to be built on MacOS X systems.
Added small_strato C-I test that uses the exact same options as is described in Running KPP with an example stratospheric mechanism.
KPP 2.4.0¶
Added new integrators:
beuler.f90
,rosenbrock_mz.f90
,rosenbrock_posdef.f90
,rosenbrock_posdef_h211b_qssa.f90
.Several memory sizes (
MAX_EQN
, …) have been increased to allow large chemical mechanisms.Added new Makefile target:
list
.Added LaTeX User Manual.
Now use
ICNTRL(15)
to decide whether or not to toggle calling theUpdate_SUN
,Update_RCONST
, andUpdate_PHOTO
routines from within the integrator.
KPP 2.3.2_gc¶
NOTE: Contains KPP Modifications specific to GEOS-Chem.
Added workaround for F90 derived-type objects in inlined code (i.e. properly parse
State_Het%xArea
, etc).Updated Github issue templates.
MAX_INLINE
(max # of inlined code lines to read) has been increased to 200000.Commented out the
Update_Sun()
functions inupdate_sun.F90
,update_sun.F
. (NOTE: These have been restored in KPP 2.5.0).Default rate law functions are no longer written to
gckpp_Rates.F90
. (NOTE: These have been restored in KPP 2.5.0).
KPP 2.3.1_gc¶
NOTE: KPP modifications specific to GEOS-Chem.
ALSO NOTE: ReadTheDocs documentation has been updated in KPP 2.5.0 to remove GEOS-Chem specific information.
Added documentation for ReadTheDocs.
Added Github issue templates.
README.md now contains the ReadTheDocs badge.
README.md now points to kpp.readthedocs.io for documentation.
KPP 2.3.0_gc¶
NOTE: Contains KPP modifications specific to GEOS-Chem.
Added
README.md
for the GC_updates branch.Added MIT license for the GC_updates branch.
Add
Aout
argument to return reaction rates fromSUBROUTINE Fun
.Rename
KPP/kpp_2.2.3_01
directory toKPP/kpp-code
.Now write
gckpp_Model.F90
andgckpp_Precision.F90
fromgen.c
.Do not write file creation & time to KPP-generated files (as this will cause Git to interpret each file as a new file to be added).
Now create Fortran-90 source code files with
*.F90
instead of*.f90
. (NOTE: In KPP 2.5.0, this can specified with the #UPPERCASEF90 command.)Remove calls to UPDATE_SUN and UPDATE_RCONST from all
*.f90
integrators. (NOTE: This has been restored in KPP 2.5.0.)
KPP 2.2.5_gc¶
NOTE: Contains KPP modifications specific to GEOS-Chem.
Increase
MAX_INLINE
from 20000 to 50000
KPP 2.2.4_gc¶
NOTE: Contains KPP modifications specific to GEOS-Chem.
Add MIT license files for GC_updates branch and update
README.md
accordinglyCreate
README.md
for main branchSet
FLEX_LIB_DIR
usingFLEX_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 #FAMILIES 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.F90Added
rosenbrock_split.def
integrator definitionAdded
OMPThreadPrivate
function for F77.Added declaration of
A
in ROOT_FunctionAdded
OMP THREADPRIVATE
Functionality to F90 output.Completed the split-form Function for F90.
Increase maximum number of equations.
Increase
MAX_FAMILIES
parameter from 50 to 300Extend 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
Renamed and change indexing convention
Removed unnecessary files
KPP 2.2.3¶
A new function called
k_3rd_iupac
is available, calculating third-order rate coefficients using the formula used by IUPAC [Atkinson et al., 2004].While previous versions of KPP were using yacc (yet another compiler compiler), the current version has been modified to be compatible with the parser generator bison, which is the successor of yacc.
New Runge-Kutta integrators were added:
kpp_dvode.f90
,runge_kutta.f90
,runge_kutta_tlm.f90
,sdirk_adj.f90
,sdirk_tlm.f90
.New Rosebrock method
Rang3
was added.The new KPP command #DECLARE was added (see: #DECLARE).
Several vector and array functions from BLAS (
WCOPY
,WAXPY
, etc.) were replaced by Fortran90 expressions.
KPP 2.1¶
Described by Sandu and Sander [2006].
Matlab is a new target language (see: The Matlab code).
The set of integrators has been extended with a general Rosenbrock integrator, and the corresponding tangent linear and adjoint methods.
The KPP-generated Fortran90 code has a different file structure than the C or Fortran77 output (see: The Fortran90 code).
An automatically generated Makefile facilitates the compilation of the KPP-generated code (see: The Makefile).
Equation tags provide a convenient way to refer to specific chemical reactions (see: #LOOKAT and #MONITOR.
The dummy index allows to test if a certain species occurs in the current chemistry mechanism. (see: #DUMMYINDEX)
Lines starting with
//
are comment lines.
KPP 1.1-f90-alpha12¶
First KPP version with Fortran90 [Sander et al., 2005].