+defProperty : L0.Template
+ @template %subject %label %range
+ %subject <R L0.HasProperty : SEL.GenericParameterType
+ L0.HasLabel %label : L0.String
+ L0.HasRange %range
+
+// ----------------------------------------------------------------------------
+
+DN.Diagram <T DIA.Diagram
+DN.Layer <T DIA.Layer
+DN.Connection <T DIA.Connection
+DN.Element <T DIA.Element : L0.Type
+
+DN.Vertex <T DN.Element
+ >-- DN.Vertex.HasElevation
+ @defProperty "Elevation" L0.Double
+ >-- DN.Vertex.HasAltElevation
+ @defProperty "Alternative Elevation" L0.Double
+ >-- DN.Vertex.HasAddress
+ @defProperty "Address" L0.String
+ >-- DN.Vertex.HasSupplyTemperature
+ @defProperty "Supply Temperature" L0.Double
+ >-- DN.Vertex.HasReturnTemperature
+ @defProperty "Return Temperature" L0.Double
+ >-- DN.Vertex.HasSupplyPressure
+ @defProperty "Supply Pressure" L0.Double
+ >-- DN.Vertex.HasReturnPressure
+ @defProperty "Return Pressure" L0.Double
+ >-- DN.Vertex.HasDeltaPressure
+ @defProperty "Delta pressure" L0.Double
+ >-- DN.Vertex.HasDeltaTemperature
+ @defProperty "Delta temperature" L0.Double
+ >-- DN.Vertex.HasHeatPower
+ @defProperty "Heat Power" L0.Double
+ >-- DN.Vertex.HasPeakPower
+ @defProperty "Peak Power" L0.Double
+ >-- DN.Vertex.HasNominalHeadM
+ @defProperty "NominalHeadM" L0.Double
+ >-- DN.Vertex.HasNominalHeadB
+ @defProperty "NominalHeadB" L0.Double
+ >-- DN.Vertex.HasNominalFlow
+ @defProperty "Nominal Flow" L0.Double
+ >-- DN.Vertex.HasMaximumHeadM
+ @defProperty "Maximum head M" L0.Double
+ >-- DN.Vertex.HasHeatLoadDs
+ @defProperty "Heat Load ds" L0.Double
+ >-- DN.Vertex.HasMassFlow
+ @defProperty "Mass Flow" L0.Double
+ >-- DN.Vertex.HasVolFlow
+ @defProperty "Vol Flow" L0.Double
+ >-- DN.Vertex.HasVelocity
+ @defProperty "Velocity" L0.Double
+ >-- DN.Vertex.HasFlowArea
+ @defProperty "Flow Area" L0.Double
+ >-- DN.Vertex.HasValvePosition
+ @defProperty "Valve position" L0.Double
+ >-- DN.Vertex.HasNominalPressureLoss
+ @defProperty "Nominal Pressure Loss" L0.Double
+ >-- DN.Vertex.HasPumpInReturnLine
+ @defProperty "Pump in Return Line" L0.Double
+ >-- DN.Vertex.HasHeadPumpMaximum
+ @defProperty "Head pump maximum" L0.Double
+ >-- DN.Vertex.HasHeadPumpNominal
+ @defProperty "Head pump nominal" L0.Double
+ >-- DN.Vertex.HasFrequencyConverterControlled
+ @defProperty "Frequency Converter Controlled" L0.Double
+ >-- DN.Vertex.HasInternalValveMeasurement
+ @defProperty "Internal Valve Measurement" L0.Double
+ >-- DN.Vertex.HasPumpMassFlowNominal
+ @defProperty "Pump Mass Flow Nominal" L0.Double
+ >-- DN.Vertex.HasPumpMeMax
+ @defProperty "Pump Me Max" L0.Double
+ >-- DN.Vertex.HasPumpMeMin
+ @defProperty "Pump Me Min" L0.Double
+ >-- DN.Vertex.HasPumpSpeedMax
+ @defProperty "Pump Speed Max" L0.Double
+ >-- DN.Vertex.HasPumpSpeedMin
+ @defProperty "Pump Speed Min" L0.Double
+ >-- DN.Vertex.HasValveReturnLine
+ @defProperty "Valve Return Line" L0.Double
+ >-- DN.Vertex.HasValveMeMax
+ @defProperty "Valve Me Max" L0.Double
+ >-- DN.Vertex.HasValveMeMin
+ @defProperty "Valve Me Min" L0.Double
+ >-- DN.Vertex.HasValveMinPosition
+ @defProperty "Valve Min Position" L0.Double
+ >-- DN.Vertex.HasValveOutletMode
+ @defProperty "Valve Outlet Mode" L0.Double
+ >-- DN.Vertex.HasValvePressLossNominal
+ @defProperty "Valve Press Loss Nominal" L0.Double
+ >-- DN.Vertex.HasOpeningTime
+ @defProperty "Opening Time" L0.Double
+ @L0.assert DN.Vertex.HasElevation 0.0
+
+DN.Edge <T DN.Element
+ >-- DN.Edge.HasElevation
+ @defProperty "Elevation" L0.Double
+ >-- DN.Edge.HasLength
+ @defProperty "Length" L0.Double
+ L0.readOnly true
+ >-- DN.Edge.HasGeometry
+ @defProperty "Detailed Geometry" L0.DoubleArray
+ >-- DN.Edge.HasDiameter
+ @defProperty "Diameter" L0.Double
+ >-- DN.Edge.HasOuterDiameter
+ @defProperty "Outer Diameter" L0.Double
+ >-- DN.Edge.HasNominalMassFlow
+ @defProperty "Nominal Mass Flow" L0.Double
+ >-- DN.Edge.HasFlowArea
+ @defProperty "Flow Area" L0.Double
+ >-- DN.Edge.HasKReturn
+ @defProperty "K Return" L0.Double
+ >-- DN.Edge.HasKSupply
+ @defProperty "K Supply" L0.Double
+ >-- DN.Edge.HasTGround
+ @defProperty "T Ground" L0.Double
+ @L0.assert DN.Edge.HasDiameter 100
+ @L0.assert DN.Edge.HasOuterDiameter 125
+
+// ----------------------------------------------------------------------------