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); }
/// <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, "")); }