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

Indoor living wall module #10385

Merged
merged 51 commits into from
Feb 20, 2024
Merged

Indoor living wall module #10385

merged 51 commits into from
Feb 20, 2024

Conversation

LipingWang
Copy link
Contributor

@LipingWang LipingWang commented Jan 29, 2024

Pull request overview

Indoor living walls provide natural cooling effects through plant evapotranspiration (ET) in the built environment and contribute to improving indoor environmental quality. The new module "IndoorLivingWall" simulates the thermal performance of indoor living wall systems. The module directly connects with the inside surface heat balance, zone air heat balance, and zone air moisture balance in EnergyPlus.

A series of tests have been conducted to illustrate the effects of indoor living walls on building cooling loads. The results shown in this pull request are for a south perimeter zone of a five zone building served by an ideal load system. A 30 m2 indoor living wall was placed 1.5 m away from the south window.
This figure shows the total cooling rate for the living wall scenario and the baseline on July 16. Total cooling rates were reduced by 9.0% on July 16 over 24 hours for the indoor living wall scenario.
image

This figure illustrates the daylighting and LED lighting intensity levels. Our targeted lighting intensity is 32.5 μmol/(m2·s). It can be observed that the LED operates as supplementary lights to daylighting based on the sensing data at a reference point.
image

Please refer to Engineering Reference for methodology and heat and mass balance equations.

NOTE: ENHANCEMENTS MUST FOLLOW A SUBMISSION PROCESS INCLUDING A FEATURE PROPOSAL AND DESIGN DOCUMENT PRIOR TO SUBMITTING CODE

Pull Request Author

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

  • Title of PR should be user-synopsis style (clearly understandable in a standalone changelog context)
  • NewFeature
  • 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

This will not be exhaustively relevant to every PR.

  • 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

@mjwitte mjwitte added IDDChange Code changes impact the IDD file (cannot be merged after IO freeze) NewFeature Includes code to add a new feature to EnergyPlus labels Jan 29, 2024
@Myoldmopar
Copy link
Member

OK, I'm going to dig in, as I think this is one of maybe two PRs that are going to drop before we freeze I/O. If anyone else has thoughts on this, feel free to comment today.

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.

Alright, so after looking it over, I think my biggest concern is how the actuated evapotranspiration is handled. I think we should be consistent with other actuated things in EnergyPlus, where we, by default, just use an internal calculation, and if the user is overriding the value with an actuator, just use that overridden value. I don't think we need the extra input to say it is specifically being actuated.

My second biggest concern was the use of "data-driven" around the input, docs, and code. But I think that will go away if we remove that extra input option.

@LipingWang thank you for this contribution! Even with the changes I've requested, you are like 98% of the way there. Let me know if you want to chat about my requests. And if you are totally out of time and unable to make any changes, we can discuss options there as well.

@mjwitte let me know if you disagree with any of my review comments!

\subsection{Indoor Living Wall}\label{indoor-living-wall}

An actuator called ``IndoorLivingWall'' is available with a control type called ``ETCaldatadriven'' (in \unit{\kilo\gram\per\square\meter\per\second}). This allows you to set the evapotranspiration rates for each IndoorLivingWall object directly using EMS, Python PlugIns, or Python API. The unique identifier is the name of the IndoorLivingWall input object.

Copy link
Member

Choose a reason for hiding this comment

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

I'm not quite sure about the ETCaldatadriven key. Is there something more clear we can use? "Evapotranspiration Rate"? This actuator is intended to be available for more than just a specific data driven function, right?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thank you! Update to ET Rate

Copy link
Member

Choose a reason for hiding this comment

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

I am going to change this to the full Evapotranspiration Rate for control type. One day EnergyPlus may be used for space-applications, and I don't want to confuse the acronym ET. OK, joking there, but really I think it's better to just spell out evapotranspiration here.


\begin{equation}
\begin{array}{l}{\rho_{air}}{V_z}{C_W}{\left( {\delta t} \right)^{ - 1}}\left( {W_z^t - W_z^{t - \delta t}} \right) = \sum\limits_{i = 1}^{{N_{sl}}} {k{g_{mas{s_{sched\;load}}}}} + kg_{mass_{et}} \\ + \sum\limits_{i = 1}^{{N_{surfaces}}} {{A_i}{h_{mi}}} {\rho_{ai{r_z}}}\left( {{W_{surf{s_i}}} - W_z^t} \right)+ \sum\limits_{i = 1}^{{N_{zones}}} {{{\dot m}_i}} \left( {{W_{zi}} - W_z^t} \right) + {{\dot m}_{\inf }}\left( {{W_\infty } - W_z^t} \right) + {{\dot m}_{sys}}\left( {{W_{\sup }} - W_z^t} \right)\end{array}
\end{equation}
Copy link
Member

Choose a reason for hiding this comment

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

These feel....more complex than necessary. I can't tell exactly why, but these equations should be pretty simple looking, even in LaTeX. Don't worry about changing them for now.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Please let me know if you have some suggestions on this. Thank you!

Copy link
Member

Choose a reason for hiding this comment

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

I pulled it and started tweaking it then realized I was distracting myself and snapped out of it. I'm leaving it :) The one thing I noticed quickly is that it says "kg_mass_schedload", and I'm not sure you need the word mass when it is on a kg variable. Anyway, leave it.

@@ -22668,7 +22670,76 @@ OtherEquipment,
\type alpha
\retaincase
\default General

IndoorLivingWall,
Copy link
Member

Choose a reason for hiding this comment

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

I think we should have a blank line between objects in the IDD. I don't know that any of our parsers or dev/scripts rely on that, but it should be consistent anyway.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

added

\type real
\minimum 0.0
\maximum 1.0
\default 0.6
Copy link
Member

Choose a reason for hiding this comment

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

Blank line at the end of the object.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

updated

@@ -246,7 +247,8 @@ void ManageHVAC(EnergyPlusData &state)
}
}
}

// LW to do check and test for the right position
Copy link
Member

Choose a reason for hiding this comment

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

This is fine, but you don't have to tag with LW. We have Git history to track who did what.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

removed this comment.

state.dataIPShortCut->cNumericFieldNames(1),
state.dataIPShortCut->rNumericArgs(1)));
ErrorsFound = true;
}
Copy link
Member

Choose a reason for hiding this comment

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

Is there a worker function you can reuse for these invalid field errors?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Is there an existing function I can use or should I create a new function in utility? Thank you!

Copy link
Member

Choose a reason for hiding this comment

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

I may look into it with my final tweaks here, but it's fine for now.

} break;
case ETCalculationMethod::DataDriven: {
// set with EMS value if being called for.
if (ig.EMSETCalOverrideOn) {
Copy link
Member

Choose a reason for hiding this comment

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

And actually -- you don't have to have a separate input option for actuated ET. You can just default to one of the built-in options, and if the user is overriding it with an actuator, just use the actuated value. This is what we do all over the code. We can discuss this more for sure.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It makes sense! I removed the input option for data-driven

ETRate = (1 / hfg) * (slopepat * (In - G) + (2 * LAI * rhoair * CpAir * ZoneVPD) / ra) /
(slopepat + psyconst * (1 + rs / ra)); // Stanghellini ET model
return ETRate; // mm/s; kg/(m2s)
}
Copy link
Member

Choose a reason for hiding this comment

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

These two functions look too similar. I think you can collapse almost all of the contents into a single function and just have a switch to behave differently.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thank you! Combined into one function.

Copy link
Member

Choose a reason for hiding this comment

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

So both functions were identical?

{
new (this) IndoorGreenData();
}
};
Copy link
Member

Choose a reason for hiding this comment

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

👍

thisindoorgreen.ETRate =
IndoorGreen::ETStanghellini(*state, ZonePreTemp, ZonePreHum, thisindoorgreen.ZCO2, thisindoorgreen.ZPPFD, thisindoorgreen.ZVPD, LAI);
EXPECT_EQ(thisindoorgreen.ETRate, 0.0);
}
Copy link
Member

Choose a reason for hiding this comment

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

This is a fine set of unit tests, although coverage could be better. Your new test file IDF covers 54% of the code here, and your unit tests cover 28% -- although many of the missed lines are error conditions. You could consider whether to add some more cases to the unit tests here to cover more of the code, but it doesn't have to be a priority right now.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Updated the unit test. Please let me know if you have addtional test in mind I can add in. Thank you!

@LipingWang
Copy link
Contributor Author

LipingWang commented Feb 19, 2024

Alright, so after looking it over, I think my biggest concern is how the actuated evapotranspiration is handled. I think we should be consistent with other actuated things in EnergyPlus, where we, by default, just use an internal calculation, and if the user is overriding the value with an actuator, just use that overridden value. I don't think we need the extra input to say it is specifically being actuated.

My second biggest concern was the use of "data-driven" around the input, docs, and code. But I think that will go away if we remove that extra input option.

@LipingWang thank you for this contribution! Even with the changes I've requested, you are like 98% of the way there. Let me know if you want to chat about my requests. And if you are totally out of time and unable to make any changes, we can discuss options there as well.

@mjwitte let me know if you disagree with any of my review comments!

Thank you very much for your suggestion! Now override the ET rates through SetupEMSActuator without extra input (data-driven option). Please let me know addtional changes required for.

@mjwitte
Copy link
Contributor

mjwitte commented Feb 20, 2024

@LipingWang There's a failed unit test here.

@mjwitte
Copy link
Contributor

mjwitte commented Feb 20, 2024

@LipingWang Fix added. I learned something new today.

@LipingWang
Copy link
Contributor Author

@LipingWang Fix added. I learned something new today.

Thank you very much for the quick fix!

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.

@LipingWang thanks for fixing things up! I've made a few comments, but I am going to go ahead and make those changes myself and get this wrapped up. If it goes smoothly, and I can get tests passing and happy, this should be ready to merge soon.

Do you have changes locally that I should wait for you to push before making any of my own?

\subsection{Indoor Living Wall}\label{indoor-living-wall}

An actuator called ``IndoorLivingWall'' is available with a control type called ``ETCaldatadriven'' (in \unit{\kilo\gram\per\square\meter\per\second}). This allows you to set the evapotranspiration rates for each IndoorLivingWall object directly using EMS, Python PlugIns, or Python API. The unique identifier is the name of the IndoorLivingWall input object.

Copy link
Member

Choose a reason for hiding this comment

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

I am going to change this to the full Evapotranspiration Rate for control type. One day EnergyPlus may be used for space-applications, and I don't want to confuse the acronym ET. OK, joking there, but really I think it's better to just spell out evapotranspiration here.


\begin{equation}
\begin{array}{l}{\rho_{air}}{V_z}{C_W}{\left( {\delta t} \right)^{ - 1}}\left( {W_z^t - W_z^{t - \delta t}} \right) = \sum\limits_{i = 1}^{{N_{sl}}} {k{g_{mas{s_{sched\;load}}}}} + kg_{mass_{et}} \\ + \sum\limits_{i = 1}^{{N_{surfaces}}} {{A_i}{h_{mi}}} {\rho_{ai{r_z}}}\left( {{W_{surf{s_i}}} - W_z^t} \right)+ \sum\limits_{i = 1}^{{N_{zones}}} {{{\dot m}_i}} \left( {{W_{zi}} - W_z^t} \right) + {{\dot m}_{\inf }}\left( {{W_\infty } - W_z^t} \right) + {{\dot m}_{sys}}\left( {{W_{\sup }} - W_z^t} \right)\end{array}
\end{equation}
Copy link
Member

Choose a reason for hiding this comment

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

I pulled it and started tweaking it then realized I was distracting myself and snapped out of it. I'm leaving it :) The one thing I noticed quickly is that it says "kg_mass_schedload", and I'm not sure you need the word mass when it is on a kg variable. Anyway, leave it.

ET=1/\lambda \cdot (\Delta \cdot(I_n-G)+(2 \cdot Cp LAI \cdot Cp \rho_a \cdot Cp \cdot VPD)/r_a )/(\Delta+\gamma \cdot (1+r_s/r_a ) )
\end{equation}

Users can also define a customized ET model through Energy Management System (EMS) objects, Python PlugIns objects, and Python API with the indoor living wall model. Please refer the Application Guide for EMS.
Copy link
Member

Choose a reason for hiding this comment

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

I want to tweak this phrase a little.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thank you!

\object-list ScheduleNames
\note units in Schedule should be fraction applied to design level of other equipment, generally (0.0 - 1.0)
A4 , \field ET Calculation Method
\note Model selection for caclulating evapotranspiration of indoor greenery system.
Copy link
Member

Choose a reason for hiding this comment

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

I think it might be worth a note here about the actuator.

state.dataIPShortCut->cNumericFieldNames(1),
state.dataIPShortCut->rNumericArgs(1)));
ErrorsFound = true;
}
Copy link
Member

Choose a reason for hiding this comment

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

I may look into it with my final tweaks here, but it's fine for now.

ErrorsFound = true;
}
if (state.dataGlobal->AnyEnergyManagementSystemInModel) {
SetupEMSActuator(state, "IndoorLivingWall", ig.Name, "ET Rate", "[kg_m2s]", ig.EMSETCalOverrideOn, ig.EMSET);
Copy link
Member

Choose a reason for hiding this comment

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

I'm changing the control type name here.

default:
break;
}
if (ig.EMSETCalOverrideOn) {
Copy link
Member

Choose a reason for hiding this comment

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

This should be done before the switch statement above, that way if the user is overriding the value, it won't waste calculation time. Also...what is happening here if you don't use EMS...is it failing?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Agreed that save time to move in front of switch statement. Run successfully with PenmanMonteith and Stanghellini methods.

ETRate = (1 / hfg) * (slopepat * (In - G) + (2 * LAI * rhoair * CpAir * ZoneVPD) / ra) /
(slopepat + psyconst * (1 + rs / ra)); // Stanghellini ET model
return ETRate; // mm/s; kg/(m2s)
}
Copy link
Member

Choose a reason for hiding this comment

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

So both functions were identical?

@LipingWang
Copy link
Contributor Author

@LipingWang thanks for fixing things up! I've made a few comments, but I am going to go ahead and make those changes myself and get this wrapped up. If it goes smoothly, and I can get tests passing and happy, this should be ready to merge soon.

Do you have changes locally that I should wait for you to push before making any of my own?

Thank you very much for wrapping this up! No additional changes on my side.

@LipingWang
Copy link
Contributor Author

@Myoldmopar
PenmanMonteith and Stanghellini models have a similar format but are not the same. Sharing the same ET function makes sense here.

@Myoldmopar
Copy link
Member

@LipingWang if you take a look at my last commit 8354df2, you'll see I:

  • Cleaned up the actuator name in the EMS doc
  • Cleaned up the text in the eng ref
  • Renamed the field to Evapotranspiration Calculation Method in the IDD and added a note about the actuation
  • Renamed the actuator control type in the C++ code
  • Minor cleanup in the InitIndoorGreen function
  • Cleaned up the ET calculation block inside ETModel function
  • Removed the ZoneCO2 argument in the ETBase function because it was showing as unused.

Everything is building and testing happily for me now, so I plan on merging this unless anyone sees anything else.

FYI @mjwitte @LipingWang

@LipingWang
Copy link
Contributor Author

@LipingWang if you take a look at my last commit 8354df2, you'll see I:

  • Cleaned up the actuator name in the EMS doc
  • Cleaned up the text in the eng ref
  • Renamed the field to Evapotranspiration Calculation Method in the IDD and added a note about the actuation
  • Renamed the actuator control type in the C++ code
  • Minor cleanup in the InitIndoorGreen function
  • Cleaned up the ET calculation block inside ETModel function
  • Removed the ZoneCO2 argument in the ETBase function because it was showing as unused.

Everything is building and testing happily for me now, so I plan on merging this unless anyone sees anything else.

FYI @mjwitte @LipingWang

@Myoldmopar Thank you very much!

@Myoldmopar
Copy link
Member

Decent isn't picking it up, but I'm getting it passing all green here, including no regressions. I am going to merge. Thanks @LipingWang. If we encounter any issues after I/O freeze, we can address things before 24.1 goes out next month. Thanks for fixing things and reviewing @mjwitte

@Myoldmopar Myoldmopar merged commit b21f3f5 into NREL:develop Feb 20, 2024
4 checks passed
@LipingWang
Copy link
Contributor Author

Decent isn't picking it up, but I'm getting it passing all green here, including no regressions. I am going to merge. Thanks @LipingWang. If we encounter any issues after I/O freeze, we can address things before 24.1 goes out next month. Thanks for fixing things and reviewing @mjwitte

@Myoldmopar @mjwitte @amirroth @JasonGlazer Will do! Thank you so much for all the comments and support!

@JasonGlazer
Copy link
Contributor

@LipingWang I have addressed the IDF Editor issue here:

#10414

Please take a look.

Comment on lines +22730 to +22732
\units umol_m2s
\type real
\ip-units umol_m2s
Copy link
Contributor

Choose a reason for hiding this comment

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

I noticed it because OpenStudio's parser choked on it.

I find this units confusing the way it's written, and inconsistent with the rest of units used throughout the IDD. We use stuff like W/(m3/s) and W/(gal/min) which is much clearer. I suggest changing it.

Copy link
Contributor

Choose a reason for hiding this comment

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

I see this has been fixed via 4f36bf8 already by @JasonGlazer (probably due to IDF Editor)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I noticed it because OpenStudio's parser choked on it.

I find this units confusing the way it's written, and inconsistent with the rest of units used throughout the IDD. We use stuff like W/(m3/s) and W/(gal/min) which is much clearer. I suggest changing it.

@jmarrec umol_m2s is the unit for photosynthetic photon flux density (PPFD). It represents how many PAR photons are landing on a specific area. It is used for lighting intensity in indoor growing spaces.

Copy link
Contributor

Choose a reason for hiding this comment

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

@LipingWang we understand the intention of the units but we changed "umol_m2s" to "umol/m-s" to be consistent with the way other units are expressed in EnergyPlus IDD. I did this already as part of the IDF Editor changes #10414 which have already been merged.

Copy link
Contributor

Choose a reason for hiding this comment

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

New Xetex warnings poped up due to this PR

This is XeTeX, Version 3.14159265-2.6-0.999991 (TeX Live 2019/Debian) (preloaded format=xelatex)
 restricted \write18 enabled.
entering extended mode
engineering-reference Pass 3: TOC OK, Number of entries in TOC = 65
[ 92%][24/26] Running utility command for zPDF_EngineeringReference
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:129::Undefined control sequence.l.129 \(C\) is the conversion factor from \unit {\mega\watt\per\square\meter}... The control sequence at the end of the top line of your error message was never \def'ed. If you have misspelled it (e.g., `\hobx'), type `I' and the correct spelling (e.g., `I\hbox'). Otherwise just continue, and I'll forget about whatever was undefined.]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:None::Undefined control sequence.\mega ->\ERROR]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:None::Undefined control sequence.\watt ->\ERROR]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:129::Missing $ inserted.<inserted text> $ l.129 ...n factor from \unit{\mega\watt\per\square \meter} to \unit{\micro\mo... I've inserted a begin-math/end-math symbol since I think you left one out. Proceed, with fingers crossed.]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:None::Undefined control sequence.\meter ->\ERROR]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:129::Extra }, or forgotten $.l.129 ...r from \unit{\mega\watt\per\square\meter} to \unit{\micro\mole\per\... I've deleted a group-closing symbol because it seems to be spurious, as in `$x}$'. But perhaps the } is legitimate and you forgot something else, as in `\hbox{$x}'. In such cases the way to recover is to insert both the forgotten and the deleted material, e.g., by typing `I$}'.]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:129::Undefined control sequence.l.129 ...nit{\mega\watt\per\square\meter} to \unit {\micro\mole\per\square\me... The control sequence at the end of the top line of your error message was never \def'ed. If you have misspelled it (e.g., `\hobx'), type `I' and the correct spelling (e.g., `I\hbox'). Otherwise just continue, and I'll forget about whatever was undefined.]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:None::Undefined control sequence.\micro ->\ERROR]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:None::Undefined control sequence.\mole ->\ERROR]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:None::Undefined control sequence.\meter ->\ERROR]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:None::Undefined control sequence.\second ->\ERROR]
[LATEXERROR::doc/engineering-reference/src/simulation-models-encyclopedic-reference-003/indoor-living-wall.tex:130::Missing $ inserted.<inserted text> $ l.130]

Copy link
Contributor

@jmarrec jmarrec Mar 6, 2024

Choose a reason for hiding this comment

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

image

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I am wondering if this is related to the Latex compiler. I am following the guide for "Building EnergyPlus" and using MiKTeX and the pdf seems Ok. I am happy to test this using different Latex if you like.

Copy link
Contributor

Choose a reason for hiding this comment

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

I think I'm using a slightly older Xetex and siunits package than what CI is using (since the documentation workflows do not throw the same warnings)

Copy link
Contributor

Choose a reason for hiding this comment

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

[ 61%][16/26] Running utility command for zPDF_EMSApplicationGuide
[LATEXERROR::doc/ems-application-guide/src/ems-actuators/internal-gains-and-exterior-lights.tex:None::Undefined control sequence.\kilo ->\ERROR]
[LATEXERROR::doc/ems-application-guide/src/ems-actuators/internal-gains-and-exterior-lights.tex:None::Undefined control sequence.\gram ->\ERROR]
[LATEXERROR::doc/ems-application-guide/src/ems-actuators/internal-gains-and-exterior-lights.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/ems-application-guide/src/ems-actuators/internal-gains-and-exterior-lights.tex:33::Missing $ inserted.<inserted text> $ l.33 ...ion Rate'' (in \unit{\kilo\gram\per\square \meter\per\second}). This ... I've inserted a begin-math/end-math symbol since I think you left one out. Proceed, with fingers crossed.]
[LATEXERROR::doc/ems-application-guide/src/ems-actuators/internal-gains-and-exterior-lights.tex:None::Undefined control sequence.\meter ->\ERROR]
[LATEXERROR::doc/ems-application-guide/src/ems-actuators/internal-gains-and-exterior-lights.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/ems-application-guide/src/ems-actuators/internal-gains-and-exterior-lights.tex:None::Undefined control sequence.\second ->\ERROR]
[LATEXERROR::doc/ems-application-guide/src/ems-actuators/internal-gains-and-exterior-lights.tex:33::Extra }, or forgotten $.l.33 ...it{\kilo\gram\per\square\meter\per\second} ). This allows you to set ... I've deleted a group-closing symbol because it seems to be spurious, as in `$x}$'. But perhaps the } is legitimate and you forgot something else, as in `\hbox{$x}'. In such cases the way to recover is to insert both the forgotten and the deleted material, e.g., by typing `I$}'.]
[LATEXERROR::doc/ems-application-guide/src/ems-actuators/internal-gains-and-exterior-lights.tex:34::Missing $ inserted.<inserted text> $ l.34]

Copy link
Contributor

Choose a reason for hiding this comment

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

[100%][26/26] Running utility command for zPDF_InputOutputReference
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2383::Undefined control sequence.l.2383 ...flux density (PPFD) in the unit of \unit {\micro\mole\per\square\me... The control sequence at the end of the top line of your error message was never \def'ed. If you have misspelled it (e.g., `\hobx'), type `I' and the correct spelling (e.g., `I\hbox'). Otherwise just continue, and I'll forget about whatever was undefined.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\micro ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\mole ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2383::Missing $ inserted.<inserted text> $ l.2383 ...the unit of \unit{\micro\mole\per\square \meter\per\second} for ind... I've inserted a begin-math/end-math symbol since I think you left one out. Proceed, with fingers crossed.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\meter ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\second ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2383::Extra }, or forgotten $.l.2383 ...\micro\mole\per\square\meter\per\second} for indoor living wall sy... I've deleted a group-closing symbol because it seems to be spurious, as in `$x}$'. But perhaps the } is legitimate and you forgot something else, as in `\hbox{$x}'. In such cases the way to recover is to insert both the forgotten and the deleted material, e.g., by typing `I$}'.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2384::Missing $ inserted.<inserted text> $ l.2384]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2387::Undefined control sequence.l.2387 ...e estimated one-sided leaf area {[}\unit {\square\meter}{]} of an i... The control sequence at the end of the top line of your error message was never \def'ed. If you have misspelled it (e.g., `\hobx'), type `I' and the correct spelling (e.g., `I\hbox'). Otherwise just continue, and I'll forget about whatever was undefined.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2387::Missing $ inserted.<inserted text> $ l.2387 ...ted one-sided leaf area {[}\unit{\square \meter}{]} of an indoor li... I've inserted a begin-math/end-math symbol since I think you left one out. Proceed, with fingers crossed.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\meter ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2387::Extra }, or forgotten $.l.2387 ...-sided leaf area {[}\unit{\square\meter} {]} of an indoor living wa... I've deleted a group-closing symbol because it seems to be spurious, as in `$x}$'. But perhaps the } is legitimate and you forgot something else, as in `\hbox{$x}'. In such cases the way to recover is to insert both the forgotten and the deleted material, e.g., by typing `I$}'.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2388::Missing $ inserted.<inserted text> $ l.2388]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2391::Undefined control sequence.l.2391 ...ED grow light. PPFD is measured in \unit {\micro\mole\per\square\me... The control sequence at the end of the top line of your error message was never \def'ed. If you have misspelled it (e.g., `\hobx'), type `I' and the correct spelling (e.g., `I\hbox'). Otherwise just continue, and I'll forget about whatever was undefined.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\micro ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\mole ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2391::Missing $ inserted.<inserted text> $ l.2391 ...measured in \unit{\micro\mole\per\square \meter\per\second} which e... I've inserted a begin-math/end-math symbol since I think you left one out. Proceed, with fingers crossed.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\meter ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\second ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2391::Extra }, or forgotten $.l.2391 ...\micro\mole\per\square\meter\per\second} which establishes exactly... I've deleted a group-closing symbol because it seems to be spurious, as in `$x}$'. But perhaps the } is legitimate and you forgot something else, as in `\hbox{$x}'. In such cases the way to recover is to insert both the forgotten and the deleted material, e.g., by typing `I$}'.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2392::Missing $ inserted.<inserted text> $ l.2392]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2395::Undefined control sequence.l.2395 ...defines nominal total LED power {[}\unit {\W}{]} for an indoor livi... The control sequence at the end of the top line of your error message was never \def'ed. If you have misspelled it (e.g., `\hobx'), type `I' and the correct spelling (e.g., `I\hbox'). Otherwise just continue, and I'll forget about whatever was undefined.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\W ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2432::Undefined control sequence.l.2432 ...ng Wall Evapotranspiration Rate {[}\unit {\kilo\gram\per\square\met... The control sequence at the end of the top line of your error message was never \def'ed. If you have misspelled it (e.g., `\hobx'), type `I' and the correct spelling (e.g., `I\hbox'). Otherwise just continue, and I'll forget about whatever was undefined.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\kilo ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\gram ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2432::Missing $ inserted.<inserted text> $ l.2432 ...tion Rate {[}\unit{\kilo\gram\per\square \meter\per\second}{]} I've inserted a begin-math/end-math symbol since I think you left one out. Proceed, with fingers crossed.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\meter ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\second ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2432::Extra }, or forgotten $.l.2432 ...{\kilo\gram\per\square\meter\per\second} {]} I've deleted a group-closing symbol because it seems to be spurious, as in `$x}$'. But perhaps the } is legitimate and you forgot something else, as in `\hbox{$x}'. In such cases the way to recover is to insert both the forgotten and the deleted material, e.g., by typing `I$}'.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::LaTeX Error: Command \item invalid in math mode.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::LaTeX Error: Something's wrong--perhaps a missing \item.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::LaTeX Error: Something's wrong--perhaps a missing \item.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2434::Undefined control sequence.l.2434 ...vapotranspiration Per Unit Area {[}\unit {W/m^2}{]} The control sequence at the end of the top line of your error message was never \def'ed. If you have misspelled it (e.g., `\hobx'), type `I' and the correct spelling (e.g., `I\hbox'). Otherwise just continue, and I'll forget about whatever was undefined.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::LaTeX Error: Command \item invalid in math mode.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2436::Missing $ inserted.<inserted text> $ l.2436 Z one,Average,Indoor Living Wall LED Operational PPFD {[}\unit{\micr... I've inserted a begin-math/end-math symbol since I think you left one out. Proceed, with fingers crossed.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2436::Missing } inserted.<inserted text> } l.2436 Z one,Average,Indoor Living Wall LED Operational PPFD {[}\unit{\micr... I've inserted something that you may have forgotten. (See the <inserted text> above.) With luck, this will get me unwedged. But if you really didn't forget anything, try typing `2' now; then my insertion and my current dilemma will both disappear.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2436::Undefined control sequence.l.2436 ...iving Wall LED Operational PPFD {[}\unit {\micro\mole\per\square\me... The control sequence at the end of the top line of your error message was never \def'ed. If you have misspelled it (e.g., `\hobx'), type `I' and the correct spelling (e.g., `I\hbox'). Otherwise just continue, and I'll forget about whatever was undefined.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\micro ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\mole ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2436::Missing $ inserted.<inserted text> $ l.2436 ...nal PPFD {[}\unit{\micro\mole\per\square \meter\per\second}{]} I've inserted a begin-math/end-math symbol since I think you left one out. Proceed, with fingers crossed.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\meter ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\second ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2436::Extra }, or forgotten $.l.2436 ...\micro\mole\per\square\meter\per\second} {]} I've deleted a group-closing symbol because it seems to be spurious, as in `$x}$'. But perhaps the } is legitimate and you forgot something else, as in `\hbox{$x}'. In such cases the way to recover is to insert both the forgotten and the deleted material, e.g., by typing `I$}'.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::LaTeX Error: Command \item invalid in math mode.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::LaTeX Error: Something's wrong--perhaps a missing \item.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::LaTeX Error: Something's wrong--perhaps a missing \item.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2438::Undefined control sequence.l.2438 ...Average,Indoor Living Wall PPFD {[}\unit {\micro\mole\per\square\me... The control sequence at the end of the top line of your error message was never \def'ed. If you have misspelled it (e.g., `\hobx'), type `I' and the correct spelling (e.g., `I\hbox'). Otherwise just continue, and I'll forget about whatever was undefined.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\micro ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\mole ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\meter ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\per ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::Undefined control sequence.\second ->\ERROR]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:None::LaTeX Error: Command \item invalid in math mode.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2440::Missing $ inserted.<inserted text> $ l.2440 Z one,Average,Indoor Living Wall Vapor Pressure Deficit {[}Pa{]} I've inserted a begin-math/end-math symbol since I think you left one out. Proceed, with fingers crossed.]
[LATEXERROR::doc/input-output-reference/src/overview/group-internal-gains-people-lights-other.tex:2440::Missing } inserted.<inserted text> } l.2440 Z one,Average,Indoor Living Wall Vapor Pressure Deficit {[}Pa{]} I've inserted something that you may have forgotten. (See the <inserted text> above.) With luck, this will get me unwedged. But if you really didn't forget anything, try typing `2' now; then my insertion and my current dilemma will both disappear.

@jmarrec jmarrec mentioned this pull request Mar 6, 2024
3 tasks
Comment on lines +21 to +25
\(h_{ip}\) is the convective heat transfer coefficient(W/(m\(^2\)\(^{\circ}\)C));

\(T_z\) is the zone air temperature (\(^{\circ}\)C);

\(T_p\) is the plant surface temperature (\(^{\circ}\)C);
Copy link
Contributor

Choose a reason for hiding this comment

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

Throughout the document, I question the use of Celsius versus Kelvin? I find reading rates in particular in x/C (as opposed to x/K) a bit weird. Is it a conscious choice?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Both zone air and plant surface temperatures are in Celsius (C)for the convective heat transfer. People may have different preferences although W/(m2C) and W/(m2K) are both correct. To be consistent, C is used throughout the description for this section.

Copy link
Contributor

Choose a reason for hiding this comment

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

@LipingWang when you look through the Engineering Reference, K is much more likely to be used than C in the denominator of units. It would be good to clean this up.

Comment on lines +2449 to +2467
\paragraph{Baseboard Electricity Rate {[}W{]}}\label{baseboard-electric-power-w}

This field is the electric power for the ZoneBaseboard:OutdoorTemperatureControlled object in Watts.

\paragraph{Baseboard Electricity Energy {[}J{]}}\label{baseboard-electric-energy-j}

The outdoor temperature controlled baseboard heat option is assumed to be fueled by electricity. This field is the same as the Baseboard Total Heating Energy (above) in joules. This energy is included in the following meters:
\begin{lstlisting}
Electricity:Facility
Electricity:Building
Electricity:Zone:<Zone Name>
Electricity:SpaceType:<Space Type Name>
InteriorEquipment:Electricity
InteriorEquipment:Electricity:Zone:<Zone Name>
InteriorEquipment:Electricity:SpaceType:<Space Type Name>
<End-Use Subcategory>:InteriorEquipment:Electricity
<End-Use Subcategory>:InteriorEquipment:Electricity:Zone:<Zone Name>
<End-Use Subcategory>:InteriorEquipment:Electricity:SpaceType:<Space Type Name>
\end{lstlisting}
Copy link
Contributor

Choose a reason for hiding this comment

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

Copy pasting

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thank you very much for catching this! This section should be removed. @Myoldmopar, I will update this by removing this redundant section from the input-output manual and submit a request.

@LipingWang LipingWang mentioned this pull request Mar 9, 2024
20 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
IDDChange Code changes impact the IDD file (cannot be merged after IO freeze) NewFeature Includes code to add a new feature to EnergyPlus
Projects
None yet
Development

Successfully merging this pull request may close these issues.