[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] (no subject)
From: |
Tetsuo Koyama |
Subject: |
[Getfem-commits] (no subject) |
Date: |
Wed, 6 May 2020 19:59:33 -0400 (EDT) |
branch: devel-tetsuo-xml
commit 82022783d16eabdccbb00b8f23d1292513f2bf5e
Author: Tetsuo Koyama <address@hidden>
AuthorDate: Wed Apr 29 22:08:04 2020 +0000
:recycle: select_vtk_mapping_type
---
src/getfem_export.cc | 116 ++++++++++++++++++++++++++-------------------------
1 file changed, 60 insertions(+), 56 deletions(-)
diff --git a/src/getfem_export.cc b/src/getfem_export.cc
index fe9cd6c..8915a8e 100644
--- a/src/getfem_export.cc
+++ b/src/getfem_export.cc
@@ -124,6 +124,63 @@ namespace getfem
return vtktypes[t];
}
+
+ /* try to check if a quad or hexahedric cell is "rectangular" and oriented
+ along the axes */
+ template<typename C> static bool check_voxel(const C& c) {
+ scalar_type h[3];
+ unsigned N = c[0].size();
+ if (c.size() != (1U << N)) return false;
+ const base_node P0 = c[0];
+ h[0] = c[1][0] - P0[0];
+ h[1] = c[2][0] - P0[0];
+ if (c.size() != 4) h[2] = c[4][0] - P0[0];
+ for (unsigned i=1; i < c.size(); ++i) {
+ const base_node d = c[i] - P0;
+ for (unsigned j=0; j < N; ++j)
+ if (gmm::abs(d[j]) > 1e-7*h[j] && gmm::abs(d[j] - h[j]) > 1e-7*h[j])
+ return false;
+ }
+ return true;
+ }
+
+
+ vtk_mapping_type select_vtk_mapping_type(mesh m, size_type cv, size_type
dim, size_type nbd) {
+ vtk_mapping_type t = NO_VTK_MAPPING;
+ switch (dim) {
+ case 0: t = N1_TO_VTK_VERTEX; break;
+ case 1:
+ if (nbd == 2) t = N2_TO_VTK_LINE;
+ else if (nbd == 3) t = N3_TO_VTK_QUADRATIC_EDGE;
+ break;
+ case 2:
+ if (nbd == 3) t = N3_TO_VTK_TRIANGLE;
+ else if (nbd == 4)
+ t = check_voxel(m.points_of_convex(cv)) ? N4_TO_VTK_PIXEL
+ : N4_TO_VTK_QUAD;
+ else if (nbd == 6) t = N6_TO_VTK_QUADRATIC_TRIANGLE;
+ else if (nbd == 8) t = N8_TO_VTK_QUADRATIC_QUAD;
+ else if (nbd == 9) t = N9_TO_VTK_BIQUADRATIC_QUAD;
+ break;
+ case 3:
+ if (nbd == 4) t = N4_TO_VTK_TETRA;
+ else if (nbd == 10) t = N10_TO_VTK_QUADRATIC_TETRA;
+ else if (nbd == 8)
+ t = check_voxel(m.points_of_convex(cv)) ? N8_TO_VTK_VOXEL
+ : N8_TO_VTK_HEXAHEDRON;
+ else if (nbd == 20) t = N20_TO_VTK_QUADRATIC_HEXAHEDRON;
+ else if (nbd == 27) t = N27_TO_VTK_TRIQUADRATIC_HEXAHEDRON;
+ else if (nbd == 5) t = N5_TO_VTK_PYRAMID;
+ else if (nbd == 13) t = N13_TO_VTK_QUADRATIC_PYRAMID;
+ else if (nbd == 14) t = N14_TO_VTK_QUADRATIC_PYRAMID;
+ else if (nbd == 6) t = N6_TO_VTK_WEDGE;
+ else if (nbd == 15) t = N15_TO_VTK_QUADRATIC_WEDGE;
+ else if (nbd == 18) t = N18_TO_VTK_BIQUADRATIC_QUADRATIC_WEDGE;
+ break;
+ }
+ return t;
+ }
+
vtk_export::vtk_export(std::ostream &os_, bool ascii_)
: os(os_), ascii(ascii_) { init(); }
@@ -173,26 +230,6 @@ namespace getfem
}
- /* try to check if a quad or hexahedric cell is "rectangular" and oriented
- along the axes */
- template<typename C> static bool check_voxel(const C& c) {
- scalar_type h[3];
- unsigned N = c[0].size();
- if (c.size() != (1U << N)) return false;
- const base_node P0 = c[0];
- h[0] = c[1][0] - P0[0];
- h[1] = c[2][0] - P0[0];
- if (c.size() != 4) h[2] = c[4][0] - P0[0];
- for (unsigned i=1; i < c.size(); ++i) {
- const base_node d = c[i] - P0;
- for (unsigned j=0; j < N; ++j)
- if (gmm::abs(d[j]) > 1e-7*h[j] && gmm::abs(d[j] - h[j]) > 1e-7*h[j])
- return false;
- }
- return true;
- }
-
-
void vtk_export::exporting(const stored_mesh_slice& sl) {
psl = &sl; dim_ = dim_type(sl.dim());
GMM_ASSERT1(psl->dim() <= 3, "attempt to export a " << int(dim_)
@@ -517,59 +554,26 @@ namespace getfem
classical_fem(pgt, degree, true));
}
}
- /* find out which dof will be exported to VTK */
+ /* find out which dof will be exported to VTU */
const mesh &m = pmf->linked_mesh();
pmf_mapping_type.resize(pmf->convex_index().last_true() + 1, unsigned(-1));
pmf_dof_used.sup(0, pmf->nb_basic_dof());
for (dal::bv_visitor cv(pmf->convex_index()); !cv.finished(); ++cv) {
- vtk_mapping_type t = NO_VTK_MAPPING;
+ size_type dim = pmf->fem_of_element(cv)->dim();
size_type nbd = pmf->fem_of_element(cv)->nb_dof(cv);
- switch (pmf->fem_of_element(cv)->dim()) {
- case 0: t = N1_TO_VTK_VERTEX; break;
- case 1:
- if (nbd == 2) t = N2_TO_VTK_LINE;
- else if (nbd == 3) t = N3_TO_VTK_QUADRATIC_EDGE;
- break;
- case 2:
- if (nbd == 3) t = N3_TO_VTK_TRIANGLE;
- else if (nbd == 4)
- t = check_voxel(m.points_of_convex(cv)) ? N4_TO_VTK_PIXEL
- : N4_TO_VTK_QUAD;
- else if (nbd == 6) t = N6_TO_VTK_QUADRATIC_TRIANGLE;
- else if (nbd == 8) t = N8_TO_VTK_QUADRATIC_QUAD;
- else if (nbd == 9) t = N9_TO_VTK_BIQUADRATIC_QUAD;
- break;
- case 3:
- if (nbd == 4) t = N4_TO_VTK_TETRA;
- else if (nbd == 10) t = N10_TO_VTK_QUADRATIC_TETRA;
- else if (nbd == 8)
- t = check_voxel(m.points_of_convex(cv)) ? N8_TO_VTK_VOXEL
- : N8_TO_VTK_HEXAHEDRON;
- else if (nbd == 20) t = N20_TO_VTK_QUADRATIC_HEXAHEDRON;
- else if (nbd == 27) t = N27_TO_VTK_TRIQUADRATIC_HEXAHEDRON;
- else if (nbd == 5) t = N5_TO_VTK_PYRAMID;
- else if (nbd == 13) t = N13_TO_VTK_QUADRATIC_PYRAMID;
- else if (nbd == 14) t = N14_TO_VTK_QUADRATIC_PYRAMID;
- else if (nbd == 6) t = N6_TO_VTK_WEDGE;
- else if (nbd == 15) t = N15_TO_VTK_QUADRATIC_WEDGE;
- else if (nbd == 18) t = N18_TO_VTK_BIQUADRATIC_QUADRATIC_WEDGE;
- break;
- }
+ vtk_mapping_type t = select_vtk_mapping_type(m, cv, dim, nbd);
GMM_ASSERT1(t != -1, "semi internal error. Could not map " <<
name_of_fem(pmf->fem_of_element(cv))
<< " to a VTK cell type");
pmf_mapping_type[cv] = t;
const std::vector<unsigned> &dmap = select_vtk_dof_mapping(t);
- //cout << "nbd = " << nbd << ", t = " << t << ", dmap = "<<dmap << "\n";
GMM_ASSERT1(dmap.size() <= pmf->nb_basic_dof_of_element(cv),
"inconsistency in vtk_dof_mapping");
for (unsigned i=0; i < dmap.size(); ++i)
pmf_dof_used.add(pmf->ind_basic_dof_of_element(cv)[dmap[i]]);
}
- // cout << "mf.nb_dof = " << mf.nb_dof() << ", pmf->nb_dof="
- // << pmf->nb_dof() << ", dof_used = " << pmf_dof_used.card() << "\n";
}
void vtu_export::check_header() {
- [Getfem-commits] [getfem-commits] branch devel-tetsuo-xml created (now 89d42bd), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject),
Tetsuo Koyama <=
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06