added: option to set the error norm used for iteration error estimates

git-svn-id: http://svn.sintef.no/trondheim/IFEM/trunk@839 e10b68d5-8a6e-419e-a041-bce267b0401d
This commit is contained in:
akva
2011-02-24 09:52:24 +00:00
committed by Knut Morten Okstad
parent 421912afdd
commit 0d96e7b80d
2 changed files with 21 additions and 4 deletions

View File

@@ -37,6 +37,7 @@ NonLinSIM::NonLinSIM (SIMbase* sim)
convTol = 1.0e-6;
divgLim = 1.0;
eta = 0.0;
iteNorm = ENERGY;
}
@@ -263,18 +264,22 @@ NonLinSIM::ConvStatus NonLinSIM::checkConvergence (SolvePrm& param)
static double prevNorm = 0.0;
static int nIncrease = 0;
double norm, enorm, resNorm, linsolNorm;
double norm=1.f, enorm, resNorm, linsolNorm;
model->iterationNorms(linsol,residual,enorm,resNorm,linsolNorm);
if (iteNorm == ENERGY)
norm = enorm;
else if (iteNorm == L2)
norm = resNorm;
if (param.iter == 0)
{
if (enorm > param.refNorm)
param.refNorm = enorm;
if (norm > param.refNorm)
param.refNorm = norm;
norm = prevNorm = 1.0;
nIncrease = 0;
}
else
norm = fabs(enorm)/param.refNorm;
norm = fabs(norm)/param.refNorm;
if (msgLevel > 0 && myPid == 0 && !solution.empty())
{

View File

@@ -75,6 +75,17 @@ public:
//! \param[in] mode Solution mode to use for this step
bool solveStep(SolvePrm& param, SIM::SolutionMode mode = SIM::STATIC);
//! \brief Enum describing the norm used for convergence tests in the
//! Newton-Raphson iterations
enum ERRORNORM {
L2,
ENERGY
};
//! \brief Set the current norm in used in iteration error estimates
//! param[in] norm The wanted error norm
void setErrorNorm(ERRORNORM norm) { iteNorm = norm; }
//! \brief Computes and prints some solution norm quantities.
//! \param[in] time Parameters for nonlinear/time-dependent simulations.
//! \param[in] compName Solution name to be used in the norm output
@@ -130,6 +141,7 @@ private:
double eta; //!< Line search tolerance
int maxit; //!< Maximum number of iterations in a time/load step
int nupdat; //!< Number of iterations with updated tangent
ERRORNORM iteNorm;//!< The norm used to measure the residual
// Post-processing attributes
int nBlock; //!< Running VTF result block counter