63 if ( normal_gap <= 1.e-15 ) {
72 double normal_traction;
73 FloatArray tangential_traction, tangential_traction_trial;
75 this->
computeTractions(normal_traction, tangential_traction, tangential_traction_trial, mode, contactPair, tStep);
76 double abs_normal_traction = std::abs(normal_traction);
89 std::vector<FloatMatrix> dNs;
93 auto tangent_i = tangent_vectors[i];
99 auto tangent_j = tangent_vectors[j];
100 double a_ij = contravariant_metric(i, j);
101 double h_ij = curvature(i, j);
110 answer += k_rot + k_curv;
114 tangential_traction = tangential_traction_trial;
121 for (
int i = 0; i < this->surface_dimension; i++) {
122 auto rho_i = tangent_vectors[i];
123 double t_i = tangential_traction(i);
124 for (
int j = 0; j < this->surface_dimension; j++) {
125 auto rho_j = tangent_vectors[j];
126 double a_ij = contravariant_metric(i, j);
127 const auto& dNj = dNs[j];
128 double h_ij = curvature(i, j);
133 factor = + t_i * h_ij;
138 auto rho_k = tangent_vectors[k];
139 double a_ik = contravariant_metric(i, k);
140 double a_jk = contravariant_metric(j, k);
143 auto rho_l = tangent_vectors[l];
144 double a_il = contravariant_metric(i, l);
145 double a_jl = contravariant_metric(j, l);
147 factor = - t_i * a_il * a_jk;
149 factor = - t_i * a_ik * a_jl;
173 double t_norm_squared = 0.0;
175 double t_i = tangential_traction(i);
177 double t_j = tangential_traction(j);
178 double a_ij = contravariant_metric(i, j);
179 t_norm_squared += t_i * t_j * a_ij;
182 const double t_norm = std::sqrt(t_norm_squared);
183 const double t_norm3 = std::pow(t_norm,3);
186 const auto& rho_i = tangent_vectors[i];
187 const double t_i = tangential_traction(i);
189 const auto& rho_j = tangent_vectors[j];
190 const double t_j = tangential_traction(j);
191 const double a_ij = contravariant_metric(i, j);
192 const auto& dNj = dNs[j];
193 const double h_ij = curvature(i,j);
201 factor = +
friction * abs_normal_traction * t_i / t_norm * h_ij;
205 const auto& rho_k = tangent_vectors[k];
206 const double a_ik = contravariant_metric(i, k);
207 const double a_jk = contravariant_metric(j, k);
209 const auto& rho_l = tangent_vectors[l];
210 const double a_il = contravariant_metric(i, l);
211 const double a_jl = contravariant_metric(j, l);
216 const double factorCommon = -
friction * abs_normal_traction * t_i / t_norm;
217 factor = factorCommon * a_il * a_jk;
219 factor = factorCommon * a_ik * a_jl;
230 k_slip += k_sl_constitutive_non_symmetric;
231 k_slip += k_sl_constitutive_symmetric_1;
232 k_slip += k_sl_constitutive_symmetric_2;
233 k_slip += k_sl_rotational_symmetric;
234 k_slip += k_sl_curvature_symmetric;
235 k_slip += k_sl_curvature_non_symmetric;
340 tangentialTraction.
zero();
343 normalTraction = 0.0;
344 if ( normal_gap > 0.0 ) {
361 const auto& rho_i = tangentVectors[i];
363 const double a_ij = covariant_metric(i, j);
364 const auto& prev_rho_j = prevTangentVectors[j];
365 double prev_rho_j_dot_rho_i = prev_rho_j.dotProduct(rho_i);
367 const double prev_a_kj = prev_contravariant_metric(k, j);
368 const double prev_t_k = prevTangentialTractions(k);
369 tangentialTraction(i) += prev_t_k * prev_a_kj * prev_rho_j_dot_rho_i;
371 double delta_xi_j = 0.0;
373 const double a_jk = contravariant_metric(j, k);
375 delta_xi_j += delta_rho.
dotProduct(rho_k) * a_jk;
383 double t_i = tangentialTraction(i);
385 double a_ij = contravariant_metric(i, j);
386 double t_j = tangentialTraction(j);
387 tNorm2 += t_i * t_j * a_ij;
390 double tNorm = std::sqrt(tNorm2);
391 double absNormalTraction = std::abs(normalTraction);
392 double f = tNorm -
friction * absNormalTraction;
393 tangentialTractionTrial = tangentialTraction;
395 tangentialTractionTrial.
times(-1);
396 tangentialTraction.
times(-1);
397 double factor =
friction * absNormalTraction / tNorm;
398 tangentialTraction *= factor;