@@ -426,7 +426,6 @@ def _transfer_node_force_vel_par(self, dt):
426426 )
427427 )
428428
429- # @jit
430429 def _update_par_pos_node_mom (self , dt ):
431430 """
432431 Update particle position based on nodal momentum.
@@ -546,7 +545,6 @@ def step(pid, args):
546545 0 , len (self .particles ), step , args
547546 )
548547
549- # @jit
550548 def _update_node_fint_par_mass (self ):
551549 r"""
552550 Update the nodal internal force based on particle mass.
@@ -596,7 +594,6 @@ def step(pid, args):
596594 0 , len (self .particles ), step , args
597595 )
598596
599- # @jit
600597 def _update_node_fext_par_fext (self ):
601598 r"""
602599 Update the nodal external force based on particle f_ext.
@@ -636,15 +633,10 @@ def solve(self, nsteps=100, mpm_scheme="USF", **kwargs):
636633 "velocity" : [],
637634 }
638635 for _ in tqdm (range (nsteps )):
639- # print("="*30)
640636 self ._update_particle_natural_coords ()
641- # print(f"P.xi: {self.particles.xi}")
642637 self ._update_particle_element_ids ()
643- # print(f"P.eid: {self.particles.element_ids}")
644638 self ._update_node_momentum_par_vel ()
645- # print(f"P.v: {self.particles.velocity}")
646639 self ._update_node_mass_par_mass ()
647- # print(f"P.m: {self.particles.mass}")
648640 self ._update_nodes_bc_mom_vel ()
649641 if mpm_scheme == "USF" :
650642 self ._update_nodes_mom_vel ()
@@ -674,7 +666,6 @@ def solve(self, nsteps=100, mpm_scheme="USF", **kwargs):
674666 result = {k : jnp .asarray (v ) for k , v in result .items ()}
675667 return result
676668
677- # @partial(jit, static_argnames=["nsteps", "mpm_scheme"])
678669 def solve_jit (self , nsteps = 100 , mpm_scheme = 0 , ** kwargs ):
679670 """
680671 Solve the mesh using explicit scheme (for now).
@@ -691,6 +682,8 @@ def solve_jit(self, nsteps=100, mpm_scheme=0, **kwargs):
691682 "position" : jnp .zeros ((nsteps , self .particles .nparticles )),
692683 "velocity" : jnp .zeros ((nsteps , self .particles .nparticles )),
693684 }
685+ mpm_scheme_dict = {"USF" : 0 , "USL" : 1 , "MUSL" : 2 }
686+ mpm_scheme = mpm_scheme_dict [mpm_scheme ]
694687
695688 @loop_tqdm (nsteps )
696689 def step (i , data ):
@@ -703,19 +696,20 @@ def step(i, data):
703696
704697 # debug.breakpoint()
705698 # if mpm_scheme == 0:
706- # def f(data):
707- # s, dt = data
708- # s._update_nodes_mom_vel()
709- # s._update_particle_strain(dt)
710- # s._update_par_vol_density()
711- # s._update_particle_stress()
712- # return None
713-
714- # lax.cond(mpm_scheme == 0, f, lambda data: None, (self, dt))
715- self ._update_nodes_mom_vel ()
716- self ._update_particle_strain (dt )
717- self ._update_par_vol_density ()
718- self ._update_particle_stress ()
699+ def f (data ):
700+ # debug.breakpoint()
701+ s , dt = data
702+ s ._update_nodes_mom_vel ()
703+ s ._update_particle_strain (dt )
704+ s ._update_par_vol_density ()
705+ s ._update_particle_stress ()
706+ return s
707+
708+ # TODO: Confirm that it is fine doing this since
709+ # it sets a value to self.
710+ self = lax .cond (
711+ mpm_scheme == 0 , f , lambda data : data [0 ], (self , dt )
712+ )
719713
720714 self ._update_node_fint_par_mass ()
721715 self ._update_node_fext_par_fext ()
@@ -724,22 +718,27 @@ def step(i, data):
724718 self ._transfer_node_force_vel_par (dt )
725719 self ._update_par_pos_node_mom (dt )
726720
727- # def f(s):
728- # s._update_node_momentum_par_vel()
729- # s._update_nodes_bc_mom_vel()
730- # return None
721+ def f (s ):
722+ s ._update_node_momentum_par_vel ()
723+ s ._update_nodes_bc_mom_vel ()
724+ return s
731725
732- # lax.cond(mpm_scheme == 2, f, lambda s: None , self)
726+ self = lax .cond (mpm_scheme == 2 , f , lambda s : s , self )
733727
734- # def f(data):
735- # s, dt = data
736- # s._update_nodes_mom_vel()
737- # s._update_particle_strain(dt)
738- # s._update_par_vol_density()
739- # s._update_particle_stress()
740- # return None
728+ def f (data ):
729+ s , dt = data
730+ s ._update_nodes_mom_vel ()
731+ s ._update_particle_strain (dt )
732+ s ._update_par_vol_density ()
733+ s ._update_particle_stress ()
734+ return s
741735
742- # lax.cond(mpm_scheme in {1, 2}, f, lambda data: None, (self, dt))
736+ self = lax .cond (
737+ mpm_scheme == 1 , f , lambda data : data [0 ], (self , dt )
738+ )
739+ self = lax .cond (
740+ mpm_scheme == 2 , f , lambda data : data [0 ], (self , dt )
741+ )
743742 self .nodes .reset_values ()
744743 result ["position" ] = (
745744 result ["position" ].at [i , :].set (self .particles .x )
@@ -750,7 +749,7 @@ def step(i, data):
750749 return (self , mpm_scheme , dt , result )
751750
752751 _ , _ , _ , result = lax .fori_loop (
753- 0 , nsteps , step , (self , 0 , kwargs ["dt" ], result )
752+ 0 , nsteps , step , (self , mpm_scheme , kwargs ["dt" ], result )
754753 )
755754 result = {k : jnp .asarray (v ) for k , v in result .items ()}
756755 return result
0 commit comments