| 303 | } |
| 304 | |
| 305 | void MshSaver::save_elem_tensor_field(const std::string& fieldname, const VectorF& field) { |
| 306 | assert(field.size() == m_num_elements * m_dim * (m_dim + 1) / 2); |
| 307 | fout << "$ElementData" << std::endl; |
| 308 | fout << 1 << std::endl; // num string tags. |
| 309 | fout << "\"" << fieldname << "\"" << std::endl; |
| 310 | fout << "1" << std::endl; // num real tags. |
| 311 | fout << "0.0" << std::endl; // time value. |
| 312 | fout << "3" << std::endl; // num int tags. |
| 313 | fout << "0" << std::endl; // the time step |
| 314 | fout << "9" << std::endl; // 9-component tensor field. |
| 315 | fout << m_num_elements << std::endl; // number of elements |
| 316 | |
| 317 | const Float zero = 0.0; |
| 318 | if (m_binary) { |
| 319 | for (size_t i=0; i<m_num_elements; i++) { |
| 320 | int elem_idx = i+1; |
| 321 | fout.write((char*)&elem_idx, sizeof(int)); |
| 322 | if (m_dim == 3) { |
| 323 | const VectorF& val = field.segment(i*6, 6); |
| 324 | Float tensor[9] = { |
| 325 | val[0], val[5], val[4], |
| 326 | val[5], val[1], val[3], |
| 327 | val[4], val[3], val[2] }; |
| 328 | fout.write((char*)tensor, sizeof(Float) * 9); |
| 329 | } else if (m_dim == 2) { |
| 330 | const VectorF& val = field.segment(i*3, 3); |
| 331 | Float tensor[9] = { |
| 332 | val[0], val[2], zero, |
| 333 | val[2], val[1], zero, |
| 334 | zero, zero, zero }; |
| 335 | fout.write((char*)tensor, sizeof(Float)*9); |
| 336 | } |
| 337 | } |
| 338 | } else { |
| 339 | for (size_t i=0; i<m_num_elements; i++) { |
| 340 | int elem_idx = i+1; |
| 341 | if (m_dim == 3) { |
| 342 | const VectorF& val = field.segment(i*6, 6); |
| 343 | fout << elem_idx |
| 344 | << " " << val[0] |
| 345 | << " " << val[5] |
| 346 | << " " << val[4] |
| 347 | << " " << val[5] |
| 348 | << " " << val[1] |
| 349 | << " " << val[3] |
| 350 | << " " << val[4] |
| 351 | << " " << val[3] |
| 352 | << " " << val[2] |
| 353 | << std::endl; |
| 354 | } else if (m_dim == 2) { |
| 355 | const VectorF& val = field.segment(i*3, 3); |
| 356 | fout << elem_idx |
| 357 | << " " << val[0] |
| 358 | << " " << val[2] |
| 359 | << " " << zero |
| 360 | << " " << val[2] |
| 361 | << " " << val[1] |
| 362 | << " " << zero |
no test coverage detected