28#include "b2ppconfig.h"
29#include "model/b2element.H"
31#include "utils/b2linear_algebra.H"
99 virtual Node*
next(std::vector<Element*>& connectivity) = 0;
111 std::vector<int> internal_node_id_list;
115 using node_iterator = std::unique_ptr<NodeIterator>;
116 using node_connectivity_iterator = std::unique_ptr<NodeConnectivityIterator>;
117 using element_iterator = std::unique_ptr<ElementIterator>;
182 virtual node_connectivity_iterator get_node_connectivity_iterator();
191 template <
typename T>
218 virtual void get_slave_node(std::vector<std::pair<const Node*, const Node*>>& slave_node) = 0;
249 const Node* node, std::vector<AdjacentElement>& adjacent_elements) {
251 std::pair<int, const Node* const*>(1, &node), adjacent_elements);
269 std::pair<int, const Node* const*> node_list,
270 std::vector<AdjacentElement>& adjacent_elements) = 0;
289 const Element* e,
double dist, std::vector<Element*>& element_list) = 0;
294 virtual void set_dof(
const b2linalg::Matrix<double, b2linalg::Mrectangle_constref>& dof) = 0;
296 void set_dof(
const b2linalg::Vector<double, b2linalg::Vdense_constref>& dof) {
297 set_dof(b2linalg::Matrix<double, b2linalg::Mrectangle_constref>(dof));
302 virtual void set_dof(
303 const b2linalg::Matrix<b2000::csda<double>, b2linalg::Mrectangle_constref>& dof) = 0;
305 void set_dof(
const b2linalg::Vector<b2000::csda<double>, b2linalg::Vdense_constref>& dof) {
307 set_dof(b2linalg::Matrix<b2000::csda<double>, b2linalg::Mrectangle_constref>::null);
309 set_dof(b2linalg::Matrix<b2000::csda<double>, b2linalg::Mrectangle_constref>(dof));
315 virtual void set_dof(
316 const b2linalg::Matrix<std::complex<double>, b2linalg::Mrectangle_constref>& dof) = 0;
318 void set_dof(
const b2linalg::Vector<std::complex<double>, b2linalg::Vdense_constref>& dof) {
320 set_dof(b2linalg::Matrix<std::complex<double>, b2linalg::Mrectangle_constref>::null);
322 set_dof(b2linalg::Matrix<std::complex<double>, b2linalg::Mrectangle_constref>(dof));
328 virtual const b2linalg::Matrix<double, b2linalg::Mrectangle_constref>& get_dof(
double) = 0;
330 virtual const b2linalg::Matrix<b2000::csda<double>, b2linalg::Mrectangle_constref>& get_dof(
331 b2000::csda<double>) = 0;
333 virtual const b2linalg::Matrix<std::complex<double>, b2linalg::Mrectangle_constref>& get_dof(
334 std::complex<double>) = 0;
336 virtual const std::pair<std::map<std::string, size_t>, b2linalg::Index>& get_dof_field() {
338 static std::pair<std::map<std::string, size_t>, b2linalg::Index> null;
380 const std::string& name_id,
381 const b2linalg::Vector<double, b2linalg::Vdense_constref>& dof) = 0;
393 const std::string& name_id,
394 const b2linalg::Vector<b2000::csda<double>, b2linalg::Vdense_constref>& dof) = 0;
406 const std::string& name_id,
407 const b2linalg::Vector<std::complex<double>, b2linalg::Vdense_constref>& dof) = 0;
433 b2linalg::Matrix<double>& parent_nodes_internal_coor) {
454 Domain& parent_domain,
const Node& node, b2linalg::Vector<double>& parent_internal_coor) {
468 return domain_element_container_;
478 for (
Element* element = i->next(); element != 0; element = i->next()) {
479 domain_element_container_.push_back(std::ref(*element));
488 std::vector<std::reference_wrapper<Element>> domain_element_container_{};
492inline const double* Domain::get_node_local_referential<double>(
const Node& node)
const {
497inline const b2000::csda<double>* Domain::get_node_local_referential<b2000::csda<double>>(
498 const Node& node)
const {
499 return get_node_local_referential_csda(node);
#define THROW
Definition b2exception.H:198
virtual Element * next()=0
virtual void set_case(Case &case_)=0
virtual void save_state(const std::string &state_id)=0
virtual void save_field(const std::string &name_id, const b2linalg::Vector< b2000::csda< double >, b2linalg::Vdense_constref > &dof)=0
const T * get_node_local_referential(const Node &node) const
Definition b2domain.H:192
virtual void get_elements_of_same_type_near(const Element *e, double dist, std::vector< Element * > &element_list)=0
virtual Element * get_parent_element_and_nodes_mapping(Domain &parent_domain, const Element &element, b2linalg::Matrix< double > &parent_nodes_internal_coor)
Definition b2domain.H:431
virtual const double * get_node_local_referential_double(const Node &node) const =0
virtual void get_adjacent_elements(std::pair< int, const Node *const * > node_list, std::vector< AdjacentElement > &adjacent_elements)=0
virtual size_t get_number_of_dof() const =0
virtual void set_model(Model &model)=0
virtual size_t get_number_of_elements() const =0
virtual void get_adjacent_elements(const Node *node, std::vector< AdjacentElement > &adjacent_elements)
Definition b2domain.H:248
virtual element_iterator get_element_iterator()=0
virtual node_iterator get_node_iterator()=0
virtual bool have_temperature() const =0
virtual void save_field(const std::string &name_id, const b2linalg::Vector< double, b2linalg::Vdense_constref > &dof)=0
virtual size_t get_number_of_elements_and_subelements() const =0
virtual const std::vector< Element::VariableInfo > get_value_info() const =0
std::vector< std::reference_wrapper< Element > > & GetElementContainer()
Return private member domain_element_container_ holding all elements of this domain.
Definition b2domain.H:465
virtual const b2000::csda< double > * get_node_local_referential_csda(const Node &node) const =0
virtual void save_field(const std::string &name_id, const b2linalg::Vector< std::complex< double >, b2linalg::Vdense_constref > &dof)=0
virtual void get_slave_node(std::vector< std::pair< const Node *, const Node * > > &slave_node)=0
void FillElementContainer()
Fill domain_element_container_ with all elements of this domain.
Definition b2domain.H:476
virtual size_t get_number_of_nodes() const =0
virtual Element * get_parent_element_mapping(Domain &parent_domain, const Node &node, b2linalg::Vector< double > &parent_internal_coor)
Definition b2domain.H:453
virtual b2linalg::SparseMatrixConnectivityType get_dof_connectivity_type() const =0
virtual Node * get_node(const std::string &node_name)
Definition b2domain.C:20
virtual void load_state(const std::string &state_id)=0
virtual void set_subcase_id(const int subcase_id_)=0
virtual Element * get_element(const std::string &element_name)
Definition b2domain.C:29
Defines the complete interface for Element instances (C++ representations of Finite Elements).
Definition b2element.H:156
Definition b2object.H:340
Definition b2object.H:456
Contains the base classes for implementing Finite Elements.
Definition b2boundary_condition.H:32
GenericException< UnimplementedError_name > UnimplementedError
Definition b2exception.H:314
Definition b2domain.H:105
Element * element
Definition b2domain.H:107