Skip to content

Commit

Permalink
restore all integrators, work on oscillation
Browse files Browse the repository at this point in the history
  • Loading branch information
szaghi committed May 26, 2017
1 parent c50c848 commit f806e9d
Show file tree
Hide file tree
Showing 7 changed files with 401 additions and 246 deletions.
4 changes: 3 additions & 1 deletion src/lib/foodie.f90
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ module foodie
use foodie_integrator_lmm_ssp_vss, only : integrator_lmm_ssp_vss
use foodie_integrator_ms_runge_kutta_ssp, only : integrator_ms_runge_kutta_ssp
use foodie_integrator_multistage_object, only : integrator_multistage_object
use foodie_integrator_multistage_multistep_object, only : integrator_multistage_multistep_object
use foodie_integrator_multistep_object, only : integrator_multistep_object
use foodie_integrator_runge_kutta_emd, only : integrator_runge_kutta_emd
use foodie_integrator_runge_kutta_low_storage, only : integrator_runge_kutta_ls
Expand All @@ -95,6 +96,7 @@ module foodie
public :: integrand_object
public :: integrator_object
public :: integrator_multistage_object
public :: integrator_multistage_multistep_object
public :: integrator_multistep_object
! concrete objects
public :: integrator_adams_bashforth
Expand Down Expand Up @@ -225,7 +227,7 @@ subroutine foodie_integrator_factory(scheme, integrator, stages, tolerance, nu,
allocate(integrator_ms_runge_kutta_ssp :: integrator)
select type(integrator)
type is(integrator_ms_runge_kutta_ssp)
call integrator%initialize(scheme=scheme)
call integrator%initialize(scheme=scheme, iterations=iterations, autoupdate=autoupdate, U=U)
endselect
elseif (index(trim(adjustl(scheme)), trim(int_runge_kutta_emd%class_name())) > 0) then
allocate(integrator_runge_kutta_emd :: integrator)
Expand Down
14 changes: 7 additions & 7 deletions src/lib/foodie_integrator_adams_bashforth_moulton.f90
Original file line number Diff line number Diff line change
Expand Up @@ -195,18 +195,18 @@ subroutine integrate(self, U, Dt, t)

do s=1, self%steps
self%predictor%previous(s) = self%previous(s)
self%predictor%t(s) = self%t(s)
self%predictor%Dt(s) = self%Dt(s)
enddo
self%predictor%t(:) = self%t(1:self%steps)
self%predictor%Dt(:) = self%Dt(1:self%steps)
do s=1, self%steps - 1
self%corrector%previous(s) = self%previous(s+1)
self%corrector%previous(s) = self%predictor%previous(s+1)
self%corrector%t(s) = self%predictor%t(s+1)
self%corrector%Dt(s) = self%predictor%Dt(s+1)
enddo
self%corrector%t(:) = self%t(2:self%steps)
self%corrector%Dt(:) = self%Dt(2:self%steps)
call self%predictor%integrate(U=U, Dt=Dt, t=t)
call self%corrector%integrate(U=U, Dt=Dt, t=t)
if (self%autoupdate) &
call self%update_previous(U=U, previous=self%previous(1:self%steps), Dt=Dt, t=t, previous_t=self%t(1:self%steps))
call self%update_previous(U=U, previous=self%previous, Dt=Dt, t=t, previous_t=self%t)
endsubroutine integrate

subroutine integrate_fast(self, U, Dt, t)
Expand Down Expand Up @@ -290,7 +290,7 @@ subroutine initialize(self, scheme, iterations, autoupdate, U, stop_on_fail)
call self%predictor%initialize(scheme=schemes_ab(scheme_number_), U=U, autoupdate=.false.)
call self%corrector%initialize(scheme=schemes_am(scheme_number_), U=U, iterations=self%iterations, autoupdate=.false.)
self%steps = self%predictor%steps_number()
self%registers = self%steps + 1
self%registers = self%steps
if (present(U)) call self%allocate_integrand_members(U=U)
else
call self%trigger_error(error=ERROR_UNSUPPORTED_SCHEME, &
Expand Down
Loading

0 comments on commit f806e9d

Please sign in to comment.