| 230 | } |
| 231 | |
| 232 | void fields::load(const char *filename, bool single_parallel_file) { |
| 233 | if (verbosity > 0) |
| 234 | printf("reading fields from file \"%s\" (%d)...\n", filename, single_parallel_file); |
| 235 | |
| 236 | h5file file(filename, h5file::READONLY, single_parallel_file, !single_parallel_file); |
| 237 | |
| 238 | // Read in the current time 't' |
| 239 | int rank; |
| 240 | size_t dims[1] = {1}; |
| 241 | size_t start[1] = {0}; |
| 242 | size_t _t[1]; |
| 243 | file.read_size("t", &rank, dims, 1); |
| 244 | if (rank != 1 || dims[0] != 1) meep::abort("time size mismatch in fields::load"); |
| 245 | if (am_master() || !single_parallel_file) file.read_chunk(1, start, dims, _t); |
| 246 | |
| 247 | if (single_parallel_file) { |
| 248 | file.prevent_deadlock(); |
| 249 | broadcast(0, _t, dims[0]); |
| 250 | } |
| 251 | |
| 252 | t = static_cast<int>(_t[0]); |
| 253 | calc_sources(time()); |
| 254 | |
| 255 | load_fields_chunk_field(&file, single_parallel_file, "f", |
| 256 | [](fields_chunk *chunk, int c, int d) { return &(chunk->f[c][d]); }); |
| 257 | load_fields_chunk_field(&file, single_parallel_file, "f_u", |
| 258 | [](fields_chunk *chunk, int c, int d) { return &(chunk->f_u[c][d]); }); |
| 259 | load_fields_chunk_field(&file, single_parallel_file, "f_w", |
| 260 | [](fields_chunk *chunk, int c, int d) { return &(chunk->f_w[c][d]); }); |
| 261 | load_fields_chunk_field(&file, single_parallel_file, "f_cond", |
| 262 | [](fields_chunk *chunk, int c, int d) { return &(chunk->f_cond[c][d]); }); |
| 263 | load_fields_chunk_field( |
| 264 | &file, single_parallel_file, "f_bfast", |
| 265 | [](fields_chunk *chunk, int c, int d) { return &(chunk->f_bfast[c][d]); }); |
| 266 | load_fields_chunk_field( |
| 267 | &file, single_parallel_file, "f_w_prev", |
| 268 | [](fields_chunk *chunk, int c, int d) { return &(chunk->f_w_prev[c][d]); }); |
| 269 | |
| 270 | // Load DFT chunks. |
| 271 | for (int i = 0; i < num_chunks; i++) { |
| 272 | if (single_parallel_file || chunks[i]->is_mine()) { |
| 273 | char dataname[1024]; |
| 274 | snprintf(dataname, 1024, "chunk%02d", i); |
| 275 | load_dft_hdf5(chunks[i]->dft_chunks, dataname, &file, 0, single_parallel_file); |
| 276 | } |
| 277 | } |
| 278 | } |
| 279 | |
| 280 | } // namespace meep |
no test coverage detected