# 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;
}
}