IFC Guide
Kapitola 03: PROJECT CONTAINER ELEMENT AND BASE SETTINGShtmlpdf orig
Kapitola 04: SPATIAL STRUCTURE AND SPACE ELEMENTShtmlpdf orig
Kapitola 05: BUILDING ELEMENTShtmlpdf orig
Kapitola 06: BUILDING SERVICES ELEMENTS AND RELATED CONCEPTShtmlpdf orig
Kapitola 09: SHAPE REPRESENTATION OF ELEMENTShtmlpdf orig
Kapitola 10: PROPERTIES OF ELEMENTShtmlpdf orig
Obsah kapitoly

Obsah kapitoly

6 Building services elements and related concepts

The support for building service elements has been greatly enhanced in IFC2×2, the use of types (as subtypes of IfcTypeProduct) is now strongly encouraged.
Also the definitions for ports (as IfcDistributi­onPort) have been reworked.

6.1 Building services type, occurrence and performance history entities

In IFC2×2, the notions of type and occurrence have been formalized in the building services model architecture, as has the concept of a performance history entity which is used to store state-specific properties that come and go during the life-cycle of the occurrence.
The occurrence entity is related to its type via the IfcRelDefinesByType relationship and to zero or many IfcPerformance­History entities via the IfcRelAssigns­ToControl relationship. The following figure illustrates these concepts:

figure62
Figure 62 : Type, Occurrence and Performance History Concepts

Each type specific entity has an attribute PredefinedType.
It refer to an enumeration of special types of the component, which further specializes the component tree and allows the allocation of specific property sets to the type.

The depth of the subtyping tree is different for the occurrences and for the types, the occurrence specialization tree is shallow, whereas the type specialization tree is deep. The listing of all occurrence entities with the applicable type entities and the predefined enumeration is shown in Table 8. within Appendix 1.

6.1.1 Concepts of building service type definitions

Building service type definitions are used to define common properties for occurrence elements.
Each instance of a building service occurrence element gets its full description (aside from the local placement, local connectivity, occurrence properties, etc.) from its type definition including the block- type geometry, shared properties, basic type name and description, etc. These are exchanged through IFC2×2 as subtypes of IfcTypeProduct.

Therefore each building service element subtype of IfcFlowDistri­butionElement refers to an instance of an IfcTypeProduct subtype using the IfcRelDefinesByType relationship. The IfcTypeProduct handles the:

In this case it enables the exchange of catalogues or libraries of type definitions.
Within IFC2×2 the building service type definition has been greatly enhanced.
For each entity representing an occurrence of a building service component, an equivalent abstract type object exists.
All inherit from the IfcDistributi­onElementType.

ENTITY IfcDistributionElementType;
GlobalId : IfcGloballyUniqueId;
OwnerHistory : IfcOwnerHistory;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
ApplicableOccurrence : OPTIONAL IfcLabel;
HasPropertySets :
OPTIONAL LIST [1:?] OF UNIQUE IfcPropertySetDefinition;
RepresentationMaps : OPTIONAL LIST [1:?] OF UNIQUE IfcRepresentationMap;
Tag : OPTIONAL IfcLabel;
ElementType : OPTIONAL IfcLabel;
INVERSE
HasAssociations : SET OF IfcRelAssociates FOR RelatedObjects;
ObjectTypeOf : SET [0:1] OF IfcRelDefinesByType FOR RelatingType;
END_ENTITY;

Each non abstract subtype of IfcDistributi­onElementType adds another attribute, the PredefinedType. The PredefinedType represents a further level of specialization. It can either be set to a specific enumerator or to either .USERDEFINED. or .NOTDEFINED.. In case of .USERDEFINED. the attribute

ElementType should hold a user specific component type name, in case of .NOTDEFINED. no further specialization is available.

6.1.1.1 Repre­sentation maps

The representation maps specify one or many representations of the building service element (and they are therefore comparable to the concept of multi-view blocks or library objects, or intelligent macros, as often used in CAD systems).

Each representation map has an origin (normally 0.,0.,0.) and a representation, which has a representation identifier and representation type, identifying its use within different representation views (see also 9.1.4.1).

Example: A specific elbow type (here IfcDuctFittingType) should be exchanged as the underlying type of (one or several) building service elements (here IfcFlowFitting). The example shows how are the name and description is exchanged.

It also shows, how two different representation maps (one for the body used in the 3D model view, the second for the footprint used in the floor plan view) can be sent.

figure63
Figure 63 : example of block definition for elbow

/* Type definition of 40x40 elbow */
#1=IFCDUCTFITTINGTYPE('abcdefghijklmnopqrst12', #2, 'elbow_40x40', '90 degree round elbow', 'IfcFlowFitting', $, (#10,#11), $, $, .BEND.);
/* first representation for floor plan view */
#10=IFCREPRESENTATIONMAP(#12, #13);
#12=IFCAXIS2PLACEMENT3D(#14, $, $);
#14=IFCCARTESIANPOINT((0.,0.,0.));
#13=IFCSHAPEREPRESENTATION(#20, 'FootPrint', 'GeometricCurveSet', (#15));
#15=IFCCOMPOSITECURVE(#101, .F.);
#20=IFCGEOMETRICREPRESENTATIONCONTEXT('FloorPlan', 'Design', 3, $, #22, $);
/* second representation for model view */
#11=IFCREPRESENTATIONMAP(#16, #17);
#16=IFCAXIS2PLACEMENT3D(#18, $, $);
#18=IFCCARTESIANPOINT((0.,0.,0.));
#17=IFCSHAPEREPRESENTATION(#21, 'Body', 'SurfaceModel', (#19));
#19=IFCSHELLBASEDSURFACEMODEL($);
#21=IFCGEOMETRICREPRESENTATIONCONTEXT('Model', 'Design', 3, $, #22, $);

6.1.1.2 Repre­sentation types

There are several geometric representations foreseen for building service types:

Each of the representation types can be replaced by „MappedRepresen­tation“, if the type concept, i.e. the use of an IfcMappedItem for sharing the geometric representation(s) of the type is used. The principle concept of using IfcMappedItem is introduced in 9.1.4.2, its use in conjunction with the IfcTypeProduct is shown in 10.1.4.

From IFC2×2 onwards the use of the type concept is now strongly encouraged, the entity type information about the building service element now lies in the type object.

Example: The following example shows four wash basins (as a type of IfcSanitaryTer­minalType and occurrences of IfcFlowTerminal) inserted as instances of a library object.
Each instance has its own local placement, and the geometric representation of its ‚Body‘ is given by ‚MappedRepresen­tation‘, being the IfcMappedItem, referring to the common IfcRepresenta­tionMap. Each mapped item has a transformation matrix relative to the object coordinate system, given by the IfcLocalPlacement, (here always scale 1 and no translation or rotation).

figure64
Figure 64 : Example of building service element occurrences

/* wash basin type and block geometry */
#1=IFCSANITARYTERMINALTYPE('abcdefghijklmnopqrst11', #2, 'Waschbecken_1 70', $,
'IfcFlowTerminal', (#10), (#1011), $, $, .URINAL.);
#1011=IFCREPRESENTATIONMAP(#1016, #1017);
#1016=IFCAXIS2PLACEMENT3D(#1018, $, $);
#1017=IFCSHAPEREPRESENTATION(#1021, 'Body', 'SurfaceModel', (#1019));
#1018=IFCCARTESIANPOINT((0.,0.,0.));
#1019=IFCSHELLBASEDSURFACEMODEL(/* content omitted */);
#1021=IFCGEOMETRICREPRESENTATIONCONTEXT('Model', 'Design', 3, $, #1022, $);
#1022=IFCAXIS2PLACEMENT3D(#1023, $, $);
#1023=IFCCARTESIANPOINT((0.,0.,0.));
/* assignment of instances to the common type */
#1000=IFCRELDEFINESBYTYPE('abcdefghijklmnopqrst17', #2, $, $, (#17,#15,#14,#16), #1);
/* first wash basin */
#14=IFCFLOWTERMINAL('abcdefghijklmnopqrst13', #2, $, $, $, #101, #102, $);
#101=IFCLOCALPLACEMENT($, #104);
#102=IFCPRODUCTDEFINITIONSHAPE($, $, (#103));
#103=IFCSHAPEREPRESENTATION(#1021, 'Body', 'MappedRepresentation', (#1024));
#104=IFCAXIS2PLACEMENT3D(#405, $, $);
#105=IFCCARTESIANPOINT((1.,5.,0.8));
#1024=IFCMAPPEDITEM(#1011, #1025);
#1025=IFCCARTESIANTRANSFORMATIONOPERATOR3D($, $, #1026, $, #1027);
#1026=IFCCARTESIANPOINT((0.,0.,0.));
#1027=IFCDIRECTION((0.,0.,1.));
/* second wash basin */
#15=IFCFLOWTERMINAL('abcdefghijklmnopqrst14', #2, $, $, $, #201, #202, $);
#201=IFCLOCALPLACEMENT($, #204);
#202=IFCPRODUCTDEFINITIONSHAPE($, $, (#203));
#203=IFCSHAPEREPRESENTATION(#1021, 'Body', 'MappedRepresentation', (#1124));
#204=IFCAXIS2PLACEMENT3D(#405, $, $);
#205=IFCCARTESIANPOINT((2.5,5.,0.8));
#1124=IFCMAPPEDITEM(#1011, #1125);
#1125=IFCCARTESIANTRANSFORMATIONOPERATOR3D($, $, #1126, $, #1127);
#1126=IFCCARTESIANPOINT((0.,0.,0.));
#1127=IFCDIRECTION((0.,0.,1.));
/* third wash basin */
#16=IFCFLOWTERMINAL('abcdefghijklmnopqrst15', #2, $, $, $, #301, #302, $);
#301=IFCLOCALPLACEMENT($, #304);
#302=IFCPRODUCTDEFINITIONSHAPE($, $, (#303));
#303=IFCSHAPEREPRESENTATION(#1021, 'Body', 'MappedRepresentation', (#1224));
#304=IFCAXIS2PLACEMENT3D(#405, $, $);
#305=IFCCARTESIANPOINT((4.,5.,0.8));
#1224=IFCMAPPEDITEM(#1011, #1225);
#1225=IFCCARTESIANTRANSFORMATIONOPERATOR3D($, $, #1226, $, #1227);
#1226=IFCCARTESIANPOINT((0.,0.,0.));
#1227=IFCDIRECTION((0.,0.,1.));
/* fourth wash basin */
#17=IFCFLOWTERMINAL('abcdefghijklmnopqrst16', #2, $, $, $, #401, #402, $);
#401=IFCLOCALPLACEMENT($, #404);
#402=IFCPRODUCTDEFINITIONSHAPE($, $, (#403));
#403=IFCSHAPEREPRESENTATION(#1021, 'Body', 'MappedRepresentation', (#1324));
#404=IFCAXIS2PLACEMENT3D(#405, $, $);
#405=IFCCARTESIANPOINT((5.5,5.,0.8));
#1324=IFCMAPPEDITEM(#1011, #1325);
#1325=IFCCARTESIANTRANSFORMATIONOPERATOR3D($, $, #1326, $, #1327);
#1326=IFCCARTESIANPOINT((0.,0.,0.));
#1327=IFCDIRECTION((0.,0.,1.));

The examples show how the geometry that is associated to the IfcTypeProduct subtype IfcSanitaryTer­minalType is referenced by the IfcMappedItem (which could be done for multiple geometric representations).

The Cartesian transformation operator places the IfcRepresenta­tionMap (given within its own coordinate system, provided by IfcRepresenta­tionMap.Mappin­gOrigin) into the object coordinate system (given by supertype IfcProduct.Ob­jectPlacement).
Although not used in the example, translation, rotation and scaling (uniform and non-uniform) of the IfcRepresenta­tionMap is possible.

6.1.1.3 Assigning properties to the type definition

In addition to the shared geometric representation each building service element type can also hold the shared (or type specific) properties (including property values).
These are exchanged as property sets directly attached to the type (and do not need to be multiplied for each occurrence) using the IfcTypeObject­.HasPropertySets attribute.

Example: A washbasin type (here IfcSanitaryTer­minalType) should be exchanged as the underlying type of (one or several) building service elements (here IfcFlowTerminal).
The example shows how are the name and description is exchanged. It also shows, how the commonly shared properties are exchanged (the geometric representation is omitted in that example).

figure65
Figure 65 : example of block or library definition for washbasin

/* Type definition of wash basin */
#1=IFCSANITARYTERMINALTYPE('abcdefghijklmnopqrst12', #2, 'Waschbecken_1 70', $, 'IfcFlowTerminal', (#10), $, $, $, .URINAL.);
/* shared property definitions for the type */
#10=IFCPROPERTYSET('abcdefghijklmnopqrst13', #2, 'FM Parameter', $, (#12,#13,#11));
#11=IFCPROPERTYSINGLEVALUE('Group', $, IFCLABEL('Sanit\S\dre Anlagen'), $);
#12=IFCPROPERTYSINGLEVALUE('Production Year', $, IFCNUMERICMEASURE(1998), $);
#13=IFCPROPERTYSINGLEVALUE('Gross Weight', $, IFCNUMERICMEASURE(1.52), $);

6.1.2 Concepts of building service occurrence elements

The occurrence entity represents the physical manifestation of the type. All building service elements inherit the concepts and UoF associated to elements, which are provided by IfcElement. It includes:

All building service element occurrence entities are exchanged by an IFC2×2 file as instances of subtypes of IfcDistributi­onElement. If the appropriate semantic classification exists in the IFC2×2 specification (and within the originating application) then the building element is exported by the appropriate subtype entity. If this is not the case, then the IfcDistributi­onElement entity should be used instead.

NOTE: The use of IfcBuildingEle­mentProxy is not encouraged and might be limited to the current edition of IFC2×2.

Figure 65 shows the hierarchy for all currently defined building service occurrence elements. All subtypes of IfcDistributi­onElement are out of the stable platform.

NOTE: The area of building service elements will continue to undergo changes with future editions of the IFC2×2 model.

The various subtypes of IfcDistributi­onFlowElement do not elaborate any further attributes. These subtypes are introduced solely for the purpose of semantics and logical structuring of the model.. Each of the subtypes inherit the following attributes and inverse relationships from IfcDistribiti­onFlowElement:

ENTITY IfcDistributi­onFlowElement GlobalId : IfcGloballyUni­queId; OwnerHistory : IfcOwnerHistory; Name : OPTIONAL IfcLabel; Description : OPTIONAL IfcText; ObjectType : OPTIONAL IfcLabel; ObjectPlacement : OPTIONAL IfcObjectPlacement; Representation : OPTIONAL IfcProductRepre­sentation; Tag : OPTIONAL IfcIdentifier; INVERSE IsDefinedBy : SET OF IfcRelDefines; HasAssociations : SET OF IfcRelAssociates; HasAssignments : SET OF IfcRelAssigns; Decomposes : SET [0:1] OF IfcRelDecomposes; IsDecomposedBy : SET OF IfcRelDecomposes; ReferencedBy : SET OF IfcRelAssigns­ToProduct; ConnectedTo : SET OF IfcRelConnectsE­lements; ConnectedFrom : SET OF IfcRelConnectsE­lements; FillsVoids : SET [0:1] OF IfcRelFillsElement; HasCoverings : SET OF IfcRelCoversBldgE­lements; HasProjections : SET OF IfcRelProjectsE­lement; HasOpenings : SET OF IfcRelVoidsElement; HasPorts : SET OF IfcRelConnectsPor­tToElement; IsConnectionRe­alization : SET OF IfcRelConnectsWit­hRealizingEle­ments; ProvidesBoundaries : SET OF IfcRelSpaceBou­ndary; ContainedInStruc­ture : SET [0:1] OF IfcRelContaine­dInSpatialStruc­ture; HasControlElements : SET [0:1] OF IfcRelFlowCon­trolElements; END_ENTITY;

figure66
Figure 66 : Hierarchy chart of building service elements

6.1.2.1 Assigning properties to the occurrence element

Beside the shared properties already attached to the type as shown above, each occurrence of a building service element can have its occurrence specific properties attached, using the general principle as introduced in 10.1.2.1.

Example: Extending the example, reflected in Figure 63 by occurrence specific properties, two additional properties should be added: a serial number and an asset number. Both vary by occurrence for each of the four washbasins.
The complete sum of properties for each occurrence of a building service element is therefore the sum of those property sets assigned thought the shared type (via IfcRelDefines­ByType) and those assigned directly (through IfcRelAssigns­ByProperties).

/* definition of the type -no geometry shown- */
#1= IFCSANITARYTERMINALTYPE('abcdefghijklmnopqrst11', #2, 'Waschbecken_1 70', $, 'IfcFlowTerminal', (#10), (#1011), $, $, .URINAL.);
#10=IFCPROPERTYSET('abcdefghijklmnopqrst12', #2, 'FM Parameter', $, (#11,#12,#13));
#11=IFCPROPERTYSINGLEVALUE('Group', $, IFCLABEL('Sanit\S\dre Anlagen'), $);
#12=IFCPROPERTYSINGLEVALUE('Production year', $, IFCNUMERICMEASURE(1998), $);
#13=IFCPROPERTYSINGLEVALUE('Brutto Gewicht', $, IFCNUMERICMEASURE(1.52), $);
/* definition of the occurrences
-no geometry shown- */
#1000=IFCRELDEFINESBYTYPE('abcdefghijklmnopqrst17', #2, $, $, (#15,#16,#17,#14), #1);
#14=IFCFLOWTERMINAL('abcdefghijklmnopqrst13', #2, $, $, $, #101, #102, $);
#2028=IFCRELDEFINESBYPROPERTIES('abcdefghijklmnopqrst23', #2, $, $, (#14), #2032);
#2032=IFCPROPERTYSET('abcdefghijklmnopqrst24', #2, 'FM occurrence parameter', $, (#2034,#2033));
#2033=IFCPROPERTYSINGLEVALUE('Asset number', $, IFCLABEL('DE_A_234234'), $);
#2034=IFCPROPERTYSINGLEVALUE('Serial number', $, IFCLABEL('BD124-GF5835'), $);
#15=IFCFLOWTERMINAL('abcdefghijklmnopqrst14', #2, $, $, $, #201, #202, $);
#3028=IFCRELDEFINESBYPROPERTIES('abcdefghijklmnopqrst25', #2, $, $, (#15), #3032);
#3032=IFCPROPERTYSET('abcdefghijklmnopqrst26', #2, 'FM occurrence parameter', $, (#3034,#3033));
#3033=IFCPROPERTYSINGLEVALUE('Asset number', $, IFCLABEL('DE_A_234624'), $);
#3034=IFCPROPERTYSINGLEVALUE('Serial number', $, IFCLABEL('BD124-GF1534'), $);
#16=IFCFLOWTERMINAL('abcdefghijklmnopqrst15', #2, $, $, $, #301, #302, $);
#4028=IFCRELDEFINESBYPROPERTIES('abcdefghijklmnopqrst27', #2, $, $, (#16), #4032);
#4032=IFCPROPERTYSET('abcdefghijklmnopqrst28', #2, 'FM occurrence parameter', $, (#4034,#4033));
#4033=IFCPROPERTYSINGLEVALUE('Asset number', $, IFCLABEL('DE_A_234143'), $);
#4034=IFCPROPERTYSINGLEVALUE('Serial number', $, IFCLABEL('BD124-GF4294'), $);
#17=IFCFLOWTERMINAL('abcdefghijklmnopqrst16', #2, $, $, $, #401, #402, $);
#5028=IFCRELDEFINESBYPROPERTIES('abcdefghijklmnopqrst32', #2, $, $, (#16), #5032);
#5032=IFCPROPERTYSET('abcdefghijklmnopqrst34', #2, 'FM occurrence parameter', $, (#5034,#5033));
#5033=IFCPROPERTYSINGLEVALUE('Asset number', $, IFCLABEL('DE_A_234463'), $);
#5034=IFCPROPERTYSINGLEVALUE('Serial number', $, IFCLABEL('BD124-GF78253'), $);

6.1.2.2 Overriding properties assigned to the type in the occurrence element

In addition there is the possibility to override shared properties, assigned through the type by using the overriding mechanism of IfcRelOverrides­Properties.
This allows the ability to handle exceptions for a few shared properties that have different values for some occurrences. The principle mechanism is described in 10.1.2.2

Example: One occurrence of the washbasins has a different production year (although otherwise identical), this can be exchanged by overriding the shared property, attached to the type.

/* definition of the type -no geometry shown- */
#1= IFCSANITARYTERMINALTYPE('abcdefghijklmnopqrst11', #2, 'Waschbecken_1 70', $, 'IfcFlowTerminal', (#10), (#1011), $, $, .URINAL.);
#10=IFCPROPERTYSET('abcdefghijklmnopqrst12', #2, 'FM Parameter', $, (#11,#12,#13));
#11=IFCPROPERTYSINGLEVALUE('Group', $, IFCLABEL('Sanit\S\dre Anlagen'), $);
#12=IFCPROPERTYSINGLEVALUE('Production year', $, IFCNUMERICMEASURE(1998), $);
#13=IFCPROPERTYSINGLEVALUE('Brutto Gewicht', $, IFCNUMERICMEASURE(1.52), $);
/* definition of the occurrences
-no geometry shown- */
#1000=IFCRELDEFINESBYTYPE('abcdefghijklmnopqrst17', #2, $, $, (#14), #1);
#14=IFCFLOWTERMINAL('abcdefghijklmnopqrst13', #2, $, $, $, #101, #102, $);
/* occurrence properties */
#2028=IFCRELDEFINESBYPROPERTIES('abcdefghijklmnopqrst23', #2, $, $, (#14), #2032);
#2032=IFCPROPERTYSET('abcdefghijklmnopqrst24', #2, 'FM occurrence parameter', $,
(#2034,#2033));
#2033=IFCPROPERTYSINGLEVALUE('Asset number', $, IFCLABEL('DE_A_234234'), $);
#2034=IFCPROPERTYSINGLEVALUE('Serial number', $, IFCLABEL('BD124-GF5835'), $);
/* overridden shared properties */
#2128=IFCRELOVERRIDESPROPERTIES('abcdefghijklmnopqrst45', #2, $, $, (#14), #10,
(#2130));
#2130=IFCPROPERTYSINGLEVALUE('Production year', $, IFCNUMERICMEASURE(1999), $);

6.1.2.3 Concepts of the performance history control

Building service occurrences come into existence at different phases of the building-lifecycle. Furthermore, they have properties that change over time, such as the temperature of the air in a duct.

The performance history concept was introduced in IFC2×2 to capture such properties independently from the occurrence element itself. This allows for the possibility of the exchange file to capture all known historical information associated with an element.
As a subtype of IfcControl, IfcPerformance­History entities can be related to subtypes of IfcFlowDistri­butionElement via the IfcRelAssigns­ToControl relationship. The IfcPerformance­History entity handles the:

6.2 Concept of connectivity

Connectivity between building service and electrical components is an important concept within IFC2×2. There are two ways to handle connectivity:

6.2.1 Concept of Logical Connectivity

The concept of connectivity is generally associated with things that are directly or physically connected. However, there are circumstances where it is important to know that there is a connective relationship between two (or more) objects but where there is no physical connection to identify this fact.
A simple idea of this could be seen in the IfcRelContaine­dInSpatialStruc­tures relationship. Whilst this is not intended to show connectivity, it does identify the connection of an element within a particular spatial structure.

The idea of non-physical connection may be termed logical connectivity in the sense that there is a logical or implied connection between objects. Logical connectivity may be achieved using instances of IfcPort (or its subtype IfcDistributi­onPort) or it may need to be handled by more general connectivity concepts where ports are not present or cannot be used.
The use of ports for connectivity is the normal way to handle connectivity for building service components.

6.2.1.1 Logical Connectivity With Ports

A particular example of logical connectivity that can be achieved using ports is the connection between a light switch and the lights that are turned on and off by that switch.

Frequently, the cable that connects the switch with a light will not be instantiated in a model and so the physical connection cannot be achieved. In this case, the cable making the connection has to be implied.

figure67
Figure 67: Logical connection between switch and light fixture

figure68
Figure 68: Entities used in logical connectivity with ports

Because both the light switch (as an instance of IfcFlowController) and the light fixture (as an instance of IfcFlowTerminal) may have related instances of IfcDistributionPort (bound through the IfcRelConnectsPor­tToElement), then logical connection may be achieved using ports.

IfcRelConnectsPorts has an additional attribute, RealizingElement, that enables the specification of a realizing element. In this case, the realizing element is the implied cable connection between the switch and the light fixture. This can be instantiated although, since the connection is logical, it cannot have a representation.

Similarly, the implied connection is made as a single occurrence; it is not possible with such a logical connection to express in detail a cable routing. Strictly speaking: the instantiation of the realizing element would create a physical connectivity (see 6.2.2).

6.2.1.2 Logical Connectivity Without Ports

An example of a logical connectivity without ports may be seen from the situation of a water supply pipe taken to discharge into a tank (the particular situation in this example being a potable water pipe which is taken to discharge into a tank containing non potable water in which case, a specific distance between the outlet of the potable discharge and the waterline of the non potable water in the tank must be maintained).

In this case, the discharge end of the pipe will have a distribution port that is unfulfilled (i.e. it does not otherwise participate in a connection relationship). However, the surface of the tank water content does not contain a port to which a connection can be made.

figure69
Figure 69: Tank with logical connection between discharge and waterline using an air gap

Theoretically, a port could be introduced at the waterline of the tank and a connection made using IfcRelConnectsPor­ts. It is considered unlikely that this facility will be offered in software and, in fact, is considered to be undesirable since it would break the useful concept that an unfulfilled port describes an open end in a pipe.

figure70
Figure 70: Defining logical connectivity without ports

Sine the waterline does not have a port, an alternative connection needs to be defined. This can be achieved using the IfcRelConnectsE­lements relationship. In this case, the elements concerned will be the flow segment describing the open ended pipe and the tank.
Questions of the distance from the discharge end of the pipe to the water surface have to be answered by deriving appropriate coordinate values from the positioning data available.

figure71
Figure 71: Alternative logical connectivity without ports using a realizing element

An alternative approach would be to use ifcRelConnectsWit­hRealizingEle­ment in which case an appropriate entity for the object realizing the connection relationship would need to be determined.

6.2.2 Concept of physical connectivity

If the logical connectivity (as described in section 6.2.1) is enhanced by a realizing element, it constitutes a physical connectivity.

The new IFC2×2 substantially enhances the ability to traverse connected building services elements. This is handled primarily through the IfcDistributionPort and IfcRelConnectsPorts and IfcRelConnectsPor­tToElement relationships.
The following figures exemplify these using a duct segment connecting to a tee and distributing air out through two connecting duct segments as shown in Figure 71.

figure72
Figure 72 : Duct segments connected to a tee fitting

Any building services element can have a related IfcDistributionPort instance related to it via the IfcRelConnectsPor­tToElement relationship (see Figure 72). Although the port has a local placement, which allows it to be aligned with its related element, it typically does not have any physical manifestation, and consequently there is no corresponding type definition for the port concept.

Use the IfcDistributi­onPort.Name attribute to define the sequential port number assigned to each element. This is necessary for relating property set values that contain lists of properties associated with a port, such as connection type, size, etc. Ports are connected together using the

figure73
Figure 73 : Connectivity example between two building services elements

Relating other engineering properties, such as flow characteristics, etc. to the port is accomplished as shown in Figure 73. Note that instances of IfcFluidFlowPro­perties and property set information containing connection-specific parameters are shared between both ports rather than duplicated.

figure74
Figure 74 : Assigning flow characteristics to ports

6.3 Specific concepts for selected building service elements

There are specific guidelines available to handle different building service elements. Currently included within this section of the Model Implementation Guide are:

6.3.1 Concept of Flow Moving Device

An IfcFlowMovingDevice is defined as a device that participates in a distribution system and is used for moving or impelling a fluid, such as a liquid or a gas, around a system. Generally, a flow moving device may be thought of as a fan, pump, or compressor.

As is normal for components in building services systems, flow moving devices are specified by type through a type entity (e.g. IfcPumpType) with each occurrence of a flow moving device specified using IfcFlowMovingDe­vice.
The occurrence of IfcFlowMovingDevice is typed as e.g. a pump through an instance of the IfcRelDefinesByType relationship class.

figure75
Figure 75: Pump type and occurrence definition

/* definition of the type -no geometry shown or property sets defined- / #1= IFCPUMPTYPE(‚ab­cdefghijklmnop­qrst11‘, #2, ‚Pump1‘, $, ‚IfcFlowMovin­gDevice‘, $, (#1011), $, $, .CIRCULATOR.); / definition of the occurrences

#10=IFCRELDEFI­NESBYTYPE(‚ab­cdefghijklmnop­qrst10‘, #2, $, $, (#20), #1); #20=IFCFLOWMO­VINGDEVICE(‚ab­cdefghijklmnop­qrst20‘, #2, $, $, $, #10001, #10002, $);

6.3.1.1 Creating Pump Aggregations

Pumps are typically installed complete with a set of isolating valves that enable the pump to be removed for maintenance or exchange.
It is possible to make an aggregation of the physical pump and the valves (and any connecting pipework and fittings) and treat them as though they were a single object.
In this case, the object that is the target of the aggregation becomes also an IfcFlowMovingDe­vice. The bringing together of the objects into an aggregation is achieved using the relationship class IfcRelAggregates.

/* definition of the occurrences being aggregated -no geometry shown- / #20=IFCFLOWMO­VINGDEVICE(‚ab­cdefghijklmnop­qrst20‘, #2, $, $, $, #10001, #10002, $); #21=IFCFLOWCON­TROLLER(‚abcdef­ghijklmnopqrst21‘, #2, $, $, $, #10003, #10004, $); #22=IFCFLOWCON­TROLLER(‚abcdef­ghijklmnopqrst22‘, #2, $, $, $, #10005, #10006, $); #23=IFCFLOWFIT­TING(‚abcdefghij­klmnopqrst23‘, #2, $, $, $, #10007, #10008, $); #24=IFCFLOWFIT­TING(‚abcdefghij­klmnopqrst24‘, #2, $, $, $, #10009, #10010, $); #25=IFCFLOWFIT­TING(‚abcdefghij­klmnopqrst25‘, #2, $, $, $, #10011, #10012, $); #26=IFCFLOWFIT­TING(‚abcdefghij­klmnopqrst26‘, #2, $, $, $, #10013, #10014, $); / defines the pump aggregation / #50=IFCRELAGGRE­GATES(‚abcdef­ghijklmnopqrst50‘, #2, $, $, #60, (#20,#21,#22,­#23.#24,#25,#26­)); / specification of the aggregation – without placement or representation/ #60=IFCFLOWMO­VINGDEVICE(‚ab­cdefghijklmnop­qrst60‘, #2, $, $, $, $, $, $); / definition of occurrence property set / #300=IFCPROPER­TYSET(‚abcdef­ghijklmnopqrst300‘, #2, ‚Pset_FlowMovin­gDevicePump’, $, (#310,#311,#312)); #301=IFCPROPER­TYSET(‘abcdef­ghijklmnopqrst301', #2, ‚Pset_FlowMovin­gDevicePump’, $, (#320,#321,#322)); / defines specific properties for a pump / #310=IFCPROPER­TYENUMERATEDVA­LUE(‘PumpCompo­sition', $, (‘ELEMENT’), #351); #311= …… ; #312= …… ; #320=IFCPROPER­TYENUMERATEDVA­LUE(‚PumpCompo­sition‘, $, (‘COMPLEX’), #351); #321= …… ; #322= …… ; / defines property enumerations used in specific type property set / #351=IFCPROPER­TYENUMERATION(‘PE­num_PumpCompo­sition’, (‘COMPLEX’, ‘ELEMENT’, ‘PARTIAL’, ‘NOTKNOWN’, ‘UNSET’), $); / definition of properties for the occurrences */ #410=IFCRELDE­FINESBYPROPER­TIES(‚abcdefghij­klmnopqrst410‘, #2, $, $, (#20), #300); #411=IFCRELDE­FINESBYPROPER­TIES(‚abcdefghij­klmnopqrst411‘, #2, $, $, (#60), #301);

figure76
Figure 76: Specifying a pump aggregation

As with flow storage devices (tanks), pumps can be identified as being elemental or complex through the property PumpComposition contained in the property set Pset_FlowMovin­gDevicePump. Note that this property set is defined for pump occurrences and not for pump types.

6.3.1.2 Creating Pump Sets

A pump set is considered to be an aggregation of 2 or more pumps that can act either together in series or in parallel or on a run and standby basis (i.e. one pump switched on and working whilst a second pump, and typically same sized pump, is inoperative but ready to become operative in the case of the first pump failing or being taken out of action.

figure7
Figure 77: Different levels of pump composition

In this case, the pump set aggregation consists of two or more of the pump aggregations as above (comprising the pump, valves, pipework and fittings), the valve, pipework and fitting that may be installed as a bypass line (i.e. a line forming part of the pump set but in which flow can bypass the installed pumps) and any pipework and fittings used to bring all of the individual aggregations together into a total aggregation.

figure78
Figure 78: Specifying a pump set aggregation

/* definition of the occurrences being aggregated -no geometry shown- */
#41=IFCFLOWFITTING('abcdefghijklmnopqrst23', #2, ‘Bend’, $, $, #10061, #10062, $);
#42=IFCFLOWFITTING('abcdefghijklmnopqrst24', #2, ‘Bend’, $, $, #10063, #10064, $);
#43=IFCFLOWFITTING('abcdefghijklmnopqrst23', #2, ‘Bend’, $, $, #10065, #10066, $);
#44=IFCFLOWFITTING('abcdefghijklmnopqrst24', #2, ‘Bend’, $, $, #10067, #10068, $);
#45=IFCFLOWFITTING('abcdefghijklmnopqrst25', #2, ‘Tee’, $, $, #10069, #10070, $);
#46=IFCFLOWFITTING('abcdefghijklmnopqrst26', #2, ‘Tee’, $, $, #10071, #10072, $);
/* definition of the pump set aggregation */
#51IFCRELAGGREGATES('abcdefghijklmnopqrst51, #2, $, $, #70,
(#41,#42,#43.#44,#45,#46,#60,#61));
/* specification of the pump aggregations */
#60=IFCFLOWMOVINGDEVICE('abcdefghijklmnopqrst60', #2, ‘Pump Aggregation’,$,$,$,$,$);
#61=IFCFLOWMOVINGDEVICE('abcdefghijklmnopqrst61', #2, ‘Pump Aggregation’,$,$,$,$,$);
/* specification of the pump set aggregation */
#70=IFCFLOWMOVINGDEVICE('abcdefghijklmnopqrst70', #2, ‘Pump Set Aggregation’,$,$,$,$,$);
/* definition of occurrence property sets */
#301=IFCPROPERTYSET('abcdefghijklmnopqrst301', #2, 'Pset_FlowMovingDevicePump’, $, (#320,#321,#322));
#302=IFCPROPERTYSET('abcdefghijklmnopqrst302', #2, 'Pset_FlowMovingDevicePump’, $, (#320,#321,#322));
#303=IFCPROPERTYSET('abcdefghijklmnopqrst303', #2, 'Pset_FlowMovingDevicePump’, $, (#320,#321,#322));
/* definition of specific properties for a pump */
#320=IFCPROPERTYENUMERATEDVALUE('PumpComposition', $, (‘COMPLEX’), #351);
#330=IFCPROPERTYENUMERATEDVALUE('PumpComposition', $, (‘COMPLEX’), #351);
#340=IFCPROPERTYENUMERATEDVALUE('PumpComposition', $, (‘COMPLEX’), #351);
/* definition of property enumerations used in specific type property set */
#351=IFCPROPERTYENUMERATION(‘PEnum_PumpComposition’, (‘COMPLEX’, ‘ELEMENT’, ‘PARTIAL’, ‘NOTKNOWN’, ‘UNSET’), $);
/* defines property relationships for the pump aggregation occurrences */
#411=IFCRELDEFINESBYPROPERTIES('abcdefghijklmnopqrst411', #2, $, $, (#60), #301);
#412=IFCRELDEFINESBYPROPERTIES('abcdefghijklmnopqrst412', #2, $, $, (#61), #302);
/* defines property relationship for the pump set aggregation occurrence */
#413=IFCRELDEFINESBYPROPERTIES('abcdefghijklmnopqrst413', #2, $, $, (#70), #303);

6.3.1.3 Common Properties of Pump Types

The common properties of a pump type are given in Pset_PumpTypeCommon and includes such ideas as: FlowRateRange, FlowResistance­Range, ConnectionSize, CasingMaterial, ImpellerMaterial, ImpellerSealMa­terial, TemperatureRange, NetPositiveSuc­tionHead, NominalRotati­onSpeed.

Note that the values for flow rate; flow resistance and temperature range are specified as bounded values (which means that an upper and/or lower limit value can be set).

6.3.1.4 Specifying The Pump Motor

A pump is typically driven by an electric motor. There are two ways in which a pump motor can be specified:

1. directly at the pump by using a property set for the motor and defining it directly for the pump (most frequently used for a close coupled pump),

2. indirectly through a motor connection.

figure79
Figure 79: Directly specifying a pump motor

Where the motor is specified indirectly, type and occurrence specifications are required for the pump, the motor and the connection made between the pump and the motor.

figure80
Figure 80: Types and occurrences for indirect motor connection

When the occurrences have been specified, they can be connected together using the relationship IfcRelConnectsWit­hRealizingEle­ment.
This is a clear example of where the ternary or third relationship capability can be used since the specific intention of a motor connection is to realize the connection made between a motor as the driving device and (in this case) the pump as the driven device. By so doing, only one relationship is required.
If the connections were made using other, conventional connection relationships, two separate relationships would be needed, one for the connection between motor and motor connection and one between the pump and the motor connection.

The actual type of the motor connection can be specified by the enumeration value IfcMotorConnec­tionTypeEnum that allows identification of whether direct drive, belt drive or coupling (e.g. fluid or viscous coupling) is used.

figure81
Figure 81: Realizing the indirect motor connection

/* definition of the types -no geometry shown or property sets defined- */
#1= IFCPUMPTYPE('abcdefghijklmnopqrst01', #2, 'Pump_1', $, 'IfcFlowMovingDevice', $, (#1011), $, $, .ENDSUCTION.);
#2= IFCELECTRICMOTORTYPE('abcdefghijklmnopqrst02', #2, 'Motor_1', $, 'IfcEnergyConversionDevice', $, (#1012), $, $, .INDUCTION.);
#3= IFCMOTORCONNECTIONTYPE('abcdefghijklmnopqrst03', #2, 'Connection_1', $, 'IfcEnergyConversionDevice', $, (#1013), $, $, .BELTDRIVE.);
/* defines the type relationships */
#11=IFCRELDEFINESBYTYPE('abcdefghijklmnopqrst11', #2, $, $, (#21), #1);
#12=IFCRELDEFINESBYTYPE('abcdefghijklmnopqrst12', #2, $, $, (#22), #2);
#13=IFCRELDEFINESBYTYPE('abcdefghijklmnopqrst13', #2, $, $, (#23), #3);
/* defines the type occurrences */
#21=IFCFLOWMOVINGDEVICE('abcdefghijklmnopqrst21', #2, $, $, $, #10001, #10002, $);
#22=IFCENERGYCONVERSIONDEVICE('abcdefghijklmnopqrst22', #2, $, $, $, #10003, #10004, $);
#23=IFCENERGYCONVERSIONDEVICE ('abcdefghijklmnopqrst23', #2, $, $, $, #10005, #10006, $);
/* realizes the connection relationship */
#30=IFCRELCONNECTSWITHREALIZINGELEMENT ('abcdefghijklmnopqrst30', #2, $, $, $, #21, #22, (#23), $);

6.3.2 Concept of Energy Conversion Device

An IfcEnergyConver­sionDevice is defined as a device that is used to perform energy conversion or heat transfer and that typically participates in a flow distribution system.
In the context of general energy conversion, it may be used to identify a device that converts energy from one form to another such as an electric motor. In the context of heat transfer, it may be used to identify a device in which heat is transferred from a primary medium to a secondary medium such as a boiler, water heater, chiller etc.

In the heat transfer context, energy conversion is concerned both with the circumstance in which the secondary medium is heated (boiler, water heater) and that in which the secondary medium is cooled (chiller).

As is normal for components in building services systems, an energy conversion device is specified by type through IfcEnergyConver­sionDeviceType with each occurrence of e.g. a boiler specified using IfcEnergyConver­sionDevice.

figure82
Figure 82: Energy conversion device type and instance

See Table 8 for particular types of energy conversion device that are defined as subtypes of IfcEnergyConver­sionDeviceType.

The Figure 82 shows the subtypes: IfcEnergyConver­sionDeviceType

figure83
Figure 83: Hierarchy of IfcEnergyConver­sionDeviceType

/* definition of the type -no geometry shown or property sets defined- / #1= IFCBOILERTYPE(‚ab­cdefghijklmnop­qrst01‘, #2, ‚Boiler1‘, $, ‚IfcEnergyCon­versionDevice‘, $, (#1011), $, $, .WATER.); / definition of the occurrences

#10=IFCRELDEFI­NESBYTYPE(‚ab­cdefghijklmnop­qrst10‘, #2, $, $, (#20), #1); #20=IFCENERGY­CONVERSIONDEVI­CE(‚abcdefghij­klmnopqrst20‘, #2, $, $, $, #10001, #10002, $);

Energy conversion devices handle a substantial number of concepts in building services. Some particular issues that can arise and how they may be dealt with in an IFC file are discussed further below.

6.3.2.1 Identifying Water Heaters

In general, a water heater may be defined as an energy conversion device. In the sense that it heats water, it may be considered to be a boiler whose predefined type is ‘water’.

figure84
Figure 84: Types of water heater

Various different forms of water heater may be defined based on the mechanism used for heating the water (the primary energy source) and whether the water is to be heated and stored (storage type) or made available for instant use (instantaneou­s type).

6.3.2.1.1

Property Sets Associated With a Water Heater More detail about a specific type of water can be given in the Pset_BoilerTy­peCommon property set that is attached at the type entity.

figure85
Figure 85: Applying the common property set to a boiler type

Property Property Type Value
PrimaryMedium Enumerated Value GAS
PressureRating Single Value
OperatingMode Enumerated Value UNSET
Material Reference Steel
PrimaryEnergySource Reference
AuxiliaryEner­gySource Reference
HeatTransferSur­faceArea Single Value
NominalPartLo­adRatio Bounded Value
WaterInletTem­peratureRange Bounded Value 15C/18C
WaterStorageCa­pacity Single Value 60 litres
Weight Single Value 100 kg
SoundLevel Reference
PartialLoadEf­ficencyCurves List Value
NominalEfficiency List Value
HeatOutput List Value
OutletTempera­tureRange Bounded Value 35C/40C
NominalEnergy­Consumption Single Value

Table 1: Values in Pset_BoilerTy­peCommon

In this case, because gas is used as the primary medium, the water heater is considered to be ‘Direct’ fired.
This would be the case also if the primary medium were ‘Electric’. For indirect heaters using heat transfer from water or steam, the values would be prefixed by ‘Indirect’ (as in INDIRECT_WATER, INDIRECT_STEAM).

/* definition of the type -no geometry shown - */
#1= IFCBOILERTYPE('abcdefghijklmnopqrst01', #2, 'Boiler_1', $, 'IfcEnergyConversionDevice', (#5001), (#1011), $, $, .WATER.);
/* definition of the occurrences
-no geometry shown- */
#10=IFCRELDEFINESBYTYPE('abcdefghijklmnopqrst10', #2, $, $, (#20), #1);
#20=IFCENERGYCONVERSIONDEVICE('abcdefghijklmnopqrst20', #2, $, $, $, #10001, #10002, $);
/* definition of the common property set and reference to the individual properties - */
#5000=IFCPROPERTYSET('abcdefghijklmnopqrst5000', #2, 'Pset_BoilerTypeCommon', 'Common attributes for a water heater', (#5001, #5002, #5003, #5004, #5005, #5006, #5007, #5008,
#5009, #5010, #5011, #5012, #5013, #5014, #5015, #5016, #5017));
/* the properties … */
#5001=IFCPROPERTYENUMERATEDVALUE('PrimaryMedium', $, ('GAS'), $);
#5002=IFCPROPERTYSINGLEVALUE('PressureRating', $, 0.0, $);
#5003=IFCPROPERTYENUMERATEDVALUE('OperatingMode', $, ('UNSET'), $);

In the above example, the property set is partially expanded to show some of the properties. In this example, the actual enumeration value used for the primary medium and the operating mode is shown but the enumeration references from which they are taken are not quoted.

6.3.2.1.2

Water Heaters as Electrical Appliances It should be noted that the IFC model also contains the concept of a water heater as an electrical appliance (as a value within the IfcElectricalAp­plianceTypeEnum).
This should be used only for examples of small, movable water heaters that have local plug connections (i.e. are not directly wired to an electrical system or that do not use plugs that are expected to be permanently placed).
Such a water heater will also not use the Pset_BoilerTy­peCommon for attribute information.

Other than as above, the IfcElectricalAp­plianceTypeEnum=­.WATERHEATER. should not be used.

6.3.2.2 Air Handling Units

Air handling units (air handlers) are instances of IfcUnitaryEqu­ipmentType used for the purpose of changing air conditions (humidity and/or temperature) between the entry and exit points.

Air handling units may be supplied by a manufacturer as a complete package or constructed of discrete components. Even when an air handling unit is delivered as a complete package, there may be a need to deal with information at a component based level for design or maintenance purposes.

Therefore, it is necessary to be able to handle information directly at the component level and at the aggregated air handling unit level. The aggregation is achieved using IfcRelAggregates.

figure86
Figure 86: Aggregation of components in an air handling unit

6.3.2.2.1 Spe­cifying The Fan Motor

The fan, the motor and the connection between them can be connected together using the relationship IfcRelConnectsWit­hRealizingEle­ment.
The type of the motor connection can be specified by the enumeration value IfcMotorConnec­tionTypeEnum that allows identification of whether direct drive, belt drive or coupling (e.g. fluid or viscous coupling) is used. See also 6.3.1.4.

figure87
Figure 87: Realizing the indirect motor connection

/* definition of the types -no geometry shown or property sets defined- */
#1= IFCFANTYPE('abcdefghijklmnopqrst01', #2, 'Fan_1', $, 'IfcFlowMovingDevice', $, (#1011), $, $, . CENTRIFUGALFORWARDCURVED.);
#2= IFCELECTRICMOTORTYPE('abcdefghijklmnopqrst02', #2, 'Motor_1', $, 'IfcEnergyConversionDevice', $, (#1012), $, $, .INDUCTION.);
#3= IFCMOTORCONNECTIONTYPE('abcdefghijklmnopqrst03', #2, 'Connection_1', $, 'IfcEnergyConversionDevice', $, (#1013), $, $, .BELTDRIVE.);
/* defines the type relationships */
#11=IFCRELDEFINESBYTYPE('abcdefghijklmnopqrst11', #2, $, $, (#21), #1);
#12=IFCRELDEFINESBYTYPE('abcdefghijklmnopqrst12', #2, $, $, (#22), #2);
#13=IFCRELDEFINESBYTYPE('abcdefghijklmnopqrst13', #2, $, $, (#23), #3);
/* defines the type occurrences */
#21=IFCFLOWMOVINGDEVICE('abcdefghijklmnopqrst21', #2, $, $, $, #10001, #10002, $);
#22=IFCENERGYCONVERSIONDEVICE('abcdefghijklmnopqrst22', #2, $, $, $, #10003, #10004, $);
#23=IFCENERGYCONVERSIONDEVICE ('abcdefghijklmnopqrst23', #2, $, $, $, #10005, #10006, $);
/* realizes the connection relationship */
#30=IFCRELCONNECTSWITHREALIZINGELEMENT ('abcdefghijklmnopqrst30', #2, $, $, $, #21, #22, (#23), $);

6.3.3 Concept of Flow Storage Device

An IfcFlowStorage­Device is defined as a device that participates in a distribution system and is used for temporary storage of a fluid such as a liquid or a gas. Generally, a flow storage device may be thought of as a tank although other types of storage device could be specified.

6.3.3.1 Tanks as Flow Storage Devices

A tank is the most general form of flow storage device. As is normal for components in building services systems, tanks are specified by type through IfcTankType with each occurrence of a tank specified using IfcFlowStorage­Device. The occurrence of IfcFlowStorage­Device is typed as a tank through an instance of the IfcRelDefinesByType relationship class.

figure88
Figure 88: Flow storage device type and occurrence

/* definition of the type -no geometry shown or property sets defined- / #1= IFCTANKTYPE(‚ab­cdefghijklmnop­qrst11‘, #2, ‚Tank1‘, $, ‚IfcFlowStora­geDevice‘, $, (#1011), $, $, .PREFORMED.); / definition of the occurrences

#10=IFCRELDEFI­NESBYTYPE(‚ab­cdefghijklmnop­qrst10‘, #2, $, $, (#20), #1); #20=IFCFLOWSTO­RAGEDEVICE(‚ab­cdefghijklmnop­qrst20‘, #2, $, $, $, #10001, #10002, $);

6.3.3.2 Property Sets Associated With a Tank Type

More detail about a specific type of tank can be given in property sets that are attached at the type entity.

figure89
Figure 89: Property sets associated with a tank type

Several possibilities are defined as standard property sets within the IFC model:

As an example, consider a storage tank with a nominal capacity of 6000 litres. The common properties given within the Pset_TankTypeCommon for such a tank are:

Property Property Type Value
Type Enumerated Value WATERSTORAGEPOTABLE
AccessType Enumerated Value LOOSECOVER
NominalLengthOr­Diameter Single Value 3m
NominalWidthOr­Diameter Single Value 2m
NominalDepth Single Value 1m
NominalCapacity Single Value 6 m3 (6000 litres)
EffectiveCapacity Single Value 4.6 m3 (4600 litres)
OperatingWeight Single Value 4950 kg
Material Reference Steel
MaterialThickness Single Value 2mm

Table 2: Properties for Tanks as defined in Pset_TankTypeCommon

6.3.3.2.1 Tank Shape

Geometrically, a tank may be specified as rectangular, as a horizontal or vertical cylinder or as a spherical container.

figure90
Figure 90: Types of tank shape

This shape is defined as a property PatternType defined as an enumeration within the property set Pset_TankType­PreformedTank e­.g.

Property Property Type Value
PatternType Enumerated Value RECTANGULAR

Table 3: Setting the value for tank shape

Additionally, values are defined that enable the curvature of the ends of a horizontal or vertical cylinder.
This allows specification of whether the ends are concave, convex or flat (or whether, as in the case of a spherical tank, unset). Values are defined in pairs so that it is possible to specify concave/convex etc.
In this case, it is necessary to define a convention that enables the identification of which end is which.

The convention applied is that the first value in the pair represents the base (in the case of a vertical cylinder) or the left hand side (in the case of a horizontal cylinder when viewed as a front elevation). This becomes relevant when specifying the radius of curvature of shaped ends (below).

Radii of curvature are found from the properties FirstCurvature­Radius and SecondCurvatu­reRadius defined in the property set Pset_TankType­PreformedTank. As identified from the convention, the ‘First’ value is base or left hand side whilst ‘Second’ is the top or right hand side.

The actual values given for radii of curvature must be positive (through specification of the use of IfcPositiveLen­gthMeasure). This means that the curvature directions are identified from the terms ‘concave’ (for inward curvature) and ‘convex’ (for outward curvature.

Property Property Type Allowed Values
EndShapeType Enumerated Value CONCAVE/CONVEX
  FLAT/CONVEX
  CONVEX/CONVEX
  CONCAVE/FLAT
  FLAT/FLAT

Table 4: Setting values for curved end shapes

6.3.3.2.2 Sectional Tanks

A rectangular tank may be preformed or it may be sectional. Preformed tanks are generally relatively small with the body of the tank it is delivered to site in one piece.
Sectional tanks tend to be large and are constructed on site from plate sections that are bolted together.

In the case of a sectional tank being specified, the property set Pset_TankType­SectionalTank is also used to specify the number of sections to be used together with the length and width of each section.

It should be noted that, in a sectional tank, the overall size is given by Pset_TankTypeCommon and the section sizes by Pset_TankType­SectionalTank.
There is no automatic cross checking that the overall size matches the tank size that would be determined by adding together the sizes of sections. It is up to the user, or the application employed by the user, to reconcile these sizes.

6.3.3.3 Property Sets Associated With a Tank Occurrence

Individual occurrences of a tank can also have properties. These are attached to the flow storage device occurrence however and not to the tank type

figure91
Figure 91: Property set associated with a tank occurrence

Property Property Type Value
TankComposition Enumerated Value ELEMENT
HasLadder Enumerated Value FALSE
HasVisualIndicator Single Value FALSE

Table 5: Setting values in the tank occurrence property set

/* definition of the type -no geometry shown- */
#1= IFCTANKTYPE('abcdefghijklmnopqrst11', #2, 'Tank_1', $, 'IfcFlowStorageDevice', (#100,#200), (#1011), $, $, .PREFORMED.);
/* definition of the occurrence
-no geometry shown- */
#10=IFCRELDEFINESBYTYPE('abcdefghijklmnopqrst10', #2, $, $, (#20), #1);
#20=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst20', #2, $, $, $, #10001, #10002, $);
/* relating a property set to the occurrence */
#50=IFCRELDEFINESBYPROPERTIES('abcdefghijklmnopqrst50', #2, $, $, (#20), #300);
/* definition of the common property set */
#100=IFCPROPERTYSET('abcdefghijklmnopqrst100', #2, 'Pset_TankTypeCommon', $, (#110,#111,#112,#113,#114,#115,#116,#117,#118,#119));
/* definition of the properties within the common property set */
#110=IFCPROPERTYENUMERATEDVALUE('Type', $, (‘WATERSTORAGEPOTABLE’), #151);
#111=IFCPROPERTYENUMERATEDVALUE('AccessType', $, (‘LOOSECOVER’), #152);
#112=IFCPROPERTYSINGLEVALUE('NominalLengthOrDiameter', $, IFCLENGTHMEASURE(3), #99920);
#113=IFCPROPERTYSINGLEVALUE('NominalWidthOrDiameter', $, IFCLENGTHMEASURE(2), #99920);
#114=IFCPROPERTYSINGLEVALUE('NominalDepth', $, IFCLENGTHMEASURE(2), #99920);
#115=IFCPROPERTYSINGLEVALUE('NominalCapacity', $, IFCVOLUMEMEASURE(6), #99910);
#116=IFCPROPERTYSINGLEVALUE('EffectiveCapacity', $, IFCVOLUMEMEASURE(4.6), #99910);
#117=IFCPROPERTYSINGLEVALUE('Operating Weight', $, IFCMASSMEASURE(4950), #99900);
#118= IFCPROPERTYREFERENCEVALUE(‘Material’, $, $, #161);
#119=IFCPROPERTYSINGLEVALUE('MaterialThickness', $, IFCLENGTHMEASURE(.002), #99920);
/* definition of property enumerations used in common property set */
#151=IFCPROPERTYENUMERATION(‘PEnum_TankType’, (‘BREAKPRESSURE’, ‘EXPANSION’,
‘FEEDANDEXPANSION’, ‘GASSTORAGEBUTANE’, ‘GASSTORAGELIQUIFIEDPETROLEUMGAS’,
‘GASSTORAGEPROPANE’, ‘OILSERVICE’, ‘OILSTORAGE’, ‘WATERSTORAGEGENERAL’,
‘WATERSTORAGEPOTABLE’, ‘WATERSTORAGEPROCESS’, ‘WATERSTORAGECOOLINGTOWERMAKEUP’, ‘OTHER’,
‘NOTKNOWN’, ‘UNSET’), $);
#152=IFCPROPERTYENUMERATION(‘PEnum_TankAccessType’, (‘NONE’, ‘LOOSECOVER’, ‘MANHOLE’,
‘SECUREDCOVER’, ‘SECUREDCOVERWITHMANHOLE’, ‘OTHER’, ‘NOTKNOWN’, ‘UNSET’), $);
/* definition of property references used in common property set */
#161=IFCMATERIAL(‘Steel’);
/* definition of specific type property set */
#200=IFCPROPERTYSET('abcdefghijklmnopqrst200', #2, 'Pset_TankTypePreformedTank’, $, (#210));
/* definition of specific properties for a preformed tank */
#210=IFCPROPERTYENUMERATEDVALUE('Type', $, (‘RECTANGULAR’), #251);
/* definition of property enumerations used in specific type property set */
#251=IFCPROPERTYENUMERATION(‘PEnum_TankPatternType’, (‘HORIZONTALCYLINDER’,
‘VERTICALCYLINDER’, ‘RECTANGULAR’, ‘OTHER’, ‘NOTKNOWN’, ‘UNSET’), $);
/* definition of occurrence property set */
#300=IFCPROPERTYSET('abcdefghijklmnopqrst300', #2, 'Pset_FlowStorageDeviceTank’, $, (#310,#311,#312));
/* definition of specific properties for a preformed tank */
#310=IFCPROPERTYENUMERATEDVALUE('TankComposition', $, (‘ELEMENT’), #351);
#311=IFCPROPERTYSINGLEVALUE('HasLadder', $, IFCBOOLEAN(.F.), $);
#312=IFCPROPERTYSINGLEVALUE('HasVisualIndicator', $, IFCBOOLEAN(.F.), $);
/* definition of property enumerations used in specific type property set */
#351=IFCPROPERTYENUMERATION(‘PEnum_TankComposition’, (‘COMPLEX’, ‘ELEMENT’, ‘PARTIAL’, ‘NOTKNOWN’, ‘UNSET’), $);
/* definition of units used */
#99900=IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.);
#99910=IFCSIUNIT(*,.VOLUMEUNIT.,$,.METRE.);
#99920=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);

6.3.3.3.1 Com­partmentalized Tanks

Tanks may be provided so that fluid storage is in one compartment (the whole tank) or in multiple, separated compartments.
The latter will be particularly the case with large tanks. This predominantly relates to rectangular tank constructions but could also relate to other shapes.
The situation is similar to that of spatial structure elements where an element can be described as complex (multiple units), element (single unit) or partial (part of a unit).

figure92
Figure 92: An individual tank compartment

The Solution can be determined by:

figure93
Figure 93: Aggregating multiple compartments into a single tank

/* TYPE LEVEL PROPERTY SETS NOT SHOWN IN THIS EXAMPLE */
/* definition of individual compartments by tank type -no geometry shown- */
#1= IFCTANKTYPE('abcdefghijklmnopqrst11', #2, 'Tank_Part', $, 'IfcFlowStorageDevice', (#100,#200), (#1011), $, $, .PREFORMED.);
/* relating the occurrences to the type */
#10=IFCRELDEFINESBYTYPE('abcdefghijklmnopqrst10', #2, $, $, (#20,#21,#22,#23,#24,#25,#26,#27), #1);
/* definition of the occurrences - placement references given but no geometry shown- */
#20=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst20',#2,$,$,$,#10020,#10002,$);
#21=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst21',#2,$,$,$,#10021,#10002,$);
#22=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst22',#2,$,$,$,#10022,#10002,$);
#23=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst23',#2,$,$,$,#10023,#10002,$);
#24=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst24',#2,$,$,$,#10024,#10002,$);
#25=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst25',#2,$,$,$,#10025,#10002,$);
#26=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst26',#2,$,$,$,#10026,#10002,$);
#27=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst27',#2,$,$,$,#10027,#10002,$);
#28=IFCFLOWSTORAGEDEVICE('abcdefghijklmnopqrst28',#2,$,$,$,#10028,#10003,$);
/* placing the partial tanks into the elemental tank */
#30=IFCRELNESTS('abcdefghijklmnopqrst30', #2, $, ‘Compartmentalized tank nesting’, #28, (#20,#21,#22,#23,#24,#25,#26,#27));
/* relating a property set to the occurrences */
#50=IFCRELDEFINESBYPROPERTIES('abcdefghijklmnopqrst50', #2, $, $, (#20,#21,#22,#23,#24,#25,#26,#27), #300);
#51=IFCRELDEFINESBYPROPERTIES('abcdefghijklmnopqrst51', #2, $, $, (#28), #301);
/* definition of occurrence property sets */
#300=IFCPROPERTYSET('abcdefghijklmnopqrst300', #2, 'Pset_FlowStorageDeviceTank’, $, (#310,#321,#322));
#301=IFCPROPERTYSET('abcdefghijklmnopqrst301', #2, 'Pset_FlowStorageDeviceTank’, $, (#311,#321,#322));
/* definition of specific properties for a preformed tank */
#310=IFCPROPERTYENUMERATEDVALUE('TankComposition', $, (‘PARTIAL’), #351);
#311=IFCPROPERTYENUMERATEDVALUE('TankComposition', $, (‘ELEMENT’), #351);
#321=IFCPROPERTYSINGLEVALUE('HasLadder', $, IFCBOOLEAN(.F.), $);
#322=IFCPROPERTYSINGLEVALUE('HasVisualIndicator', $, IFCBOOLEAN(.F.), $);
/* definition of property enumerations used in specific type property set */
#351=IFCPROPERTYENUMERATION(‘PEnum_TankComposition’, (‘COMPLEX’, ‘ELEMENT’, ‘PARTIAL’, ‘NOTKNOWN’, ‘UNSET’), $);

figure94
Figure 94: Aggregating individual tanks into a tank complex

Each compartment of the tank can be recognized with its own properties instead of trying to capture these within an overall tank property set.
A tank with compartments of different sizes can be composed (instead of assuming that all compartments are the same size) and
separate tanks acting together to fulfil a common role can be identified as a tank complex.

figure95
Figure 95: Connections from tank compartments

6.4 Building service system engineering concepts

The concepts of system and zoning for building service elements are important to building services specific view definitions of IFC2×2 – however they don't form part of the basic coordination view.

6.4.1 Concept of system

A system is defined as an ‘organized combination of related parts within an AEC product, composed for a common purpose or function or to provide a service’.
The key concepts of this definition are that the parts are related and that, in composition, they fulfill a common purpose. Within the IFC Model, a system is defined as a subtype of IfcGroup. That is, it acts as a functional related aggregation of objects.
However, whilst the IfcGroup can aggregate any set of instances that are subtypes of IfcObject, the IfcSystem is restricted by a WHERE rule so that it can only aggregate subtypes of IfcElement or other (sub-)systems.

ENTITY IfcSystem
SUBTYPE OF (IfcGroup);
INVERSE ServicesBuildings : SET [0:1] OF IfcRelServicesBuildings FOR RelatingSystem;
WHERE WR1 : SIZEOF (QUERY (temp * SELF\IfcGroup.IsGroupedBy.RelatedObjects |
NOT (('IFCPRODUCTEXTENSION.IFCELEMENT' IN TYPEOF(temp)) OR
('IFCPRODUCTEXTENSION.IFCSYSTEM' IN TYPEOF(temp))) )) = 0;
END_ENTITY;

Whilst this allows for any subtype of element to participate in an IfcSystem, the definition that they should be related is significant.
Typically, an IfcSystem will act for a particular purpose and the elements that are aggregated into the system should be consistent withy that purpose.
For instance, in an architectural context, a system might be used to define a functionally related set of walls.
In structural engineering, this might be beams and columns whilst in a building services context, a system will comprise distribution elements (pipes or ducts or cables and related items).
Objects that are clearly intended for use within one purpose should not be mixed in a system with objects that are clearly intended for a different purpose.

figure96
Figure 96 : Elements aggregated into a system

In general, it is expected that the elements that comprise a system will be connected together in a ‘systematic’ way. However, there is no enforcement of a connectivity requirement within IfcSystem14.

Therefore, if there is a need for elements to be connected (e.g. to establish a flow path), this has to be defined prior to an IFC export or be determined by applying external rules procedures to the exported information.

6.4.1.1 System Naming

There may be many instances of IfcSystem within a building, each system fulfilling a different purpose. To distinguish between them, it is important that each system is named or identified according to what it does.
There are two potential strategies that can be used for system naming. These are explicit naming and classification.

For explicit naming, systems are identified using the inherited Name attribute from IfcRoot. This resolves to a simple STRING data type.

Note also that the attribute ObjectType inherited from IfcObject may be optionally used to qualify the system name further. The latter is particularly used together with property set or type definitions attached to the IfcSystem.

An enumeration of system types is not used, firstly because of the enormous range of system types that can exist and secondly because naming of system types is likely to vary from place to place.

Where selection is to be made from a constrained list, it is strongly recommended that the classification strategy is used and that a list of system types within a published classification is used. For detailed information on implementation of classification within IFC, a reference is made to the relevant section

10.4.2. An example of classified system types extracted from the UNICLASS15

specification is given below. In UNICLASS, systems are identified within sections G5 (Mechanical) and G6 (Electrical):

System Name Code
Cold water systems G501 Lifts G561
Hot water supply systems G502 Escalators G562
Gas supply systems G51 Conveyors G563
Heating systems G52 Traveling cradle systems G564
HVAC G52 Entrance controls G5711
Air conditioning systems G52 Security alarm systems G5712
Electric power G53 Smoke detection/alarm systems G5721
Power G53 Fire detection and alarm systems G5721
Lighting G54 Sprinkler systems G5722
System Name Code Public address systems G551
Fire fighting systems G5722 Visual display communications G552
Fire suppression systems G5722 Radio communication systems G553
Smoke extract/control systems G5723 TV communication systems G554
Lightning protection G5731 Telecommunications systems G555
Drainage G581 Computer network communications G556
Foul drainage G5811 Hoists G561
Surface water drainage services G5812 Refuse chute disposal systems G582
Monitoring/control systems G66    

Table 6 : Example of UNICLASS system definitions

Note14 Up to IFC 2×2 Addendum 1

Note15 UNICLASS is a facetted classification system based on the classification systems framework of ISO 12006 Part 2 and developed for use within UK practice.

6.4.1.2 System Naming in Applications

There are many cases where system names provided through an IFC exchange need to comply with particular system types. Examples include:

It is likely that agreements on system naming will need to be made according to local or project usage or through use of a named classification system.
In either case, it is important that the application exports a system name or identity that can be understood by the downstream (receiving) application according to the defined criteria.

6.4.1.3 Multi­functionality

Some elements can participate in more than one group (generically) or more than one system (specifically).
The ability of an element to participate in more than one performing group is termed multifunctionality.
Multifunctionality is achieved by assigning an element to more than one instance of IfcGroup (or its subtype IfcSystem) through the definition of multiple instances of IfcRelAssigns­ToGroup. For instance, a pipe may belong to one system group for fabrication purposes, a second system group for building code checking purposes and a third group for scheduling purposes. Each group in this case may be defined as a subsystem (see below), the element still participates in only one overall system.

figure97
Figure 97 : Multifunctional element in multiple subsystems

Alternatively, an element may be performing a distribution role in one system context but a structural role in a different system context.
In this case, the element is assigned to two completely separate systems through two instances of IfcRelAssigns­ToGroup.

figure98
Figure 98 : Multifunctional element in multiple system contexts

6.4.1.4 Subsystems

There is often a need to be able to identify related subsets of elements within a system.
Subsets, or subsystems, may be required for many purposes including for off-site fabrication, identification for building code compliance, construction scheduling (and 4D animation).

figure99
Figure 99 : A group can contain other groups

Within IFC 2×2, an IfcGroup (the supertype of IfcSystem) is specified as a subtype of IfcObject. Other objects are related to that group through IfcRelAssigns­ToGroup. The IfcRelAssigns class (which is the supertype of IfcRelAssigns­ToGroup) is used to provide the set of related instances of IfcObject. Because it is a subtype of IfcObject, an instance of IfcGroup can participate as a member of the set of objects forming another group.

figure100
Figure 100 : Elements aggregated into subsystems

figure101
Figure 101 : Systems and subsystems with hierarchical relations

A nesting relationship is considered to exist between a system and a subsystem (as opposed to the grouping relationship that exists between a system and its contained elements).
Within IFC 2×2, a nesting relationship is defined as a decomposition of objects of the same type.
That is, an IfcSystem can also nest other instances of IfcSystem.

/* Element definitions */
#1001=IFCFLOWSEGMENT ('abcdefghijklmnopqrs113', #1, $, $, $, $, $, $);
#1002=IFCFLOWFITTING ('abcdefghijklmnopqrs213', #1, $, $, $, $, $, $);
#1003=IFCFLOWSEGMENT ('abcdefghijklmnopqrs313', #1, $, $, $, $, $, $);
#1004=IFCFLOWFITTING ('abcdefghijklmnopqrs413', #1, $, $, $, $, $, $);
#1005=IFCFLOWFITTING ('abcdefghijklmnopqrs513', #1, $, $, $, $, $, $);
#1006=IFCFLOWFITTING ('abcdefghijklmnopqrs613', #1, $, $, $, $, $, $);
#1007=IFCFLOWSEGMENT ('abcdefghijklmnopqrs713', #1, $, $, $, $, $, $);
#1008=IFCFLOWFITTING ('abcdefghijklmnopqrs813', #1, $, $, $, $, $, $);
#1009=IFCFLOWSEGMENT ('abcdefghijklmnopqrs913', #1, $, $, $, $, $, $);
#1010=IFCFLOWFITTING ('abcdefghijklmnopqr1013', #1, $, $, $, $, $, $);
#1011=IFCFLOWSEGMENT ('abcdefghijklmnopqr1113', #1, $, $, $, $, $, $);
#1012=IFCFLOWFITTING ('abcdefghijklmnopqr1213', #1, $, $, $, $, $, $);
#1013=IFCFLOWTERMINAL('abcdefghijklmnopq13t13', #1, $, $, $, $, $, $);
#1014=IFCFLOWFITTING ('abcdefghijklmnopqr1413', #1, $, $, $, $, $, $);
#1015=IFCFLOWSEGMENT ('abcdefghijklmnopqr1513', #1, $, $, $, $, $, $);
/* System definitions */
#2001=IFCSYSTEM ('abcdefghijklmnopqrst02',#2,'HeatingSystem', $,'ParentSystem');
#2002=IFCSYSTEM ('abcdefghijklmnopqrst03',#3,'DropPipeSubsystem', $,'Subsystem');
#2003=IFCSYSTEM ('abcdefghijklmnopqrst04',#4,'EmitterSubsystem', $,'Subsystem');
/* Assignment of Elements to Systems */
#3001=IFCRELASSIGNSTOGROUP ('abcdefghijklmnopqrst52',#5,$,$,(#1001,#1002,#1003,#1004,#1005,#1006,#1007,#1008,#1009,
#1010,#1011,#1012,#1013,#1014,#1015),.PRODUCT.,#2001);
#3002=IFCRELASSIGNSTOGROUP ('abcdefghijklmnopqrst53',#6,$,$,(#1001,#1002,#1003,#1004,#1005,#1006,#1007,#1008),.PROD UCT.,#2002);
#3003=IFCRELASSIGNSTOGROUP ('abcdefghijklmnopqrst54',#7,$,$,(#1009,#1010,#1011,#1012,#1013,#1014,#1015),.PRODUCT.,# 2003);
/* Nesting of subsystems */
#4001=IFCRELNESTS ('abcdefghijklmnopqrst62',#8,$,$,#2001,(#2002,#2003));