37 const T n = sqrt(normal[0]*normal[0]+normal[1]*normal[1]+normal[2]*normal[2]);
42 transverse[0]=0.;transverse[1]=1.;transverse[2]=0.;
43 if(Kokkos::fabs(normal[0]*transverse[0]+normal[1]*transverse[1])>0.9){
44 transverse[0]=1.;transverse[1]=0.;
47 const T nt = normal[0]*transverse[0]+normal[1]*transverse[1]+normal[2]*transverse[2];
50 const T mult = nt/(n*n);
53 for(
int dim=0;dim<3;++dim){
54 transverse[dim] = transverse[dim] - mult * normal[dim];
57 const T t = sqrt(transverse[0]*transverse[0]+transverse[1]*transverse[1]+transverse[2]*transverse[2]);
58 KOKKOS_ASSERT(t != 0.);
59 for(
int dim=0;dim<3;++dim){
64 binormal[0] = (normal[1] * transverse[2] - normal[2] * transverse[1]);
65 binormal[1] = (normal[2] * transverse[0] - normal[0] * transverse[2]);
66 binormal[2] = (normal[0] * transverse[1] - normal[1] * transverse[0]);
69 const T b = sqrt(binormal[0]*binormal[0]+binormal[1]*binormal[1]+binormal[2]*binormal[2]);
70 for(
int dim=0;dim<3;++dim){
KOKKOS_INLINE_FUNCTION void convertNormalToRotationMatrix(const Scalar normal[3], Scalar transverse[3], Scalar binormal[3])
Builds an orthonormal (transverse, binormal) pair completing a right-handed rotation matrix for the g...