GeneralMath.h
1 /**************************************************************************************
2 Copyright 2015 Applied Research Associates, Inc.
3 Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4 this file except in compliance with the License. You may obtain a copy of the License
5 at:
6 http://www.apache.org/licenses/LICENSE-2.0
7 Unless required by applicable law or agreed to in writing, software distributed under
8 the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
9 CONDITIONS OF ANY KIND, either express or implied. See the License for the
10 specific language governing permissions and limitations under the License.
11 **************************************************************************************/
12 
13 #pragma once
14 #include <vector>
15 
16 #include <biogears/exports.h>
17 #include <biogears/cdm/circuit/SECircuitNode.h>
18 
19 namespace biogears {
20 
21 class SEScalarOsmolality;
22 class SEScalarOsmolarity;
23 class SEScalarTemperature;
24 class SEScalar;
25 class SEScalarAmountPerVolume;
26 class SEScalarPressure;
27 class SEScalarFraction;
28 class SEScalarMassPerVolume;
29 class SEScalarVolume;
30 class SEScalarMass;
31 class SESubstance;
32 class SESubstanceManager;
33 class SELiquidCompartment;
34 class SELiquidSubstanceQuantity;
35 
36 class BIOGEARS_API GeneralMath {
37 public:
38  static void CalculateConcentration(const SEScalarMass& mass, const SEScalarVolume& volume, SEScalarMassPerVolume& concentration, Logger* logger = nullptr);
39  static void CalculateMass(const SEScalarVolume& volume, const SEScalarMassPerVolume& concentration, SEScalarMass& mass, Logger* logger = nullptr);
40  static void CalculateHenrysLawConcentration(const SESubstance& substance, const SEScalarPressure& partialPressure, SEScalarMassPerVolume& concentration, Logger* logger = nullptr);
41  static void CalculatePartialPressureInGas(const SEScalarFraction& volumeFraction, const SEScalarPressure& pressure, SEScalarPressure& partialPressure, Logger* logger = nullptr);
42  static void CalculatePartialPressureInLiquid(const SESubstance& substance, const SEScalarMassPerVolume& concentration, SEScalarPressure& partialPressure, Logger* logger = nullptr);
43  static void CalculateOsmolarity(const SEScalarAmountPerVolume& sodiumMolarity, const SEScalarAmountPerVolume& potassiumMolarity, const SEScalarAmountPerVolume& glucoseMolarity, const SEScalarAmountPerVolume& ureaMolarity, SEScalarOsmolarity& fluidOsmolarity);
44  static void CalculateOsmolality(const SEScalarAmountPerVolume& sodiumMolarity, const SEScalarAmountPerVolume& potassiumMolarity, const SEScalarAmountPerVolume& glucoseMolarity, const SEScalarAmountPerVolume& ureaMolarity, const SEScalar& specificGravity, SEScalarOsmolality& fluidOsmolality);
45  static void CalculateSpecificGravity(const SEScalarMass& mass, const SEScalarVolume& volume, SEScalar& specificGravity, Logger* logger = nullptr);
46  static void CalculateWaterDensity(const SEScalarTemperature& temp, SEScalarMassPerVolume& density);
47 
48  static void Combinations(::std::vector<int> maxValues, ::std::vector<::std::vector<int>>& permutations);
49  static double AntoineEquation(double dTemperature_C);
50  static double LinearInterpolator(double x1, double x2, double y1, double y2, double xPrime);
51  static double PercentDifference(double expected, double calculated);
52  static double PercentTolerance(double expected, double calculated, double epsilon = 1e-20);
53  static double ResistanceFunction(double dbase, double dmin, double dmax, double dx);
54  static double LogisticFunction(double a, double x50, double k, double x);
55  static double CalculateNernstPotential(SELiquidCompartment& extra, SELiquidCompartment& intra, SESubstance* ion, double& coreTemp_K);
56  static double HillActivation(double x, double n, double h);
57  static double HillInhibition(double x, double n, double h);
58  static double VectorSum(std::vector<double>& vec);
59 };
60 }
Definition: SEScalarOsmolarity.h:34
Definition: SEScalar.h:33
Definition: SEScalarTemperature.h:36
Definition: SEScalarOsmolality.h:34
Definition: GeneralMath.h:36
Definition: SEScalarMass.h:38
Definition: Logger.h:75
Definition: SELiquidCompartment.h:27
Definition: SEScalarAmountPerVolume.h:37
Definition: SEScalarFraction.h:18
Definition: SEScalarPressure.h:37
Definition: SEScalarVolume.h:37
Definition: SESubstance.h:49
Definition: SEScalarMassPerVolume.h:46
Definition: SEElectricalCircuit.h:18