The Material Facet
Lesson 11 of 16 • ~4 min
Try it yourself!
Practice the concepts from this lesson in the interactive playground.
Overview
The Material Facet targets material assignments for elements, which are crucial for structural, architectural, and construction analysis. IFC supports various material configurations, and the Material facet provides a unified way to check them.
Why Materials Matter
Materials are essential for:
- Structural analysis - Load calculations, strength properties
- Cost estimation - Material quantities and pricing
- Sustainability - Environmental impact assessment
- Code compliance - Fire ratings, thermal properties
IFC Material Structure
IFC supports multiple material assignment methods:
| Material Type | Description | Example |
|---|---|---|
| Single Material | Element made of one material | Column = "Concrete" |
| Layered Materials | Multiple layers (walls, slabs) | Wall = Insulation + Concrete + Finish |
| Profiled Materials | Different materials in profiles | Steel beam with different flange/web materials |
| Constituent Materials | Composite materials | Window = Glass + Aluminum frame |
IFC Implementation
IfcMaterialLayerSet- For layered assembliesIfcMaterialConstituentSet- For composite materialsIfcMaterialProfileSet- For profiled elements
Key Point: Material facet abstracts these complexities - if any material matches your criteria, the check passes.
Parameters
Value (Optional)
Purpose: Specifies the material name or category to match
Options:
- Specific name: "concrete", "steel", "wood"
- Material category: Broad groupings for flexibility
- Pattern: Regex for naming conventions
- Omitted: Any material (just checks material exists)
Recommended Categories:
concrete, steel, aluminium, block, brick, stone,
wood, glass, gypsum, plastic, earth
URI (Optional)
Purpose: Reference link to material definition (informational only)
Use Cases:
- Link to material database entry
- Reference to standard specifications
- buildingSMART Data Dictionary reference
Note: Not used in model checking, documentation only
How Material Checking Works
Matching Logic
The Material facet searches through all material assignments on an element:
For Layered Materials: Checks each layer's material
For Constituents: Checks each constituent's material
For Profiles: Checks profile materials
For Simple Materials: Checks the single material
Matching Types
1. Exact Name Match
Value: "concrete" → Matches material named "concrete"
2. Category Match
Value: "steel" → Matches "Steel, ASTM A992", "structural steel", etc.
3. Pattern Match
Value: "CON[0-9]{2}" → Matches "CON01", "CON02", etc.
4. Existence Check
(no Value) → Element must have any material assigned
Important Notes
- "At Least One" Logic: If any material matches, the check passes
- Free Text Names: Material names are not standardized in IFC
- Project Conventions: Effective use requires consistent naming
- Layer Limitation: Cannot specify which specific layer must have material
Material Facet parameter summary:
- Value – Optional. The material name or category to match. Supports restrictions (lists, patterns). If omitted, any material (just existence of a material) satisfies it . Allowed values can be any string (since material names in IFC are text). The IDS user manual suggests using general categories like “wood”, “brick”, etc. if using categories . Meaning: the element must have a material whose name exactly matches, is one of the listed, or fits the regex/pattern provided.
- URI – Optional. A Uniform Resource Identifier linking to a material definition (for example, an entry in a material library or standard) . Not used in checking the model; just reference. For instance, a URI pointing to a specific concrete definition in some database. (The example given is a bSDD URI for “Plywood”) .
Practical Examples
1. Material Existence Check
Requirement: "All physical elements must have a material assigned"
(no Value parameter)
Result: Ensures no elements are left without material assignments
2. Specific Material
Requirement: "Structural columns must be made of concrete"
Value: "concrete"
Result: Elements must have material named "concrete"
3. Multiple Acceptable Materials
Requirement: "Foundation elements must be concrete or steel"
Value: ["concrete", "steel"]
Result: Element must have at least one material from the list
4. Material Category
Requirement: "Exterior walls must include wood materials"
Value: "wood"
Result: Matches "wood", "timber", "hardwood", etc.
5. Naming Convention
Requirement: "Concrete mixes must follow CON## naming pattern"
Value: "CON[0-9]{2}"
Result: Matches "CON01", "CON02", "CON15", etc.
Usage Summary
| Use Case | Configuration | Result |
|---|---|---|
| Any material | (no Value) | Element has material assigned |
| Wood elements | Value="wood" | Contains wood material |
| Masonry elements | Value="brick" | Contains brick material |
| Structural materials | Value=["concrete", "steel"] | Contains concrete OR steel |
| Coded materials | Value="CON[0-9]{2}" | Material code like CON01 |
Important Considerations
Material Naming:
- IFC material names are free-text (not standardized)
- Effective use requires project naming conventions
- Consider case sensitivity in matching
Complex Materials:
- Facet checks "at least one" material matches
- Cannot specify requirements for specific layers
- Good for general material presence, limited for detailed composition
Project Strategy:
- Establish material naming standards early
- Use categories for flexibility
- Combine with Entity facets for specific element types