flags
A flag describes a particular phase of a simulation. In models, a block can be called with flags to perform different operations.
For example a block can be called to update its output with flag=
VssFlag_OutputUpdate (= 1)
or can be called to provide the state
derivatives with flag= VssFlag_Derivatives (= 0)
.
Flags are defined as follows:
Flag Number Issued | Flag Name | Result When a Block Is Called with this Flag |
---|---|---|
Flag 0 | VssFlag_Derivatives | The simulator requests the block to provide the continuous-time state time derivatives. |
Flag 1 | VssFlag_OutputUpdate | The simulator requests the output(s) of the block. |
Flag 2 | VssFlag_StateUpdate | An event has activated the block to update its discrete-time and continuous-time states. |
Flag 3 | VssFlag_EventScheduling | The block can program a new event at one or more of its output activation ports. |
Flag 4 | VssFlag_Initialize | The block is called for the first time at the beginning of the simulation where initialization issues can be resolved. |
Flag 5 | VssFlag_Terminate | The simulator calls the blocks once at final time when a simulation is finished or stopped due to an error or user-request. |
Flag 6 | VssFlag_Reinitialize | The block can reset its continuous-time state as a function of its input values. |
Flag 7 | VssFlag_ReinitializeImplicit | In an implicit model after an event restarts the solver, the implicit block updates its states and state derivatives. |
Flag 8 | VssFlag_Projection | If a block’s dynamics is represented by an ODE with algebraic constraints, the simulator calls the block to either compute the projection update or the residual of constraints. |
Flag 9 | VssFlag_ZeroCrossings | The simulator requests the block to provide its zero-crossing surfaces. |
Flag 10 | VssFlag_Jacobians | The simulator requests the block to provide the analytical Jacobian matrix of the model. |
Flag 11 | VssFlag_GotoPause | The block pauses to perform any required jobs before the simulation stops. |
Flag 12 | VssFlag_ReturnFromPause | After the pause in a simulation is finished, the blocks resume the simulation. |
The following is an example skeleton showing how flags are used to define the simulation function of a C Custom block.
VSS_EXPORT void
CBlockFunction(vss_block *block,int flag)
{
SCSREAL_COP *u1=GetRealInPortPtrs(block,1);
int mu1=GetInPortSize(block,1,1);
int nu1=GetInPortSize(block,1,2);
SCSREAL_COP *y1=GetRealOutPortPtrs(block,1);
int my1=GetOutPortSize(block,1,1);
int ny1=GetOutPortSize(block,1,2);
int nevprt=GetEventCode(block);
switch (flag){
case VssFlag_Initialize:
break;
case VssFlag_Reinitialize:
break;
case VssFlag_Terminate:
break;
case VssFlag_OutputUpdate:
break;
}
}