Skip to content

Commit ce846c6

Browse files
committed
trim out unbuffered integrate methods
1 parent b67b138 commit ce846c6

9 files changed

+169
-392
lines changed

src/lib/foodie_integrator_adams_bashforth.f90

Lines changed: 8 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,6 @@ module foodie_integrator_adams_bashforth
7373
procedure, pass(lhs) :: integr_assign_integr !< Operator `=`.
7474
procedure, pass(self) :: integrate !< Integrate integrand field.
7575
procedure, pass(self) :: integrate_fast !< Integrate integrand field, fast mode.
76-
procedure, pass(self) :: integrate_ub !< Integrate integrand field, unbuffered.
77-
procedure, pass(self) :: integrate_ub_fast !< Integrate integrand field, fast mode, unbuffered.
7876
procedure, pass(self) :: is_supported !< Return .true. if the integrator class support the given scheme.
7977
procedure, pass(self) :: supported_schemes !< Return the list of supported schemes.
8078
! public methods
@@ -133,60 +131,34 @@ pure subroutine integr_assign_integr(lhs, rhs)
133131

134132
subroutine integrate(self, U, Dt, t)
135133
!< Integrate field with Adams-Bashforth class scheme.
136-
!<
137-
!< @note This method uses integrand previous-steps-buffer stored inside integrator.
138134
class(integrator_adams_bashforth), intent(inout) :: self !< Integrator.
139135
class(integrand_object), intent(inout) :: U !< Field to be integrated.
140136
real(R_P), intent(in) :: Dt !< Time step.
141137
real(R_P), intent(in) :: t !< Time.
138+
integer(I_P) :: s !< Steps counter.
142139

143-
call self%integrate_ub(U=U, previous=self%previous, Dt=Dt, t=t)
140+
do s=1, self%steps
141+
U = U + (self%previous(s)%t(t=self%t(s)) * (Dt * self%b(s)))
142+
enddo
143+
if (self%autoupdate) call self%update_previous(U=U, previous=self%previous, Dt=Dt, t=t, previous_t=self%t)
144144
endsubroutine integrate
145145

146146
subroutine integrate_fast(self, U, Dt, t)
147147
!< Integrate field with Adams-Bashforth class scheme, fast mode.
148-
!<
149-
!< @note This method uses integrand previous-steps-buffer stored inside integrator.
150148
class(integrator_adams_bashforth), intent(inout) :: self !< Integrator.
151149
class(integrand_object), intent(inout) :: U !< Field to be integrated.
152150
real(R_P), intent(in) :: Dt !< Time step.
153151
real(R_P), intent(in) :: t !< Time.
154-
155-
call self%integrate_ub_fast(U=U, previous=self%previous, Dt=Dt, t=t)
156-
endsubroutine integrate_fast
157-
158-
subroutine integrate_ub(self, U, previous, Dt, t)
159-
!< Integrate field with Adams-Bashforth class scheme, unbuffered.
160-
class(integrator_adams_bashforth), intent(inout) :: self !< Integrator.
161-
class(integrand_object), intent(inout) :: U !< Field to be integrated.
162-
class(integrand_object), intent(inout) :: previous(1:) !< Integrand.
163-
real(R_P), intent(in) :: Dt !< Time step.
164-
real(R_P), intent(in) :: t !< Time.
165152
integer(I_P) :: s !< Steps counter.
166153

167154
do s=1, self%steps
168-
U = U + (previous(s)%t(t=self%t(s)) * (Dt * self%b(s)))
169-
enddo
170-
if (self%autoupdate) call self%update_previous(U=U, previous=previous, Dt=Dt, t=t, previous_t=self%t)
171-
endsubroutine integrate_ub
172-
173-
subroutine integrate_ub_fast(self, U, previous, Dt, t)
174-
!< Integrate field with Adams-Bashforth class scheme, unbuffered, fast mode.
175-
class(integrator_adams_bashforth), intent(inout) :: self !< Integrator.
176-
class(integrand_object), intent(inout) :: U !< Field to be integrated.
177-
class(integrand_object), intent(inout) :: previous(1:) !< Integrand.
178-
real(R_P), intent(in) :: Dt !< Time step.
179-
real(R_P), intent(in) :: t !< Time.
180-
integer(I_P) :: s !< Steps counter.
181-
182-
do s=1, self%steps
183-
self%buffer = previous(s)
155+
self%buffer = self%previous(s)
184156
call self%buffer%t_fast(t=self%t(s))
185157
call self%buffer%multiply_fast(lhs=self%buffer, rhs=Dt * self%b(s))
186158
call U%add_fast(lhs=U, rhs=self%buffer)
187159
enddo
188-
if (self%autoupdate) call self%update_previous(U=U, previous=previous, Dt=Dt, t=t, previous_t=self%t)
189-
endsubroutine integrate_ub_fast
160+
if (self%autoupdate) call self%update_previous(U=U, previous=self%previous, Dt=Dt, t=t, previous_t=self%t)
161+
endsubroutine integrate_fast
190162

191163
elemental function is_supported(self, scheme)
192164
!< Return .true. if the integrator class support the given scheme.

src/lib/foodie_integrator_adams_bashforth_moulton.f90

Lines changed: 14 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,6 @@ module foodie_integrator_adams_bashforth_moulton
126126
procedure, pass(lhs) :: integr_assign_integr !< Operator `=`.
127127
procedure, pass(self) :: integrate !< Integrate integrand field.
128128
procedure, pass(self) :: integrate_fast !< Integrate integrand field.
129-
procedure, pass(self) :: integrate_ub !< Integrate integrand field, unbuffered.
130-
procedure, pass(self) :: integrate_ub_fast !< Integrate integrand field, unbuffered, fast mode.
131129
procedure, pass(self) :: is_supported !< Return .true. if the integrator class support the given scheme.
132130
procedure, pass(self) :: supported_schemes !< Return the list of supported schemes.
133131
! public methods
@@ -189,62 +187,36 @@ pure subroutine integr_assign_integr(lhs, rhs)
189187

190188
subroutine integrate(self, U, Dt, t)
191189
!< Integrate field with Adams-Bashforth-Moulton class scheme.
192-
!<
193-
!< @note This method uses integrand previous-steps-buffer stored inside integrator.
194190
class(integrator_adams_bashforth_moulton), intent(inout) :: self !< Integrator.
195191
class(integrand_object), intent(inout) :: U !< Field to be integrated.
196192
real(R_P), intent(in) :: Dt !< Time steps.
197193
real(R_P), intent(in) :: t !< Times.
198194

199-
call self%integrate_ub(U=U, previous=self%previous, Dt=Dt, t=t)
195+
! self%predictor%t = self%t(1:self%steps)
196+
! self%predictor%Dt = self%Dt(1:self%steps)
197+
! self%corrector%t = self%t(1:self%steps)
198+
! self%corrector%Dt = self%Dt(1:self%steps)
199+
! call self%predictor%integrate_ub(U=U, previous=previous, Dt=Dt, t=t)
200+
! call self%corrector%integrate_ub(U=U, previous=previous(2:), Dt=Dt, t=t)
201+
! if (self%autoupdate) call self%update_previous(U=U, previous=previous(1:self%steps), Dt=Dt, t=t, previous_t=self%t(1:self%steps))
200202
endsubroutine integrate
201203

202204
subroutine integrate_fast(self, U, Dt, t)
203205
!< Integrate field with Adams-Bashforth-Moulton class scheme, fast mode.
204-
!<
205-
!< @note This method uses integrand previous-steps-buffer stored inside integrator.
206206
class(integrator_adams_bashforth_moulton), intent(inout) :: self !< Integrator.
207207
class(integrand_object), intent(inout) :: U !< Field to be integrated.
208208
real(R_P), intent(in) :: Dt !< Time steps.
209209
real(R_P), intent(in) :: t !< Times.
210210

211-
call self%integrate_ub_fast(U=U, previous=self%previous, Dt=Dt, t=t)
211+
! self%predictor%t = self%t
212+
! self%predictor%Dt = self%Dt
213+
! self%corrector%t = self%t
214+
! self%corrector%Dt = self%Dt
215+
! call self%predictor%integrate_ub_fast(U=U, previous=previous, Dt=Dt, t=t)
216+
! call self%corrector%integrate_ub_fast(U=U, previous=previous(2:), Dt=Dt, t=t)
217+
! if (self%autoupdate) call self%update_previous(U=U, previous=previous(1:self%steps), Dt=Dt, t=t, previous_t=self%t(1:self%steps))
212218
endsubroutine integrate_fast
213219

214-
subroutine integrate_ub(self, U, previous, Dt, t)
215-
!< Integrate field with Adams-Bashforth-Moulton class scheme, unbuffered.
216-
class(integrator_adams_bashforth_moulton), intent(inout) :: self !< Integrator.
217-
class(integrand_object), intent(inout) :: U !< Field to be integrated.
218-
class(integrand_object), intent(inout) :: previous(1:) !< Integrand.
219-
real(R_P), intent(in) :: Dt !< Time steps.
220-
real(R_P), intent(in) :: t !< Times.
221-
222-
self%predictor%t = self%t(1:self%steps)
223-
self%predictor%Dt = self%Dt(1:self%steps)
224-
self%corrector%t = self%t(1:self%steps)
225-
self%corrector%Dt = self%Dt(1:self%steps)
226-
call self%predictor%integrate_ub(U=U, previous=previous, Dt=Dt, t=t)
227-
call self%corrector%integrate_ub(U=U, previous=previous(2:), Dt=Dt, t=t)
228-
if (self%autoupdate) call self%update_previous(U=U, previous=previous(1:self%steps), Dt=Dt, t=t, previous_t=self%t(1:self%steps))
229-
endsubroutine integrate_ub
230-
231-
subroutine integrate_ub_fast(self, U, previous, Dt, t)
232-
!< Integrate field with Adams-Bashforth-Moulton class scheme, unbuffered, fast mode.
233-
class(integrator_adams_bashforth_moulton), intent(inout) :: self !< Integrator.
234-
class(integrand_object), intent(inout) :: U !< Field to be integrated.
235-
class(integrand_object), intent(inout) :: previous(1:) !< Integrand.
236-
real(R_P), intent(in) :: Dt !< Time steps.
237-
real(R_P), intent(in) :: t !< Times.
238-
239-
self%predictor%t = self%t
240-
self%predictor%Dt = self%Dt
241-
self%corrector%t = self%t
242-
self%corrector%Dt = self%Dt
243-
call self%predictor%integrate_ub_fast(U=U, previous=previous, Dt=Dt, t=t)
244-
call self%corrector%integrate_ub_fast(U=U, previous=previous(2:), Dt=Dt, t=t)
245-
if (self%autoupdate) call self%update_previous(U=U, previous=previous(1:self%steps), Dt=Dt, t=t, previous_t=self%t(1:self%steps))
246-
endsubroutine integrate_ub_fast
247-
248220
elemental function is_supported(self, scheme)
249221
!< Return .true. if the integrator class support the given scheme.
250222
class(integrator_adams_bashforth_moulton), intent(in) :: self !< Integrator.

src/lib/foodie_integrator_adams_moulton.f90

Lines changed: 25 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,6 @@ module foodie_integrator_adams_moulton
7474
procedure, pass(self) :: has_fast_mode !< Return .true. if the integrator class has *fast mode* integrate.
7575
procedure, pass(self) :: integrate !< Integrate integrand field.
7676
procedure, pass(self) :: integrate_fast !< Integrate integrand field, fast mode.
77-
procedure, pass(self) :: integrate_ub !< Integrate integrand field, unbuffered.
78-
procedure, pass(self) :: integrate_ub_fast !< Integrate integrand field, unbuffered, fast mode.
7977
procedure, pass(self) :: is_supported !< Return .true. if the integrator class support the given scheme.
8078
procedure, pass(self) :: supported_schemes !< Return the list of supported schemes.
8179
! public methods
@@ -135,76 +133,50 @@ pure subroutine integr_assign_integr(lhs, rhs)
135133

136134
subroutine integrate(self, U, Dt, t)
137135
!< Integrate field with Adams-Moulton class scheme.
138-
!<
139-
!< @note This method uses integrand previous-steps-buffer stored inside integrator.
140-
class(integrator_adams_moulton), intent(inout) :: self !< Integrator.
141-
class(integrand_object), intent(inout) :: U !< Field to be integrated.
142-
real(R_P), intent(in) :: Dt !< Time step.
143-
real(R_P), intent(in) :: t !< Time.
144-
145-
call self%integrate_ub(U=U, previous=self%previous, Dt=Dt, t=t)
146-
endsubroutine integrate
147-
148-
subroutine integrate_fast(self, U, Dt, t)
149-
!< Integrate field with Adams-Moulton class scheme, fast mode.
150-
!<
151-
!< @note This method uses integrand previous-steps-buffer stored inside integrator.
152-
class(integrator_adams_moulton), intent(inout) :: self !< Integrator.
153-
class(integrand_object), intent(inout) :: U !< Field to be integrated.
154-
real(R_P), intent(in) :: Dt !< Time step.
155-
real(R_P), intent(in) :: t !< Time.
156-
157-
call self%integrate_ub_fast(U=U, previous=self%previous, Dt=Dt, t=t)
158-
endsubroutine integrate_fast
159-
160-
subroutine integrate_ub(self, U, previous, Dt, t)
161-
!< Integrate field with Adams-Moulton class scheme.
162-
class(integrator_adams_moulton), intent(inout) :: self !< Integrator.
163-
class(integrand_object), intent(inout) :: U !< Field to be integrated.
164-
class(integrand_object), intent(inout) :: previous(1:) !< Integrand.
165-
real(R_P), intent(in) :: Dt !< Time step.
166-
real(R_P), intent(in) :: t !< Time.
167-
class(integrand_object), allocatable :: delta !< Delta RHS for fixed point iterations.
168-
integer(I_P) :: s !< Steps counter.
136+
class(integrator_adams_moulton), intent(inout) :: self !< Integrator.
137+
class(integrand_object), intent(inout) :: U !< Field to be integrated.
138+
real(R_P), intent(in) :: Dt !< Time step.
139+
real(R_P), intent(in) :: t !< Time.
140+
class(integrand_object), allocatable :: delta !< Delta RHS for fixed point iterations.
141+
integer(I_P) :: s !< Steps counter.
169142

170143
if ( self%steps>0 ) then
171144
if (self%iterations > 0) then ! perform fixed point iterations
172145
allocate(delta, mold=U)
173-
delta = previous(self%steps)
146+
delta = self%previous(self%steps)
174147
do s=0, self%steps - 1
175-
delta = delta + (previous(s+1)%t(t=self%t(s+1)) * (Dt * self%b(s)))
148+
delta = delta + (self%previous(s+1)%t(t=self%t(s+1)) * (Dt * self%b(s)))
176149
enddo
177150
do s=1, self%iterations
178151
U = delta + (U%t(t=self%t(self%steps) + Dt) * (Dt * self%b(self%steps)))
179152
enddo
180153
else
181-
U = previous(self%steps) + (U%t(t=self%t(self%steps) + Dt) * (Dt * self%b(self%steps)))
154+
U = self%previous(self%steps) + (U%t(t=self%t(self%steps) + Dt) * (Dt * self%b(self%steps)))
182155
do s=0, self%steps - 1
183-
U = U + (previous(s+1)%t(t=self%t(s+1)) * (Dt * self%b(s)))
156+
U = U + (self%previous(s+1)%t(t=self%t(s+1)) * (Dt * self%b(s)))
184157
enddo
185158
endif
186-
if (self%autoupdate) call self%update_previous(U=U, previous=previous, Dt=Dt, t=t, previous_t=self%t)
159+
if (self%autoupdate) call self%update_previous(U=U, previous=self%previous, Dt=Dt, t=t, previous_t=self%t)
187160
else
188161
U = U + (U%t(t=t) * (Dt * self%b(0)))
189162
endif
190-
endsubroutine integrate_ub
163+
endsubroutine integrate
191164

192-
subroutine integrate_ub_fast(self, U, previous, Dt, t)
165+
subroutine integrate_fast(self, U, Dt, t)
193166
!< Integrate field with Adams-Moulton class scheme, fast mode.
194-
class(integrator_adams_moulton), intent(inout) :: self !< Integrator.
195-
class(integrand_object), intent(inout) :: U !< Field to be integrated.
196-
class(integrand_object), intent(inout) :: previous(1:) !< Integrand.
197-
real(R_P), intent(in) :: Dt !< Time step.
198-
real(R_P), intent(in) :: t !< Time.
199-
class(integrand_object), allocatable :: delta !< Delta RHS for fixed point iterations.
200-
integer(I_P) :: s !< Steps counter.
167+
class(integrator_adams_moulton), intent(inout) :: self !< Integrator.
168+
class(integrand_object), intent(inout) :: U !< Field to be integrated.
169+
real(R_P), intent(in) :: Dt !< Time step.
170+
real(R_P), intent(in) :: t !< Time.
171+
class(integrand_object), allocatable :: delta !< Delta RHS for fixed point iterations.
172+
integer(I_P) :: s !< Steps counter.
201173

202174
if (self%steps>0) then
203175
if (self%iterations > 0) then ! perform fixed point iterations
204176
allocate(delta, mold=U)
205-
delta = previous(self%steps)
177+
delta = self%previous(self%steps)
206178
do s=0, self%steps - 1
207-
self%buffer = previous(s+1)
179+
self%buffer = self%previous(s+1)
208180
call self%buffer%t_fast(t=self%t(s+1))
209181
call self%buffer%multiply_fast(lhs=self%buffer, rhs=Dt * self%b(s))
210182
call delta%add_fast(lhs=delta, rhs=self%buffer)
@@ -219,22 +191,22 @@ subroutine integrate_ub_fast(self, U, previous, Dt, t)
219191
self%buffer = U
220192
call self%buffer%t_fast(t=self%t(self%steps) + Dt)
221193
call self%buffer%multiply_fast(lhs=self%buffer, rhs=Dt * self%b(self%steps))
222-
call U%add_fast(lhs=previous(self%steps), rhs=self%buffer)
194+
call U%add_fast(lhs=self%previous(self%steps), rhs=self%buffer)
223195
do s=0, self%steps - 1
224-
self%buffer = previous(s+1)
196+
self%buffer = self%previous(s+1)
225197
call self%buffer%t_fast(t=self%t(s+1))
226198
call self%buffer%multiply_fast(lhs=self%buffer, rhs=Dt * self%b(s))
227199
call U%add_fast(lhs=U, rhs=self%buffer)
228200
enddo
229201
endif
230-
if (self%autoupdate) call self%update_previous(U=U, previous=previous, Dt=Dt, t=t, previous_t=self%t)
202+
if (self%autoupdate) call self%update_previous(U=U, previous=self%previous, Dt=Dt, t=t, previous_t=self%t)
231203
else
232204
self%buffer = U
233205
call self%buffer%t_fast(t=t)
234206
call self%buffer%multiply_fast(lhs=self%buffer, rhs=Dt * self%b(0))
235207
call U%add_fast(lhs=U, rhs=self%buffer)
236208
endif
237-
endsubroutine integrate_ub_fast
209+
endsubroutine integrate_fast
238210

239211
elemental function is_supported(self, scheme)
240212
!< Return .true. if the integrator class support the given scheme.

0 commit comments

Comments
 (0)