/// <summary> /// Инициализация слоя /// </summary> /// <param name="time">время слоя</param> /// <param name="opts">опции слоя</param> /// <param name="initCellFunc">функция генерации ячеек</param> /// <param name="initBoundFunc">функция генерации границ</param> public virtual void InitLayer(double time, WBOneDemLayerOptions opts, Func <double, double, TCell> initCellFunc, Func <double, double, TBound> initBoundFunc) { Opt = opts; Time = time; Nodes?.Clear(); int indexOfFirstBound = Opt.LeftNodesCount % 2 == 0 ? 1 : 0; var nds = Enumerable.Range(0, Opt.AllNodesCount) .Select(ind => { double x = Opt.X_left + ind * Opt.H; WBOneDemNode nd = ind % 2 == indexOfFirstBound ? (WBOneDemNode)initCellFunc(Time, x) : (WBOneDemNode)initBoundFunc(Time, x); nd.X = x; return(nd); }); Nodes.AddRange(nds); InitLists(); NodeIndexing(); InitBoundCellRefs(); InitDataRefs(); }
/// <summary> /// Инициализация слоя /// </summary> /// <param name="time">время слоя</param> /// <param name="opts">опции слоя</param> /// <param name="initCondFunc">функция генерации узлов (на вход идет время и координата Х, возвращаемое значение = новый узел</param> public virtual void InitLayer(double time, WBOneDemLayerOptions opts, Func <double, double, T> initCondFunc) { Opt = opts; Time = time; Nodes?.Clear(); var nds = Enumerable.Range(-Opt.LeftNodesCount, Opt.AllNodesCount) .Select(ind => { double x = Opt.X_left + ind * Opt.H; var nd = initCondFunc(Time, x); nd.X = x; nd.Index = ind * 10; return(nd); }); Nodes.AddRange(nds); InitLists(); NodeIndexing(); }
/// <summary> /// Немного дополненная версия /// </summary> /// <param name="time"></param> /// <param name="opts"></param> /// <param name="initCondFunc"></param> public override void InitLayer(double time, WBOneDemLayerOptions opts, Func <double, double, WBOneDemNode> initCondFunc) { base.InitLayer(time, opts, initCondFunc); InitBoundCellRefs(); InitDataRefs(); }