/// <summary> /// Returns a collection of local and global condition numbers in order to assess the operators stability /// </summary> public IDictionary <string, double> OperatorAnalysis(IEnumerable <int[]> VarGroups = null) { AssembleMatrixCallback(out BlockMsrMatrix System, out double[] Affine, out BlockMsrMatrix MassMatrix, this.CurrentStateMapping.Fields.ToArray(), true, out var Dummy); if (VarGroups == null) { int NoOfVar = this.CurrentStateMapping.Fields.Count; VarGroups = new int[][] { NoOfVar.ForLoop(i => i) }; } var Ret = new Dictionary <string, double>(); foreach (int[] varGroup in VarGroups) { var ana = new BoSSS.Solution.AdvancedSolvers.Testing.OpAnalysisBase(this.m_LsTrk, System, Affine, this.CurrentStateMapping, this.m_CurrentAgglomeration, MassMatrix, this.Config_MultigridOperator, this.AbstractOperator); ana.VarGroup = varGroup; var Table = ana.GetNamedProperties(); foreach (var kv in Table) { if (!Ret.ContainsKey(kv.Key)) { Ret.Add(kv.Key, kv.Value); } } } return(Ret); }
/// <summary> /// Operator stability analysis /// </summary> override public IDictionary <string, double> OperatorAnalysis() { var ana = new BoSSS.Solution.AdvancedSolvers.Testing.OpAnalysisBase(this.LsTrk, this.Op_Matrix, this.Op_Affine, this.u.Mapping, Op_Agglomeration, this.Op_mass.GetMassMatrix(this.u.Mapping, new double[] { 1.0 }, false, this.LsTrk.SpeciesIdS.ToArray()), this.OpConfig, this.Op); Tecplot.PlotFields(new DGField[] { ana.StencilCondNumbersV() }, "stencilCn", 0.0, 1); return(ana.GetNamedProperties()); }