/// <summary>
        /// Analyses the stiffness matrix for warnings.
        /// </summary>
        /// <param name="mtx">The MTX.</param>
        /// <param name="map">The map.</param>
        /// <param name="currentCase">The current load case which error is with it.</param>
        /// <remarks>
        /// Only searches for zero elements on matrix diagonal
        /// </remarks>
        private void AnalyseStiffnessMatrixForWarnings(ZoneDevidedMatrix mtx, DofMappingManager map,
                                                       LoadCase currentCase)
        {
            var cs = mtx.ReleasedReleasedPart;

            var n = cs.ColumnCount;

            var t = new bool[n]; //true if i'th diagonal member nonzero, false if diagonal member zero!

            for (var i = 0; i < n; i++)
            {
                var st = cs.ColumnPointers[i];
                var en = cs.ColumnPointers[i + 1];

                var col = i;

                for (var j = st; j < en; j++)
                {
                    var row = cs.RowIndices[j];
                    //var val = cs.Values[j];

                    if (row == col)
                    {
                        t[row] = true;
                    }
                }
            }

            for (var i = 0; i < n; i++)
            {
                if (t[i])
                {
                    continue;
                }

                var globalDofNum = map.RMap1[map.RMap2[i]];

                var nodeNum = globalDofNum / 6;
                var dof     = (DoF)(globalDofNum % 6);

                var rec = TraceRecords.GetRecord(30000, parent.Nodes[nodeNum].Label);

                rec.TargetIdentifier = string.Format(
                    "{0} DoF on node #{1} for load case with [name = '{2}'] and [nature = {3}]", dof, nodeNum,
                    currentCase.CaseName, currentCase.LoadType);

                parent.Trace.Write(rec);
            }
        }
        /// <summary>
        /// Checks the model for warnings.
        /// </summary>
        /// <param name="model">The model.</param>
        public void CheckModel(Model model)
        {
            for (var i = 0; i < model.Elements.Count; i++)
            {
                var elementIdentifier = string.Format("{0}'th element in Model.Elements", i);

                if (model.Elements[i] is FrameElement2Node)
                {
                    var elm = model.Elements[i] as FrameElement2Node;
                    if (elm.Label != null)
                    {
                        elementIdentifier = elm.Label;
                    }

                    //10000
                    if (elm.Geometry != null && elm.UseOverridedProperties)
                    {
                        var rec = TraceRecords.GetRecord(10000, elementIdentifier);
                        model.Trace.Write(rec);
                    }


                    //10010
                    if (elm.Geometry == null && (elm.A == 0 || elm.Iy == 0 || elm.Iz == 0))
                    {
                        var rec = TraceRecords.GetRecord(10010, elementIdentifier);
                        model.Trace.Write(rec);
                    }


                    //10020
                    if (elm.ConsiderShearDeformation && elm.Geometry == null && (elm.Ay == 0 || elm.Az == 0))
                    {
                        var rec = TraceRecords.GetRecord(10020, elementIdentifier);
                        model.Trace.Write(rec);
                    }

                    //10100
                    if (elm.G == 0 || elm.E == 0)
                    {
                        var rec = TraceRecords.GetRecord(10100, elementIdentifier);
                        model.Trace.Write(rec);
                    }
                }


                if (model.Elements[i] is TrussElement2Node)
                {
                    var elm = model.Elements[i] as TrussElement2Node;
                    if (elm.Label != null)
                    {
                        elementIdentifier = elm.Label;
                    }

                    //10000
                    if (elm.Geometry != null && elm.UseOverridedProperties)
                    {
                        var rec = TraceRecords.GetRecord(10000, elementIdentifier);
                        model.Trace.Write(rec);
                    }


                    //10010
                    if (elm.Geometry == null && (elm.A == 0))
                    {
                        var rec = TraceRecords.GetRecord(10010, elementIdentifier);
                        model.Trace.Write(rec);
                    }


                    //10100
                    if (elm.E == 0)
                    {
                        var rec = TraceRecords.GetRecord(10100, elementIdentifier);
                        model.Trace.Write(rec);
                    }
                }
            }
        }