98 set_unit_vectors(
const double cos_theta,
99 const double sin_theta,
100 const double cos_phi,
101 const double sin_phi,
102 Tensor<1, dim> &unit_r,
103 Tensor<1, dim> &unit_theta,
104 Tensor<1, dim> &unit_phi)
106 unit_r[0] = cos_theta * sin_phi;
107 unit_r[1] = sin_theta * sin_phi;
110 unit_theta[0] = -sin_theta;
111 unit_theta[1] = cos_theta;
114 unit_phi[0] = cos_theta * cos_phi;
115 unit_phi[1] = sin_theta * cos_phi;
116 unit_phi[2] = -sin_phi;
125 add_outer_product(SymmetricTensor<2, dim> &out,
127 const Tensor<1, dim> &in1,
128 const Tensor<1, dim> &in2)
131 for (
unsigned int i = 0; i < dim; ++i)
132 for (
unsigned int j = i; j < dim; ++j)
133 out[i][j] += (in1[i] * in2[j] + in1[j] * in2[i]) * val;
141 add_outer_product(SymmetricTensor<2, dim> &out,
143 const Tensor<1, dim> &in)
146 for (
unsigned int i = 0; i < dim; ++i)
147 for (
unsigned int j = i; j < dim; ++j)
148 out[i][j] += val * in[i] * in[j];
168 const unsigned int component)
const
171 const std::array<double, dim> sp =
173 return svalue(sp, component);
181 const unsigned int )
const
194 constexpr int dim = 3;
196 const std::array<double, dim> sp =
198 const std::array<double, dim> sg =
sgradient(sp, component);
201 const double cos_theta =
std::cos(sp[1]);
202 const double sin_theta =
std::sin(sp[1]);
203 const double cos_phi =
std::cos(sp[2]);
204 const double sin_phi =
std::sin(sp[2]);
208 cos_theta, sin_theta, cos_phi, sin_phi, unit_r, unit_theta, unit_phi);
214 res += unit_r * sg[0];
217 if (sg[1] * sin_phi != 0.)
220 res += unit_theta * sg[1] / (sp[0] * sin_phi);
226 res += unit_phi * sg[2] / sp[0];
237 const unsigned int )
const
250 constexpr int dim = 3;
252 const std::array<double, dim> sp =
254 const std::array<double, dim> sg =
sgradient(sp, component);
255 const std::array<double, 6> sh =
shessian(sp, component);
258 const double cos_theta =
std::cos(sp[1]);
259 const double sin_theta =
std::sin(sp[1]);
260 const double cos_phi =
std::cos(sp[2]);
261 const double sin_phi =
std::sin(sp[2]);
262 const double r = sp[0];
266 cos_theta, sin_theta, cos_phi, sin_phi, unit_r, unit_theta, unit_phi);
268 const double sin_phi2 = sin_phi * sin_phi;
269 const double r2 = r * r;
272 const double c_utheta2 =
273 sg[0] / r + ((sin_phi != 0.) ? (cos_phi * sg[2]) / (r2 * sin_phi) +
274 sh[1] / (r2 * sin_phi2) :
276 const double c_utheta_ur =
277 ((sin_phi != 0.) ? (r * sh[3] - sg[1]) / (r2 * sin_phi) : 0.);
278 const double c_utheta_uphi =
279 ((sin_phi != 0.) ? (sh[5] * sin_phi - cos_phi * sg[1]) / (r2 * sin_phi2) :
281 const double c_ur2 = sh[0];
282 const double c_ur_uphi = (r * sh[4] - sg[2]) / r2;
283 const double c_uphi2 = (sh[2] + r * sg[0]) / r2;
288 add_outer_product(res, c_utheta2, unit_theta);
290 add_outer_product(res, c_utheta_ur, unit_theta, unit_r);
292 add_outer_product(res, c_utheta_uphi, unit_theta, unit_phi);
294 add_outer_product(res, c_ur2, unit_r);
296 add_outer_product(res, c_ur_uphi, unit_r, unit_phi);
298 add_outer_product(res, c_uphi2, unit_phi);
317 const unsigned int )
const
326 std::array<double, dim>
328 const unsigned int )
const
331 return std::array<double, dim>();
337 std::array<double, 6>
339 const unsigned int )
const
342 return std::array<double, 6>();
const unsigned int n_components
Function(const unsigned int n_components=1, const time_type initial_time=0.0)
virtual SymmetricTensor< 2, dim > hessian(const Point< dim > &p, const unsigned int component=0) const override
Spherical(const Point< dim > ¢er=Point< dim >(), const unsigned int n_components=1)
const Tensor< 1, dim > coordinate_system_offset
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const override
virtual std::array< double, dim > sgradient(const std::array< double, dim > &sp, const unsigned int component) const
virtual double value(const Point< dim > &point, const unsigned int component=0) const override
virtual std::size_t memory_consumption() const override
virtual std::array< double, 6 > shessian(const std::array< double, dim > &sp, const unsigned int component) const
virtual double svalue(const std::array< double, dim > &sp, const unsigned int component) const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_NOT_IMPLEMENTED()
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
static ::ExceptionBase & ExcDivideByZero()
#define AssertThrow(cond, exc)
std::array< double, dim > to_spherical(const Point< dim > &point)
::VectorizedArray< Number, width > cos(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > sin(const ::VectorizedArray< Number, width > &)