|
28 | 28 | | / | / |
29 | 29 | 4--------------5 |
30 | 30 |
|
31 | | -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
32 | | ----------------------------------- |
33 | | -0 | | | | | | | | |
34 | | ----------------------------------- |
35 | | -1 | | | | | | | | |
36 | | ----------------------------------- |
37 | | -2 | | | | | | | | |
38 | | ----------------------------------- |
39 | | -3 | | | | | | | | |
40 | | ----------------------------------- |
41 | | -4 | | | | | | | | |
42 | | ----------------------------------- |
43 | | -5 | | | | | | | | |
44 | | ----------------------------------- |
45 | | -6 | | | | | | | | |
46 | | ----------------------------------- |
47 | | -7 | | | | | | | | |
48 | | -
|
49 | 31 | A two-element mesh: |
50 | 32 |
|
51 | 33 | Element 1 Element 2 |
|
59 | 41 | | / | / | / |
60 | 42 | 6--------------7--------------8 |
61 | 43 |
|
62 | | -
|
63 | | -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
64 | | ---------------------------------------------------- |
65 | | -0 |e1 |e1 | | | | | | | | | | |
66 | | ---------------------------------------------------- |
67 | | -1 |e1 |e12| | | | | | | | | | |
68 | | ---------------------------------------------------- |
69 | | -2 | | |e2 | | | | | | | | | |
70 | | ---------------------------------------------------- |
71 | | -3 | | | |e1 | | | | | | | | |
72 | | ---------------------------------------------------- |
73 | | -4 | | | | |e12| | | | | | | |
74 | | ---------------------------------------------------- |
75 | | -5 | | | | | |e2 | | | | | | |
76 | | ---------------------------------------------------- |
77 | | -6 | | | | | | |e1 | | | | | |
78 | | ---------------------------------------------------- |
79 | | -7 | | | | | | | |e12| | | | |
80 | | ---------------------------------------------------- |
81 | | -8 | | | | | | | | |e2 | | | |
82 | | ---------------------------------------------------- |
83 | | -9 | | | | | | | | | |e1 | | |
84 | | ---------------------------------------------------- |
85 | | -10| | | | | | | | | | |e12 | |
86 | | ---------------------------------------------------- |
87 | | -11| | | | | | | | | | | |e2 |
88 | | -
|
89 | 44 | """ |
90 | 45 |
|
91 | 46 | # Standard imports |
|
94 | 49 |
|
95 | 50 | # Local imports |
96 | 51 | from SPI2py.models.physics.distributed.mesh import generate_mesh |
97 | | -from SPI2py.models.physics.distributed.assembly import assemble_global_stiffness |
98 | | - |
| 52 | +from SPI2py.models.physics.distributed.assembly import assemble_sparse_global_stiffness |
99 | 53 |
|
100 | 54 | w = 1 # x |
101 | 55 | h = 1 # y |
102 | 56 | d = 1 # Z |
103 | 57 |
|
| 58 | +# Assemble the global stiffness matrix and convert it to a dense matrix |
104 | 59 | nodes_2e, elements_2e, _, _, _, _, _, _, _ = generate_mesh(0, 2*w, 0, h, 0, d, element_size=1.0) |
105 | | -Ke_flat, elem_indices, rows_flat, cols_flat, n_nodes, n_elem = assemble_global_stiffness(nodes_2e, elements_2e, base_k=1.0) |
| 60 | +Ke_flat, elem_indices, rows_flat, cols_flat, n_nodes, n_elem = assemble_sparse_global_stiffness(nodes_2e, elements_2e, base_k=1.0) |
106 | 61 | indices = jnp.stack([rows_flat, cols_flat], axis=-1) |
107 | 62 | K_global = K_pf = BCOO((Ke_flat, indices), shape=(n_nodes, n_nodes)) |
108 | 63 | K_global_dense = K_global.todense() |
|
133 | 88 | [H, G, F, E, D, C, B, A]]) |
134 | 89 |
|
135 | 90 |
|
136 | | -# K_global_expected = jnp.zeros((12, 12)) |
137 | | -# K_global_expected[] |
138 | | - |
139 | 91 |
|
140 | 92 | # Confirm that all entries that should be zeros are zeros |
141 | 93 |
|
|
190 | 142 | assert jnp.all(K_global_dense[non_zeros_i, non_zeros_j] != 0.0) |
191 | 143 |
|
192 | 144 |
|
| 145 | + |
| 146 | + |
| 147 | +# Now spot check some values; K_e1 == K_e2 == K_ex |
| 148 | + |
| 149 | +# K[0,0] == K_e1[0,0] |
| 150 | +assert jnp.isclose(K_global_dense[0, 0], k_ex[0, 0]) |
| 151 | + |
| 152 | +# K[1,1] == K_e1[1,1] + K_e2[0,0] |
| 153 | +assert jnp.isclose(K_global_dense[1, 1], k_ex[1, 1] + k_ex[0, 0]) |
| 154 | + |
| 155 | +# K[0,9] == K_e1[0,7] and K[9,0] == K_e2[7,0] |
| 156 | +assert jnp.isclose(K_global_dense[0, 9], k_ex[0, 7]) |
| 157 | + |
| 158 | +# K[11,11] == K_e2[6,6] |
| 159 | +assert jnp.isclose(K_global_dense[11, 11], k_ex[6, 6]) |
| 160 | + |
| 161 | + |
| 162 | + |
| 163 | + |
| 164 | + |
| 165 | + |
| 166 | + |
| 167 | + |
| 168 | + |
| 169 | + |
| 170 | + |
| 171 | + |
| 172 | + |
| 173 | +# # Verify |
| 174 | +# cond_00_00 = 1 |
| 175 | +# cond_00_01 = 1 |
| 176 | +# cond_00_02 = 1 |
| 177 | +# cond_00_03 = 1 |
| 178 | +# cond_00_04 = 1 |
| 179 | +# cond_00_05 = 1 |
| 180 | +# cond_00_06 = 1 |
| 181 | +# cond_00_07 = 1 |
| 182 | +# cond_00_08 = 1 |
| 183 | +# cond_00_09 = 1 |
| 184 | +# cond_00_10 = 1 |
| 185 | +# cond_00_11 = 1 |
| 186 | +# |
| 187 | +# cond_01_00 = 1 |
| 188 | +# cond_01_01 = 1 |
| 189 | +# cond_01_02 = 1 |
| 190 | +# cond_01_03 = 1 |
| 191 | +# cond_01_04 = 1 |
| 192 | +# cond_01_05 = 1 |
| 193 | +# cond_01_06 = 1 |
| 194 | +# cond_01_07 = 1 |
| 195 | +# cond_01_08 = 1 |
| 196 | +# cond_01_09 = 1 |
| 197 | +# cond_01_10 = 1 |
| 198 | +# cond_01_11 = 1 |
| 199 | +# |
| 200 | +# cond_02_00 = 1 |
| 201 | +# cond_02_01 = 1 |
| 202 | +# cond_02_02 = 1 |
| 203 | +# cond_02_03 = 1 |
| 204 | +# cond_02_04 = 1 |
| 205 | +# cond_02_05 = 1 |
| 206 | +# cond_02_06 = 1 |
| 207 | +# cond_02_07 = 1 |
| 208 | +# cond_02_08 = 1 |
| 209 | +# cond_02_09 = 1 |
| 210 | +# cond_02_10 = 1 |
| 211 | +# cond_02_11 = 1 |
| 212 | +# |
| 213 | +# cond_03_00 = 1 |
| 214 | +# cond_03_01 = 1 |
| 215 | +# cond_03_02 = 1 |
| 216 | +# cond_03_03 = 1 |
| 217 | +# cond_03_04 = 1 |
| 218 | +# cond_03_05 = 1 |
| 219 | +# cond_03_06 = 1 |
| 220 | +# cond_03_07 = 1 |
| 221 | +# cond_03_08 = 1 |
| 222 | +# cond_03_09 = 1 |
| 223 | +# cond_03_10 = 1 |
| 224 | +# cond_03_11 = 1 |
| 225 | +# |
| 226 | +# cond_03_00 = 1 |
| 227 | +# cond_03_01 = 1 |
| 228 | +# cond_03_02 = 1 |
| 229 | +# cond_03_03 = 1 |
| 230 | +# cond_03_04 = 1 |
| 231 | +# cond_03_05 = 1 |
| 232 | +# cond_03_06 = 1 |
| 233 | +# cond_03_07 = 1 |
| 234 | +# cond_03_08 = 1 |
| 235 | +# cond_03_09 = 1 |
| 236 | +# cond_03_10 = 1 |
| 237 | +# cond_03_11 = 1 |
| 238 | +# |
| 239 | +# cond_04_00 = 1 |
| 240 | +# cond_04_01 = 1 |
| 241 | +# cond_04_02 = 1 |
| 242 | +# cond_04_03 = 1 |
| 243 | +# cond_04_04 = 1 |
| 244 | +# cond_04_05 = 1 |
| 245 | +# cond_04_06 = 1 |
| 246 | +# cond_04_07 = 1 |
| 247 | +# cond_04_08 = 1 |
| 248 | +# cond_04_09 = 1 |
| 249 | +# cond_04_10 = 1 |
| 250 | +# cond_04_11 = 1 |
| 251 | +# |
| 252 | +# cond_00_00 = 1 |
| 253 | +# cond_00_01 = 1 |
| 254 | +# cond_00_02 = 1 |
| 255 | +# cond_00_03 = 1 |
| 256 | +# cond_00_04 = 1 |
| 257 | +# cond_00_05 = 1 |
| 258 | +# cond_00_06 = 1 |
| 259 | +# cond_00_07 = 1 |
| 260 | +# cond_00_08 = 1 |
| 261 | +# cond_00_09 = 1 |
| 262 | +# cond_00_10 = 1 |
| 263 | +# cond_00_11 = 1 |
0 commit comments