Result <LoadIncrementalState> GetCorrection(LoadState state, LoadIncrementalState prediction, StructureInfo info)
        {
            ILinearSolver   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);
            Result <LoadIncrementalState> incrementalStateResult = Scheme.Correct(state, prediction, info, dut, dur);

            return(incrementalStateResult);
        }
Esempio n. 2
0
        internal LoadIncrementalState Predict(LoadState state, double initialStiffness, StructureInfo info)
        {
            Vector<double> equilibrium = info.InitialLoad + state.Lambda * info.ReferenceLoad - info.Reaction(state.Displacement);
            ILinearSolver 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.Predict(Dvt, info.ReferenceLoad) * Math.Sign(bergam);
            Vector<double> Dv = DLambda * Dvt + Dvr;

            return new LoadIncrementalState(DLambda, Dv);
        }