@@ -36,11 +36,13 @@ def step_forward(x, e, v, m, l2, k, is_DBC, h, tol):
3636 v = (x - x_n ) / h # implicit Euler velocity update
3737 return [x , v ]
3838
39+ # ANCHOR: ADDING_GRAVITY
3940def IP_val (x , e , x_tilde , m , l2 , k , h ):
4041 return InertiaEnergy .val (x , x_tilde , m ) + h * h * (MassSpringEnergy .val (x , e , l2 , k ) + GravityEnergy .val (x , m )) # implicit Euler
4142
4243def IP_grad (x , e , x_tilde , m , l2 , k , h ):
4344 return InertiaEnergy .grad (x , x_tilde , m ) + h * h * (MassSpringEnergy .grad (x , e , l2 , k ) + GravityEnergy .grad (x , m )) # implicit Euler
45+ # ANCHOR_END: ADDING_GRAVITY
4446
4547def IP_hess (x , e , x_tilde , m , l2 , k , h ):
4648 IJV_In = InertiaEnergy .hess (x , x_tilde , m )
@@ -50,6 +52,7 @@ def IP_hess(x, e, x_tilde, m, l2, k, h):
5052 H = sparse .coo_matrix ((IJV [2 ], (IJV [0 ], IJV [1 ])), shape = (len (x ) * 2 , len (x ) * 2 )).tocsr ()
5153 return H
5254
55+ # ANCHOR: search_dir
5356def search_dir (x , e , x_tilde , m , l2 , k , is_DBC , h ):
5457 projected_hess = IP_hess (x , e , x_tilde , m , l2 , k , h )
5558 reshaped_grad = IP_grad (x , e , x_tilde , m , l2 , k , h ).reshape (len (x ) * 2 , 1 )
@@ -60,4 +63,5 @@ def search_dir(x, e, x_tilde, m, l2, k, is_DBC, h):
6063 for i in range (0 , len (x )):
6164 if is_DBC [i ]:
6265 reshaped_grad [i * 2 ] = reshaped_grad [i * 2 + 1 ] = 0.0
63- return spsolve (projected_hess , - reshaped_grad ).reshape (len (x ), 2 )
66+ return spsolve (projected_hess , - reshaped_grad ).reshape (len (x ), 2 )
67+ #ANCHOR_END: search_dir
0 commit comments