# Associating Units with Model Identifiers

The Unit attribute

To associate units with scalar or multi-dimensional identifiers in your model, you can specify a unit definition for such identifiers through the Unit attribute. The Unit attribute is only supported for the following identifier types:

parameters,

variables,

constraints,

arcs,

nodes,

function and procedure arguments, and

internal and external functions.

Visibility of the Unit attribute

Within the AIMMS **Model Explorer**, the Unit attribute is only
visible in the attribute forms of the identifier types listed above if
your model already contains the declarations of one or more quantities.
If you only want to use the Unit attribute to specify a scale factor
for an identifier (see below), you can make the Unit attribute
visible in all attribute forms by adding a *unitless* quantity to your
model (i.e. a quantity with base unit 1).

Unit attribute value

In its simplest form, the unit definition of a parameter, variable or
constraint is just a reference to a base or compound unit symbol. In
general, it can be a unit expression based on the same syntax as
described previously for specifying a derived unit expression in a
`Quantity`

declaration. The complete syntax of unit expressions is
discussed in Unit Expressions.

Example

The declaration

```
Variable VelocityOfItem
IndexDomain : i;
Unit : km/h;
}
```

introduces a variable `VelocityOfItem(i)`

with a corresponding unit
`km/h`

. This declaration could also have been written as

```
Variable VelocityOfItem {
IndexDomain : i;
Unit : 1000*m/h;
}
```

which contains an explicit scale factor of 1000, instead of using the
derived unit symbol `km`

.

Units also for scaling

When you do not use unit symbols, you can still use the Unit attribute to indicate the appropriate scale factor to be used for an identifier. These scale factors, whether or not in the presence of unit symbols, will be used by AIMMS to scale the corresponding data during various computations, as explained in Unit-based Scaling.

Use of units

By specifying units for some or all the identifiers in your model, AIMMS will perform the following unit-related tasks for you:

automatic checking of the statements in your model for unit consistency (see Unit Analysis),

automatic scaling of identifiers in assignments,

`DISPLAY`

and`READ`

/`WRITE`

statements (see Unit-based Scaling), andautomatic conversion of arguments (and result value) of external procedures and functions (see Unit-based Scaling), and

automatic scaling of the variables and constraints in a mathematical program (see Unit-based Scaling of Mathematical Programs).

The `.Unit`

suffix

For all identifier types for which you can specify a Unit attribute,
there is also an associated `.Unit`

suffix. The value of the `.Unit`

suffix is a unit expression that equals the unit specified within the
Unit attribute of the identifier at hand.

Use of the `.Unit`

suffix

The `.Unit`

suffix is most commonly used in the following situations:

when generating reports by means of the

`PUT`

and`DISPLAY`

statements (see The PUT Statement and The DISPLAY Statement, respectively),when displaying units in strings generated by the

`%u`

conversion specifier of the`FormatString`

function (see Formatting Strings), andwhen performing sensitivity analysis of mathematical programs in the presence of variables and constraints which have a non-empty Unit attribute (see Unit-based Scaling of Mathematical Programs).

Indices not always required

If you want to reference the `.Unit`

suffix of a multidimensional
identifier, it is not always necessary to use the corresponding indices
of the identifier in its `.Unit`

suffix reference. The use of indices
is only necessary if the Unit attribute actively depends on the
indices, for instance, because it

contains a multidimensional scale factor, or

refers to a multidimensional unit parameter (see also Unit-valued Parameters).

In all other cases, a reference to just the identifier name is sufficient.

Example

Consider the declaration of the variable `VelocityOfItem(i)`

above.
Its `UNIT`

attribute is the constant unit `km/h`

, whence it can be
obtain through the (scalar) reference

```
VelocityOfItem.Unit
```

Unit-valued parameters are permitted

When the Unit attribute of an identifier contains references to
*unit-valued* parameters (see Unit-valued Parameters), such
references will be evaluated, within the context of the `.Unit`

suffix, to their corresponding unit expressions. Thus, the `.Unit`

suffix will always result in a unit expression containing only unit
symbols declared in one or more `Quantity`

declarations.