unit Sample; interface uses GlType,MathObj,SysUtils; //Run - функция блока function TSampleBlock (at, //Модельное время adt:RealType; //Шаг интегрирования var time,dtime:RealType; //Могут использоваться произвольно var AU,AY:TPtrExt; //Векторы входов, выходов var AX,ADX:array of RealType;//Векторы переменных состояний и их производных var CU,CY : TIntArray; //Векторы размерностей входов и выходов var Prop:TPtrArray; //Список параметров блоков var Vars:Pointer; //Внутренние данные run-функции Action:Integer //Флаг действия ):Integer;export; //Result - флаг ошибки (0 - нет ошибок) IMPLEMENTATION type TSampleRec = packed record Value : ^Integer; Count : ^Integer; end; pSampleRec = ^TSampleRec; function TSampleBlock; var j : Integer; x,s : RealType; begin Result:=0; with pSampleRec(Prop.arr)^ do case Action of //Количество переменных состояния f_GetDeriCount : Result:=0; //Флаг сортировки блока 1 - выходы мгновенно зависят от входов // 0 - выходы зависят только от переменных состояния f_GetInit : Result:=1; //Присвоение размерностей входов и выходов f_GetCount : begin CU.arr^[0]:=1; CY.arr^[0]:=1 end; //Инициализация состояний блоков f_InitState : begin AY.Ptr(0).Arr^[0]:=0; end; //Присвоение значений производных переменных состояния f_GetDeri : begin end; //Обновление выходов f_GoodStep, //на "хорошем шаге" f_RestoreOuts, //на восстановлении выходов при рестарте f_UpdateJacoby, //при обновлении якобиана для неявных методов f_UpdateOuts: //на предварительном шаге begin AY.Ptr(0).Arr^[0]:=AU.Ptr(0).Arr^[0]*Value^; end; end end; END.