The function definition element

The function element connects breakpoint sets (for gridded tables), independent variables, and data tables to their respective output variable.

    function* : name
	description? :
	provenance? :
	    author : name, org, [xns, email]
		address?
		    (address character data)
	    functionCreationDate :
	    extraDocRef* : docID
	    modificationRef* : modID
	EITHER 
	{
	  independentVarPts+ : varID, [name, units, sign, extrapolate]
	      (input values as character data)
	  dependentVarPts : varID, [name, units, sign]
	      (output values as character data)
        } 
	OR 
	{
	  independentVarRef+ : varID, [min, max, extrapolate]
	  dependentVarRef : varID
	  functionDefn : [name]
	      CHOICE OF
	      {
	        CHOICE OF
                {
                  griddedTableRef : gtID
                OR
	          griddedTableDef : [name]
		    breakpointRefs
		        bpRef+ : bpID
		    confidenceBound? : value
		    dataTable
		        (gridded data table as character data)
                }
	      }
	      OR
	      {
	        CHOICE OF
                {
                  ungriddedTableRef : utID
                OR
		  ungriddedTableDef : [name]
		    confidenceBound? : value
    		    dataPoint+
		        (coordinate/value sets as character data)
                }
	      }
        }
          

function attributes:

name

A UNICODE name for the function.

function sub-elements:

description

The optional description element allows the author to describe the data contained within this function.

provenance

The optional provenance element allows the author to describe the source and history of the data within this function.

independentVarPts

If the author chooses, he|she can express a linearly-interpolated functions by specifing the indendent (breakpoint) values sets as one or more independentVarPts which are comma-separated, monotonically increasing coordinate values corresponding to the dependentVarpts given next. In the case of multiple dimensions, more than one indepdendentVarPts must be specified, one for each dimension. The mandatory varID attribute is used to connect each independentVarPts with an input signal.

dependentVarPts

This element goes along with the previous element to specify a function table. Only one dependentVarPts may be specified. If the function is multidimensional, the convention is the last breakpoint dimension changes most rapidly in this comma-separated list of output values. The mandatory varID attribute is used to connect this table output to an output signal.

independentVarRef

One or more of these elements refer to a separately-defined variableDef. For multidimensional tables, the order of specification is important and match the order in which breakpoints are specified or the order of coordinates in ungridded table coordinate/value sets.

dependentVarRef

One dependentVarRef must be specified to marry the output of the function to a particular variableDef.

functionDefn

This mandatory element (if not a simple function) identifies either a separately-specified data table or specifies a private table, either gridded or ungridded.

griddedTableRef

If not defining a simple function table, the author may use this element to point to a separately-specified griddedTableDef element.

griddedTable

As an alternative to reutilization of a previously defined table, this element may be used to define a private output gridded table. See the writeup on griddedTableDef for more information.

ungriddedTableRef

If not using a simple function table, the author may use this element to point to separately-specified ungriddedTableDef element.

ungriddedTable

As an alternative to reuse of a previously defined table, this element may be used to define a private output ungridded table. See the writeup on ungriddedTableDef for more information.

Example 8. An example of a function which refers to a previously defined griddedTableDef

      <!-- ============================== -->
      <!-- Lower left body flap functions -->
      <!-- ============================== -->

  <function name="CLBFLL0">
    <description>
      Lower left body flap lookup function for lift, polynomial constant term.
    </description>
    <independentVarRef varID="DBFLL"  min="0.0" max="60." extrapolate="neither"/> 1
    <independentVarRef varID="XMACH" min="0.3" max="4.0" extrapolate="neither"/>
    <dependentVarRef varID="CLBFLL0"/> 2
    <functionDefn name="CLBFL0_fn">
      <griddedTableRef gtID="CLBFL0_table"/> 3
    </functionDefn>
  </function>
	    
1

The independent variables must be given in the order of least-rapidly-changing to most-rapidly-changing values in the function table. The processing application needs to pay attention to the extrapolate flag, which details how to treat a variable whose value exceeds the stated limits on input.

2

The dependent variable (XML name CLBFLL0) is the output variable for this function. CLBFLL0 must have been declared previously with a variableDef element.

3

This is a reference to the previously declared griddedTableDef.

This example ties the input variables DBFLL and XMACH into output variable CLBFLLO through a function called CLBFLO_fn, which is represented by the linear interpolation of the gridded table defined by the CLBFL0_table griddedTableDef (see example 7 above).

Example 9. A function that has an internal table

      <!-- ================ -->
      <!-- Rudder functions -->
      <!-- ================ -->

<!-- The rudder functions are only used once, so their table
     definitions are internal to the function definition.
--> 1

  <function name="CLRUD0">
    <description>
	Rudder contribution to lift coefficient,
	polynomial multiplier for constant term.
    </description>
    <provenance> 2
      <author name="Bruce Jackson" org="NASA Langley Research Center" xns="@bjax"/>
      <functionCreationDate date="2003-01-31"/>
      <documentRef docID="REF01"/>
    </provenance>
    <independentVarRef varID="abs_rud"  min="0.0" max="15." extrapolate="neither"/>
    <independentVarRef varID="XMACH" min="0.3" max="4.0" extrapolate="neither"/>
    <dependentVarRef varID="CLRUD0"/>

    <functionDefn name="CLRUD0_fn">
      <griddedTableDef name="CLRUD0_table"> 3
	<breakpointRefs>
	  <bpRef bpID="DRUD_PTS"/>
	  <bpRef bpID="XMACH1_PTS"/>
	</breakpointRefs>
	<dataTable> <!-- last breakpoint changes most rapidly -->
<!--	CLRUD0	POINTS	-->
<!-- RUD =    0.0	-->
 0.00000E+00 , 0.00000E+00 , 0.00000E+00 , 0.00000E+00 , 0.00000E+00 ,
 0.00000E+00 , 0.00000E+00 , 0.00000E+00 , 0.00000E+00 , 0.00000E+00 ,
 0.00000E+00 , 0.00000E+00 , 0.00000E+00 ,
<!-- RUD =   15.0	-->
-0.13646E-01 , 0.26486E-01 , 0.16977E-01 ,-0.16891E-01 , 0.10682E-01 ,
 0.75071E-02 , 0.53891E-02 ,-0.30802E-02 ,-0.59013E-02 ,-0.95733E-02 ,
 0.00000E+00 , 0.00000E+00 , 0.00000E+00 ,
<!-- RUD =   30.0	-->
-0.12709E-02 , 0.52971E-01 , 0.33953E-01 ,-0.33782E-01 , 0.21364E-01 ,
 0.15014E-01 , 0.10778E-01 ,-0.61604E-02 ,-0.11803E-01 ,-0.19147E-01 ,
 0.00000E+00 , 0.00000E+00 , 0.00000E+00 
	</dataTable>
      </griddedTable>
    </functionDefn>
  </function>
	    
1

This comment helps humans understand the reason for an embedded table.

2

The provenance element is required by the AIAA standard.

3

This example has an embedded gridded table.

In this example, the function CLRUD0 returns, in the variable CLRUD0, the value of function CLRUD0_fn represented by gridded table CLRUD0_table. The inputs to the function are abs_rud and XMACH which are used to normalize breakpoint sets DRUD_PTS and XMACH1_PTS respectively. The input variables are limited between 0.0 to 15.0 and 0.3 to 4.0, respectively.