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 : #pragma once 11 : 12 : #include "MultiApp.h" 13 : 14 : #include "libmesh/numeric_vector.h" 15 : 16 : class TransientBase; 17 : 18 : /** 19 : * MultiApp Implementation for Transient Apps. 20 : * In particular, this is important because TransientMultiApps 21 : * will be taken into account in the time step selection process. 22 : */ 23 : class TransientMultiApp : public MultiApp 24 : { 25 : public: 26 : static InputParameters validParams(); 27 : 28 : TransientMultiApp(const InputParameters & parameters); 29 : 30 : virtual NumericVector<Number> & appTransferVector(unsigned int app, 31 : std::string var_name) override; 32 : 33 : virtual void initialSetup() override; 34 : 35 : virtual bool solveStep(Real dt, Real target_time, bool auto_advance = true) override; 36 : 37 : virtual void incrementTStep(Real target_time) override; 38 : 39 : virtual void finishStep(bool recurse_through_multiapp_levels = false) override; 40 : 41 : virtual void resetApp(unsigned int global_app, Real time) override; 42 : 43 : /** 44 : * Finds the smallest dt from among any of the apps. 45 : */ 46 : Real computeDT(); 47 : 48 : private: 49 : /** 50 : * Setup the executioner for the local app. 51 : * 52 : * @param i The local app number for the app that needs to be setup. 53 : * @param time The time to set as the current time for the App 54 : */ 55 : void setupApp(unsigned int i, Real time = 0.0); 56 : 57 : std::vector<TransientBase *> _transient_executioners; 58 : 59 : bool _sub_cycling; 60 : bool _interpolate_transfers; 61 : bool _detect_steady_state; 62 : bool _output_sub_cycles; 63 : 64 : unsigned int _max_failures; 65 : bool _tolerate_failure; 66 : 67 : unsigned int _failures; 68 : 69 : bool _catch_up; 70 : Real _max_catch_up_steps; 71 : 72 : /// Is it our first time through the execution loop? 73 : bool & _first; 74 : 75 : /// The variables that have been transferred to. Used when doing transfer interpolation. This will be cleared after each solve. 76 : std::vector<std::string> _transferred_vars; 77 : 78 : /// The DoFs associated with all of the currently transferred variables. 79 : std::set<dof_id_type> _transferred_dofs; 80 : 81 : std::vector<std::map<std::string, unsigned int>> _output_file_numbers; 82 : 83 : bool _auto_advance; 84 : 85 : std::set<unsigned int> _reset; 86 : 87 : /// Flag for toggling console output on sub cycles 88 : bool _print_sub_cycles; 89 : }; 90 : 91 : /** 92 : * Utility class for catching solve failure errors so that MOOSE 93 : * can recover state before continuing. 94 : */ 95 : class MultiAppSolveFailure : public std::runtime_error 96 : { 97 : public: 98 97 : MultiAppSolveFailure(const std::string & error) throw() : runtime_error(error) {} 99 : 100 : MultiAppSolveFailure(const MultiAppSolveFailure & e) throw() : runtime_error(e) {} 101 : 102 97 : ~MultiAppSolveFailure() throw() {} 103 : };