25AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
void
29 vv[0] =
x.x();
vv[1] =
x.y();
vv[2] =
x.z();
30 vv[3] =
y.x();
vv[4] =
y.y();
vv[5] =
y.z();
31 vv[6] =
z.x();
vv[7] =
z.y();
vv[8] =
z.z();
36AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
void
40 vv[0] =
x.x();
vv[1] =
y.x();
vv[2] =
z.x();
41 vv[3] =
x.y();
vv[4] =
y.y();
vv[5] =
z.y();
42 vv[6] =
x.z();
vv[7] =
y.z();
vv[8] =
z.z();
48AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
55AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
62AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
69AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
76AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
83AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
90template <
typename T,
typename OStream>
94 for (
int i = 0; i < t.
ncomp; ++i) {
102AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE VectorT<T>
106 out.
x() = t.
xx() * v.
x() + t.
xy() * v.
y() + t.
xz() * v.
z();
107 out.
y() = t.
yx() * v.
x() + t.
yy() * v.
y() + t.
yz() * v.
z();
108 out.
z() = t.
zx() * v.
x() + t.
zy() * v.
y() + t.
zz() * v.
z();
113AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE VectorT<T>
117 out.
x() = t.
xx() * v.
x() + t.
yx() * v.
y() + t.
zx() * v.
z();
118 out.
y() = t.
xy() * v.
x() + t.
yy() * v.
y() + t.
zy() * v.
z();
119 out.
z() = t.
xz() * v.
x() + t.
yz() * v.
y() + t.
zz() * v.
z();
124AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE TensorT<T>
129 t3.
xx() = t1.
xx() * t2.
xx() + t1.
xy() * t2.
yx() + t1.
xz() * t2.
zx();
130 t3.
xy() = t1.
xx() * t2.
xy() + t1.
xy() * t2.
yy() + t1.
xz() * t2.
zy();
131 t3.
xz() = t1.
xx() * t2.
xz() + t1.
xy() * t2.
yz() + t1.
xz() * t2.
zz();
133 t3.
yx() = t1.
yx() * t2.
xx() + t1.
yy() * t2.
yx() + t1.
yz() * t2.
zx();
134 t3.
yy() = t1.
yx() * t2.
xy() + t1.
yy() * t2.
yy() + t1.
yz() * t2.
zy();
135 t3.
yz() = t1.
yx() * t2.
xz() + t1.
yy() * t2.
yz() + t1.
yz() * t2.
zz();
137 t3.
zx() = t1.
zx() * t2.
xx() + t1.
zy() * t2.
yx() + t1.
zz() * t2.
zx();
138 t3.
zy() = t1.
zx() * t2.
xy() + t1.
zy() * t2.
yy() + t1.
zz() * t2.
zy();
139 t3.
zz() = t1.
zx() * t2.
xz() + t1.
zy() * t2.
yz() + t1.
zz() * t2.
zz();
145AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE TensorT<T>
149 t1.
vv[0] + t2.
vv[0], t1.
vv[1] + t2.
vv[1], t1.
vv[2] + t2.
vv[2],
150 t1.
vv[3] + t2.
vv[3], t1.
vv[4] + t2.
vv[4], t1.
vv[5] + t2.
vv[5],
151 t1.
vv[6] + t2.
vv[6], t1.
vv[7] + t2.
vv[7], t1.
vv[8] + t2.
vv[8]};
155AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE TensorT<T>
159 t1.
vv[0] - t2.
vv[0], t1.
vv[1] - t2.
vv[1], t1.
vv[2] - t2.
vv[2],
160 t1.
vv[3] - t2.
vv[3], t1.
vv[4] - t2.
vv[4], t1.
vv[5] - t2.
vv[5],
161 t1.
vv[6] - t2.
vv[6], t1.
vv[7] - t2.
vv[7], t1.
vv[8] - t2.
vv[8]};
165AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T
169 t1.
vv[0] * t2.
vv[0] + t1.
vv[1] * t2.
vv[1] + t1.
vv[2] * t2.
vv[2] +
170 t1.
vv[3] * t2.
vv[3] + t1.
vv[4] * t2.
vv[4] + t1.
vv[5] * t2.
vv[5] +
171 t1.
vv[6] * t2.
vv[6] + t1.
vv[7] * t2.
vv[7] + t1.
vv[8] * t2.
vv[8]);
187AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
Tensor xrot(
const amrex::Real angle)
190 const amrex::Real cval = std::cos(ang);
191 const amrex::Real sval = std::sin(ang);
193 return Tensor{1.0_rt, 0.0_rt, 0.0_rt, 0.0_rt, cval,
194 sval, 0.0_rt, -sval, cval};
197AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
Tensor yrot(
const amrex::Real angle)
200 const amrex::Real cval = std::cos(ang);
201 const amrex::Real sval = std::sin(ang);
203 return Tensor{cval, 0.0_rt, -sval, 0.0_rt, 1.0_rt,
204 0.0_rt, sval, 0.0_rt, cval};
207AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
Tensor zrot(
const amrex::Real angle)
210 const amrex::Real cval = std::cos(ang);
211 const amrex::Real sval = std::sin(ang);
213 return Tensor{cval, sval, 0.0_rt, -sval, cval,
214 0.0_rt, 0.0_rt, 0.0_rt, 1.0_rt};
217AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
Tensor
221 const amrex::Real cval = std::cos(0.5_rt * ang);
222 const amrex::Real sval = std::sin(0.5_rt * ang);
223 const auto vmag =
mag(axis);
224 const amrex::Real q0 = cval;
225 const amrex::Real q1 = sval * axis.
x() / vmag;
226 const amrex::Real q2 = sval * axis.
y() / vmag;
227 const amrex::Real q3 = sval * axis.
z() / vmag;
230 t.
xx() = (q0 * q0) + (q1 * q1) - (q2 * q2) - (q3 * q3);
231 t.
xy() = 2.0_rt * (q1 * q2 - q0 * q3);
232 t.
xz() = 2.0_rt * (q0 * q2 + q1 * q3);
234 t.
yx() = 2.0_rt * (q1 * q2 + q0 * q3);
235 t.
yy() = (q0 * q0) - (q1 * q1) + (q2 * q2) - (q3 * q3);
236 t.
yz() = 2.0_rt * (q2 * q3 - q0 * q1);
238 t.
zx() = 2.0_rt * (q1 * q3 - q0 * q2);
239 t.
zy() = 2.0_rt * (q0 * q1 + q2 * q3);
240 t.
zz() = (q0 * q0) - (q1 * q1) - (q2 * q2) + (q3 * q3);
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real radians(const amrex::Real deg_val)
Convert from degrees to radians.
Definition trig_ops.H:32
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Tensor quaternion(const Vector &axis, const amrex::Real angle)
Definition tensorI.H:218
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T mag(const TensorT< T > &t)
Definition tensorI.H:182
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE VectorT< T > operator&(const TensorT< T > &t, const VectorT< T > &v)
Definition tensorI.H:103
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE TensorT< T > operator-(const TensorT< T > &t1, const TensorT< T > &t2)
Definition tensorI.H:156
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T operator&&(const TensorT< T > &t1, const TensorT< T > &t2)
Definition tensorI.H:166
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE TensorT< T > operator+(const TensorT< T > &t1, const TensorT< T > &t2)
Definition tensorI.H:146
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Tensor zrot(const amrex::Real angle)
Definition tensorI.H:207
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Tensor yrot(const amrex::Real angle)
Definition tensorI.H:197
OStream & operator<<(OStream &out, const TensorT< T > &t)
Definition tensorI.H:91
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T mag_sqr(const TensorT< T > &t)
Definition tensorI.H:175
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Tensor xrot(const amrex::Real angle)
Definition tensorI.H:187
VectorT< amrex::Real > Vector
Definition vector.H:145
TensorT< amrex::Real > Tensor
Definition tensor.H:158
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE VectorT< T > cy() const
Definition tensorI.H:77
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & zy() &
Definition tensor.H:93
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & zz() &
Definition tensor.H:94
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE VectorT< T > cz() const
Definition tensorI.H:84
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE VectorT< T > x() const
Definition tensorI.H:49
static constexpr int ncomp
Definition tensor.H:19
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE constexpr TensorT()=default
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & xz() &
Definition tensor.H:86
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE VectorT< T > z() const
Definition tensorI.H:63
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void cols(const VectorT< T > &x, const VectorT< T > &y, const VectorT< T > &z)
Definition tensorI.H:37
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & yy() &
Definition tensor.H:89
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & zx() &
Definition tensor.H:92
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & xx() &
Definition tensor.H:84
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE VectorT< T > cx() const
Definition tensorI.H:70
amrex::GpuArray< T, 9 > vv
Definition tensor.H:15
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & yx() &
Definition tensor.H:88
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void rows(const VectorT< T > &x, const VectorT< T > &y, const VectorT< T > &z)
Definition tensorI.H:26
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & yz() &
Definition tensor.H:90
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE VectorT< T > y() const
Definition tensorI.H:56
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & xy() &
Definition tensor.H:85
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & y() &
Definition vector.H:98
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & z() &
Definition vector.H:99
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & x() &
Definition vector.H:97