Quintiq file version 2.0
|
#parent: #root
|
Method NewIterationPart (LibOpt_Task task)
|
{
|
Description:
|
[*
|
React to the creation of a new `LibOpt_Task`.
|
This means in some cases that two new `Algorithms` need to be created.
|
|
The `Algorithms` are used to store messages for the channel.
|
One `Algorithm` is used to store messages sent by all upstream and downstream iteration part executions (including itself).
|
The other `Algorithm` only stores the messages sent by all upstream iteration part executions (including itself).
|
This one will be copied when a new downstream iteration part is created, as a new downstream iteration part needs access to the messages from its upstream iteration parts, but not its sibling iteration parts.
|
*]
|
TextBody:
|
[*
|
algorithm1 := null( Algorithm, owning );
|
algorithm2 := null( Algorithm, owning );
|
|
channel := this.Channel();
|
|
if( this.IsNew() )
|
{
|
algorithm1 := LibOpt_Utility::ConstructMathematicalProgramWithoutAnalysis();
|
algorithm1.StoreReal( LibOpt_Channel::Algorithm_Count(), NumberToReal::ISOConverter().Convert( 0 ) );
|
algorithm2 := LibOpt_Utility::ConstructMathematicalProgramWithoutAnalysis();
|
algorithm2.StoreReal( LibOpt_Channel::Algorithm_Count(), NumberToReal::ISOConverter().Convert( 0 ) );
|
}
|
else
|
{
|
parent_id := channel.GetAlgorithmStoreID( task.Parent(), true );
|
parent_algorithm := channel.GetAlgorithm( parent_id );
|
|
algorithm1 := this.CopyAlgorithm( parent_algorithm );
|
algorithm2 := this.CopyAlgorithm( parent_algorithm );
|
|
AlgorithmStore::Store( parent_id, & parent_algorithm );
|
}
|
|
AlgorithmStore::Store( channel.GetAlgorithmStoreID( task, true ), & algorithm1 );
|
AlgorithmStore::Store( channel.GetAlgorithmStoreID( task, false ), & algorithm2 );
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|