示例#1
0
        LoadIncrementalStateResult GetCorrection(LoadState state, LoadIncrementalState prediction, StructureInfo info)
        {
            Matrix <double>            stiffnessMatrix        = info.Stiffness(state.Displacement);
            Vector <double>            dut                    = stiffnessMatrix.Solve(info.ReferenceLoad);
            Vector <double>            reaction               = info.Reaction(state.Displacement);
            Vector <double>            equilibrium            = info.InitialLoad + state.Lambda * info.ReferenceLoad - reaction;
            Vector <double>            dur                    = stiffnessMatrix.Solve(equilibrium);
            LoadIncrementalStateResult incrementalStateResult = Scheme.GetCorrection(state, prediction, info, dut, dur);

            return(incrementalStateResult);
        }
示例#2
0
        /// <summary>
        /// Predicts a LoadIncrementalState.
        /// </summary>
        /// <param name="state"></param>
        /// <param name="initialStiffness"></param>
        /// <returns></returns>
        internal LoadIncrementalStateResult Predict(LoadState state, double initialStiffness, StructureInfo info)
        {
            Vector <double> equilibrium = info.InitialLoad + state.Lambda * info.ReferenceLoad - info.Reaction(state.Displacement);
            Matrix <double> mK          = info.Stiffness(state.Displacement);
            Vector <double> Dvt         = mK.Solve(info.ReferenceLoad);
            Vector <double> Dvr         = mK.Solve(equilibrium);
            double          bergam      = GetBergamParameter(initialStiffness, Dvt, info);
            double          DLambda     = Scheme.GetPrediction(Dvt, info.ReferenceLoad) * Math.Sign(bergam);
            Vector <double> Dv          = DLambda * Dvt + Dvr;

            return(new LoadIncrementalStateResult(new LoadIncrementalState(DLambda, Dv), true, ""));
        }