Skip to content

Conversation

@jmarrec
Copy link
Contributor

@jmarrec jmarrec commented Jul 17, 2025

Pull request overview

Description of the purpose of this PR

Pull Request Author

  • Title of PR should be user-synopsis style (clearly understandable in a standalone changelog context)
  • Label the PR with at least one of: Defect, Refactoring, NewFeature, Performance, and/or DoNoPublish
  • Pull requests that impact EnergyPlus code must also include unit tests to cover enhancement or defect repair
  • Author should provide a "walkthrough" of relevant code changes using a GitHub code review comment process
  • If any diffs are expected, author must demonstrate they are justified using plots and descriptions
  • If changes fix a defect, the fix should be demonstrated in plots and descriptions
  • If any defect files are updated to a more recent version, upload new versions here or on DevSupport
  • If IDD requires transition, transition source, rules, ExpandObjects, and IDFs must be updated, and add IDDChange label
  • If structural output changes, add to output rules file and add OutputChange label
  • If adding/removing any LaTeX docs or figures, update that document's CMakeLists file dependencies

Reviewer

  • Perform a Code Review on GitHub
  • If branch is behind develop, merge develop and build locally to check for side effects of the merge
  • If defect, verify by running develop branch and reproducing defect, then running PR and reproducing fix
  • If feature, test running new feature, try creative ways to break it
  • CI status: all green or justified
  • Check that performance is not impacted (CI Linux results include performance check)
  • Run Unit Test(s) locally
  • Check any new function arguments for performance impacts
  • Verify IDF naming conventions and styles, memos and notes and defaults
  • If new idf included, locally check the err file and other outputs

Found in #11109: I wrote an EIO parser and realized that some formats were broken
@jmarrec jmarrec self-assigned this Jul 17, 2025
@jmarrec jmarrec added the Defect Includes code to repair a defect in EnergyPlus label Jul 17, 2025
"! <Building Convection Parameters:Roof>, Area [m2], Perimeter [m], Height [m], Tilt [deg], Azimuth [deg]\n");
print(state.files.eio, Format_8800); // header for roof
static constexpr std::string_view Format_8801("Building Convection Parameters:Roof,{:.2R},{:.2R},{:.2R},{:.2R},{:.2R}");
static constexpr std::string_view Format_8801("Building Convection Parameters:Roof,{:.2R},{:.2R},{:.2R},{:.2R},{:.2R}\n");
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EMSThermochromicWindow/eplusout.eio

 ! <Building Convection Parameters:Roof>, Area [m2], Perimeter [m], Height [m], Tilt [deg], Azimuth [deg]
-Building Convection Parameters:Roof,598.76,97.10,3.28,18.45,120.62! <ZoneInfiltration Airflow Stats Nominal>,Name,Schedule Name,Zone Name, Zone Floor Area {m2}, # Zone Occupants,Design Volume Flow Rate {m3/s},Volume Flow Rate/Floor Area {m3/s-m2},Volume Flow Rate/Exterior Surface Area {m3/s-m2},ACH - Air Changes per Hour,Equation A - Constant Term Coefficient {},Equation B - Temperature Term Coefficient {1/C},Equation C - Velocity Term Coefficient {s/m}, Equation D - Velocity Squared Term Coefficient {s2/m2}
+Building Convection Parameters:Roof,598.76,97.10,3.28,18.45,120.62
+! <ZoneInfiltration Airflow Stats Nominal>,Name,Schedule Name,Zone Name, Zone Floor Area {m2}, # Zone Occupants,Design Volume Flow Rate {m3/s},Volume Flow Rate/Floor Area {m3/s-m2},Volume Flow Rate/Exterior Surface Area {m3/s-m2},ACH - Air Changes per Hour,Equation A - Constant Term Coefficient {},Equation B - Temperature Term Coefficient {1/C},Equation C - Velocity Term Coefficient {s/m}, Equation D - Velocity Squared Term Coefficient {s2/m2}

}
print(state.files.eio,
"{},{:.2R},{},{:.2R},{:.2R}\n",
"Shelf Details,{},{:.2R},{},{:.2R},{:.2R}\n",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DaylightingDeviceShelf/eplusout.eio

 ! <Shelf Details>,Name,View Factor to Outside Shelf,Window Name,Window View Factor to Sky,Window View Factor to Ground
-SHELF,0.29,DAYLIT UPPER WINDOW,0.50,0.21
+Shelf Details,SHELF,0.29,DAYLIT UPPER WINDOW,0.50,0.21

Comment on lines 4043 to +4046
static constexpr std::string_view Format_724("! <{} Airflow Stats Nominal>, {}\n");
print(state.files.eio,
Format_724,
"RefrigerationDoorMixing ",
"RefrigerationDoorMixing",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Avoids double space in header

RefrigeratedWarehouse/eplusout.eio.

-! <RefrigerationDoorMixing  Airflow Stats Nominal>, Name, Zone 1 Name,Zone 2 Name,Door Opening Schedule Name,Door Height {m},Door Area {m2},Door Protection Type
+! <RefrigerationDoorMixing Airflow Stats Nominal>, Name, Zone 1 Name,Zone 2 Name,Door Opening Schedule Name,Door Height {m},Door Area {m2},Door Protection Type
  RefrigerationDoorMixing Airflow Stats Nominal, FREEZER1_SUBFREEZER1,FREEZER_1,SUBFREEZER,FREEZER1DOORSCHEDA,1.800,2.300,StripCurtain

// Write eio data
for (auto &thisDomain : state.dataPlantPipingSysMgr->domains) {
static constexpr std::string_view DomainCellsToEIO("{},{:5},{:5},{:5}\n");
static constexpr std::string_view DomainCellsToEIO("Domain Name,{},{:5},{:5},{:5}\n");
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

5ZoneAirCooledWithCoupledInGradeSlab/eplusout.eio

 ! <Domain Name>, Total Number of Domain Cells, Total Number of Ground Surface Cells, Total Number of Insulation Cells
-INGRADECOUPLEDSLAB, 3380,  120,  182
+Domain Name,INGRADECOUPLEDSLAB, 3380,  120,  182

"Node #,Zone Node Name,Sensible Capacity (W/C),Sensible Capacity (W),Evaporating Temperature (C),DT1 (C),Fan "
"Power (W),Heater (W),Defrost (W), Air Flow Rate (m3/s)");
static constexpr std::string_view Format_152("! <Air Chiller Load>, Air Chiller Name, Air Chiller Number, Zone Name,");
static constexpr std::string_view Format_152("! <Air Chiller Load>, Air Chiller Name, Air Chiller Number, Zone Name");
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RefrigeratedWarehouse/eplusout.eio

Most parsers (eg pandas) would assume there's an extra unnamed column at the end due to the extra comma.

"Set Name, Front Side Beam-Beam Solar Transmittance, Back Side Beam-Beam Solar Transmittance, "
"Front Side Beam-Beam Solar Reflectance, Back Side Beam-Beam Solar Reflectance, Front Side "
"Beam-Diffuse Solar Transmittance, Back Side Beam-Diffuse Solar Transmittance, , Front Side "
"Beam-Diffuse Solar Transmittance, Back Side Beam-Diffuse Solar Transmittance, Front Side "
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EquivalentLayerWindow/eplusout.eio

-! <WindowMaterial:Glazing:EquivalentLayer>, Material Name, Optical Data Type, Spectral Data Set Name, Front Side Beam-Beam Solar Transmittance, Back Side Beam-Beam Solar Transmittance, Front Side Beam-Beam Solar Reflectance, Back Side Beam-Beam Solar Reflectance, Front Side Beam-Diffuse Solar Transmittance, Back Side Beam-Diffuse Solar Transmittance, , Front Side Beam-Diffuse Solar Reflectance, Back Side Beam-Diffuse Solar Reflectance, Diffuse-Diffuse Solar Transmittance, Front Side Diffuse-Diffuse Solar Reflectance, Back Side Diffuse-Diffuse Solar Reflectance, Infrared Transmittance, Front Side Infrared Emissivity, Back Side Infrared Emissivity
+! <WindowMaterial:Glazing:EquivalentLayer>, Material Name, Optical Data Type, Spectral Data Set Name, Front Side Beam-Beam Solar Transmittance, Back Side Beam-Beam Solar Transmittance, Front Side Beam-Beam Solar Reflectance, Back Side Beam-Beam Solar Reflectance, Front Side Beam-Diffuse Solar Transmittance, Back Side Beam-Diffuse Solar Transmittance, Front Side Beam-Diffuse Solar Reflectance, Back Side Beam-Diffuse Solar Reflectance, Diffuse-Diffuse Solar Transmittance, Front Side Diffuse-Diffuse Solar Reflectance, Back Side Diffuse-Diffuse Solar Reflectance, Infrared Transmittance, Front Side Infrared Emissivity, Back Side Infrared Emissivity

Extract:

-Back Side Beam-Diffuse Solar Transmittance, , Front Side Beam-Diffuse Solar Reflectance
+Back Side Beam-Diffuse Solar Transmittance, Front Side Beam-Diffuse Solar Reflectance

@jmarrec jmarrec requested a review from Myoldmopar July 17, 2025 09:21
print(state.files.eio, Format_722);
}
if (state.dataWaterThermalTanks->numChilledWaterMixed > 0) {
if ((state.dataWaterThermalTanks->numChilledWaterMixed > 0) || (state.dataWaterThermalTanks->numChilledWaterStratified > 0)) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

5ZoneVAV-ChilledWaterStorage-Stratified/eplusout.eio

The Chilled Water Tank Information value line is issued, but not the header.

$ rg "Chilled Water Tank" 5ZoneVAV-ChilledWaterStorage-Stratified/eplusout.eio
197:! <Chilled Water Tank Stratified Node Information>,Node Number,Height {m},Volume {m3},UA {W/K},Number Of Inlets,Number Of Outlets
399:Chilled Water Tank Stratified Node Information,1,1.3333,8.3333,9.0331,1,1
400:Chilled Water Tank Stratified Node Information,2,1.3333,8.3333,5.9081,0,0
401:Chilled Water Tank Stratified Node Information,3,1.3333,8.3333,5.9081,0,0
402:Chilled Water Tank Stratified Node Information,4,1.3333,8.3333,5.9081,0,0
403:Chilled Water Tank Stratified Node Information,5,1.3333,8.3333,5.9081,0,0
404:Chilled Water Tank Stratified Node Information,6,1.3333,8.3333,9.0331,1,1
416:Chilled Water Tank Information,ThermalStorage:ChilledWater:Stratified,CHILLED WATER STORAGE TANK 1,50.0000,3.0227E-003,5.0000E-003

"Parallel Sims");
print(state.files.eio, "{}\n", ThreadingHeader);
static constexpr std::string_view ThreadReport("Program Control:Threads/Parallel Sims, {},{}, {}, {}, {}, {}, {}, {}\n");
static constexpr std::string_view ThreadReport("Program Control Information:Threads/Parallel Sims, {},{}, {}, {}, {}, {}, {}, {}\n");
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Align with header.

Example 1ZoneUncontrolled/eplusout.eio

 ! <Program Control Information:Threads/Parallel Sims>, Threading Supported,Maximum Number of Threads, Env Set Threads (OMP_NUM_THREADS), EP Env Set Threads (EP_OMP_NUM_THREADS), IDF Set Threads, Number of Threads Used (Interior Radiant Exchange), Number Nominal Surfaces, Number Parallel Sims
-Program Control:Threads/Parallel Sims, No,1, N/A, N/A, N/A, N/A, N/A, N/A
+Program Control Information:Threads/Parallel Sims, No,1, N/A, N/A, N/A, N/A, N/A, N/A

@github-actions
Copy link

⚠️ Regressions detected on macos-14 for commit ca5e4c5

Regression Summary
  • EIO: 11
  • Table String Diffs: 2
  • Table Big Diffs: 1

@github-actions
Copy link

⚠️ Regressions detected on macos-14 for commit 63ee844

Regression Summary
  • EIO: 793
  • Table String Diffs: 2
  • Table Big Diffs: 1

@jmarrec
Copy link
Contributor Author

jmarrec commented Jul 17, 2025

EIO diffs in all files are expected

--- 
+++ 
@@ -551,5 +551,5 @@
 -different, but equivalent numeric tokens found in line-
 -different, but equivalent numeric tokens found in line-
 ! , Threading Supported,Maximum Number of Threads, Env Set Threads (OMP_NUM_THREADS), EP Env Set Threads (EP_OMP_NUM_THREADS), IDF Set Threads, Number of Threads Used (Interior Radiant Exchange), Number Nominal Surfaces, Number Parallel Sims
-Program Control:Threads/Parallel Sims, No,1, N/A, N/A, N/A, N/A, N/A, N/A
+Program Control Information:Threads/Parallel Sims, No,1, N/A, N/A, N/A, N/A, N/A, N/A
 End of Data

Copy link
Member

@Myoldmopar Myoldmopar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems like an easy set of changes. My one thought is that we should have a couple worker functions to send data to the EIO instead of directly printing from it. It would be nice to not have to carefully format everything on each of these calls, and instead just pass a vector of stuff in and let it handle it. I realize there may be complications, but it would be nice to centralize it into a very minimal set of workers. That's for later, thanks @jmarrec

@Myoldmopar
Copy link
Member

I've got no issue with this cleanup. CI is happy and I think I'll just drop this right in.

@Myoldmopar Myoldmopar merged commit 403d65c into develop Jul 22, 2025
9 checks passed
@Myoldmopar Myoldmopar deleted the eio_fixes branch July 22, 2025 17:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Defect Includes code to repair a defect in EnergyPlus

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants