15 for (
int i = 0; i < T.n_children(); i++)
16 this->
children.push_back(std::make_unique<Tree>(T.child(i)));
26 for (
int i = 0; i < T.n_children(); i++)
27 this->
children.push_back(std::make_unique<Tree>(T.child(i)));
35 if (!T.has_children() || max_depth <= 0)
43 for (
int i = 0; i < T.n_children(); i++)
44 flag = this->
child(i).
merge(T.child(i), max_depth) || flag;
50 std::ostream &ost,
const Tree &T)
55 for (
int i = 0; i < T.n_children(); i++)
56 ost << T.child(i) <<
", ";
86 for (
int i = 0; i < n; i++)
87 children.push_back(std::make_unique<Tree>());
96 const Eigen::MatrixXd &cp,
97 const Eigen::MatrixXd &uv);
101 const std::vector<basis::ElementBases> &bases,
102 const std::vector<basis::ElementBases> &gbases,
103 const Eigen::VectorXd &u);
105 std::tuple<bool, int, Tree>
is_valid(
107 const std::vector<basis::ElementBases> &bases,
108 const std::vector<basis::ElementBases> &gbases,
109 const Eigen::VectorXd &u,
110 const double threshold = 0);
114 const std::vector<basis::ElementBases> &bases,
115 const std::vector<basis::ElementBases> &gbases,
116 const Eigen::VectorXd &u1,
117 const Eigen::VectorXd &u2,
118 const double threshold = 0);
122 const std::vector<basis::ElementBases> &bases,
123 const std::vector<basis::ElementBases> &gbases,
124 const Eigen::VectorXd &u1,
125 const Eigen::VectorXd &u2,
126 double precision = .25);
129 Eigen::MatrixXd
extract_nodes(
const int dim,
const std::vector<basis::ElementBases> &bases,
const std::vector<basis::ElementBases> &gbases,
const Eigen::VectorXd &u,
int order,
int n_elem = -1);
Stores the basis functions for a given element in a mesh (facet in 2d, cell in 3d).
std::vector< std::unique_ptr< Tree > > children
bool merge(const Tree &T, int max_depth=2)
const Tree & child(int i) const
bool has_children() const
Tree operator=(const Tree &T)
friend std::ostream & operator<<(std::ostream &ost, const Tree &T)
std::tuple< bool, int, Tree > is_valid(const int dim, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const Eigen::VectorXd &u, const double threshold)
Eigen::VectorXd robust_evaluate_jacobian(const int order, const Eigen::MatrixXd &cp, const Eigen::MatrixXd &uv)
std::tuple< double, int, double, Tree > max_time_step(const int dim, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const Eigen::VectorXd &u1, const Eigen::VectorXd &u2, double precision)
std::vector< int > count_invalid(const int dim, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const Eigen::VectorXd &u)
Eigen::MatrixXd extract_nodes(const int dim, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const Eigen::VectorXd &u, int order, int n_elem)