3 #include "../Numerics/idx.h"
6 template <
class Shortcuts,
typename T,
int num_nodes,
int numberOfData>
10 double dudx[][num_nodes],
const T*
const coordinates,
const double*
const dx, T* derivatives
12 T x_der_x, x_der_y, x_der_z;
13 T y_der_x, y_der_y, y_der_z;
14 T z_der_x, z_der_y, z_der_z;
18 for (
int k = 0; k < num_nodes; k++) {
19 for (
int j = 0;
j < num_nodes;
j++) {
20 for (
int i = 0; i < num_nodes; i++) {
32 T jacobian = x_der_x * (y_der_y * z_der_z - y_der_z * z_der_y)
33 - x_der_y * (y_der_x * z_der_z - y_der_z * z_der_x)
34 + x_der_z * (y_der_x * z_der_y - y_der_y * z_der_x);
36 derivatives[id_der(k,
j, i, 0)] = jacobian;
37 derivatives[id_der(k,
j, i, 1)] = (1.0 / jacobian) * (y_der_y * z_der_z - z_der_y * y_der_z);
38 derivatives[id_der(k,
j, i, 4)] = (1.0 / jacobian) * (z_der_x * y_der_z - y_der_x * z_der_z);
39 derivatives[id_der(k,
j, i, 7)] = (1.0 / jacobian) * (y_der_x * z_der_y - z_der_x * y_der_y);
41 derivatives[id_der(k,
j, i, 2)] = (1.0 / jacobian) * (z_der_y * x_der_z - x_der_y * z_der_z);
42 derivatives[id_der(k,
j, i, 5)] = (1.0 / jacobian) * (x_der_x * z_der_z - z_der_x * x_der_z);
43 derivatives[id_der(k,
j, i, 8)] = (1.0 / jacobian) * (z_der_x * x_der_y - x_der_x * z_der_y);
45 derivatives[id_der(k,
j, i, 3)] = (1.0 / jacobian) * (x_der_y * y_der_z - y_der_y * x_der_z);
46 derivatives[id_der(k,
j, i, 6)] = (1.0 / jacobian) * (y_der_x * x_der_z - x_der_x * y_der_z);
47 derivatives[id_der(k,
j, i, 9)] = (1.0 / jacobian) * (x_der_x * y_der_y - y_der_x * x_der_y);
55 double dudx[][num_nodes],
int k,
int j,
int i,
const T* values,
int coordinate, T& der_x,
const double dx
58 kernels::idx4 id_xyz(num_nodes, num_nodes, num_nodes, numberOfData);
60 for (
int n = 0; n < num_nodes; n++) {
61 der_x += dudx[i][n] * values[id_xyz(k,
j, n, coordinate)] / dx;
66 double dudx[][num_nodes],
int k,
int j,
int i,
const T* values,
int coordinate, T& der_y,
const double dy
69 kernels::idx4 id_xyz(num_nodes, num_nodes, num_nodes, numberOfData);
71 for (
int n = 0; n < num_nodes; n++) {
72 der_y += dudx[
j][n] * values[id_xyz(k, n, i, coordinate)] / dy;
77 double dudx[][num_nodes],
int k,
int j,
int i,
const T* values,
int coordinate, T& der_z,
const double dz
80 kernels::idx4 id_xyz(num_nodes, num_nodes, num_nodes, numberOfData);
83 for (
int n = 0; n < num_nodes; n++) {
84 der_z += dudx[k][n] * values[id_xyz(n,
j, i, coordinate)] / dz;
static void computeDerivatives_y_3D(double dudx[][num_nodes], int k, int j, int i, const T *values, int coordinate, T &der_y, const double dy)
static void computeDerivatives_z_3D(double dudx[][num_nodes], int k, int j, int i, const T *values, int coordinate, T &der_z, const double dz)
static void computeDerivatives_x_3D(double dudx[][num_nodes], int k, int j, int i, const T *values, int coordinate, T &der_x, const double dx)
static void metricDerivatives(double dudx[][num_nodes], const T *const coordinates, const double *const dx, T *derivatives)