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