10 #pragma GCC diagnostic push
11 #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
13 #pragma GCC diagnostic pop
39 { std::cout <<
" reindexed\n"; }
41 double xmin =
minNodes(Nodes::IDX_X);
42 double xmax =
maxNodes(Nodes::IDX_X);
44 double ymin =
minNodes(Nodes::IDX_Y);
45 double ymax =
maxNodes(Nodes::IDX_Y);
47 double zmin =
minNodes(Nodes::IDX_Z);
48 double zmax =
maxNodes(Nodes::IDX_Z);
50 l = Eigen::Vector3d(xmax - xmin, ymax - ymin, zmax - zmin);
51 c = Eigen::Vector3d(0.5 * (xmax + xmin), 0.5 * (ymax + ymin), 0.5 * (zmax + zmin));
58 long_axis = Nodes::IDX_X;
60 long_axis = Nodes::IDX_Z;
65 long_axis = Nodes::IDX_Y;
67 long_axis = Nodes::IDX_Z;
72 std::for_each(
tet.begin(),
tet.end(),
75 paramTetra[te.idxPrm].volume += te.calc_vol();
78 std::plus<>(), [](
const Tetra::prm ®ion){ return region.volume; });
82 std::for_each(
tet.begin(),
tet.end(),
85 for (int i = 0; i < 3; ++i)
87 for (int j = i + 1; j < 4; ++j)
88 { edges.push_back(std::minmax(te.ind[i], te.ind[j])); }
91 std::sort(EXEC_POL,
edges.begin(),
edges.end());
92 auto last = std::unique(EXEC_POL,
edges.begin(),
edges.end());
94 edges.shrink_to_fit();
98 inline int getNbNodes(
void)
const {
return node.size(); }
107 inline const Eigen::Vector3d
getNode_p(
const int i)
const {
return node[i].p; }
110 inline const Eigen::Vector3d
getNode_u(
const int i)
const {
return node[i].get_u(Nodes::NEXT); }
113 inline const Eigen::Vector3d
getNode_v(
const int i)
const {
return node[i].get_v(Nodes::NEXT); }
116 inline double getProj_ep(
const int i)
const {
return node[i].proj_ep();}
119 inline double getProj_eq(
const int i)
const {
return node[i].proj_eq();}
123 { node[i].d[Nodes::CURRENT].u = val; }
129 void infos(
void)
const;
134 std::for_each(EXEC_POL, node.begin(), node.end(),
139 inline void updateNode(
int i,
double vp,
double vq,
const double dt)
140 { node[i].make_evol(vp*gamma0, vq*gamma0, dt); }
145 std::for_each(EXEC_POL, node.begin(), node.end(),
159 std::vector<Facette::Fac>
fac;
162 std::vector<Tetra::Tet>
tet;
170 double readSol(
bool VERBOSE ,
171 const std::string fileName );
177 std::for_each(node.begin(),node.end(),[&mySets](
Nodes::Node &n)
179 n.d[Nodes::CURRENT].u = mySets.getMagnetization(n.p);
180 n.d[Nodes::NEXT].u = n.d[Nodes::CURRENT].u;
181 n.d[Nodes::NEXT].phi = 0.;
182 n.d[Nodes::NEXT].phiv = 0.;
191 int region = -1 )
const;
196 double min_dot_product = std::transform_reduce(EXEC_POL, edges.begin(), edges.end(), 1.0,
197 [](
double a,
double b){ return std::min(a, b); },
198 [
this](
const std::pair<int, int> edge)
200 Eigen::Vector3d m1 = getNode_u(edge.first);
201 Eigen::Vector3d m2 = getNode_u(edge.second);
204 return std::acos(min_dot_product);
208 void savesol(
const int precision ,
209 const std::string fileName ,
210 std::string
const &metadata )
const;
214 bool savesol(
const int precision ,
215 const std::string fileName ,
216 std::string
const &metadata ,
217 std::vector<double>
const &val )
const;
221 inline void set(
const int i ,
222 std::function<
void(
Nodes::Node &,
const double)> what_to_set ,
224 { what_to_set(node[i], val); }
234 std::vector<std::pair<int, int>>
edges;
244 void checkMeshFile(
Settings const &mySets );
247 void readNodes(
Settings const &mySets );
250 void readTetraedrons(
Settings const &mySets );
253 void readTriangles(
Settings const &mySets );
256 void readMesh(
Settings const &mySets );
259 double doOnNodes(
const double init_val ,
261 std::function<
bool(
double,
double)> whatToDo )
const;
266 return doOnNodes(__DBL_MAX__, coord, [](
double a,
double b) {
return a < b; });
272 return doOnNodes(__DBL_MIN__, coord, [](
double a,
double b) {
return a > b; });
const Eigen::Vector3d getNode_p(const int i) const
Definition: mesh.h:107
void indexReorder()
Definition: mesh.cpp:46
Eigen::Vector3d l
Definition: mesh.h:153
const Eigen::Vector3d getNode_u(const int i) const
Definition: mesh.h:110
void readMesh(Settings const &mySets)
Definition: read.cpp:12
int getNbFacs(void) const
Definition: mesh.h:101
Eigen::Vector3d c
Definition: mesh.h:150
mesh(Settings &mySets)
Definition: mesh.h:32
void set_node_zero_v(const int i)
Definition: mesh.h:126
void init_distrib(Settings const &mySets)
Definition: mesh.h:175
double max_angle() const
Definition: mesh.h:194
int getNbNodes(void) const
Definition: mesh.h:98
std::vector< Nodes::Node > node
Definition: mesh.h:229
double minNodes(const Nodes::index coord) const
Definition: mesh.h:264
double getProj_ep(const int i) const
Definition: mesh.h:116
std::vector< Tetra::Tet > tet
Definition: mesh.h:162
double maxNodes(const Nodes::index coord) const
Definition: mesh.h:270
int getNbTets(void) const
Definition: mesh.h:104
void set_node_u0(const int i, Eigen::Vector3d const &val)
Definition: mesh.h:122
void sortNodes(Nodes::index long_axis)
Definition: mesh.cpp:95
std::vector< Facette::Fac > fac
Definition: mesh.h:159
void setBasis(const double r)
Definition: mesh.h:132
void evolution(void)
Definition: mesh.h:143
const Eigen::Vector3d getNode_v(const int i) const
Definition: mesh.h:113
std::vector< std::pair< int, int > > edges
Definition: mesh.h:234
std::vector< int > node_index
Definition: mesh.h:241
std::vector< Tetra::prm > & paramTetra
Definition: mesh.h:165
void updateNode(int i, double vp, double vq, const double dt)
Definition: mesh.h:139
double getProj_eq(const int i) const
Definition: mesh.h:119
double vol
Definition: mesh.h:156
void set(const int i, std::function< void(Nodes::Node &, const double)> what_to_set, const double val)
Definition: mesh.h:221
Container for all the settings provided by the user, with conversions to/from YAML.
Definition: feellgoodSettings.h:63
int verbose
Definition: feellgoodSettings.h:125
contains namespace Facette header containing Fac class, and some constants and a less_than operator t...
many settings to give some parameters to the solver, boundary conditions for the problem,...
constexpr double a[N][NPI]
Definition: facette.h:28
index
Definition: node.h:34
header to define struct Node
namespace Tetra header containing Tet class, some constants, and integrales