/// <summary> /// Computes the energy stored in the fluid interface of a two-phase flow. /// </summary> /// <param name="LsTrk"></param> /// <param name="sigma"></param> public static double GetSurfaceEnergy(LevelSetTracker LsTrk, double sigma) { using (new FuncTrace()) { if (LsTrk.LevelSets.Count != 1) { throw new NotImplementedException(); } double totSurface = 0; int order = 0; if (LsTrk.GetCachedOrders().Count > 0) { order = LsTrk.GetCachedOrders().Max(); } else { order = 1; } var SchemeHelper = LsTrk.GetXDGSpaceMetrics(new[] { LsTrk.GetSpeciesId("A") }, order, 1).XQuadSchemeHelper; //var SchemeHelper = new XQuadSchemeHelper(LsTrk, momentFittingVariant, LsTrk.GetSpeciesId("A")); CellQuadratureScheme cqs = SchemeHelper.GetLevelSetquadScheme(0, LsTrk.Regions.GetCutCellMask()); CellQuadrature.GetQuadrature(new int[] { 1 }, LsTrk.GridDat, cqs.Compile(LsTrk.GridDat, order), delegate(int i0, int Length, QuadRule QR, MultidimensionalArray EvalResult) { EvalResult.SetAll(1.0); }, delegate(int i0, int Length, MultidimensionalArray ResultsOfIntegration) { for (int i = 0; i < Length; i++) { totSurface += ResultsOfIntegration[i, 0]; } } ).Execute(); return(totSurface * sigma); } }