implementations.problem_classes.Battery module¶
- class battery(ncapacitors=1, Vs=5.0, Rs=0.5, C=None, R=1.0, L=1.0, alpha=1.2, V_ref=None)[source]¶
Bases:
battery_n_capacitors
Example implementing the battery drain model with \(N=1\) capacitor, inherits from
battery_n_capacitors
. This model is an example of a discontinuous problem. The state function \(decides\) which differential equation is solved. When the state function has a sign change the dynamics of the solution changes by changing the differential equation. The ODE system of this model is given by the following equations:If \(h(v_1) := v_1 - V_{ref, 0} > 0:\)
\[\frac{d i_L (t)}{dt} = 0,\]\[\frac{d v_1 (t)}{dt} = -\frac{1}{CR}v_1 (t),\]else:
\[\frac{d i_L(t)}{dt} = -\frac{R_s + R}{L}i_L (t) + \frac{1}{L} V_s,\]\[\frac{d v_1(t)}{dt} = 0,\]where \(i_L\) denotes the function of the current over time \(t\).
Note
This class has the same attributes as the class it inherits from.
- dtype_f¶
alias of
imex_mesh
- eval_f(u, t)[source]¶
Routine to evaluate the right-hand side of the problem.
- Parameters:
u (dtype_u) – Current values of the numerical solution.
t (float) – Current time of the numerical solution is computed.
- Returns:
f – The right-hand side of the problem.
- Return type:
dtype_f
- solve_system(rhs, factor, u0, t)[source]¶
Simple linear solver for \((I-factor\cdot A)\vec{u}=\vec{rhs}\).
- Parameters:
rhs (dtype_f) – Right-hand side for the linear system.
factor (float) – Abbrev. for the local stepsize (or any other factor required).
u0 (dtype_u) – Initial guess for the iterative solver.
t (float) – Current time (e.g. for time-dependent BCs).
- Returns:
me – The solution as mesh.
- Return type:
dtype_u
- class battery_implicit(ncapacitors=1, Vs=5.0, Rs=0.5, C=None, R=1.0, L=1.0, alpha=1.2, V_ref=None, newton_maxiter=100, newton_tol=1e-11)[source]¶
Bases:
battery
Example implementing the battery drain model as above. The method solve_system uses a fully-implicit computation.
- Parameters:
ncapacitors (int, optional) – Number of capacitors in the circuit.
Vs (float, optional) – Voltage at the voltage source \(V_s\).
Rs (float, optional) – Resistance of the resistor \(R_s\) at the voltage source.
C (np.1darray, optional) – Capacitances of the capacitors. Length of array must equal to number of capacitors.
R (float, optional) – Resistance for the load \(R_\ell\).
L (float, optional) – Inductance of inductor \(L\).
alpha (float, optional) – Factor greater than zero to describe the storage of the capacitor(s).
V_ref (float, optional) – Reference value greater than zero for the battery to switch to the voltage source.
newton_maxiter (int, optional) – Number of maximum iterations for the Newton solver.
newton_tol (float, optional) – Tolerance for determination of the Newton solver.
- work_counters¶
Counts different things, here: Number of Newton iterations is counted.
- Type:
- dtype_f¶
alias of
mesh
- eval_f(u, t)[source]¶
Routine to evaluate the right-hand side of the problem.
- Parameters:
u (dtype_u) – Current values of the numerical solution.
t (float) – Current time of the numerical solution is computed.
- Returns:
f – The right-hand side of the problem.
- Return type:
dtype_f
- solve_system(rhs, factor, u0, t)[source]¶
Simple Newton solver.
- Parameters:
rhs (dtype_f) – Right-hand side for the nonlinear system.
factor (float) – Abbrev. for the local stepsize (or any other factor required).
u0 (dtype_u) – Initial guess for the iterative solver
t (float) – Current time (e.g. for time-dependent BCs).
- Returns:
me – The solution as mesh.
- Return type:
dtype_u
- class battery_n_capacitors(ncapacitors=2, Vs=5.0, Rs=0.5, C=None, R=1.0, L=1.0, alpha=1.2, V_ref=None)[source]¶
Bases:
Problem
Example implementing the battery drain model with \(N\) capacitors, where \(N\) is an arbitrary integer greater than zero. First, the capacitor \(C\) serves as a battery and provides energy. When the voltage of the capacitor \(v_{C_n}\) for \(n=1,..,N\) drops below their reference value \(V_{ref,n-1}\), the circuit switches to the next capacitor. If all capacitors has dropped below their reference value, the voltage source \(V_s\) provides further energy. The problem of simulating the battery draining has \(N + 1\) different states. Each of this state can be expressed as a nonhomogeneous linear system of ordinary differential equations (ODEs)
\[\frac{d u(t)}{dt} = A_k u(t) + f_k (t)\]for \(k=1,..,N+1\) using an initial condition.
- Parameters:
ncapacitors (int, optional) – Number of capacitors \(n_{capacitors}\) in the circuit.
Vs (float, optional) – Voltage at the voltage source \(V_s\).
Rs (float, optional) – Resistance of the resistor \(R_s\) at the voltage source.
C (np.1darray, optional) – Capacitances of the capacitors \(C_n\).
R (float, optional) – Resistance for the load \(R_\ell\).
L (float, optional) – Inductance of inductor \(L\).
alpha (float, optional) – Factor greater than zero to describe the storage of the capacitor(s).
V_ref (np.1darray, optional) – Array contains the reference values greater than zero for each capacitor to switch to the next energy source.
- A¶
Coefficients matrix of the linear system of ordinary differential equations (ODEs).
- Type:
matrix
- switch_A¶
Dictionary that contains the coefficients for the coefficient matrix A.
- Type:
dict
- switch_f¶
Dictionary that contains the coefficients of the right-hand side f of the ODE system.
- Type:
dict
- t_switch¶
Time point of the discrete event found by switch estimation.
- Type:
float
- nswitches¶
Number of switches found by switch estimation.
- Type:
int
Note
The array containing the capacitances \(C_n\) and the array containing the reference values \(V_{ref, n-1}\) for each capacitor must be equal to the number of capacitors \(n_{capacitors}\).
- count_switches()[source]¶
Counts the number of switches. This function is called when a switch is found inside the range of tolerance (in pySDC/projects/PinTSimE/switch_estimator.py)
- dtype_f¶
alias of
imex_mesh
- dtype_u¶
alias of
mesh
- eval_f(u, t)[source]¶
Routine to evaluate the right-hand side of the problem. Let \(v_k:=v_{C_k}\) be the voltage of capacitor \(C_k\) for \(k=1,..,N\) with reference value \(V_{ref, k-1}\). No switch estimator is used: For \(N = 3\) there are \(N + 1 = 4\) different states of the battery:
\(C_1\) supplies energy if:
\[v_1 > V_{ref,0}, v_2 > V_{ref,1}, v_3 > V_{ref,2},\]\(C_2\) supplies energy if:
\[v_1 \leq V_{ref,0}, v_2 > V_{ref,1}, v_3 > V_{ref,2},\]\(C_3\) supplies energy if:
\[v_1 \leq V_{ref,0}, v_2 \leq V_{ref,1}, v_3 > V_{ref,2},\]\(V_s\) supplies energy if:
\[v_1 \leq V_{ref,0}, v_2 \leq V_{ref,1}, v_3 \leq V_{ref,2}.\]- \(max_{index}\) is initialized to \(-1\). List “switch” contains a True if \(v_k \leq V_{ref,k-1}\) is satisfied.
Is no True there (i.e., \(max_{index}=-1\)), we are in the first case.
\(max_{index}=k\geq 0\) means we are in the \((k+1)\)-th case. So, the actual RHS has key \(max_{index}\)-1 in the dictionary self.switch_f.
In case of using the switch estimator, we count the number of switches which illustrates in which case of voltage source we are.
- Parameters:
u (dtype_u) – Current values of the numerical solution.
t (float) – Current time of the numerical solution is computed.
- Returns:
f – The right-hand side of the problem.
- Return type:
dtype_f
- get_problem_dict()[source]¶
Helper to create dictionaries for both the coefficent matrix of the ODE system and the nonhomogeneous part.
- get_switching_info(u, t)[source]¶
Provides information about a discrete event for one subinterval.
- Parameters:
u (dtype_u) – Current values of the numerical solution.
t (float) – Current time of the numerical solution is computed.
- Returns:
switch_detected (bool) – Indicates if a switch is found or not.
m_guess (int) – Index of collocation node inside one subinterval of where the discrete event was found.
state_function (list) – Contains values of the state function (for interpolation).
- solve_system(rhs, factor, u0, t)[source]¶
Simple linear solver for \((I-factor\cdot A)\vec{u}=\vec{rhs}\).
- Parameters:
rhs (dtype_f) – Right-hand side for the linear system.
factor (float) – Abbrev. for the local stepsize (or any other factor required).
u0 (dtype_u) – Initial guess for the iterative solver.
t (float) – Current time (e.g. for time-dependent BCs).
- Returns:
me – The solution as mesh.
- Return type:
dtype_u