netconfcentral logo

ieee1906-dot1-math@2020-07-07



  module ieee1906-dot1-math {

    yang-version 1.1;

    namespace
      "urn:ieee:std:1906.1:yang:ieee1906-dot1-math";

    prefix ieee1906-math;

    import ieee1906-dot1-function {
      prefix function;
    }

    organization
      "IEEE 1906.1-2015 - Recommended Practice for Nanoscale and
Molecular Communication Framework Working Group";

    contact
      "Stephen F. Bush <bushsf@research.ge.com>
Guillaume Mantelet <gmantelet@voltigeurnetworks.com>";

    description
      "This module aims to represent YANG data as dynamic, allowing the user to provide
data as variable abstract names. Assignment can be performed, and data
representation can be made by using variable names instead of values if they are
not (yet) resolved.

For example, a mass flow rate can be defined either in its mdot notation when it
can be resolved, or as a product between a mass density and a volume flow rate.
The two attributes can be provided by their variable names if the NETCONF client
does not resolve their values. The NETCONF server can return the corresponding
mdot value, or if applicable, can return the two attribute values.

This module defines also various mathematical concepts and objects such as
vectors, tensors, equations as long as consensus exists. Modeling the equation
itself is outside the scope of this YANG model. This YANG model scope is to
define the inputs and outputs of these equations.

The following table summarizes the mathematical concepts defined in this YANG
model.

+-------------+-----------+------------------------------------------------------+
| name        | type      | description                                          |
+-------------+-----------+------------------------------------------------------+
| equation    | extension | List of expressions, optional symbol units, and name |
| expression  | extension | List of unknowns and variables                       |
| name        | extension | Giving a container a name                            |
+-------------+-----------+------------------------------------------------------+
| nabla       | grouping  | Differential operator in cartesian units             |
| scalar      | typedef   | Unitless and dimensionless value                     |
| surface     | grouping  |                                                      |
| symbol      | extension | A human friendly hint in equations                   |
| value       | extension | A variable giving the equation a result or a name    |
| vector      | grouping  |                                                      |
| vector-area | grouping  |                                                      |
+-------------+-----------+------------------------------------------------------+
";

    revision "2020-07-07" {
      description "Initial version.";
      reference
        "'IEEE Recommended Practice for Nanoscale and Molecular Communication Framework,'
         in IEEE Std 1906.1-2015, pp.1-64, Jan. 11 2016
         doi: 10.1109/IEEESTD.2016.7378262";

    }


    extension equation {
      argument "equation-name" {
        yin-element false;
      }
      description
        "An equation is a list of expressions.

The equation is considered well known and easy to obtain a consensus to within
the scientific community. It is outside the scope of this YANG model to describe
what the equation does. Instead, this YANG model refers to well-known or
consensual equations.

For example, the mass flow rate equation is well known and has the following
accepted expressions:
mdot = rho . Vdot = rho . V . A = jm . A

Note that this naming uses symbols. Symbols are also defined and are only hints
for a human user. Convention should use the name attached to the symbol to get a
meaningful notion of what is expressed.

An equation can be named for functional programming purposes. An equation may
have a value. In the example of the mass flow rate equation, mdot is the value.
The value is a function:variable.";
    }

    extension expression {
      description
        "An expression is part of an equation. Two expressions in an equation are
equivalent. An expression is a list of unknown or variables linked by
operations.

The expression is considered well known and easy to obtain a consensus to within
the scientific community. It is outside of the scope of this YANG model to
describe the relationship between the unknown.

Instead, the expression provides a list of unknowns or variables.";
    }

    extension symbol {
      argument "symbol-name" {
        yin-element false;
      }
      description
        "To provide a known name that represents this type. Adds nothing to a NETCONF
server.";
    }

    extension value {
      description
        "The value part of the equation which MUST be of type function:variable.

The result of the equation. It can be used to directly configure the server.
Or the value is returned by the server as a result of a call, a simulation, a
mathematical process.

This is a variable. A numerical value can be provided. Or, if it is unknown,
or in case of functional programming, the target variable name can be used
instead.";
    }

    extension name {
      argument "name" {
        yin-element false;
      }
      description
        "An optional name to use an equation as an unknown for functional programming.
The name MUST be of type function:variableName.";
    }

    typedef scalar {
      type function:variable;
      description
        "A scalar is a dimensionless and unitless value. Please refer to the si-unit
system if the scalar has a meaning. This is a variable, but by defining it as a
scalar, it is explicitly not a vector coordinate.";
    }

    grouping surface {
      description
        "A reusable container modelling a surface.";
      container surface {
        ieee1906-math:symbol "A";
        ieee1906-math:name "name";
        description "A surface.";
        leaf-list scalar {
          type scalar;
          description
            "A scalar representing this surface in the considered space.";
        }
      }  // container surface
    }  // grouping surface

    grouping vector {
      ieee1906-math:symbol "v";
      ieee1906-math:name "name";
      description "A reusable vector.";
      choice vector-type {
        description
          "A vector can be described in three different types of coordinates,
euclidian, polar and spherical.";
        container vector {
          description
            "A generic container representing a vector in any base.
Ordering is very important, and providing at least one element is
mandatory.

Physicists will often refer to a vector with three coordinates. Convention
on the dimensions, unless otherwise specified, is x, y, z.";
          leaf-list coordinate {
            type function:variable;
            ordered-by user;
            description
              "A coordinate of this vector. It can be named.";
          }
        }  // container vector
        container polar-vector {
          description
            "A generic container representing a vector in polar coordinates.";
          leaf radius {
            type function:variable;
            description
              "Or magnitude, it is the distance from a reference point. It can be named.";
          }

          leaf polar-angle {
            type function:variable;
            description
              "The angle of this vector from a reference vector. It can be named.";
          }
        }  // container polar-vector
        container spherical-vector {
          description
            "A generic container representing a vector in spherical coordinates.";
          leaf radius {
            type function:variable;
            description
              "Or magnitude, it is the distance from a reference point. It can be named.";
          }

          leaf polar-angle {
            type function:variable;
            description
              "The angle of this vector from a reference vector. It can be named.";
          }

          leaf azimuthal-angle {
            type function:variable;
            description
              "The angle of this vector from a reference vector. It can be named.";
          }
        }  // container spherical-vector
      }  // choice vector-type
    }  // grouping vector

    grouping vector-area {
      ieee1906-math:equation "vectorArea" {
        ieee1906-math:symbol "S";
        ieee1906-math:value;
        ieee1906-math:expression {
          uses "vector";
          uses "surface";
          description "A vector area is a unit normal scaled by its surface.";
        }
        description "A vector area is the product of the unit norm (a vector) by a surface area. It
can be named.";
      }
      description
        "Making this container reusable.";
    }  // grouping vector-area

    grouping nabla {
      description
        "The result of the differential operator SIGMA(d/di) at a given position.";
      container nabla {
        description
          "A generic container representing the Cartesian coordinate for 
this nabla. Ordering is very important, and providing at least 
one element is mandatory.

Physicists will often refer to an operator with three coordinates. 
Convention on the dimensions, unless otherwise specified, is x, y, z.";
        leaf-list coordinate {
          type function:variable;
          ordered-by user;
          description
            "Cartesian coordinates for this nabla operator. It can be named.";
        }
      }  // container nabla
    }  // grouping nabla

    typedef percent {
      type union {
        type string {
          pattern
            '[+\-]?([0-9][0-9]?(\.?[0-9]+([eE][-+]?[0-9]+)?)|100)%?';
        }
        type function:variable-name;
      }
      description
        "A 'classical' percentage is a number x such as 0 <= x <= 100";
    }

    typedef proper-fraction {
      type union {
        type string {
          pattern
            '[+\-]?(0(\.?[0-9]+([eE][-+]?[0-9]+)?)|1)';
        }
        type function:variable-name;
      }
      description
        "A fraction that is less than or equals 1";
    }

    typedef probability {
      type union {
        type string {
          pattern
            '(0(\.?[0-9]+([eE][-+]?[0-9]+)?)|1)';
        }
        type function:variable-name;
      }
      description
        "A 'classical' probability is a number x such as 0 <= x <= 1. Other types of
probabilities (e.g. exotic and negative probabilities) are not included in
this definition.";
    }

    grouping probability-density-function {
      description "A reusable pdf.";
      leaf-list probability-density-function {
        type probability;
        units "probability";
        description
          "A list of probabilities forming a probability density function.";
      }
    }  // grouping probability-density-function
  }  // module ieee1906-dot1-math