Assign internal doors is not possible

Hi all when I try to assign internal doors to each room (H028) this is the outcome of the validation check

Validating Model using honeybee-core==1.48.2 and honeybee-schema==1.47.0
Re-serialization passed.
--- Logging error ---
Traceback (most recent call last):
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\cli\validate.py", line 42, in validate_model
    report = parsed_model.check_all(raise_exception=False)
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\model.py", line 995, in check_all
    msgs.append(self.check_missing_adjacencies(False))
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\model.py", line 1071, in check_missing_adjacencies
    'if the parent Face has a Surface BC.'.format(dr.full_id)
AssertionError: Door "Door 62306[Door_623067bf]" must have Surface boundary condition if the parent Face has a Surface BC.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\zz\ladybug_tools\python\lib\logging\handlers.py", line 70, in emit
    self.doRollover()
  File "C:\Users\zz\ladybug_tools\python\lib\logging\handlers.py", line 394, in doRollover
    self.rotate(self.baseFilename, dfn)
  File "C:\Users\zz\ladybug_tools\python\lib\logging\handlers.py", line 111, in rotate
    os.rename(source, dest)
PermissionError: [WinError 32] Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird: 'C:\\Users\\zz\\.honeybee\\honeybee.log' -> 'C:\\Users\\zz\\.honeybee\\honeybee.log.2020-10-09'
Call stack:
  File "C:\Users\zz\ladybug_tools\python\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Users\zz\ladybug_tools\python\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\__main__.py", line 4, in <module>
    main()
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\click\core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\click\core.py", line 782, in main
    rv = self.invoke(ctx)
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\click\core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\click\core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\click\core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\cli\validate.py", line 51, in validate_model
    _logger.exception('Model validation failed.\n{}'.format(e))
Message: 'Model validation failed.\nDoor "Door 62306[Door_623067bf]" must have Surface boundary condition if the parent Face has a Surface BC.'
Arguments: ()
honeybee.cli.validate - ERROR - Model validation failed.
Door "Door 62306[Door_623067bf]" must have Surface boundary condition if the parent Face has a Surface BC.
Traceback (most recent call last):
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\cli\validate.py", line 42, in validate_model
    report = parsed_model.check_all(raise_exception=False)
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\model.py", line 995, in check_all
    msgs.append(self.check_missing_adjacencies(False))
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\model.py", line 1071, in check_missing_adjacencies
    'if the parent Face has a Surface BC.'.format(dr.full_id)
AssertionError: Door "Door 62306[Door_623067bf]" must have Surface boundary condition if the parent Face has a Surface BC.

This modeling step used to work before. But at the moment it doesn’t.
A single external door works without problems

It is getting better, Now they are created…

if I solve adjacency afterwards


the list is extended

1 Like

Little update here.

I managed to assign internal doors.
In the last post I had a single door face representing the door for both rooms. They get picked with a single identifier and are assigned to both rooms. That is causing the invalid model.
If I just double the faces and select them with a single frame they are still attached to both rooms.

Only if I go room by room and single face by single face I’m able to assign them and finally have a valid model.

Is it possible to run the PO_AddDoors command for internal doors in a way following real life logic where I have a single door belonging to two rooms?
Meaning in a model there is a single face representing the internal door which will be copied in the background and assigned to two PO Rooms.
Maybe by adding an internal doors option in the command line?

Can’t imagine anybody to be happy if this has to be done manually in a large scale model?
Or maybe there is another way I’m missing here?

Another small thing. If I mark and check several doors properties afterwards, boundary condition is shown as “varies” although single they are all “surface”

Hi @martin6! Because of how EnergyPlus works we have to include two faces for all the internal geometry. That said, we can make it easier by adding the interior child object to the other face when the parent face is adjacent to another one. We still have to do the duplication under the hood.

We had this conversation with @mingbo a while ago. I support making the change as long as it is not major development work at this point. If it is, then we should create an issue and address this early next year once we are out of the WIP phase.

It is possible now to assign a single door to two rooms. Great improvement!

But there are still some little things, which can be done better.
First I had validation complaints about

Validating Model using honeybee-core==1.48.10 and honeybee-schema==1.47.0
Re-serialization passed.
honeybee.cli.validate - ERROR - Model validation failed.
Door "Door 48d7b[Door_48d7b114]" must have Surface boundary condition if the parent Face has a Surface BC.
Traceback (most recent call last):
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\cli\validate.py", line 42, in validate_model
    report = parsed_model.check_all(raise_exception=False)
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\model.py", line 995, in check_all
    msgs.append(self.check_missing_adjacencies(False))
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\model.py", line 1071, in check_missing_adjacencies
    'if the parent Face has a Surface BC.'.format(dr.full_id)
AssertionError: Door "Door 48d7b[Door_48d7b114]" must have Surface boundary condition if the parent Face has a Surface BC.

The doors are assigned as outdoors in the first place. This can be changed by turning them into surfaces. They become interior doors.

But then the validation really gets crowded with complaints

honeybee.cli.validate - ERROR - Model validation failed.
Room "EG Room 583e6[Room_583e6f2d]" is invalid:
Room "EG Room 583e6[Room_583e6f2d]" is not valid and is not following honeybee-schema:
Face "Face ad139[Room_583e6f2d..Face_ad13996f]" is invalid:
Face "Face ad139[Room_583e6f2d..Face_ad13996f]" is not valid and is not following honeybee-schema:
Door "Door 48d7b[Door_48d7b114]" is invalid:
Door "Door 48d7b[Door_48d7b114]" is not valid and is not following honeybee-schema:
Input boundary_condition_objects for Apertures or Doors length must be 3 not 0
Traceback (most recent call last):
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\door.py", line 87, in from_dict
    boundary_condition = Surface.from_dict(data['boundary_condition'], True)
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\boundarycondition.py", line 175, in from_dict
    return cls(data['boundary_condition_objects'], sub_face)
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\boundarycondition.py", line 158, in __init__
    'boundary_condition_objects for Apertures or Doors')
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\typing.py", line 153, in tuple_with_length
    input_name, length, len(value))
AssertionError: Input boundary_condition_objects for Apertures or Doors length must be 3 not 0

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\face.py", line 132, in from_dict
    drs.append(Door.from_dict(dr))
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\door.py", line 105, in from_dict
    cls._from_dict_error_message(data, e)
  File "C:\Users\zz\ladybug_tools\python\lib\site-packages\honeybee\_base.py", line 116, in _from_dict_error_message
    raise ValueError(msg)
ValueError: Door "Door 48d7b[Door_48d7b114]" is not valid and is not following honeybee-schema:
Input boundary_condition_objects for Apertures or Doors length must be 3 not 0

During handling of the above exception, another exception occurred:



 **and so on.....**
2 Likes

Thank you @martin6!

@mingbo, this one is for you and should be an easy fix. Since this feature is actually only for interior doors/apertures it is strange that we have such an error. Looks like that I missed it during my tests.

Thanks @martin6, I will look into this issue today, and let you know when a new version is ready.

This has already been fixed. please let us know if the issue remains.