|
6 | 6 | from diffmpm.constraint import Constraint |
7 | 7 | from diffmpm.node import Nodes |
8 | 8 |
|
9 | | -material_dstrain_particles_state_vars_element_targets_dt = [ |
| 9 | +particles_element_targets = [ |
10 | 10 | ( |
11 | | - Bingham( |
12 | | - { |
13 | | - "density": 1000, |
14 | | - "youngs_modulus": 1.0e7, |
15 | | - "poisson_ratio": 0.3, |
16 | | - "tau0": 771.8, |
17 | | - "mu": 0.0451, |
18 | | - "critical_shear_rate": 0.2, |
19 | | - "ndim": 2, |
20 | | - } |
21 | | - ), |
22 | | - None, |
23 | 11 | Particles( |
24 | 12 | jnp.array([[0.5, 0.5]]).reshape(1, 1, 2), |
25 | 13 | ( |
|
37 | 25 | ), |
38 | 26 | jnp.array([0]), |
39 | 27 | ), |
40 | | - {"pressure": jnp.zeros(1)}, |
41 | 28 | Quadrilateral4Node( |
42 | 29 | (1, 1), |
43 | 30 | 1, |
|
46 | 33 | Nodes(4, jnp.array([-2, -2, 2, -2, -2, 2, 2, 2]).reshape((4, 1, 2))), |
47 | 34 | ), |
48 | 35 | jnp.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0]).reshape((6, 1)), |
49 | | - 1.0, |
50 | 36 | ), |
51 | 37 | ( |
52 | | - Bingham( |
53 | | - { |
54 | | - "density": 1000, |
55 | | - "youngs_modulus": 1.0e7, |
56 | | - "poisson_ratio": 0.3, |
57 | | - "tau0": 771.8, |
58 | | - "mu": 0.0451, |
59 | | - "critical_shear_rate": 0.2, |
60 | | - "ndim": 2, |
61 | | - } |
62 | | - ), |
63 | | - None, |
64 | 38 | Particles( |
65 | 39 | jnp.array([[0.5, 0.5]]).reshape(1, 1, 2), |
66 | 40 | ( |
|
78 | 52 | ), |
79 | 53 | jnp.array([0]), |
80 | 54 | ), |
81 | | - {"pressure": jnp.zeros(1)}, |
82 | 55 | Quadrilateral4Node( |
83 | 56 | (1, 1), |
84 | 57 | 1, |
|
89 | 62 | jnp.array([-52083.3333333333, -52083.3333333333, 0.0, 0.0, 0.0, 0.0]).reshape( |
90 | 63 | (6, 1) |
91 | 64 | ), |
92 | | - 1.0, |
93 | 65 | ), |
94 | 66 | ( |
95 | | - Bingham( |
96 | | - { |
97 | | - "density": 1000, |
98 | | - "youngs_modulus": 1.0e7, |
99 | | - "poisson_ratio": 0.3, |
100 | | - "tau0": 200.0, |
101 | | - "mu": 200.0, |
102 | | - "critical_shear_rate": 0.2, |
103 | | - "ndim": 2, |
104 | | - } |
105 | | - ), |
106 | | - None, |
107 | 67 | Particles( |
108 | 68 | jnp.array([[0.5, 0.5]]).reshape(1, 1, 2), |
109 | 69 | ( |
|
121 | 81 | ), |
122 | 82 | jnp.array([0]), |
123 | 83 | ), |
124 | | - {"pressure": jnp.zeros(1)}, |
125 | 84 | Quadrilateral4Node( |
126 | 85 | (1, 1), |
127 | 86 | 1, |
|
132 | 91 | jnp.array( |
133 | 92 | [-5208520.35574006, -5208613.86694342, 0.0, -233.778008402801, 0.0, 0.0] |
134 | 93 | ).reshape((6, 1)), |
135 | | - 1.0, |
136 | 94 | ), |
137 | 95 | ( |
138 | | - Bingham( |
139 | | - { |
140 | | - "density": 1000, |
141 | | - "youngs_modulus": 1.0e7, |
142 | | - "poisson_ratio": 0.3, |
143 | | - "tau0": 200.0, |
144 | | - "mu": 200.0, |
145 | | - "critical_shear_rate": 0.2, |
146 | | - "ndim": 2, |
147 | | - "incompressible": True, |
148 | | - } |
149 | | - ), |
150 | | - None, |
151 | 96 | Particles( |
152 | 97 | jnp.array([[0.5, 0.5]]).reshape(1, 1, 2), |
153 | 98 | ( |
|
166 | 111 | ), |
167 | 112 | jnp.array([0]), |
168 | 113 | ), |
169 | | - {"pressure": jnp.zeros(1)}, |
170 | 114 | Quadrilateral4Node( |
171 | 115 | (1, 1), |
172 | 116 | 1, |
|
177 | 121 | jnp.array( |
178 | 122 | [-187.0224067222, -280.5336100834, 0.0, -233.778008402801, 0.0, 0.0] |
179 | 123 | ).reshape((6, 1)), |
180 | | - 1.0, |
181 | 124 | ), |
182 | 125 | ] |
183 | 126 |
|
184 | 127 |
|
| 128 | +@pytest.fixture |
| 129 | +def state_vars(): |
| 130 | + return {"pressure": jnp.zeros(1)} |
| 131 | + |
| 132 | + |
| 133 | +@pytest.fixture |
| 134 | +def dt(): |
| 135 | + return 1.0 |
| 136 | + |
| 137 | + |
185 | 138 | @pytest.mark.parametrize( |
186 | | - "material, dstrain, particles, state_vars, element, target, dt", |
187 | | - material_dstrain_particles_state_vars_element_targets_dt, |
| 139 | + "particles, element, target", |
| 140 | + particles_element_targets, |
188 | 141 | ) |
189 | | -def test_compute_stress(material, dstrain, particles, state_vars, element, target, dt): |
190 | | - if element.constraints != []: |
| 142 | +def test_compute_stress(particles, state_vars, element, target, dt): |
| 143 | + particles.update_natural_coords(element) |
| 144 | + if element.constraints: |
191 | 145 | element.apply_boundary_constraints() |
192 | 146 | particles.compute_strain(element, dt) |
193 | | - stress = material.compute_stress(dstrain, particles, state_vars) |
| 147 | + stress = particles.material.compute_stress(None, particles, state_vars) |
194 | 148 | assert jnp.allclose(stress, target) |
0 commit comments