Implementation of the DDR scheme for the magnetostatic problem.
More...
Implementation of the DDR scheme for the magnetostatic problem.
Implementation of the serendipity DDR scheme for the magnetostatic problem.
◆ ForcingTermType [1/2]
◆ ForcingTermType [2/2]
◆ PermeabilityType [1/2]
◆ PermeabilityType [2/2]
◆ SolutionCurlType [1/2]
◆ SolutionCurlType [2/2]
◆ SolutionPotentialType [1/2]
◆ SolutionPotentialType [2/2]
◆ SystemMatrixType [1/2]
◆ SystemMatrixType [2/2]
◆ assembleLinearSystem()
Assemble the global system
- Parameters
-
| f | Forcing term |
| mu | Permeability |
| u | Boundary condition |
◆ computeNorms()
| std::vector< double > Magnetostatics::computeNorms |
( |
const std::vector< Eigen::VectorXd > & |
list_dofs | ) |
const |
Compute the discrete Hcurl \times Hdiv norm of a family of vectors representing the dofs.
- Parameters
-
| list_dofs | The list of vectors representing the dofs |
◆ dimensionSpace()
| size_t HArDCore3D::Magnetostatics::dimensionSpace |
( |
| ) |
const |
|
inline |
Returns the dimension of the magnetic field + potential space.
◆ Magnetostatics()
| Magnetostatics::Magnetostatics |
( |
const DDRCore & |
ddrcore, |
|
|
bool |
use_threads, |
|
|
std::ostream & |
output = std::cout |
|
) |
| |
Constructor.
- Parameters
-
| ddrcore | Core for the DDR space sequence |
| use_threads | True for parallel execution, false for sequential execution |
| output | Output stream to print status messages |
◆ nbSCDOFs()
| size_t HArDCore3D::Magnetostatics::nbSCDOFs |
( |
| ) |
const |
|
inline |
Returns the number of statically condensed DOFs (here, the cell magnetic field DOFs)
◆ scMatrix()
Returns the static condensation recovery operator.
◆ scVector()
| Eigen::VectorXd& HArDCore3D::Magnetostatics::scVector |
( |
| ) |
|
|
inline |
Returns the static condensation rhs.
◆ sizeSystem()
| size_t HArDCore3D::Magnetostatics::sizeSystem |
( |
| ) |
const |
|
inline |
Returns the size of the statically condensed system.
◆ stabilizationParameter() [1/2]
| double& HArDCore3D::Magnetostatics::stabilizationParameter |
( |
| ) |
|
|
inline |
Returns the stabilization parameter.
◆ stabilizationParameter() [2/2]
| const double& HArDCore3D::Magnetostatics::stabilizationParameter |
( |
| ) |
const |
|
inline |
Returns the stabilization parameter.
◆ sxCurl()
| const SXCurl& HArDCore3D::Magnetostatics::sxCurl |
( |
| ) |
const |
|
inline |
◆ sxDiv()
| const SXDiv& HArDCore3D::Magnetostatics::sxDiv |
( |
| ) |
const |
|
inline |
◆ systemMatrix() [1/2]
Returns the linear system matrix.
◆ systemMatrix() [2/2]
Returns the linear system matrix.
◆ systemVector() [1/2]
| Eigen::VectorXd& HArDCore3D::Magnetostatics::systemVector |
( |
| ) |
|
|
inline |
Returns the linear system right-hand side vector.
◆ systemVector() [2/2]
| const Eigen::VectorXd& HArDCore3D::Magnetostatics::systemVector |
( |
| ) |
const |
|
inline |
Returns the linear system right-hand side vector.
◆ xCurl()
| const XCurl& HArDCore3D::Magnetostatics::xCurl |
( |
| ) |
const |
|
inline |
◆ xDiv()
| const XDiv& HArDCore3D::Magnetostatics::xDiv |
( |
| ) |
const |
|
inline |
◆ constant_f [1/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d::Zero();
}
◆ constant_f [2/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d::Zero();
}
◆ constant_mu [1/2]
◆ constant_mu [2/2]
◆ constant_sigma [1/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d::Zero();
}
◆ constant_sigma [2/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d::Zero();
}
◆ constant_u [1/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d(1., 2., 3.);
}
◆ constant_u [2/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d(1., 2., 3.);
}
◆ linear_f [1/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d::Zero();
}
◆ linear_f [2/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d::Zero();
}
◆ linear_mu [1/2]
◆ linear_mu [2/2]
◆ linear_sigma [1/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d(-3., 2., 1.);
}
◆ linear_sigma [2/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d(-3., 2., 1.);
}
◆ linear_u [1/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d(
x(0) + x(1) + x(2),
2.*(x(0)-x(1)+x(2)),
-x(0) - x(1) + x(2)
);
}
◆ linear_u [2/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d(
x(0) + x(1) + x(2),
2.*(x(0)-x(1)+x(2)),
-x(0) - x(1) + x(2)
);
}
◆ PI [1/2]
| const double HArDCore3D::PI = boost::math::constants::pi<double>() |
|
static |
◆ PI [2/2]
| const double HArDCore3D::PI = boost::math::constants::pi<double>() |
|
static |
◆ trigonometric_f [1/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return 3. * std::pow(
PI, 2) * Eigen::Vector3d(
cos(
PI*x(0)) * sin(
PI*x(1)) * sin(
PI*x(2)),
-2. * sin(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2)),
sin(
PI*x(0)) * sin(
PI*x(1)) * cos(
PI*x(2))
);
}
static const double PI
Definition: ddr-magnetostatics.hpp:186
◆ trigonometric_f [2/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return 3. * std::pow(
PI, 2) * Eigen::Vector3d(
cos(
PI*x(0)) * sin(
PI*x(1)) * sin(
PI*x(2)),
-2. * sin(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2)),
sin(
PI*x(0)) * sin(
PI*x(1)) * cos(
PI*x(2))
);
}
◆ trigonometric_mu [1/2]
◆ trigonometric_mu [2/2]
◆ trigonometric_sigma [1/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return 3. *
PI * Eigen::Vector3d(
sin(
PI*x(0)) * cos(
PI*x(1)) * cos(
PI*x(2)),
0.,
-cos(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2))
);
}
◆ trigonometric_sigma [2/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return 3. *
PI * Eigen::Vector3d(
sin(
PI*x(0)) * cos(
PI*x(1)) * cos(
PI*x(2)),
0.,
-cos(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2))
);
}
◆ trigonometric_u [1/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d(
cos(
PI*x(0)) * sin(
PI*x(1)) * sin(
PI*x(2)),
-2. * sin(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2)),
sin(
PI*x(0)) * sin(
PI*x(1)) * cos(
PI*x(2))
);
}
◆ trigonometric_u [2/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d(
cos(
PI*x(0)) * sin(
PI*x(1)) * sin(
PI*x(2)),
-2. * sin(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2)),
sin(
PI*x(0)) * sin(
PI*x(1)) * cos(
PI*x(2))
);
}
◆ variable_permeability_f [1/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
double a = 3 *
PI / std::pow(1. + x(0) + x(1) + x(2), 2);
double b = 3 * std::pow(
PI, 2) / (1. + x(0) + x(1) + x(2));
double dy_sigmax = -a * sin(
PI*x(0)) * cos(
PI*x(1)) * cos(
PI*x(2))
- b * sin(
PI*x(0)) * sin(
PI*x(1)) * cos(
PI*x(2));
double dz_sigmax = -a * sin(
PI*x(0)) * cos(
PI*x(1)) * cos(
PI*x(2))
- b * sin(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2));
;
double dx_sigmaz = a * cos(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2))
+ b * sin(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2));
double dy_sigmaz = a * cos(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2))
+ b * cos(
PI*x(0)) * sin(
PI*x(1)) * sin(
PI*x(2));
return Eigen::Vector3d(
dy_sigmaz,
dz_sigmax - dx_sigmaz,
-dy_sigmax
);
}
◆ variable_permeability_f [2/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
double a = 3 *
PI / std::pow(1. + x(0) + x(1) + x(2), 2);
double b = 3 * std::pow(
PI, 2) / (1. + x(0) + x(1) + x(2));
double dy_sigmax = -a * sin(
PI*x(0)) * cos(
PI*x(1)) * cos(
PI*x(2))
- b * sin(
PI*x(0)) * sin(
PI*x(1)) * cos(
PI*x(2));
double dz_sigmax = -a * sin(
PI*x(0)) * cos(
PI*x(1)) * cos(
PI*x(2))
- b * sin(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2));
;
double dx_sigmaz = a * cos(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2))
+ b * sin(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2));
double dy_sigmaz = a * cos(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2))
+ b * cos(
PI*x(0)) * sin(
PI*x(1)) * sin(
PI*x(2));
return Eigen::Vector3d(
dy_sigmaz,
dz_sigmax - dx_sigmaz,
-dy_sigmax
);
}
◆ variable_permeability_mu [1/2]
Initial value:= Magnetostatics::PermeabilityType(
[](
const Cell & T,
const Eigen::Vector3d & x) ->
double {
return 1. + x(0) + x(1) + x(2); },
[](
const Cell & T) ->
size_t {
return 1; }
)
MeshND::Cell< 2 > Cell
Definition: Mesh2D.hpp:13
◆ variable_permeability_mu [2/2]
Initial value:= Magnetostatics::PermeabilityType(
[](
const Cell & T,
const Eigen::Vector3d & x) ->
double {
return 1. + x(0) + x(1) + x(2); },
[](
const Cell & T) ->
size_t {
return 1; }
)
◆ variable_permeability_sigma [1/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return 3 *
PI / (1. + x(0) + x(1) + x(2))
* Eigen::Vector3d(
sin(
PI*x(0)) * cos(
PI*x(1)) * cos(
PI*x(2)),
0.,
-cos(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2))
);
}
◆ variable_permeability_sigma [2/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return 3 *
PI / (1. + x(0) + x(1) + x(2))
* Eigen::Vector3d(
sin(
PI*x(0)) * cos(
PI*x(1)) * cos(
PI*x(2)),
0.,
-cos(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2))
);
}
◆ variable_permeability_u [1/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d(
cos(
PI*x(0)) * sin(
PI*x(1)) * sin(
PI*x(2)),
-2. * sin(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2)),
sin(
PI*x(0)) * sin(
PI*x(1)) * cos(
PI*x(2))
);
}
◆ variable_permeability_u [2/2]
Initial value:= [](const Eigen::Vector3d & x) -> Eigen::Vector3d {
return Eigen::Vector3d(
cos(
PI*x(0)) * sin(
PI*x(1)) * sin(
PI*x(2)),
-2. * sin(
PI*x(0)) * cos(
PI*x(1)) * sin(
PI*x(2)),
sin(
PI*x(0)) * sin(
PI*x(1)) * cos(
PI*x(2))
);
}