Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://mooseframework.inl.gov 3 : //* 4 : //* All rights reserved, see COPYRIGHT for full restrictions 5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT 6 : //* 7 : //* Licensed under LGPL 2.1, please see LICENSE for details 8 : //* https://www.gnu.org/licenses/lgpl-2.1.html 9 : 10 : #include "ExodusFileTimes.h" 11 : #include "MooseUtils.h" 12 : #include "libmesh/serial_mesh.h" 13 : #include "libmesh/exodusII_io.h" 14 : 15 : registerMooseObject("MooseApp", ExodusFileTimes); 16 : 17 : InputParameters 18 14291 : ExodusFileTimes::validParams() 19 : { 20 14291 : InputParameters params = Times::validParams(); 21 28582 : params.addClassDescription("Import times from one or more Exodus files."); 22 57164 : params.addRequiredParam<std::vector<FileName>>("files", "Exodus file(s) with the times"); 23 : // File is loaded only on zeroth process 24 28582 : params.set<bool>("auto_broadcast") = true; 25 : // Exodus file set the time sequence during initialization stage 26 14291 : params.set<bool>("dynamic_time_sequence") = false; 27 : 28 14291 : return params; 29 0 : } 30 : 31 13 : ExodusFileTimes::ExodusFileTimes(const InputParameters & parameters) : Times(parameters) 32 : { 33 : // Reading exodus files on all ranks could be expensive 34 26 : const auto & times_files = getParam<std::vector<FileName>>("files"); 35 : 36 13 : if (processor_id() == 0) 37 : { 38 30 : for (const auto p_file_it : index_range(times_files)) 39 : { 40 : // Check that the required file exists 41 20 : MooseUtils::checkFileReadable(times_files[p_file_it]); 42 : 43 : // dummy mesh 44 20 : ReplicatedMesh mesh(_communicator); 45 : 46 20 : libMesh::ExodusII_IO exodusII_io(mesh); 47 20 : exodusII_io.read(times_files[p_file_it]); 48 20 : auto & times = exodusII_io.get_time_steps(); 49 : 50 480 : for (const auto & d : times) 51 460 : _times.push_back(d); 52 20 : } 53 : } 54 : 55 : // Sort all the times, but also broadcast to other ranks 56 13 : finalize(); 57 13 : }