15.6. Appendix 2: BNF Rule List

<ndf-blade-design> ::= [<general-information>]<ndf-definition>

<ndf-definition> ::= [<meridional-plane>][<flow-path>][<bladerow-objects>] 

<bladerow-objects> ::= <bladerow>+ 



<general-information> ::= [<version>][<created-time>][<designer>][<company>][<comment>]
<model-general-information> 

<version> ::= string-value 

<created-time> ::= time-value 

<designer> ::= string-value 

<company> ::= string-value 

<comment> ::= string-value 

<model-general-information> ::= <model-name>[<units>][<tolerance-definition>][<beta-definition>] 

<model-name> ::= object-name 

<units> ::= <length-unit><angular-unit> 

<tolerance-definition> ::= <length-tolerance><angle-tolerance> 

<length-tolerance> ::= double-value 

<angle-tolerance> ::= double-value 

<beta-definition> ::= "Axial"|"Tangential" 

<length-unit> ::= "Meter"|"Centimeter"|"Millimeter"|"Micrometer"|"Foot"|"Inch" 

<angular-unit> ::= "Radian"|"Degree" 



<meridional-plane> ::= <plane-name>[<plane-reference>]<sketch-objects>[<plane-additional-info>] 

<plane-name> ::= object-name 

<plane-reference> ::= string-value 

<sketch-objects> ::= <sketch>+ 

<sketch> ::= <sketch-name><curve-objects> 

<sketch-name> ::= object-name 

<curve-objects> ::= <curve>+ 

<plane-additional-info> ::= <additional-info>+ 

<flow-path> ::= <flow-path-name>[<flow-path-reference>][<machine-type>][<theta-direction>]
[<interpolation-mesh-size>]
<hub-definition><shroud-definition><inlet-definition><outlet-definition>[<layer-definition>]
[<hub-cut-definition>][<shroud-cut-definition>][<cavity-objects>] 

<flow-path-name> ::= object-name 

<flow-path-reference> ::= string-value 

<machine-type> ::= "Pump"|"CentrifugalCompressor"|"AxialCompressor"|"Fan"|"RadialTurbine"|
"AxialTurbine"|"HydraulicTurbine"|"Undefined" 

<theta-direction> ::= "RightHanded"|"LeftHanded" 

<interpolation-mesh-size> ::= integer-value 

<hub-definition> ::= <sketch-reference> 

<shroud-definition> ::= <sketch-reference> 

<inlet-definition> ::= <sketch-reference> 

<outlet-definition> ::= <sketch-reference> 

<sketch-reference> ::= object-reference 

<layer-definition> ::= [<user-defined-layer-objects>][<constant-layer-definition-objects>] 

<user-defined-layer-objects> ::= <user-defined-layer-definition><user-defined-layer-definition>* 

<user-defined-layer-definition> ::= <layer-defined-index><user-defined-layer-sketch-reference>
<user-defined-layer-curve-reference><user-defined-layer-evaluated-span> 

<layer-defined-index> ::= integer-value 

<user-defined-layer-sketch-reference> ::= object-reference  

<user-defined-layer-curve-reference> ::= object-reference 

<user-defined-layer-evaluated-span> ::= double-value 

<constant-layer-definition-objects> ::= <constant-layer-definition><constant-layer-definition>* 

<constant-layer-definition> ::= <layer-defined-index>[<constant-layer-type>]<constant-layer-value> 

<constant-layer-type> ::= "ConstantLayerSpan"|"Other" 

<constant-layer-value> ::= double-value 

<layer-defined-index> ::= integer-value 

<hub-cut-definition> ::= <cut-layer-sketch-reference> 

<shroud-cut-definition> ::= <cut-layer-sketch-reference> 

<cut-layer-sketch-reference> ::= object-reference



<bladerow> ::= <blade>[<splitter-objects>] 

<splitter-objects> ::= <splitter><splitter>*

<blade> ::=

<blade-name><blade-reference>[<blade-type>]<number-blade-set>[<surface-construction>]
[<thickness-construction>][<hub-tip-clearance>][<shroud-tip-clearance>][<flank-milled-definition>]
[<milling-line-control>][<point-distribution>]<leading-edge-definition><trailing-edge-definition>
[<thickness-by-equation>][<hub-blend>][<shroud-blend>]
(<camberline-definition-objects>|(<profile-objects>[<profile-le-shape>][<profile-te-shape>]))

<blade-name> ::= object-name 

<blade-reference> ::= object-reference 

<blade-type> ::= "BladeStator"|"BladeRotor"|"RotorPositiveRotation"|"RotorNegativeRotation" 

<number-blade-set> ::= integer-value 

<surface-construction> ::= "General"|"RuledElement"|"RadialElement"|"AxialElement"|"FlankMilled"|
"FromRefBlade" 

<thickness-construction> ::= "General"|"RuledElement"|"RadialElement"|"AxialElement"|"EquationDriven" 

<taper-angle>::=double-value

<hub-tip-clearance> ::= <tip-layer-definition>|<tip-gap-definition>

<shroud-tip-clearance> ::= <tip-layer-definition>|<tip-gap-definition> 

<tip-layer-definition>::=<tip-layer-index> 

<tip-layer-index> ::= integer-value 

<tip-gap-definition>::=<le-gap><te-gap>[<angle-definition>][<thickness-definition>] 

<le-gap>::=double-value 

<te-gap>::=double-value 

<point-distribution>  ::= <number-along-blade>[<number-at-le>][<number-at-te>] 

<number-along-blade> ::= integer-value 

<number-at-le> ::= integer-value 

<number-at-te> ::= integer-value 

<flank-milled-definition> ::= <hub-extension><shroud-extension> 

<hub-extension> ::= double-value  

<shroud-extension> ::= double-value 

<milling-line-distribution>::=<distribution-major-parameter><distribution-minor-parameter> 

<distribution-major-parameter>::= double-value 

<distribution-minor-parameter>::= double-value 

<leading-edge-definition> ::= <sketch-reference><hub-shroud-connection-constraint>
<le-te-shape-definition> 

<trailing-edge-definition> ::= <sketch-reference><hub-shroud-connection-constraint>
<le-te-shape-definition> 

<hub-shroud-connection-constraint>::= void-value 

<le-te-shape-definition> ::= <le-te-shape-ellipse>|<le-te-shape-cutoff>|<le-te-shape-square> 

<le-te-shape-ellipse> ::=

(<le-te-shape-ellipse-ratio-at-hub><le-te-shape-ellipse-ratio-at-shroud><le-te-shape-ellipse-location>)
|void-value 

<le-te-shape-ellipse-ratio-at-hub> ::= double-value 

<le-te-shape-ellipse-ratio-at-shroud> ::= double-value 

<le-te-shape-ellipse-location> ::= "CentredOnCamberline"|"TangentToBladeEdge"

<le-te-shape-cutoff> ::= void-value 

<le-te-shape-square> ::= void-value 

<thickness-by-equation> ::= <hub-thickness><shroud-thickness><user-defined-variables>
<user-defined-equations> 

<hub-thickness> ::= <curve> 

<shroud-thickness> ::= <curve> 

<user-defined-variables> ::= <variable><variable>* 

<variable> ::= <variable-name><curve> 

<variable-name> ::= string-value 

<user-defined-equations> ::= <equation><equation>* 

<equation> ::= string-value 

<camberline-definition-objects> ::= <camberline-definition><camberline-definition>* 

<camberline-definition> ::= <layer-defined-index>[<angle-definition>][<thickness-definition>] 

<angle-definition> ::= <angle-definition-type>[<angle-data-type>]
<curve><angle-definition-space>[<angle-parameter-space>] 

<angle-definition-type> ::= "UserSpecified"|"InterpolatedByRTheta"|"InterpolatedByTheta"|
"FromReferenceBlade" 

<angle-data-type> ::= <theta-data-type>|<beta-data-type>|<theta-at-le-te-beta-type> 

<theta-data-type> ::= void-value 

<beta-data-type> ::= <theta-reference> 

<theta-reference> ::= <theta-reference-location><theta-reference-value> 

<theta-reference-location> ::= "LeadingEdge"|"TrailingEdge" 

<theta-reference-value> ::= double-value 

<theta-at-le-te-beta-type> ::= <theta-at-le-te-beta-le><theta-at-le-te-beta-te> 

<theta-at-le-te-beta-le> ::= double-value 

<theta-at-le-te-beta-te> ::= double-value 

<angle-definition-space> ::= <definition-space> 

<angle-parameter-space> ::= <definition-space> 

<thickness-definition> ::= <thickness-definition-type>[<thickness-data-type>]
<curve><thickness-definition-space>[<thickness-parameter-space>] 

<thickness-definition-type> ::= "UserSpecified"|"Interpolated"|"FromReferenceBlade" 

<thickness-data-type> ::= "NormalToCamberlineOnLayerSurface" |"NormalToCamberSurface" |
"TangentialToLayerSurface" 

<thickness-definition-space> ::= <definition-space> 

<thickness-parameter-space> ::= <definition-space> 

<definition-space> ::= "%M"|"%Mp"|"Mp"|"M" 



<hub-blend>::=<constant-radius-blend>|<variable-blend> 

<shroud-blend>::=<constant-radius-blend>|<variable-blend> 

<constant-radius-blend>::=<rolling-ball-radius><approximation-angle><approximation-radius-ratio>  

<rolling-ball-radius>::=double-value 

<approximation-angle>::=double-value 

<approximation-radius-ratio>::=double-value 



<variable-blend>::=<blade-offset-definition-on-side1><blade-offset-definition-on-side2>
[<split_blade_faces_at_hold_line>]((<blend-shape-ratio><approximation-scale>

   <blade-hold-line-type>((<blade-hold-line-definition-value-type>(<offset-span-at-le>|
<offset-span-at-te>|(<offset-span-at-le><offset-span-at-te>)))  

                          |
(<blade-hold-line-definition-on-side1><blade-hold-line-definition-on-side2>)))|
<blend-shape-by-rolling-ball-approximation>)

<blend-shape-ratio>::=double-value

<blend-shape-by-rolling-ball-approximation>::=void-value 

<blade-hold-line-type>::="ConstantSpan"|"Variable"|"UserDefined" 

<blade-hold-line-definition-value-type>::="BySpan"|"ByDistance" 

<offset-span-at-le>::=double-value 

<offset-span-at-te>::=double-value 

<blade-hold-line-definition-on-side1>::=<curve> 

<blade-hold-line-definition-on-side2>::=<curve>  

<blade-offset-definition-on-side1>::=<curve> 

<blade-offset-definition-on-side2>::=<curve> 

<approximation-scale>::=double-value 

<split_blade_faces_at_hold_line>::=boolean-value

 

<profile-objects>::=<profile-point-type><profile><profile>* 

<profile-point-type>::="CartesianCoordAsXYZ"|"CylindricalCoordAsRThetaZ" 

<profile>::=[<profile-index>]<profile-segment><profile-segment>* 

<profile-index>::=integer-value 

<profile-segment>::=[<profile-segment-type>]<profile-segment-point-objects> 

<profile-segment-type>::="ProfileSegmentLeadingEdge"|"ProfileSegmentTrailingEdge"|
"ProfileSegmentHighTheta"|"ProfileSegmentLowTheta"|"ProfileSegmentGeneral" 

<profile-segment-point-objects>::=<profile-point><profile-point>* 

<profile-point> ::= [<profile-point-mark-type>*]
((<first-coord><second-coord><third-coord>)|<profile-point-coords>) 

<profile-point-mark-type>::=<point-mark-leading-edge-tip>|<point-mark-trailing-edge-tip>|
<point-mark-segment-end> 

<first-coord> ::= double-value 

<second-coord> ::= double-value 

<third-coord> ::= double-value 

<profile-point-coords> ::= string-value 

<profile-le-shape> ::= "RoundByPoints"|"SharpByPoints"|"SharpByTrimming"
<profile-te-shape> ::= "RoundByPoints"|"SharpByPoints"|"SharpByTrimming"

<splitter> ::= <splitter-name><splitter-reference><splitter-type><splitter-offset>
[<surface-construction>][<thickness-construction>][<point-distribution>][<flank-milled-definition>]
[<milling-line-control>]<leading-edge-definition><trailing-edge-definition>[<thickness-by-equation>]
[<splitter-shroud-gap-definition>][<splitter-hub-gap-definition>][<hub-blend>][<shroud-blend>]
(<camberline-definition-objects>|(<profile-objects>[<profile-le-shape>][<profile-te-shape>]))

<splitter-name> ::= object-name 

<splitter-reference> ::= object-reference 

<splitter-type> ::= "Independent"|"Clone" 

<splitter-offset> ::= <splitter-offset-angle>|<splitter-offset-pitch-fraction> 

<splitter-offset-angle> ::= double-value 

<splitter-offset-pitch-fraction> ::= <offset-pitch-fraction>[<offset-pitch-fraction-reference>
[<offset-angle-evaluated>]]

<splitter-shroud-gap-definition>::=[<angle-definition>][<thickness-definition>] 
<splitter-hub-gap-definition>::=[<angle-definition>][<thickness-definition>] 

<cavity-objects> ::= <cavity>+
<cavity> ::= <cavity-name><cavity-type><boundary-objects>
<boundary-objects> ::= <boundary>+
<boundary> ::= <boundary-name><sketch-reference><boundary-type>[<manage-opening>]
<cavity-name> ::= object-name
<cavity-type> ::= "Hub"|"Shroud"|"Unknown"
<boundary-name> ::= object-name
<boundary-type> ::= "Wall"|"Interface"
<manage-opening> ::= boolean-value 


<point> ::= [<point-name>]<x-coord><y-coord> 

<point-name> ::= object-name 

<x-coord> ::= double-value 

<y-coord> ::= double-value 

<curve> ::= [<curve-name>]<segment-objects> 

<curve-name> ::= object-name 

<segment-objects> ::= <segment><segment>* 

<segment> ::= [<segment-name>][<segment-parameters>]<line>|<arc>|<bezier>|<cubic-spline>|<nurbs> 

<segment-name> ::= object-name 

<segment-parameters> ::= <segment-begin-parameter><segment-end-parameter> 

<segment-begin-parameter> ::= double-value 

<segment-end-parameter> ::= double-value 

<line> ::= <point><point> 

<arc> ::= <point><radius><start-angle><end-angle> 

<radius> ::= double-value 

<start-angle> ::= double-value 

<end-angle> ::= double-value 

<bezier> ::= <bezier-control-point-objects> 

<bezier-control-point-objects>::=<point><point>* 

<cubic-spline> ::= <cubic-spline-fitted-point-objects> 

<cubic-spline-fitted-point-objects>::=<point><point>* 

<nurbs> ::= [<nurbs-degree>][<nurbs-periodic>][<nurbs-closed>][<nurbs-parameter-range>]
<nurbs-knot-objects><nurbs-control-point-objects><nurbs-weight-objects> 

<nurbs-degree> ::= integer-value 

<nurbs-periodic> ::= boolean-value 

<nurbs-closed> ::= boolean-value 

<nurbs-parameter-range> ::= <nurbs-parameter-start-value><nurbs-parameter-end-value> 

<nurbs-parameter-start-value> ::= double-value 

<nurbs-parameter-end-value> ::= double-value 

<nurbs-knot-objects> ::= <nurbs-knot><nurbs-knot>* 

<nurbs-knot> ::= double-value 

<nurbs-control-point-objects> ::= <point><point>* 

<nurbs-weight-objects> ::= <nurbs-weight><nurbs-weight>* 

<nurbs-weight> ::= double-value 



<additional-info> ::= <additional-info-type><additional-info-contents> 

<additional-info-type> ::= string-value 

<additional-info-contents> ::= string-value