| 91 | } |
| 92 | |
| 93 | void MshSaver::save_elements( |
| 94 | const VectorI& elements, MshSaver::ElementType type) { |
| 95 | size_t nodes_per_element = 0; |
| 96 | switch (type) { |
| 97 | case TRI: |
| 98 | nodes_per_element = 3; |
| 99 | break; |
| 100 | case QUAD: |
| 101 | nodes_per_element = 4; |
| 102 | break; |
| 103 | case TET: |
| 104 | nodes_per_element = 4; |
| 105 | break; |
| 106 | case HEX: |
| 107 | nodes_per_element = 8; |
| 108 | break; |
| 109 | default: |
| 110 | { |
| 111 | std::stringstream err_msg; |
| 112 | err_msg << "Unsupported element type " << type; |
| 113 | throw NotImplementedError(err_msg.str()); |
| 114 | } |
| 115 | } |
| 116 | m_num_elements = elements.size() / nodes_per_element; |
| 117 | |
| 118 | // Save elements. |
| 119 | fout << "$Elements" << std::endl; |
| 120 | fout << m_num_elements << std::endl; |
| 121 | |
| 122 | if (m_num_elements > 0) { |
| 123 | int elem_type = type; |
| 124 | int num_elems = m_num_elements; |
| 125 | int tags = 0; |
| 126 | if (!m_binary) { |
| 127 | for (size_t i=0; i<elements.size(); i+=nodes_per_element) { |
| 128 | int elem_num = i/nodes_per_element + 1; |
| 129 | VectorI elem = elements.segment(i, nodes_per_element) + |
| 130 | VectorI::Ones(nodes_per_element); |
| 131 | |
| 132 | fout << elem_num << " " << elem_type << " " << tags << " "; |
| 133 | for (size_t j=0; j<nodes_per_element; j++) { |
| 134 | fout << elem[j] << " "; |
| 135 | } |
| 136 | fout << std::endl; |
| 137 | } |
| 138 | } else { |
| 139 | fout.write((char*)&elem_type, sizeof(int)); |
| 140 | fout.write((char*)&num_elems, sizeof(int)); |
| 141 | fout.write((char*)&tags, sizeof(int)); |
| 142 | for (size_t i=0; i<elements.size(); i+=nodes_per_element) { |
| 143 | int elem_num = i/nodes_per_element + 1; |
| 144 | VectorI elem = elements.segment(i, nodes_per_element) + |
| 145 | VectorI::Ones(nodes_per_element); |
| 146 | fout.write((char*)&elem_num, sizeof(int)); |
| 147 | fout.write((char*)elem.data(), sizeof(int)*nodes_per_element); |
| 148 | } |
| 149 | } |
| 150 | } |
nothing calls this directly
no test coverage detected