Line data Source code
1 : /********************************************************************/ 2 : /* SOFTWARE COPYRIGHT NOTIFICATION */ 3 : /* Cardinal */ 4 : /* */ 5 : /* (c) 2021 UChicago Argonne, LLC */ 6 : /* ALL RIGHTS RESERVED */ 7 : /* */ 8 : /* Prepared by UChicago Argonne, LLC */ 9 : /* Under Contract No. DE-AC02-06CH11357 */ 10 : /* With the U. S. Department of Energy */ 11 : /* */ 12 : /* Prepared by Battelle Energy Alliance, LLC */ 13 : /* Under Contract No. DE-AC07-05ID14517 */ 14 : /* With the U. S. Department of Energy */ 15 : /* */ 16 : /* See LICENSE for full restrictions */ 17 : /********************************************************************/ 18 : 19 : #ifdef ENABLE_OPENMC_COUPLING 20 : 21 : #include "OpenMCWallTime.h" 22 : 23 : #include "openmc/timer.h" 24 : 25 : registerMooseObject("CardinalApp", OpenMCWallTime); 26 : 27 : InputParameters 28 432 : OpenMCWallTime::validParams() 29 : { 30 432 : auto params = GeneralPostprocessor::validParams(); 31 432 : params += OpenMCBase::validParams(); 32 432 : params.addClassDescription("A post-processor which reports OpenMC walltime."); 33 864 : params.addParam<bool>("accumulate_time", 34 864 : true, 35 : "Whether the simulation time should be accumulated over all simulation " 36 : "steps (selected by default) or not."); 37 864 : params.addParam<MooseEnum>("time_type", 38 1296 : MooseEnum(getOpenMCTimeOptions(), "total_elapsed_time"), 39 : "The time to report from OpenMC."); 40 : 41 : // We only get timing information after running OpenMC, so we force execution on TIMESTEP_END. 42 432 : params.set<ExecFlagEnum>("execute_on").clearSetValues(); 43 864 : params.set<ExecFlagEnum>("execute_on") = "TIMESTEP_END"; 44 432 : params.suppressParameter<ExecFlagEnum>("execute_on"); 45 : 46 432 : return params; 47 0 : } 48 : 49 144 : OpenMCWallTime::OpenMCWallTime(const InputParameters & parameters) 50 : : GeneralPostprocessor(parameters), 51 : OpenMCBase(this, parameters), 52 144 : _accumulate_time(getParam<bool>("accumulate_time")), 53 288 : _openmc_time(getParam<MooseEnum>("time_type").getEnum<OpenMCTime>()), 54 144 : _walltime(0.0) 55 : { 56 144 : } 57 : 58 : void 59 288 : OpenMCWallTime::execute() 60 : { 61 288 : if (!_accumulate_time) 62 144 : _walltime = 0.0; 63 : 64 288 : switch (_openmc_time) 65 : { 66 32 : case OpenMCTime::initialization_time: 67 32 : _walltime += openmc::simulation::time_initialize.elapsed(); 68 32 : break; 69 32 : case OpenMCTime::total_simulation_time: 70 32 : _walltime += 71 32 : openmc::simulation::time_inactive.elapsed() + openmc::simulation::time_active.elapsed(); 72 32 : break; 73 32 : case OpenMCTime::transport_time: 74 32 : _walltime += openmc::simulation::time_transport.elapsed(); 75 32 : break; 76 32 : case OpenMCTime::inactive_batch_time: 77 32 : _walltime += openmc::simulation::time_inactive.elapsed(); 78 32 : break; 79 32 : case OpenMCTime::active_batch_time: 80 32 : _walltime += openmc::simulation::time_active.elapsed(); 81 32 : break; 82 32 : case OpenMCTime::fission_bank_time: 83 32 : _walltime += openmc::simulation::time_bank.elapsed(); 84 32 : break; 85 32 : case OpenMCTime::tally_accumulation_time: 86 32 : _walltime += openmc::simulation::time_tallies.elapsed(); 87 32 : break; 88 32 : case OpenMCTime::finalization_time: 89 32 : _walltime += openmc::simulation::time_finalize.elapsed(); 90 32 : break; 91 32 : case OpenMCTime::total_elapsed_time: 92 32 : _walltime += openmc::simulation::time_total.elapsed(); 93 32 : break; 94 0 : default: 95 0 : mooseError("Unhandled OpenMCTime enum!"); 96 : } 97 288 : } 98 : 99 : Real 100 288 : OpenMCWallTime::getValue() const 101 : { 102 288 : return _walltime; 103 : } 104 : 105 : #endif