Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <cstdint> 7 : #include <iosfwd> 8 : 9 : namespace evolution::dg { 10 : /// \brief Treatment of time stepping across an element boundary. 11 : /// 12 : /// \details Indicates how boundary corrections should be handled for 13 : /// local time-stepping across a mortar. This controls the 14 : /// communication algorithm and data structures used. 15 : /// 16 : /// \note The code controlling the time step will not directly check 17 : /// this policy, but must be configured to make choices consistent 18 : /// with it. 19 1 : enum class TimeSteppingPolicy : uint8_t { 20 : /// Default value is uninitialized. 21 : Uninitialized, 22 : /// The elements on the two sides of the mortar must have the same 23 : /// step size. Communicated boundary corrections will be added 24 : /// directly to the volume RHS calculation, and algorithms that are 25 : /// not local-time-stepping aware (such as subcell) can be used at 26 : /// this boundary. This is the only valid policy in a global 27 : /// time-stepping evolution. 28 : EqualRate, 29 : /// The elements on the two sides of the mortar may have different 30 : /// step sizes. A flux-conservative boundary integral will be 31 : /// performed to couple the elements. 32 : Conservative, 33 : }; 34 : 35 : /// Output operator for a TimeSteppingPolicy. 36 1 : std::ostream& operator<<(std::ostream& os, TimeSteppingPolicy value); 37 : } // namespace evolution::dg