/// <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();
 }