Skip to content

Commit 7c9ca89

Browse files
committed
Add multistep Runge-Kutta SSP (fixed stepsize) class
Add multistep Runge-Kutta SSP (fixed stepsize) class Add only 4steps5stages8order scheme, NOT tested!
1 parent df9e342 commit 7c9ca89

File tree

2 files changed

+329
-0
lines changed

2 files changed

+329
-0
lines changed

src/lib/foodie.f90

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ module foodie
7474
use foodie_integrator_leapfrog, only : integrator_leapfrog
7575
use foodie_integrator_lmm_ssp, only : integrator_lmm_ssp
7676
use foodie_integrator_lmm_ssp_vss, only : integrator_lmm_ssp_vss
77+
use foodie_integrator_ms_runge_kutta_ssp, only : integrator_ms_runge_kutta_ssp
7778
use foodie_integrator_runge_kutta_emd, only : integrator_runge_kutta_emd
7879
use foodie_integrator_runge_kutta_low_storage, only : integrator_runge_kutta_ls
7980
use foodie_integrator_runge_kutta_ssp, only : integrator_runge_kutta_ssp
@@ -93,6 +94,7 @@ module foodie
9394
public :: integrator_leapfrog
9495
public :: integrator_lmm_ssp
9596
public :: integrator_lmm_ssp_vss
97+
public :: integrator_ms_runge_kutta_ssp
9698
public :: integrator_runge_kutta_emd
9799
public :: integrator_runge_kutta_ls
98100
public :: 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

Comments
 (0)