17 MFEM_HOST_DEVICE
inline mfem::real_t
rmax(mfem::real_t a, mfem::real_t b) {
return a > b ? a : b; }
18 MFEM_HOST_DEVICE
inline mfem::real_t
rmin(mfem::real_t a, mfem::real_t b) {
return a < b ? a : b; }
19 MFEM_HOST_DEVICE
inline mfem::real_t
rsqrt(mfem::real_t x) {
return std::sqrt(x); }
20 MFEM_HOST_DEVICE
inline mfem::real_t
rlog(mfem::real_t x) {
return std::log(x); }
21 MFEM_HOST_DEVICE
inline mfem::real_t
rpow(mfem::real_t x, mfem::real_t y) {
return std::pow(x, y); };
22 MFEM_HOST_DEVICE
inline mfem::real_t
rabs(mfem::real_t x) {
return std::abs(x); };
24 MFEM_HOST_DEVICE
inline void Normalize(
const int dim, mfem::real_t *vec){
25 mfem::real_t fac = 0.0;
26 for(
int idim = 0;idim < dim;idim++){
27 fac += (vec[idim]*vec[idim]);
30 for(
int idim = 0;idim < dim;idim++){
36 inline void Normal(
const int dim,
const mfem::real_t *vec, mfem::real_t *nor)
48 const mfem::real_t x = vec[0];
49 const mfem::real_t y = vec[1];
50 const mfem::real_t z = vec[2];
52 const mfem::real_t ax = std::fabs(x);
53 const mfem::real_t ay = std::fabs(y);
54 const mfem::real_t az = std::fabs(z);
61 if (ax <= ay && ax <= az)
67 else if (ay <= ax && ay <= az)
82 inline mfem::real_t
Dot(
const int dim,
const mfem::real_t *vec1,
const mfem::real_t *vec2)
84 mfem::real_t dp = 0.0;
85 for(
int idim = 0;idim < dim;idim++)
86 dp += vec1[idim]*vec2[idim];
91 inline void Cross(
const int dim,
const mfem::real_t *vec1,
const mfem::real_t *vec2, mfem::real_t *cross)
95 cross[0] = vec1[1] * vec2[2] - vec1[2] * vec2[1];
96 cross[1] = vec1[2] * vec2[0] - vec1[0] * vec2[2];
97 cross[2] = vec1[0] * vec2[1] - vec1[1] * vec2[0];
101 inline void ComputeMeanVec(
const mfem::real_t* a,
const mfem::real_t* b, mfem::real_t* out,
int n)
103 for (
int i=0;i<n;++i) out[i] = mfem::real_t(0.5)*(a[i]+b[i]);
107 inline mfem::real_t
ComputeLogMean(mfem::real_t x, mfem::real_t y, mfem::real_t eps)
109 const mfem::real_t xi = y / x;
110 const mfem::real_t u = (xi*(xi - 2.0) + 1.0) / (xi*(xi + 2.0) + 1.0);
116 const mfem::real_t denom = 105.0 + u*(35.0 + u*(21.0 + 15.0*u));
117 return (x + y) * 52.5 / denom;
127 MFEM_HOST_DEVICE
inline
128 mfem::real_t
el_get(
const mfem::real_t *u,
int dof,
int num_eq,
int id,
int q)
131 return u[q*dof + id];
134 MFEM_HOST_DEVICE
inline
135 void el_gather_state(
const mfem::real_t *u,
const int dof,
const int num_eq,
const int id, mfem::real_t *dst)
138 for (
int q = 0; q < num_eq; ++q)
139 dst[q] = u[q*dof +
id];
142 MFEM_HOST_DEVICE
inline
143 void el_gather_grad_state(
const mfem::real_t *grad_state_x,
const mfem::real_t *grad_state_y,
const mfem::real_t *grad_state_z,
144 const int dim,
const int dof,
const int neq,
const int id,
145 mfem::real_t *dqx, mfem::real_t *dqy, mfem::real_t *dqz)
152 MFEM_HOST_DEVICE
inline
157 const mfem::real_t scale,
163 for (
int q = 0; q < num_eq; ++q)
165 du[
id + q*dof] += scale * f[q];
169 MFEM_HOST_DEVICE
inline
174 const mfem::real_t scale,
180 for (
int q = 0; q < num_eq; ++q)
182 du[
id + q*dof] = scale * f[q];
186 MFEM_HOST_DEVICE
inline
188 const mfem::real_t fac,
191 mfem::real_t *el_soln)
193 for (
int id = 0;
id < dof; ++id)
195 const mfem::real_t invJ = fac / scale_d[id];
196 for (
int q = 0; q < neq; ++q)
198 el_soln[
id + q*dof] *= invJ;
205 return !std::isfinite(x);
MFEM_HOST_DEVICE void Cross(const int dim, const mfem::real_t *vec1, const mfem::real_t *vec2, mfem::real_t *cross)
Definition theseus_kernels.hpp:91
MFEM_HOST_DEVICE void el_scale(const mfem::real_t *scale_d, const mfem::real_t fac, const int dof, const int neq, mfem::real_t *el_soln)
Definition theseus_kernels.hpp:187
MFEM_HOST_DEVICE void ComputeMeanVec(const mfem::real_t *a, const mfem::real_t *b, mfem::real_t *out, int n)
Definition theseus_kernels.hpp:101
MFEM_HOST_DEVICE mfem::real_t el_get(const mfem::real_t *u, int dof, int num_eq, int id, int q)
Definition theseus_kernels.hpp:128
MFEM_HOST_DEVICE mfem::real_t rmin(mfem::real_t a, mfem::real_t b)
Definition theseus_kernels.hpp:18
MFEM_HOST_DEVICE void el_scatter_add(const mfem::real_t *f, const int dof, const int num_eq, const int id, const mfem::real_t scale, mfem::real_t *du)
Definition theseus_kernels.hpp:153
MFEM_HOST_DEVICE mfem::real_t rlog(mfem::real_t x)
Definition theseus_kernels.hpp:20
MFEM_HOST_DEVICE void Normalize(const int dim, mfem::real_t *vec)
Definition theseus_kernels.hpp:24
MFEM_HOST_DEVICE void el_gather_state(const mfem::real_t *u, const int dof, const int num_eq, const int id, mfem::real_t *dst)
Definition theseus_kernels.hpp:135
MFEM_HOST_DEVICE void Normal(const int dim, const mfem::real_t *vec, mfem::real_t *nor)
Definition theseus_kernels.hpp:36
MFEM_HOST_DEVICE mfem::real_t rsqrt(mfem::real_t x)
Definition theseus_kernels.hpp:19
MFEM_HOST_DEVICE void el_scatter_assign(const mfem::real_t *f, const int dof, const int num_eq, const int id, const mfem::real_t scale, mfem::real_t *du)
Definition theseus_kernels.hpp:170
MFEM_HOST_DEVICE mfem::real_t ComputeLogMean(mfem::real_t x, mfem::real_t y, mfem::real_t eps)
Definition theseus_kernels.hpp:107
MFEM_HOST_DEVICE bool is_bad_value(mfem::real_t x)
Definition theseus_kernels.hpp:203
MFEM_HOST_DEVICE void el_gather_grad_state(const mfem::real_t *grad_state_x, const mfem::real_t *grad_state_y, const mfem::real_t *grad_state_z, const int dim, const int dof, const int neq, const int id, mfem::real_t *dqx, mfem::real_t *dqy, mfem::real_t *dqz)
Definition theseus_kernels.hpp:143
MFEM_HOST_DEVICE mfem::real_t rpow(mfem::real_t x, mfem::real_t y)
Definition theseus_kernels.hpp:21
MFEM_HOST_DEVICE mfem::real_t Dot(const int dim, const mfem::real_t *vec1, const mfem::real_t *vec2)
Definition theseus_kernels.hpp:82
MFEM_HOST_DEVICE mfem::real_t rmax(mfem::real_t a, mfem::real_t b)
Definition theseus_kernels.hpp:17
MFEM_HOST_DEVICE mfem::real_t rabs(mfem::real_t x)
Definition theseus_kernels.hpp:22
Definition AxisymmetricGeometry.hpp:15
constexpr const int MAXDIM
Definition theseus_kernels.hpp:14
constexpr const int MAXEQ
Definition theseus_kernels.hpp:13