Skip to content

Commit 4a45faf

Browse files
committed
Sanitize math with derived-type-operators
Sanitize math with derived-type-operators. Why: Derived type operators does not respect intrinsic operators precedence, e.g. in `a + b * c` is not ensured that `d= b * c` is computed first and only then `a + d` is done. This change addresses the need by: Adding parenthesis when necessary. Side effects: Nothing.
1 parent ef89f34 commit 4a45faf

12 files changed

Lines changed: 41 additions & 41 deletions

src/lib/foodie_integrator_adams_bashforth.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ subroutine integrate(self, U, previous, Dt, t, autoupdate)
351351

352352
autoupdate_ = .true. ; if (present(autoupdate)) autoupdate_ = autoupdate
353353
do s=1, self%steps
354-
U = U + previous(s)%t(t=t(s)) * (Dt * self%b(s))
354+
U = U + (previous(s)%t(t=t(s)) * (Dt * self%b(s)))
355355
enddo
356356
if (autoupdate_) call self%update_previous(U=U, previous=previous)
357357
endsubroutine integrate

src/lib/foodie_integrator_adams_moulton.f90

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -355,20 +355,20 @@ subroutine integrate(self, U, previous, Dt, t, iterations, autoupdate)
355355
allocate(delta, mold=U)
356356
delta = previous(self%steps)
357357
do s=0, self%steps - 1
358-
delta = delta + previous(s+1)%t(t=t(s+1)) * (Dt * self%b(s))
358+
delta = delta + (previous(s+1)%t(t=t(s+1)) * (Dt * self%b(s)))
359359
enddo
360360
do s=1, iterations
361-
U = delta + U%t(t=t(self%steps) + Dt) * (Dt * self%b(self%steps))
361+
U = delta + (U%t(t=t(self%steps) + Dt) * (Dt * self%b(self%steps)))
362362
enddo
363363
else
364-
U = previous(self%steps) + U%t(t=t(self%steps) + Dt) * (Dt * self%b(self%steps))
364+
U = previous(self%steps) + (U%t(t=t(self%steps) + Dt) * (Dt * self%b(self%steps)))
365365
do s=0, self%steps - 1
366-
U = U + previous(s+1)%t(t=t(s+1)) * (Dt * self%b(s))
366+
U = U + (previous(s+1)%t(t=t(s+1)) * (Dt * self%b(s)))
367367
enddo
368368
endif
369369
if (autoupdate_) call self%update_previous(U=U, previous=previous)
370370
else
371-
U = U + U%t(t=t(1)) * (Dt * self%b(0))
371+
U = U + (U%t(t=t(1)) * (Dt * self%b(0)))
372372
endif
373373
endsubroutine integrate
374374

src/lib/foodie_integrator_backward_differentiation_formula.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,10 +227,10 @@ subroutine integrate(self, U, previous, Dt, t, iterations, autoupdate)
227227
allocate(delta, mold=U)
228228
delta = previous(self%steps) * (-self%a(self%steps))
229229
do s=1, self%steps - 1
230-
delta = delta + previous(s) * (-self%a(s))
230+
delta = delta + (previous(s) * (-self%a(s)))
231231
enddo
232232
do s=1, iterations
233-
U = delta + U%t(t=t(self%steps) + Dt) * (Dt * self%b)
233+
U = delta + (U%t(t=t(self%steps) + Dt) * (Dt * self%b))
234234
enddo
235235
if (autoupdate_) call self%update_previous(U=U, previous=previous)
236236
endsubroutine integrate

src/lib/foodie_integrator_euler_explicit.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,6 @@ subroutine integrate(U, Dt, t)
108108
real(R_P), intent(in) :: Dt !< Time step.
109109
real(R_P), optional, intent(in) :: t !< Time.
110110

111-
U = U + U%t(t=t) * Dt
111+
U = U + (U%t(t=t) * Dt)
112112
endsubroutine integrate
113113
endmodule foodie_integrator_euler_explicit

src/lib/foodie_integrator_leapfrog.f90

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,11 +169,11 @@ subroutine integrate(self, U, previous, Dt, t, filter)
169169
real(R_P), intent(in) :: t !< Time.
170170
class(integrand_object), optional, intent(inout) :: filter !< Filter field displacement.
171171

172-
U = previous(1) + previous(2)%t(t=t) * (Dt * 2._R_P)
172+
U = previous(1) + (previous(2)%t(t=t) * (Dt * 2._R_P))
173173
if (present(filter)) then
174-
filter = (previous(1) - previous(2) * 2._R_P + U) * self%nu * 0.5_R_P
175-
previous(2) = previous(2) + filter * self%alpha
176-
U = U + filter * (self%alpha - 1._R_P)
174+
filter = (previous(1) - (previous(2) * 2._R_P) + U) * self%nu * 0.5_R_P
175+
previous(2) = previous(2) + (filter * self%alpha)
176+
U = U + (filter * (self%alpha - 1._R_P))
177177
endif
178178
previous(1) = previous(2)
179179
previous(2) = U

src/lib/foodie_integrator_lmm_ssp.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,8 @@ subroutine integrate(self, U, previous, Dt, t, autoupdate)
214214
autoupdate_ = .true. ; if (present(autoupdate)) autoupdate_ = autoupdate
215215
U = U * 0._R_P
216216
do s=1, self%steps
217-
if (self%a(s) /= 0._R_P) U = U + previous(s) * self%a(s)
218-
if (self%b(s) /= 0._R_P) U = U + previous(s)%t(t=t(s)) * (Dt * self%b(s))
217+
if (self%a(s) /= 0._R_P) U = U + (previous(s) * self%a(s))
218+
if (self%b(s) /= 0._R_P) U = U + (previous(s)%t(t=t(s)) * (Dt * self%b(s)))
219219
enddo
220220
if (autoupdate_) call self%update_previous(U=U, previous=previous)
221221
endsubroutine integrate

src/lib/foodie_integrator_lmm_ssp_vss.f90

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -245,10 +245,10 @@ subroutine integrate_order_2(self, U, previous, Dt, t, autoupdate)
245245
real(R_P) :: omega_sq !< Square of omega coefficient.
246246

247247
autoupdate_ = .true. ; if (present(autoupdate)) autoupdate_ = autoupdate
248-
omega_= omega(Dt=Dt, s=self%steps-1)
248+
omega_ = omega(Dt=Dt, s=self%steps-1)
249249
omega_sq = omega_ * omega_
250-
U = previous(1) * (1._R_P / omega_sq) + previous(self%steps) * ((omega_sq - 1._R_P) / omega_sq) + &
251-
previous(self%steps)%t(t=t(self%steps)) * (Dt(self%steps) * (omega_ + 1._R_P) / omega_)
250+
U = (previous(1) * (1._R_P / omega_sq)) + (previous(self%steps) * ((omega_sq - 1._R_P) / omega_sq)) + &
251+
(previous(self%steps)%t(t=t(self%steps)) * (Dt(self%steps) * (omega_ + 1._R_P) / omega_))
252252
if (autoupdate_) call self%update_previous(U=U, previous=previous, Dt=Dt)
253253
endsubroutine integrate_order_2
254254

@@ -265,10 +265,10 @@ subroutine integrate_order_3(self, U, previous, Dt, t, autoupdate)
265265

266266
autoupdate_ = .true. ; if (present(autoupdate)) autoupdate_ = autoupdate
267267
omega_= omega(Dt=Dt, s=self%steps-1)
268-
U = previous(1) * ((3._R_P * omega_ + 2._R_P) / omega_ ** 3 ) + &
269-
previous(self%steps) * (((omega_ + 1._R_P) ** 2) * (omega_ - 2._R_P) / omega_ ** 3) + &
270-
previous(1)%t(t=t(1)) * (Dt(self%steps) * (omega_ + 1._R_P) / omega_ ** 2) + &
271-
previous(self%steps)%t(t=t(self%steps)) * (Dt(self%steps) * (omega_ + 1._R_P) ** 2 / omega_ ** 2)
268+
U = (previous(1) * ((3._R_P * omega_ + 2._R_P) / omega_ ** 3 )) + &
269+
(previous(self%steps) * (((omega_ + 1._R_P) ** 2) * (omega_ - 2._R_P) / omega_ ** 3)) + &
270+
(previous(1)%t(t=t(1)) * (Dt(self%steps) * (omega_ + 1._R_P) / omega_ ** 2)) + &
271+
(previous(self%steps)%t(t=t(self%steps)) * (Dt(self%steps) * (omega_ + 1._R_P) ** 2 / omega_ ** 2))
272272
if (autoupdate_) call self%update_previous(U=U, previous=previous, Dt=Dt)
273273
endsubroutine integrate_order_3
274274

src/lib/foodie_integrator_ms_runge_kutta_ssp.f90

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -327,25 +327,25 @@ subroutine integrate(self, U, previous, stage, Dt, t, autoupdate)
327327
do k=2, self%stages
328328
stage(k) = U * 0._R_P
329329
do s=1, self%steps
330-
if (self%D(k, s) /= 0._R_P) stage(k) = stage(k) + previous(s) * self%D(k, s)
330+
if (self%D(k, s) /= 0._R_P) stage(k) = stage(k) + (previous(s) * self%D(k, s))
331331
enddo
332332
do s=1, self%steps - 1
333-
if (self%Ahat(k, s) /= 0._R_P) stage(k) = stage(k) + previous(s)%t(t=t(s)) * (Dt * self%Ahat(k, s))
333+
if (self%Ahat(k, s) /= 0._R_P) stage(k) = stage(k) + (previous(s)%t(t=t(s)) * (Dt * self%Ahat(k, s)))
334334
enddo
335335
do kk=1, k - 1
336-
if (self%A(k, kk) /= 0._R_P) stage(k) = stage(k) + stage(kk)%t(t=t(self%steps)) * (Dt * self%A(k, kk))
336+
if (self%A(k, kk) /= 0._R_P) stage(k) = stage(k) + (stage(kk)%t(t=t(self%steps)) * (Dt * self%A(k, kk)))
337337
enddo
338338
enddo
339339
! computing new time step
340340
U = U * 0._R_P
341341
do s=1, self%steps
342-
if (self%T(s) /= 0._R_P) U = U + previous(s) * self%T(s)
342+
if (self%T(s) /= 0._R_P) U = U + (previous(s) * self%T(s))
343343
enddo
344344
do s=1, self%steps - 1
345-
if (self%Bhat(s) /= 0._R_P) U = U + previous(s)%t(t=t(s)) * (Dt * self%Bhat(s))
345+
if (self%Bhat(s) /= 0._R_P) U = U + (previous(s)%t(t=t(s)) * (Dt * self%Bhat(s)))
346346
enddo
347347
do k=1, self%stages
348-
if (self%B(k) /= 0._R_P) U = U + stage(k)%t(t=t(self%steps)) * (Dt * self%B(k))
348+
if (self%B(k) /= 0._R_P) U = U + (stage(k)%t(t=t(self%steps)) * (Dt * self%B(k)))
349349
enddo
350350
if (autoupdate_) call self%update_previous(U=U, previous=previous)
351351
endsubroutine integrate

src/lib/foodie_integrator_runge_kutta_embedded.f90

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -687,16 +687,16 @@ subroutine integrate(self, U, stage, Dt, t)
687687
do s=1, self%stages
688688
stage(s) = U
689689
do ss=1, s - 1
690-
stage(s) = stage(s) + stage(ss) * (Dt * self%alph(s, ss))
690+
stage(s) = stage(s) + (stage(ss) * (Dt * self%alph(s, ss)))
691691
enddo
692692
stage(s) = stage(s)%t(t=t + self%gamm(s) * Dt)
693693
enddo
694694
! compute new time step
695695
U1 = U
696696
U2 = U
697697
do s=1, self%stages
698-
U1 = U1 + stage(s) * (Dt * self%beta(s, 1))
699-
U2 = U2 + stage(s) * (Dt * self%beta(s, 2))
698+
U1 = U1 + (stage(s) * (Dt * self%beta(s, 1)))
699+
U2 = U2 + (stage(s) * (Dt * self%beta(s, 2)))
700700
enddo
701701
error = U2.lterror.U1
702702
call self%new_Dt(error=error, Dt=Dt)

src/lib/foodie_integrator_runge_kutta_low_storage.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,8 +414,8 @@ subroutine integrate(self, U, stage, Dt, t)
414414
stage(1) = U
415415
stage(2) = U * 0._R_P
416416
do s=1, self%stages
417-
stage(2) = stage(2) * self%A(s) + stage(1)%t(t=t + self%C(s) * Dt) * Dt
418-
stage(1) = stage(1) + stage(2) * self%B(s)
417+
stage(2) = (stage(2) * self%A(s)) + (stage(1)%t(t=t + self%C(s) * Dt) * Dt)
418+
stage(1) = stage(1) + (stage(2) * self%B(s))
419419
enddo
420420
U = stage(1)
421421
endsubroutine integrate

0 commit comments

Comments
 (0)