Files
solver/MbDCode/NewtonRaphson.h
2023-06-24 23:08:29 -06:00

47 lines
1.5 KiB
C++

#pragma once
#include <memory>
#include <vector>
#include "Solver.h"
//#include "RowTypeMatrix.h"
namespace MbD {
template<typename T>
class FullColumn;
//class RowTypeMatrix;
class SystemSolver;
class NewtonRaphson : public Solver
{
//system xold x dx dxNorm dxNorms dxTol y yNorm yNormOld yNorms yNormTol pypx iterNo iterMax nDivergence nBackTracking twoAlp lam
public:
void initialize() override;
void initializeLocally() override;
void run() override;
void setSystem(Solver* sys) override;
void iterate();
virtual void fillY() = 0;
virtual void fillPyPx() = 0;
virtual void calcyNorm() = 0;
virtual void calcdxNorm() = 0;
virtual void solveEquations() = 0;
virtual void incrementIterNo();
virtual void updatexold() = 0;
virtual void xEqualxoldPlusdx() = 0;
virtual bool isConverged();
virtual void askSystemToUpdate();
virtual void passRootToSystem() = 0;
bool isConvergedToNumericalLimit();
void calcDXNormImproveRootCalcYNorm();
void postRun() override;
SystemSolver* system; //Use raw pointer when pointing backwards.
std::shared_ptr<std::vector<double>> dxNorms, yNorms;
double dxNorm = 0.0, yNorm = 0.0, yNormOld = 0.0, yNormTol = 0.0, dxTol = 0.0, twoAlp = 0.0, lam = 0.0;
int iterNo = -1, iterMax = -1, nDivergence = -1, nBackTracking = -1;
};
}