@@ -695,7 +695,6 @@ def _init_link_fields(self):
695695 # cd
696696 cd_ang = gs .ti_vec3 ,
697697 cd_vel = gs .ti_vec3 ,
698- root_COM = gs .ti_vec3 ,
699698 mass_sum = gs .ti_float ,
700699 COM = gs .ti_vec3 ,
701700 mass_shift = gs .ti_float ,
@@ -2441,7 +2440,7 @@ def _func_COM_links(
24412440 for i_l_ in range (rgi .n_awake_links [i_b ]):
24422441 i_l = rgi .awake_links [i_l_ , i_b ]
24432442
2444- links_state [i_l , i_b ].root_COM = ti . Vector . zero ( gs . ti_float , 3 )
2443+ links_state [i_l , i_b ].COM . fill ( 0.0 )
24452444 links_state [i_l , i_b ].mass_sum = 0.0
24462445
24472446 ti .loop_config (serialize = static_rigid_sim_config .para_level < gs .PARA_LEVEL .ALL )
@@ -2460,10 +2459,8 @@ def _func_COM_links(
24602459 )
24612460
24622461 i_r = links_info [I_l ].root_idx
2463- ti .atomic_add (links_state [i_r , i_b ].mass_sum , mass )
2464-
2465- COM = mass * links_state [i_l , i_b ].i_pos
2466- ti .atomic_add (links_state [i_r , i_b ].root_COM , COM )
2462+ links_state [i_r , i_b ].mass_sum += mass
2463+ links_state [i_r , i_b ].COM += mass * links_state [i_l , i_b ].i_pos
24672464
24682465 ti .loop_config (serialize = sstatic_rigid_sim_config .para_level < gs .PARA_LEVEL .ALL )
24692466 for i_l_ in range (rgi .n_awake_links [i_b ]):
@@ -2472,15 +2469,15 @@ def _func_COM_links(
24722469
24732470 i_r = links_info [I_l ].root_idx
24742471 if i_l == i_r :
2475- links_state [i_l , i_b ].root_COM = links_state [i_l , i_b ].root_COM / links_state [i_l , i_b ].mass_sum
2472+ links_state [i_l , i_b ].COM = links_state [i_l , i_b ].COM / links_state [i_l , i_b ].mass_sum
24762473
24772474 ti .loop_config (serialize = static_rigid_sim_config .para_level < gs .PARA_LEVEL .ALL )
24782475 for i_l_ in range (rgi .n_awake_links [i_b ]):
24792476 i_l = rgi .awake_links [i_l_ , i_b ]
24802477 I_l = [i_l , i_b ] if ti .static (static_rigid_sim_config .batch_links_info ) else i_l
24812478
24822479 i_r = links_info [I_l ].root_idx
2483- links_state [i_l , i_b ].root_COM = links_state [i_r , i_b ].root_COM
2480+ links_state [i_l , i_b ].COM = links_state [i_r , i_b ].COM
24842481
24852482 ti .loop_config (serialize = static_rigid_sim_config .para_level < gs .PARA_LEVEL .ALL )
24862483 for i_l_ in range (rgi .n_awake_links [i_b ]):
@@ -2491,7 +2488,6 @@ def _func_COM_links(
24912488 l_info = links_info [I_l ]
24922489
24932490 i_r = links_info [I_l ].root_idx
2494- links_state [i_l , i_b ].COM = links_state [i_r , i_b ].root_COM
24952491 links_state [i_l , i_b ].i_pos = links_state [i_l , i_b ].i_pos - links_state [i_l , i_b ].COM
24962492
24972493 i_inertial = l_info .inertial_i
@@ -2614,7 +2610,7 @@ def _func_COM_links(
26142610 else :
26152611 ti .loop_config (serialize = static_rigid_sim_config .para_level < gs .PARA_LEVEL .ALL )
26162612 for i_l in range (n_links ):
2617- links_state [i_l , i_b ].root_COM = ti . Vector . zero ( gs . ti_float , 3 )
2613+ links_state [i_l , i_b ].COM . fill ( 0.0 )
26182614 links_state [i_l , i_b ].mass_sum = 0.0
26192615
26202616 ti .loop_config (serialize = static_rigid_sim_config .para_level < gs .PARA_LEVEL .ALL )
@@ -2632,10 +2628,8 @@ def _func_COM_links(
26322628 )
26332629
26342630 i_r = links_info [I_l ].root_idx
2635- ti .atomic_add (links_state [i_r , i_b ].mass_sum , mass )
2636-
2637- COM = mass * links_state [i_l , i_b ].i_pos
2638- ti .atomic_add (links_state [i_r , i_b ].root_COM , COM )
2631+ links_state [i_r , i_b ].mass_sum += mass
2632+ links_state [i_r , i_b ].COM += mass * links_state [i_l , i_b ].i_pos
26392633
26402634 ti .loop_config (serialize = static_rigid_sim_config .para_level < gs .PARA_LEVEL .ALL )
26412635 for i_l in range (n_links ):
@@ -2644,14 +2638,14 @@ def _func_COM_links(
26442638 i_r = links_info [I_l ].root_idx
26452639 if i_l == i_r :
26462640 if links_state [i_l , i_b ].mass_sum > 0.0 :
2647- links_state [i_l , i_b ].root_COM = links_state [i_l , i_b ].root_COM / links_state [i_l , i_b ].mass_sum
2641+ links_state [i_l , i_b ].COM = links_state [i_l , i_b ].COM / links_state [i_l , i_b ].mass_sum
26482642
26492643 ti .loop_config (serialize = static_rigid_sim_config .para_level < gs .PARA_LEVEL .ALL )
26502644 for i_l in range (n_links ):
26512645 I_l = [i_l , i_b ] if ti .static (static_rigid_sim_config .batch_links_info ) else i_l
26522646
26532647 i_r = links_info [I_l ].root_idx
2654- links_state [i_l , i_b ].root_COM = links_state [i_r , i_b ].root_COM
2648+ links_state [i_l , i_b ].COM = links_state [i_r , i_b ].COM
26552649
26562650 ti .loop_config (serialize = static_rigid_sim_config .para_level < gs .PARA_LEVEL .ALL )
26572651 for i_l in range (n_links ):
@@ -2661,7 +2655,6 @@ def _func_COM_links(
26612655 l_info = links_info [I_l ]
26622656
26632657 i_r = links_info [I_l ].root_idx
2664- links_state [i_l , i_b ].COM = links_state [i_r , i_b ].root_COM
26652658 links_state [i_l , i_b ].i_pos = links_state [i_l , i_b ].i_pos - links_state [i_l , i_b ].COM
26662659
26672660 i_inertial = l_info .inertial_i
0 commit comments