История изменений
Исправление Obey-Kun, (текущая версия) :
То бишь примерно вот так это сейчас:
void HeatSurface::moveInTime()
{
// Рассчитываем плотность теплопотока.
if (mHasBoundaryCondition) {
switch (mBoundaryCondition->type()) {
case BoundaryCondition::FirstType:
mH = (mBoundaryCondition->temperature() - mSoilBlock1->temperature())
/ (mR * mSoilBlock1->invertedEffectiveConductivity());
break;
case BoundaryCondition::SecondType:
mH = mBoundaryCondition->heatFlowDensity();
break;
case BoundaryCondition::ThirdType:
mH = (mBoundaryCondition->temperature() - mSoilBlock1->temperature())
/ (mR * mSoilBlock1->invertedEffectiveConductivity()
+ mBoundaryCondition->resistivity());
break;
default:
// не должны сюда попасть
assert(false);
mH = 0.0; // а это чтоб компилятор не ругался
}
} else {
mH = (mSoilBlock2->temperature() - mSoilBlock1->temperature())
/ (mR1 * mSoilBlock1->invertedEffectiveConductivity()
+ mR2 * mSoilBlock2->invertedEffectiveConductivity());
}
// Переводим плотность теплопотока в теплопоток
mH *= mSquare;
}
void SoilBlock::moveInTime()
{
for (std::vector<HeatSurfaceContact>::const_iterator it = mHeatSurfaces.begin(); it != mHeatSurfaces.end(); ++it) {
mEnthalpy += it->h() * mTimeStepPerVolume;
}
mEnthalpy += mInternalHeatSourcePowerDensity * mTimeStepPerVolume;
calcCondition();
calcIEConductivity();
}
При этом HeatSurfaceContact содержит указатель на HeatSurface (и знак, с которым теплопоток должен добавляться к блоку).
Соответственно, HeatSurface::mSoilBlock1, HeatSurface::mSoilBlock2 и HeatSurface::mBoundaryCondition, а также всё содержимое SoilBlock::mHeatSurfaces должно будет указывать на нечто новое, как это осуществить?
Исходная версия Obey-Kun, :
То бишь примерно вот так это сейчас:
void HeatSurface::moveInTime()
{
// Рассчитываем плотность теплопотока.
if (mHasBoundaryCondition) {
switch (mBoundaryCondition->type()) {
case BoundaryCondition::FirstType:
mH = (mBoundaryCondition->temperature() - mSoilBlock1->temperature())
/ (mR * mSoilBlock1->invertedEffectiveConductivity());
break;
case BoundaryCondition::SecondType:
mH = mBoundaryCondition->heatFlowDensity();
break;
case BoundaryCondition::ThirdType:
mH = (mBoundaryCondition->temperature() - mSoilBlock1->temperature())
/ (mR * mSoilBlock1->invertedEffectiveConductivity()
+ mBoundaryCondition->resistivity());
break;
default:
// не должны сюда попасть
assert(false);
h = 0.0; // а это чтоб компилятор не ругался
}
} else {
mH = (mSoilBlock2->temperature() - mSoilBlock1->temperature())
/ (mR1 * mSoilBlock1->invertedEffectiveConductivity()
+ mR2 * mSoilBlock2->invertedEffectiveConductivity());
}
// Переводим плотность теплопотока в теплопоток
mH *= mSquare;
}
void SoilBlock::moveInTime()
{
for (std::vector<const HeatSurface*>::const_iterator it = mHeatSurfaces.begin(); it != mHeatSurfaces.end(); ++it) {
mEnthalpy += it->h() * mTimeStepPerVolume;
}
mEnthalpy += mInternalHeatSourcePowerDensity * mTimeStepPerVolume;
calcCondition();
calcIEConductivity();
}
Соответственно, HeatSurface::mSoilBlock1, HeatSurface::mSoilBlock2 и HeatSurface::mBoundaryCondition, а также всё содержимое SoilBlock::mHeatSurfaces должно будет указывать на нечто новое, как это осуществить?