Example #1
0
        public double InnerEdgeForm(ref CommonParams inp, double[] U_IN, double[] U_OT, double[,] _Grad_uIN, double[,] _Grad_uOUT, double _vIN, double _vOUT, double[] _Grad_vIN, double[] _Grad_vOUT)
        {
            double ret   = 0.0;
            int    GAMMA = m_EdgForm.ArgumentOrdering.Count;
            int    D     = inp.D;

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

            CommonParams clonedParams = inp;

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

            double deltaIn = GetTmpTrialVals(inp.Parameters_IN, out var U_IN_temp, out var GradU_IN_temp);
            double deltaOt = GetTmpTrialVals(inp.Parameters_OUT, out var U_OT_temp, out var GradU_OT_temp);
            double delta   = Math.Max(deltaIn, deltaOt);


            //SetDir = 0;

            double f0 = m_EdgForm.InnerEdgeForm(ref clonedParams, U_IN_temp, U_OT_temp, GradU_IN_temp, GradU_OT_temp, _vIN, _vOUT, _Grad_vIN, _Grad_vOUT);

            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) {
                    {
                        //if (U_IN[iVar] != 0.0 && (_vIN != 0 || _vOUT != 0))
                        //    Console.Write("");

                        ret += Diff(ref U_IN_temp[iVar], U_IN[iVar],
                                    ref clonedParams, U_IN_temp, U_OT_temp, GradU_IN_temp, GradU_OT_temp, _vIN, _vOUT, _Grad_vIN, _Grad_vOUT,
                                    delta, f0);
                    }

                    //if(U_OT[iVar] != 0.0) {
                    {
                        //if (U_OT[iVar] != 0.0 && (_vIN != 0 || _vOUT != 0))
                        //    Console.Write("");

                        ret += Diff(ref U_OT_temp[iVar], U_OT[iVar],
                                    ref clonedParams, U_IN_temp, U_OT_temp, GradU_IN_temp, GradU_OT_temp, _vIN, _vOUT, _Grad_vIN, _Grad_vOUT,
                                    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 += Diff(ref GradU_IN_temp[iVar, d], _Grad_uIN[iVar, d],
                                        ref clonedParams, U_IN_temp, U_OT_temp, GradU_IN_temp, GradU_OT_temp, _vIN, _vOUT, _Grad_vIN, _Grad_vOUT,
                                        delta, f0);
                        }

                        //if(U_OT[iVar] != 0.0) {
                        {
                            ret += Diff(ref GradU_OT_temp[iVar, d], _Grad_uOUT[iVar, d],
                                        ref clonedParams, U_IN_temp, U_OT_temp, GradU_IN_temp, GradU_OT_temp, _vIN, _vOUT, _Grad_vIN, _Grad_vOUT,
                                        delta, f0);
                        }
                    }
                }
            }

            //Dir = 0;
            return(ret);
        }
 public double InnerEdgeForm(ref CommonParams inp, double[] _uA, double[] _uB, double[,] _Grad_uA, double[,] _Grad_uB, double _vA, double _vB, double[] _Grad_vA, double[] _Grad_vB)
 {
     return(edgeForm.InnerEdgeForm(ref inp, _uA, _uB, _Grad_uA, _Grad_uB, _vA, _vB, _Grad_vA, _Grad_vB));
 }