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

Check if two surfaces are coplanar prior to issuing "not fully enclosed" warning #7383

Closed
3 tasks
JasonGlazer opened this issue Jul 12, 2019 · 4 comments · Fixed by #9447
Closed
3 tasks
Assignees
Labels
Defect Includes code to repair a defect in EnergyPlus

Comments

@JasonGlazer
Copy link
Contributor

Issue overview

The warning message:

** Warning ** CalculateZoneVolume: The Zone="X" is not fully enclosed. To be fully enclosed, each edge of a surface must also be an edge on one other surface.

Can get triggered even if the volume is fully enclosed but that one of the sides is made up of multiple coplanar pieces.

Add an additional level of checking for this coplanar case to reduce the times this warning message is shown.

See #15210 on helpdesk.

Checklist

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

  • Defect file added (list location of defect file here)
  • Ticket added to Pivotal for defect (development team task)
  • Pull request created (the pull request will have additional tasks related to reviewing changes that fix this defect)
@JasonGlazer JasonGlazer added the Defect Includes code to repair a defect in EnergyPlus label Aug 21, 2019
@mldichter
Copy link

I think I have this exact bug. I added ceiling cavities to models to correctly model duct leakage using the ZoneHVAC:AirDistributionUnit object. Here is a google drive link with an example file.

I'm pretty sure all the vertices are specified correctly since the ceiling cavities were made with some ruby code, and they work fine with all the other buildings I tried it on. I've also checked the autocalculated floor area and volume of the ceiling cavities, which are correct. I'm confident I can get rid of the unenclosed warnings if I split up the floor and ceiling surfaces wherever the ceiling cavities walls have vertices. This has worked for me before, but is a lot of work.

My main concern is if EnergyPlus results will differ if I do or do not fix the unenclosed warnings. If this warning is just a helpful output for the user in case of wrong specification, then I will ignore it.

@mjwitte
Copy link
Contributor

mjwitte commented Dec 3, 2019

@mldichter These warnings are produced when attempting to auto-calculate the zone volume. You should be able to confirm what the autocalculated zone volume is even when it throws this warning. With an incorrect zone volume, zone capacitance is mildly affected, but any inputs or outputs in ACH will be wrong.

If you specify the volume in the Zone object, then these warnings may still appear, but the user input zone volume will be used so you can be sure it's what is should be.

@jmarrec jmarrec self-assigned this May 20, 2022
@jmarrec
Copy link
Contributor

jmarrec commented May 20, 2022

After a lot of effort I finally figured out what was the issue. I never managed to replicate it by doing test models, so I ended up cleaning up @mldichter 's model down one bit at a time. I reimplemented most of the geometry functions in python so I could debug more easily... and it turns out it's a tolerance that's too high, coupled with the fact that @mldichter 's model has plenums that are VERY long, like 55m but only about 0.3m high.

image

This routine basically tries to add extra vertices to a surface to split it up, and it checks whether the vertex is not the same as start and end point, and whether it’s on the same line

if (isPointOnLineBetweenPoints(curVertex, nextVertex, testVertex)) {

// tests if a point in space lies on the line segment defined by two other points
bool isPointOnLineBetweenPoints(DataVectorTypes::Vector start, DataVectorTypes::Vector end, DataVectorTypes::Vector test)
{
// J. Glazer - March 2017
Real64 tol = 0.0127; // 1.27 cm = 1/2 inch
return (std::abs((distance(start, end) - (distance(start, test) + distance(test, end)))) < tol);
}

Essentially the root of the problem is that some of the wall vertices that are supposed to match with the floor are added to the roof and vice versa, because the tolerance is too high compared with the width/height ratio of the zone

image

@jmarrec
Copy link
Contributor

jmarrec commented May 20, 2022

I can now replicate with a shoebox model: a 30x10x0.3m zone. I split the south wall in two. I get the warning.

image

jmarrec added a commit that referenced this issue May 23, 2022
jmarrec added a commit to jmarrec/EnergyPlus that referenced this issue May 23, 2022
jmarrec added a commit to jmarrec/EnergyPlus that referenced this issue May 23, 2022
…dling: distance between point on line

compute the distance from point to line and check that this is < 1.27 cm. Then you can check if it's on that line.
Myoldmopar added a commit that referenced this issue Jun 7, 2022
#7383 - Avoid issuing 'not fully enclosed' warning when zone is in fact enclosed
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 a pull request may close this issue.

4 participants