@@ -72,6 +72,7 @@ module foodie
7272use foodie_integrator_euler_explicit, only : integrator_euler_explicit
7373use foodie_integrator_leapfrog, only : integrator_leapfrog
7474use foodie_integrator_lmm_ssp, only : integrator_lmm_ssp
75+ use foodie_integrator_lmm_ssp_vss, only : integrator_lmm_ssp_vss
7576use foodie_integrator_runge_kutta_emd, only : integrator_runge_kutta_emd
7677use foodie_integrator_runge_kutta_low_storage, only : integrator_runge_kutta_ls
7778use foodie_integrator_runge_kutta_tvd, only : integrator_runge_kutta_tvd
@@ -87,13 +88,14 @@ module foodie
8788public :: integrator_euler_explicit
8889public :: integrator_leapfrog
8990public :: integrator_lmm_ssp
91+ public :: integrator_lmm_ssp_vss
9092public :: integrator_runge_kutta_emd
9193public :: integrator_runge_kutta_ls
9294public :: foodie_integrator
9395public :: integrator_runge_kutta_tvd
9496
9597contains
96- function foodie_integrator (scheme , steps , stages , tolerance , nu , alpha ) result(integrator)
98+ function foodie_integrator (scheme , steps , stages , order , tolerance , nu , alpha ) result(integrator)
9799 ! < Return a concrete instance of [[integrator]] given a scheme selection.
98100 ! <
99101 ! < This is the FOODIE integrators factory.
@@ -102,6 +104,7 @@ function foodie_integrator(scheme, steps, stages, tolerance, nu, alpha) result(i
102104 character (* ), intent (in ) :: scheme ! < Selected integrator given.
103105 integer (I_P), intent (in ), optional :: steps ! < Number of time steps used in multi-step schemes.
104106 integer (I_P), intent (in ), optional :: stages ! < Number of Runge-Kutta stages used in multi-stage schemes.
107+ integer (I_P), intent (in ), optional :: order ! < Order of accuracy.
105108 real (R_P), intent (in ), optional :: tolerance ! < Tolerance on the local truncation error.
106109 real (R_P), intent (in ), optional :: nu ! < Williams-Robert-Asselin filter coefficient.
107110 real (R_P), intent (in ), optional :: alpha ! < Robert-Asselin filter coefficient.
@@ -176,6 +179,18 @@ function foodie_integrator(scheme, steps, stages, tolerance, nu, alpha) result(i
176179 error_message= ' missing steps number for initializing integrator!' , &
177180 is_severe= .true. )
178181 endif
182+ case (' lmm_ssp_vss' )
183+ allocate (integrator_lmm_ssp_vss :: integrator)
184+ if ((.not. present (steps)).or. (.not. present (order))) then
185+ call integrator% trigger_error(error= ERROR_MISSING_STEPS_NUMBER, &
186+ error_message= ' missing steps number for initializing integrator!' , &
187+ is_severe= .true. )
188+ else
189+ select type (integrator)
190+ type is (integrator_lmm_ssp_vss)
191+ call integrator% init(steps= steps, order= order)
192+ endselect
193+ endif
179194 case (' runge_kutta_emd' )
180195 allocate (integrator_runge_kutta_emd :: integrator)
181196 if (present (stages)) then
0 commit comments