Example #1
0
        public double BoundaryEdgeForm(ref CommonParamsBnd inp, double[] U_IN, double[,] _Grad_uIn, double _vIN, double[] _Grad_vIN)
        {
            double ret   = 0.0;
            int    GAMMA = m_EdgForm.ArgumentOrdering.Count;
            int    D     = inp.D;

            Debug.Assert(D == m_SpatialDimension, "spatial dimension mismatch");

            CommonParamsBnd clonedParams = inp;

            Debug.Assert(object.ReferenceEquals(inp, clonedParams) == false);
            GetOrgParams(inp.Parameters_IN, out clonedParams.Parameters_IN);

            double delta = GetTmpTrialVals(inp.Parameters_IN, out var U_IN_temp, out var GradU_IN_temp);

            double f0 = m_EdgForm.BoundaryEdgeForm(ref clonedParams, U_IN_temp, GradU_IN_temp, _vIN, _Grad_vIN);

            ret += f0;                               // affine contribution - contains V and GradV contribution

            for (int iVar = 0; iVar < GAMMA; iVar++) // loop over trial variables
            {
                if (((m_EdgForm.InnerEdgeTerms & (TermActivationFlags.UxV | TermActivationFlags.UxGradV)) != 0))
                {
                    //if (U_IN[iVar] != 0.0) {
                    {
                        ret += DiffBnd(ref U_IN_temp[iVar], U_IN[iVar],
                                       ref clonedParams, U_IN_temp, GradU_IN_temp, _vIN, _Grad_vIN, delta, f0);
                    }
                }

                if (((m_EdgForm.InnerEdgeTerms & (TermActivationFlags.GradUxV | TermActivationFlags.GradUxGradV)) != 0))
                {
                    for (int d = 0; d < D; d++)
                    {
                        //if (U_IN[iVar] != 0.0) {
                        {
                            ret += DiffBnd(ref GradU_IN_temp[iVar, d], _Grad_uIn[iVar, d],
                                           ref clonedParams, U_IN_temp, GradU_IN_temp, _vIN, _Grad_vIN, delta, f0);
                        }
                    }
                }
            }

            return(ret);
        }
 public double BoundaryEdgeForm(ref CommonParamsBnd inp, double[] _uA, double[,] _Grad_uA, double _vA, double[] _Grad_vA)
 {
     return(edgeForm.BoundaryEdgeForm(ref inp, _uA, _Grad_uA, _vA, _Grad_vA));
 }