NREL / EnergyPlus

EnergyPlus™ is a whole building energy simulation program that engineers, architects, and researchers use to model both energy consumption and water use in buildings.
https://energyplus.net
Other
1.13k stars 389 forks source link

Segfault with MoisturePenetrationDepth #10777

Open jmarrec opened 3 weeks ago

jmarrec commented 3 weeks ago

Issue overview

An OpenStudio-resources regression test that uses MoisturePenetrationDepth:

Details

Some additional details for this issue (if relevant):

Checklist

Add to this list or remove from it as applicable. This is a simple templated set of guidelines.

jmarrec commented 3 weeks ago

Backtrace:

Initializing Interior Convection Coefficients
Gathering Information for Predefined Reporting
Completed Initializing Surface Heat Balance
Calculate Outside Surface Heat Balance
Calculate Inside Surface Heat Balance
energyplus: /home/julien/Software/Others/EnergyPlus/src/EnergyPlus/MoistureBalanceEMPDManager.cc:252: void EnergyPlus::MoistureBalanceEMPDManager::GetMoistureBalanceEMPDInput(EnergyPlus::EnergyPlusData&): Assertion `mat != nullptr' failed.
Process 1612012 stopped
* thread #1, name = 'energyplus', stop reason = signal SIGABRT
    frame #0: 0x00007fffe569eb1c libc.so.6`__GI___pthread_kill [inlined] __pthread_kill_implementation(no_tid=0, signo=6, threadid=<unavailable>) at pthread_kill.c:44:76

(lldb) bt
error: libenergyplusapi.so.24.2.0 0x003c6649: DW_TAG_member '_M_local_buf' refers to type 0x00000000004214da which extends beyond the bounds of 0x003c663f
* thread #1, name = 'energyplus', stop reason = signal SIGABRT
  * frame #0: 0x00007fffe569eb1c libc.so.6`__GI___pthread_kill [inlined] __pthread_kill_implementation(no_tid=0, signo=6, threadid=<unavailable>) at pthread_kill.c:44:76
    frame #1: 0x00007fffe569ead8 libc.so.6`__GI___pthread_kill [inlined] __pthread_kill_internal(signo=6, threadid=<unavailable>) at pthread_kill.c:78:10
    frame #2: 0x00007fffe569ead8 libc.so.6`__GI___pthread_kill(threadid=<unavailable>, signo=6) at pthread_kill.c:89:10
    frame #3: 0x00007fffe564526e libc.so.6`__GI_raise(sig=6) at raise.c:26:13
    frame #4: 0x00007fffe56288ff libc.so.6`__GI_abort at abort.c:79:7
    frame #5: 0x00007fffe562881b libc.so.6`__assert_fail_base.cold at assert.c:94:3
    frame #6: 0x00007fffe563b507 libc.so.6`__assert_fail(assertion="mat != nullptr", file="/home/julien/Software/Others/EnergyPlus/src/EnergyPlus/MoistureBalanceEMPDManager.cc", line=252, function="void EnergyPlus::MoistureBalanceEMPDManager::GetMoistureBalanceEMPDInput(EnergyPlus::EnergyPlusData&)") at assert.c:103:3
    frame #7: 0x00007fffee8ed6ca libenergyplusapi.so.24.2.0`EnergyPlus::MoistureBalanceEMPDManager::GetMoistureBalanceEMPDInput(state=0x00007fffffffa980) at MoistureBalanceEMPDManager.cc:252:9
    frame #8: 0x00007fffee8f03ad libenergyplusapi.so.24.2.0`EnergyPlus::MoistureBalanceEMPDManager::InitMoistureBalanceEMPD(state=0x00007fffffffa980) at MoistureBalanceEMPDManager.cc:359:32
    frame #9: 0x00007fffee8f1d63 libenergyplusapi.so.24.2.0`EnergyPlus::MoistureBalanceEMPDManager::CalcMoistureBalanceEMPD(state=0x00007fffffffa980, SurfNum=1, SurfTempIn=23, TempZone=23, TempSat=0x00007fffffff91c8) at MoistureBalanceEMPDManager.cc:489:32
    frame #10: 0x00007fffee5189af libenergyplusapi.so.24.2.0`EnergyPlus::HeatBalanceSurfaceManager::CalcHeatBalanceInsideSurf2(state=0x00007fffffffa980, HTSurfs=size=68, IZSurfs=size=42, HTNonWindowSurfs=size=60, HTWindowSurfs=size=8, ZoneToResimulate=ObjexxFCL::Optional_int_const @ 0x00007fffffffa200) at HeatBalanceSurfaceManager.cc:7837:80
    frame #11: 0x00007fffee513c6d libenergyplusapi.so.24.2.0`EnergyPlus::HeatBalanceSurfaceManager::CalcHeatBalanceInsideSurf(state=0x00007fffffffa980, ZoneToResimulate=ObjexxFCL::Optional_int_const @ 0x00007fffffffa2b0) at HeatBalanceSurfaceManager.cc:7518:39
    frame #12: 0x00007fffee474bc3 libenergyplusapi.so.24.2.0`EnergyPlus::HeatBalanceSurfaceManager::ManageSurfaceHeatBalance(state=0x00007fffffffa980) at HeatBalanceSurfaceManager.cc:166:30
    frame #13: 0x00007fffee39fd6c libenergyplusapi.so.24.2.0`EnergyPlus::HeatBalanceManager::ManageHeatBalance(state=0x00007fffffffa980) at HeatBalanceManager.cc:207:33
    frame #14: 0x00007fffec97852a libenergyplusapi.so.24.2.0`EnergyPlus::SizingManager::SetupZoneSizing(state=0x00007fffffffa980, ErrorsFound=0x00007fffffffa3ea) at SizingManager.cc:4236:26
    frame #15: 0x00007fffec926747 libenergyplusapi.so.24.2.0`EnergyPlus::SizingManager::ManageSizing(state=0x00007fffffffa980) at SizingManager.cc:258:24
    frame #16: 0x00007fffec8c2838 libenergyplusapi.so.24.2.0`EnergyPlus::SimulationManager::ManageSimulation(state=0x00007fffffffa980) at SimulationManager.cc:234:36
    frame #17: 0x00007fffeb91d932 libenergyplusapi.so.24.2.0`RunEnergyPlus(state=0x00007fffffffa980, filepath="") at EnergyPlusPgm.cc:419:56
    frame #18: 0x00007fffeb91b7f1 libenergyplusapi.so.24.2.0`EnergyPlusPgm(args=size=6, filepath="") at EnergyPlusPgm.cc:242:25
    frame #19: 0x0000555555602fb2 energyplus`main(argc=6, argv=0x00007fffffffc0a8) at main.cc:60:25
    frame #20: 0x00007fffe562a1ca libc.so.6`__libc_start_call_main(main=(energyplus`main at main.cc:54:1), argc=6, argv=0x00007fffffffc0a8) at libc_start_call_main.h:58:16
    frame #21: 0x00007fffe562a28b libc.so.6`__libc_start_main_impl(main=(energyplus`main at main.cc:54:1), argc=6, argv=0x00007fffffffc0a8, init=<unavailable>, fini=<unavailable>, rtld_fini=<unavailable>, stack_end=0x00007fffffffc098) at libc-start.c:360:3
    frame #22: 0x0000555555602d95 energyplus`_start + 37

(lldb) f 7
frame #7: 0x00007fffee8ed6ca libenergyplusapi.so.24.2.0`EnergyPlus::MoistureBalanceEMPDManager::GetMoistureBalanceEMPDInput(state=0x00007fffffffa980) at MoistureBalanceEMPDManager.cc:252:9
   249  
   250          auto const &constr = state.dataConstruction->Construct(surf.Construction);
   251          auto const *mat = dynamic_cast<const MaterialEMPD *>(s_mat->materials(constr.LayerPoint(constr.TotLayers)));
-> 252          assert(mat != nullptr);
   253  
   254          if (mat->mu > 0.0 && surf.Zone > 0) {
   255              EMPDzone(surf.Zone) = true;
jmarrec commented 3 weeks ago

Seems like @amirroth did a large refactor around that line: https://github.com/NREL/EnergyPlus/commit/268cdbb688932ff9745899598f78d2bd286a17cb#diff-de4da079faf74cbae6f81f415fd5cdb57a88db449e51c118b2929b949be27517R257

jmarrec commented 3 weeks ago

If I'm reading correctly, you should just check if hasEMPD on the MaterialBase before trying to dynamic_cast it to the MaterialEMPD

Material::MaterialBase const * base_mat = s_mat->materials(constr.LayerPoint(constr.TotLayers));
if (base_mat->hasEMPD()) {
   auto const *mat = dynamic_cast<const MaterialEMPD *>(base_mat);
   //  ...
}

That may not be the only issue though.

jmarrec commented 3 weeks ago

Incidentally, this is happening for a Slab, which has zero EPMD layers on purpose, and the inner layer on which it throws is Material:NoMass.

(lldb) p *(s_mat->materials(constr.LayerPoint(constr.TotLayers)))
(EnergyPlus::Material::MaterialBase) {
  Name = "CP02 CARPET PAD"
  Num = 13
  group = Regular
  isUsed = false
  Roughness = VeryRough
  Conductivity = 0
  Density = 0
  Resistance = 0.2165
  ROnly = true
  NominalR = 0.2165
  SpecHeat = 0
  Thickness = 0
  AbsorpThermal = 0.90000000000000002
  AbsorpThermalInput = 0.90000000000000002
  AbsorpThermalBack = 0
  AbsorpThermalFront = 0
  AbsorpSolar = 0.69999999999999996
  AbsorpSolarInput = 0.69999999999999996
  AbsorpVisible = 0.80000000000000004
  AbsorpVisibleInput = 0.80000000000000004
  AbsorpSolarEMSOverrideOn = false
  AbsorpSolarEMSOverride = 0
  AbsorpThermalEMSOverrideOn = false
  AbsorpThermalEMSOverride = 0
  AbsorpVisibleEMSOverrideOn = false
  AbsorpVisibleEMSOverride = 0
  absorpVarCtrlSignal = Invalid
  absorpThermalVarSchedIdx = 0
  absorpThermalVarFuncIdx = 0
  absorpSolarVarSchedIdx = 0
  absorpSolarVarFuncIdx = 0
  hasEMPD = false
  hasHAMT = false
  hasPCM = false
  Porosity = 0
  VaporDiffus = 0
  WarnedForHighDiffusivity = false
}

The way the test file is prepared:

Set the HBAlgorithm to MoisturePenetrationDepthConductionTransferFunction

https://github.com/NREL/OpenStudio-resources/blob/bd4f450564f6f0d7dcc052dcaba002bf23abb8d5/model/simulationtests/moisture_settings.rb#L8-L9 results in

HeatBalanceAlgorithm,
  MoisturePenetrationDepthConductionTransferFunction, !- Algorithm
  200;                                    !- Surface Temperature Upper Limit {C}

Wall constructions get EMPD

https://github.com/NREL/OpenStudio-resources/blob/bd4f450564f6f0d7dcc052dcaba002bf23abb8d5/model/simulationtests/moisture_settings.rb#L40-L50

For each Opaque layer in constructions used for Walls, create a MaterialProperty:MoisturePenetrationDepth:Settings

amirroth commented 3 weeks ago

If I'm reading correctly, you should just check if hasEMPD on the MaterialBase before trying to dynamic_cast it to the MaterialEMPD

Material::MaterialBase const * base_mat = s_mat->materials(constr.LayerPoint(constr.TotLayers));
if (base_mat->hasEMPD()) {
   auto const *mat = dynamic_cast<const MaterialEMPD *>(base_mat);
   //  ...
}

That may not be the only issue though.

Greetings, fellow lldb user. Yes, I'm 99.84% sure I caused this. The change you propose will not hurt, but I think the bigger issue is that several lines above there is a test for surf.HeatTransferAlgorithm != DataSurfaces::HeatTransferModel::EMPD that lets the code go through despite the fact that there is no EMPD in the model.

jmarrec commented 3 weeks ago

Seems like the HeatTransferModel is an EMPD though? Because it's defaulted to that one, given that there is a high level HeatBalanceAlgorithm object?

https://github.com/NREL/EnergyPlus/blob/b422061c846bf9f9bceb49ee2d95f2af20abfdae/src/EnergyPlus/SurfaceGeometry.cc#L8596-L8597

amirroth commented 3 weeks ago

Seems like the HeatTransferModel is an EMPD though? Because it's defaulted to that one, given that there is a high level HeatBalanceAlgorithm object?

https://github.com/NREL/EnergyPlus/blob/b422061c846bf9f9bceb49ee2d95f2af20abfdae/src/EnergyPlus/SurfaceGeometry.cc#L8596-L8597

I see. I didn't realize that this is how things went. Seems silly, but I guess that's a separate discussion. Your suggested fix, i.e., to guard the first code block with if (matBase->hasEMPD) should work.

Myoldmopar commented 3 weeks ago

Alright, so in the original code, there was this material member variable called EMPDMaterialProps. It was supposed to be used as an indicator for whether the surface had EMPD properties. It was defaulted to false.

In the input routine, it loops over all the "middle" layers to detect any EMPD layers. This would be an error condition if so. This loop uses the EMPDMaterialProps member variable as the signal.

That member variable is defaulted to false. And ... never ... assigned. So even though that material does have EMPD props listed in the IDF, and even though there are EMPD physical properties assigned to that layer in memory, that little EMPDMaterialProps member variable is never updated. So that loop simply continues happily.

I am going to push up a PR that "fixes" it, but that test file will still fail gracefully, and should never have run.

If I'm misunderstanding the EMPD limitations, someone please speak up.

Myoldmopar commented 3 weeks ago

Original code produces this in the error file:

   ************* GetMoistureBalanceEMPDInput: EMPD properties are not assigned to the inside layer of Surfaces
   **   ~~~   ** ...use Output:Diagnostics,DisplayExtraWarnings; to show more details on individual surfaces.

In the current develop it seg faults.

With my fix to the seg fault, I get this:

   ************* GetMoistureBalanceEMPDInput: EMPD properties are not assigned to the inside layer of Surfaces
   **   ~~~   ** ...use Output:Diagnostics,DisplayExtraWarnings; to show more details on individual surfaces.
   ** Severe  ** GetMoistureBalanceEMPDInput: EMPD properties are assigned to a middle layer in Construction = ASHRAE_189.1-2009_EXTWALL_STEELFRAME_CLIMATEZONE 4-8
   **   ~~~   ** ..Middle layer material with EMPD properties = Wall Insulation [39]
   **   ~~~   ** ..A material with EMPD properties must be assigned to the inside layer of a construction.
   ** Severe  ** GetMoistureBalanceEMPDInput: EMPD properties are assigned to a middle layer in Construction = ASHRAE_189.1-2009_EXTWALL_STEELFRAME_CLIMATEZONE 4-8
   **   ~~~   ** ..Middle layer material with EMPD properties = Wall Insulation [39]
   **   ~~~   ** ..A material with EMPD properties must be assigned to the inside layer of a construction.

...more of these, then:

   **  Fatal  ** GetMoistureBalanceEMPDInput: Errors found getting EMPD material properties, program terminated.
   ...Summary of Errors that led to program termination:
   ..... Reference severe error count=8
   ..... Last severe error=GetMoistureBalanceEMPDInput: EMPD properties are assigned to a middle layer in Construction = ASHRAE_189.1-2009_EXTWALL_STEELFRAME_CLIMATEZONE 4-8

I think this is the right move. I'm going to confirm tests pass and open a PR.

jmarrec commented 2 weeks ago

Ok, so with the original test files, I now get that Fatal error message, no issue.

I removed the MaterialProp:EMPD from the middle layer of one construction. and I get another segfault.

The thing is that one of the two constructions is a symmetric inner wall construction:

Construction,
  000_Interior Wall,                      !- Name
  000_G01a 19mm gypsum board,             !- Layer 1
  000_F04 Wall air space resistance,      !- Layer 2
  000_G01a 19mm gypsum board;             !- Layer 3
Material,
  000_G01a 19mm gypsum board,             !- Name
  [...];

MaterialProperty:MoisturePenetrationDepth:Settings,
  000_G01a 19mm gypsum board,             !- Name
  [...];
jmarrec commented 2 weeks ago

It crashes here: https://github.com/NREL/EnergyPlus/blob/94a887817b9a5fdfef43c56ab69d1c6fac37d048/src/EnergyPlus/MoistureBalanceEMPDManager.cc#L524

Completed Initializing Surface Heat Balance
Calculate Outside Surface Heat Balance
Calculate Inside Surface Heat Balance
energyplus: /home/julien/Software/Others/EnergyPlus/src/EnergyPlus/MoistureBalanceEMPDManager.cc:524: void EnergyPlus::MoistureBalanceEMPDManager::CalcMoistureBalanceEMPD(EnergyPlus::EnergyPlusData&, int, Real64, Real64, Real64&): Assertion `mat != nullptr' failed.
Process 336714 stopped
* thread #1, name = 'energyplus', stop reason = signal SIGABRT
    frame #0: 0x00007fffe569eb1c libc.so.6`__GI___pthread_kill [inlined] __pthread_kill_implementation(no_tid=0, signo=6, threadid=<unavailable>) at pthread_kill.c:44:76
(lldb) bt
error: libenergyplusapi.so.24.2.0 0x003c6649: DW_TAG_member '_M_local_buf' refers to type 0x00000000004214da which extends beyond the bounds of 0x003c663f
* thread #1, name = 'energyplus', stop reason = signal SIGABRT
  * frame #0: 0x00007fffe569eb1c libc.so.6`__GI___pthread_kill [inlined] __pthread_kill_implementation(no_tid=0, signo=6, threadid=<unavailable>) at pthread_kill.c:44:76
    frame #1: 0x00007fffe569ead8 libc.so.6`__GI___pthread_kill [inlined] __pthread_kill_internal(signo=6, threadid=<unavailable>) at pthread_kill.c:78:10
    frame #2: 0x00007fffe569ead8 libc.so.6`__GI___pthread_kill(threadid=<unavailable>, signo=6) at pthread_kill.c:89:10
    frame #3: 0x00007fffe564526e libc.so.6`__GI_raise(sig=6) at raise.c:26:13
    frame #4: 0x00007fffe56288ff libc.so.6`__GI_abort at abort.c:79:7
    frame #5: 0x00007fffe562881b libc.so.6`__assert_fail_base.cold at assert.c:94:3
    frame #6: 0x00007fffe563b507 libc.so.6`__assert_fail(assertion="mat != nullptr", file="/home/julien/Software/Others/EnergyPlus/src/EnergyPlus/MoistureBalanceEMPDManager.cc", line=524, function="void EnergyPlus::MoistureBalanceEMPDManager::CalcMoistureBalanceEMPD(EnergyPlus::EnergyPlusData&, int, Real64, Real64, Real64&)") at assert.c:103:3
    frame #7: 0x00007fffee8f23c0 libenergyplusapi.so.24.2.0`EnergyPlus::MoistureBalanceEMPDManager::CalcMoistureBalanceEMPD(state=0x00007fffffffaab0, SurfNum=5, SurfTempIn=23, TempZone=23, TempSat=0x00007fffffff92f8) at MoistureBalanceEMPDManager.cc:524:5
    frame #8: 0x00007fffee518a93 libenergyplusapi.so.24.2.0`EnergyPlus::HeatBalanceSurfaceManager::CalcHeatBalanceInsideSurf2(state=0x00007fffffffaab0, HTSurfs=size=68, IZSurfs=size=42, HTNonWindowSurfs=size=60, HTWindowSurfs=size=8, ZoneToResimulate=ObjexxFCL::Optional_int_const @ 0x00007fffffffa330) at HeatBalanceSurfaceManager.cc:7837:80
    frame #9: 0x00007fffee513d51 libenergyplusapi.so.24.2.0`EnergyPlus::HeatBalanceSurfaceManager::CalcHeatBalanceInsideSurf(state=0x00007fffffffaab0, ZoneToResimulate=ObjexxFCL::Optional_int_const @ 0x00007fffffffa3e0) at HeatBalanceSurfaceManager.cc:7518:39
    frame #10: 0x00007fffee474ca7 libenergyplusapi.so.24.2.0`EnergyPlus::HeatBalanceSurfaceManager::ManageSurfaceHeatBalance(state=0x00007fffffffaab0) at HeatBalanceSurfaceManager.cc:166:30
    frame #11: 0x00007fffee39fe50 libenergyplusapi.so.24.2.0`EnergyPlus::HeatBalanceManager::ManageHeatBalance(state=0x00007fffffffaab0) at HeatBalanceManager.cc:207:33
    frame #12: 0x00007fffec9784bc libenergyplusapi.so.24.2.0`EnergyPlus::SizingManager::SetupZoneSizing(state=0x00007fffffffaab0, ErrorsFound=0x00007fffffffa51a) at SizingManager.cc:4236:26
    frame #13: 0x00007fffec9266d9 libenergyplusapi.so.24.2.0`EnergyPlus::SizingManager::ManageSizing(state=0x00007fffffffaab0) at SizingManager.cc:258:24
    frame #14: 0x00007fffec8c27ca libenergyplusapi.so.24.2.0`EnergyPlus::SimulationManager::ManageSimulation(state=0x00007fffffffaab0) at SimulationManager.cc:234:36
    frame #15: 0x00007fffeb91d8d2 libenergyplusapi.so.24.2.0`RunEnergyPlus(state=0x00007fffffffaab0, filepath="") at EnergyPlusPgm.cc:419:56
    frame #16: 0x00007fffeb91b791 libenergyplusapi.so.24.2.0`EnergyPlusPgm(args=size=2, filepath="") at EnergyPlusPgm.cc:242:25
    frame #17: 0x0000555555602fb2 energyplus`main(argc=2, argv=0x00007fffffffc1d8) at main.cc:60:25
    frame #18: 0x00007fffe562a1ca libc.so.6`__libc_start_call_main(main=(energyplus`main at main.cc:54:1), argc=2, argv=0x00007fffffffc1d8) at libc_start_call_main.h:58:16
    frame #19: 0x00007fffe562a28b libc.so.6`__libc_start_main_impl(main=(energyplus`main at main.cc:54:1), argc=2, argv=0x00007fffffffc1d8, init=<unavailable>, fini=<unavailable>, rtld_fini=<unavailable>, stack_end=0x00007fffffffc1c8) at libc-start.c:360:3
    frame #20: 0x0000555555602d95 energyplus`_start + 37
(lldb) f 7
frame #7: 0x00007fffee8f23c0 libenergyplusapi.so.24.2.0`EnergyPlus::MoistureBalanceEMPDManager::CalcMoistureBalanceEMPD(state=0x00007fffffffaab0, SurfNum=5, SurfTempIn=23, TempZone=23, TempSat=0x00007fffffff92f8) at MoistureBalanceEMPDManager.cc:524:5
   521  
   522      auto const &constr = state.dataConstruction->Construct(surface.Construction);
   523      auto const *mat = dynamic_cast<MaterialEMPD const *>(s_mat->materials(constr.LayerPoint(constr.TotLayers)));
-> 524      assert(mat != nullptr);
   525      if (mat->mu <= 0.0) {
   526          rv_surface =
   527              PsyRhovFnTdbWPb(TempZone, state.dataZoneTempPredictorCorrector->zoneHeatBalance(surface.Zone).airHumRat, state.dataEnvrn->OutBaroPress);

(lldb) p s_mat->materials(constr.LayerPoint(constr.TotLayers))
(EnergyPlus::Material::MaterialBase *) 0x0000555556053460
(lldb) p *(s_mat->materials(constr.LayerPoint(constr.TotLayers)))
(EnergyPlus::Material::MaterialBase) {
  Name = "CP02 CARPET PAD"
  Num = 13
  group = Regular
  isUsed = false
  Roughness = VeryRough
  Conductivity = 0
  Density = 0
  Resistance = 0.2165
  ROnly = true
  NominalR = 0.2165
  SpecHeat = 0
  Thickness = 0
  AbsorpThermal = 0.90000000000000002
  AbsorpThermalInput = 0.90000000000000002
  AbsorpThermalBack = 0
  AbsorpThermalFront = 0
  AbsorpSolar = 0.69999999999999996
  AbsorpSolarInput = 0.69999999999999996
  AbsorpVisible = 0.80000000000000004
  AbsorpVisibleInput = 0.80000000000000004
  AbsorpSolarEMSOverrideOn = false
  AbsorpSolarEMSOverride = 0
  AbsorpThermalEMSOverrideOn = false
  AbsorpThermalEMSOverride = 0
  AbsorpVisibleEMSOverrideOn = false
  AbsorpVisibleEMSOverride = 0
  absorpVarCtrlSignal = Invalid
  absorpThermalVarSchedIdx = 0
  absorpThermalVarFuncIdx = 0
  absorpSolarVarSchedIdx = 0
  absorpSolarVarFuncIdx = 0
  hasEMPD = false
  hasHAMT = false
  hasPCM = false
  Porosity = 0
  VaporDiffus = 0
  WarnedForHighDiffusivity = false
}
jmarrec commented 2 weeks ago

Here is the modified file: moisture_settings_osm2.idf.txt


If I don't add an EMPD for the Inner wall construction, it fatals out because the Core zone has zero EMPD materials in the inside layer.

   ************* GetMoistureBalanceEMPDInput: EMPD properties are not assigned to the inside layer of Surfaces
   **   ~~~   ** ...use Output:Diagnostics,DisplayExtraWarnings; to show more details on individual surfaces.
   ** Severe  ** GetMoistureBalanceEMPDInput: None of the constructions for zone = STORY 1 CORE THERMAL ZONE has an inside layer with EMPD properties
   **   ~~~   ** ..For each zone, the inside layer of at least one construction must have EMPD properties
   ** Severe  ** GetMoistureBalanceEMPDInput: None of the constructions for zone = STORY 2 CORE THERMAL ZONE has an inside layer with EMPD properties
   **   ~~~   ** ..For each zone, the inside layer of at least one construction must have EMPD properties
   **  Fatal  ** GetMoistureBalanceEMPDInput: Errors found getting EMPD material properties, program terminated.

If I try to use two separate materials, it still crashes on line 524.

image

amirroth commented 2 weeks ago

I can look at this, but probably not until Wed.

jmarrec commented 2 weeks ago

There's no rush. I don't think this object is being used much TBH. I'm just saying ideally we should fix it at some point, as a segfault isn't great.