How is the direction of a vertical curve specified (crown/crest, convex/concave)?
The docs for IfcAlignmentVerticalSegment say that the end direction (EndGradient) can be calculated from start direction (StartGradient), segment length (HorizontalLength), and curve parameter (RadiusOfCurvature).
I understand this to mean that EndGradient is redundant, isn’t required (not exchanged), and should be neglected (except to maybe do a check calculation). Additionally, the RadiusOfCurvature attribute is of type IfcPositiveLengthMeasure. The RadiusOfCurvature needs a sign to indicate sag or crest curve, or it can be omitted and the EndGradient would be nonredundant and required. The signs and relative slope of the StartGradient and EndGradient alone are sufficient to define a crest or sag curve and would eliminate the need for RadiusOfCurvature.
In the 4.1 specification, IfcAlignment2DVerSegParabolicArc and IfcAlignment2DVerSegCircularArc had an IsConvex attribute to deal with the curve direction.