[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:35 -0400 (EDT) |
branch: devel-tetsuo-xml
commit fb1c6b3e6909571c8725ffb78f0bbbff4a16e2f2
Author: Tetsuo Koyama <address@hidden>
AuthorDate: Tue May 5 23:19:29 2020 +0000
:heavy_plus_sign: VTU export
---
src/getfem/getfem_export.h | 13 ++++---------
src/getfem_export.cc | 20 ++++++++++++++------
2 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/src/getfem/getfem_export.h b/src/getfem/getfem_export.h
index fd8c967..cbe97ae 100644
--- a/src/getfem/getfem_export.h
+++ b/src/getfem/getfem_export.h
@@ -324,6 +324,8 @@ namespace getfem {
public:
vtu_export(const std::string& fname, bool ascii_= false);
vtu_export(std::ostream &os_, bool ascii_ = false);
+ ~vtu_export(); /* the file is not complete until the destructor
+ has been executed */
void exporting(const mesh& m);
void exporting(const mesh_fem& mf);
void write_mesh(bool only_mesh = true);
@@ -419,17 +421,14 @@ namespace getfem {
GMM_ASSERT1(gmm::vect_size(U) == nb_val*Q,
"inconsistency in the size of the dataset: "
<< gmm::vect_size(U) << " != " << nb_val << "*" << Q);
- os << "<Piece NumberOfPoints=\"" << pmf_dof_used.card() << "\"
NumberOfCells=\"" << pmf->convex_index().card() << "\">\n";
if (Q == 1) {
- os << "<PointData Scalars=\"" << remove_spaces(name) << "\">\n";
- os << "<DataArray Name=\"" << remove_spaces(name) << "\"
type=\"Float32\" format=\"ascii\">\n";
+ os << "<DataArray type=\"Float32\" Name=\"" << remove_spaces(name) <<
"\" format=\"ascii\">\n";
for (size_type i=0; i < nb_val; ++i) {
write_val(float(U[i]));
}
} else if (Q <= 3) {
- os << "<PointData Vectors=\"" << remove_spaces(name) << "\">\n";
os << "<DataArray type=\"Float32\" Name=\"" << remove_spaces(name);
- os << "\" NumberOfComponents=\"" << Q << "\" format=\"ascii\">";
+ os << "\" NumberOfComponents=\"3\" format=\"ascii\">\n";
for (size_type i=0; i < nb_val; ++i) {
write_vec(U.begin() + i*Q, Q);
}
@@ -437,7 +436,6 @@ namespace getfem {
/* tensors : coef are supposed to be stored in FORTRAN order
in the VTU file, they are written with C (row major) order
*/
- os << "<PointData Tensors=\"" << remove_spaces(name) << "\">\n";
os << "<DataArray type=\"Float32\" Name=\"" << remove_spaces(name);
os << "\" NumberOfComponents=\"" << Q*Q << "\" format=\"ascii\">";
for (size_type i=0; i < nb_val; ++i) {
@@ -446,9 +444,6 @@ namespace getfem {
} else GMM_ASSERT1(false, "vtu does not accept vectors of dimension > 3");
write_separ();
os << "</DataArray>\n";
- os << "</PointData>\n";
- os << "</Piece>\n";
- check_footer();
}
/** @brief A (quite large) class for exportation of data to IBM OpenDX.
diff --git a/src/getfem_export.cc b/src/getfem_export.cc
index 801d062..c92a1f1 100644
--- a/src/getfem_export.cc
+++ b/src/getfem_export.cc
@@ -464,6 +464,10 @@ namespace getfem
init();
}
+ vtu_export::~vtu_export(){
+ check_footer();
+ }
+
void vtu_export::init() {
strcpy(header, "Exported by getfem++");
state = EMPTY;
@@ -472,8 +476,9 @@ namespace getfem
void vtu_export::switch_to_point_data() {
if (state != IN_POINT_DATA) {
+ os << "<PointData>\n";
state = IN_POINT_DATA;
- }
+ };
}
void vtu_export::switch_to_cell_data() {
@@ -558,12 +563,16 @@ namespace getfem
void vtu_export::check_header() {
if (state >= HEADER_WRITTEN) return;
+ os << "<?xml version=\"1.0\"?>\n";
os << "<VTKFile type=\"UnstructuredGrid\" version=\"0.1\"
byte_order=\"BigEndian\">\n";
+ os << "<!--" << header << "-->\n";
state = HEADER_WRITTEN;
}
void vtu_export::check_footer() {
if (state >= FOOTER_WRITTEN) return;
+ if (state == IN_POINT_DATA) os << "</PointData>\n";
+ os << "</Piece>\n";
os << "</UnstructuredGrid>\n";
os << "</VTKFile>\n";
state = FOOTER_WRITTEN;
@@ -583,7 +592,7 @@ namespace getfem
os << "<UnstructuredGrid>\n";
os << "<Piece NumberOfPoints=\"" << pmf_dof_used.card() << "\"
NumberOfCells=\"" << pmf->convex_index().card() << "\">\n";
os << "<Points>\n";
- os << "<DataArray type=\"Float32\" NumberOfComponents=\"3\"
Format=\"ascii\">\n";
+ os << "<DataArray type=\"Float32\" Name=\"Points\"
NumberOfComponents=\"3\" format=\"ascii\">\n";
std::vector<int> dofmap(pmf->nb_dof());
int cnt = 0;
for (dal::bv_visitor d(pmf_dof_used); !d.finished(); ++d) {
@@ -598,7 +607,7 @@ namespace getfem
os << "</DataArray>\n";
os << "</Points>\n";
os << "<Cells>\n";
- os << "<DataArray type=\"Int32\" Name=\"connectivity\"
Format=\"ascii\">\n";
+ os << "<DataArray type=\"Int64\" Name=\"connectivity\"
format=\"ascii\">\n";
for (dal::bv_visitor cv(pmf->convex_index()); !cv.finished(); ++cv) {
const std::vector<unsigned> &dmap =
select_vtk_dof_mapping(pmf_mapping_type[cv]);
for (size_type i=0; i < dmap.size(); ++i)
@@ -606,7 +615,7 @@ namespace getfem
write_separ();
}
os << "</DataArray>\n";
- os << "<DataArray type=\"Int32\" Name=\"offsets\" Format=\"ascii\">\n";
+ os << "<DataArray type=\"Int64\" Name=\"offsets\" format=\"ascii\">\n";
cnt = 0;
for (dal::bv_visitor cv(pmf->convex_index()); !cv.finished(); ++cv) {
const std::vector<unsigned> &dmap =
select_vtk_dof_mapping(pmf_mapping_type[cv]);
@@ -615,14 +624,13 @@ namespace getfem
write_separ();
}
os << "</DataArray>\n";
- os << "<DataArray type=\"Int32\" Name=\"types\" Format=\"ascii\">\n";
+ os << "<DataArray type=\"Int64\" Name=\"types\" format=\"ascii\">\n";
for (dal::bv_visitor cv(pmf->convex_index()); !cv.finished(); ++cv) {
write_val(select_vtk_type(pmf_mapping_type[cv]));
write_separ();
}
os << "</DataArray>\n";
os << "</Cells>\n";
- os << "</Piece>\n";
state = STRUCTURE_WRITTEN;
}
- [Getfem-commits] (no subject), (continued)
- [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
- [Getfem-commits] (no subject),
Tetsuo Koyama <=
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06
- [Getfem-commits] (no subject), Tetsuo Koyama, 2020/05/06