IFC is about spatial, physical and process entities. These are the three modules which an application may or may not support.
At the bottom, there are plenty of questions about the multiple geometric representations that are available and how to manage the fact that some applications and use-cases need all or none or some or whatever.
Also at the bottom level is the Ifc Constraint schema. I am a fan, and I am pleased that little by little others are discovering it. In fact, I think its so good it should be promoted to be the fourth top module. Constraints such as objectives and metrics need to be derived from ifcRoot.
How does this work? An application can choose which and how many of the four to support.
(C) AEC3 (and Solibri) have been using Ifc Constraint model in a standalone manner for a decade. Many users, especially designers and specifiers would like to be able to specify requirements on other top level things too. Other control elements might be in here. The main external relationship is IfcRelConstrains(this, somethings in one of the other modules) . The main internal relationship is IfcRelDetermines(this, others)
(S) The spatial structure including Site and grids and alignments and spaces (but excluding IFC facility) should form the second top module to allow the “nominated framework” to be described. This module needs the simple geometry of grids and the advanced geometry of alignments. The main external relationship is IfcRelContains(this, something in one of the other modules) . The main internal relationships are IfcRelAdjoins(this, others) and
IfcRelComprises(this, others)
(P) The third module is all the physical elements, from all the so-called domains and including ifc facility. It would be great if we also rationalised them so that any application that can do one physical entity can do them all. Lots of geometry and symbology here. The main external relationship is IfcRelBounds(this, something in one of the other modules) . The main internal relationships are IfcRelTouches(this, others)
IfcRelAssembles(this, others) .
(W) The fourth module is the work (process) model (Ifcproject, tasks, work-plans, task-types, events, processes) such as would be produced from Microsoft project etc. This module will include cost (every process costs), and actors and consumable resources. The main external relationship is IfcRelModifies(this, something in one of the other modules) . The main internal relationships are IfcRelSequences(this, others) and IfcRelBreaksdown(this, others)
Thereby any app can be judged to support C/S/P/W so revit is -/S/P/-