@@ -30,9 +30,6 @@ def tree_unflatten(cls, aux_data, children):
3030 return cls (* children , aux_data [0 ], scheme = aux_data [1 ])
3131
3232 def solve (self , nsteps : int , gravity : float ):
33- # self.initialize_materials()
34- # self.initialize_mesh()
35- # self.initialize_particles()
3633 result = {"position" : [], "velocity" : []}
3734 for step in tqdm (range (nsteps )):
3835 self .mpm_scheme .compute_nodal_kinematics ()
@@ -52,13 +49,19 @@ def solve_jit(self, nsteps: int, gravity: float):
5249 result = {
5350 "position" : jnp .zeros ((nsteps , nparticles )),
5451 "velocity" : jnp .zeros ((nsteps , nparticles )),
52+ "strain_energy" : jnp .zeros ((nsteps , nparticles )),
53+ "kinetic_energy" : jnp .zeros ((nsteps , nparticles )),
54+ "total_energy" : jnp .zeros ((nsteps , nparticles )),
55+ "stress" : jnp .zeros ((nsteps , nparticles )),
56+ "strain" : jnp .zeros ((nsteps , nparticles )),
5557 }
5658
5759 def _step (i , data ):
5860 self , result = data
5961 self .mpm_scheme .compute_nodal_kinematics ()
6062 self .mpm_scheme .precompute_stress_strain ()
6163 self .mpm_scheme .compute_forces (gravity )
64+ self .mpm_scheme .update_nodal_momentum ()
6265 self .mpm_scheme .compute_particle_kinematics ()
6366 self .mpm_scheme .postcompute_stress_strain ()
6467
@@ -76,6 +79,38 @@ def _step(i, data):
7679 .at [i , idl :idu ]
7780 .set (self .mesh .particles [j ].velocity .squeeze ())
7881 )
82+ result ["stress" ] = (
83+ result ["stress" ]
84+ .at [i , idl :idu ]
85+ .set (self .mesh .particles [j ].stress [:, 0 , :].squeeze ())
86+ )
87+ result ["strain" ] = (
88+ result ["strain" ]
89+ .at [i , idl :idu ]
90+ .set (self .mesh .particles [j ].strain [:, 0 , :].squeeze ())
91+ )
92+ strain_energy = (
93+ 0.5
94+ * self .mesh .particles [j ].stress [:, 0 , :].squeeze ()
95+ * self .mesh .particles [j ].strain [:, 0 , :].squeeze ()
96+ * self .mesh .particles [j ].volume .squeeze ()
97+ )
98+ kinetic_energy = (
99+ 0.5
100+ * self .mesh .particles [j ].velocity .squeeze () ** 2
101+ * self .mesh .particles [j ].mass .squeeze ()
102+ )
103+ result ["strain_energy" ] = (
104+ result ["strain_energy" ].at [i , idl :idu ].set (strain_energy )
105+ )
106+ result ["kinetic_energy" ] = (
107+ result ["kinetic_energy" ].at [i , idl :idu ].set (kinetic_energy )
108+ )
109+ result ["total_energy" ] = (
110+ result ["total_energy" ]
111+ .at [i , idl :idu ]
112+ .set (strain_energy + kinetic_energy )
113+ )
79114 return (self , result )
80115
81116 _ , result = lax .fori_loop (0 , nsteps , _step , (self , result ))
0 commit comments