Skip to content

Commit 975ea78

Browse files
authored
[MISC] Add get_particles_pos method to sph (#1871)
1 parent 43b5b7b commit 975ea78

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

genesis/engine/entities/sph_entity.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,11 @@ def get_particles_active(self, envs_idx=None, *, unsafe=False):
183183
if self._scene.n_envs == 0:
184184
actives = actives.squeeze(0)
185185
return actives
186+
187+
def get_particles_pos(self, envs_idx=None, *, unsafe=False):
188+
envs_idx = self._scene._sanitize_envs_idx(envs_idx, unsafe=unsafe)
189+
poss = torch.empty((len(envs_idx), self.n_particles, 3), dtype=gs.tc_float, device=gs.device)
190+
self.solver._kernel_get_particles_pos(self._particle_start, self.n_particles, envs_idx, poss)
191+
if self._scene.n_envs == 0:
192+
poss = poss.squeeze(0)
193+
return poss

tests/test_deformable_physics.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,28 @@ def test_deformable_parallel(show_viewer):
186186
)
187187
scene.build(n_envs=2)
188188

189+
init_mpm_cube_pos = mpm_cube.get_particles_pos()
190+
init_cloth_pos = cloth.get_particles_pos()
191+
init_water_pos = water.get_particles_pos()
192+
189193
scene.get_state()
190194
for i in range(1500):
191195
scene.step()
192196

197+
final_mpm_cube_pos = mpm_cube.get_particles_pos()
198+
final_cloth_pos = cloth.get_particles_pos()
199+
final_water_pos = water.get_particles_pos()
200+
201+
# check if the positions are changed
202+
assert (init_mpm_cube_pos - final_mpm_cube_pos).abs().sum() > 0.1
203+
assert (init_cloth_pos - final_cloth_pos).abs().sum() > 0.1
204+
assert (init_water_pos - final_water_pos).abs().sum() > 0.1
205+
206+
# check if the particles are above the ground
207+
assert final_mpm_cube_pos[..., 2].min() > -1e-5
208+
assert final_cloth_pos[..., 2].min() > -1e-5
209+
assert final_water_pos[..., 2].min() > -1e-5
210+
193211
assert_allclose(cloth.get_particles_vel(), 0.0, atol=1e-5)
194212
assert_allclose(mpm_cube.get_particles_vel(), 0.0, atol=1e-4)
195213
assert_allclose(entity_fem._solver.get_state(0).vel, 0, atol=1e-3)

0 commit comments

Comments
 (0)