Skip to content

Commit 5dc0a9a

Browse files
ntatum94StevenAWhite
authored andcommitted
Adding skin temperature back in as a physiology request for mean skin temp and updating tuning parameters based on new tests.
1 parent 4576521 commit 5dc0a9a

File tree

6 files changed

+42
-6
lines changed

6 files changed

+42
-6
lines changed

projects/biogears/libBiogears/include/biogears/cdm/system/physiology/SEEnergySystem.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ class BIOGEARS_API SEEnergySystem : public SESystem {
9898
SEScalarMass& GetPotassiumLostToSweat();
9999
double GetPotassiumLostToSweat(const MassUnit& unit) const;
100100

101+
bool HasSkinTemperature() const;
102+
SEScalarTemperature& GetSkinTemperature();
103+
double GetSkinTemperature(const TemperatureUnit& unit) const;
104+
101105
bool HasSkinTemperatureTorso() const;
102106
SEScalarTemperature& GetSkinTemperatureTorso();
103107
double GetSkinTemperatureTorso(const TemperatureUnit& unit) const;
@@ -149,6 +153,7 @@ class BIOGEARS_API SEEnergySystem : public SESystem {
149153
SEScalarFraction* m_FatigueLevel;
150154
SEScalarAmountPerTime* m_LactateProductionRate;
151155
SEScalarMass* m_PotassiumLostToSweat;
156+
SEScalarTemperature* m_SkinTemperature;
152157
SEScalarTemperature* m_SkinTemperatureTorso;
153158
SEScalarTemperature* m_SkinTemperatureHead;
154159
SEScalarTemperature* m_SkinTemperatureLeftArm;

projects/biogears/libBiogears/include/biogears/engine/Systems/Energy.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ class BIOGEARS_API Energy : public SEEnergySystem, public BioGearsSystem {
100100
RunningAverage m_BicarbonateMolarity_mmol_Per_L;
101101
bool m_packOn;
102102
double m_previousWeightPack_kg;
103-
103+
double m_meanSkinTemperature;
104104
// Stateless member variable (Set in SetUp())
105105
double m_dT_s;
106106
SEPatient* m_Patient;
@@ -112,8 +112,6 @@ class BIOGEARS_API Energy : public SEEnergySystem, public BioGearsSystem {
112112
SELiquidSubstanceQuantity* m_SkinPotassium;
113113
//Nodes
114114
SEThermalCircuitNode* m_coreNode;
115-
SEThermalCircuitNode* m_torsoSkinNode;
116-
SEThermalCircuitNode* m_headSkinNode;
117115
std::vector<SEThermalCircuitNode*> m_skinNodes;
118116
//Paths
119117
SEThermalCircuitPath* m_temperatureGroundToCorePath;

projects/biogears/libBiogears/src/cdm/system/physiology/SEEnergySystem.cpp

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ constexpr char idExerciseMeanArterialPressureDelta[] = "ExerciseMeanArterialPres
3434
constexpr char idFatigueLevel[] = "FatigueLevel";
3535
constexpr char idLactateProductionRate[] = "LactateProductionRate";
3636
constexpr char idPotassiumLostToSweat[] = "PotassiumLostToSweat";
37+
constexpr char idSkinTemperature[] = "SkinTemperature";
3738
constexpr char idSkinTemperatureTorso[] = "SkinTemperatureTorso";
3839
constexpr char idSkinTemperatureHead[] = "SkinTemperatureHead";
3940
constexpr char idSkinTemperatureLeftArm[] = "SkinTemperatureLeftArm";
@@ -58,6 +59,7 @@ SEEnergySystem::SEEnergySystem(Logger* logger)
5859
m_FatigueLevel = nullptr;
5960
m_LactateProductionRate = nullptr;
6061
m_PotassiumLostToSweat = nullptr;
62+
m_SkinTemperature = nullptr;
6163
m_SkinTemperatureTorso = nullptr;
6264
m_SkinTemperatureHead = nullptr;
6365
m_SkinTemperatureLeftArm = nullptr;
@@ -91,6 +93,7 @@ void SEEnergySystem::Clear()
9193
SAFE_DELETE(m_FatigueLevel);
9294
SAFE_DELETE(m_LactateProductionRate);
9395
SAFE_DELETE(m_PotassiumLostToSweat);
96+
SAFE_DELETE(m_SkinTemperature);
9497
SAFE_DELETE(m_SkinTemperatureTorso);
9598
SAFE_DELETE(m_SkinTemperatureHead);
9699
SAFE_DELETE(m_SkinTemperatureLeftArm);
@@ -129,6 +132,8 @@ const SEScalar* SEEnergySystem::GetScalar(const std::string& name)
129132
return &GetLactateProductionRate();
130133
if (name == idPotassiumLostToSweat)
131134
return &GetPotassiumLostToSweat();
135+
if (name == idSkinTemperature)
136+
return &GetSkinTemperature();
132137
if (name == idSkinTemperatureTorso)
133138
return &GetSkinTemperatureTorso();
134139
if (name == idSkinTemperatureHead)
@@ -177,6 +182,8 @@ bool SEEnergySystem::Load(const CDM::EnergySystemData& in)
177182
GetLactateProductionRate().Load(in.LactateProductionRate().get());
178183
if (in.PotassiumLostToSweat().present())
179184
GetPotassiumLostToSweat().Load(in.PotassiumLostToSweat().get());
185+
if (in.SkinTemperature().present())
186+
GetSkinTemperature().Load(in.SkinTemperature().get());
180187
if (in.SkinTemperatureTorso().present())
181188
GetSkinTemperatureTorso().Load(in.SkinTemperatureTorso().get());
182189
if (in.SkinTemperatureHead().present())
@@ -234,6 +241,8 @@ void SEEnergySystem::Unload(CDM::EnergySystemData& data) const
234241
data.LactateProductionRate(std::unique_ptr<CDM::ScalarAmountPerTimeData>(m_LactateProductionRate->Unload()));
235242
if (m_PotassiumLostToSweat != nullptr)
236243
data.PotassiumLostToSweat(std::unique_ptr<CDM::ScalarMassData>(m_PotassiumLostToSweat->Unload()));
244+
if (m_SkinTemperature != nullptr)
245+
data.SkinTemperature(std::unique_ptr<CDM::ScalarTemperatureData>(m_SkinTemperature->Unload()));
237246
if (m_SkinTemperatureTorso != nullptr)
238247
data.SkinTemperatureTorso(std::unique_ptr<CDM::ScalarTemperatureData>(m_SkinTemperatureTorso->Unload()));
239248
if (m_SkinTemperatureHead != nullptr)
@@ -452,6 +461,25 @@ double SEEnergySystem::GetPotassiumLostToSweat(const MassUnit& unit) const
452461
return m_PotassiumLostToSweat->GetValue(unit);
453462
}
454463
//-------------------------------------------------------------------------------
464+
bool SEEnergySystem::HasSkinTemperature() const
465+
{
466+
return m_SkinTemperature == nullptr ? false : m_SkinTemperature->IsValid();
467+
}
468+
//-------------------------------------------------------------------------------
469+
SEScalarTemperature& SEEnergySystem::GetSkinTemperature()
470+
{
471+
if (m_SkinTemperature == nullptr)
472+
m_SkinTemperature = new SEScalarTemperature();
473+
return *m_SkinTemperature;
474+
}
475+
//-------------------------------------------------------------------------------
476+
double SEEnergySystem::GetSkinTemperature(const TemperatureUnit& unit) const
477+
{
478+
if (m_SkinTemperature == nullptr)
479+
return SEScalar::dNaN();
480+
return m_SkinTemperature->GetValue(unit);
481+
}
482+
//-------------------------------------------------------------------------------
455483
bool SEEnergySystem::HasSkinTemperatureTorso() const
456484
{
457485
return m_SkinTemperatureTorso == nullptr ? false : m_SkinTemperatureTorso->IsValid();
@@ -566,7 +594,6 @@ double SEEnergySystem::GetSkinTemperatureRightLeg(const TemperatureUnit& unit) c
566594
return m_SkinTemperatureRightLeg->GetValue(unit);
567595
}
568596
//-------------------------------------------------------------------------------
569-
570597
bool SEEnergySystem::HasSodiumLostToSweat() const
571598
{
572599
return m_SodiumLostToSweat == nullptr ? false : m_SodiumLostToSweat->IsValid();
@@ -657,6 +684,7 @@ Tree<const char*> SEEnergySystem::GetPhysiologyRequestGraph() const
657684
.emplace_back(idFatigueLevel)
658685
.emplace_back(idLactateProductionRate)
659686
.emplace_back(idPotassiumLostToSweat)
687+
.emplace_back(idSkinTemperature)
660688
.emplace_back(idSkinTemperatureTorso)
661689
.emplace_back(idSkinTemperatureHead)
662690
.emplace_back(idSkinTemperatureLeftArm)

projects/biogears/libBiogears/src/engine/Controller/BioGears.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5599,7 +5599,7 @@ void BioGears::SetupInternalTemperature()
55995599
SEThermalCircuitPath& TemperatureGroundToCore = cIntemperature.CreatePath(Ground, Core, BGE::InternalTemperaturePath::GroundToInternalCore);
56005600
TemperatureGroundToCore.GetHeatSourceBaseline().SetValue(0.0, PowerUnit::W);
56015601

5602-
double skinCapTuningFactor = 6.0;
5602+
double skinCapTuningFactor = 1.0;
56035603

56045604
SEThermalCircuitNode& TorsoSkin = cIntemperature.CreateNode(BGE::InternalTemperatureNode::InternalTorsoSkin);
56055605
TorsoSkin.GetTemperature().SetValue(33.0, TemperatureUnit::C);

projects/biogears/libBiogears/src/engine/Systems/Energy.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ void Energy::Initialize()
110110
GetSkinTemperatureRightArm().SetValue(33.0, TemperatureUnit::C);
111111
GetSkinTemperatureLeftLeg().SetValue(33.0, TemperatureUnit::C);
112112
GetSkinTemperatureRightLeg().SetValue(33.0, TemperatureUnit::C);
113+
GetSkinTemperature().SetValue(33.0, TemperatureUnit::C);
113114
/// \cite phypers2006lactate
114115
GetLactateProductionRate().SetValue(1.3, AmountPerTimeUnit::mol_Per_day);
115116
/// \cite guyton2006medical
@@ -422,6 +423,7 @@ void Energy::CalculateVitalSigns()
422423
double skinTemperatureRightArm_degC = m_skinNodes[3]->GetTemperature(TemperatureUnit::C);
423424
double skinTemperatureLeftLeg_degC = m_skinNodes[4]->GetTemperature(TemperatureUnit::C);
424425
double skinTemperatureRightLeg_degC = m_skinNodes[5]->GetTemperature(TemperatureUnit::C);
426+
double meanSkinTemp_degC = (0.36 * skinTemperatureTorso_degC) + (0.07 * skinTemperatureHead_degC) + (0.092 * skinTemperatureLeftArm_degC) + (0.092 * skinTemperatureRightArm_degC) + (0.193 * skinTemperatureLeftLeg_degC) + (0.193 * skinTemperatureRightLeg_degC);
425427
if (m_data.GetDrugs().HasFeverChange() && GetCoreTemperature().GetValue(TemperatureUnit::C) > 37.0) { // Modifier for current drugs should not be able to increase core temperature
426428
coreTemperature_degC += m_data.GetDrugs().GetFeverChange().GetValue(TemperatureUnit::C);
427429
LLIM(coreTemperature_degC, 36.5); // Tylenol will not lower your basal core temperature
@@ -433,6 +435,7 @@ void Energy::CalculateVitalSigns()
433435
GetSkinTemperatureRightArm().SetValue(skinTemperatureRightArm_degC, TemperatureUnit::C);
434436
GetSkinTemperatureLeftLeg().SetValue(skinTemperatureLeftLeg_degC, TemperatureUnit::C);
435437
GetSkinTemperatureRightLeg().SetValue(skinTemperatureRightLeg_degC, TemperatureUnit::C);
438+
GetSkinTemperature().SetValue(meanSkinTemp_degC, TemperatureUnit::C);
436439
std::stringstream ss;
437440

438441
//Hypothermia check

share/xsd/cdm/Physiology.xsd

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,9 @@ specific language governing permissions and limitations under the License.
341341
<!--<< @brief The exhaustion level of the body, or inability to perform physical exercise @details The amount of energy available for activity divided by the normal rested energy -->
342342
<xs:element name="LactateProductionRate" type="ScalarAmountPerTimeData" minOccurs="0" maxOccurs="1"/>
343343
<!--<< @brief The molar amount of lactate generated on the tissue level from anaerobic metabolism -->
344-
<xs:element name="SkinTemperatureTorso" type="ScalarTemperatureData" minOccurs="0" maxOccurs="1"/>
344+
<xs:element name="SkinTemperature" type="ScalarTemperatureData" minOccurs="0" maxOccurs="1"/>
345+
<!--<< @brief The mean skin surface temperature based on segmented areas.-->
346+
<xs:element name="SkinTemperatureTorso" type="ScalarTemperatureData" minOccurs="0" maxOccurs="1"/>
345347
<!--<< @brief The torso skin surface temperature.-->
346348
<xs:element name="SkinTemperatureHead" type="ScalarTemperatureData" minOccurs="0" maxOccurs="1"/>
347349
<!--<< @brief The head skin surface temperature.-->

0 commit comments

Comments
 (0)