Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F93682000
PoissonSolver.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
Sat, Nov 30, 16:36
Size
2 KB
Mime Type
text/x-c
Expires
Mon, Dec 2, 16:36 (1 d, 21 h)
Engine
blob
Format
Raw Data
Handle
22688113
Attached To
rLAMMPS lammps
PoissonSolver.h
View Options
#ifndef POISSON_SOLVER_H
#define POISSON_SOLVER_H
// ATC includes
#include "Array2D.h"
#include "LinearSolver.h"
#include "PhysicsModel.h"
#include "NonLinearSolver.h"
// other includes
#include <vector>
#include <map>
namespace
ATC
{
// Forward class declarations
class
ATC_Coupling
;
class
FE_Engine
;
class
PrescribedDataManager
;
class
PhysicsModel
;
/**
* @class PoissonSolver
* @brief a class to solve the Poisson equation of electro-statics
*/
class
PoissonSolver
{
public:
/** Constructor */
PoissonSolver
(
const
FieldName
fieldName
,
const
PhysicsModel
*
physicsModel
,
const
FE_Engine
*
feEngine
,
const
PrescribedDataManager
*
prescribedDataMgr
,
/*const*/
ATC_Coupling
*
atc
,
const
Array2D
<
bool
>
&
rhsMask
,
const
int
solverType
=
LinearSolver
::
DIRECT_SOLVE
,
bool
parallel
=
false
);
/** Destructor */
~
PoissonSolver
();
/** parser */
bool
modify
(
int
narg
,
char
**
arg
);
/** initialize */
void
initialize
(
void
);
/** compute_rhs */
void
compute_rhs
(
const
FIELDS
&
fields
,
FIELDS
&
rhs
);
/** solve */
bool
solve
(
FIELDS
&
fields
,
FIELDS
&
rhs
);
// rhs is a return value
bool
solve
(
DENS_MAT
&
field
,
const
DENS_MAT
&
rhs
);
// rhs is input
/** greens function */
void
greens_function
(
const
int
I
,
VECTOR
&
inv_stiffness_I
)
const
{
solver_
->
greens_function
(
I
,
inv_stiffness_I
);
}
/** access to penalty coefficient */
double
penalty_coefficient
()
const
{
return
solver_
->
penalty_coefficient
();
}
/** set tolerance for underlying solver */
void
set_tolerance
(
double
tol
)
{
solverTol_
=
tol
;
}
/** set max iterations for underlying solver */
void
set_max_iterations
(
int
maxIter
)
{
solverMaxIter_
=
maxIter
;
}
protected:
/** set atomic charges from electron model */
void
set_charges
(
FIELDS
&
fields
);
/** Pointer to ATC_Tranfer */
ATC_Coupling
*
atc_
;
/** Pointer to FE_Engine */
const
FE_Engine
*
feEngine_
;
/** Pointer to PrescribedDataManager */
const
PrescribedDataManager
*
prescribedDataMgr_
;
/** Pointer to FE_Engine */
const
PhysicsModel
*
physicsModel_
;
/** field to solve for */
FieldName
fieldName_
;
/** number of nodes */
int
nNodes_
;
/** degree-of-freedom */
int
dof_
;
/** righthand side vector */
Array2D
<
bool
>
rhsMask_
;
/** linear Poisson equation */
bool
linear_
;
/** solver */
LinearSolver
*
solver_
;
NonLinearSolver
*
solverNL_
;
PhysicsModelTangentOperator
*
tangent_
;
int
solverType_
;
double
solverTol_
;
int
solverMaxIter_
;
/** source quadrature */
IntegrationDomainType
integrationType_
;
/** stiffness matrix */
SPAR_MAT
stiffness_
;
/** use owned grid */
bool
useOwnGrid_
;
/** run solve in parallel */
bool
parallel_
;
};
}
// namespace ATC
#endif
Event Timeline
Log In to Comment