| 147 | } |
| 148 | |
| 149 | void MSHWriter::write_attribute(MshSaver& saver, const std::string& name, |
| 150 | VectorF& value, size_t dim, size_t num_vertices, size_t num_elements) { |
| 151 | size_t attr_size = value.size(); |
| 152 | |
| 153 | if (attr_size == num_vertices) { |
| 154 | saver.save_scalar_field(name, value); |
| 155 | } else if (attr_size == num_vertices * dim) { |
| 156 | saver.save_vector_field(name, value); |
| 157 | } else if (attr_size == num_vertices * (dim * (dim+1)) / 2 && |
| 158 | attr_size % num_elements != 0) { |
| 159 | throw NotImplementedError("Per-vertex tensor field is not supported."); |
| 160 | } else if (attr_size == num_elements) { |
| 161 | saver.save_elem_scalar_field(name, value); |
| 162 | } else if (attr_size == num_elements * dim) { |
| 163 | saver.save_elem_vector_field(name, value); |
| 164 | } else if (attr_size == num_elements * (dim * (dim + 1)) / 2) { |
| 165 | saver.save_elem_tensor_field(name, value); |
| 166 | } else { |
| 167 | std::stringstream err_msg; |
| 168 | err_msg << "Attribute " << name << " has length " << attr_size << std::endl; |
| 169 | err_msg << "Unable to interpret the attribute type."; |
| 170 | std::cerr << "Warning: "; |
| 171 | std::cerr << err_msg.str() << std::endl; |
| 172 | } |
| 173 | } |
nothing calls this directly
no test coverage detected