Skip to content

Commit a8fb8e7

Browse files
committed
Merged proof_assertions_description()
1 parent 1b79563 commit a8fb8e7

File tree

5 files changed

+36
-63
lines changed

5 files changed

+36
-63
lines changed

pySDC/implementations/problem_classes/Battery.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def eval_f(self, u, t):
6363

6464
t_switch = np.inf if self.t_switch is None else self.t_switch
6565

66-
if u[1] <= self.params.V_ref or t >= t_switch:
66+
if u[1] <= self.params.V_ref[0] or t >= t_switch:
6767
f.expl[0] = self.params.Vs / self.params.L
6868

6969
else:
@@ -88,11 +88,11 @@ def solve_system(self, rhs, factor, u0, t):
8888

8989
t_switch = np.inf if self.t_switch is None else self.t_switch
9090

91-
if rhs[1] <= self.params.V_ref or t >= t_switch:
91+
if rhs[1] <= self.params.V_ref[0] or t >= t_switch:
9292
self.A[0, 0] = -(self.params.Rs + self.params.R) / self.params.L
9393

9494
else:
95-
self.A[1, 1] = -1 / (self.params.C * self.params.R)
95+
self.A[1, 1] = -1 / (self.params.C[0] * self.params.R)
9696

9797
me = self.dtype_u(self.init)
9898
me[:] = np.linalg.solve(np.eye(self.params.nvars) - factor * self.A, rhs)
@@ -113,7 +113,7 @@ def u_exact(self, t):
113113
me = self.dtype_u(self.init)
114114

115115
me[0] = 0.0 # cL
116-
me[1] = self.params.alpha * self.params.V_ref # vC
116+
me[1] = self.params.alpha * self.params.V_ref[0] # vC
117117

118118
return me
119119

@@ -135,12 +135,12 @@ def get_switching_info(self, u, t):
135135
m_guess = -100
136136

137137
for m in range(len(u)):
138-
if u[m][1] - self.params.V_ref <= 0:
138+
if u[m][1] - self.params.V_ref[0] <= 0:
139139
switch_detected = True
140140
m_guess = m - 1
141141
break
142142

143-
vC_switch = [u[m][1] - self.params.V_ref for m in range(1, len(u))] if switch_detected else []
143+
vC_switch = [u[m][1] - self.params.V_ref[0] for m in range(1, len(u))] if switch_detected else []
144144

145145
return switch_detected, m_guess, vC_switch
146146

@@ -193,12 +193,12 @@ def eval_f(self, u, t):
193193

194194
t_switch = np.inf if self.t_switch is None else self.t_switch
195195

196-
if u[1] <= self.params.V_ref or t >= t_switch:
196+
if u[1] <= self.params.V_ref[0] or t >= t_switch:
197197
self.A[0, 0] = -(self.params.Rs + self.params.R) / self.params.L
198198
non_f[0] = self.params.Vs
199199

200200
else:
201-
self.A[1, 1] = -1 / (self.params.C * self.params.R)
201+
self.A[1, 1] = -1 / (self.params.C[0] * self.params.R)
202202
non_f[0] = 0
203203

204204
f[:] = self.A.dot(u) + non_f
@@ -224,12 +224,12 @@ def solve_system(self, rhs, factor, u0, t):
224224

225225
t_switch = np.inf if self.t_switch is None else self.t_switch
226226

227-
if rhs[1] <= self.params.V_ref or t >= t_switch:
227+
if rhs[1] <= self.params.V_ref[0] or t >= t_switch:
228228
self.A[0, 0] = -(self.params.Rs + self.params.R) / self.params.L
229229
non_f[0] = self.params.Vs
230230

231231
else:
232-
self.A[1, 1] = -1 / (self.params.C * self.params.R)
232+
self.A[1, 1] = -1 / (self.params.C[0] * self.params.R)
233233
non_f[0] = 0
234234

235235
# start newton iteration

pySDC/projects/PinTSimE/battery_2capacitors_model.py

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from pySDC.implementations.problem_classes.Battery import battery_n_capacitors
88
from pySDC.implementations.sweeper_classes.imex_1st_order import imex_1st_order
99
from pySDC.implementations.controller_classes.controller_nonMPI import controller_nonMPI
10-
from pySDC.projects.PinTSimE.battery_model import get_recomputed
10+
from pySDC.projects.PinTSimE.battery_model import get_recomputed, proof_assertions_description
1111
from pySDC.projects.PinTSimE.piline_model import setup_mpl
1212
import pySDC.helpers.plot_helper as plt_helper
1313
from pySDC.core.Hooks import hooks
@@ -126,7 +126,7 @@ def main(use_switch_estimator=True):
126126
if use_switch_estimator:
127127
description['convergence_controllers'] = convergence_controllers
128128

129-
proof_assertions_description(description, use_switch_estimator)
129+
proof_assertions_description(description, False, use_switch_estimator)
130130

131131
# set time parameters
132132
t0 = 0.0
@@ -300,43 +300,5 @@ def get_data_dict(stats, use_switch_estimator, recomputed=False):
300300
return data
301301

302302

303-
def proof_assertions_description(description, use_switch_estimator):
304-
"""
305-
Function to proof the assertions (function to get cleaner code)
306-
307-
Args:
308-
description(dict): contains all information for a controller run
309-
use_switch_estimator (bool): flag if the switch estimator wants to be used or not
310-
"""
311-
312-
assert (
313-
description['problem_params']['alpha'] > description['problem_params']['V_ref'][0]
314-
), 'Please set "alpha" greater than "V_ref1"'
315-
assert (
316-
description['problem_params']['alpha'] > description['problem_params']['V_ref'][1]
317-
), 'Please set "alpha" greater than "V_ref2"'
318-
319-
if description['problem_params']['ncondensators'] > 1:
320-
assert (
321-
type(description['problem_params']['V_ref']) == np.ndarray
322-
), '"V_ref" needs to be an array (of type float)'
323-
assert (
324-
description['problem_params']['ncondensators'] == np.shape(description['problem_params']['V_ref'])[0]
325-
), 'Number of reference values needs to be equal to number of condensators'
326-
assert (
327-
description['problem_params']['ncondensators'] == np.shape(description['problem_params']['C'])[0]
328-
), 'Number of capacitance values needs to be equal to number of condensators'
329-
330-
assert description['problem_params']['V_ref'][0] > 0, 'Please set "V_ref1" greater than 0'
331-
assert description['problem_params']['V_ref'][1] > 0, 'Please set "V_ref2" greater than 0'
332-
333-
assert 'errtol' not in description['step_params'].keys(), 'No exact solution known to compute error'
334-
assert 'alpha' in description['problem_params'].keys(), 'Please supply "alpha" in the problem parameters'
335-
assert 'V_ref' in description['problem_params'].keys(), 'Please supply "V_ref" in the problem parameters'
336-
337-
if use_switch_estimator:
338-
assert description['level_params']['restol'] == -1, "Please set restol to -1 or omit it"
339-
340-
341303
if __name__ == "__main__":
342304
main()

pySDC/projects/PinTSimE/battery_model.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,11 @@ def main(dt, problem, sweeper, use_switch_estimator, use_adaptivity):
108108
problem_params['ncondensators'] = 1 # number of condensators
109109
problem_params['Vs'] = 5.0
110110
problem_params['Rs'] = 0.5
111-
problem_params['C'] = 1.0
111+
problem_params['C'] = np.array([1.0])
112112
problem_params['R'] = 1.0
113113
problem_params['L'] = 1.0
114114
problem_params['alpha'] = 1.2
115-
problem_params['V_ref'] = 1.0
115+
problem_params['V_ref'] = np.array([1.0])
116116

117117
# initialize step parameters
118118
step_params = dict()
@@ -600,18 +600,29 @@ def proof_assertions_description(description, use_adaptivity, use_switch_estimat
600600
use_switch_estimator (bool): flag if the switch estimator wants to be used or not
601601
"""
602602

603+
n = description['problem_params']['ncondensators']
603604
assert (
604-
description['problem_params']['alpha'] > description['problem_params']['V_ref']
605-
), 'Please set "alpha" greater than "V_ref"'
606-
assert description['problem_params']['V_ref'] > 0, 'Please set "V_ref" greater than 0'
607-
assert type(description['problem_params']['V_ref']) == float, '"V_ref" needs to be of type float'
605+
description['problem_params']['alpha'] > description['problem_params']['V_ref'][k] for k in range(n)
606+
), 'Please set "alpha" greater than values of "V_ref"'
607+
assert type(description['problem_params']['V_ref']) == np.ndarray, '"V_ref" needs to be an np.ndarray'
608+
assert type(description['problem_params']['C']) == np.ndarray, '"C" needs to be an np.ndarray '
609+
assert (
610+
description['problem_params']['ncondensators'] == np.shape(description['problem_params']['V_ref'])[0]
611+
), 'Number of reference values needs to be equal to number of condensators'
612+
assert (
613+
description['problem_params']['ncondensators'] == np.shape(description['problem_params']['C'])[0]
614+
), 'Number of capacitance values needs to be equal to number of condensators'
615+
616+
assert (
617+
description['problem_params']['V_ref'][k] > 0 for k in range(n)
618+
), 'Please set values of "V_ref" greater than 0'
608619

609620
assert 'errtol' not in description['step_params'].keys(), 'No exact solution known to compute error'
610621
assert 'alpha' in description['problem_params'].keys(), 'Please supply "alpha" in the problem parameters'
611622
assert 'V_ref' in description['problem_params'].keys(), 'Please supply "V_ref" in the problem parameters'
612623

613624
if use_switch_estimator or use_adaptivity:
614-
assert description['level_params']['restol'] == -1, "For adaptivity, please set restol to -1 or omit it"
625+
assert description['level_params']['restol'] == -1, "Please set restol to -1 or omit it"
615626

616627

617628
if __name__ == "__main__":

pySDC/projects/PinTSimE/estimation_check.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from pySDC.implementations.convergence_controller_classes.adaptivity import Adaptivity
1818

1919

20-
def run(dt, problem, sweeper, use_switch_estimator, use_adaptivity, V_ref):
20+
def run(dt, problem, sweeper, use_switch_estimator, use_adaptivity):
2121
"""
2222
A simple test program to do SDC/PFASST runs for the battery drain model
2323
@@ -53,11 +53,11 @@ def run(dt, problem, sweeper, use_switch_estimator, use_adaptivity, V_ref):
5353
problem_params['ncondensators'] = 1
5454
problem_params['Vs'] = 5.0
5555
problem_params['Rs'] = 0.5
56-
problem_params['C'] = 1.0
56+
problem_params['C'] = np.array([1.0])
5757
problem_params['R'] = 1.0
5858
problem_params['L'] = 1.0
5959
problem_params['alpha'] = 1.2
60-
problem_params['V_ref'] = V_ref
60+
problem_params['V_ref'] = np.array([1.0])
6161

6262
# initialize step parameters
6363
step_params = dict()
@@ -127,7 +127,6 @@ def check(cwd='./'):
127127
cwd: current working directory
128128
"""
129129

130-
V_ref = 1.0
131130
dt_list = [4e-2, 4e-3]
132131
use_switch_estimator = [True, False]
133132
use_adaptivity = [True, False]
@@ -148,9 +147,10 @@ def check(cwd='./'):
148147
sweeper=sweeper,
149148
use_switch_estimator=use_SE,
150149
use_adaptivity=use_A,
151-
V_ref=V_ref,
152150
)
153151

152+
V_ref = description['problem_params']['V_ref'][0]
153+
154154
if use_A or use_SE:
155155
check_solution(stats, dt_item, problem.__name__, use_A, use_SE)
156156

pySDC/projects/PinTSimE/estimation_check_2capacitors.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def run(dt, use_switch_estimator=True):
8282
if use_switch_estimator:
8383
description['convergence_controllers'] = convergence_controllers
8484

85-
proof_assertions_description(description, problem_params)
85+
proof_assertions_description(description, False, use_switch_estimator)
8686

8787
# set time parameters
8888
t0 = 0.0

0 commit comments

Comments
 (0)