Skip to content

Commit f806e9d

Browse files
committed
restore all integrators, work on oscillation
1 parent c50c848 commit f806e9d

7 files changed

+401
-246
lines changed

src/lib/foodie.f90

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ module foodie
7575
use foodie_integrator_lmm_ssp_vss, only : integrator_lmm_ssp_vss
7676
use foodie_integrator_ms_runge_kutta_ssp, only : integrator_ms_runge_kutta_ssp
7777
use foodie_integrator_multistage_object, only : integrator_multistage_object
78+
use foodie_integrator_multistage_multistep_object, only : integrator_multistage_multistep_object
7879
use foodie_integrator_multistep_object, only : integrator_multistep_object
7980
use foodie_integrator_runge_kutta_emd, only : integrator_runge_kutta_emd
8081
use foodie_integrator_runge_kutta_low_storage, only : integrator_runge_kutta_ls
@@ -95,6 +96,7 @@ module foodie
9596
public :: integrand_object
9697
public :: integrator_object
9798
public :: integrator_multistage_object
99+
public :: integrator_multistage_multistep_object
98100
public :: integrator_multistep_object
99101
! concrete objects
100102
public :: integrator_adams_bashforth
@@ -225,7 +227,7 @@ subroutine foodie_integrator_factory(scheme, integrator, stages, tolerance, nu,
225227
allocate(integrator_ms_runge_kutta_ssp :: integrator)
226228
select type(integrator)
227229
type is(integrator_ms_runge_kutta_ssp)
228-
call integrator%initialize(scheme=scheme)
230+
call integrator%initialize(scheme=scheme, iterations=iterations, autoupdate=autoupdate, U=U)
229231
endselect
230232
elseif (index(trim(adjustl(scheme)), trim(int_runge_kutta_emd%class_name())) > 0) then
231233
allocate(integrator_runge_kutta_emd :: integrator)

src/lib/foodie_integrator_adams_bashforth_moulton.f90

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -195,18 +195,18 @@ subroutine integrate(self, U, Dt, t)
195195

196196
do s=1, self%steps
197197
self%predictor%previous(s) = self%previous(s)
198+
self%predictor%t(s) = self%t(s)
199+
self%predictor%Dt(s) = self%Dt(s)
198200
enddo
199-
self%predictor%t(:) = self%t(1:self%steps)
200-
self%predictor%Dt(:) = self%Dt(1:self%steps)
201201
do s=1, self%steps - 1
202-
self%corrector%previous(s) = self%previous(s+1)
202+
self%corrector%previous(s) = self%predictor%previous(s+1)
203+
self%corrector%t(s) = self%predictor%t(s+1)
204+
self%corrector%Dt(s) = self%predictor%Dt(s+1)
203205
enddo
204-
self%corrector%t(:) = self%t(2:self%steps)
205-
self%corrector%Dt(:) = self%Dt(2:self%steps)
206206
call self%predictor%integrate(U=U, Dt=Dt, t=t)
207207
call self%corrector%integrate(U=U, Dt=Dt, t=t)
208208
if (self%autoupdate) &
209-
call self%update_previous(U=U, previous=self%previous(1:self%steps), Dt=Dt, t=t, previous_t=self%t(1:self%steps))
209+
call self%update_previous(U=U, previous=self%previous, Dt=Dt, t=t, previous_t=self%t)
210210
endsubroutine integrate
211211

212212
subroutine integrate_fast(self, U, Dt, t)
@@ -290,7 +290,7 @@ subroutine initialize(self, scheme, iterations, autoupdate, U, stop_on_fail)
290290
call self%predictor%initialize(scheme=schemes_ab(scheme_number_), U=U, autoupdate=.false.)
291291
call self%corrector%initialize(scheme=schemes_am(scheme_number_), U=U, iterations=self%iterations, autoupdate=.false.)
292292
self%steps = self%predictor%steps_number()
293-
self%registers = self%steps + 1
293+
self%registers = self%steps
294294
if (present(U)) call self%allocate_integrand_members(U=U)
295295
else
296296
call self%trigger_error(error=ERROR_UNSUPPORTED_SCHEME, &

0 commit comments

Comments
 (0)