All intrinsic Fortran functions are available through direct coding in the Fortran, DSDYN or DSOUT segments. However in segments such as Computations, some mathematical and logical functionality is also required: PSCAD possesses a limited set of its own intrinsic mathematical functions and logical operators for use within segments where direct access Fortran functions is not available.

Mathematical computations can be performed on input parameters, input signals, or on results of other computations.

The table below lists all of the available intrinsic mathematical functions. These functions are used only in the Computations segment:

Function |
Description |

CEIL(x) |
Rounds fraction to next upper integer |

FLOOR(x) |
Rounds fraction to next lower integer |

ROUND(x) |
Adds 0.5 to a REAL value and then performs an INT function (i.e. ROUND(X) = INT(X+0.5)). Do not use with negative numbers |

TRUNC(x) |
Rounds x toward zero, returning the nearest integral value that is not larger in magnitude than x. |

FRAC(x) |
Removes integer part of REAL value (left side of decimal) |

REAL(x) |
Real part of complex number |

IMAG(x) |
Imaginary part of complex number |

ABS(x) |
Absolute value |

ARG(x) |
Returns the phase angle (or angular component) of the complex number x, expressed in radians. |

NORM(x) |
Norm of complex number (x2 + y2) |

SIN(x) |
Sine function |

COS(x) |
Cosine function |

TAN(x) |
Tangent function |

ASIN(x) |
Inverse sine function |

ACOS(x) |
Inverse cosine function |

ATAN(x) |
Inverse tangent function |

SINH(x) |
Hyperbolic sine function |

COSH(x) |
Hyperbolic cosine function |

TANH(x) |
Hyperbolic tangent function |

SQRT(x) |
Square root |

LOG(x) |
Natural logarithm |

LOG10(x) |
Base 10 logarithm |

EXP(x) |
Exponential |

RAND(x) |
Random value between 0 and x |

P2RX(m,q) |
Polar to rectangular conversion (q in degrees) |

P2RY(m,q) |
Polar to rectangular conversion (q in degrees) |

R2PM(x,y) |
Rectangular to polar conversion |

R2PA(x,y) |
Rectangular to polar conversion |

INT(x) |
Removes fractional part of REAL value (right side of decimal) |

NINT(x) |
Returns the nearest integer to the argument |

Listed below are the arithmetic operators available in PSCAD. These operators are used to perform mathematical calculations primarily in the Computations, Fortran, DSDYN and DSOUT segments.

Function |
Description |

+ |
Add |

- |
Subtract |

* |
Multiply |

/ |
Divide |

% |
Remainder |

** |
Raise to power |

\ |
Parallel (xy) / (x +y) |

Listed below are the logical operators available in PSCAD. Logical expressions are primarily used in conjunction with #IF, #ELSEIF, #ELSE, #ENDIF directives and the Ternary Operator. They are also used in the Checks segment.

NOTE: Logical expressions will return a value of *1* if true, and a value of *0* if false.

Function |
Description |

== |
Equal to |

!= |
Not equal to |

! |
Not |

< |
Less than |

> |
Greater than |

<= |
Less than or equal to |

>= |
Greater than or equal to |

|| |
OR |

&& |
AND |

EXAMPLE 10-24:

Logical operators can appear in many different areas. The following examples illustrate the various ways these operators can be used:

! ! ...with #IF, #ELSEIF, #ELSE, #ENDIF Directives ! #IF F >= 60.0 Fout = 60.0 #ENDIF ! ! ...with a Ternary Operator in the Computations ! segment ! REAL L = X == 0.0 ? Y*2.0 : Y/3 ! ! ...in the Checks segment ! ERROR Value too small : R > 0.001 ! |

The ternary operator is yet another short form method offered in definition script for representing an IF-ELSE-ENDIF type expression. It allows the user to define a variable, according to certain conditions, in a single line.

The ternary operator is used only in the Computations segment, and should appear as follows:

<Logic> ? <Value_if_True> : <Value_if_False>

<Logic> is a logical expression using logical operators. <Value_if_True> and <Value_if_False> can either be a single constant, or a mathematical expression.

NOTE: Care must be taken when designing components with ternary operators: Ensure that variables used within the ternary expression will not be disabled under otherwise valid conditions. In other words, unrelated logic may disable one or more of the variables used within the ternary expression, which may render the ternary result invalid. Input variables are enabled/disabled by way of Conditional Statements, Layers and Filters.

EXAMPLE 10-25:

A user wants to define a REAL variable *X* in the Computations segment of a component definition. The value of *X* is to be *1.0* if an input parameter *N* is *2* or *3*, and defined by a mathematical expression otherwise.

The following code should appear in the Computations segment:

REAL X = (N==2 || N==3) ? 1.0 : SQRT(2)*V |

Where *V* is a pre-defined constant.

EXAMPLE 10-26:

A user wants to define a REAL variable *Torq* in the Computations segment of a component definition. The value of *Torq* is defined by a mathematical expression, where one element of this expression varies according to a condition. This can be accomplished by using the ternary operator as follows:

REAL Torq = (X > 1 ? 0.0 : Tm) + Te*100 |

Where *X*, *Tm* and *Te* are pre-defined constants.