@@ -15,11 +15,15 @@ class Lumped(BaseThermal):
15
15
The parameters to use for this submodel
16
16
cc_dimension: int, optional
17
17
The dimension of the current collectors. Can be 0 (default), 1 or 2.
18
+ geometry: string, optional
19
+ The geometry for the lumped thermal submodel. Can be "arbitrary" (default) or
20
+ pouch.
18
21
19
22
**Extends:** :class:`pybamm.thermal.BaseThermal`
20
23
"""
21
24
22
- def __init__ (self , param , cc_dimension = 0 ):
25
+ def __init__ (self , param , cc_dimension = 0 , geometry = "arbitrary" ):
26
+ self .geometry = geometry
23
27
super ().__init__ (param , cc_dimension )
24
28
25
29
def get_fundamental_variables (self ):
@@ -49,46 +53,53 @@ def set_rhs(self, variables):
49
53
T_amb = variables ["Ambient temperature" ]
50
54
51
55
# Account for surface area to volume ratio in cooling coefficient
52
- # Note: assumes pouch cell geometry. The factor 1/delta^2 comes from
53
- # the choice of non-dimensionalisation.
54
- # TODO: allow for arbitrary surface area to volume ratio in order to model
55
- # different cell geometries (see #718)
56
- cell_volume = self .param .l * self .param .l_y * self .param .l_z
57
-
58
- yz_cell_surface_area = self .param .l_y * self .param .l_z
59
- yz_surface_cooling_coefficient = (
60
- - (self .param .h_cn + self .param .h_cp )
61
- * yz_cell_surface_area
62
- / cell_volume
63
- / (self .param .delta ** 2 )
64
- )
56
+ # The factor 1/delta^2 comes from the choice of non-dimensionalisation.
57
+ if self .geometry == "pouch" :
58
+ cell_volume = self .param .l * self .param .l_y * self .param .l_z
59
+
60
+ yz_cell_surface_area = self .param .l_y * self .param .l_z
61
+ yz_surface_cooling_coefficient = (
62
+ - (self .param .h_cn + self .param .h_cp )
63
+ * yz_cell_surface_area
64
+ / cell_volume
65
+ / (self .param .delta ** 2 )
66
+ )
65
67
66
- negative_tab_area = self .param .l_tab_n * self .param .l_cn
67
- negative_tab_cooling_coefficient = (
68
- - self .param .h_tab_n * negative_tab_area / cell_volume / self .param .delta
69
- )
68
+ negative_tab_area = self .param .l_tab_n * self .param .l_cn
69
+ negative_tab_cooling_coefficient = (
70
+ - self .param .h_tab_n * negative_tab_area / cell_volume / self .param .delta
71
+ )
70
72
71
- positive_tab_area = self .param .l_tab_p * self .param .l_cp
72
- positive_tab_cooling_coefficient = (
73
- - self .param .h_tab_p * positive_tab_area / cell_volume / self .param .delta
74
- )
73
+ positive_tab_area = self .param .l_tab_p * self .param .l_cp
74
+ positive_tab_cooling_coefficient = (
75
+ - self .param .h_tab_p * positive_tab_area / cell_volume / self .param .delta
76
+ )
75
77
76
- edge_area = (
77
- 2 * self .param .l_y * self .param .l
78
- + 2 * self .param .l_z * self .param .l
79
- - negative_tab_area
80
- - positive_tab_area
81
- )
82
- edge_cooling_coefficient = (
83
- - self .param .h_edge * edge_area / cell_volume / self .param .delta
84
- )
78
+ edge_area = (
79
+ 2 * self .param .l_y * self .param .l
80
+ + 2 * self .param .l_z * self .param .l
81
+ - negative_tab_area
82
+ - positive_tab_area
83
+ )
84
+ edge_cooling_coefficient = (
85
+ - self .param .h_edge * edge_area / cell_volume / self .param .delta
86
+ )
85
87
86
- total_cooling_coefficient = (
87
- yz_surface_cooling_coefficient
88
- + negative_tab_cooling_coefficient
89
- + positive_tab_cooling_coefficient
90
- + edge_cooling_coefficient
91
- )
88
+ total_cooling_coefficient = (
89
+ yz_surface_cooling_coefficient
90
+ + negative_tab_cooling_coefficient
91
+ + positive_tab_cooling_coefficient
92
+ + edge_cooling_coefficient
93
+ )
94
+ elif self .geometry == "arbitrary" :
95
+ cell_surface_area = self .param .a_cooling
96
+ cell_volume = self .param .v_cell
97
+ total_cooling_coefficient = (
98
+ - self .param .h_total
99
+ * cell_surface_area
100
+ / cell_volume
101
+ / (self .param .delta ** 2 )
102
+ )
92
103
93
104
self .rhs = {
94
105
T_vol_av : (
0 commit comments