From 9c22fac6ce5c2990edeac73c7159974d876c1120 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Thu, 6 Jun 2024 16:18:13 +0200 Subject: [PATCH 01/18] Allow to specify attribute name when reading meshtag --- cpp/dolfinx/io/XDMFFile.cpp | 37 +++++++++++++++++++++++++++++++++---- cpp/dolfinx/io/XDMFFile.h | 10 ++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/cpp/dolfinx/io/XDMFFile.cpp b/cpp/dolfinx/io/XDMFFile.cpp index 50141b84f81..297233eeb2e 100644 --- a/cpp/dolfinx/io/XDMFFile.cpp +++ b/cpp/dolfinx/io/XDMFFile.cpp @@ -322,8 +322,9 @@ template void XDMFFile::write_meshtags(const mesh::MeshTags&, /// @endcond //----------------------------------------------------------------------------- mesh::MeshTags -XDMFFile::read_meshtags(const mesh::Mesh& mesh, std::string name, - std::string xpath) +XDMFFile::read_meshtags(const mesh::Mesh& mesh, const std::string name, + const std::string attribute_name, + const std::string xpath) { spdlog::info("XDMF read meshtags ({})", name); pugi::xml_node node = _xml_doc->select_node(xpath.c_str()).node(); @@ -336,8 +337,29 @@ XDMFFile::read_meshtags(const mesh::Mesh& mesh, std::string name, const auto [entities, eshape] = read_topology_data(name, xpath); - pugi::xml_node values_data_node - = grid_node.child("Attribute").child("DataItem"); + pugi::xml_node attribute_node = grid_node.child("Attribute"); + pugi::xml_node values_data_node = attribute_node.child("DataItem"); + if (not attribute_name.empty()) + { + bool found = false; + for (; attribute_node; + attribute_node = attribute_node.next_sibling("Attribute")) + { + pugi::xml_attribute hint; + pugi::xml_attribute name = attribute_node.attribute("Name", hint); + if (std::string(name.value()) == attribute_name) + { + values_data_node = attribute_node.child("DataItem"); + found = true; + break; + } + } + if (not found) + { + throw std::runtime_error("Attribute with name '" + attribute_name + + "' not found."); + } + } const std::vector values = xdmf_utils::get_dataset( _comm.comm(), values_data_node, _h5_id); @@ -376,6 +398,13 @@ XDMFFile::read_meshtags(const mesh::Mesh& mesh, std::string name, return meshtags; } //----------------------------------------------------------------------------- +mesh::MeshTags +XDMFFile::read_meshtags(const mesh::Mesh& mesh, std::string name, + std::string xpath) +{ + return read_meshtags(mesh, name, "", xpath); +} +//----------------------------------------------------------------------------- std::pair XDMFFile::read_cell_type(std::string grid_name, std::string xpath) { diff --git a/cpp/dolfinx/io/XDMFFile.h b/cpp/dolfinx/io/XDMFFile.h index 35104bc6a7c..a4440188b84 100644 --- a/cpp/dolfinx/io/XDMFFile.h +++ b/cpp/dolfinx/io/XDMFFile.h @@ -164,6 +164,16 @@ class XDMFFile const mesh::Geometry& x, std::string geometry_xpath, std::string xpath = "/Xdmf/Domain"); + /// Read MeshTags by name + /// @param[in] mesh The Mesh that the data is defined on + /// @param[in] name + /// @param[in] attribute_name The name of the attribute to read + /// @param[in] xpath XPath where MeshTags Grid is stored in file + mesh::MeshTags + read_meshtags(const mesh::Mesh& mesh, const std::string name, + const std::string attribute_name, + const std::string xpath = "/Xdmf/Domain"); + /// Read MeshTags /// @param[in] mesh The Mesh that the data is defined on /// @param[in] name From 4efecce9dbdbf57e4a5d3d90ba2a2bf7112bfb60 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Thu, 6 Jun 2024 16:47:29 +0200 Subject: [PATCH 02/18] Add python interface --- python/dolfinx/io/utils.py | 4 ++-- python/dolfinx/wrappers/io.cpp | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/python/dolfinx/io/utils.py b/python/dolfinx/io/utils.py index a479f898998..3eec40c58c3 100644 --- a/python/dolfinx/io/utils.py +++ b/python/dolfinx/io/utils.py @@ -276,8 +276,8 @@ def read_mesh( ) return Mesh(msh, domain) - def read_meshtags(self, mesh, name, xpath="/Xdmf/Domain"): - mt = super().read_meshtags(mesh._cpp_object, name, xpath) + def read_meshtags(self, mesh, name, attribute_name="", xpath="/Xdmf/Domain"): + mt = super().read_meshtags(mesh._cpp_object, name, attribute_name, xpath) return MeshTags(mt) diff --git a/python/dolfinx/wrappers/io.cpp b/python/dolfinx/wrappers/io.cpp index ed7ae36816b..c2367f6fcf3 100644 --- a/python/dolfinx/wrappers/io.cpp +++ b/python/dolfinx/wrappers/io.cpp @@ -310,6 +310,9 @@ void io(nb::module_& m) nb::arg("name") = "mesh", nb::arg("xpath") = "/Xdmf/Domain") .def("read_meshtags", &dolfinx::io::XDMFFile::read_meshtags, nb::arg("mesh"), nb::arg("name"), nb::arg("xpath") = "/Xdmf/Domain") + .def("read_meshtags", &dolfinx::io::XDMFFile::read_meshtags, + nb::arg("mesh"), nb::arg("name"), nb::arg("attribute_name"), + nb::arg("xpath") = "/Xdmf/Domain") .def("write_information", &dolfinx::io::XDMFFile::write_information, nb::arg("name"), nb::arg("value"), nb::arg("xpath") = "/Xdmf/Domain") .def("read_information", &dolfinx::io::XDMFFile::read_information, From 361a202f803ec3a3b0d23e782ce2a516cc24aecd Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Fri, 7 Jun 2024 09:55:10 +0200 Subject: [PATCH 03/18] Disambiguate functions --- cpp/dolfinx/io/XDMFFile.cpp | 9 ++++----- cpp/dolfinx/io/XDMFFile.h | 6 +++--- python/dolfinx/wrappers/io.cpp | 21 +++++++++++++-------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/cpp/dolfinx/io/XDMFFile.cpp b/cpp/dolfinx/io/XDMFFile.cpp index 297233eeb2e..aa025e14294 100644 --- a/cpp/dolfinx/io/XDMFFile.cpp +++ b/cpp/dolfinx/io/XDMFFile.cpp @@ -321,10 +321,9 @@ template void XDMFFile::write_meshtags(const mesh::MeshTags&, std::string, std::string); /// @endcond //----------------------------------------------------------------------------- -mesh::MeshTags -XDMFFile::read_meshtags(const mesh::Mesh& mesh, const std::string name, - const std::string attribute_name, - const std::string xpath) +mesh::MeshTags XDMFFile::read_meshtags_by_name( + const mesh::Mesh& mesh, const std::string name, + const std::string attribute_name, const std::string xpath) { spdlog::info("XDMF read meshtags ({})", name); pugi::xml_node node = _xml_doc->select_node(xpath.c_str()).node(); @@ -402,7 +401,7 @@ mesh::MeshTags XDMFFile::read_meshtags(const mesh::Mesh& mesh, std::string name, std::string xpath) { - return read_meshtags(mesh, name, "", xpath); + return read_meshtags_by_name(mesh, name, "", xpath); } //----------------------------------------------------------------------------- std::pair XDMFFile::read_cell_type(std::string grid_name, diff --git a/cpp/dolfinx/io/XDMFFile.h b/cpp/dolfinx/io/XDMFFile.h index a4440188b84..1e445b390bc 100644 --- a/cpp/dolfinx/io/XDMFFile.h +++ b/cpp/dolfinx/io/XDMFFile.h @@ -170,9 +170,9 @@ class XDMFFile /// @param[in] attribute_name The name of the attribute to read /// @param[in] xpath XPath where MeshTags Grid is stored in file mesh::MeshTags - read_meshtags(const mesh::Mesh& mesh, const std::string name, - const std::string attribute_name, - const std::string xpath = "/Xdmf/Domain"); + read_meshtags_by_name(const mesh::Mesh& mesh, const std::string name, + const std::string attribute_name, + const std::string xpath = "/Xdmf/Domain"); /// Read MeshTags /// @param[in] mesh The Mesh that the data is defined on diff --git a/python/dolfinx/wrappers/io.cpp b/python/dolfinx/wrappers/io.cpp index c2367f6fcf3..9bcc6d7b843 100644 --- a/python/dolfinx/wrappers/io.cpp +++ b/python/dolfinx/wrappers/io.cpp @@ -142,8 +142,9 @@ void declare_vtx_writer(nb::module_& m, std::string type) nb::arg("policy") = dolfinx::io::VTXMeshPolicy::update) .def("close", [](dolfinx::io::VTXWriter& self) { self.close(); }) .def( - "write", [](dolfinx::io::VTXWriter& self, double t) - { self.write(t); }, nb::arg("t")); + "write", + [](dolfinx::io::VTXWriter& self, double t) { self.write(t); }, + nb::arg("t")); } { @@ -182,8 +183,9 @@ void declare_vtx_writer(nb::module_& m, std::string type) nb::arg("policy") = dolfinx::io::FidesMeshPolicy::update) .def("close", [](dolfinx::io::FidesWriter& self) { self.close(); }) .def( - "write", [](dolfinx::io::FidesWriter& self, double t) - { self.write(t); }, nb::arg("t")); + "write", + [](dolfinx::io::FidesWriter& self, double t) { self.write(t); }, + nb::arg("t")); } #endif } @@ -310,16 +312,19 @@ void io(nb::module_& m) nb::arg("name") = "mesh", nb::arg("xpath") = "/Xdmf/Domain") .def("read_meshtags", &dolfinx::io::XDMFFile::read_meshtags, nb::arg("mesh"), nb::arg("name"), nb::arg("xpath") = "/Xdmf/Domain") - .def("read_meshtags", &dolfinx::io::XDMFFile::read_meshtags, - nb::arg("mesh"), nb::arg("name"), nb::arg("attribute_name"), + .def("read_meshtags_by_name", + &dolfinx::io::XDMFFile::read_meshtags_by_name, nb::arg("mesh"), + nb::arg("name"), nb::arg("attribute_name"), nb::arg("xpath") = "/Xdmf/Domain") .def("write_information", &dolfinx::io::XDMFFile::write_information, nb::arg("name"), nb::arg("value"), nb::arg("xpath") = "/Xdmf/Domain") .def("read_information", &dolfinx::io::XDMFFile::read_information, nb::arg("name"), nb::arg("xpath") = "/Xdmf/Domain") .def_prop_ro( - "comm", [](dolfinx::io::XDMFFile& self) - { return MPICommWrapper(self.comm()); }, nb::keep_alive<0, 1>()); + "comm", + [](dolfinx::io::XDMFFile& self) + { return MPICommWrapper(self.comm()); }, + nb::keep_alive<0, 1>()); xdmf_real_fn(xdmf_file); xdmf_real_fn(xdmf_file); From 983af855455503f93afaece047a3a5fa0a544be9 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Fri, 7 Jun 2024 11:26:07 +0200 Subject: [PATCH 04/18] Fix Python wrapper --- cpp/dolfinx/io/XDMFFile.cpp | 7 ++++--- cpp/dolfinx/io/XDMFFile.h | 6 +++--- python/dolfinx/io/utils.py | 7 +++++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/cpp/dolfinx/io/XDMFFile.cpp b/cpp/dolfinx/io/XDMFFile.cpp index aa025e14294..7c0043b6744 100644 --- a/cpp/dolfinx/io/XDMFFile.cpp +++ b/cpp/dolfinx/io/XDMFFile.cpp @@ -321,9 +321,10 @@ template void XDMFFile::write_meshtags(const mesh::MeshTags&, std::string, std::string); /// @endcond //----------------------------------------------------------------------------- -mesh::MeshTags XDMFFile::read_meshtags_by_name( - const mesh::Mesh& mesh, const std::string name, - const std::string attribute_name, const std::string xpath) +mesh::MeshTags +XDMFFile::read_meshtags_by_name(const mesh::Mesh& mesh, + std::string name, std::string attribute_name, + std::string xpath) { spdlog::info("XDMF read meshtags ({})", name); pugi::xml_node node = _xml_doc->select_node(xpath.c_str()).node(); diff --git a/cpp/dolfinx/io/XDMFFile.h b/cpp/dolfinx/io/XDMFFile.h index 1e445b390bc..b2fd9a07a6f 100644 --- a/cpp/dolfinx/io/XDMFFile.h +++ b/cpp/dolfinx/io/XDMFFile.h @@ -170,9 +170,9 @@ class XDMFFile /// @param[in] attribute_name The name of the attribute to read /// @param[in] xpath XPath where MeshTags Grid is stored in file mesh::MeshTags - read_meshtags_by_name(const mesh::Mesh& mesh, const std::string name, - const std::string attribute_name, - const std::string xpath = "/Xdmf/Domain"); + read_meshtags_by_name(const mesh::Mesh& mesh, std::string name, + std::string attribute_name, + std::string xpath = "/Xdmf/Domain"); /// Read MeshTags /// @param[in] mesh The Mesh that the data is defined on diff --git a/python/dolfinx/io/utils.py b/python/dolfinx/io/utils.py index 3eec40c58c3..c1e2612813c 100644 --- a/python/dolfinx/io/utils.py +++ b/python/dolfinx/io/utils.py @@ -276,10 +276,13 @@ def read_mesh( ) return Mesh(msh, domain) - def read_meshtags(self, mesh, name, attribute_name="", xpath="/Xdmf/Domain"): - mt = super().read_meshtags(mesh._cpp_object, name, attribute_name, xpath) + def read_meshtags_by_name(self, mesh, name, attribute_name, xpath="/Xdmf/Domain"): + mt = super().read_meshtags_by_name(mesh._cpp_object, name, attribute_name, xpath) return MeshTags(mt) + def read_meshtags(self, mesh, name, xpath="/Xdmf/Domain"): + return self.read_meshtags_by_name(mesh, name, "", xpath) + def distribute_entity_data( mesh: Mesh, entity_dim: int, entities: npt.NDArray[np.int64], values: np.ndarray From 9c31b9037072c95903c9739f4ac176b3bf657d44 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Fri, 7 Jun 2024 13:21:22 +0200 Subject: [PATCH 05/18] Applying review changes --- cpp/dolfinx/io/XDMFFile.cpp | 14 +++++++------- cpp/dolfinx/io/XDMFFile.h | 6 +++--- python/dolfinx/io/utils.py | 13 +++++++------ python/dolfinx/wrappers/io.cpp | 6 +++--- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/cpp/dolfinx/io/XDMFFile.cpp b/cpp/dolfinx/io/XDMFFile.cpp index 7c0043b6744..7515103c5e2 100644 --- a/cpp/dolfinx/io/XDMFFile.cpp +++ b/cpp/dolfinx/io/XDMFFile.cpp @@ -322,9 +322,9 @@ template void XDMFFile::write_meshtags(const mesh::MeshTags&, /// @endcond //----------------------------------------------------------------------------- mesh::MeshTags -XDMFFile::read_meshtags_by_name(const mesh::Mesh& mesh, - std::string name, std::string attribute_name, - std::string xpath) +XDMFFile::read_meshtags_by_label(const mesh::Mesh& mesh, + std::string name, std::string attribute_label, + std::string xpath) { spdlog::info("XDMF read meshtags ({})", name); pugi::xml_node node = _xml_doc->select_node(xpath.c_str()).node(); @@ -339,7 +339,7 @@ XDMFFile::read_meshtags_by_name(const mesh::Mesh& mesh, pugi::xml_node attribute_node = grid_node.child("Attribute"); pugi::xml_node values_data_node = attribute_node.child("DataItem"); - if (not attribute_name.empty()) + if (not attribute_label.empty()) { bool found = false; for (; attribute_node; @@ -347,7 +347,7 @@ XDMFFile::read_meshtags_by_name(const mesh::Mesh& mesh, { pugi::xml_attribute hint; pugi::xml_attribute name = attribute_node.attribute("Name", hint); - if (std::string(name.value()) == attribute_name) + if (std::string(name.value()) == attribute_label) { values_data_node = attribute_node.child("DataItem"); found = true; @@ -356,7 +356,7 @@ XDMFFile::read_meshtags_by_name(const mesh::Mesh& mesh, } if (not found) { - throw std::runtime_error("Attribute with name '" + attribute_name + throw std::runtime_error("Attribute with name '" + attribute_label + "' not found."); } } @@ -402,7 +402,7 @@ mesh::MeshTags XDMFFile::read_meshtags(const mesh::Mesh& mesh, std::string name, std::string xpath) { - return read_meshtags_by_name(mesh, name, "", xpath); + return read_meshtags_by_label(mesh, name, "", xpath); } //----------------------------------------------------------------------------- std::pair XDMFFile::read_cell_type(std::string grid_name, diff --git a/cpp/dolfinx/io/XDMFFile.h b/cpp/dolfinx/io/XDMFFile.h index b2fd9a07a6f..445b11f1e3a 100644 --- a/cpp/dolfinx/io/XDMFFile.h +++ b/cpp/dolfinx/io/XDMFFile.h @@ -167,11 +167,11 @@ class XDMFFile /// Read MeshTags by name /// @param[in] mesh The Mesh that the data is defined on /// @param[in] name - /// @param[in] attribute_name The name of the attribute to read + /// @param[in] attribute_label The name of the attribute to read /// @param[in] xpath XPath where MeshTags Grid is stored in file mesh::MeshTags - read_meshtags_by_name(const mesh::Mesh& mesh, std::string name, - std::string attribute_name, + read_meshtags_by_label(const mesh::Mesh& mesh, std::string name, + std::string attribute_label, std::string xpath = "/Xdmf/Domain"); /// Read MeshTags diff --git a/python/dolfinx/io/utils.py b/python/dolfinx/io/utils.py index c1e2612813c..86b18734ade 100644 --- a/python/dolfinx/io/utils.py +++ b/python/dolfinx/io/utils.py @@ -276,14 +276,15 @@ def read_mesh( ) return Mesh(msh, domain) - def read_meshtags_by_name(self, mesh, name, attribute_name, xpath="/Xdmf/Domain"): - mt = super().read_meshtags_by_name(mesh._cpp_object, name, attribute_name, xpath) + def read_meshtags(self, mesh, name, attribute_label=None, xpath="/Xdmf/Domain"): + """Read meshtags with a specific name as specified in the xdmf file. If + `attribute_label` is `None`, read the first attribute in the file. + If `attribute_label` is not `None` but no attributes have the provided name, + throw an error. If multiple attributes have the provided name, read the first + one found.""" + mt = super().read_meshtags_by_label(mesh._cpp_object, name, attribute_label, xpath) return MeshTags(mt) - def read_meshtags(self, mesh, name, xpath="/Xdmf/Domain"): - return self.read_meshtags_by_name(mesh, name, "", xpath) - - def distribute_entity_data( mesh: Mesh, entity_dim: int, entities: npt.NDArray[np.int64], values: np.ndarray ) -> tuple[npt.NDArray[np.int64], np.ndarray]: diff --git a/python/dolfinx/wrappers/io.cpp b/python/dolfinx/wrappers/io.cpp index 9bcc6d7b843..0e6f3ce63cb 100644 --- a/python/dolfinx/wrappers/io.cpp +++ b/python/dolfinx/wrappers/io.cpp @@ -312,9 +312,9 @@ void io(nb::module_& m) nb::arg("name") = "mesh", nb::arg("xpath") = "/Xdmf/Domain") .def("read_meshtags", &dolfinx::io::XDMFFile::read_meshtags, nb::arg("mesh"), nb::arg("name"), nb::arg("xpath") = "/Xdmf/Domain") - .def("read_meshtags_by_name", - &dolfinx::io::XDMFFile::read_meshtags_by_name, nb::arg("mesh"), - nb::arg("name"), nb::arg("attribute_name"), + .def("read_meshtags_by_label", + &dolfinx::io::XDMFFile::read_meshtags_by_label, nb::arg("mesh"), + nb::arg("name"), nb::arg("attribute_label"), nb::arg("xpath") = "/Xdmf/Domain") .def("write_information", &dolfinx::io::XDMFFile::write_information, nb::arg("name"), nb::arg("value"), nb::arg("xpath") = "/Xdmf/Domain") From 6950dd099623a15fbbd1cbd575dccd4fcac5ad60 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Fri, 7 Jun 2024 13:27:21 +0200 Subject: [PATCH 06/18] Linting --- python/dolfinx/io/utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/dolfinx/io/utils.py b/python/dolfinx/io/utils.py index 86b18734ade..97463b03c73 100644 --- a/python/dolfinx/io/utils.py +++ b/python/dolfinx/io/utils.py @@ -285,6 +285,7 @@ def read_meshtags(self, mesh, name, attribute_label=None, xpath="/Xdmf/Domain"): mt = super().read_meshtags_by_label(mesh._cpp_object, name, attribute_label, xpath) return MeshTags(mt) + def distribute_entity_data( mesh: Mesh, entity_dim: int, entities: npt.NDArray[np.int64], values: np.ndarray ) -> tuple[npt.NDArray[np.int64], np.ndarray]: From b7fa6c406e9e821aaed1450d2af16983e8134af2 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Fri, 7 Jun 2024 13:55:50 +0200 Subject: [PATCH 07/18] Only one function in the python wrapper and interface --- python/dolfinx/io/utils.py | 4 +++- python/dolfinx/wrappers/io.cpp | 7 ++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/python/dolfinx/io/utils.py b/python/dolfinx/io/utils.py index 97463b03c73..5984353557e 100644 --- a/python/dolfinx/io/utils.py +++ b/python/dolfinx/io/utils.py @@ -282,7 +282,9 @@ def read_meshtags(self, mesh, name, attribute_label=None, xpath="/Xdmf/Domain"): If `attribute_label` is not `None` but no attributes have the provided name, throw an error. If multiple attributes have the provided name, read the first one found.""" - mt = super().read_meshtags_by_label(mesh._cpp_object, name, attribute_label, xpath) + mt = super().read_meshtags( + mesh._cpp_object, name, attribute_label if attribute_label is not None else "", xpath + ) return MeshTags(mt) diff --git a/python/dolfinx/wrappers/io.cpp b/python/dolfinx/wrappers/io.cpp index 0e6f3ce63cb..3208aaf2a45 100644 --- a/python/dolfinx/wrappers/io.cpp +++ b/python/dolfinx/wrappers/io.cpp @@ -310,11 +310,8 @@ void io(nb::module_& m) nb::arg("name") = "mesh", nb::arg("xpath") = "/Xdmf/Domain") .def("read_cell_type", &dolfinx::io::XDMFFile::read_cell_type, nb::arg("name") = "mesh", nb::arg("xpath") = "/Xdmf/Domain") - .def("read_meshtags", &dolfinx::io::XDMFFile::read_meshtags, - nb::arg("mesh"), nb::arg("name"), nb::arg("xpath") = "/Xdmf/Domain") - .def("read_meshtags_by_label", - &dolfinx::io::XDMFFile::read_meshtags_by_label, nb::arg("mesh"), - nb::arg("name"), nb::arg("attribute_label"), + .def("read_meshtags", &dolfinx::io::XDMFFile::read_meshtags_by_label, + nb::arg("mesh"), nb::arg("name"), nb::arg("attribute_label") = "", nb::arg("xpath") = "/Xdmf/Domain") .def("write_information", &dolfinx::io::XDMFFile::write_information, nb::arg("name"), nb::arg("value"), nb::arg("xpath") = "/Xdmf/Domain") From fc188951d87c4beeaf48d1f6f7ae9369483654c0 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Thu, 20 Jun 2024 11:41:21 +0200 Subject: [PATCH 08/18] Applied code review changes --- cpp/dolfinx/io/XDMFFile.cpp | 9 ++++----- cpp/dolfinx/io/XDMFFile.h | 6 ++++-- python/dolfinx/wrappers/io.cpp | 4 ++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/cpp/dolfinx/io/XDMFFile.cpp b/cpp/dolfinx/io/XDMFFile.cpp index 7515103c5e2..64ca1447ce2 100644 --- a/cpp/dolfinx/io/XDMFFile.cpp +++ b/cpp/dolfinx/io/XDMFFile.cpp @@ -339,11 +339,10 @@ XDMFFile::read_meshtags_by_label(const mesh::Mesh& mesh, pugi::xml_node attribute_node = grid_node.child("Attribute"); pugi::xml_node values_data_node = attribute_node.child("DataItem"); - if (not attribute_label.empty()) + if (!attribute_label.empty()) { bool found = false; - for (; attribute_node; - attribute_node = attribute_node.next_sibling("Attribute")) + while ((attribute_node = attribute_node.next_sibling("Attribute"))) { pugi::xml_attribute hint; pugi::xml_attribute name = attribute_node.attribute("Name", hint); @@ -354,7 +353,7 @@ XDMFFile::read_meshtags_by_label(const mesh::Mesh& mesh, break; } } - if (not found) + if (!found) { throw std::runtime_error("Attribute with name '" + attribute_label + "' not found."); @@ -402,7 +401,7 @@ mesh::MeshTags XDMFFile::read_meshtags(const mesh::Mesh& mesh, std::string name, std::string xpath) { - return read_meshtags_by_label(mesh, name, "", xpath); + return read_meshtags_by_label(mesh, name, std::string(), xpath); } //----------------------------------------------------------------------------- std::pair XDMFFile::read_cell_type(std::string grid_name, diff --git a/cpp/dolfinx/io/XDMFFile.h b/cpp/dolfinx/io/XDMFFile.h index 445b11f1e3a..e7a58db0045 100644 --- a/cpp/dolfinx/io/XDMFFile.h +++ b/cpp/dolfinx/io/XDMFFile.h @@ -166,7 +166,8 @@ class XDMFFile /// Read MeshTags by name /// @param[in] mesh The Mesh that the data is defined on - /// @param[in] name + /// @param[in] name Name of the grid node in the xml file. E.g. "Material" in + /// /// @param[in] attribute_label The name of the attribute to read /// @param[in] xpath XPath where MeshTags Grid is stored in file mesh::MeshTags @@ -176,7 +177,8 @@ class XDMFFile /// Read MeshTags /// @param[in] mesh The Mesh that the data is defined on - /// @param[in] name + /// @param[in] name Name of the grid node in the xml file. E.g. "Material" in + /// /// @param[in] xpath XPath where MeshTags Grid is stored in file mesh::MeshTags read_meshtags(const mesh::Mesh& mesh, std::string name, diff --git a/python/dolfinx/wrappers/io.cpp b/python/dolfinx/wrappers/io.cpp index 3208aaf2a45..6956fc6bdd3 100644 --- a/python/dolfinx/wrappers/io.cpp +++ b/python/dolfinx/wrappers/io.cpp @@ -311,8 +311,8 @@ void io(nb::module_& m) .def("read_cell_type", &dolfinx::io::XDMFFile::read_cell_type, nb::arg("name") = "mesh", nb::arg("xpath") = "/Xdmf/Domain") .def("read_meshtags", &dolfinx::io::XDMFFile::read_meshtags_by_label, - nb::arg("mesh"), nb::arg("name"), nb::arg("attribute_label") = "", - nb::arg("xpath") = "/Xdmf/Domain") + nb::arg("mesh"), nb::arg("name"), nb::arg("attribute_label"), + nb::arg("xpath")) .def("write_information", &dolfinx::io::XDMFFile::write_information, nb::arg("name"), nb::arg("value"), nb::arg("xpath") = "/Xdmf/Domain") .def("read_information", &dolfinx::io::XDMFFile::read_information, From 6075ef4ddf165d6c4fd492dd4bbfcf5c94b3a533 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Thu, 20 Jun 2024 11:42:54 +0200 Subject: [PATCH 09/18] Added unit test --- cpp/test/CMakeLists.txt | 10 +++++ cpp/test/mesh/Domain.h5 | Bin 0 -> 24665 bytes cpp/test/mesh/Domain.xdmf | 26 ++++++++++++ cpp/test/mesh/read_named_meshtags.cpp | 55 ++++++++++++++++++++++++++ 4 files changed, 91 insertions(+) create mode 100644 cpp/test/mesh/Domain.h5 create mode 100644 cpp/test/mesh/Domain.xdmf create mode 100644 cpp/test/mesh/read_named_meshtags.cpp diff --git a/cpp/test/CMakeLists.txt b/cpp/test/CMakeLists.txt index 424367a32eb..dc4bd908709 100644 --- a/cpp/test/CMakeLists.txt +++ b/cpp/test/CMakeLists.txt @@ -18,6 +18,13 @@ add_custom_command( COMMENT "Compile poisson.py using FFCx" ) +add_custom_target(test_mesh + COMMAND ln -s -f ${CMAKE_CURRENT_SOURCE_DIR}/mesh/Domain.xdmf . + COMMAND ln -s -f ${CMAKE_CURRENT_SOURCE_DIR}/mesh/Domain.h5 . + VERBATIM + COMMENT "Link mesh file for test" +) + find_package(Catch2 3) if(NOT Catch2_FOUND) @@ -41,6 +48,7 @@ add_executable( common/index_map.cpp common/sort.cpp mesh/distributed_mesh.cpp + mesh/read_named_meshtags.cpp common/CIFailure.cpp ${CMAKE_CURRENT_BINARY_DIR}/poisson.c ) @@ -54,6 +62,8 @@ target_include_directories( unittests PRIVATE $ ) +add_dependencies(unittests test_mesh) + # Add some strict compiler checks only on C++ part (Developer). include(CheckCXXCompilerFlag) check_cxx_compiler_flag("-Wall -Werror -Wextra -pedantic" HAVE_PEDANTIC) diff --git a/cpp/test/mesh/Domain.h5 b/cpp/test/mesh/Domain.h5 new file mode 100644 index 0000000000000000000000000000000000000000..45593bd28e28630b655aa35a61b04f14197564a1 GIT binary patch literal 24665 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 literal 0 HcmV?d00001 diff --git a/cpp/test/mesh/Domain.xdmf b/cpp/test/mesh/Domain.xdmf new file mode 100644 index 00000000000..47c5bc605a9 --- /dev/null +++ b/cpp/test/mesh/Domain.xdmf @@ -0,0 +1,26 @@ + + + + + + Domain.h5:/data0 + + + + Domain.h5:/data1 + + + + Domain.h5:/data2 + + + + Domain.h5:/data3 + + + + Domain.h5:/data4 + + + + diff --git a/cpp/test/mesh/read_named_meshtags.cpp b/cpp/test/mesh/read_named_meshtags.cpp new file mode 100644 index 00000000000..1b08e5f3476 --- /dev/null +++ b/cpp/test/mesh/read_named_meshtags.cpp @@ -0,0 +1,55 @@ +// Copyright (C) 2024 Massimiliano Leoni +// +// This file is part of DOLFINx (https://www.fenicsproject.org) +// +// SPDX-License-Identifier: LGPL-3.0-or-later +// +// Unit tests for reading meshtags by name + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace dolfinx; + +namespace +{ + +void test_read_named_meshtags() +{ + const int mpi_size = dolfinx::MPI::size(MPI_COMM_WORLD); + const int mpi_rank = dolfinx::MPI::rank(MPI_COMM_WORLD); + + const std::string mesh_file = "Domain.xdmf"; + + io::XDMFFile meshFile(MPI_COMM_WORLD, mesh_file, "r"); + auto mesh = std::make_shared>(meshFile.read_mesh( + fem::CoordinateElement(mesh::CellType::tetrahedron, 1), + mesh::GhostMode::none, "Grid")); + + const auto mt_domain = meshFile.read_meshtags_by_label( + *mesh, "Grid", "domain", "/Xdmf/Domain"); + + CHECK(mt_domain.values().front() == 0); + + const auto mt_material = meshFile.read_meshtags_by_label( + *mesh, "Grid", "material", "/Xdmf/Domain"); + + CHECK(mt_material.values().front() == 1); + + CHECK_THROWS(meshFile.read_meshtags_by_label(*mesh, "Grid", "missing")); +} + +} // namespace + +TEST_CASE("Read meshtag by name", "[read_meshtag_by_name]") +{ + CHECK_NOTHROW(test_read_named_meshtags()); +} From fa3a8404797c99b57c23c254b85486fade799124 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Thu, 20 Jun 2024 11:55:40 +0200 Subject: [PATCH 10/18] Fix comments --- cpp/dolfinx/io/XDMFFile.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/dolfinx/io/XDMFFile.h b/cpp/dolfinx/io/XDMFFile.h index e7a58db0045..140258f0f65 100644 --- a/cpp/dolfinx/io/XDMFFile.h +++ b/cpp/dolfinx/io/XDMFFile.h @@ -167,7 +167,7 @@ class XDMFFile /// Read MeshTags by name /// @param[in] mesh The Mesh that the data is defined on /// @param[in] name Name of the grid node in the xml file. E.g. "Material" in - /// + /// Grid Name="Material" GridType="Uniform" /// @param[in] attribute_label The name of the attribute to read /// @param[in] xpath XPath where MeshTags Grid is stored in file mesh::MeshTags @@ -178,7 +178,7 @@ class XDMFFile /// Read MeshTags /// @param[in] mesh The Mesh that the data is defined on /// @param[in] name Name of the grid node in the xml file. E.g. "Material" in - /// + /// Grid Name="Material" GridType="Uniform" /// @param[in] xpath XPath where MeshTags Grid is stored in file mesh::MeshTags read_meshtags(const mesh::Mesh& mesh, std::string name, From 2501a9e7bef9c446b34bf524b89f85e2336c93b0 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Thu, 20 Jun 2024 12:00:39 +0200 Subject: [PATCH 11/18] Removed unused variables --- cpp/test/mesh/read_named_meshtags.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/cpp/test/mesh/read_named_meshtags.cpp b/cpp/test/mesh/read_named_meshtags.cpp index 1b08e5f3476..d551c489309 100644 --- a/cpp/test/mesh/read_named_meshtags.cpp +++ b/cpp/test/mesh/read_named_meshtags.cpp @@ -24,9 +24,6 @@ namespace void test_read_named_meshtags() { - const int mpi_size = dolfinx::MPI::size(MPI_COMM_WORLD); - const int mpi_rank = dolfinx::MPI::rank(MPI_COMM_WORLD); - const std::string mesh_file = "Domain.xdmf"; io::XDMFFile meshFile(MPI_COMM_WORLD, mesh_file, "r"); From 60829f056904b3786a1873ae46a4e44bff721b32 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Wed, 17 Jul 2024 10:00:49 +0200 Subject: [PATCH 12/18] Using ASCII file to circumvent CI issue --- cpp/test/mesh/Domain.h5 | Bin 24665 -> 0 bytes cpp/test/mesh/Domain.xdmf | 2995 ++++++++++++++++++++++++++++++++++++- 2 files changed, 2969 insertions(+), 26 deletions(-) delete mode 100644 cpp/test/mesh/Domain.h5 diff --git a/cpp/test/mesh/Domain.h5 b/cpp/test/mesh/Domain.h5 deleted file mode 100644 index 45593bd28e28630b655aa35a61b04f14197564a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24665 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 diff --git a/cpp/test/mesh/Domain.xdmf b/cpp/test/mesh/Domain.xdmf index 47c5bc605a9..e2df0a72406 100644 --- a/cpp/test/mesh/Domain.xdmf +++ b/cpp/test/mesh/Domain.xdmf @@ -1,26 +1,2969 @@ - - - - - - Domain.h5:/data0 - - - - Domain.h5:/data1 - - - - Domain.h5:/data2 - - - - Domain.h5:/data3 - - - - Domain.h5:/data4 - - - - + +1.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 +1.0000000000000000e+00 1.0000000000000000e+00 5.0000000000000000e-01 +1.0000000000000000e+00 0.0000000000000000e+00 5.0000000000000000e-01 +1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 +0.0000000000000000e+00 1.0000000000000000e+00 5.0000000000000000e-01 +0.0000000000000000e+00 0.0000000000000000e+00 5.0000000000000000e-01 +0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00 +1.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00 +0.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00 +0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00 +1.0000000000000000e+00 0.0000000000000000e+00 1.6666666666666752e-01 +1.0000000000000000e+00 0.0000000000000000e+00 3.3333333333333953e-01 +1.0000000000000000e+00 8.3333333333333104e-01 5.0000000000000000e-01 +1.0000000000000000e+00 6.6666666666666330e-01 5.0000000000000000e-01 +1.0000000000000000e+00 4.9999999999999367e-01 5.0000000000000000e-01 +1.0000000000000000e+00 3.3333333333332116e-01 5.0000000000000000e-01 +1.0000000000000000e+00 1.6666666666665941e-01 5.0000000000000000e-01 +1.0000000000000000e+00 1.0000000000000000e+00 1.6666666666666752e-01 +1.0000000000000000e+00 1.0000000000000000e+00 3.3333333333333953e-01 +1.0000000000000000e+00 1.6666666666666899e-01 0.0000000000000000e+00 +1.0000000000000000e+00 3.3333333333333504e-01 0.0000000000000000e+00 +1.0000000000000000e+00 5.0000000000000677e-01 0.0000000000000000e+00 +1.0000000000000000e+00 6.6666666666667906e-01 0.0000000000000000e+00 +1.0000000000000000e+00 8.3333333333334059e-01 0.0000000000000000e+00 +0.0000000000000000e+00 1.6666666666666899e-01 0.0000000000000000e+00 +0.0000000000000000e+00 3.3333333333333504e-01 0.0000000000000000e+00 +0.0000000000000000e+00 5.0000000000000677e-01 0.0000000000000000e+00 +0.0000000000000000e+00 6.6666666666667906e-01 0.0000000000000000e+00 +0.0000000000000000e+00 8.3333333333334059e-01 0.0000000000000000e+00 +1.6666666666666899e-01 1.0000000000000000e+00 0.0000000000000000e+00 +3.3333333333333504e-01 1.0000000000000000e+00 0.0000000000000000e+00 +5.0000000000000677e-01 1.0000000000000000e+00 0.0000000000000000e+00 +6.6666666666667906e-01 1.0000000000000000e+00 0.0000000000000000e+00 +8.3333333333334059e-01 1.0000000000000000e+00 0.0000000000000000e+00 +1.6666666666666899e-01 0.0000000000000000e+00 0.0000000000000000e+00 +3.3333333333333504e-01 0.0000000000000000e+00 0.0000000000000000e+00 +5.0000000000000677e-01 0.0000000000000000e+00 0.0000000000000000e+00 +6.6666666666667906e-01 0.0000000000000000e+00 0.0000000000000000e+00 +8.3333333333334059e-01 0.0000000000000000e+00 0.0000000000000000e+00 +1.6666666666666902e-01 1.0000000000000000e+00 5.0000000000000000e-01 +3.3333333333333509e-01 1.0000000000000000e+00 5.0000000000000000e-01 +5.0000000000000677e-01 1.0000000000000000e+00 5.0000000000000000e-01 +6.6666666666667906e-01 1.0000000000000000e+00 5.0000000000000000e-01 +8.3333333333334059e-01 1.0000000000000000e+00 5.0000000000000000e-01 +0.0000000000000000e+00 1.0000000000000000e+00 1.6666666666666752e-01 +0.0000000000000000e+00 1.0000000000000000e+00 3.3333333333333953e-01 +1.6666666666666902e-01 0.0000000000000000e+00 5.0000000000000000e-01 +3.3333333333333509e-01 0.0000000000000000e+00 5.0000000000000000e-01 +5.0000000000000677e-01 0.0000000000000000e+00 5.0000000000000000e-01 +6.6666666666667906e-01 0.0000000000000000e+00 5.0000000000000000e-01 +8.3333333333334059e-01 0.0000000000000000e+00 5.0000000000000000e-01 +0.0000000000000000e+00 8.3333333333333104e-01 5.0000000000000000e-01 +0.0000000000000000e+00 6.6666666666666330e-01 5.0000000000000000e-01 +0.0000000000000000e+00 4.9999999999999367e-01 5.0000000000000000e-01 +0.0000000000000000e+00 3.3333333333332116e-01 5.0000000000000000e-01 +0.0000000000000000e+00 1.6666666666665941e-01 5.0000000000000000e-01 +0.0000000000000000e+00 0.0000000000000000e+00 1.6666666666666752e-01 +0.0000000000000000e+00 0.0000000000000000e+00 3.3333333333333953e-01 +1.0000000000000000e+00 0.0000000000000000e+00 6.6666666666666674e-01 +1.0000000000000000e+00 0.0000000000000000e+00 8.3333333333333048e-01 +1.0000000000000000e+00 1.6666666666666899e-01 1.0000000000000000e+00 +1.0000000000000000e+00 3.3333333333333504e-01 1.0000000000000000e+00 +1.0000000000000000e+00 5.0000000000000677e-01 1.0000000000000000e+00 +1.0000000000000000e+00 6.6666666666667906e-01 1.0000000000000000e+00 +1.0000000000000000e+00 8.3333333333334059e-01 1.0000000000000000e+00 +1.0000000000000000e+00 1.0000000000000000e+00 6.6666666666666674e-01 +1.0000000000000000e+00 1.0000000000000000e+00 8.3333333333333048e-01 +1.6666666666666899e-01 1.0000000000000000e+00 1.0000000000000000e+00 +3.3333333333333504e-01 1.0000000000000000e+00 1.0000000000000000e+00 +5.0000000000000677e-01 1.0000000000000000e+00 1.0000000000000000e+00 +6.6666666666667906e-01 1.0000000000000000e+00 1.0000000000000000e+00 +8.3333333333334059e-01 1.0000000000000000e+00 1.0000000000000000e+00 +0.0000000000000000e+00 1.0000000000000000e+00 6.6666666666666674e-01 +0.0000000000000000e+00 1.0000000000000000e+00 8.3333333333333048e-01 +0.0000000000000000e+00 1.6666666666666899e-01 1.0000000000000000e+00 +0.0000000000000000e+00 3.3333333333333504e-01 1.0000000000000000e+00 +0.0000000000000000e+00 5.0000000000000677e-01 1.0000000000000000e+00 +0.0000000000000000e+00 6.6666666666667906e-01 1.0000000000000000e+00 +0.0000000000000000e+00 8.3333333333334059e-01 1.0000000000000000e+00 +1.6666666666666899e-01 0.0000000000000000e+00 1.0000000000000000e+00 +3.3333333333333504e-01 0.0000000000000000e+00 1.0000000000000000e+00 +5.0000000000000677e-01 0.0000000000000000e+00 1.0000000000000000e+00 +6.6666666666667906e-01 0.0000000000000000e+00 1.0000000000000000e+00 +8.3333333333334059e-01 0.0000000000000000e+00 1.0000000000000000e+00 +0.0000000000000000e+00 0.0000000000000000e+00 6.6666666666666674e-01 +0.0000000000000000e+00 0.0000000000000000e+00 8.3333333333333048e-01 +1.0000000000000000e+00 1.3731098223122690e-01 2.9349176567155089e-01 +1.0000000000000000e+00 7.5003052824178695e-01 3.3630149197366960e-01 +1.0000000000000000e+00 4.2279080986988055e-01 3.7037747619659483e-01 +1.0000000000000000e+00 8.0494745175928406e-01 1.7238565191834895e-01 +1.0000000000000000e+00 2.2913827320866656e-01 1.5888830088325273e-01 +1.0000000000000000e+00 6.1689641795400441e-01 1.7359446360320893e-01 +1.0000000000000000e+00 5.7095279586667136e-01 3.4228626896514019e-01 +1.0000000000000000e+00 2.8240354265635109e-01 3.3195367110739776e-01 +1.0000000000000000e+00 4.2292601543180608e-01 1.9258981387932830e-01 +1.3866593562791182e-01 2.2156908339022569e-01 0.0000000000000000e+00 +1.6721457888867894e-01 5.7506093654588153e-01 0.0000000000000000e+00 +2.8508627177050322e-01 8.4654670751672800e-01 0.0000000000000000e+00 +6.0847772519424570e-01 8.4347017170523897e-01 0.0000000000000000e+00 +8.5274753264651182e-01 2.4572592837178478e-01 0.0000000000000000e+00 +8.5321175192100196e-01 4.2682461393745141e-01 0.0000000000000000e+00 +8.5565538168282285e-01 5.8963971901299117e-01 0.0000000000000000e+00 +8.7093111253275191e-01 7.3397030061607327e-01 0.0000000000000000e+00 +2.6192458338799302e-01 1.2946797806821639e-01 0.0000000000000000e+00 +4.0110258383857533e-01 1.4512970152749727e-01 0.0000000000000000e+00 +5.5216292202966089e-01 1.5118665861031658e-01 0.0000000000000000e+00 +7.0728199545170045e-01 1.7708612007033936e-01 0.0000000000000000e+00 +1.5482195006743207e-01 3.9730584261263707e-01 0.0000000000000000e+00 +1.5477450209773386e-01 7.5896875564953969e-01 0.0000000000000000e+00 +4.4071810830045111e-01 8.3426982814086670e-01 0.0000000000000000e+00 +7.8010475107011479e-01 8.5859418703480905e-01 0.0000000000000000e+00 +5.5085680435389750e-01 6.7156326804282329e-01 0.0000000000000000e+00 +3.4864799885348702e-01 6.5879180338921584e-01 0.0000000000000000e+00 +3.2561857339303157e-01 4.5501765012572010e-01 0.0000000000000000e+00 +2.8846291894467496e-01 2.8117061560585982e-01 0.0000000000000000e+00 +7.1094446519551624e-01 3.6330248628543221e-01 0.0000000000000000e+00 +6.9830938199375936e-01 5.3642367950570036e-01 0.0000000000000000e+00 +7.2132787657349362e-01 7.0394771209870044e-01 0.0000000000000000e+00 +4.4396590336101599e-01 3.0463572330209265e-01 0.0000000000000000e+00 +5.8917961619915993e-01 2.9647771642488185e-01 0.0000000000000000e+00 +5.2543374209416049e-01 4.7246351250737573e-01 0.0000000000000000e+00 +8.7150310020183508e-01 1.0000000000000000e+00 1.7201413682767375e-01 +2.5046948865337443e-01 1.0000000000000000e+00 3.3478352869508005e-01 +6.0878781396711779e-01 1.0000000000000000e+00 3.3438699694597579e-01 +1.9323569937099760e-01 1.0000000000000000e+00 1.7157860330353497e-01 +3.7622152655426155e-01 1.0000000000000000e+00 1.6889328608101020e-01 +5.4934235135719423e-01 1.0000000000000000e+00 1.6822076578296732e-01 +7.1626989158779464e-01 1.0000000000000000e+00 1.6892431236435509e-01 +4.3469636156691094e-01 1.0000000000000000e+00 3.3414816078706860e-01 +7.8476115570539118e-01 1.0000000000000000e+00 3.3518505610744431e-01 +2.6715903125496077e-01 8.6359661292432266e-01 5.0000000000000000e-01 +4.1379075799152198e-01 8.4297864989658078e-01 5.0000000000000000e-01 +5.8195605882066481e-01 8.3204834913164338e-01 5.0000000000000000e-01 +7.6192305373408975e-01 8.4549935014856747e-01 5.0000000000000000e-01 +8.4921360729860440e-01 7.1577669885461170e-01 5.0000000000000000e-01 +8.3792293837168508e-01 5.6111224355119316e-01 5.0000000000000000e-01 +8.4616357256983477e-01 3.9302519976526212e-01 5.0000000000000000e-01 +8.5940380414207196e-01 2.2101873831610097e-01 5.0000000000000000e-01 +2.4649258359659215e-01 1.5895468751857278e-01 5.0000000000000000e-01 +5.8982797301151257e-01 1.4897903734917906e-01 5.0000000000000000e-01 +1.4045494197520247e-01 7.7529420287028150e-01 5.0000000000000000e-01 +1.3080767317604725e-01 4.4851192478324903e-01 5.0000000000000000e-01 +1.8277859824434023e-01 3.1175529539181851e-01 5.0000000000000000e-01 +4.2615414395629586e-01 1.5917424005459524e-01 5.0000000000000000e-01 +7.3436182663266747e-01 1.3082782419812278e-01 5.0000000000000000e-01 +1.4762869436117948e-01 6.0261909496815502e-01 5.0000000000000000e-01 +3.0346012095044145e-01 5.0447706834868400e-01 5.0000000000000000e-01 +4.6450430886806487e-01 6.6864490205422578e-01 5.0000000000000000e-01 +6.6610326747092252e-01 6.5319570681964545e-01 5.0000000000000000e-01 +6.8031238525025539e-01 4.5375446220586002e-01 5.0000000000000000e-01 +7.0665887693750007e-01 2.8232024708294851e-01 5.0000000000000000e-01 +2.9357882455357903e-01 7.0371578177149230e-01 5.0000000000000000e-01 +5.4195662660015442e-01 3.1278159878696560e-01 5.0000000000000000e-01 +3.6524250435682271e-01 3.2525874114704600e-01 5.0000000000000000e-01 +5.0085371984845473e-01 4.8824207225284472e-01 5.0000000000000000e-01 +8.7496908349802072e-01 0.0000000000000000e+00 3.3507099029477827e-01 +2.5066094902600611e-01 0.0000000000000000e+00 3.3499936666577301e-01 +4.3390048751229249e-01 0.0000000000000000e+00 3.3560752664918514e-01 +6.0101092187805349e-01 0.0000000000000000e+00 3.4218737967918400e-01 +1.9397503691101550e-01 0.0000000000000000e+00 1.7168343281490725e-01 +3.7878397362742205e-01 0.0000000000000000e+00 1.6969105389946590e-01 +7.5266581040874592e-01 0.0000000000000000e+00 1.9253584673284704e-01 +7.4314933002335282e-01 0.0000000000000000e+00 3.7205881648224459e-01 +5.5817080659080354e-01 0.0000000000000000e+00 1.7265415632683279e-01 +0.0000000000000000e+00 1.2842186172706638e-01 1.7198713902499471e-01 +0.0000000000000000e+00 7.4937159832173161e-01 3.3473637494599634e-01 +0.0000000000000000e+00 5.6497898534244861e-01 3.3403257127664554e-01 +0.0000000000000000e+00 3.9090591755451698e-01 3.3428682292520340e-01 +0.0000000000000000e+00 8.0665853117001529e-01 1.7155063679648369e-01 +0.0000000000000000e+00 2.8348636862745547e-01 1.6885310341570206e-01 +0.0000000000000000e+00 4.5022749597728873e-01 1.6802582934227886e-01 +0.0000000000000000e+00 6.2348251343469552e-01 1.6877691659937352e-01 +0.0000000000000000e+00 2.1504779941785959e-01 3.3515888901770152e-01 +1.0000000000000000e+00 1.3937931901346823e-01 7.4379091221605387e-01 +1.0000000000000000e+00 2.9090619779490900e-01 8.1293560774370077e-01 +1.0000000000000000e+00 4.5056794781561188e-01 8.2964050565469816e-01 +1.0000000000000000e+00 6.1324711973995694e-01 8.3683100644627584e-01 +1.0000000000000000e+00 7.8085745160627207e-01 8.4640226194680468e-01 +1.0000000000000000e+00 8.6435520886062922e-01 7.0878887143549962e-01 +1.0000000000000000e+00 5.6001301144498827e-01 6.6720887726853650e-01 +1.0000000000000000e+00 4.0506894208527833e-01 6.5901000019172751e-01 +1.0000000000000000e+00 7.1754036567920620e-01 6.7758865720362949e-01 +1.0000000000000000e+00 2.6392401066702575e-01 6.4342805038796491e-01 +8.7150310020183541e-01 1.0000000000000000e+00 6.7201413682767230e-01 +2.5046948865337426e-01 1.0000000000000000e+00 8.3478352869507910e-01 +6.0878781396711790e-01 1.0000000000000000e+00 8.3438699694597540e-01 +1.9323569937099769e-01 1.0000000000000000e+00 6.7157860330353403e-01 +3.7622152655426155e-01 1.0000000000000000e+00 6.6889328608100984e-01 +5.4934235135719423e-01 1.0000000000000000e+00 6.6822076578296707e-01 +7.1626989158779475e-01 1.0000000000000000e+00 6.6892431236435446e-01 +4.3469636156691088e-01 1.0000000000000000e+00 8.3414816078706833e-01 +7.8476115570539129e-01 1.0000000000000000e+00 8.3518505610744298e-01 +1.3646783457949627e-01 2.6725941381463347e-01 1.0000000000000000e+00 +1.5714064640311154e-01 4.1394501115600280e-01 1.0000000000000000e+00 +1.6810760021096458e-01 5.8208687621422739e-01 1.0000000000000000e+00 +1.5462040890388357e-01 7.6200226448722697e-01 1.0000000000000000e+00 +2.8437558200803043e-01 8.4928733570653403e-01 1.0000000000000000e+00 +4.3912030319744766e-01 8.3805867657783883e-01 1.0000000000000000e+00 +6.0715209351120003e-01 8.4634916761491075e-01 1.0000000000000000e+00 +7.7906767153574152e-01 8.5950313479670915e-01 1.0000000000000000e+00 +8.4122537713719447e-01 2.4665408779346598e-01 1.0000000000000000e+00 +8.5119921533766429e-01 5.9002332035705585e-01 1.0000000000000000e+00 +2.2474848009385626e-01 1.4053206746854971e-01 1.0000000000000000e+00 +5.5168302429703997e-01 1.3094858427470141e-01 1.0000000000000000e+00 +6.8850699002326377e-01 1.8300515359189318e-01 1.0000000000000000e+00 +8.4110227006756200e-01 4.2639641313369098e-01 1.0000000000000000e+00 +8.6924565483393368e-01 7.3447292588074886e-01 1.0000000000000000e+00 +3.9741905872907762e-01 1.4776353566965833e-01 1.0000000000000000e+00 +3.3171674866127088e-01 4.6480753299343130e-01 1.0000000000000000e+00 +3.4722449289023261e-01 6.6634471821485119e-01 1.0000000000000000e+00 +5.4694212978810730e-01 6.8073768962991077e-01 1.0000000000000000e+00 +7.1774593819754506e-01 7.0692680106305261e-01 1.0000000000000000e+00 +4.9585762593025889e-01 3.0380456650956023e-01 1.0000000000000000e+00 +6.8780887393998869e-01 5.4243283422814426e-01 1.0000000000000000e+00 +2.9641306537946716e-01 2.9379485936170574e-01 1.0000000000000000e+00 +6.7535552626099704e-01 3.6571947520309001e-01 1.0000000000000000e+00 +5.1244283847485295e-01 5.0136442775906176e-01 1.0000000000000000e+00 +8.7142099731120370e-01 0.0000000000000000e+00 8.2834529936857060e-01 +2.4636282382138161e-01 0.0000000000000000e+00 8.4231824439536951e-01 +4.0640392177483797e-01 0.0000000000000000e+00 8.7088439778150784e-01 +5.5433612704121005e-01 0.0000000000000000e+00 8.4131097568589552e-01 +2.0013676672874747e-01 0.0000000000000000e+00 6.7558217601655113e-01 +6.0203295768714804e-01 0.0000000000000000e+00 6.7153802502874305e-01 +4.0583219518110225e-01 0.0000000000000000e+00 6.9493577268071138e-01 +7.1673559491945293e-01 0.0000000000000000e+00 8.3325668510391959e-01 +7.8282291254936009e-01 0.0000000000000000e+00 6.6604448148321882e-01 +0.0000000000000000e+00 1.2716605146482632e-01 6.7162201342644212e-01 +0.0000000000000000e+00 2.1238540756705199e-01 8.3482262518528849e-01 +0.0000000000000000e+00 5.4843260532137061e-01 8.2847690871518564e-01 +0.0000000000000000e+00 8.6052365796189845e-01 7.4373127805527373e-01 +0.0000000000000000e+00 5.9459554977737072e-01 6.5840132133877494e-01 +0.0000000000000000e+00 2.7927744814630195e-01 6.6780189735739670e-01 +0.0000000000000000e+00 3.8408526361662421e-01 8.3297025726365348e-01 +0.0000000000000000e+00 7.0878801345938092e-01 8.1262528340863815e-01 +0.0000000000000000e+00 7.3601080888003334e-01 6.4328174895241275e-01 +0.0000000000000000e+00 4.3883617526833674e-01 6.6467382119992824e-01 +7.2427207368248814e-01 1.6837886374612185e-01 2.6941139852234292e-01 +7.4383334184979610e-01 3.5380404179870045e-01 2.2079803794737937e-01 +7.8209720243569225e-01 5.9773471016857493e-01 2.2851187743255888e-01 +7.4691415402101480e-01 8.1228460371115141e-01 2.4877615964300928e-01 +3.5576946339481225e-01 7.4671478387706203e-01 2.6122305504272336e-01 +5.1046215500672942e-01 4.6762868717320250e-01 2.3047945432609743e-01 +5.1369857336183045e-01 2.0654184429095693e-01 2.6074002914322186e-01 +2.2199658543838161e-01 4.2820876500774174e-01 2.3208602790384897e-01 +2.7954292745553982e-01 2.0617328311713104e-01 2.2764749570838205e-01 +8.4210718279135122e-01 4.3183875735707883e-01 3.5415381150161784e-01 +7.2035119038411088e-01 7.1186843353783402e-01 8.0089160316416452e-01 +5.2635387854137994e-01 5.2124525403740207e-01 7.6445339319965055e-01 +7.3501033992193199e-01 1.7902631971130198e-01 7.8685153326839041e-01 +7.8604107983059235e-01 3.8677567388682771e-01 7.7236797514311972e-01 +4.4574118525546663e-01 7.7858001752996542e-01 7.3742328971548676e-01 +2.2693731156411415e-01 7.2822368338491383e-01 7.3316159627577071e-01 +2.0734144227221871e-01 2.5483219067690288e-01 7.3873746104622195e-01 +4.4675441846658953e-01 2.3682592006213465e-01 7.4160037947990720e-01 +2.6508287408745695e-01 4.3658107157648324e-01 8.3360876025257147e-01 +8.5208389041369170e-01 8.4084616335532025e-01 6.6761745788095939e-01 +8.7714100177172583e-01 1.0793359842127047e-01 6.3647281330703653e-01 +8.4168326236603275e-01 5.5425032361591065e-01 6.9480038867606586e-01 +6.5146048932760270e-01 3.0284085901785091e-01 6.5775429940585917e-01 +1.4438750031536071e-01 5.4054991568733424e-01 6.8876795666602997e-01 + +109 172 27 28 +147 168 242 167 +249 212 211 252 +191 185 45 257 +52 164 146 51 +14 131 241 20 +176 182 177 251 +162 106 37 38 +239 154 243 151 +173 98 245 242 +241 113 242 240 +239 154 151 152 +187 252 192 200 +106 162 37 105 +246 245 243 155 +244 239 243 121 +245 98 173 172 +52 139 146 157 +47 142 124 167 +163 92 88 238 +26 97 36 166 +179 257 193 248 +96 240 94 247 +106 120 244 246 +127 126 124 242 +94 240 96 93 +33 128 34 100 +256 255 249 148 +242 113 100 111 +135 125 134 241 +44 131 135 45 +164 52 146 157 +130 132 133 242 +139 88 238 157 +241 20 89 14 +35 129 112 34 +20 241 91 123 +164 238 157 146 +40 163 101 92 +96 239 240 247 +136 241 14 135 +238 139 157 146 +119 240 103 118 +114 243 242 113 +245 172 168 169 +42 43 130 133 +244 239 121 238 +245 173 168 172 +116 109 115 245 +240 241 104 91 +120 115 122 243 +132 42 41 124 +241 104 91 112 +146 160 141 51 +20 14 45 1 +129 241 112 100 +170 126 47 46 +114 243 113 122 +170 31 110 126 +130 134 242 133 +170 124 242 167 +88 92 163 12 +243 240 239 151 +217 215 249 251 +241 129 128 100 +238 141 160 244 +99 127 242 126 +142 53 47 41 +163 108 101 238 +243 149 148 242 +229 223 254 228 +140 228 223 48 +151 247 138 137 +242 125 130 128 +240 151 150 137 +240 247 151 137 +107 165 106 244 +114 243 122 115 +130 134 133 43 +113 243 242 240 +140 49 158 48 +244 246 243 155 +250 205 226 222 +145 158 159 246 +169 174 56 144 +154 151 156 243 +241 113 240 119 +239 154 152 244 +132 142 242 124 +206 85 226 84 +172 109 27 171 +19 20 91 123 +240 119 113 118 +243 150 242 240 +243 150 240 151 +110 98 29 173 +141 51 160 50 +252 132 253 153 +105 97 116 246 +163 88 157 238 +25 19 123 0 +245 173 242 168 +95 239 139 238 +246 120 244 243 +244 152 141 154 +21 40 92 12 +170 47 124 167 +212 249 248 252 +242 241 125 128 +157 18 13 2 +186 253 252 189 +245 120 246 243 +32 33 111 127 +14 131 20 45 +41 53 47 5 +93 96 23 103 +55 143 147 168 +149 242 134 133 +16 247 137 138 +109 98 245 172 +196 197 79 235 +18 95 17 139 +94 16 137 15 +135 125 241 131 +171 97 246 245 +162 161 105 246 +165 108 163 238 +95 88 92 238 +97 116 246 245 +97 109 245 171 +109 97 245 116 +174 171 246 245 +238 141 244 152 +140 174 144 57 +152 139 238 146 +242 128 111 100 +235 197 79 80 +22 21 101 92 +172 109 171 245 +128 33 111 100 +255 140 254 225 +18 88 95 139 +152 239 238 139 +25 104 91 24 +241 91 123 112 +241 113 119 100 +241 150 136 240 +99 242 127 111 +33 128 111 127 +35 25 123 0 +103 96 23 102 +245 143 169 168 +73 66 68 201 +110 173 29 170 +128 242 111 127 +113 243 240 118 +25 104 112 91 +130 242 128 127 +245 143 147 148 +66 179 68 201 +161 97 36 105 +99 110 31 126 +97 171 246 166 +147 245 242 168 +161 59 58 166 +247 240 151 239 +174 161 246 166 +246 159 145 244 +130 132 242 124 +164 160 238 146 +57 174 144 56 +98 109 28 172 +93 240 103 104 +255 140 225 145 +193 180 185 257 +228 144 254 233 +240 241 150 242 +15 136 89 14 +165 162 106 244 +14 131 45 135 +161 105 36 37 +245 148 243 155 +256 196 261 253 +179 183 248 178 +143 245 144 148 +145 158 246 140 +145 158 140 49 +143 55 56 169 +245 120 243 115 +254 148 255 256 +113 243 118 122 +161 97 105 246 +120 107 106 244 +110 99 242 126 +250 205 206 226 +18 52 157 139 +240 150 136 137 +185 180 193 68 +171 174 246 166 +161 162 105 37 +174 161 166 59 +172 245 171 169 +161 36 166 58 +130 242 127 124 +245 114 243 242 +142 54 167 53 +255 148 254 155 +97 161 36 166 +239 117 101 102 +233 144 56 57 +139 247 152 239 +148 153 147 242 +138 17 16 90 +95 17 138 90 +36 7 166 58 +108 239 101 238 +224 145 141 255 +240 239 96 102 +180 185 67 68 +96 239 92 101 +241 113 100 242 +139 95 17 138 +96 240 102 103 +149 150 134 242 +261 144 254 148 +148 149 249 252 +214 260 249 255 +96 239 101 102 +136 150 241 135 +217 218 214 249 +96 22 102 101 +88 95 139 238 +109 97 27 171 +135 125 131 44 +174 161 59 158 +241 129 125 128 +241 131 125 129 +154 141 244 145 +139 247 239 95 +20 241 89 91 +240 94 137 136 +14 131 135 241 +126 170 124 242 +42 43 133 189 +120 121 107 244 +135 125 44 134 +88 157 13 12 +52 18 157 2 +252 153 149 133 +175 176 250 184 +93 240 104 91 +152 247 151 239 +92 22 96 101 +239 95 92 238 +239 118 117 102 +16 247 138 90 +238 239 101 92 +185 193 257 191 +119 241 104 240 +240 241 91 89 +243 150 151 156 +164 163 157 238 +171 174 169 245 +108 239 238 121 +245 120 115 116 +148 255 156 155 +26 7 166 36 +16 247 90 94 +121 120 243 244 +241 150 134 135 +93 240 91 89 +165 108 238 107 +174 140 158 48 +121 239 243 117 +241 242 100 128 +246 162 158 159 +171 97 27 26 +161 162 158 246 +113 114 111 242 +94 240 93 89 +243 149 242 150 +174 246 144 245 +149 153 242 133 +243 149 150 156 +243 148 156 155 +191 190 248 134 +120 121 243 122 +132 42 133 189 +170 31 126 46 +142 53 167 47 +255 154 156 155 +143 245 147 168 +110 98 173 242 +30 110 29 170 +245 114 242 98 +148 245 243 242 +165 107 238 244 +160 165 238 244 +165 108 107 39 +163 40 12 92 +238 107 121 244 +121 107 238 108 +40 21 3 12 +220 255 209 254 +108 163 101 40 +191 193 257 248 +35 25 112 123 +136 241 89 14 +165 162 244 159 +160 165 244 159 +173 98 28 172 +98 173 28 29 +25 91 112 123 +246 140 144 155 +88 18 13 157 +88 163 157 12 +48 174 59 158 +93 103 23 24 +19 25 123 91 +104 93 91 24 +96 247 95 239 +247 240 94 137 +140 246 145 155 +130 134 43 125 +43 44 125 134 +163 108 39 40 +236 261 253 147 +165 107 38 39 +142 231 253 236 +240 119 103 104 +174 140 144 246 +245 114 98 115 +143 169 56 144 +143 245 169 144 +131 20 123 241 +153 142 147 242 +32 99 126 127 +110 173 170 242 +241 119 112 100 +15 94 89 136 +241 119 104 112 +99 32 126 31 +238 141 152 146 +146 160 51 164 +238 141 146 160 +245 174 169 144 +171 97 26 166 +114 99 111 242 +190 252 133 189 +121 117 243 122 +154 244 243 155 +109 98 115 245 +141 159 50 160 +241 242 134 150 +137 94 15 136 +112 129 100 34 +165 162 38 106 +31 30 4 46 +170 31 46 30 +236 261 147 232 +132 153 133 242 +48 6 59 57 +54 55 147 168 +148 254 155 144 +174 48 59 57 +244 154 145 155 +245 114 115 243 +246 244 145 155 +161 97 246 166 +108 239 121 117 +108 239 117 101 +141 159 160 244 +243 149 156 148 +54 147 167 168 +165 108 39 163 +239 96 92 95 +88 18 157 139 +185 180 67 14 +241 242 125 134 +54 142 167 147 +129 241 123 112 +205 83 222 221 +254 220 225 223 +140 174 57 48 +240 94 136 89 +241 240 136 89 +104 93 24 103 +224 226 222 250 +96 247 94 90 +21 40 101 92 +163 238 101 92 +220 255 254 225 +240 118 102 103 +118 240 102 239 +96 240 103 93 +64 207 63 177 +243 118 122 117 +156 260 255 249 +163 160 165 238 +174 161 158 246 +175 219 61 60 +247 95 138 90 +243 240 118 239 +142 132 242 153 +129 35 112 123 +131 129 241 123 +96 22 23 102 +244 239 238 152 +239 154 244 243 +107 165 38 106 +110 99 114 242 +245 120 116 246 +141 159 244 145 +175 184 250 258 +140 174 158 246 +106 105 116 246 +170 126 124 47 +130 132 124 42 +260 156 154 151 +41 142 124 47 +170 31 30 110 +247 152 151 138 +132 142 124 41 +243 118 117 239 +139 247 95 138 +187 72 200 71 +139 247 138 152 +246 162 159 244 +245 246 144 155 +129 128 100 34 +168 173 242 167 +143 55 169 168 +245 148 155 144 +170 173 167 242 +130 134 125 242 +163 160 238 164 +84 205 83 222 +252 132 189 253 +162 106 244 246 +50 49 159 145 +147 142 167 242 +106 162 105 246 +250 214 255 260 +154 243 156 155 +124 142 242 167 +182 137 181 259 +99 32 111 127 +145 158 49 159 +120 106 116 246 +84 206 205 226 +141 159 145 50 +245 148 147 242 +130 132 42 133 +149 153 148 242 +98 110 114 242 +126 110 170 242 +16 247 94 137 +247 96 95 90 +83 209 82 221 +150 259 151 249 +191 44 190 134 +204 87 220 229 +251 215 249 248 +197 231 235 253 +255 154 145 141 +204 87 229 76 +228 144 233 57 +213 215 248 212 +248 212 252 200 +77 195 78 234 +255 224 222 250 +255 209 205 221 +212 252 200 199 +253 256 249 148 +187 72 193 201 +76 11 81 87 +85 219 62 202 +256 254 234 194 +250 139 251 260 +183 181 15 136 +224 145 50 141 +65 208 203 178 +207 217 251 215 +195 256 234 194 +254 229 234 194 +231 142 253 188 +138 151 137 259 +76 77 229 194 +204 87 76 81 +44 191 135 134 +235 261 196 253 +142 253 147 236 +182 138 137 259 +175 176 62 202 +85 250 219 202 +252 186 189 192 +138 182 137 16 +142 231 236 53 +187 252 190 192 +228 144 57 140 +237 144 56 233 +139 146 250 258 +183 259 248 178 +201 213 248 200 +261 144 148 143 +230 256 196 261 +256 211 253 249 +201 187 200 248 +66 65 179 208 +207 176 202 63 +252 192 200 199 +211 212 249 218 +135 191 257 248 +14 183 257 180 +151 260 249 251 +85 250 202 206 +150 252 249 149 +198 192 199 70 +220 209 82 204 +256 211 249 210 +77 195 234 194 +228 6 48 57 +187 72 201 200 +52 18 2 60 +249 211 218 210 +256 211 210 196 +236 54 232 147 +256 216 214 255 +231 75 74 188 +207 64 203 177 +256 230 195 234 +256 211 196 253 +231 186 75 188 +76 229 204 194 +255 209 254 216 +176 175 250 202 +220 204 82 81 +255 140 145 155 +175 219 250 202 +217 260 251 249 +55 261 232 147 +196 261 235 230 +259 251 249 248 +187 252 200 248 +148 147 253 261 +55 261 147 143 +186 231 253 188 +252 149 134 133 +253 231 235 236 +261 230 237 232 +236 261 232 235 +198 186 70 69 +236 261 235 253 +229 223 228 87 +16 182 137 181 +254 140 155 144 +212 252 199 211 +260 139 251 138 +139 184 251 138 +230 196 78 79 +255 260 156 154 +204 87 81 220 +251 139 250 184 +208 65 179 178 +209 255 205 214 +140 254 223 228 +140 49 48 223 +183 181 259 178 +252 187 190 248 +217 260 250 251 +54 142 147 236 +151 260 251 138 +186 198 192 252 +151 150 249 156 +231 186 197 75 +180 193 68 179 +261 254 234 256 +179 257 248 183 +183 259 136 248 +65 64 178 203 +138 17 182 16 +71 187 192 200 +251 151 259 249 +224 260 146 250 +49 140 145 225 +150 149 249 156 +72 73 193 201 +212 249 218 215 +192 71 199 70 +230 256 261 234 +186 231 197 253 +54 142 236 53 +148 255 249 156 +257 183 14 136 +150 137 259 136 +203 64 178 177 +229 220 204 254 +132 142 253 153 +186 198 197 69 +259 203 178 177 +252 198 192 199 +230 256 195 196 +154 152 260 151 +207 176 177 251 +193 73 68 201 +207 251 177 259 +255 140 155 254 +254 256 255 216 +227 219 250 258 +229 223 220 254 +198 186 197 253 +153 142 253 147 +261 144 143 237 +254 194 216 204 +228 86 223 48 +231 142 188 53 +234 254 261 237 +251 182 177 259 +134 248 150 252 +135 14 257 45 +209 254 216 204 +134 248 135 150 +256 214 210 249 +198 186 253 252 +259 181 177 178 +18 184 139 17 +198 186 192 70 +16 137 15 181 +184 176 250 251 +224 260 250 255 +182 181 177 259 +185 14 1 45 +55 54 147 232 +231 53 188 74 +132 142 41 188 +252 132 153 133 +252 132 133 189 +42 132 188 189 +53 41 188 74 +137 181 259 136 +181 183 259 136 +261 143 148 147 +249 211 253 252 +44 191 45 135 +132 42 188 41 +151 259 150 137 +256 195 210 216 +213 208 201 248 +142 132 253 188 +15 183 136 14 +224 260 255 141 +256 196 210 195 +179 193 68 201 +252 153 148 149 +132 253 188 189 +215 203 213 248 +230 261 237 234 +203 208 248 178 +207 203 248 259 +237 254 144 233 +248 212 200 213 +85 250 206 226 +203 208 213 248 +252 253 249 148 +255 205 222 221 +253 186 188 189 +228 86 48 6 +184 176 251 182 +256 255 214 249 +255 225 221 222 +252 190 133 134 +51 52 227 146 +250 214 260 217 +217 250 202 251 +202 250 217 206 +214 218 210 249 +14 185 257 45 +249 149 148 156 +217 207 251 202 +219 9 85 62 +209 220 82 221 +260 146 250 139 +211 252 198 253 +179 193 201 248 +254 237 234 233 +85 250 226 219 +229 77 234 194 +196 197 253 211 +196 230 78 195 +229 254 234 233 +205 209 83 221 +208 179 248 178 +195 256 194 216 +229 254 233 228 +220 255 225 221 +261 144 237 254 +227 250 146 258 +257 248 136 135 +190 43 133 134 +220 255 221 209 +253 147 148 153 +55 261 143 237 +230 261 235 232 +49 50 225 145 +190 252 248 134 +205 84 226 222 +55 261 237 232 +228 144 140 254 +154 141 260 152 +184 139 17 138 +55 143 56 237 +196 197 235 253 +53 41 74 5 +197 75 69 80 +198 252 211 199 +231 197 235 80 +231 197 80 75 +227 219 258 60 +75 10 69 80 +66 208 179 201 +261 256 253 148 +179 257 183 180 +184 139 250 258 +250 205 222 255 +251 176 250 202 +207 203 259 177 +250 219 227 226 +146 250 227 224 +53 142 188 41 +187 193 248 201 +179 257 180 193 +176 63 62 202 +259 203 248 178 +252 150 249 248 +255 154 155 145 +195 230 78 234 +257 248 183 136 +56 144 237 143 +150 259 249 248 +187 193 191 248 +138 182 251 259 +229 254 204 194 +252 153 253 148 +229 223 87 220 +260 156 151 249 +87 86 223 228 +152 151 138 260 +14 136 135 257 +187 191 190 248 +225 255 224 222 +227 226 224 250 +208 179 201 248 +209 220 254 204 +192 71 200 199 +256 254 194 216 +224 260 141 146 +152 260 138 139 +250 214 217 206 +259 150 136 248 +216 256 214 210 +181 137 15 136 +219 175 62 202 +209 255 214 216 +8 66 68 73 +227 52 258 146 +154 255 260 141 +151 138 251 259 +52 139 258 146 +140 228 48 57 +184 18 139 258 +224 145 255 225 +197 186 69 75 +256 254 148 261 +250 214 205 255 +150 136 248 135 +51 227 224 146 +215 207 203 248 +230 196 79 235 +205 214 250 206 +260 146 139 152 +184 17 182 138 +184 175 18 258 +227 52 60 258 +150 252 149 134 +140 254 225 223 +135 191 248 134 +18 175 60 258 +192 252 190 189 +175 219 62 61 +219 175 250 258 +214 260 217 249 +135 191 45 257 +251 207 248 259 +43 190 133 189 +207 176 251 202 +44 43 190 134 +141 51 224 146 +219 175 258 60 +217 218 249 215 +197 198 253 211 +138 184 251 182 +260 146 152 141 +52 18 60 258 +185 180 14 257 +224 145 225 50 +219 9 62 61 +18 52 139 258 +49 140 225 223 +141 51 50 224 +185 14 67 1 +207 215 251 248 +207 176 63 177 +212 249 215 248 + +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 + +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 + +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 + \ No newline at end of file From 9df75747ab8c19aaa3664c982367a02732ae3b59 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Wed, 17 Jul 2024 10:12:57 +0200 Subject: [PATCH 13/18] Specify ASCII encoding --- cpp/test/mesh/read_named_meshtags.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpp/test/mesh/read_named_meshtags.cpp b/cpp/test/mesh/read_named_meshtags.cpp index d551c489309..ea002e0f54c 100644 --- a/cpp/test/mesh/read_named_meshtags.cpp +++ b/cpp/test/mesh/read_named_meshtags.cpp @@ -26,7 +26,8 @@ void test_read_named_meshtags() { const std::string mesh_file = "Domain.xdmf"; - io::XDMFFile meshFile(MPI_COMM_WORLD, mesh_file, "r"); + io::XDMFFile meshFile(MPI_COMM_WORLD, mesh_file, "r", + io::XDMFFile::Encoding::ASCII); auto mesh = std::make_shared>(meshFile.read_mesh( fem::CoordinateElement(mesh::CellType::tetrahedron, 1), mesh::GhostMode::none, "Grid")); From 90d5b483ec06cc86b092e6625feda294670e3e54 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Wed, 17 Jul 2024 11:32:35 +0200 Subject: [PATCH 14/18] Fix a bug and create mesh within test --- cpp/dolfinx/io/XDMFFile.cpp | 4 +- cpp/test/CMakeLists.txt | 9 - cpp/test/mesh/Domain.xdmf | 2969 ------------------------- cpp/test/mesh/read_named_meshtags.cpp | 55 +- 4 files changed, 49 insertions(+), 2988 deletions(-) delete mode 100644 cpp/test/mesh/Domain.xdmf diff --git a/cpp/dolfinx/io/XDMFFile.cpp b/cpp/dolfinx/io/XDMFFile.cpp index 64ca1447ce2..b2d38df1a73 100644 --- a/cpp/dolfinx/io/XDMFFile.cpp +++ b/cpp/dolfinx/io/XDMFFile.cpp @@ -342,7 +342,7 @@ XDMFFile::read_meshtags_by_label(const mesh::Mesh& mesh, if (!attribute_label.empty()) { bool found = false; - while ((attribute_node = attribute_node.next_sibling("Attribute"))) + while (!found and attribute_node) { pugi::xml_attribute hint; pugi::xml_attribute name = attribute_node.attribute("Name", hint); @@ -350,8 +350,8 @@ XDMFFile::read_meshtags_by_label(const mesh::Mesh& mesh, { values_data_node = attribute_node.child("DataItem"); found = true; - break; } + attribute_node = attribute_node.next_sibling("Attribute"); } if (!found) { diff --git a/cpp/test/CMakeLists.txt b/cpp/test/CMakeLists.txt index dc4bd908709..41b43c231f1 100644 --- a/cpp/test/CMakeLists.txt +++ b/cpp/test/CMakeLists.txt @@ -18,13 +18,6 @@ add_custom_command( COMMENT "Compile poisson.py using FFCx" ) -add_custom_target(test_mesh - COMMAND ln -s -f ${CMAKE_CURRENT_SOURCE_DIR}/mesh/Domain.xdmf . - COMMAND ln -s -f ${CMAKE_CURRENT_SOURCE_DIR}/mesh/Domain.h5 . - VERBATIM - COMMENT "Link mesh file for test" -) - find_package(Catch2 3) if(NOT Catch2_FOUND) @@ -62,8 +55,6 @@ target_include_directories( unittests PRIVATE $ ) -add_dependencies(unittests test_mesh) - # Add some strict compiler checks only on C++ part (Developer). include(CheckCXXCompilerFlag) check_cxx_compiler_flag("-Wall -Werror -Wextra -pedantic" HAVE_PEDANTIC) diff --git a/cpp/test/mesh/Domain.xdmf b/cpp/test/mesh/Domain.xdmf deleted file mode 100644 index e2df0a72406..00000000000 --- a/cpp/test/mesh/Domain.xdmf +++ /dev/null @@ -1,2969 +0,0 @@ - -1.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 1.0000000000000000e+00 5.0000000000000000e-01 -1.0000000000000000e+00 0.0000000000000000e+00 5.0000000000000000e-01 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 -0.0000000000000000e+00 1.0000000000000000e+00 5.0000000000000000e-01 -0.0000000000000000e+00 0.0000000000000000e+00 5.0000000000000000e-01 -0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00 -0.0000000000000000e+00 1.0000000000000000e+00 1.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 1.6666666666666752e-01 -1.0000000000000000e+00 0.0000000000000000e+00 3.3333333333333953e-01 -1.0000000000000000e+00 8.3333333333333104e-01 5.0000000000000000e-01 -1.0000000000000000e+00 6.6666666666666330e-01 5.0000000000000000e-01 -1.0000000000000000e+00 4.9999999999999367e-01 5.0000000000000000e-01 -1.0000000000000000e+00 3.3333333333332116e-01 5.0000000000000000e-01 -1.0000000000000000e+00 1.6666666666665941e-01 5.0000000000000000e-01 -1.0000000000000000e+00 1.0000000000000000e+00 1.6666666666666752e-01 -1.0000000000000000e+00 1.0000000000000000e+00 3.3333333333333953e-01 -1.0000000000000000e+00 1.6666666666666899e-01 0.0000000000000000e+00 -1.0000000000000000e+00 3.3333333333333504e-01 0.0000000000000000e+00 -1.0000000000000000e+00 5.0000000000000677e-01 0.0000000000000000e+00 -1.0000000000000000e+00 6.6666666666667906e-01 0.0000000000000000e+00 -1.0000000000000000e+00 8.3333333333334059e-01 0.0000000000000000e+00 -0.0000000000000000e+00 1.6666666666666899e-01 0.0000000000000000e+00 -0.0000000000000000e+00 3.3333333333333504e-01 0.0000000000000000e+00 -0.0000000000000000e+00 5.0000000000000677e-01 0.0000000000000000e+00 -0.0000000000000000e+00 6.6666666666667906e-01 0.0000000000000000e+00 -0.0000000000000000e+00 8.3333333333334059e-01 0.0000000000000000e+00 -1.6666666666666899e-01 1.0000000000000000e+00 0.0000000000000000e+00 -3.3333333333333504e-01 1.0000000000000000e+00 0.0000000000000000e+00 -5.0000000000000677e-01 1.0000000000000000e+00 0.0000000000000000e+00 -6.6666666666667906e-01 1.0000000000000000e+00 0.0000000000000000e+00 -8.3333333333334059e-01 1.0000000000000000e+00 0.0000000000000000e+00 -1.6666666666666899e-01 0.0000000000000000e+00 0.0000000000000000e+00 -3.3333333333333504e-01 0.0000000000000000e+00 0.0000000000000000e+00 -5.0000000000000677e-01 0.0000000000000000e+00 0.0000000000000000e+00 -6.6666666666667906e-01 0.0000000000000000e+00 0.0000000000000000e+00 -8.3333333333334059e-01 0.0000000000000000e+00 0.0000000000000000e+00 -1.6666666666666902e-01 1.0000000000000000e+00 5.0000000000000000e-01 -3.3333333333333509e-01 1.0000000000000000e+00 5.0000000000000000e-01 -5.0000000000000677e-01 1.0000000000000000e+00 5.0000000000000000e-01 -6.6666666666667906e-01 1.0000000000000000e+00 5.0000000000000000e-01 -8.3333333333334059e-01 1.0000000000000000e+00 5.0000000000000000e-01 -0.0000000000000000e+00 1.0000000000000000e+00 1.6666666666666752e-01 -0.0000000000000000e+00 1.0000000000000000e+00 3.3333333333333953e-01 -1.6666666666666902e-01 0.0000000000000000e+00 5.0000000000000000e-01 -3.3333333333333509e-01 0.0000000000000000e+00 5.0000000000000000e-01 -5.0000000000000677e-01 0.0000000000000000e+00 5.0000000000000000e-01 -6.6666666666667906e-01 0.0000000000000000e+00 5.0000000000000000e-01 -8.3333333333334059e-01 0.0000000000000000e+00 5.0000000000000000e-01 -0.0000000000000000e+00 8.3333333333333104e-01 5.0000000000000000e-01 -0.0000000000000000e+00 6.6666666666666330e-01 5.0000000000000000e-01 -0.0000000000000000e+00 4.9999999999999367e-01 5.0000000000000000e-01 -0.0000000000000000e+00 3.3333333333332116e-01 5.0000000000000000e-01 -0.0000000000000000e+00 1.6666666666665941e-01 5.0000000000000000e-01 -0.0000000000000000e+00 0.0000000000000000e+00 1.6666666666666752e-01 -0.0000000000000000e+00 0.0000000000000000e+00 3.3333333333333953e-01 -1.0000000000000000e+00 0.0000000000000000e+00 6.6666666666666674e-01 -1.0000000000000000e+00 0.0000000000000000e+00 8.3333333333333048e-01 -1.0000000000000000e+00 1.6666666666666899e-01 1.0000000000000000e+00 -1.0000000000000000e+00 3.3333333333333504e-01 1.0000000000000000e+00 -1.0000000000000000e+00 5.0000000000000677e-01 1.0000000000000000e+00 -1.0000000000000000e+00 6.6666666666667906e-01 1.0000000000000000e+00 -1.0000000000000000e+00 8.3333333333334059e-01 1.0000000000000000e+00 -1.0000000000000000e+00 1.0000000000000000e+00 6.6666666666666674e-01 -1.0000000000000000e+00 1.0000000000000000e+00 8.3333333333333048e-01 -1.6666666666666899e-01 1.0000000000000000e+00 1.0000000000000000e+00 -3.3333333333333504e-01 1.0000000000000000e+00 1.0000000000000000e+00 -5.0000000000000677e-01 1.0000000000000000e+00 1.0000000000000000e+00 -6.6666666666667906e-01 1.0000000000000000e+00 1.0000000000000000e+00 -8.3333333333334059e-01 1.0000000000000000e+00 1.0000000000000000e+00 -0.0000000000000000e+00 1.0000000000000000e+00 6.6666666666666674e-01 -0.0000000000000000e+00 1.0000000000000000e+00 8.3333333333333048e-01 -0.0000000000000000e+00 1.6666666666666899e-01 1.0000000000000000e+00 -0.0000000000000000e+00 3.3333333333333504e-01 1.0000000000000000e+00 -0.0000000000000000e+00 5.0000000000000677e-01 1.0000000000000000e+00 -0.0000000000000000e+00 6.6666666666667906e-01 1.0000000000000000e+00 -0.0000000000000000e+00 8.3333333333334059e-01 1.0000000000000000e+00 -1.6666666666666899e-01 0.0000000000000000e+00 1.0000000000000000e+00 -3.3333333333333504e-01 0.0000000000000000e+00 1.0000000000000000e+00 -5.0000000000000677e-01 0.0000000000000000e+00 1.0000000000000000e+00 -6.6666666666667906e-01 0.0000000000000000e+00 1.0000000000000000e+00 -8.3333333333334059e-01 0.0000000000000000e+00 1.0000000000000000e+00 -0.0000000000000000e+00 0.0000000000000000e+00 6.6666666666666674e-01 -0.0000000000000000e+00 0.0000000000000000e+00 8.3333333333333048e-01 -1.0000000000000000e+00 1.3731098223122690e-01 2.9349176567155089e-01 -1.0000000000000000e+00 7.5003052824178695e-01 3.3630149197366960e-01 -1.0000000000000000e+00 4.2279080986988055e-01 3.7037747619659483e-01 -1.0000000000000000e+00 8.0494745175928406e-01 1.7238565191834895e-01 -1.0000000000000000e+00 2.2913827320866656e-01 1.5888830088325273e-01 -1.0000000000000000e+00 6.1689641795400441e-01 1.7359446360320893e-01 -1.0000000000000000e+00 5.7095279586667136e-01 3.4228626896514019e-01 -1.0000000000000000e+00 2.8240354265635109e-01 3.3195367110739776e-01 -1.0000000000000000e+00 4.2292601543180608e-01 1.9258981387932830e-01 -1.3866593562791182e-01 2.2156908339022569e-01 0.0000000000000000e+00 -1.6721457888867894e-01 5.7506093654588153e-01 0.0000000000000000e+00 -2.8508627177050322e-01 8.4654670751672800e-01 0.0000000000000000e+00 -6.0847772519424570e-01 8.4347017170523897e-01 0.0000000000000000e+00 -8.5274753264651182e-01 2.4572592837178478e-01 0.0000000000000000e+00 -8.5321175192100196e-01 4.2682461393745141e-01 0.0000000000000000e+00 -8.5565538168282285e-01 5.8963971901299117e-01 0.0000000000000000e+00 -8.7093111253275191e-01 7.3397030061607327e-01 0.0000000000000000e+00 -2.6192458338799302e-01 1.2946797806821639e-01 0.0000000000000000e+00 -4.0110258383857533e-01 1.4512970152749727e-01 0.0000000000000000e+00 -5.5216292202966089e-01 1.5118665861031658e-01 0.0000000000000000e+00 -7.0728199545170045e-01 1.7708612007033936e-01 0.0000000000000000e+00 -1.5482195006743207e-01 3.9730584261263707e-01 0.0000000000000000e+00 -1.5477450209773386e-01 7.5896875564953969e-01 0.0000000000000000e+00 -4.4071810830045111e-01 8.3426982814086670e-01 0.0000000000000000e+00 -7.8010475107011479e-01 8.5859418703480905e-01 0.0000000000000000e+00 -5.5085680435389750e-01 6.7156326804282329e-01 0.0000000000000000e+00 -3.4864799885348702e-01 6.5879180338921584e-01 0.0000000000000000e+00 -3.2561857339303157e-01 4.5501765012572010e-01 0.0000000000000000e+00 -2.8846291894467496e-01 2.8117061560585982e-01 0.0000000000000000e+00 -7.1094446519551624e-01 3.6330248628543221e-01 0.0000000000000000e+00 -6.9830938199375936e-01 5.3642367950570036e-01 0.0000000000000000e+00 -7.2132787657349362e-01 7.0394771209870044e-01 0.0000000000000000e+00 -4.4396590336101599e-01 3.0463572330209265e-01 0.0000000000000000e+00 -5.8917961619915993e-01 2.9647771642488185e-01 0.0000000000000000e+00 -5.2543374209416049e-01 4.7246351250737573e-01 0.0000000000000000e+00 -8.7150310020183508e-01 1.0000000000000000e+00 1.7201413682767375e-01 -2.5046948865337443e-01 1.0000000000000000e+00 3.3478352869508005e-01 -6.0878781396711779e-01 1.0000000000000000e+00 3.3438699694597579e-01 -1.9323569937099760e-01 1.0000000000000000e+00 1.7157860330353497e-01 -3.7622152655426155e-01 1.0000000000000000e+00 1.6889328608101020e-01 -5.4934235135719423e-01 1.0000000000000000e+00 1.6822076578296732e-01 -7.1626989158779464e-01 1.0000000000000000e+00 1.6892431236435509e-01 -4.3469636156691094e-01 1.0000000000000000e+00 3.3414816078706860e-01 -7.8476115570539118e-01 1.0000000000000000e+00 3.3518505610744431e-01 -2.6715903125496077e-01 8.6359661292432266e-01 5.0000000000000000e-01 -4.1379075799152198e-01 8.4297864989658078e-01 5.0000000000000000e-01 -5.8195605882066481e-01 8.3204834913164338e-01 5.0000000000000000e-01 -7.6192305373408975e-01 8.4549935014856747e-01 5.0000000000000000e-01 -8.4921360729860440e-01 7.1577669885461170e-01 5.0000000000000000e-01 -8.3792293837168508e-01 5.6111224355119316e-01 5.0000000000000000e-01 -8.4616357256983477e-01 3.9302519976526212e-01 5.0000000000000000e-01 -8.5940380414207196e-01 2.2101873831610097e-01 5.0000000000000000e-01 -2.4649258359659215e-01 1.5895468751857278e-01 5.0000000000000000e-01 -5.8982797301151257e-01 1.4897903734917906e-01 5.0000000000000000e-01 -1.4045494197520247e-01 7.7529420287028150e-01 5.0000000000000000e-01 -1.3080767317604725e-01 4.4851192478324903e-01 5.0000000000000000e-01 -1.8277859824434023e-01 3.1175529539181851e-01 5.0000000000000000e-01 -4.2615414395629586e-01 1.5917424005459524e-01 5.0000000000000000e-01 -7.3436182663266747e-01 1.3082782419812278e-01 5.0000000000000000e-01 -1.4762869436117948e-01 6.0261909496815502e-01 5.0000000000000000e-01 -3.0346012095044145e-01 5.0447706834868400e-01 5.0000000000000000e-01 -4.6450430886806487e-01 6.6864490205422578e-01 5.0000000000000000e-01 -6.6610326747092252e-01 6.5319570681964545e-01 5.0000000000000000e-01 -6.8031238525025539e-01 4.5375446220586002e-01 5.0000000000000000e-01 -7.0665887693750007e-01 2.8232024708294851e-01 5.0000000000000000e-01 -2.9357882455357903e-01 7.0371578177149230e-01 5.0000000000000000e-01 -5.4195662660015442e-01 3.1278159878696560e-01 5.0000000000000000e-01 -3.6524250435682271e-01 3.2525874114704600e-01 5.0000000000000000e-01 -5.0085371984845473e-01 4.8824207225284472e-01 5.0000000000000000e-01 -8.7496908349802072e-01 0.0000000000000000e+00 3.3507099029477827e-01 -2.5066094902600611e-01 0.0000000000000000e+00 3.3499936666577301e-01 -4.3390048751229249e-01 0.0000000000000000e+00 3.3560752664918514e-01 -6.0101092187805349e-01 0.0000000000000000e+00 3.4218737967918400e-01 -1.9397503691101550e-01 0.0000000000000000e+00 1.7168343281490725e-01 -3.7878397362742205e-01 0.0000000000000000e+00 1.6969105389946590e-01 -7.5266581040874592e-01 0.0000000000000000e+00 1.9253584673284704e-01 -7.4314933002335282e-01 0.0000000000000000e+00 3.7205881648224459e-01 -5.5817080659080354e-01 0.0000000000000000e+00 1.7265415632683279e-01 -0.0000000000000000e+00 1.2842186172706638e-01 1.7198713902499471e-01 -0.0000000000000000e+00 7.4937159832173161e-01 3.3473637494599634e-01 -0.0000000000000000e+00 5.6497898534244861e-01 3.3403257127664554e-01 -0.0000000000000000e+00 3.9090591755451698e-01 3.3428682292520340e-01 -0.0000000000000000e+00 8.0665853117001529e-01 1.7155063679648369e-01 -0.0000000000000000e+00 2.8348636862745547e-01 1.6885310341570206e-01 -0.0000000000000000e+00 4.5022749597728873e-01 1.6802582934227886e-01 -0.0000000000000000e+00 6.2348251343469552e-01 1.6877691659937352e-01 -0.0000000000000000e+00 2.1504779941785959e-01 3.3515888901770152e-01 -1.0000000000000000e+00 1.3937931901346823e-01 7.4379091221605387e-01 -1.0000000000000000e+00 2.9090619779490900e-01 8.1293560774370077e-01 -1.0000000000000000e+00 4.5056794781561188e-01 8.2964050565469816e-01 -1.0000000000000000e+00 6.1324711973995694e-01 8.3683100644627584e-01 -1.0000000000000000e+00 7.8085745160627207e-01 8.4640226194680468e-01 -1.0000000000000000e+00 8.6435520886062922e-01 7.0878887143549962e-01 -1.0000000000000000e+00 5.6001301144498827e-01 6.6720887726853650e-01 -1.0000000000000000e+00 4.0506894208527833e-01 6.5901000019172751e-01 -1.0000000000000000e+00 7.1754036567920620e-01 6.7758865720362949e-01 -1.0000000000000000e+00 2.6392401066702575e-01 6.4342805038796491e-01 -8.7150310020183541e-01 1.0000000000000000e+00 6.7201413682767230e-01 -2.5046948865337426e-01 1.0000000000000000e+00 8.3478352869507910e-01 -6.0878781396711790e-01 1.0000000000000000e+00 8.3438699694597540e-01 -1.9323569937099769e-01 1.0000000000000000e+00 6.7157860330353403e-01 -3.7622152655426155e-01 1.0000000000000000e+00 6.6889328608100984e-01 -5.4934235135719423e-01 1.0000000000000000e+00 6.6822076578296707e-01 -7.1626989158779475e-01 1.0000000000000000e+00 6.6892431236435446e-01 -4.3469636156691088e-01 1.0000000000000000e+00 8.3414816078706833e-01 -7.8476115570539129e-01 1.0000000000000000e+00 8.3518505610744298e-01 -1.3646783457949627e-01 2.6725941381463347e-01 1.0000000000000000e+00 -1.5714064640311154e-01 4.1394501115600280e-01 1.0000000000000000e+00 -1.6810760021096458e-01 5.8208687621422739e-01 1.0000000000000000e+00 -1.5462040890388357e-01 7.6200226448722697e-01 1.0000000000000000e+00 -2.8437558200803043e-01 8.4928733570653403e-01 1.0000000000000000e+00 -4.3912030319744766e-01 8.3805867657783883e-01 1.0000000000000000e+00 -6.0715209351120003e-01 8.4634916761491075e-01 1.0000000000000000e+00 -7.7906767153574152e-01 8.5950313479670915e-01 1.0000000000000000e+00 -8.4122537713719447e-01 2.4665408779346598e-01 1.0000000000000000e+00 -8.5119921533766429e-01 5.9002332035705585e-01 1.0000000000000000e+00 -2.2474848009385626e-01 1.4053206746854971e-01 1.0000000000000000e+00 -5.5168302429703997e-01 1.3094858427470141e-01 1.0000000000000000e+00 -6.8850699002326377e-01 1.8300515359189318e-01 1.0000000000000000e+00 -8.4110227006756200e-01 4.2639641313369098e-01 1.0000000000000000e+00 -8.6924565483393368e-01 7.3447292588074886e-01 1.0000000000000000e+00 -3.9741905872907762e-01 1.4776353566965833e-01 1.0000000000000000e+00 -3.3171674866127088e-01 4.6480753299343130e-01 1.0000000000000000e+00 -3.4722449289023261e-01 6.6634471821485119e-01 1.0000000000000000e+00 -5.4694212978810730e-01 6.8073768962991077e-01 1.0000000000000000e+00 -7.1774593819754506e-01 7.0692680106305261e-01 1.0000000000000000e+00 -4.9585762593025889e-01 3.0380456650956023e-01 1.0000000000000000e+00 -6.8780887393998869e-01 5.4243283422814426e-01 1.0000000000000000e+00 -2.9641306537946716e-01 2.9379485936170574e-01 1.0000000000000000e+00 -6.7535552626099704e-01 3.6571947520309001e-01 1.0000000000000000e+00 -5.1244283847485295e-01 5.0136442775906176e-01 1.0000000000000000e+00 -8.7142099731120370e-01 0.0000000000000000e+00 8.2834529936857060e-01 -2.4636282382138161e-01 0.0000000000000000e+00 8.4231824439536951e-01 -4.0640392177483797e-01 0.0000000000000000e+00 8.7088439778150784e-01 -5.5433612704121005e-01 0.0000000000000000e+00 8.4131097568589552e-01 -2.0013676672874747e-01 0.0000000000000000e+00 6.7558217601655113e-01 -6.0203295768714804e-01 0.0000000000000000e+00 6.7153802502874305e-01 -4.0583219518110225e-01 0.0000000000000000e+00 6.9493577268071138e-01 -7.1673559491945293e-01 0.0000000000000000e+00 8.3325668510391959e-01 -7.8282291254936009e-01 0.0000000000000000e+00 6.6604448148321882e-01 -0.0000000000000000e+00 1.2716605146482632e-01 6.7162201342644212e-01 -0.0000000000000000e+00 2.1238540756705199e-01 8.3482262518528849e-01 -0.0000000000000000e+00 5.4843260532137061e-01 8.2847690871518564e-01 -0.0000000000000000e+00 8.6052365796189845e-01 7.4373127805527373e-01 -0.0000000000000000e+00 5.9459554977737072e-01 6.5840132133877494e-01 -0.0000000000000000e+00 2.7927744814630195e-01 6.6780189735739670e-01 -0.0000000000000000e+00 3.8408526361662421e-01 8.3297025726365348e-01 -0.0000000000000000e+00 7.0878801345938092e-01 8.1262528340863815e-01 -0.0000000000000000e+00 7.3601080888003334e-01 6.4328174895241275e-01 -0.0000000000000000e+00 4.3883617526833674e-01 6.6467382119992824e-01 -7.2427207368248814e-01 1.6837886374612185e-01 2.6941139852234292e-01 -7.4383334184979610e-01 3.5380404179870045e-01 2.2079803794737937e-01 -7.8209720243569225e-01 5.9773471016857493e-01 2.2851187743255888e-01 -7.4691415402101480e-01 8.1228460371115141e-01 2.4877615964300928e-01 -3.5576946339481225e-01 7.4671478387706203e-01 2.6122305504272336e-01 -5.1046215500672942e-01 4.6762868717320250e-01 2.3047945432609743e-01 -5.1369857336183045e-01 2.0654184429095693e-01 2.6074002914322186e-01 -2.2199658543838161e-01 4.2820876500774174e-01 2.3208602790384897e-01 -2.7954292745553982e-01 2.0617328311713104e-01 2.2764749570838205e-01 -8.4210718279135122e-01 4.3183875735707883e-01 3.5415381150161784e-01 -7.2035119038411088e-01 7.1186843353783402e-01 8.0089160316416452e-01 -5.2635387854137994e-01 5.2124525403740207e-01 7.6445339319965055e-01 -7.3501033992193199e-01 1.7902631971130198e-01 7.8685153326839041e-01 -7.8604107983059235e-01 3.8677567388682771e-01 7.7236797514311972e-01 -4.4574118525546663e-01 7.7858001752996542e-01 7.3742328971548676e-01 -2.2693731156411415e-01 7.2822368338491383e-01 7.3316159627577071e-01 -2.0734144227221871e-01 2.5483219067690288e-01 7.3873746104622195e-01 -4.4675441846658953e-01 2.3682592006213465e-01 7.4160037947990720e-01 -2.6508287408745695e-01 4.3658107157648324e-01 8.3360876025257147e-01 -8.5208389041369170e-01 8.4084616335532025e-01 6.6761745788095939e-01 -8.7714100177172583e-01 1.0793359842127047e-01 6.3647281330703653e-01 -8.4168326236603275e-01 5.5425032361591065e-01 6.9480038867606586e-01 -6.5146048932760270e-01 3.0284085901785091e-01 6.5775429940585917e-01 -1.4438750031536071e-01 5.4054991568733424e-01 6.8876795666602997e-01 - -109 172 27 28 -147 168 242 167 -249 212 211 252 -191 185 45 257 -52 164 146 51 -14 131 241 20 -176 182 177 251 -162 106 37 38 -239 154 243 151 -173 98 245 242 -241 113 242 240 -239 154 151 152 -187 252 192 200 -106 162 37 105 -246 245 243 155 -244 239 243 121 -245 98 173 172 -52 139 146 157 -47 142 124 167 -163 92 88 238 -26 97 36 166 -179 257 193 248 -96 240 94 247 -106 120 244 246 -127 126 124 242 -94 240 96 93 -33 128 34 100 -256 255 249 148 -242 113 100 111 -135 125 134 241 -44 131 135 45 -164 52 146 157 -130 132 133 242 -139 88 238 157 -241 20 89 14 -35 129 112 34 -20 241 91 123 -164 238 157 146 -40 163 101 92 -96 239 240 247 -136 241 14 135 -238 139 157 146 -119 240 103 118 -114 243 242 113 -245 172 168 169 -42 43 130 133 -244 239 121 238 -245 173 168 172 -116 109 115 245 -240 241 104 91 -120 115 122 243 -132 42 41 124 -241 104 91 112 -146 160 141 51 -20 14 45 1 -129 241 112 100 -170 126 47 46 -114 243 113 122 -170 31 110 126 -130 134 242 133 -170 124 242 167 -88 92 163 12 -243 240 239 151 -217 215 249 251 -241 129 128 100 -238 141 160 244 -99 127 242 126 -142 53 47 41 -163 108 101 238 -243 149 148 242 -229 223 254 228 -140 228 223 48 -151 247 138 137 -242 125 130 128 -240 151 150 137 -240 247 151 137 -107 165 106 244 -114 243 122 115 -130 134 133 43 -113 243 242 240 -140 49 158 48 -244 246 243 155 -250 205 226 222 -145 158 159 246 -169 174 56 144 -154 151 156 243 -241 113 240 119 -239 154 152 244 -132 142 242 124 -206 85 226 84 -172 109 27 171 -19 20 91 123 -240 119 113 118 -243 150 242 240 -243 150 240 151 -110 98 29 173 -141 51 160 50 -252 132 253 153 -105 97 116 246 -163 88 157 238 -25 19 123 0 -245 173 242 168 -95 239 139 238 -246 120 244 243 -244 152 141 154 -21 40 92 12 -170 47 124 167 -212 249 248 252 -242 241 125 128 -157 18 13 2 -186 253 252 189 -245 120 246 243 -32 33 111 127 -14 131 20 45 -41 53 47 5 -93 96 23 103 -55 143 147 168 -149 242 134 133 -16 247 137 138 -109 98 245 172 -196 197 79 235 -18 95 17 139 -94 16 137 15 -135 125 241 131 -171 97 246 245 -162 161 105 246 -165 108 163 238 -95 88 92 238 -97 116 246 245 -97 109 245 171 -109 97 245 116 -174 171 246 245 -238 141 244 152 -140 174 144 57 -152 139 238 146 -242 128 111 100 -235 197 79 80 -22 21 101 92 -172 109 171 245 -128 33 111 100 -255 140 254 225 -18 88 95 139 -152 239 238 139 -25 104 91 24 -241 91 123 112 -241 113 119 100 -241 150 136 240 -99 242 127 111 -33 128 111 127 -35 25 123 0 -103 96 23 102 -245 143 169 168 -73 66 68 201 -110 173 29 170 -128 242 111 127 -113 243 240 118 -25 104 112 91 -130 242 128 127 -245 143 147 148 -66 179 68 201 -161 97 36 105 -99 110 31 126 -97 171 246 166 -147 245 242 168 -161 59 58 166 -247 240 151 239 -174 161 246 166 -246 159 145 244 -130 132 242 124 -164 160 238 146 -57 174 144 56 -98 109 28 172 -93 240 103 104 -255 140 225 145 -193 180 185 257 -228 144 254 233 -240 241 150 242 -15 136 89 14 -165 162 106 244 -14 131 45 135 -161 105 36 37 -245 148 243 155 -256 196 261 253 -179 183 248 178 -143 245 144 148 -145 158 246 140 -145 158 140 49 -143 55 56 169 -245 120 243 115 -254 148 255 256 -113 243 118 122 -161 97 105 246 -120 107 106 244 -110 99 242 126 -250 205 206 226 -18 52 157 139 -240 150 136 137 -185 180 193 68 -171 174 246 166 -161 162 105 37 -174 161 166 59 -172 245 171 169 -161 36 166 58 -130 242 127 124 -245 114 243 242 -142 54 167 53 -255 148 254 155 -97 161 36 166 -239 117 101 102 -233 144 56 57 -139 247 152 239 -148 153 147 242 -138 17 16 90 -95 17 138 90 -36 7 166 58 -108 239 101 238 -224 145 141 255 -240 239 96 102 -180 185 67 68 -96 239 92 101 -241 113 100 242 -139 95 17 138 -96 240 102 103 -149 150 134 242 -261 144 254 148 -148 149 249 252 -214 260 249 255 -96 239 101 102 -136 150 241 135 -217 218 214 249 -96 22 102 101 -88 95 139 238 -109 97 27 171 -135 125 131 44 -174 161 59 158 -241 129 125 128 -241 131 125 129 -154 141 244 145 -139 247 239 95 -20 241 89 91 -240 94 137 136 -14 131 135 241 -126 170 124 242 -42 43 133 189 -120 121 107 244 -135 125 44 134 -88 157 13 12 -52 18 157 2 -252 153 149 133 -175 176 250 184 -93 240 104 91 -152 247 151 239 -92 22 96 101 -239 95 92 238 -239 118 117 102 -16 247 138 90 -238 239 101 92 -185 193 257 191 -119 241 104 240 -240 241 91 89 -243 150 151 156 -164 163 157 238 -171 174 169 245 -108 239 238 121 -245 120 115 116 -148 255 156 155 -26 7 166 36 -16 247 90 94 -121 120 243 244 -241 150 134 135 -93 240 91 89 -165 108 238 107 -174 140 158 48 -121 239 243 117 -241 242 100 128 -246 162 158 159 -171 97 27 26 -161 162 158 246 -113 114 111 242 -94 240 93 89 -243 149 242 150 -174 246 144 245 -149 153 242 133 -243 149 150 156 -243 148 156 155 -191 190 248 134 -120 121 243 122 -132 42 133 189 -170 31 126 46 -142 53 167 47 -255 154 156 155 -143 245 147 168 -110 98 173 242 -30 110 29 170 -245 114 242 98 -148 245 243 242 -165 107 238 244 -160 165 238 244 -165 108 107 39 -163 40 12 92 -238 107 121 244 -121 107 238 108 -40 21 3 12 -220 255 209 254 -108 163 101 40 -191 193 257 248 -35 25 112 123 -136 241 89 14 -165 162 244 159 -160 165 244 159 -173 98 28 172 -98 173 28 29 -25 91 112 123 -246 140 144 155 -88 18 13 157 -88 163 157 12 -48 174 59 158 -93 103 23 24 -19 25 123 91 -104 93 91 24 -96 247 95 239 -247 240 94 137 -140 246 145 155 -130 134 43 125 -43 44 125 134 -163 108 39 40 -236 261 253 147 -165 107 38 39 -142 231 253 236 -240 119 103 104 -174 140 144 246 -245 114 98 115 -143 169 56 144 -143 245 169 144 -131 20 123 241 -153 142 147 242 -32 99 126 127 -110 173 170 242 -241 119 112 100 -15 94 89 136 -241 119 104 112 -99 32 126 31 -238 141 152 146 -146 160 51 164 -238 141 146 160 -245 174 169 144 -171 97 26 166 -114 99 111 242 -190 252 133 189 -121 117 243 122 -154 244 243 155 -109 98 115 245 -141 159 50 160 -241 242 134 150 -137 94 15 136 -112 129 100 34 -165 162 38 106 -31 30 4 46 -170 31 46 30 -236 261 147 232 -132 153 133 242 -48 6 59 57 -54 55 147 168 -148 254 155 144 -174 48 59 57 -244 154 145 155 -245 114 115 243 -246 244 145 155 -161 97 246 166 -108 239 121 117 -108 239 117 101 -141 159 160 244 -243 149 156 148 -54 147 167 168 -165 108 39 163 -239 96 92 95 -88 18 157 139 -185 180 67 14 -241 242 125 134 -54 142 167 147 -129 241 123 112 -205 83 222 221 -254 220 225 223 -140 174 57 48 -240 94 136 89 -241 240 136 89 -104 93 24 103 -224 226 222 250 -96 247 94 90 -21 40 101 92 -163 238 101 92 -220 255 254 225 -240 118 102 103 -118 240 102 239 -96 240 103 93 -64 207 63 177 -243 118 122 117 -156 260 255 249 -163 160 165 238 -174 161 158 246 -175 219 61 60 -247 95 138 90 -243 240 118 239 -142 132 242 153 -129 35 112 123 -131 129 241 123 -96 22 23 102 -244 239 238 152 -239 154 244 243 -107 165 38 106 -110 99 114 242 -245 120 116 246 -141 159 244 145 -175 184 250 258 -140 174 158 246 -106 105 116 246 -170 126 124 47 -130 132 124 42 -260 156 154 151 -41 142 124 47 -170 31 30 110 -247 152 151 138 -132 142 124 41 -243 118 117 239 -139 247 95 138 -187 72 200 71 -139 247 138 152 -246 162 159 244 -245 246 144 155 -129 128 100 34 -168 173 242 167 -143 55 169 168 -245 148 155 144 -170 173 167 242 -130 134 125 242 -163 160 238 164 -84 205 83 222 -252 132 189 253 -162 106 244 246 -50 49 159 145 -147 142 167 242 -106 162 105 246 -250 214 255 260 -154 243 156 155 -124 142 242 167 -182 137 181 259 -99 32 111 127 -145 158 49 159 -120 106 116 246 -84 206 205 226 -141 159 145 50 -245 148 147 242 -130 132 42 133 -149 153 148 242 -98 110 114 242 -126 110 170 242 -16 247 94 137 -247 96 95 90 -83 209 82 221 -150 259 151 249 -191 44 190 134 -204 87 220 229 -251 215 249 248 -197 231 235 253 -255 154 145 141 -204 87 229 76 -228 144 233 57 -213 215 248 212 -248 212 252 200 -77 195 78 234 -255 224 222 250 -255 209 205 221 -212 252 200 199 -253 256 249 148 -187 72 193 201 -76 11 81 87 -85 219 62 202 -256 254 234 194 -250 139 251 260 -183 181 15 136 -224 145 50 141 -65 208 203 178 -207 217 251 215 -195 256 234 194 -254 229 234 194 -231 142 253 188 -138 151 137 259 -76 77 229 194 -204 87 76 81 -44 191 135 134 -235 261 196 253 -142 253 147 236 -182 138 137 259 -175 176 62 202 -85 250 219 202 -252 186 189 192 -138 182 137 16 -142 231 236 53 -187 252 190 192 -228 144 57 140 -237 144 56 233 -139 146 250 258 -183 259 248 178 -201 213 248 200 -261 144 148 143 -230 256 196 261 -256 211 253 249 -201 187 200 248 -66 65 179 208 -207 176 202 63 -252 192 200 199 -211 212 249 218 -135 191 257 248 -14 183 257 180 -151 260 249 251 -85 250 202 206 -150 252 249 149 -198 192 199 70 -220 209 82 204 -256 211 249 210 -77 195 234 194 -228 6 48 57 -187 72 201 200 -52 18 2 60 -249 211 218 210 -256 211 210 196 -236 54 232 147 -256 216 214 255 -231 75 74 188 -207 64 203 177 -256 230 195 234 -256 211 196 253 -231 186 75 188 -76 229 204 194 -255 209 254 216 -176 175 250 202 -220 204 82 81 -255 140 145 155 -175 219 250 202 -217 260 251 249 -55 261 232 147 -196 261 235 230 -259 251 249 248 -187 252 200 248 -148 147 253 261 -55 261 147 143 -186 231 253 188 -252 149 134 133 -253 231 235 236 -261 230 237 232 -236 261 232 235 -198 186 70 69 -236 261 235 253 -229 223 228 87 -16 182 137 181 -254 140 155 144 -212 252 199 211 -260 139 251 138 -139 184 251 138 -230 196 78 79 -255 260 156 154 -204 87 81 220 -251 139 250 184 -208 65 179 178 -209 255 205 214 -140 254 223 228 -140 49 48 223 -183 181 259 178 -252 187 190 248 -217 260 250 251 -54 142 147 236 -151 260 251 138 -186 198 192 252 -151 150 249 156 -231 186 197 75 -180 193 68 179 -261 254 234 256 -179 257 248 183 -183 259 136 248 -65 64 178 203 -138 17 182 16 -71 187 192 200 -251 151 259 249 -224 260 146 250 -49 140 145 225 -150 149 249 156 -72 73 193 201 -212 249 218 215 -192 71 199 70 -230 256 261 234 -186 231 197 253 -54 142 236 53 -148 255 249 156 -257 183 14 136 -150 137 259 136 -203 64 178 177 -229 220 204 254 -132 142 253 153 -186 198 197 69 -259 203 178 177 -252 198 192 199 -230 256 195 196 -154 152 260 151 -207 176 177 251 -193 73 68 201 -207 251 177 259 -255 140 155 254 -254 256 255 216 -227 219 250 258 -229 223 220 254 -198 186 197 253 -153 142 253 147 -261 144 143 237 -254 194 216 204 -228 86 223 48 -231 142 188 53 -234 254 261 237 -251 182 177 259 -134 248 150 252 -135 14 257 45 -209 254 216 204 -134 248 135 150 -256 214 210 249 -198 186 253 252 -259 181 177 178 -18 184 139 17 -198 186 192 70 -16 137 15 181 -184 176 250 251 -224 260 250 255 -182 181 177 259 -185 14 1 45 -55 54 147 232 -231 53 188 74 -132 142 41 188 -252 132 153 133 -252 132 133 189 -42 132 188 189 -53 41 188 74 -137 181 259 136 -181 183 259 136 -261 143 148 147 -249 211 253 252 -44 191 45 135 -132 42 188 41 -151 259 150 137 -256 195 210 216 -213 208 201 248 -142 132 253 188 -15 183 136 14 -224 260 255 141 -256 196 210 195 -179 193 68 201 -252 153 148 149 -132 253 188 189 -215 203 213 248 -230 261 237 234 -203 208 248 178 -207 203 248 259 -237 254 144 233 -248 212 200 213 -85 250 206 226 -203 208 213 248 -252 253 249 148 -255 205 222 221 -253 186 188 189 -228 86 48 6 -184 176 251 182 -256 255 214 249 -255 225 221 222 -252 190 133 134 -51 52 227 146 -250 214 260 217 -217 250 202 251 -202 250 217 206 -214 218 210 249 -14 185 257 45 -249 149 148 156 -217 207 251 202 -219 9 85 62 -209 220 82 221 -260 146 250 139 -211 252 198 253 -179 193 201 248 -254 237 234 233 -85 250 226 219 -229 77 234 194 -196 197 253 211 -196 230 78 195 -229 254 234 233 -205 209 83 221 -208 179 248 178 -195 256 194 216 -229 254 233 228 -220 255 225 221 -261 144 237 254 -227 250 146 258 -257 248 136 135 -190 43 133 134 -220 255 221 209 -253 147 148 153 -55 261 143 237 -230 261 235 232 -49 50 225 145 -190 252 248 134 -205 84 226 222 -55 261 237 232 -228 144 140 254 -154 141 260 152 -184 139 17 138 -55 143 56 237 -196 197 235 253 -53 41 74 5 -197 75 69 80 -198 252 211 199 -231 197 235 80 -231 197 80 75 -227 219 258 60 -75 10 69 80 -66 208 179 201 -261 256 253 148 -179 257 183 180 -184 139 250 258 -250 205 222 255 -251 176 250 202 -207 203 259 177 -250 219 227 226 -146 250 227 224 -53 142 188 41 -187 193 248 201 -179 257 180 193 -176 63 62 202 -259 203 248 178 -252 150 249 248 -255 154 155 145 -195 230 78 234 -257 248 183 136 -56 144 237 143 -150 259 249 248 -187 193 191 248 -138 182 251 259 -229 254 204 194 -252 153 253 148 -229 223 87 220 -260 156 151 249 -87 86 223 228 -152 151 138 260 -14 136 135 257 -187 191 190 248 -225 255 224 222 -227 226 224 250 -208 179 201 248 -209 220 254 204 -192 71 200 199 -256 254 194 216 -224 260 141 146 -152 260 138 139 -250 214 217 206 -259 150 136 248 -216 256 214 210 -181 137 15 136 -219 175 62 202 -209 255 214 216 -8 66 68 73 -227 52 258 146 -154 255 260 141 -151 138 251 259 -52 139 258 146 -140 228 48 57 -184 18 139 258 -224 145 255 225 -197 186 69 75 -256 254 148 261 -250 214 205 255 -150 136 248 135 -51 227 224 146 -215 207 203 248 -230 196 79 235 -205 214 250 206 -260 146 139 152 -184 17 182 138 -184 175 18 258 -227 52 60 258 -150 252 149 134 -140 254 225 223 -135 191 248 134 -18 175 60 258 -192 252 190 189 -175 219 62 61 -219 175 250 258 -214 260 217 249 -135 191 45 257 -251 207 248 259 -43 190 133 189 -207 176 251 202 -44 43 190 134 -141 51 224 146 -219 175 258 60 -217 218 249 215 -197 198 253 211 -138 184 251 182 -260 146 152 141 -52 18 60 258 -185 180 14 257 -224 145 225 50 -219 9 62 61 -18 52 139 258 -49 140 225 223 -141 51 50 224 -185 14 67 1 -207 215 251 248 -207 176 63 177 -212 249 215 248 - -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 - -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 - -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 - \ No newline at end of file diff --git a/cpp/test/mesh/read_named_meshtags.cpp b/cpp/test/mesh/read_named_meshtags.cpp index ea002e0f54c..44c18443f19 100644 --- a/cpp/test/mesh/read_named_meshtags.cpp +++ b/cpp/test/mesh/read_named_meshtags.cpp @@ -13,8 +13,10 @@ #include #include #include +#include #include +#include #include using namespace dolfinx; @@ -26,23 +28,60 @@ void test_read_named_meshtags() { const std::string mesh_file = "Domain.xdmf"; + constexpr std::int32_t domain_value = 1; + constexpr std::int32_t material_value = 2; + + // Create mesh + auto part = mesh::create_cell_partitioner(mesh::GhostMode::none); + auto mesh = std::make_shared>( + mesh::create_rectangle(MPI_COMM_WORLD, {{{0.0, 0.0}, {1.0, 1.0}}}, {3, 3}, + mesh::CellType::triangle, part)); + + const std::int32_t n_cells = mesh->topology()->index_map(2)->size_local(); + std::vector indices(n_cells); + std::iota(std::begin(indices), std::end(indices), 0); + + std::vector domain_values(n_cells); + std::ranges::fill(domain_values, domain_value); + + std::vector material_values(n_cells); + std::ranges::fill(material_values, material_value); + + mesh::MeshTags mt_domains(mesh->topology(), 2, indices, + domain_values); + mt_domains.name = "domain"; + + mesh::MeshTags mt_materials(mesh->topology(), 2, indices, + material_values); + mt_materials.name = "material"; + + io::XDMFFile file(mesh->comm(), mesh_file, "w", + io::XDMFFile::Encoding::ASCII); + file.write_mesh(*mesh); + file.write_meshtags(mt_domains, mesh->geometry(), + "/Xdmf/Domain/mesh/Geometry"); + file.write_meshtags(mt_materials, mesh->geometry(), + "/Xdmf/Domain/Grid/Geometry"); + + file.close(); + io::XDMFFile meshFile(MPI_COMM_WORLD, mesh_file, "r", io::XDMFFile::Encoding::ASCII); - auto mesh = std::make_shared>(meshFile.read_mesh( - fem::CoordinateElement(mesh::CellType::tetrahedron, 1), - mesh::GhostMode::none, "Grid")); + mesh = std::make_shared>(meshFile.read_mesh( + fem::CoordinateElement(mesh::CellType::triangle, 1), + mesh::GhostMode::none, "mesh")); const auto mt_domain = meshFile.read_meshtags_by_label( - *mesh, "Grid", "domain", "/Xdmf/Domain"); + *mesh, "domain", "domain", "/Xdmf/Domain"); - CHECK(mt_domain.values().front() == 0); + CHECK(mt_domain.values().front() == domain_value); const auto mt_material = meshFile.read_meshtags_by_label( - *mesh, "Grid", "material", "/Xdmf/Domain"); + *mesh, "material", "material", "/Xdmf/Domain"); - CHECK(mt_material.values().front() == 1); + CHECK(mt_material.values().front() == material_value); - CHECK_THROWS(meshFile.read_meshtags_by_label(*mesh, "Grid", "missing")); + CHECK_THROWS(meshFile.read_meshtags_by_label(*mesh, "mesh", "missing")); } } // namespace From b4ed95a8bcacea15968faa2e8caec97759efdbb7 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Wed, 17 Jul 2024 13:49:35 +0200 Subject: [PATCH 15/18] Dodge issue 3316 --- cpp/test/mesh/read_named_meshtags.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/cpp/test/mesh/read_named_meshtags.cpp b/cpp/test/mesh/read_named_meshtags.cpp index 44c18443f19..805ed29e6d3 100644 --- a/cpp/test/mesh/read_named_meshtags.cpp +++ b/cpp/test/mesh/read_named_meshtags.cpp @@ -55,8 +55,7 @@ void test_read_named_meshtags() material_values); mt_materials.name = "material"; - io::XDMFFile file(mesh->comm(), mesh_file, "w", - io::XDMFFile::Encoding::ASCII); + io::XDMFFile file(mesh->comm(), mesh_file, "w", io::XDMFFile::Encoding::HDF5); file.write_mesh(*mesh); file.write_meshtags(mt_domains, mesh->geometry(), "/Xdmf/Domain/mesh/Geometry"); @@ -66,7 +65,7 @@ void test_read_named_meshtags() file.close(); io::XDMFFile meshFile(MPI_COMM_WORLD, mesh_file, "r", - io::XDMFFile::Encoding::ASCII); + io::XDMFFile::Encoding::HDF5); mesh = std::make_shared>(meshFile.read_mesh( fem::CoordinateElement(mesh::CellType::triangle, 1), mesh::GhostMode::none, "mesh")); From 3bbeb7efaa7b47a35fcba542928be95e5476667c Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Thu, 26 Sep 2024 18:25:44 +0200 Subject: [PATCH 16/18] Applied review suggestions --- cpp/dolfinx/io/XDMFFile.cpp | 23 +++++++++++++++++------ cpp/dolfinx/io/XDMFFile.h | 6 +++--- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/cpp/dolfinx/io/XDMFFile.cpp b/cpp/dolfinx/io/XDMFFile.cpp index 08ece3eae96..eb397ddb458 100644 --- a/cpp/dolfinx/io/XDMFFile.cpp +++ b/cpp/dolfinx/io/XDMFFile.cpp @@ -334,9 +334,9 @@ template void XDMFFile::write_meshtags(const mesh::MeshTags&, /// @endcond //----------------------------------------------------------------------------- mesh::MeshTags -XDMFFile::read_meshtags_by_label(const mesh::Mesh& mesh, - std::string name, std::string attribute_label, - std::string xpath) +XDMFFile::read_meshtags_by_name(const mesh::Mesh& mesh, + std::string name, std::string attribute_name, + std::string xpath) { spdlog::info("XDMF read meshtags ({})", name); pugi::xml_node node = _xml_doc->select_node(xpath.c_str()).node(); @@ -351,23 +351,34 @@ XDMFFile::read_meshtags_by_label(const mesh::Mesh& mesh, pugi::xml_node attribute_node = grid_node.child("Attribute"); pugi::xml_node values_data_node = attribute_node.child("DataItem"); - if (!attribute_label.empty()) + if (!attribute_name.empty()) { + // Search for an attribute by the name of "Name" and whose value is the + // provided `attribute_name`. bool found = false; + + // Keep searching until it hasn't been found and there are more attribute + // nodes to search. while (!found and attribute_node) { pugi::xml_attribute hint; + // Get the next attribute node pugi::xml_attribute name = attribute_node.attribute("Name", hint); - if (std::string(name.value()) == attribute_label) + // If it has the right name + if (name.value() == attribute_name) { + // Note it down and end the search values_data_node = attribute_node.child("DataItem"); found = true; } attribute_node = attribute_node.next_sibling("Attribute"); } + + // If the search ended after testing all attributes but without finding + // a match, throw an error. if (!found) { - throw std::runtime_error("Attribute with name '" + attribute_label + throw std::runtime_error("Attribute with name '" + attribute_name + "' not found."); } } diff --git a/cpp/dolfinx/io/XDMFFile.h b/cpp/dolfinx/io/XDMFFile.h index 140258f0f65..6dae41b15de 100644 --- a/cpp/dolfinx/io/XDMFFile.h +++ b/cpp/dolfinx/io/XDMFFile.h @@ -168,11 +168,11 @@ class XDMFFile /// @param[in] mesh The Mesh that the data is defined on /// @param[in] name Name of the grid node in the xml file. E.g. "Material" in /// Grid Name="Material" GridType="Uniform" - /// @param[in] attribute_label The name of the attribute to read + /// @param[in] attribute_name The name of the attribute to read /// @param[in] xpath XPath where MeshTags Grid is stored in file mesh::MeshTags - read_meshtags_by_label(const mesh::Mesh& mesh, std::string name, - std::string attribute_label, + read_meshtags_by_name(const mesh::Mesh& mesh, std::string name, + std::string attribute_name, std::string xpath = "/Xdmf/Domain"); /// Read MeshTags From 7ee33ecf3d1ab0117692e057d77532cb0290adf8 Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Fri, 27 Sep 2024 10:05:05 +0200 Subject: [PATCH 17/18] Fix missing renaming --- cpp/dolfinx/io/XDMFFile.cpp | 2 +- cpp/test/mesh/read_named_meshtags.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cpp/dolfinx/io/XDMFFile.cpp b/cpp/dolfinx/io/XDMFFile.cpp index eb397ddb458..6141b29fc63 100644 --- a/cpp/dolfinx/io/XDMFFile.cpp +++ b/cpp/dolfinx/io/XDMFFile.cpp @@ -424,7 +424,7 @@ mesh::MeshTags XDMFFile::read_meshtags(const mesh::Mesh& mesh, std::string name, std::string xpath) { - return read_meshtags_by_label(mesh, name, std::string(), xpath); + return read_meshtags_by_name(mesh, name, std::string(), xpath); } //----------------------------------------------------------------------------- std::pair XDMFFile::read_cell_type(std::string grid_name, diff --git a/cpp/test/mesh/read_named_meshtags.cpp b/cpp/test/mesh/read_named_meshtags.cpp index 805ed29e6d3..cb43cc67fad 100644 --- a/cpp/test/mesh/read_named_meshtags.cpp +++ b/cpp/test/mesh/read_named_meshtags.cpp @@ -70,17 +70,17 @@ void test_read_named_meshtags() fem::CoordinateElement(mesh::CellType::triangle, 1), mesh::GhostMode::none, "mesh")); - const auto mt_domain = meshFile.read_meshtags_by_label( + const auto mt_domain = meshFile.read_meshtags_by_name( *mesh, "domain", "domain", "/Xdmf/Domain"); CHECK(mt_domain.values().front() == domain_value); - const auto mt_material = meshFile.read_meshtags_by_label( + const auto mt_material = meshFile.read_meshtags_by_name( *mesh, "material", "material", "/Xdmf/Domain"); CHECK(mt_material.values().front() == material_value); - CHECK_THROWS(meshFile.read_meshtags_by_label(*mesh, "mesh", "missing")); + CHECK_THROWS(meshFile.read_meshtags_by_name(*mesh, "mesh", "missing")); } } // namespace From 48e083544a5bada5fb36ef65bd065ef262e9baea Mon Sep 17 00:00:00 2001 From: Massimiliano Leoni Date: Fri, 27 Sep 2024 10:12:28 +0200 Subject: [PATCH 18/18] Fix python wrapper --- python/dolfinx/wrappers/io.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/dolfinx/wrappers/io.cpp b/python/dolfinx/wrappers/io.cpp index 6956fc6bdd3..c74d1e092d1 100644 --- a/python/dolfinx/wrappers/io.cpp +++ b/python/dolfinx/wrappers/io.cpp @@ -310,8 +310,8 @@ void io(nb::module_& m) nb::arg("name") = "mesh", nb::arg("xpath") = "/Xdmf/Domain") .def("read_cell_type", &dolfinx::io::XDMFFile::read_cell_type, nb::arg("name") = "mesh", nb::arg("xpath") = "/Xdmf/Domain") - .def("read_meshtags", &dolfinx::io::XDMFFile::read_meshtags_by_label, - nb::arg("mesh"), nb::arg("name"), nb::arg("attribute_label"), + .def("read_meshtags", &dolfinx::io::XDMFFile::read_meshtags_by_name, + nb::arg("mesh"), nb::arg("name"), nb::arg("attribute_name"), nb::arg("xpath")) .def("write_information", &dolfinx::io::XDMFFile::write_information, nb::arg("name"), nb::arg("value"), nb::arg("xpath") = "/Xdmf/Domain")