7 bool delta(
int i,
int j)
9 return (i == j) ? true :
false;
27 assert(gradi.rows() == data.
da.size());
28 for (
int k = 0; k < gradi.rows(); ++k)
32 res += epsilon * gradi.row(k).dot(gradj.row(k)) * data.
da(k);
34 return Eigen::Matrix<double, 1, 1>::Constant(res);
38 const Eigen::MatrixXd &mat,
39 Eigen::MatrixXd &stress,
40 Eigen::MatrixXd &result)
const
48 const Eigen::MatrixXd &local_pts,
49 const Eigen::MatrixXd &displacement,
50 Eigen::MatrixXd &tensor)
const
52 const int dim = local_pts.cols();
53 tensor.resize(local_pts.rows(), dim * dim);
54 assert(displacement.cols() == 1);
56 for (
long p = 0; p < local_pts.rows(); ++p)
58 for (
int i = 0, idx = 0; i < dim; i++)
59 for (
int j = 0; j < dim; j++)
61 tensor(p, idx) = delta(i, j);
69 std::map<std::string, ParamFunc> res;
81 const std::vector<basis::ElementBases> &bases,
82 const std::vector<basis::ElementBases> &gbases,
85 const Eigen::MatrixXd &solution)
90 Eigen::MatrixXd energy = 0.5 * solution.transpose() * (K * solution);
91 assert(energy.size() == 1);
std::unique_ptr< MatrixCache > cache
ElementAssemblyValues vals
std::string permittivity() const
Caches basis evaluation and geometric mapping at every element.
double compute_stored_energy(const bool is_volume, const int n_basis, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const AssemblyValsCache &cache, const double t, const Eigen::MatrixXd &solution)
void compute_stress_grad_multiply_mat(const OptAssemblerData &data, const Eigen::MatrixXd &mat, Eigen::MatrixXd &stress, Eigen::MatrixXd &result) const override
void compute_stiffness_value(const double t, const assembler::ElementAssemblyValues &vals, const Eigen::MatrixXd &local_pts, const Eigen::MatrixXd &displacement, Eigen::MatrixXd &tensor) const override
Eigen::Matrix< double, Eigen::Dynamic, 1, 0, 9, 1 > assemble(const LinearAssemblerData &data) const override
computes local stiffness matrix (1x1) for bases i,j where i,j is passed in through data ie integral o...
void add_multimaterial(const int index, const json ¶ms, const Units &units) override
std::map< std::string, ParamFunc > parameters() const override
stores per element basis values at given quadrature points and geometric mapping
std::vector< AssemblyValues > basis_values
void add_multimaterial(const int index, const json ¶ms, const std::string &unit_type)
const ElementAssemblyValues & vals
stores the evaluation for that element
const QuadratureVector & da
contains both the quadrature weight and the change of metric in the integral
const int i
first local order
const int j
second local order
const Eigen::MatrixXd & grad_u_i
Eigen::Matrix< double, 1, Eigen::Dynamic, Eigen::RowMajor, 1, 3 > RowVectorNd
Eigen::SparseMatrix< double, Eigen::ColMajor > StiffnessMatrix