| 181 | } |
| 182 | |
| 183 | void MshSaver::save_vector_field(const std::string& fieldname, const VectorF& field) { |
| 184 | assert(field.size() == m_dim * m_num_nodes); |
| 185 | fout << "$NodeData" << std::endl; |
| 186 | fout << "1" << std::endl; // num string tags. |
| 187 | fout << "\"" << fieldname << "\"" << std::endl; |
| 188 | fout << "1" << std::endl; // num real tags. |
| 189 | fout << "0.0" << std::endl; // time value. |
| 190 | fout << "3" << std::endl; // num int tags. |
| 191 | fout << "0" << std::endl; // the time step |
| 192 | fout << "3" << std::endl; // 3-component vector field. |
| 193 | fout << m_num_nodes << std::endl; // number of nodes |
| 194 | |
| 195 | const Float zero = 0.0; |
| 196 | if (m_binary) { |
| 197 | for (size_t i=0; i<m_num_nodes; i++) { |
| 198 | int node_idx = i+1; |
| 199 | fout.write((char*)&node_idx, sizeof(int)); |
| 200 | if (m_dim == 3) |
| 201 | fout.write((char*)&field[i*3], sizeof(Float)*3); |
| 202 | else if (m_dim == 2) { |
| 203 | fout.write((char*)&field[i*2], sizeof(Float)*2); |
| 204 | fout.write((char*)&zero, sizeof(Float)); // Set z=0 |
| 205 | } |
| 206 | } |
| 207 | } else { |
| 208 | for (size_t i=0; i<m_num_nodes; i++) { |
| 209 | int node_idx = i+1; |
| 210 | if (m_dim == 3) { |
| 211 | fout << node_idx |
| 212 | << " " << field[i*3] |
| 213 | << " " << field[i*3+1] |
| 214 | << " " << field[i*3+2] |
| 215 | << std::endl; |
| 216 | } else if (m_dim == 2) { |
| 217 | fout << node_idx |
| 218 | << " " << field[i*2] |
| 219 | << " " << field[i*2+1] |
| 220 | << " " << zero |
| 221 | << std::endl; |
| 222 | } |
| 223 | } |
| 224 | } |
| 225 | fout << "$EndNodeData" << std::endl; |
| 226 | fout.flush(); |
| 227 | } |
| 228 | |
| 229 | void MshSaver::save_elem_scalar_field(const std::string& fieldname, const VectorF& field) { |
| 230 | assert(field.size() == m_num_elements); |
no test coverage detected