Indicate smoothness of expression

#### Syntax

**smooth**(p, expr)

#### Description

If p>=0 **smooth**(p, expr) returns expr and
states that expr is p times continuously differentiable, i.e.: expr
is continuous in all real variables appearing in the expression and
all partial derivatives with respect to all appearing real
variables **exist** and are continuous up to order
p.

The only allowed types for expr in smooth are: real expressions,
arrays of allowed expressions, and records containing only
components of allowed expressions.

#### smooth vs. noEvent

The noEvent operator implies that real elementary expressions
are taken literally instead of generating crossing functions. The
smooth operator should be used instead of noEvent, in order to
avoid events for efficiency reasons. A tool is free to not generate
events for expressions inside smooth. However, smooth does not
guarantee that no events will be generated, and thus it can be
necessary to use noEvent inside smooth. *[Note that smooth does
not guarantee a smooth output if any of the occurring variables
change discontinuously.]*

#### Examples

Real x, y, z;
**equation**
x = **if** time<1 **then** 2 **else** time-2;
z = smooth(0, **if** time<0 **then** 0 **else** time);
y = smooth(1, noEvent(**if** x<0 **then** 0 **else** sqrt(x)*x));
// noEvent is necessary.

Generated at 2019-09-15T01:38:28Z by OpenModelicaOpenModelica
1.14.0~dev-26728-gbf603de using GenerateDoc.mos