@@ -74,6 +74,7 @@ module foodie
7474use foodie_integrator_leapfrog, only : integrator_leapfrog
7575use foodie_integrator_lmm_ssp, only : integrator_lmm_ssp
7676use foodie_integrator_lmm_ssp_vss, only : integrator_lmm_ssp_vss
77+ use foodie_integrator_ms_runge_kutta_ssp, only : integrator_ms_runge_kutta_ssp
7778use foodie_integrator_runge_kutta_emd, only : integrator_runge_kutta_emd
7879use foodie_integrator_runge_kutta_low_storage, only : integrator_runge_kutta_ls
7980use foodie_integrator_runge_kutta_ssp, only : integrator_runge_kutta_ssp
@@ -93,6 +94,7 @@ module foodie
9394public :: integrator_leapfrog
9495public :: integrator_lmm_ssp
9596public :: integrator_lmm_ssp_vss
97+ public :: integrator_ms_runge_kutta_ssp
9698public :: integrator_runge_kutta_emd
9799public :: integrator_runge_kutta_ls
98100public :: integrator_runge_kutta_ssp
@@ -120,6 +122,7 @@ function foodie_integrator(scheme, tolerance, nu, alpha) result(integrator)
120122 type (integrator_leapfrog) :: int_leapfrog ! < Integrator leapfrog.
121123 type (integrator_lmm_ssp) :: int_lmm_ssp ! < Integrator lmm ssp.
122124 type (integrator_lmm_ssp_vss) :: int_lmm_ssp_vss ! < Integrator lmm ssp_vss.
125+ type (integrator_ms_runge_kutta_ssp) :: int_ms_runge_kutta_ssp ! < Integrator multistep Runge Kutta ssp.
123126 type (integrator_runge_kutta_emd) :: int_runge_kutta_emd ! < Integrator Runge Kutta_embdedded.
124127 type (integrator_runge_kutta_ls) :: int_runge_kutta_ls ! < Integrator Runge Kutta low storage.
125128 type (integrator_runge_kutta_ssp) :: int_runge_kutta_ssp ! < Integrator Runge Kutta ssp.
@@ -168,6 +171,12 @@ function foodie_integrator(scheme, tolerance, nu, alpha) result(integrator)
168171 type is (integrator_lmm_ssp)
169172 call integrator% initialize(scheme= scheme)
170173 endselect
174+ elseif (index (trim (adjustl (scheme)), trim (int_ms_runge_kutta_ssp% class_name())) > 0 ) then
175+ allocate (integrator_ms_runge_kutta_ssp :: integrator)
176+ select type (integrator)
177+ type is (integrator_ms_runge_kutta_ssp)
178+ call integrator% initialize(scheme= scheme)
179+ endselect
171180 elseif (index (trim (adjustl (scheme)), trim (int_runge_kutta_emd% class_name())) > 0 ) then
172181 allocate (integrator_runge_kutta_emd :: integrator)
173182 select type (integrator)
@@ -203,6 +212,7 @@ pure function foodie_integrator_class_names() result(names)
203212 type (integrator_leapfrog) :: int_leapfrog ! < Integrator leapfrog.
204213 type (integrator_lmm_ssp) :: int_lmm_ssp ! < Integrator lmm ssp.
205214 type (integrator_lmm_ssp_vss) :: int_lmm_ssp_vss ! < Integrator lmm ssp_vss.
215+ type (integrator_ms_runge_kutta_ssp) :: int_ms_runge_kutta_ssp ! < Integrator multistep Runge Kutta ssp.
206216 type (integrator_runge_kutta_emd) :: int_runge_kutta_emd ! < Integrator Runge Kutta_embdedded.
207217 type (integrator_runge_kutta_ls) :: int_runge_kutta_ls ! < Integrator Runge Kutta low storage.
208218 type (integrator_runge_kutta_ssp) :: int_runge_kutta_ssp ! < Integrator Runge Kutta ssp.
@@ -215,6 +225,7 @@ pure function foodie_integrator_class_names() result(names)
215225 names = [names, int_leapfrog % class_name()]
216226 names = [names, int_lmm_ssp % class_name()]
217227 names = [names, int_lmm_ssp_vss % class_name()]
228+ names = [names, int_ms_runge_kutta_ssp % class_name()]
218229 names = [names, int_runge_kutta_emd % class_name()]
219230 names = [names, int_runge_kutta_ls % class_name()]
220231 names = [names, int_runge_kutta_ssp % class_name()]
@@ -235,6 +246,7 @@ pure function foodie_integrator_schemes(class_name) result(schemes)
235246 type (integrator_leapfrog) :: int_leapfrog ! < Integrator leapfrog.
236247 type (integrator_lmm_ssp) :: int_lmm_ssp ! < Integrator lmm ssp.
237248 type (integrator_lmm_ssp_vss) :: int_lmm_ssp_vss ! < Integrator lmm ssp_vss.
249+ type (integrator_ms_runge_kutta_ssp) :: int_ms_runge_kutta_ssp ! < Integrator multistep Runge Kutta ssp.
238250 type (integrator_runge_kutta_emd) :: int_runge_kutta_emd ! < Integrator Runge Kutta_embdedded.
239251 type (integrator_runge_kutta_ls) :: int_runge_kutta_ls ! < Integrator Runge Kutta low storage.
240252 type (integrator_runge_kutta_ssp) :: int_runge_kutta_ssp ! < Integrator Runge Kutta ssp.
@@ -256,6 +268,8 @@ pure function foodie_integrator_schemes(class_name) result(schemes)
256268 schemes = int_lmm_ssp% supported_schemes()
257269 elseif (trim (int_lmm_ssp_vss% class_name()) == trim (adjustl (class_name))) then
258270 schemes = int_lmm_ssp_vss% supported_schemes()
271+ elseif (trim (int_ms_runge_kutta_ssp% class_name()) == trim (adjustl (class_name))) then
272+ schemes = int_ms_runge_kutta_ssp% supported_schemes()
259273 elseif (trim (int_runge_kutta_emd% class_name()) == trim (adjustl (class_name))) then
260274 schemes = int_runge_kutta_emd% supported_schemes()
261275 elseif (trim (int_runge_kutta_ls% class_name()) == trim (adjustl (class_name))) then
@@ -272,6 +286,7 @@ pure function foodie_integrator_schemes(class_name) result(schemes)
272286 schemes = [schemes, int_leapfrog % supported_schemes()]
273287 schemes = [schemes, int_lmm_ssp % supported_schemes()]
274288 schemes = [schemes, int_lmm_ssp_vss % supported_schemes()]
289+ schemes = [schemes, int_ms_runge_kutta_ssp % supported_schemes()]
275290 schemes = [schemes, int_runge_kutta_emd % supported_schemes()]
276291 schemes = [schemes, int_runge_kutta_ls % supported_schemes()]
277292 schemes = [schemes, int_runge_kutta_ssp % supported_schemes()]
0 commit comments