Skip to content

Commit 9185751

Browse files
ntatum94StevenAWhite
authored andcommitted
Making adjustments and adding burn specificity based on review
1 parent 0c83a2a commit 9185751

File tree

7 files changed

+94
-75
lines changed

7 files changed

+94
-75
lines changed

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

Lines changed: 1 addition & 1 deletion
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-
double m_meanSkinTemperature;
103+
double m_Test;
104104
// Stateless member variable (Set in SetUp())
105105
double m_dT_s;
106106
SEPatient* m_Patient;

projects/biogears/libBiogears/src/cdm/patient/actions/SEBurnWound.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ bool SEBurnWound::Load(const CDM::BurnWoundData& in)
6565

6666
if (in.DegreeOfBurn().present()) {
6767
SetDegreeOfBurn(in.DegreeOfBurn().get());
68+
} else {
69+
SetDegreeOfBurn(CDM::enumBurnDegree::Third);
6870
}
6971

7072
if (in.BurnInitiationTime().present()) {

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5602,25 +5602,25 @@ void BioGears::SetupInternalTemperature()
56025602
double skinCapTuningFactor = 1.0;
56035603

56045604
SEThermalCircuitNode& TorsoSkin = cIntemperature.CreateNode(BGE::InternalTemperatureNode::InternalTorsoSkin);
5605-
TorsoSkin.GetTemperature().SetValue(33.0, TemperatureUnit::C);
5605+
TorsoSkin.GetTemperature().SetValue(34.4, TemperatureUnit::C);
56065606
SEThermalCircuitPath& TorsoSkinToTemperatureGround = cIntemperature.CreatePath(TorsoSkin, Ground, BGE::InternalTemperaturePath::InternalTorsoSkinToTemperatureGround);
56075607
TorsoSkinToTemperatureGround.GetCapacitanceBaseline().SetValue(skinCapTuningFactor * 1.21, HeatCapacitanceUnit::kcal_Per_C);
56085608
TorsoSkin.GetHeatBaseline().SetValue(TorsoSkinToTemperatureGround.GetCapacitanceBaseline().GetValue(HeatCapacitanceUnit::J_Per_K) * TorsoSkin.GetTemperature().GetValue(TemperatureUnit::K), EnergyUnit::J);
56095609

56105610
SEThermalCircuitNode& HeadSkin = cIntemperature.CreateNode(BGE::InternalTemperatureNode::InternalHeadSkin);
5611-
HeadSkin.GetTemperature().SetValue(33.0, TemperatureUnit::C);
5611+
HeadSkin.GetTemperature().SetValue(35.2, TemperatureUnit::C);
56125612
SEThermalCircuitPath& HeadSkinToTemperatureGround = cIntemperature.CreatePath(HeadSkin, Ground, BGE::InternalTemperaturePath::InternalHeadSkinToTemperatureGround);
56135613
HeadSkinToTemperatureGround.GetCapacitanceBaseline().SetValue(skinCapTuningFactor * 0.24, HeatCapacitanceUnit::kcal_Per_C);
56145614
HeadSkin.GetHeatBaseline().SetValue(HeadSkinToTemperatureGround.GetCapacitanceBaseline().GetValue(HeatCapacitanceUnit::J_Per_K) * HeadSkin.GetTemperature().GetValue(TemperatureUnit::K), EnergyUnit::J);
56155615

56165616
SEThermalCircuitNode& LeftArmSkin = cIntemperature.CreateNode(BGE::InternalTemperatureNode::InternalLeftArmSkin);
5617-
LeftArmSkin.GetTemperature().SetValue(33.0, TemperatureUnit::C);
5617+
LeftArmSkin.GetTemperature().SetValue(33.6, TemperatureUnit::C);
56185618
SEThermalCircuitPath& LeftArmSkinToTemperatureGround = cIntemperature.CreatePath(LeftArmSkin, Ground, BGE::InternalTemperaturePath::InternalLeftArmSkinToTemperatureGround);
56195619
LeftArmSkinToTemperatureGround.GetCapacitanceBaseline().SetValue(skinCapTuningFactor * 0.30, HeatCapacitanceUnit::kcal_Per_C);
56205620
LeftArmSkin.GetHeatBaseline().SetValue(LeftArmSkinToTemperatureGround.GetCapacitanceBaseline().GetValue(HeatCapacitanceUnit::J_Per_K) * LeftArmSkin.GetTemperature().GetValue(TemperatureUnit::K), EnergyUnit::J);
56215621

56225622
SEThermalCircuitNode& RightArmSkin = cIntemperature.CreateNode(BGE::InternalTemperatureNode::InternalRightArmSkin);
5623-
RightArmSkin.GetTemperature().SetValue(33.0, TemperatureUnit::C);
5623+
RightArmSkin.GetTemperature().SetValue(33.6, TemperatureUnit::C);
56245624
SEThermalCircuitPath& RightArmSkinToTemperatureGround = cIntemperature.CreatePath(RightArmSkin, Ground, BGE::InternalTemperaturePath::InternalRightArmSkinToTemperatureGround);
56255625
RightArmSkinToTemperatureGround.GetCapacitanceBaseline().SetValue(skinCapTuningFactor * 0.30, HeatCapacitanceUnit::kcal_Per_C);
56265626
RightArmSkin.GetHeatBaseline().SetValue(RightArmSkinToTemperatureGround.GetCapacitanceBaseline().GetValue(HeatCapacitanceUnit::J_Per_K) * RightArmSkin.GetTemperature().GetValue(TemperatureUnit::K), EnergyUnit::J);

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

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ void Energy::Clear()
8888
m_BloodpH.Reset();
8989
m_BicarbonateMolarity_mmol_Per_L.Reset();
9090
m_previousWeightPack_kg = 0.0;
91+
m_Test = 0.0;
9192

9293
m_packOn = false;
9394
}
@@ -104,14 +105,14 @@ void Energy::Initialize()
104105
//Initialization of other system variables
105106
/// \cite herman2008physics
106107
GetCoreTemperature().SetValue(37.0, TemperatureUnit::C);
107-
GetSkinTemperatureTorso().SetValue(33.0, TemperatureUnit::C);
108-
GetSkinTemperatureHead().SetValue(33.0, TemperatureUnit::C);
109-
GetSkinTemperatureLeftArm().SetValue(33.0, TemperatureUnit::C);
110-
GetSkinTemperatureRightArm().SetValue(33.0, TemperatureUnit::C);
108+
GetSkinTemperatureTorso().SetValue(34.4, TemperatureUnit::C);
109+
GetSkinTemperatureHead().SetValue(35.2, TemperatureUnit::C);
110+
GetSkinTemperatureLeftArm().SetValue(33.6, TemperatureUnit::C);
111+
GetSkinTemperatureRightArm().SetValue(33.6, TemperatureUnit::C);
111112
GetSkinTemperatureLeftLeg().SetValue(33.0, TemperatureUnit::C);
112113
GetSkinTemperatureRightLeg().SetValue(33.0, TemperatureUnit::C);
113-
GetBurnSkinTemperature().SetValue(33.0, TemperatureUnit::C);
114-
GetSkinTemperature().SetValue(33.0, TemperatureUnit::C);
114+
GetBurnSkinTemperature().SetValue(34.4, TemperatureUnit::C);
115+
GetSkinTemperature().SetValue(34.4, TemperatureUnit::C);
115116
/// \cite phypers2006lactate
116117
GetLactateProductionRate().SetValue(1.3, AmountPerTimeUnit::mol_Per_day);
117118
/// \cite guyton2006medical
@@ -225,6 +226,7 @@ void Energy::AtSteadyState()
225226
void Energy::PreProcess()
226227
{
227228
CalculateMetabolicHeatGeneration();
229+
m_data.GetDataTrack().Probe("CTSresistance", m_Test);
228230
CalculateSweatRate();
229231
UpdateHeatResistance();
230232
//ManageEnergyDeficit();
@@ -610,7 +612,7 @@ void Energy::CalculateSweatRate()
610612
double dWaterVaporPressureInAmbientAir_mmHg = GeneralMath::AntoineEquation(dAirTemperature_C);
611613
double m_dWaterVaporPressureInAmbientAir_Pa = Convert(dWaterVaporPressureInAmbientAir_mmHg, PressureUnit::mmHg, PressureUnit::Pa);
612614
// double ambientAtmosphericPressure_Pa = m_data.GetEnvironment().GetConditions().GetAtmosphericPressure().GetValue(PressureUnit::Pa);
613-
double maximumEvaporativeCapacity_W = 14.21 * (m_Patient->GetSkinSurfaceArea().GetValue(AreaUnit::m2)) * effectiveClothingEvaporation_im_Per_clo * (133.322 * (std::pow(10, (8.1076 - (1750.286 / (235.0 + (m_skinNodes[0]->GetTemperature(TemperatureUnit::C))))))) - (m_dWaterVaporPressureInAmbientAir_Pa)); // Still needs effective clothing evaporation
615+
double maximumEvaporativeCapacity_W = 14.21 * (m_Patient->GetSkinSurfaceArea().GetValue(AreaUnit::m2)) * effectiveClothingEvaporation_im_Per_clo * (133.322 * (std::pow(10, (8.1076 - (1750.286 / (235.0 + (GetSkinTemperature(TemperatureUnit::C))))))) - (m_dWaterVaporPressureInAmbientAir_Pa)); // Still needs effective clothing evaporation
614616

615617
double vaporizationEnergy_J_Per_kg = m_data.GetConfiguration().GetVaporizationEnergy(EnergyPerMassUnit::J_Per_kg);
616618
double sweatSodiumConcentration_mM = 51.0; /// \cite shirreffs1997whole
@@ -620,7 +622,6 @@ void Energy::CalculateSweatRate()
620622

621623
double currentEvaporativeCapacity_W = sweatHeatTranferCoefficient_W_Per_K * (m_skinNodes[0]->GetTemperature(TemperatureUnit::K));
622624
if (currentEvaporativeCapacity_W > maximumEvaporativeCapacity_W) {
623-
624625
sweatHeatTranferCoefficient_W_Per_K = maximumEvaporativeCapacity_W / (m_skinNodes[0]->GetTemperature(TemperatureUnit::K));
625626
}
626627

@@ -698,27 +699,32 @@ void Energy::UpdateHeatResistance()
698699
double bloodDensity_kg_Per_m3 = m_data.GetBloodChemistry().GetBloodDensity().GetValue(MassPerVolumeUnit::kg_Per_m3);
699700
double bloodSpecificHeat_J_Per_K_kg = m_data.GetBloodChemistry().GetBloodSpecificHeat().GetValue(HeatCapacitancePerMassUnit::J_Per_K_kg);
700701

701-
double alphaScale = 0.5; // Scaling factor for convective heat transfer from core to skin (35 seems to be near the upper limit before non-stabilization)
702+
double alphaScale = 0.42; // Scaling factor for convective heat transfer from core to skin (35 seems to be near the upper limit before non-stabilization)
702703
bool isBurnWound = false;
704+
double burnSurfaceAreaFraction = 0.0;
703705
if (m_data.GetBloodChemistry().GetInflammatoryResponse().HasInflammationSource(CDM::enumInflammationSource::Burn)) {
704706
SEBurnWound* burnAction = m_data.GetActions().GetPatientActions().GetBurnWound();
705707
std::vector<std::string> burnComptVector = burnAction->GetCompartments();
706708
// Check if burn is on specific compartment. Skip head since burns cannot currently be initialized on the head
707709
if (index == 0 && burnAction->HasCompartment("Trunk")) {
708710
isBurnWound = true;
711+
burnSurfaceAreaFraction = m_data.GetActions().GetPatientActions().GetBurnWound()->getTrunkBurnIntensity();
709712
} else if (index == 2 && burnAction->HasCompartment("LeftArm")) {
710713
isBurnWound = true;
714+
burnSurfaceAreaFraction = m_data.GetActions().GetPatientActions().GetBurnWound()->getLeftArmBurnIntensity();
711715
} else if (index == 3 && burnAction->HasCompartment("RightArm")) {
712716
isBurnWound = true;
717+
burnSurfaceAreaFraction = m_data.GetActions().GetPatientActions().GetBurnWound()->getRightArmBurnIntensity();
713718
} else if (index == 4 && burnAction->HasCompartment("LeftLeg")) {
714719
isBurnWound = true;
720+
burnSurfaceAreaFraction = m_data.GetActions().GetPatientActions().GetBurnWound()->getLeftLegBurnIntensity();
715721
} else if (index == 5 && burnAction->HasCompartment("RightLeg")) {
716722
isBurnWound = true;
723+
burnSurfaceAreaFraction = m_data.GetActions().GetPatientActions().GetBurnWound()->getRightLegBurnIntensity();
717724
}
718725
}
719726
if (isBurnWound) {
720727
isAnySegmentBurned = true;
721-
const double burnSurfaceAreaFraction = m_data.GetActions().GetPatientActions().GetBurnWound()->GetBurnIntensity();
722728
const double resInput = std::min(2.0 * burnSurfaceAreaFraction, 1.0); // Make >50% burn the worse case scenario
723729
const double targetAlpha = GeneralMath::LinearInterpolator(0.0, resInput, alphaScale, 20.0, resInput);
724730
const double lastAlpha = 1.0 / (coreToSkinPath->GetResistance(HeatResistanceUnit::K_Per_W) * bloodDensity_kg_Per_m3 * bloodSpecificHeat_J_Per_K_kg * segmentedSkinBloodFlows[index]);
@@ -730,9 +736,9 @@ void Energy::UpdateHeatResistance()
730736
// When skin blood flow increases, then heat transfer resistance decreases leading to more heat transfer from core to skin.
731737
// The opposite occurs for skin blood flow decrease.
732738
double coreToSkinResistance_K_Per_W = 1.0 / (alphaScale * bloodDensity_kg_Per_m3 * bloodSpecificHeat_J_Per_K_kg * segmentedSkinBloodFlows[index]);
733-
739+
734740
coreToSkinResistance_K_Per_W = BLIM(coreToSkinResistance_K_Per_W, 0.0001, 20.0);
735-
741+
m_Test = coreToSkinResistance_K_Per_W;
736742
coreToSkinPath->GetNextResistance().SetValue(coreToSkinResistance_K_Per_W, HeatResistanceUnit::K_Per_W);
737743
index += 1;
738744
}

0 commit comments

Comments
 (0)