Commit Graph

10194 Commits

Author SHA1 Message Date
Bryan Weber
09faa1e438 Refactor setter and getter templates for units
* To allow setting properties on the upstream classes, __setattr__ is
  implemented and checks whether the attribute is defined on this
  class. This requires setting the phase instance directly into the
  __dict__ attribute to avoid a recursion error.
* Class inheritance is not used here because it is not easy to set
  attributes on the super class. By design, super() does not allow
  setting properties, only getting. Furthermore, since the base
  PureFluid class is defined in Cython, the attributes of that class
  cannot be set by subclasses at all, again by design.
* The PureFluid class implemented here does not inherit from the
  Solution class implemented here because eventually this Solution class
  will include methods and properties related to kinetics and transport,
  which are not implemented for PureFluid. The base PureFluid class is a
  subclass of ThermoPhase only, whereas the base Solution class is a
  subclass of ThermoPhase, Kinetics, and Transport.
* To reflect the distinction between Solution and ThermoPhase, the
  template variables are renamed.
* Several methods of the PureFluid are getters only, despite having
  three properties. These attributes are fixed here. TPQ is the only
  three-property attribute with a setter.
* Setter methods now raise a CanteraError if the unit conversion to base
  units fails due to an AttributeError.
2023-04-25 18:14:19 -04:00
Bryan Weber
24e7f0ea74 Refactor PureFluid derived classes as functions
Since the only overridden method was __init__, it makes more sense for
these to be functions than subclasses.
2023-04-25 18:14:19 -04:00
hallaali
f5076248f5 fix tests and update unit examples 2023-04-25 18:14:19 -04:00
hallaali
a299ab7824 Create Python examples with units
These examples use the units module to implement the existing examples,
but demonstrate how alternative units can be used for the input and
output quantities.
2023-04-25 18:14:19 -04:00
hallaali
07e5b82ba1 Create test_units.py 2023-04-25 18:14:19 -04:00
hallaali
7289feaa94 Implement unit conversion file into Cantera
Template file added to Sconscript to autogenerate code in
solution.py.in
2023-04-25 18:14:19 -04:00
Ray Speth
da34f8f618 [Doc] Fix some Doxygen warnings 2023-04-21 18:44:56 -05:00
Ray Speth
248b8172ce [Kinetics] Don't use m_grt as temporary array for other quantities 2023-04-21 18:44:56 -05:00
Ray Speth
80dc64c875 [Kinetics] Consolidate update of rate coefficients and rates of progress 2023-04-21 18:44:56 -05:00
Ray Speth
b5d456545b [Kinetics] Merge GasKinetics into BulkKinetics 2023-04-21 18:44:56 -05:00
Ray Speth
9f0333cfeb [Doc] Clarify use case for Arrhenius::setRateParameters 2023-04-21 18:44:56 -05:00
Ray Speth
13b8e1036a [Transport] Remove unused member variables 2023-04-21 18:44:56 -05:00
Ray Speth
0a0c75b377 [Python] Remove unused "wrapArrhenius" function 2023-04-21 18:44:56 -05:00
Ray Speth
707c569a3d [Kinetics] Deprecate reacting phase not in first position
Standardize on the behavior implemented by the newSolution and
newInterface constructors.
2023-04-21 18:44:56 -05:00
Ray Speth
e82f932119 [Python] Clarify use of unit conversion functions 2023-04-18 09:33:15 -05:00
Ray Speth
8f3b106fdf Update ExtensibleReaction example to model additional methods 2023-04-18 09:33:15 -05:00
Ray Speth
1760a3145f Implement ExtensibleRate.validate 2023-04-18 09:33:15 -05:00
Ray Speth
e053f58e61 [Kinetics] Make Solution object available while adding reactions 2023-04-18 09:33:15 -05:00
Ray Speth
b2120c513b [Delegator] Move handling of Solution wrapper name to ExtensionManager 2023-04-18 09:33:15 -05:00
Ray Speth
7537d15d0f Make functions with signature void(string&, void*) delegatable 2023-04-18 09:33:15 -05:00
Ray Speth
3e07f34f4f Update gitignore 2023-04-18 09:33:15 -05:00
Ray Speth
f1f0895ece [Python] Implement output unit conversions for AnyMap 2023-04-18 09:33:15 -05:00
Ray Speth
d29cd1b5bc [Kinetics] Simplify falloff serialization 2023-04-18 09:33:15 -05:00
Ray Speth
131ac1c421 Distinguish between rate units and units in rate parameterization
These differ specifically in the case of sticking reactions, where the
rate coefficient has units like m^3/kmol/s, depending on the reactant
orders while the sticking coefficient itself is dimensionless.
2023-04-18 09:33:15 -05:00
Ray Speth
20977ef95f [Test] Avoid modifying shared Solution object 2023-04-18 09:33:15 -05:00
Ray Speth
5edba4e473 Add tests for rate coefficient units 2023-04-18 09:33:15 -05:00
Ray Speth
2def1d89b3 Fix setting of Reaction.rate_units 2023-04-18 09:33:15 -05:00
Ray Speth
ee0d7dd3d5 Fix calculateRateCoeffUnits for falloff reactions
The forward rate constants for falloff and chemically activated reactions
already incorporate the third-body dependency, so the units should only
reflect the explicit reactants. This was being compensated for when
setting the units of the high/low pressure rate expressions, so it did
not affect any results.
2023-04-18 09:33:15 -05:00
Ray Speth
b676438d1d Include AnyMap in Python docs 2023-04-18 09:33:15 -05:00
Ray Speth
22ddb168fd [Python] Add basic serialization support for ExtensibleRate 2023-04-18 09:33:15 -05:00
Ray Speth
6de0d02de0 Centralize serialization of ReactionRate 'type' attribute 2023-04-18 09:33:15 -05:00
Ray Speth
0c53011268 [Python] Add more complete handling of UnitStack in ExtensibleRate 2023-04-18 09:33:15 -05:00
Ray Speth
b9cf03faf3 Move undefined units handling into UnitSystem
Handling this centrally simplifies the implementation of user-defined
rate functions
2023-04-18 09:33:15 -05:00
Ray Speth
cbea8f62c3 [Python] Improve access to ExtensibleRate objects
Previously, accessing an ExtensibleRate object from a Reaction object
would create a new wrapper object rather than providing access to the
"original" object that is used by the ReactionRateDelegator, and this
wrapper object would not behave the same as the original object except
for methods that passed through via the Delegator.

Now, we return the underlying object, ensuring consistency. This requires
more complex memory management because the ExtensibleRate/Delegator pair
form a reference cycle that can be attached to other objects either from
the C++ or the Python side.
2023-04-18 09:33:15 -05:00
Ray Speth
ae7b1585f6 Add holdExternalHandle to Delegator 2023-04-18 09:33:15 -05:00
Ray Speth
6c45457d6e [Python] Add unit handling to AnyMap 2023-04-18 09:33:15 -05:00
Ray Speth
c2863ce4be [Python] Add UnitSystem.convert_to / convert_activation_energy_to 2023-04-18 09:33:15 -05:00
Ray Speth
8ff7a71ae8 [Cython] Update function names for AnyMap conversions 2023-04-18 09:33:15 -05:00
Ray Speth
4b88a20d34 [Cython] Retain units info when converting AnyMap to Python 2023-04-18 09:33:15 -05:00
Ray Speth
803f106c37 [Cython] Use built-in declarations for shared_ptr 2023-04-18 09:33:15 -05:00
Ray Speth
6e2a5c0a41 [Equil] Handle factorization errors in initial estimator
Fixes #1473
2023-04-17 17:56:28 -05:00
Ingmar Schoegl
055a530af4 Bump version to 3.0.0a5 2023-04-16 16:29:08 -04:00
Ingmar Schoegl
0c6a566d0b [onedim] Fix order of components
A domain may define extra state entries added after species, where the
appropriate order needs to be maintained.
2023-04-16 16:29:08 -04:00
Ingmar Schoegl
2f98dd402a Fix doxygen copydoc targets 2023-04-16 16:29:08 -04:00
Ingmar Schoegl
a1ca8d0d4d [Python] Use UnstrainedFlow for BurnerFlame 2023-04-14 15:37:13 -04:00
Ingmar Schoegl
ef8c935b2c [oneD] Add unstrained-flow domain 2023-04-14 15:37:13 -04:00
Ingmar Schoegl
708a8bfbba [CI] Force system_highfive on windows-2022 2023-04-14 13:06:45 -04:00
Ingmar Schoegl
bc07e52332 [HDF] Enable native HighFive Boolean 2023-04-14 13:06:45 -04:00
Ingmar Schoegl
4569fcdcd3 [HDF] Fix clash of names with new upstream function
HighFive 2.7.0 introduces a new create_enum_boolean function, which
clashes with an existing local function in Storage.cpp.
2023-04-14 13:06:45 -04:00
Ingmar Schoegl
cffcca7e7b [SCons] Detect HighFive version
Also use system installation by default.
2023-04-14 13:06:45 -04:00