struct SimulationParams_std140_0
{
@align(16) gravity_0 : vec3<f32>,
@align(4) dt_0 : f32,
};
@binding(0) @group(0) var<uniform> entryPointParams_params_0 : SimulationParams_std140_0;
struct GridGeneric_std430_0
{
@align(4) num_active_blocks_0 : u32,
@align(4) cell_width_0 : f32,
@align(4) hmap_capacity_0 : u32,
@align(4) capacity_0 : u32,
};
@binding(1) @group(0) var<storage, read> entryPointParams_grid_0 : array<GridGeneric_std430_0>;
@binding(2) @group(0) var<storage, read_write> entryPointParams_particles_model_0 : array<u32>;
struct Position_std430_0
{
@align(16) pt_0 : vec3<f32>,
};
@binding(3) @group(0) var<storage, read_write> entryPointParams_particles_pos_0 : array<Position_std430_0>;
struct _MatrixStorage_float3x3std430_0
{
@align(16) data_0 : array<vec3<f32>, i32(3)>,
};
struct Cdf_std430_0
{
@align(16) normal_0 : vec3<f32>,
@align(16) rigid_vel_0 : vec3<f32>,
@align(4) signed_distance_0 : f32,
@align(16) affinity_0 : u32,
};
struct Dynamics_std430_0
{
@align(16) velocity_0 : vec3<f32>,
@align(16) def_grad_0 : _MatrixStorage_float3x3std430_0,
@align(16) affine_0 : _MatrixStorage_float3x3std430_0,
@align(16) vel_grad_det_0 : f32,
@align(16) cdf_0 : Cdf_std430_0,
@align(16) init_volume_0 : f32,
@align(4) init_radius_0 : f32,
@align(8) mass_0 : f32,
@align(4) phase_0 : f32,
@align(16) enabled_0 : u32,
};
@binding(4) @group(0) var<storage, read_write> entryPointParams_particles_dyn_0 : array<Dynamics_std430_0>;
@binding(5) @group(0) var<uniform> entryPointParams_particles_len_0 : u32;
struct Symmetric3x3_0
{
mxx_0 : f32,
myx_0 : f32,
myy_0 : f32,
mzx_0 : f32,
mzy_0 : f32,
mzz_0 : f32,
};
fn Symmetric3x3_x24init_0( mxx_1 : f32, myx_1 : f32, myy_1 : f32, mzx_1 : f32, mzy_1 : f32, mzz_1 : f32) -> Symmetric3x3_0
{
var _S1 : Symmetric3x3_0;
_S1.mxx_0 = mxx_1;
_S1.myx_0 = myx_1;
_S1.myy_0 = myy_1;
_S1.mzx_0 = mzx_1;
_S1.mzy_0 = mzy_1;
_S1.mzz_0 = mzz_1;
return _S1;
}
struct Quat_0
{
coords_0 : vec4<f32>,
};
fn Quat_x24init_0() -> Quat_0
{
var _S2 : Quat_0;
_S2.coords_0 = vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f);
return _S2;
}
struct givens_0
{
ch_0 : f32,
sh_0 : f32,
};
fn givens_x24init_0( ch_1 : f32, sh_1 : f32) -> givens_0
{
var _S3 : givens_0;
_S3.ch_0 = ch_1;
_S3.sh_0 = sh_1;
return _S3;
}
fn rsqrt_0( val_0 : f32) -> f32
{
var _S4 : f32 = -0.5f * val_0;
var x_0 : f32 = bitcast<f32>(i32(1597463170) - ((bitcast<i32>(val_0) >> (u32(1)))));
var i_0 : u32 = u32(0);
for(;;)
{
if(i_0 < u32(4))
{
}
else
{
break;
}
var _S5 : f32 = x_0 * fma(x_0 * x_0, _S4, 1.5f);
var _S6 : u32 = i_0 + u32(1);
x_0 = _S5;
i_0 = _S6;
}
return x_0;
}
fn approximateGivensQuaternion_0( A_0 : ptr<function, Symmetric3x3_0>) -> givens_0
{
var _S7 : givens_0 = givens_x24init_0(2.0f * ((*A_0).mxx_0 - (*A_0).myy_0), (*A_0).myx_0);
var _S8 : f32 = _S7.ch_0;
var _S9 : bool = (5.82842731475830078f * _S7.sh_0 * _S7.sh_0) < (_S8 * _S8);
var _S10 : f32 = rsqrt_0(fma(_S7.ch_0, _S7.ch_0, _S7.sh_0 * _S7.sh_0));
var b_0 : bool;
if(_S10 != _S10)
{
b_0 = false;
}
else
{
b_0 = _S9;
}
if(b_0)
{
return givens_x24init_0(_S10 * _S7.ch_0, _S10 * _S7.sh_0);
}
else
{
return givens_x24init_0(1.0f, 0.0f);
}
}
fn jacobiConjugation_0( x_1 : i32, y_0 : i32, z_0 : i32, S_0 : ptr<function, Symmetric3x3_0>, q_0 : ptr<function, Quat_0>)
{
var _S11 : givens_0 = approximateGivensQuaternion_0(&((*S_0)));
var g_0 : givens_0 = _S11;
var _S12 : f32 = 1.0f / fma(g_0.ch_0, g_0.ch_0, g_0.sh_0 * g_0.sh_0);
var _S13 : f32 = fma(g_0.ch_0, g_0.ch_0, - g_0.sh_0 * g_0.sh_0) * _S12;
var _S14 : f32 = 2.0f * g_0.sh_0 * g_0.ch_0 * _S12;
var U_S_0 : Symmetric3x3_0 = (*S_0);
(*S_0).mxx_0 = fma(_S13, fma(_S13, U_S_0.mxx_0, _S14 * U_S_0.myx_0), _S14 * fma(_S13, U_S_0.myx_0, _S14 * U_S_0.myy_0));
var _S15 : f32 = - _S14;
(*S_0).myx_0 = fma(_S13, fma(_S15, U_S_0.mxx_0, _S13 * U_S_0.myx_0), _S14 * fma(_S15, U_S_0.myx_0, _S13 * U_S_0.myy_0));
(*S_0).myy_0 = fma(_S15, fma(_S15, U_S_0.mxx_0, _S13 * U_S_0.myx_0), _S13 * fma(_S15, U_S_0.myx_0, _S13 * U_S_0.myy_0));
(*S_0).mzx_0 = fma(_S13, U_S_0.mzx_0, _S14 * U_S_0.mzy_0);
(*S_0).mzy_0 = fma(_S15, U_S_0.mzx_0, _S13 * U_S_0.mzy_0);
(*S_0).mzz_0 = U_S_0.mzz_0;
var tmp_0 : array<f32, i32(3)> = array<f32, i32(3)>( (*q_0).coords_0[i32(0)] * g_0.sh_0, (*q_0).coords_0[i32(1)] * g_0.sh_0, (*q_0).coords_0[i32(2)] * g_0.sh_0 );
var _S16 : f32 = g_0.sh_0 * (*q_0).coords_0[i32(3)];
g_0.sh_0 = _S16;
(*q_0).coords_0[z_0] = fma((*q_0).coords_0[z_0], g_0.ch_0, _S16);
(*q_0).coords_0[i32(3)] = fma((*q_0).coords_0[i32(3)], g_0.ch_0, - tmp_0[z_0]);
(*q_0).coords_0[x_1] = fma((*q_0).coords_0[x_1], g_0.ch_0, tmp_0[y_0]);
(*q_0).coords_0[y_0] = fma((*q_0).coords_0[y_0], g_0.ch_0, - tmp_0[x_1]);
U_S_0.mxx_0 = (*S_0).myy_0;
U_S_0.myx_0 = (*S_0).mzy_0;
U_S_0.myy_0 = (*S_0).mzz_0;
var _S17 : f32 = (*S_0).myx_0;
U_S_0.mzx_0 = (*S_0).myx_0;
var _S18 : f32 = (*S_0).mzx_0;
U_S_0.mzy_0 = (*S_0).mzx_0;
var _S19 : f32 = (*S_0).mxx_0;
U_S_0.mzz_0 = (*S_0).mxx_0;
(*S_0).mxx_0 = (*S_0).myy_0;
(*S_0).myx_0 = (*S_0).mzy_0;
(*S_0).myy_0 = (*S_0).mzz_0;
(*S_0).mzx_0 = _S17;
(*S_0).mzy_0 = _S18;
(*S_0).mzz_0 = _S19;
return;
}
fn jacobiEigenanalysis_0( S_1 : Symmetric3x3_0) -> Quat_0
{
var mat_0 : Symmetric3x3_0 = S_1;
var q_1 : Quat_0 = Quat_x24init_0();
var i_1 : u32 = u32(0);
for(;;)
{
if(i_1 < u32(12))
{
}
else
{
break;
}
jacobiConjugation_0(i32(0), i32(1), i32(2), &(mat_0), &(q_1));
jacobiConjugation_0(i32(1), i32(2), i32(0), &(mat_0), &(q_1));
jacobiConjugation_0(i32(2), i32(0), i32(1), &(mat_0), &(q_1));
i_1 = i_1 + u32(1);
}
return q_1;
}
fn Quat_to_matrix_0( this_0 : Quat_0) -> mat3x3<f32>
{
var _S20 : f32 = this_0.coords_0.x;
var _S21 : f32 = this_0.coords_0.y;
var _S22 : f32 = this_0.coords_0.z;
var _S23 : f32 = this_0.coords_0.w;
var _S24 : f32 = _S23 * _S23;
var _S25 : f32 = _S20 * _S20;
var _S26 : f32 = _S21 * _S21;
var _S27 : f32 = _S22 * _S22;
var _S28 : f32 = _S20 * _S21 * 2.0f;
var _S29 : f32 = _S23 * _S22 * 2.0f;
var _S30 : f32 = _S23 * _S21 * 2.0f;
var _S31 : f32 = _S20 * _S22 * 2.0f;
var _S32 : f32 = _S21 * _S22 * 2.0f;
var _S33 : f32 = _S23 * _S20 * 2.0f;
var _S34 : f32 = _S24 - _S25;
return mat3x3<f32>(vec3<f32>(_S24 + _S25 - _S26 - _S27, _S29 + _S28, _S31 - _S30), vec3<f32>(_S28 - _S29, _S34 + _S26 - _S27, _S33 + _S32), vec3<f32>(_S30 + _S31, _S32 - _S33, _S34 - _S26 + _S27));
}
fn condNegSwapVec_0( c_0 : bool, x_2 : ptr<function, vec3<f32>>, y_1 : ptr<function, vec3<f32>>)
{
var _S35 : vec3<f32> = (vec3<f32>(0) - (*x_2));
var _S36 : vec3<bool> = vec3<bool>(c_0);
(*x_2) = select((*x_2), (*y_1), _S36);
(*y_1) = select((*y_1), _S35, _S36);
return;
}
fn condSwap_0( c_1 : bool, x_3 : ptr<function, f32>, y_2 : ptr<function, f32>)
{
var _S37 : f32 = (*x_3);
(*x_3) = select((*x_3), (*y_2), c_1);
(*y_2) = select((*y_2), _S37, c_1);
return;
}
fn condSwap_1( c_2 : bool, x_4 : ptr<function, f32>, y_3 : ptr<function, f32>)
{
var _S38 : f32 = (*x_4);
(*x_4) = select((*x_4), (*y_3), c_2);
(*y_3) = select((*y_3), _S38, c_2);
return;
}
struct SortedSingularValues_0
{
B_0 : mat3x3<f32>,
V_0 : mat3x3<f32>,
};
fn SortedSingularValues_x24init_0( B_1 : mat3x3<f32>, V_1 : mat3x3<f32>) -> SortedSingularValues_0
{
var _S39 : SortedSingularValues_0;
_S39.B_0 = B_1;
_S39.V_0 = V_1;
return _S39;
}
fn sortSingularValues_0( B_2 : mat3x3<f32>, V_2 : mat3x3<f32>) -> SortedSingularValues_0
{
var bx_0 : vec3<f32> = B_2[i32(0)];
var by_0 : vec3<f32> = B_2[i32(1)];
var bz_0 : vec3<f32> = B_2[i32(2)];
var vx_0 : vec3<f32> = V_2[i32(0)];
var vy_0 : vec3<f32> = V_2[i32(1)];
var vz_0 : vec3<f32> = V_2[i32(2)];
var _S40 : f32 = dot(B_2[i32(0)], B_2[i32(0)]);
var rho1_0 : f32 = _S40;
var _S41 : f32 = dot(B_2[i32(1)], B_2[i32(1)]);
var rho2_0 : f32 = _S41;
var _S42 : f32 = dot(B_2[i32(2)], B_2[i32(2)]);
var rho3_0 : f32 = _S42;
var c_3 : bool = _S40 < _S41;
condNegSwapVec_0(c_3, &(bx_0), &(by_0));
condNegSwapVec_0(c_3, &(vx_0), &(vy_0));
condSwap_1(c_3, &(rho1_0), &(rho2_0));
var c_4 : bool = rho1_0 < _S42;
condNegSwapVec_0(c_4, &(bx_0), &(bz_0));
condNegSwapVec_0(c_4, &(vx_0), &(vz_0));
condSwap_1(c_4, &(rho1_0), &(rho3_0));
var c_5 : bool = rho2_0 < rho3_0;
condNegSwapVec_0(c_5, &(by_0), &(bz_0));
condNegSwapVec_0(c_5, &(vy_0), &(vz_0));
return SortedSingularValues_x24init_0(mat3x3<f32>(bx_0, by_0, bz_0), mat3x3<f32>(vx_0, vy_0, vz_0));
}
fn rsqrt1_0( val_1 : f32) -> f32
{
var _S43 : f32 = -0.5f * val_1;
var x_5 : f32 = bitcast<f32>(i32(1597463170) - ((bitcast<i32>(val_1) >> (u32(1)))));
var i_2 : u32 = u32(0);
for(;;)
{
if(i_2 < u32(6))
{
}
else
{
break;
}
var _S44 : f32 = x_5 * fma(x_5 * x_5, _S43, 1.5f);
var _S45 : u32 = i_2 + u32(1);
x_5 = _S44;
i_2 = _S45;
}
return x_5;
}
fn accurateSqrt_0( x_6 : f32) -> f32
{
return 1.0f / rsqrt1_0(x_6);
}
fn QRGivensQuaternion_0( a1_0 : f32, a2_0 : f32) -> givens_0
{
var _S46 : f32 = accurateSqrt_0(fma(a1_0, a1_0, a2_0 * a2_0));
var ch_2 : f32 = abs(a1_0) + max(_S46, 9.99999997475242708e-07f);
var sh_2 : f32 = select(0.0f, a2_0, _S46 > 9.99999997475242708e-07f);
condSwap_0(a1_0 < 0.0f, &(sh_2), &(ch_2));
var _S47 : f32 = rsqrt_0(fma(ch_2, ch_2, sh_2 * sh_2));
var _S48 : f32 = ch_2 * _S47;
ch_2 = _S48;
var _S49 : f32 = sh_2 * _S47;
sh_2 = _S49;
return givens_x24init_0(_S48, _S49);
}
struct QR_0
{
Q_0 : mat3x3<f32>,
R_0 : mat3x3<f32>,
};
fn QR_x24init_0( Q_1 : mat3x3<f32>, R_1 : mat3x3<f32>) -> QR_0
{
var _S50 : QR_0;
_S50.Q_0 = Q_1;
_S50.R_0 = R_1;
return _S50;
}
fn QRDecomposition_0( in_B_0 : mat3x3<f32>) -> QR_0
{
var _S51 : f32 = in_B_0[i32(0)].x;
var _S52 : f32 = in_B_0[i32(0)].y;
var _S53 : givens_0 = QRGivensQuaternion_0(_S51, _S52);
var _S54 : f32 = _S53.sh_0;
var a_0 : f32 = fma(-2.0f, _S54 * _S54, 1.0f);
var b_1 : f32 = 2.0f * _S53.ch_0 * _S53.sh_0;
var r00_0 : f32 = fma(a_0, _S51, b_1 * _S52);
var _S55 : f32 = in_B_0[i32(1)].x;
var _S56 : f32 = in_B_0[i32(1)].y;
var r01_0 : f32 = fma(a_0, _S55, b_1 * _S56);
var _S57 : f32 = in_B_0[i32(2)].x;
var _S58 : f32 = in_B_0[i32(2)].y;
var r02_0 : f32 = fma(a_0, _S57, b_1 * _S58);
var _S59 : f32 = - b_1;
var r10_0 : f32 = fma(_S59, _S51, a_0 * _S52);
var r11_0 : f32 = fma(_S59, _S55, a_0 * _S56);
var r12_0 : f32 = fma(_S59, _S57, a_0 * _S58);
var r20_0 : f32 = in_B_0[i32(0)].z;
var r21_0 : f32 = in_B_0[i32(1)].z;
var r22_0 : f32 = in_B_0[i32(2)].z;
var _S60 : givens_0 = QRGivensQuaternion_0(r00_0, r20_0);
var _S61 : f32 = _S60.sh_0;
var a_1 : f32 = fma(-2.0f, _S61 * _S61, 1.0f);
var b_2 : f32 = 2.0f * _S60.ch_0 * _S60.sh_0;
var _S62 : f32 = - b_2;
var b20_0 : f32 = fma(_S62, r00_0, a_1 * r20_0);
var b21_0 : f32 = fma(_S62, r01_0, a_1 * r21_0);
var b22_0 : f32 = fma(_S62, r02_0, a_1 * r22_0);
var _S63 : givens_0 = QRGivensQuaternion_0(r11_0, b21_0);
var _S64 : f32 = _S63.sh_0;
var a_2 : f32 = fma(-2.0f, _S64 * _S64, 1.0f);
var b_3 : f32 = 2.0f * _S63.ch_0 * _S63.sh_0;
var _S65 : f32 = - b_3;
var _S66 : f32 = 2.0f * fma(_S53.sh_0, _S53.sh_0, -0.5f);
var _S67 : f32 = 2.0f * fma(_S60.sh_0, _S60.sh_0, -0.5f);
var _S68 : f32 = 2.0f * fma(_S63.sh_0, _S63.sh_0, -0.5f);
var _S69 : f32 = -2.0f * _S63.ch_0;
return QR_x24init_0(mat3x3<f32>(vec3<f32>(_S66 * _S67, -2.0f * _S53.ch_0 * _S53.sh_0 * _S67, b_2), vec3<f32>(fma(4.0f * _S60.ch_0 * _S63.ch_0, _S66 * _S60.sh_0 * _S63.sh_0, b_1 * _S68), fma(-8.0f * _S53.ch_0 * _S60.ch_0 * _S63.ch_0, _S53.sh_0 * _S60.sh_0 * _S63.sh_0, _S66 * _S68), _S69 * _S67 * _S63.sh_0), vec3<f32>(fma(4.0f * _S53.ch_0 * _S63.ch_0, _S53.sh_0 * _S63.sh_0, -2.0f * _S60.ch_0 * _S66 * _S60.sh_0 * _S68), fma(_S69, _S63.sh_0, 4.0f * _S53.sh_0 * fma(_S63.ch_0 * _S53.sh_0, _S63.sh_0, _S53.ch_0 * _S60.ch_0 * _S60.sh_0 * _S68)), _S67 * _S68)), mat3x3<f32>(vec3<f32>(fma(a_1, r00_0, b_2 * r20_0), fma(a_2, r10_0, b_3 * b20_0), fma(_S65, r10_0, a_2 * b20_0)), vec3<f32>(fma(a_1, r01_0, b_2 * r21_0), fma(a_2, r11_0, b_3 * b21_0), fma(_S65, r11_0, a_2 * b21_0)), vec3<f32>(fma(a_1, r02_0, b_2 * r22_0), fma(a_2, r12_0, b_3 * b22_0), fma(_S65, r12_0, a_2 * b22_0))));
}
struct Svd3_0
{
U_0 : mat3x3<f32>,
S_2 : vec3<f32>,
Vt_0 : mat3x3<f32>,
};
fn Svd3_x24init_0( A_1 : mat3x3<f32>) -> Svd3_0
{
var _S70 : mat3x3<f32> = (((transpose(A_1)) * (A_1)));
var _S71 : mat3x3<f32> = Quat_to_matrix_0(jacobiEigenanalysis_0(Symmetric3x3_x24init_0(_S70[i32(0)].x, _S70[i32(0)].y, _S70[i32(1)].y, _S70[i32(0)].z, _S70[i32(1)].z, _S70[i32(2)].z)));
var _S72 : SortedSingularValues_0 = sortSingularValues_0((((A_1) * (_S71))), _S71);
var _S73 : QR_0 = QRDecomposition_0(_S72.B_0);
var _S74 : vec3<f32> = vec3<f32>(_S73.R_0[i32(0)].x, _S73.R_0[i32(1)].y, _S73.R_0[i32(2)].z);
var _S75 : Svd3_0;
_S75.U_0 = _S73.Q_0;
_S75.S_2 = _S74;
_S75.Vt_0 = transpose(_S72.V_0);
return _S75;
}
fn Svd3_recompose_0( this_1 : Svd3_0) -> mat3x3<f32>
{
return (((mat3x3<f32>(this_1.U_0[i32(0)] * vec3<f32>(this_1.S_2.x), this_1.U_0[i32(1)] * vec3<f32>(this_1.S_2.y), this_1.U_0[i32(2)] * vec3<f32>(this_1.S_2.z))) * (this_1.Vt_0)));
}
struct LinearElasticModel_0
{
lambda_0 : f32,
mu_0 : f32,
cfl_coeff_0 : f32,
};
fn LinearElasticModel_kirchoff_stress_0( this_2 : LinearElasticModel_0, deformation_gradient_0 : mat3x3<f32>) -> mat3x3<f32>
{
var svd_0 : Svd3_0 = Svd3_x24init_0(deformation_gradient_0);
var _S76 : f32 = svd_0.S_2.x * svd_0.S_2.y * svd_0.S_2.z;
svd_0.S_2 = svd_0.S_2 - vec3<f32>(1.0f);
var _S77 : f32 = this_2.lambda_0 * (_S76 - 1.0f) * _S76;
var _S78 : mat3x3<f32> = (((Svd3_recompose_0(svd_0)) * (transpose(deformation_gradient_0))));
var _S79 : mat3x3<f32> = mat3x3<f32>(2.0f * this_2.mu_0, 2.0f * this_2.mu_0, 2.0f * this_2.mu_0, 2.0f * this_2.mu_0, 2.0f * this_2.mu_0, 2.0f * this_2.mu_0, 2.0f * this_2.mu_0, 2.0f * this_2.mu_0, 2.0f * this_2.mu_0);
var result_0 : mat3x3<f32> = mat3x3<f32>(_S78[0] * _S79[0], _S78[1] * _S79[1], _S78[2] * _S79[2]);
result_0[i32(0)][i32(0)] = result_0[i32(0)][i32(0)] + _S77;
result_0[i32(1)][i32(1)] = result_0[i32(1)][i32(1)] + _S77;
result_0[i32(2)][i32(2)] = result_0[i32(2)][i32(2)] + _S77;
return result_0;
}
struct ModelUpdateResult_0
{
kirchoff_stress_0 : mat3x3<f32>,
};
fn ModelUpdateResult_x24init_0( stress_0 : mat3x3<f32>) -> ModelUpdateResult_0
{
var _S80 : ModelUpdateResult_0;
_S80.kirchoff_stress_0 = stress_0;
return _S80;
}
struct NeoHookeanModel_0
{
lambda_1 : f32,
mu_1 : f32,
cfl_coeff_1 : f32,
};
fn NeoHookeanModel_kirchoff_stress_0( this_3 : NeoHookeanModel_0, deformation_gradient_1 : mat3x3<f32>) -> mat3x3<f32>
{
var _S81 : f32 = this_3.lambda_1 * log(max(determinant(deformation_gradient_1), 1.00000001335143196e-10f)) - this_3.mu_1;
var _S82 : mat3x3<f32> = (((deformation_gradient_1) * (transpose(deformation_gradient_1))));
var _S83 : mat3x3<f32> = mat3x3<f32>(this_3.mu_1, this_3.mu_1, this_3.mu_1, this_3.mu_1, this_3.mu_1, this_3.mu_1, this_3.mu_1, this_3.mu_1, this_3.mu_1);
var stress_1 : mat3x3<f32> = mat3x3<f32>(_S83[0] * _S82[0], _S83[1] * _S82[1], _S83[2] * _S82[2]);
stress_1[i32(0)][i32(0)] = stress_1[i32(0)][i32(0)] + _S81;
stress_1[i32(1)][i32(1)] = stress_1[i32(1)][i32(1)] + _S81;
stress_1[i32(2)][i32(2)] = stress_1[i32(2)][i32(2)] + _S81;
return stress_1;
}
struct DruckerPragerPlasticState_0
{
plastic_deformation_gradient_det_0 : f32,
plastic_hardening_0 : f32,
log_vol_gain_0 : f32,
};
struct DruckerPragerResult_0
{
state_0 : DruckerPragerPlasticState_0,
deformation_gradient_2 : mat3x3<f32>,
};
fn DruckerPragerResult_x24init_0( state_1 : DruckerPragerPlasticState_0, deformation_gradient_3 : mat3x3<f32>) -> DruckerPragerResult_0
{
var _S84 : DruckerPragerResult_0;
_S84.state_0 = state_1;
_S84.deformation_gradient_2 = deformation_gradient_3;
return _S84;
}
struct DruckerPragerPlasticity_0
{
ha_0 : f32,
hb_0 : f32,
hc_0 : f32,
hd_0 : f32,
lambda_2 : f32,
mu_2 : f32,
};
fn DruckerPragerPlasticity_alpha_0( this_4 : DruckerPragerPlasticity_0, q_2 : f32) -> f32
{
var _S85 : f32 = sin(this_4.ha_0 + (this_4.hb_0 * q_2 - this_4.hd_0) * exp(- this_4.hc_0 * q_2));
return sqrt(0.66666668653488159f) * (2.0f * _S85) / (3.0f - _S85);
}
struct DruckerPragerProjectionResult_0
{
singular_values_0 : vec3<f32>,
plastic_hardening_1 : f32,
valid_0 : bool,
};
fn DruckerPragerProjectionResult_x24init_0( singular_values_1 : vec3<f32>, plastic_hardening_2 : f32, valid_1 : bool) -> DruckerPragerProjectionResult_0
{
var _S86 : DruckerPragerProjectionResult_0;
_S86.singular_values_0 = singular_values_1;
_S86.plastic_hardening_1 = plastic_hardening_2;
_S86.valid_0 = valid_1;
return _S86;
}
fn DruckerPragerPlasticity_project_deformation_gradient_0( this_5 : DruckerPragerPlasticity_0, singular_values_2 : vec3<f32>, log_vol_gain_1 : f32, alpha_0 : f32) -> DruckerPragerProjectionResult_0
{
var _S87 : vec3<f32> = log(singular_values_2) + vec3<f32>((log_vol_gain_1 / 3.0f));
var _S88 : f32 = _S87.x + _S87.y + _S87.z;
var _S89 : vec3<f32> = _S87 - vec3<f32>((_S88 / 3.0f));
var _S90 : bool;
if(_S88 > 0.0f)
{
_S90 = true;
}
else
{
_S90 = (all((_S89 == vec3<f32>(0.0f))));
}
if(_S90)
{
return DruckerPragerProjectionResult_x24init_0(vec3<f32>(1.0f), length(_S87), true);
}
var _S91 : f32 = length(_S89);
var _S92 : f32 = 2.0f * this_5.mu_2;
var _S93 : f32 = _S91 + (3.0f * this_5.lambda_2 + _S92) / _S92 * _S88 * alpha_0;
if(_S93 <= 0.0f)
{
return DruckerPragerProjectionResult_x24init_0(vec3<f32>(0.0f), 0.0f, false);
}
return DruckerPragerProjectionResult_x24init_0(exp(_S87 - _S89 * vec3<f32>((_S93 / _S91))), _S93, true);
}
fn Svd3_x24init_1( U_1 : mat3x3<f32>, S_3 : vec3<f32>, Vt_1 : mat3x3<f32>) -> Svd3_0
{
var _S94 : Svd3_0;
_S94.U_0 = U_1;
_S94.S_2 = S_3;
_S94.Vt_0 = Vt_1;
return _S94;
}
fn DruckerPragerPlasticState_x24init_0( plastic_deformation_gradient_det_1 : f32, plastic_hardening_3 : f32, log_vol_gain_2 : f32) -> DruckerPragerPlasticState_0
{
var _S95 : DruckerPragerPlasticState_0;
_S95.plastic_deformation_gradient_det_0 = plastic_deformation_gradient_det_1;
_S95.plastic_hardening_0 = plastic_hardening_3;
_S95.log_vol_gain_0 = log_vol_gain_2;
return _S95;
}
fn DruckerPragerPlasticity_project_0( this_6 : DruckerPragerPlasticity_0, state_2 : DruckerPragerPlasticState_0, deformation_gradient_4 : mat3x3<f32>) -> DruckerPragerResult_0
{
if((this_6.lambda_2) == 0.0f)
{
return DruckerPragerResult_x24init_0(state_2, deformation_gradient_4);
}
var _S96 : Svd3_0 = Svd3_x24init_0(deformation_gradient_4);
var _S97 : DruckerPragerProjectionResult_0 = DruckerPragerPlasticity_project_deformation_gradient_0(this_6, _S96.S_2, state_2.log_vol_gain_0, DruckerPragerPlasticity_alpha_0(this_6, state_2.plastic_hardening_0));
if(_S97.valid_0)
{
var _S98 : f32 = _S96.S_2.x * _S96.S_2.y * _S96.S_2.z;
var _S99 : f32 = _S97.singular_values_0.x * _S97.singular_values_0.y * _S97.singular_values_0.z;
return DruckerPragerResult_x24init_0(DruckerPragerPlasticState_x24init_0(state_2.plastic_deformation_gradient_det_0 * _S98 / _S99, state_2.plastic_hardening_0 + _S97.plastic_hardening_1, state_2.log_vol_gain_0 + log(_S98) - log(_S99)), Svd3_recompose_0(Svd3_x24init_1(_S96.U_0, _S97.singular_values_0, _S96.Vt_0)));
}
else
{
return DruckerPragerResult_x24init_0(state_2, deformation_gradient_4);
}
}
struct SandModel_0
{
plastic_state_0 : DruckerPragerPlasticState_0,
plastic_0 : DruckerPragerPlasticity_0,
elastic_0 : LinearElasticModel_0,
};
fn SandModel_state_offset_0( this_7 : SandModel_0) -> u32
{
return u32(0);
}
struct SandModel_1
{
plastic_state_0 : DruckerPragerPlasticState_0,
plastic_0 : DruckerPragerPlasticity_0,
elastic_0 : NeoHookeanModel_0,
};
fn SandModel_state_offset_1( this_8 : SandModel_1) -> u32
{
return u32(0);
}
fn project_velocity_0( vel_0 : vec3<f32>, n_0 : vec3<f32>) -> vec3<f32>
{
var _S100 : f32 = dot(vel_0, n_0);
if(_S100 < 0.0f)
{
var _S101 : vec3<f32> = vel_0 - n_0 * vec3<f32>(_S100);
var _S102 : f32 = length(_S101);
return select(vec3<f32>(0.0f), _S101 / vec3<f32>(_S102), _S102 > 9.99999993922529029e-09f) * vec3<f32>(max(0.0f, _S102 + 20.0f * _S100));
}
else
{
return vel_0;
}
}
fn diag_0( d_0 : vec3<f32>) -> mat3x3<f32>
{
return mat3x3<f32>(vec3<f32>(d_0.x, 0.0f, 0.0f), vec3<f32>(0.0f, d_0.y, 0.0f), vec3<f32>(0.0f, 0.0f, d_0.z));
}
struct ParticleUpdateData_0
{
dt_1 : f32,
cell_width_1 : f32,
particle_id_0 : u32,
init_volume_1 : f32,
phase_1 : f32,
};
fn ParticleUpdateData_x24init_0( dt_2 : f32, cell_width_2 : f32, particle_id_1 : u32, init_volume_2 : f32, phase_2 : f32) -> ParticleUpdateData_0
{
var _S103 : ParticleUpdateData_0;
_S103.dt_1 = dt_2;
_S103.cell_width_1 = cell_width_2;
_S103.particle_id_0 = particle_id_1;
_S103.init_volume_1 = init_volume_2;
_S103.phase_1 = phase_2;
return _S103;
}
fn QuadraticKernel_inv_d_0( cell_width_3 : f32) -> f32
{
return 4.0f / (cell_width_3 * cell_width_3);
}
struct DefaultParticleModel_0
{
dummy_0 : u32,
};
fn DefaultParticleModel_model_flags_0( _S104 : DefaultParticleModel_0, _S105 : u32) -> i32
{
return i32(0);
}
fn DefaultParticleModel_update_0( _S106 : DefaultParticleModel_0, _S107 : ParticleUpdateData_0, _S108 : mat3x3<f32>, _S109 : ptr<function, mat3x3<f32>>) -> ModelUpdateResult_0
{
var _S110 : u32 = _S107.particle_id_0 * u32(52);
var _S111 : u32 = _S110 + u32(4);
var _S112 : u32 = entryPointParams_particles_model_0[(u32(i32(_S110)))/4];
switch(i32(_S112))
{
case i32(0):
{
var _S113 : u32 = entryPointParams_particles_model_0[(_S111)/4];
var _S114 : f32 = bitcast<f32>(_S113);
var _S115 : u32 = entryPointParams_particles_model_0[(_S111 + u32(4))/4];
var _S116 : f32 = bitcast<f32>(_S115);
var _S117 : u32 = entryPointParams_particles_model_0[(_S111 + u32(8))/4];
var _S118 : LinearElasticModel_0 = LinearElasticModel_0( _S114, _S116, bitcast<f32>(_S117) );
return ModelUpdateResult_x24init_0(LinearElasticModel_kirchoff_stress_0(_S118, (*_S109)));
}
case i32(1):
{
var _S119 : u32 = entryPointParams_particles_model_0[(_S111)/4];
var _S120 : f32 = bitcast<f32>(_S119);
var _S121 : u32 = entryPointParams_particles_model_0[(_S111 + u32(4))/4];
var _S122 : f32 = bitcast<f32>(_S121);
var _S123 : u32 = entryPointParams_particles_model_0[(_S111 + u32(8))/4];
var _S124 : NeoHookeanModel_0 = NeoHookeanModel_0( _S120, _S122, bitcast<f32>(_S123) );
return ModelUpdateResult_x24init_0(NeoHookeanModel_kirchoff_stress_0(_S124, (*_S109)));
}
case i32(2):
{
var _S125 : u32 = entryPointParams_particles_model_0[(_S111)/4];
var _S126 : f32 = bitcast<f32>(_S125);
var _S127 : u32 = entryPointParams_particles_model_0[(_S111 + u32(4))/4];
var _S128 : f32 = bitcast<f32>(_S127);
var _S129 : u32 = entryPointParams_particles_model_0[(_S111 + u32(8))/4];
var _S130 : DruckerPragerPlasticState_0 = DruckerPragerPlasticState_0( _S126, _S128, bitcast<f32>(_S129) );
var _S131 : u32 = entryPointParams_particles_model_0[(_S111 + u32(12))/4];
var _S132 : f32 = bitcast<f32>(_S131);
var _S133 : u32 = entryPointParams_particles_model_0[(_S111 + u32(16))/4];
var _S134 : f32 = bitcast<f32>(_S133);
var _S135 : u32 = entryPointParams_particles_model_0[(_S111 + u32(20))/4];
var _S136 : f32 = bitcast<f32>(_S135);
var _S137 : u32 = entryPointParams_particles_model_0[(_S111 + u32(24))/4];
var _S138 : f32 = bitcast<f32>(_S137);
var _S139 : u32 = entryPointParams_particles_model_0[(_S111 + u32(28))/4];
var _S140 : f32 = bitcast<f32>(_S139);
var _S141 : u32 = entryPointParams_particles_model_0[(_S111 + u32(32))/4];
var _S142 : DruckerPragerPlasticity_0 = DruckerPragerPlasticity_0( _S132, _S134, _S136, _S138, _S140, bitcast<f32>(_S141) );
var _S143 : u32 = entryPointParams_particles_model_0[(_S111 + u32(36))/4];
var _S144 : f32 = bitcast<f32>(_S143);
var _S145 : u32 = entryPointParams_particles_model_0[(_S111 + u32(40))/4];
var _S146 : f32 = bitcast<f32>(_S145);
var _S147 : u32 = entryPointParams_particles_model_0[(_S111 + u32(44))/4];
var _S148 : LinearElasticModel_0 = LinearElasticModel_0( _S144, _S146, bitcast<f32>(_S147) );
var _S149 : SandModel_0 = SandModel_0( _S130, _S142, _S148 );
var _S150 : DruckerPragerResult_0 = DruckerPragerPlasticity_project_0(_S142, _S130, (*_S109));
var _S151 : u32 = _S111 + SandModel_state_offset_0(_S149);
entryPointParams_particles_model_0[(_S151)/4] = bitcast<u32>(_S150.state_0.plastic_deformation_gradient_det_0);
entryPointParams_particles_model_0[(_S151 + u32(4))/4] = bitcast<u32>(_S150.state_0.plastic_hardening_0);
entryPointParams_particles_model_0[(_S151 + u32(8))/4] = bitcast<u32>(_S150.state_0.log_vol_gain_0);
var _S152 : mat3x3<f32> = LinearElasticModel_kirchoff_stress_0(_S148, _S150.deformation_gradient_2);
(*_S109) = _S150.deformation_gradient_2;
return ModelUpdateResult_x24init_0(_S152);
}
case i32(3):
{
var _S153 : u32 = entryPointParams_particles_model_0[(_S111)/4];
var _S154 : f32 = bitcast<f32>(_S153);
var _S155 : u32 = entryPointParams_particles_model_0[(_S111 + u32(4))/4];
var _S156 : f32 = bitcast<f32>(_S155);
var _S157 : u32 = entryPointParams_particles_model_0[(_S111 + u32(8))/4];
var _S158 : DruckerPragerPlasticState_0 = DruckerPragerPlasticState_0( _S154, _S156, bitcast<f32>(_S157) );
var _S159 : u32 = entryPointParams_particles_model_0[(_S111 + u32(12))/4];
var _S160 : f32 = bitcast<f32>(_S159);
var _S161 : u32 = entryPointParams_particles_model_0[(_S111 + u32(16))/4];
var _S162 : f32 = bitcast<f32>(_S161);
var _S163 : u32 = entryPointParams_particles_model_0[(_S111 + u32(20))/4];
var _S164 : f32 = bitcast<f32>(_S163);
var _S165 : u32 = entryPointParams_particles_model_0[(_S111 + u32(24))/4];
var _S166 : f32 = bitcast<f32>(_S165);
var _S167 : u32 = entryPointParams_particles_model_0[(_S111 + u32(28))/4];
var _S168 : f32 = bitcast<f32>(_S167);
var _S169 : u32 = entryPointParams_particles_model_0[(_S111 + u32(32))/4];
var _S170 : DruckerPragerPlasticity_0 = DruckerPragerPlasticity_0( _S160, _S162, _S164, _S166, _S168, bitcast<f32>(_S169) );
var _S171 : u32 = entryPointParams_particles_model_0[(_S111 + u32(36))/4];
var _S172 : f32 = bitcast<f32>(_S171);
var _S173 : u32 = entryPointParams_particles_model_0[(_S111 + u32(40))/4];
var _S174 : f32 = bitcast<f32>(_S173);
var _S175 : u32 = entryPointParams_particles_model_0[(_S111 + u32(44))/4];
var _S176 : NeoHookeanModel_0 = NeoHookeanModel_0( _S172, _S174, bitcast<f32>(_S175) );
var _S177 : SandModel_1 = SandModel_1( _S158, _S170, _S176 );
var _S178 : DruckerPragerResult_0 = DruckerPragerPlasticity_project_0(_S170, _S158, (*_S109));
var _S179 : u32 = _S111 + SandModel_state_offset_1(_S177);
entryPointParams_particles_model_0[(_S179)/4] = bitcast<u32>(_S178.state_0.plastic_deformation_gradient_det_0);
entryPointParams_particles_model_0[(_S179 + u32(4))/4] = bitcast<u32>(_S178.state_0.plastic_hardening_0);
entryPointParams_particles_model_0[(_S179 + u32(8))/4] = bitcast<u32>(_S178.state_0.log_vol_gain_0);
var _S180 : mat3x3<f32> = NeoHookeanModel_kirchoff_stress_0(_S176, _S178.deformation_gradient_2);
(*_S109) = _S178.deformation_gradient_2;
return ModelUpdateResult_x24init_0(_S180);
}
default :
{
return ModelUpdateResult_x24init_0(mat3x3<f32>(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
}
}
}
@compute
@workgroup_size(64, 1, 1)
fn particle_update(@builtin(global_invocation_id) invocation_id_0 : vec3<u32>)
{
var _S181 : u32 = invocation_id_0.x;
if(_S181 >= entryPointParams_particles_len_0)
{
return;
}
var _S182 : DefaultParticleModel_0 = DefaultParticleModel_0( );
var _S183 : i32 = DefaultParticleModel_model_flags_0(_S182, _S181);
var _S184 : f32 = entryPointParams_params_0.dt_0;
var _S185 : GridGeneric_std430_0 = entryPointParams_grid_0[i32(0)];
var _S186 : Dynamics_std430_0 = entryPointParams_particles_dyn_0[_S181];
var _S187 : vec3<f32> = entryPointParams_particles_pos_0[_S181].pt_0;
var _S188 : bool = (entryPointParams_particles_dyn_0[_S181].cdf_0.signed_distance_0) < (-0.05000000074505806f * _S185.cell_width_0);
var new_particle_vel_0 : vec3<f32>;
if(_S188)
{
new_particle_vel_0 = _S186.cdf_0.rigid_vel_0 + project_velocity_0(_S186.velocity_0 - _S186.cdf_0.rigid_vel_0, _S186.cdf_0.normal_0);
}
else
{
new_particle_vel_0 = _S186.velocity_0;
}
var _S189 : f32 = length(new_particle_vel_0);
if(_S189 > (_S185.cell_width_0 / _S184))
{
new_particle_vel_0 = new_particle_vel_0 / vec3<f32>(_S189) * vec3<f32>(_S185.cell_width_0) / vec3<f32>(_S184);
}
var _S190 : vec3<f32> = _S187 + new_particle_vel_0 * vec3<f32>(_S184);
if(_S188)
{
new_particle_vel_0 = new_particle_vel_0 + vec3<f32>((_S184 * - max(_S186.cdf_0.signed_distance_0, -0.30000001192092896f * _S185.cell_width_0) * 1000.0f)) * _S186.cdf_0.normal_0;
}
var new_deformation_gradient_0 : mat3x3<f32>;
if(((_S183 & (i32(1)))) == i32(0))
{
var _S191 : mat3x3<f32> = mat3x3<f32>(_S186.def_grad_0.data_0[i32(0)][i32(0)], _S186.def_grad_0.data_0[i32(0)][i32(1)], _S186.def_grad_0.data_0[i32(0)][i32(2)], _S186.def_grad_0.data_0[i32(1)][i32(0)], _S186.def_grad_0.data_0[i32(1)][i32(1)], _S186.def_grad_0.data_0[i32(1)][i32(2)], _S186.def_grad_0.data_0[i32(2)][i32(0)], _S186.def_grad_0.data_0[i32(2)][i32(1)], _S186.def_grad_0.data_0[i32(2)][i32(2)]);
var _S192 : mat3x3<f32> = mat3x3<f32>(_S186.affine_0.data_0[i32(0)][i32(0)], _S186.affine_0.data_0[i32(0)][i32(1)], _S186.affine_0.data_0[i32(0)][i32(2)], _S186.affine_0.data_0[i32(1)][i32(0)], _S186.affine_0.data_0[i32(1)][i32(1)], _S186.affine_0.data_0[i32(1)][i32(2)], _S186.affine_0.data_0[i32(2)][i32(0)], _S186.affine_0.data_0[i32(2)][i32(1)], _S186.affine_0.data_0[i32(2)][i32(2)]);
var _S193 : mat3x3<f32> = mat3x3<f32>(_S184, _S184, _S184, _S184, _S184, _S184, _S184, _S184, _S184);
new_deformation_gradient_0 = _S191 + (((mat3x3<f32>(_S192[0] * _S193[0], _S192[1] * _S193[1], _S192[2] * _S193[2])) * (_S191)));
}
else
{
var _S194 : mat3x3<f32> = mat3x3<f32>(_S186.def_grad_0.data_0[i32(0)][i32(0)], _S186.def_grad_0.data_0[i32(0)][i32(1)], _S186.def_grad_0.data_0[i32(0)][i32(2)], _S186.def_grad_0.data_0[i32(1)][i32(0)], _S186.def_grad_0.data_0[i32(1)][i32(1)], _S186.def_grad_0.data_0[i32(1)][i32(2)], _S186.def_grad_0.data_0[i32(2)][i32(0)], _S186.def_grad_0.data_0[i32(2)][i32(1)], _S186.def_grad_0.data_0[i32(2)][i32(2)]);
new_deformation_gradient_0 = diag_0(vec3<f32>((_S194[i32(0)][i32(0)] + _S194[i32(0)][i32(0)] * _S186.vel_grad_det_0 * _S184)));
}
var _S195 : mat3x3<f32> = mat3x3<f32>(_S186.affine_0.data_0[i32(0)][i32(0)], _S186.affine_0.data_0[i32(0)][i32(1)], _S186.affine_0.data_0[i32(0)][i32(2)], _S186.affine_0.data_0[i32(1)][i32(0)], _S186.affine_0.data_0[i32(1)][i32(1)], _S186.affine_0.data_0[i32(1)][i32(2)], _S186.affine_0.data_0[i32(2)][i32(0)], _S186.affine_0.data_0[i32(2)][i32(1)], _S186.affine_0.data_0[i32(2)][i32(2)]);
var _S196 : ModelUpdateResult_0 = DefaultParticleModel_update_0(_S182, ParticleUpdateData_x24init_0(_S184, _S185.cell_width_0, _S181, _S186.init_volume_0, _S186.phase_0), _S195, &(new_deformation_gradient_0));
var _S197 : mat3x3<f32> = mat3x3<f32>(_S186.mass_0, _S186.mass_0, _S186.mass_0, _S186.mass_0, _S186.mass_0, _S186.mass_0, _S186.mass_0, _S186.mass_0, _S186.mass_0);
var _S198 : mat3x3<f32> = mat3x3<f32>(_S186.init_volume_0 * QuadraticKernel_inv_d_0(_S185.cell_width_0) * _S184, _S186.init_volume_0 * QuadraticKernel_inv_d_0(_S185.cell_width_0) * _S184, _S186.init_volume_0 * QuadraticKernel_inv_d_0(_S185.cell_width_0) * _S184, _S186.init_volume_0 * QuadraticKernel_inv_d_0(_S185.cell_width_0) * _S184, _S186.init_volume_0 * QuadraticKernel_inv_d_0(_S185.cell_width_0) * _S184, _S186.init_volume_0 * QuadraticKernel_inv_d_0(_S185.cell_width_0) * _S184, _S186.init_volume_0 * QuadraticKernel_inv_d_0(_S185.cell_width_0) * _S184, _S186.init_volume_0 * QuadraticKernel_inv_d_0(_S185.cell_width_0) * _S184, _S186.init_volume_0 * QuadraticKernel_inv_d_0(_S185.cell_width_0) * _S184);
var _S199 : mat3x3<f32> = _S196.kirchoff_stress_0;
var _S200 : mat3x3<f32> = mat3x3<f32>(_S195[0] * _S197[0], _S195[1] * _S197[1], _S195[2] * _S197[2]) - mat3x3<f32>(_S199[0] * _S198[0], _S199[1] * _S198[1], _S199[2] * _S198[2]);
var _S201 : bool;
if((all((_S190 == _S190))))
{
_S201 = (determinant(new_deformation_gradient_0)) > 0.0f;
}
else
{
_S201 = false;
}
if(_S201)
{
entryPointParams_particles_pos_0[_S181].pt_0 = _S190;
entryPointParams_particles_dyn_0[_S181].velocity_0 = new_particle_vel_0;
var _S202 : array<vec3<f32>, i32(3)> = array<vec3<f32>, i32(3)>( vec3<f32>(new_deformation_gradient_0[i32(0)][i32(0)], new_deformation_gradient_0[i32(0)][i32(1)], new_deformation_gradient_0[i32(0)][i32(2)]), vec3<f32>(new_deformation_gradient_0[i32(1)][i32(0)], new_deformation_gradient_0[i32(1)][i32(1)], new_deformation_gradient_0[i32(1)][i32(2)]), vec3<f32>(new_deformation_gradient_0[i32(2)][i32(0)], new_deformation_gradient_0[i32(2)][i32(1)], new_deformation_gradient_0[i32(2)][i32(2)]) );
entryPointParams_particles_dyn_0[_S181].def_grad_0.data_0 = _S202;
var _S203 : array<vec3<f32>, i32(3)> = array<vec3<f32>, i32(3)>( vec3<f32>(_S200[i32(0)][i32(0)], _S200[i32(0)][i32(1)], _S200[i32(0)][i32(2)]), vec3<f32>(_S200[i32(1)][i32(0)], _S200[i32(1)][i32(1)], _S200[i32(1)][i32(2)]), vec3<f32>(_S200[i32(2)][i32(0)], _S200[i32(2)][i32(1)], _S200[i32(2)][i32(2)]) );
entryPointParams_particles_dyn_0[_S181].affine_0.data_0 = _S203;
}
else
{
entryPointParams_particles_dyn_0[_S181].enabled_0 = u32(0);
entryPointParams_particles_dyn_0[_S181].velocity_0 = vec3<f32>(0.0f);
var _S204 : mat3x3<f32> = diag_0(vec3<f32>(1.0f));
var _S205 : array<vec3<f32>, i32(3)> = array<vec3<f32>, i32(3)>( vec3<f32>(_S204[i32(0)][i32(0)], _S204[i32(0)][i32(1)], _S204[i32(0)][i32(2)]), vec3<f32>(_S204[i32(1)][i32(0)], _S204[i32(1)][i32(1)], _S204[i32(1)][i32(2)]), vec3<f32>(_S204[i32(2)][i32(0)], _S204[i32(2)][i32(1)], _S204[i32(2)][i32(2)]) );
entryPointParams_particles_dyn_0[_S181].def_grad_0.data_0 = _S205;
var _S206 : mat3x3<f32> = mat3x3<f32>(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
var _S207 : array<vec3<f32>, i32(3)> = array<vec3<f32>, i32(3)>( vec3<f32>(_S206[i32(0)][i32(0)], _S206[i32(0)][i32(1)], _S206[i32(0)][i32(2)]), vec3<f32>(_S206[i32(1)][i32(0)], _S206[i32(1)][i32(1)], _S206[i32(1)][i32(2)]), vec3<f32>(_S206[i32(2)][i32(0)], _S206[i32(2)][i32(1)], _S206[i32(2)][i32(2)]) );
entryPointParams_particles_dyn_0[_S181].affine_0.data_0 = _S207;
entryPointParams_particles_dyn_0[_S181].mass_0 = 0.0f;
}
return;
}