public IEnumerable <LoadState> Broadcast()
        {
            ILinearSolver   mK0 = Info.Stiffness(State.Displacement);
            Vector <double> Dv0 = mK0.Solve(Info.ReferenceLoad);
            double          k0  = Info.ReferenceLoad.DotProduct(Dv0);

            while (true)
            {
                LoadIncrementalState prediction = Predictor.Predict(State, k0, Info);
                State = State.Add(prediction);
                Result <LoadIncrementalState> correctionResult = Corrector.Correct(State, prediction, Info);
                if (correctionResult.IsSuccess)
                {
                    State = State.Add(correctionResult.Value);
                    yield return(State);
                }
                else
                {
                    break;
                }
            }
        }
Example #2
0
 internal void Add(LoadIncrementalState inc)
 {
     IncrementDisplacement += inc.IncrementDisplacement;
     IncrementLambda       += inc.IncrementLambda;
 }