Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F85629740
ImplicitSolveOperator.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, Sep 30, 11:52
Size
2 KB
Mime Type
text/x-c
Expires
Wed, Oct 2, 11:52 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
21223902
Attached To
rLAMMPS lammps
ImplicitSolveOperator.h
View Options
#ifndef IMPLICIT_SOLVE_OPERATOR_H
#define IMPLICIT_SOLVE_OPERATOR_H
// ATC includes
#include "Array2D.h"
#include "MatrixLibrary.h"
#include "PhysicsModel.h"
// other includes
#include <vector>
#include <map>
namespace ATC {
// Forward class declarations
class ATC_Coupling;
class FE_Engine;
/**
* @class ImplicitSolveOperator
* @brief Helper class to compute matrix-free product for use with IML++ solvers
*/
class ImplicitSolveOperator {
public:
/** Constructor */
ImplicitSolveOperator(double alpha, double dt);
/** Destructor */
virtual ~ImplicitSolveOperator() {};
/** pure virtual operator to compute Ax, for equation Ax=b */
virtual DENS_VEC operator * (const DENS_VEC &x) const;
/** pure virtual method to return the rhs vector b */
virtual void R(const DENS_VEC &f, DENS_VEC &v) const = 0;
/** pure virtual method to return the rhs vector b */
virtual DENS_VEC r() const;
/** pure virtual method to return preconditioner */
virtual DiagonalMatrix<double> preconditioner() const;
/** finalize */
virtual void solution(const DENS_MAT & dx, DENS_MAT &x) const = 0;
virtual void rhs(const DENS_MAT & r, DENS_MAT &rhs) const = 0;
protected:
int n_,dof_;
DENS_VEC x0_; // condensed previous
mutable DENS_VEC x_; // condensed current
DENS_VEC R0_; // condensed previous
mutable DENS_VEC R_; // condensed current
double dt_; // timestep
double alpha_; // implicit/explicit parameter (0 -> explicit, else implicit)
double epsilon0_; // small parameter to compute increment
};
/**
* @class FieldImplicitSolveOperator
* @brief Class to perform A*x operation for electron temperature solution
*/
class FieldImplicitSolveOperator : public ImplicitSolveOperator {
public:
/** Constructor */
FieldImplicitSolveOperator(ATC_Coupling * atc,
FIELDS & fields,
const FieldName f,
const Array2D< bool > & rhsMask,
const PhysicsModel * physicsModel,
double simTime, double dt, double alpha = 0.5);
/** Destructor */
virtual ~FieldImplicitSolveOperator() {};
virtual void R(const DENS_VEC &f, DENS_VEC &v) const;
virtual void solution(const DENS_MAT & dx, DENS_MAT &x) const;
virtual void rhs(const DENS_MAT & r, DENS_MAT &rhs) const;
protected:
void to_all(const VECTOR& free, MATRIX& all) const;
void to_free(const MATRIX& all, VECTOR& free) const;
FieldName fieldName_; // field name of ODE to solve
ATC_Coupling * atc_; /** Pointer to atc */
const PhysicsModel * physicsModel_; /** Pointer to PhysicsModel */
FIELDS & fields0_; // Reference to current fields (passed in constructor)
// Local fields
mutable FIELDS fields_; // full
// set of fixed nodes
std::map<int,int> freeNodes_;
// masks
Array2D<bool> rhsMask_;
Array<FieldName> massMask_;
// right hand side of dot x = R(x)
mutable FIELDS rhs_; // full
// simulation time
double time_;
};
} // namespace ATC
#endif
Event Timeline
Log In to Comment