KPP revision history
Only the major new features are listed here. For a detailed description of the changes, read CHANGELOG.md.
KPP 3.3.1
Replaced calls to BLAS functions in F90 integrators with core F90 array operations
Migrated C-I tests from Microsoft Azure Dev pipelines to GitHub Actions
Added new C-I tests:
F90_rkadj,F90_sd4,F90_sdtlmFixed a compiliation issue that prevented
KPP_ROOT_Stochiom.F90from being compiled when#STOCHIOM ONand#HESSIAN OFFare used
KPP 3.3.0
Added the rosenbrock_h211b_qssa integrator as described in Dreger et al. [2025], along with the corresponding C-I tests.
KPP 3.2.1
Updated the Forward Euler integrator to return the
Texitvalue via theRSTATUS(1)argumentFixed parsing of
INITVALUESto allow Fortran double-precision exponentsAdded carbon gases mechanism in
models/carbonfolderAdded the C-I test
F90_feulerto validate the forward Euler integrator
KPP 3.2.0
Added new inline key
F90_RCONST_USEso that F90USEstatements can be inlined into theUpdate_RCONSTandUPDATE_PHOTOroutinesUpdated code in
src/gen.cto generate theUPDATE_RCONSTroutine with an optional argumentYUpdated C-I tests to print the compiler versions that are used
Updated
int/sdirk.f90to a newer versionRemoved
int/beuler.f90; Users can select Backward Euler withsdirkintegrator andICNTRL(3)=6Added MacOS architecture-specific compilation flags to the build sequence
KPP 3.1.1
Use newer Python packages to build ReadTheDocs documentation (see
docs/requirements.txt)Increased
MAX_NO_OF_LINESandMAX_EQNin order to parse the entire MCM mechanismNow only add the extra Aout argument to Fun and Fun_Split for target language
Fortran90. This fixes a Matlab build error.
KPP 3.1.0
Added
#AUTOREDUCEto the list of KPP commands in the ReadTheDocs documentatonAdded
examples/mcmfolder with minimal example for the Master Chemical MechanismAdded C-I test for MCM, based on the minimal example
Removed obsolete input options from the code and documentation
KPP 3.0.2
Added a
.readthedocs.yamlfile 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
#STOICMAToption by using dynamically-sized variablesEqnNrandMaxNrrather than static variablesMAX_EQNandMAX_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
atomsfile is now calledatoms.kpp. Thus, you have to change#INCLUDE atomsto#INCLUDE atoms.kppin your KPP input file.The utility functions
ARR,ARR2,k_3rdandk_arrhave 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 thetempvariable 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 thelsodeintegrator, you now have to useICNTRL(10)instead. The index 5 in theICNTRLarray is now used consistently for the maximum number of Newton iterations in all integrators.The dummy integrator
nonedoes not exist anymore. Thus, commands such as#INTEGRATOR noneshould be removed.
Updated the search for the flex library in
src/Makefile.defs. The build process will look for the flex: library file (eitherlibfl.soorlibfl.afile 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_COMPLEXis 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.cto 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.6.0
Added the rosenbrock_autoreduce integrator Lin et al. [2023].
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
AoutandVdotoutto subroutine Fun().Replaced Fortran
EQUIVALENCEstatements 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_PHOTOroutines 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.mdfor the GC_updates branch.Added MIT license for the GC_updates branch.
Add
Aoutargument to return reaction rates fromSUBROUTINE Fun.Rename
KPP/kpp_2.2.3_01directory toKPP/kpp-code.Now write
gckpp_Model.F90andgckpp_Precision.F90fromgen.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
*.F90instead 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
*.f90integrators. (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_INLINEfrom 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.mdaccordinglyCreate
README.mdfor main branchSet
FLEX_LIB_DIRusingFLEX_HOMEenv variable if it is defined.Added an exponential integrator.
Added array to
*_Monitorfor 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 THREADPRIVATEto LinearAlgebra.F90Added
rosenbrock_split.defintegrator definitionAdded
OMPThreadPrivatefunction for F77.Added declaration of
Ain ROOT_FunctionAdded
OMP THREADPRIVATEFunctionality to F90 output.Completed the split-form Function for F90.
Increase maximum number of equations.
Increase
MAX_FAMILIESparameter 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_iupacis 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
Rang3was 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].