95 auto compute_rot = [&]() {
100 const double s =
v.l2();
104 const double coef = 1. / (1. +
c);
105 Tensor2<double, 3, 3> t_v;
106 t_v(
i,
j) = levi_civita(
i,
j,
k) *
v(
k);
108 (coef * t_v(
i,
k)) * t_v(
k,
j);
120 for (
int i = 0;
i != 3; ++
i)
136 template <
typename T1,
typename T2>
150 std::array<double, 9> def_real;
151 std::fill(def_real.begin(), def_real.end(), 0);
155 CHKERR moab_debug.tag_get_handle(
"_ROLLER_ID", 1, MB_TYPE_INTEGER, tag0,
156 MB_TAG_CREAT | MB_TAG_SPARSE, &def_int);
157 CHKERR moab_debug.tag_set_data(tag0, &vertex, 1, &this->iD);
159 CHKERR moab_debug.tag_get_handle(
"_BODY_TYPE", 1, MB_TYPE_INTEGER, tag0,
160 MB_TAG_CREAT | MB_TAG_SPARSE, &def_int);
161 CHKERR moab_debug.tag_set_data(tag0, &vertex, 1, &this->bodyType);
164 CHKERR moab_debug.tag_get_handle(
"_ORIENTATION", 3, MB_TYPE_DOUBLE, tag0,
165 MB_TAG_CREAT | MB_TAG_SPARSE, &def_real);
168 CHKERR moab_debug.tag_get_handle(
"_ROLLER_DATA", 9, MB_TYPE_DOUBLE, tag0,
169 MB_TAG_CREAT | MB_TAG_SPARSE, &def_real);
170 CHKERR moab_debug.tag_set_data(tag0, &vertex, 1, this->dataForTags.data());
231 template <
typename T1,
typename T2>
254 template <
typename T1,
typename T2,
typename T3>
258 const Tensor2<double, 3, 3> t_diff_norm(0., 0., 0., 0., 0., 0., 0., 0., 0.);
262 template <
typename T1,
typename T2>
272 PetscInt nb_dirs = 3;
273 CHKERR PetscOptionsBegin(PETSC_COMM_WORLD,
"",
"",
"");
274 string param =
"-direction" + to_string(
iD);
277 param =
"-flip" + to_string(
iD);
278 CHKERR PetscOptionsBool(param.c_str(),
"flip the plane normal",
"",
fLip,
282 ierr = PetscOptionsEnd();
328 template <
typename T1,
typename T2>
338 template <
typename T1,
typename T2,
typename T3>
345 const double norm = t_d.l2();
346 const double norm3 = norm * norm * norm;
348 kronecker_delta(
i,
j) * (1. / norm) - (1. / norm3) * t_d(
i) * t_d(
j);
359 template <
typename T1,
typename T2>
372 CHKERR PetscOptionsBegin(PETSC_COMM_WORLD,
"",
"",
"");
374 string param =
"-radius" + to_string(
iD);
375 CHKERR PetscOptionsScalar(param.c_str(),
"set roller radius",
"",
rAdius,
377 ierr = PetscOptionsEnd();
426 template <
typename T1,
typename T2>
440 const double half_height =
hEight / 2.;
449 c_center(2) = half_height;
451 q_minus_c(
i) = Q(
i) - c_center(
i);
452 q_minus_c.normalize();
455 Q_K(
i) = Q(
i) -
K(
i);
456 gAp = sqrt(P_Q.l2() * P_Q.l2() + Q_K.l2() * Q_K.l2());
463 c_center(2) = -half_height;
465 q_minus_c(
i) = Q(
i) - c_center(
i);
466 q_minus_c.normalize();
469 Q_K(
i) = Q(
i) -
K(
i);
470 gAp = sqrt(P_Q.l2() * P_Q.l2() + Q_K.l2() * Q_K.l2());
534 template <
typename T1,
typename T2,
typename T3>
539 Tensor2<double, 3, 3> diff_normal;
541 const double clean_gap =
gAp;
542 const double eps = 1e-8;
543 for (
int ii = 0; ii != 3; ++ii) {
545 pert_disp(ii) +=
eps;
546 auto pert_normal =
getNormal(t_coords, pert_disp);
547 norm_diff(
i) = (pert_normal(
i) - t_normal(
i)) /
eps;
550 for (
int jj = 0; jj != 3; ++jj) {
551 diff_normal(jj, ii) = norm_diff(jj);
562 template <
typename T1,
typename T2>
575 PetscInt nb_dirs = 3;
576 CHKERR PetscOptionsBegin(PETSC_COMM_WORLD,
"",
"",
"");
577 string param =
"-direction" + to_string(
iD);
580 param =
"-radius" + to_string(
iD);
581 CHKERR PetscOptionsScalar(param.c_str(),
"set roller radius",
"",
rAdius,
583 param =
"-height" + to_string(
iD);
584 CHKERR PetscOptionsScalar(param.c_str(),
"set cylinder height",
"",
hEight,
588 ierr = PetscOptionsEnd();
639 template <
typename T1,
typename T2>
665 const double x = t_d(0);
666 const double y = t_d(1);
667 const double z = t_d(2);
669 const double prod = sqrt(pow(x, 2) + pow(y, 2));
670 const double prod2 = sqrt(pow(-RR + prod, 2) + pow(z, 2));
672 tNormal(0) = (x * (-RR + prod)) / (prod * prod2);
673 tNormal(1) = (y * (-RR + prod)) / (prod * prod2);
687 template <
typename T1,
typename T2,
typename T3>
691 Tensor2<double, 3, 3> diff_normal;
693 const double clean_gap =
gAp;
694 const double eps = 1e-8;
695 for (
int ii = 0; ii != 3; ++ii) {
697 pert_disp(ii) +=
eps;
698 auto pert_normal =
getNormal(t_coords, pert_disp);
699 norm_diff(
i) = (pert_normal(
i) - t_normal(
i)) /
eps;
702 for (
int jj = 0; jj != 3; ++jj) {
703 diff_normal(jj, ii) = norm_diff(jj);
709 template <
typename T1,
typename T2>
719 CHKERR PetscOptionsBegin(PETSC_COMM_WORLD,
"",
"",
"");
720 string param =
"-inner_radius" + to_string(
iD);
721 CHKERR PetscOptionsScalar(param.c_str(),
"set torus small radius",
"",
innerRadius,
723 param =
"-radius" + to_string(
iD);
724 CHKERR PetscOptionsScalar(param.c_str(),
"set torus large Radius",
"",
rAdius,
726 param =
"-direction" + to_string(
iD);
729 ierr = PetscOptionsEnd();
806 CHKERR PetscOptionsBegin(PETSC_COMM_WORLD,
"",
"",
"");
807 string param =
"-radius" + to_string(
iD);
808 CHKERR PetscOptionsScalar(param.c_str(),
"set roller radius",
"",
rAdius,
810 param =
"-fillet" + to_string(
iD);
811 CHKERR PetscOptionsScalar(param.c_str(),
"set torus small radius",
"",
813 param =
"-angle_a" + to_string(
iD);
814 CHKERR PetscOptionsScalar(param.c_str(),
"set roller angle of attack",
"",
816 param =
"-angle_b" + to_string(
iD);
817 CHKERR PetscOptionsScalar(param.c_str(),
"set roller back angle",
"",
820 param =
"-height" + to_string(
iD);
821 CHKERR PetscOptionsScalar(param.c_str(),
"set roller height (optional)",
"",
823 param =
"-direction" + to_string(
iD);
826 ierr = PetscOptionsEnd();
848 template <
typename T1,
typename T2>
856 const double inv_eps = 1e6;
857 array<double, 3> gaps;
858 const double half_height =
hEight / 2.;
860 double cone_apex_offset_a =
coneOffsetA + half_height;
861 double cone_apex_offset_b =
coneOffsetB - half_height;
865 double c1 = 1. / sqrt(1 + (slope * slope));
866 double c2 = c1 * slope;
867 auto prod = sqrt(
p(0) *
p(0) +
p(1) *
p(1));
868 auto prod2 = sqrt(1 + slope * slope);
872 return c1 * prod + c2 *
p(2);
881 auto torus_dist = [&]() {
882 const double prod = sqrt(pow(t_d(0), 2) + pow(t_d(1), 2));
883 const double prod2 = sqrt(pow(-
torusRadius + prod, 2) + pow(t_d(2), 2));
890 gaps[0] = torus_dist();
891 gaps[1] = t_d(2) < -cone_apex_offset_a ? inv_eps
892 : sd_infinite_cone(t_apx_1,
angleA);
893 gaps[2] = t_d(2) > -cone_apex_offset_b ? inv_eps
894 : sd_infinite_cone(t_apx_2, -
angleB);
896 int nb = distance(gaps.begin(), std::min_element(gaps.begin(), gaps.end()));
906 sd_infinite_cone(t_apx_1,
angleA);
911 sd_infinite_cone(t_apx_2, -
angleB);
957 template <
typename T1,
typename T2,
typename T3>
961 Tensor2<double, 3, 3> diff_normal;
963 const double clean_gap =
gAp;
964 const double eps = 1e-8;
965 for (
int ii = 0; ii != 3; ++ii) {
967 pert_disp(ii) +=
eps;
968 auto pert_normal =
getNormal(t_coords, pert_disp);
969 norm_diff(
i) = (pert_normal(
i) - t_normal(
i)) /
eps;
972 for (
int jj = 0; jj != 3; ++jj) {
973 diff_normal(jj, ii) = norm_diff(jj);
983 template <
typename T1,
typename T2>
991 shared_ptr<ArbitrarySurfaceData>
cP;
1045 template <
typename T1,
typename T2>
1061 const double half_height =
hEight / 2.;
1109 auto clamp = [](
auto x,
auto min,
auto max) {
1122 vec2 q(sqrt(
p(
i) *
p(
i)),
p(2));
1124 vec2 k2(r2 - r1, 2.0 *
h);
1125 vec2 ca(q(0) - std::min(q(0), (q(1) < 0.0) ? r1 : r2), abs(q(1)) -
h);
1126 vec2 k1_q(k1(0) - q(0), k1(1) - q(1));
1127 cb(
i) = q(
i) - k1(
i) +
1128 k2(
i) * clamp((k1_q(
i) * k2(
i)) / (k2(
i) * k2(
i)), 0.0, 1.0);
1129 double s = (cb(0) < 0.0 && ca(1) < 0.0) ? -1.0 : 1.0;
1130 return s * sqrt(std::min((ca(
i) * ca(
i)), (cb(
i) * cb(
i))));
1133 const double eps = 1e-6;
1134 auto cone_distance =
1137 auto get_d = [&](
int a) {
1169 my_normal.normalize();
1171 gAp = cone_distance;
1181 template <
typename T1,
typename T2,
typename T3>
1185 Tensor2<double, 3, 3> diff_normal;
1187 const double clean_gap =
gAp;
1188 const double eps = 1e-8;
1189 for (
int ii = 0; ii != 3; ++ii) {
1191 pert_disp(ii) +=
eps;
1192 auto pert_normal =
getNormal(t_coords, pert_disp);
1193 norm_diff(
i) = (pert_normal(
i) - t_normal(
i)) /
eps;
1196 for (
int jj = 0; jj != 3; ++jj) {
1197 diff_normal(jj, ii) = norm_diff(jj);
1203 template <
typename T1,
typename T2>
1214 CHKERR PetscOptionsBegin(PETSC_COMM_WORLD,
"",
"",
"");
1215 string param =
"-radius" + to_string(
iD);
1216 CHKERR PetscOptionsScalar(param.c_str(),
"set cone radius",
"",
rAdius,
1218 param =
"-height" + to_string(
iD);
1219 CHKERR PetscOptionsScalar(param.c_str(),
"set cone height",
"",
hEight,
1221 param =
"-angle" + to_string(
iD);
1222 CHKERR PetscOptionsScalar(param.c_str(),
"set cone half angle",
"", angle,
1223 &angle, PETSC_NULL);
1224 param =
"-direction" + to_string(
iD);
1227 ierr = PetscOptionsEnd();
1237 cP = make_shared<ArbitrarySurfaceData>(1,
sLope);
1290 template <
typename T1,
typename T2>
1306 template <
typename T1,
typename T2>
1312 template <
typename T1,
typename T2,
typename T3>
1316 Tensor2<double, 3, 3> diff_normal;
1318 const double clean_gap =
gAp;
1319 const double eps = 1e-8;
1320 for (
int ii = 0; ii != 3; ++ii) {
1322 pert_disp(ii) +=
eps;
1323 auto pert_normal =
getNormal(t_coords, pert_disp);
1324 norm_diff(
i) = (pert_normal(
i) - t_normal(
i)) /
eps;
1327 for (
int jj = 0; jj != 3; ++jj) {
1328 diff_normal(jj, ii) = norm_diff(jj);
1336 CHKERR PetscOptionsBegin(PETSC_COMM_WORLD,
"",
"",
"");
1338 string param =
"-body_file_name" + to_string(
iD);
1340 CHKERR PetscOptionsString(param.c_str(),
"file name",
"",
"mesh.vtk",
1345 "body surface should be vtk surface");
1350 make_shared<OrientedBoxTreeTool>(
bodyMesh,
"ROOTSETSURF",
true);
1352 char normal_tag_name[255] =
"Normals";
1355 "Normal tag name %s cannot be found. Please "
1356 "provide the correct name. or run ./calculate_normals");
1359 ierr = PetscOptionsEnd();
static PetscErrorCode ierr
Tensor1< T, Tensor_Dim > normalize()
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
const double c
speed of light (cm/ns)
const double v
phase velocity of light in medium (cm/ns)
shared_ptr< ArbitrarySurfaceData > cP
Tensor2< double, 3, 3 > getDiffNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp, Tensor1< TPack1, 3 > &t_normal)
ConeRigidBody(VectorDouble c_coords, VectorDouble roller_disp, int id)
Tensor1< double, 3 > getdGap(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_normal)
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp)
Tensor1< double, 3 > & getNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp)
double getGapImpl(Tensor1< T1, 3 > &t_coords)
MoFEMErrorCode getRollerDataForTag()
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< double, 3 > &t_disp)
Tensor1< double, 3 > getNormal(Tensor1< double, 3 > &t_coords, Tensor1< double, 3 > &t_disp)
Tensor1< double, 3 > getdGapImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_normal)
Tensor2< double, 3, 3 > getDiffNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp, Tensor1< T3, 3 > &t_normal)
double getGap(Tensor1< TPack3, 3 > &t_coords)
virtual MoFEMErrorCode getBodyOptions()
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< double, 3 > &t_disp)
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp)
Tensor2< double, 3, 3 > getDiffNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp, Tensor1< T3, 3 > &t_normal)
double getGapImpl(Tensor1< T1, 3 > &t_coords)
Tensor1< double, 3 > & getNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp)
MoFEMErrorCode getRollerDataForTag()
Tensor2< double, 3, 3 > getDiffNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp, Tensor1< TPack1, 3 > &t_normal)
MoFEMErrorCode getBodyOptions()
Tensor1< double, 3 > getdGapImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_normal)
Tensor1< double, 3 > getdGap(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_normal)
double getGap(Tensor1< TPack3, 3 > &t_coords)
Tensor1< double, 3 > getNormal(Tensor1< double, 3 > &t_coords, Tensor1< double, 3 > &t_disp)
CylinderRigidBody(VectorDouble c_coords, VectorDouble roller_disp, int id)
double getGap(Tensor1< TPack3, 3 > &t_coords)
PlaneRigidBody(VectorDouble c_coords, VectorDouble roller_disp, int id)
Tensor2< double, 3, 3 > getDiffNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp, Tensor1< TPack1, 3 > &t_normal)
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp)
Tensor2< double, 3, 3 > getDiffNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp, Tensor1< T3, 3 > &t_normal)
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< double, 3 > &t_disp)
MoFEMErrorCode getRollerDataForTag()
double getGapImpl(Tensor1< T1, 3 > &t_coords)
Tensor1< double, 3 > getNormal(Tensor1< double, 3 > &t_coords, Tensor1< double, 3 > &t_disp)
Tensor1< double, 3 > & getNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp)
MoFEMErrorCode getBodyOptions()
Tensor1< double, 3 > getdGap(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_normal)
Tensor1< double, 3 > getdGapImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_normal)
PackPtr< double *, 1 > TPack1
virtual Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp)=0
virtual MoFEMErrorCode getRollerDataForTag()=0
boost::shared_ptr< TimeAccelerogram > methodOpForRollerPosition
Tensor1< double, 3 > pointCoords
Tensor1< double, 3 > tNormal
virtual Tensor2< double, 3, 3 > getDiffNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp, Tensor1< TPack1, 3 > &t_normal)=0
Tensor1< double, 3 > dGap
Tensor1< double, 3 > oRientation
boost::shared_ptr< TimeAccelerogram > methodOpForRollerDirection
RigidBodyData(VectorDouble c_coords, VectorDouble roller_disp, int id)
VectorDouble BodyDispScaled
virtual MoFEMErrorCode getBodyOptions()=0
virtual Tensor1< double, 3 > getdGap(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_normal)=0
VectorDouble BodyDirectionScaled
Tensor1< double, 3 > & getPointCoords(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp)
Tensor2< double, 3, 3 > rotationMat
array< double, 9 > dataForTags
MoFEMErrorCode saveBasicDataOnTag(moab::Interface &moab_debug, EntityHandle &vertex)
VectorDouble originCoords
PackPtr< double *, 3 > TPack3
Tensor1< double, 3 > getBodyOffset()
MoFEMErrorCode computeRotationMatrix()
virtual Tensor1< double, 3 > getNormal(Tensor1< double, 3 > &t_coords, Tensor1< double, 3 > &t_disp)=0
virtual double getGap(Tensor1< TPack3, 3 > &t_coords)=0
virtual Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< double, 3 > &t_disp)=0
Tensor1< double, 3 > closestPoint
Tensor1< double, 3 > defaultOrientation
Tensor2< double, 3, 3 > diffNormal
Tensor1< double, 3 > getNormal(Tensor1< double, 3 > &t_coords, Tensor1< double, 3 > &t_disp)
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< double, 3 > &t_disp)
Tensor2< double, 3, 3 > getDiffNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp, Tensor1< TPack1, 3 > &t_normal)
MoFEMErrorCode getBodyOptions()
double getGap(Tensor1< TPack3, 3 > &t_coords)
Tensor1< double, 3 > getdGapImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_normal)
MoFEMErrorCode getRollerDataForTag()
Tensor2< double, 3, 3 > getDiffNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp, Tensor1< T3, 3 > &t_normal)
Tensor1< double, 3 > getdGap(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_normal)
RollerRigidBody(VectorDouble c_coords, VectorDouble roller_disp, int id)
double getGapImpl(Tensor1< T1, 3 > &t_coords)
Tensor1< double, 3 > & getNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp)
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp)
double getGap(Tensor1< TPack3, 3 > &t_coords)
MoFEMErrorCode getBodyOptions()
Tensor1< double, 3 > getdGap(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_normal)
Tensor1< double, 3 > & getNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp)
Tensor2< double, 3, 3 > getDiffNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp, Tensor1< T3, 3 > &t_normal)
Tensor1< double, 3 > getNormal(Tensor1< double, 3 > &t_coords, Tensor1< double, 3 > &t_disp)
moab::Interface * bodyMesh
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< double, 3 > &t_disp)
shared_ptr< OrientedBoxTreeTool > orientedBox
Tensor2< double, 3, 3 > getDiffNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp, Tensor1< TPack1, 3 > &t_normal)
MoFEMErrorCode getRollerDataForTag()
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp)
Tensor1< double, 3 > getdGapImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_normal)
STLRigidBody(VectorDouble c_coords, VectorDouble roller_disp, int id)
double getGapImpl(Tensor1< T1, 3 > &t_coords)
double getGap(Tensor1< TPack3, 3 > &t_coords)
SphereRigidBody(VectorDouble c_coords, VectorDouble roller_disp, int id)
Tensor2< double, 3, 3 > getDiffNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp, Tensor1< T3, 3 > &t_normal)
Tensor1< double, 3 > & getNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp)
MoFEMErrorCode getRollerDataForTag()
MoFEMErrorCode getBodyOptions()
Tensor1< double, 3 > getdGap(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_normal)
double getGapImpl(Tensor1< T1, 3 > &t_coords)
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< double, 3 > &t_disp)
Tensor1< double, 3 > getNormal(Tensor1< double, 3 > &t_coords, Tensor1< double, 3 > &t_disp)
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp)
Tensor1< double, 3 > getdGapImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_normal)
Tensor2< double, 3, 3 > getDiffNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp, Tensor1< TPack1, 3 > &t_normal)
double getGap(Tensor1< TPack3, 3 > &t_coords)
MoFEMErrorCode getRollerDataForTag()
Tensor2< double, 3, 3 > getDiffNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp, Tensor1< TPack1, 3 > &t_normal)
Tensor1< double, 3 > getdGapImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_normal)
Tensor1< double, 3 > & getNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp)
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_disp)
virtual MoFEMErrorCode getBodyOptions()
Tensor1< double, 3 > getdGap(Tensor1< TPack3, 3 > &t_coords, Tensor1< TPack1, 3 > &t_normal)
double getGapImpl(Tensor1< T1, 3 > &t_coords)
TorusRigidBody(VectorDouble c_coords, VectorDouble roller_disp, int id)
Tensor1< double, 3 > getNormal(Tensor1< double, 3 > &t_coords, Tensor1< double, 3 > &t_disp)
Tensor2< double, 3, 3 > getDiffNormalImpl(Tensor1< T1, 3 > &t_coords, Tensor1< T2, 3 > &t_disp, Tensor1< T3, 3 > &t_normal)
Tensor1< double, 3 > getNormal(Tensor1< TPack3, 3 > &t_coords, Tensor1< double, 3 > &t_disp)