Added in a new Residual evaluation type, Base_LaggedSolutionComponents,
to properly handle Picard iterations within the damping algorithm.
This commit is contained in:
parent
154b234da9
commit
12b6f572e6
3 changed files with 16 additions and 6 deletions
|
|
@ -465,9 +465,9 @@ namespace Cantera {
|
||||||
* @param ydot_curr Current value of the time derivative of the solution vector
|
* @param ydot_curr Current value of the time derivative of the solution vector
|
||||||
*/
|
*/
|
||||||
void NonlinearSolver::doResidualCalc(const doublereal time_curr, const int typeCalc, const doublereal * const y_curr,
|
void NonlinearSolver::doResidualCalc(const doublereal time_curr, const int typeCalc, const doublereal * const y_curr,
|
||||||
const doublereal * const ydot_curr)
|
const doublereal * const ydot_curr, const ResidEval_Type_Enum evalType)
|
||||||
{
|
{
|
||||||
m_func->evalResidNJ(time_curr, delta_t_n, y_curr, ydot_curr, DATA_PTR(m_resid), Base_ResidEval);
|
m_func->evalResidNJ(time_curr, delta_t_n, y_curr, ydot_curr, DATA_PTR(m_resid), evalType);
|
||||||
m_nfe++;
|
m_nfe++;
|
||||||
m_resid_scaled = false;
|
m_resid_scaled = false;
|
||||||
}
|
}
|
||||||
|
|
@ -955,9 +955,9 @@ namespace Cantera {
|
||||||
* -> m_resid[] contains the result of the residual calculation
|
* -> m_resid[] contains the result of the residual calculation
|
||||||
*/
|
*/
|
||||||
if (solnType_ != NSOLN_TYPE_STEADY_STATE) {
|
if (solnType_ != NSOLN_TYPE_STEADY_STATE) {
|
||||||
doResidualCalc(time_curr, solnType_, y1, ydot1);
|
doResidualCalc(time_curr, solnType_, y1, ydot1, Base_LaggedSolutionComponents);
|
||||||
} else {
|
} else {
|
||||||
doResidualCalc(time_curr, solnType_, y1, ydot0);
|
doResidualCalc(time_curr, solnType_, y1, ydot0, Base_LaggedSolutionComponents);
|
||||||
}
|
}
|
||||||
m_normResidTrial = residErrorNorm(DATA_PTR(m_resid));
|
m_normResidTrial = residErrorNorm(DATA_PTR(m_resid));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,9 +141,12 @@ namespace Cantera {
|
||||||
* @param typeCalc Type of the calculation
|
* @param typeCalc Type of the calculation
|
||||||
* @param y_curr Current value of the solution vector
|
* @param y_curr Current value of the solution vector
|
||||||
* @param ydot_curr Current value of the time derivative of the solution vector
|
* @param ydot_curr Current value of the time derivative of the solution vector
|
||||||
|
* @param evalType Base evalulation type
|
||||||
|
* Defaults to Base_ResidEval
|
||||||
*/
|
*/
|
||||||
void doResidualCalc(const doublereal time_curr, const int typeCalc, const doublereal * const y_curr,
|
void doResidualCalc(const doublereal time_curr, const int typeCalc, const doublereal * const y_curr,
|
||||||
const doublereal * const ydot_curr);
|
const doublereal * const ydot_curr,
|
||||||
|
const ResidEval_Type_Enum evalType = Base_ResidEval);
|
||||||
|
|
||||||
//! Compute the undamped Newton step
|
//! Compute the undamped Newton step
|
||||||
/*!
|
/*!
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,14 @@ namespace Cantera {
|
||||||
/*!
|
/*!
|
||||||
* We calculate this when we want to display a solution
|
* We calculate this when we want to display a solution
|
||||||
*/
|
*/
|
||||||
Base_ShowSolution
|
Base_ShowSolution,
|
||||||
|
//! Base residual calculation containing any lagged components
|
||||||
|
/*!
|
||||||
|
* We use this to calculate residuals when doing line searches along
|
||||||
|
* directions determined by Jacobians that are missing contributions
|
||||||
|
* from lagged entries.
|
||||||
|
*/
|
||||||
|
Base_LaggedSolutionComponents
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Wrappers for the function evaluators for Nonlinear solvers and Time steppers
|
//! Wrappers for the function evaluators for Nonlinear solvers and Time steppers
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue