Exemple #1
0
        /// <summary>
        /// Interpolate values from source node values to target points.
        /// </summary>
        private double InterpolateNodeToTarget(float[] nodeValues, int i)
        {
            double delVal = DeleteValueFloat;

            InterpNodeData w         = _targetsNode[i];
            int            elmtIndex = w.ElementIndex;

            if (elmtIndex < 0)
            {
                // target not included in source
                return(delVal);
            }

            if (_smesh == null)
            {
                throw new NotSupportedException("Node interpolation is only supported by SMeshData objects");
            }

            int[] elmtNodes = _smesh.ElementTable[elmtIndex];

            double res;

            if (elmtNodes.Length == 3)
            {
                double v1 = nodeValues[elmtNodes[0]];
                double v2 = nodeValues[elmtNodes[1]];
                double v3 = nodeValues[elmtNodes[2]];

                res = _interpT.GetValue(w.w1, w.w2, w.w3, v1, v2, v3);
            }
            else
            {
                double v1 = nodeValues[elmtNodes[0]];
                double v2 = nodeValues[elmtNodes[1]];
                double v3 = nodeValues[elmtNodes[2]];
                double v4 = nodeValues[elmtNodes[3]];

                res = _interpQ.GetValue(w.w1, w.w2, v1, v2, v3, v4);
            }

            return(res);
        }
Exemple #2
0
        /// <summary>
        /// Add a target, by specifying its (x,y) coordinate.
        /// </summary>
        private void AddSTarget(double x, double y)
        {
            // Find element that includes the (x,y) coordinate
            int element = _ssearcher.FindElement(x, y);

            // Setup interpolation from node values
            if (NodeValueInterpolation)
            {
                InterpNodeData interp;
                if (element >= 0)
                {
                    int[] nodes = _smesh.ElementTable[element];
                    if (nodes.Length == 3)
                    {
                        var weights = InterpTriangle.InterpolationWeights(x, y, _smesh, nodes);
                        interp = new InterpNodeData(element, weights.w1, weights.w2, weights.w3);
                    }
                    else if (nodes.Length == 4)
                    {
                        var weights = InterpQuadrangle.InterpolationWeights(x, y, _smesh, nodes);
                        interp = new InterpNodeData(element, weights.dx, weights.dy);
                    }
                    else
                    {
                        interp = InterpNodeData.Undefined();
                    }
                }
                else
                {
                    interp = InterpNodeData.Undefined();
                }

                if (_targetsNode == null)
                {
                    _targetsNode = new List <InterpNodeData>();
                }
                _targetsNode.Add(interp);
            }

            // Setup interpolation from element+node values
            if (ElmtNodeValueInterpolation)
            {
                InterpElmtNode.Weights weights;

                // Check if element has been found, i.e. includes the (x,y) point
                if (element >= 0)
                {
                    weights = InterpElmtNode.InterpolationWeights(x, y, element, _smesh);
                }
                else
                {
                    weights = InterpElmtNode.Undefined();
                }

                if (_targetsElmtNode == null)
                {
                    _targetsElmtNode = new List <InterpElmtNode.Weights>();
                }
                _targetsElmtNode.Add(weights);
            }
        }
Exemple #3
0
        /// <summary>
        /// Add a target, by specifying its (x,y) coordinate.
        /// </summary>
        public void AddTarget(double x, double y)
        {
            if (_mesh == null)
            {
                AddSTarget(x, y);
                return;
            }

            // Find element that includes the (x,y) coordinate
            MeshElement element = _searcher.FindElement(x, y);

            // Setup interpolation from node values
            if (NodeValueInterpolation)
            {
                InterpNodeData interp;
                // Check if element has been found, i.e. includes the (x,y) point
                if (element != null)
                {
                    var nodes = element.Nodes;
                    if (nodes.Count == 3)
                    {
                        var weights = InterpTriangle.InterpolationWeights(x, y, nodes);
                        interp = new InterpNodeData(element.Index, weights.w1, weights.w2, weights.w3);
                    }
                    else if (nodes.Count == 4)
                    {
                        var weights = InterpQuadrangle.InterpolationWeights(x, y, nodes);
                        interp = new InterpNodeData(element.Index, weights.dx, weights.dy);
                    }
                    else
                    {
                        interp = InterpNodeData.Undefined();
                    }
                }
                else
                {
                    interp = InterpNodeData.Undefined();
                }

                if (_targetsNode == null)
                {
                    _targetsNode = new List <InterpNodeData>();
                }
                _targetsNode.Add(interp);
            }

            // Setup interpolation from element+node values
            if (ElmtNodeValueInterpolation)
            {
                InterpElmtNode.Weights weights;
                // Check if element has been found, i.e. includes the (x,y) point
                if (element != null)
                {
                    weights = InterpElmtNode.InterpolationWeights(x, y, element);
                }
                else
                {
                    weights = InterpElmtNode.Undefined();
                }

                if (_targetsElmtNode == null)
                {
                    _targetsElmtNode = new List <InterpElmtNode.Weights>();
                }
                _targetsElmtNode.Add(weights);
            }
        }