5#include <spdlog/fmt/fmt.h>
17 for (
int i = 0; i < T.n_children(); i++)
18 this->
children.push_back(std::make_unique<Tree>(T.child(i)));
28 for (
int i = 0; i < T.n_children(); i++)
29 this->
children.push_back(std::make_unique<Tree>(T.child(i)));
37 if (!T.has_children() || max_depth <= 0)
45 for (
int i = 0; i < T.n_children(); i++)
46 flag = this->
child(i).
merge(T.child(i), max_depth) || flag;
52 std::ostream &ost,
const Tree &T)
57 for (
int i = 0; i < T.n_children(); i++)
58 ost << T.child(i) <<
", ";
88 for (
int i = 0; i < n; i++)
89 children.push_back(std::make_unique<Tree>());
98 const Eigen::MatrixXd &cp,
99 const Eigen::MatrixXd &uv);
103 const std::vector<basis::ElementBases> &bases,
104 const std::vector<basis::ElementBases> &gbases,
105 const Eigen::VectorXd &u,
106 const unsigned max_iter = 1'000'000);
108 std::tuple<bool, int, Tree>
is_valid(
110 const std::vector<basis::ElementBases> &bases,
111 const std::vector<basis::ElementBases> &gbases,
112 const Eigen::VectorXd &u,
113 const double threshold = 0,
114 const unsigned max_iter = 1'000'000);
118 const std::vector<basis::ElementBases> &bases,
119 const std::vector<basis::ElementBases> &gbases,
120 const Eigen::VectorXd &u1,
121 const Eigen::VectorXd &u2,
122 double precision = .25,
123 double threshold = 0,
124 const unsigned max_iter = 1'000'000);
127 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);
131struct fmt::formatter<
polyfem::utils::Tree> : fmt::formatter<fmt::string_view>
135 std::ostringstream oss;
137 return fmt::formatter<fmt::string_view>::format(oss.str(), ctx);
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, const unsigned max_iter)
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, double threshold, const unsigned max_iter)
Eigen::VectorXd robust_evaluate_jacobian(const int order, const Eigen::MatrixXd &cp, const Eigen::MatrixXd &uv)
std::vector< int > count_invalid(const int dim, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const Eigen::VectorXd &u, const unsigned max_iter)
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)