Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Segfault with MoisturePenetrationDepth #10777

Open
1 of 3 tasks
jmarrec opened this issue Oct 1, 2024 · 14 comments · Fixed by #10781
Open
1 of 3 tasks

Segfault with MoisturePenetrationDepth #10777

jmarrec opened this issue Oct 1, 2024 · 14 comments · Fixed by #10781

Comments

@jmarrec
Copy link
Contributor

jmarrec commented Oct 1, 2024

Issue overview

An OpenStudio-resources regression test that uses MoisturePenetrationDepth:

  • Was working on 24.1.0
  • Fails when transitioned to 24.2.0 (There is ZERO difference between the two files, aside from the Version object)

Details

Some additional details for this issue (if relevant):

  • Platform (Operating system, version): Ubuntu 24.04
  • Version of EnergyPlus (if using an intermediate build, include SHA): v24.2.0

Checklist

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

@jmarrec
Copy link
Contributor Author

jmarrec commented Oct 1, 2024

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
Copy link
Contributor Author

jmarrec commented Oct 1, 2024

Seems like @amirroth did a large refactor around that line: 268cdbb#diff-de4da079faf74cbae6f81f415fd5cdb57a88db449e51c118b2929b949be27517R257

@jmarrec
Copy link
Contributor Author

jmarrec commented Oct 1, 2024

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
Copy link
Contributor Author

jmarrec commented Oct 1, 2024

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
Copy link
Collaborator

amirroth commented Oct 1, 2024

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
Copy link
Contributor Author

jmarrec commented Oct 1, 2024

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

for (auto &e : state.dataSurface->Surface)
e.HeatTransferAlgorithm = state.dataHeatBal->OverallHeatTransferSolutionAlgo;

@amirroth
Copy link
Collaborator

amirroth commented Oct 1, 2024

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

for (auto &e : state.dataSurface->Surface)
e.HeatTransferAlgorithm = state.dataHeatBal->OverallHeatTransferSolutionAlgo;

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
Copy link
Member

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
Copy link
Member

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
Copy link
Contributor Author

jmarrec commented Oct 7, 2024

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
Copy link
Contributor Author

jmarrec commented Oct 7, 2024

It crashes here:

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 jmarrec reopened this Oct 7, 2024
@jmarrec
Copy link
Contributor Author

jmarrec commented Oct 7, 2024

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
Copy link
Collaborator

amirroth commented Oct 7, 2024

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

@jmarrec
Copy link
Contributor Author

jmarrec commented Oct 7, 2024

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants