14 #ifndef SIM_COUPLED_SI_H_
15 #define SIM_COUPLED_SI_H_
31 template<
class T1,
class T2>
71 this->
S1.getProcessAdm().cout <<
"\n step="<< tp.
step
72 <<
" time="<< tp.
time.
t << std::endl;
76 for (tp.
iter = 0; tp.
iter <= maxit && conv != SIM::CONVERGED; tp.
iter++)
79 if (firstS1 && (status1 = this->
S1.solveIteration(tp)) <= SIM::DIVERGED)
82 if ((status2 = this->
S2.solveIteration(tp)) <= SIM::DIVERGED)
85 if (!firstS1 && (status1 = this->
S1.solveIteration(tp)) <= SIM::DIVERGED)
98 if (fabs(
omega) < 1e-6) {
99 std::cerr <<
"\n ** Relaxation weight "<<
omega <<
" too small,"
100 <<
" resetting to default "<<
omega0 << std::endl;
120 this->
S1.postSolve(tp);
121 this->
S2.postSolve(tp);
132 if (status1 == status2)
135 if (status1 == SIM::FAILURE || status2 == SIM::FAILURE)
138 if (status1 == SIM::DIVERGED || status2 == SIM::DIVERGED)
139 return SIM::DIVERGED;
153 if (func.find_first_of(
't') != std::string::npos)
178 return static_cast<int>((*maxItFunc)(iStep));
Specific function implementations.
Initialization of the IFEM library.
Global algebraic operations on index 1-based matrices and vectors.
Coupled SIM solver class template.
Class for encapsulation of general time stepping parameters.
static const double T1[2]
1-point rule coordinates.
Definition: TriangleQuadrature.C:19
static utl::LogStream cout
Combined standard out for parallel processes.
Definition: IFEM.h:62
Template class for semi-implicitly coupled simulators.
Definition: SIMCoupledSI.h:33
Vector prevRes
Previous residual used for aitken-acceleration factor.
Definition: SIMCoupledSI.h:193
bool aitken
If true, Aitken-acceleration is enabled.
Definition: SIMCoupledSI.h:190
int getMaxit(int iStep=0) const
Returns the maximum number of sub-iteration cycles.
Definition: SIMCoupledSI.h:173
int maxIter
Maximum number of iterations.
Definition: SIMCoupledSI.h:184
double omega
Current relaxation parameter.
Definition: SIMCoupledSI.h:189
virtual const Vector & getRelaxationVector() const
Returns solution to use for relaxation.
Definition: SIMCoupledSI.h:58
virtual void setRelaxedSolution(const Vector &)
Sets the relaxed solution.
Definition: SIMCoupledSI.h:65
virtual const Vector & getAitkenResidual() const
Returns residual to use for aitken acceleration.
Definition: SIMCoupledSI.h:51
virtual void enableStaggering(bool enable=true)
Enable/disable the staggering iteration cycles.
Definition: SIMCoupledSI.h:48
void parseIterations(const tinyxml2::XMLElement *elem)
Parses sub-iteration setup from an XML tag.
Definition: SIMCoupledSI.h:146
SIMCoupledSI(T1 &s1, T2 &s2)
The constructor forwards to the parent class constructor.
Definition: SIMCoupledSI.h:36
virtual bool solveStep(TimeStep &tp, bool firstS1=true)
Computes the solution for the current time step.
Definition: SIMCoupledSI.h:68
bool noStg
If true, sub-iterations is disabled.
Definition: SIMCoupledSI.h:186
virtual ~SIMCoupledSI()
The destructor deletes the max iteration function.
Definition: SIMCoupledSI.h:45
virtual SIM::ConvStatus checkConvergence(const TimeStep &, SIM::ConvStatus status1, SIM::ConvStatus status2)
Override this method to add additional convergence criteria.
Definition: SIMCoupledSI.h:128
Vector prevSol
Previous solution for relaxed field.
Definition: SIMCoupledSI.h:192
double omega0
Initial relaxation parameter.
Definition: SIMCoupledSI.h:188
ScalarFunc * maxItFunc
Maximum number of iterations as a function.
Definition: SIMCoupledSI.h:185
Template class for coupled simulators.
Definition: SIMCoupled.h:35
T1 & S1
First substep.
Definition: SIMCoupled.h:193
T2 & S2
Second substep.
Definition: SIMCoupled.h:194
Scalar-valued unary function of a scalar value.
Definition: Function.h:127
Class for encapsulation of general time stepping parameters.
Definition: TimeStep.h:31
int step
Time step counter.
Definition: TimeStep.h:72
bool multiSteps() const
Returns true if the simulation consists of several time steps.
Definition: TimeStep.C:184
TimeDomain time
Time domain data.
Definition: TimeStep.h:74
int & iter
Iteration counter.
Definition: TimeStep.h:73
A vector class with some added algebraic operations.
Definition: matrix.h:64
vector< T > & add(const std::vector< T > &X, const T &alfa=T(1), unsigned int ofsx=0, int stridex=1, unsigned int ofsy=0, int stridey=1)
Add the given vector X scaled by alfa to *this.
Definition: matrix.h:1562
T dot(const T *v, size_t nv, size_t off1=0, int inc1=1, size_t off2=0, int inc2=1) const
Dot product between *this and another vector.
Definition: matrix.h:1502
ConvStatus
Enum defining the various convergence statuses that may occur.
Definition: SIMenums.h:50
int getAttribute(const tinyxml2::XMLElement *xml, const char *att, bool &val)
Extracts a boolean attribute value from the specified XML-element.
Definition: Utilities.C:188
ScalarFunc * parseTimeFunc(const char *func, const std::string &type="expression", Real eps=Real(1.0e-8))
Creates a time function by parsing a character string.
Definition: Functions.C:943
char first
If true, this is the first load/time step.
Definition: TimeDomain.h:29
double t
Current time (or pseudo time, load parameter)
Definition: TimeDomain.h:24