Velocity-gradient tensor

For later convenience, 9 tensor components are pre-computed and stored to arrays.

11

\[\vat{ \vgt{1}{1} }{ \ccindex{i}, \ccindex{j}, \ccindex{k} } = \dlxx\]
src/fluid/predict/lxx.c
42  BEGIN
43    const double hx = HXXC(i  );
44#if NDIMS == 2
45    LXX(i, j) = 1. / hx * (
46        - UX(i  , j  )
47        + UX(i+1, j  )
48    );
49#else
50    LXX(i, j, k) = 1. / hx * (
51        - UX(i  , j  , k  )
52        + UX(i+1, j  , k  )
53    );
54#endif
55  END

21

\[\vat{ \vgt{2}{1} }{ \cpindex{i}, \cpindex{j}, \ccindex{k} } = \vat{ \vgt{2}{1}^{\prime} }{ \cpindex{i}, \cpindex{j}, \ccindex{k} } + \vat{ \vgt{2}{1}^{\prime\prime} }{ \cpindex{i}, \cpindex{j}, \ccindex{k} } = \dlyx\]

Two terms are computed and stored separately.

\[\vat{ \vgt{2}{1}^{\prime} }{ \cpindex{i}, \cpindex{j}, \ccindex{k} } = \dlyxa\]
src/fluid/predict/lyx.c
47  BEGIN
48    const double hy = HYXF(i  );
49#if NDIMS == 2
50    LYX0(i, j) = 1. / hy * (
51        - UX(i  , j-1)
52        + UX(i  , j  )
53    );
54#else
55    LYX0(i, j, k) = 1. / hy * (
56        - UX(i  , j-1, k  )
57        + UX(i  , j  , k  )
58    );
59#endif
60  END
\[\vat{ \vgt{2}{1}^{\prime\prime} }{ \cpindex{i}, \cpindex{j}, \ccindex{k} } = \dlyxb\]
src/fluid/predict/lyx.c
 94  BEGIN
 95    const double hx_xm = HXXC(i-1);
 96    const double hx_xp = HXXC(i  );
 97    const double jd_xm = JDXC(i-1);
 98    const double jd_x0 = JDXF(i  );
 99    const double jd_xp = JDXC(i  );
100    const double jdhx_xm = jd_xm / hx_xm;
101    const double jdhx_xp = jd_xp / hx_xp;
102    const double djdhx = - jdhx_xm + jdhx_xp;
103#if NDIMS == 2
104    LYX1(i, j) = - 1. / jd_x0 * djdhx * (
105        + (        1 == i ? 0. : 0.5) * UY(i-1, j  )
106        + (isize + 1 == i ? 0. : 0.5) * UY(i  , j  )
107    );
108#else
109    LYX1(i, j, k) = - 1. / jd_x0 * djdhx * (
110        + (        1 == i ? 0. : 0.5) * UY(i-1, j  , k  )
111        + (isize + 1 == i ? 0. : 0.5) * UY(i  , j  , k  )
112    );
113#endif
114  END

31

\[\vat{ \vgt{3}{1} }{ \cpindex{i}, \ccindex{j}, \cpindex{k} } = \dlzx\]
src/fluid/predict/lzx.c
22for(int k = 1; k <= ksize; k++){
23  for(int j = 1; j <= jsize; j++){
24    for(int i = 1; i <= isize + 1; i++){
25      LZX(i, j, k) = 1. / hz * (
26          - UX(i  , j  , k-1)
27          + UX(i  , j  , k  )
28      );
29    }
30  }
31}

12

\[\vat{ \vgt{1}{2} }{ \cpindex{i}, \cpindex{j}, \ccindex{k} } = \dlxy\]
src/fluid/predict/lxy.c
42  BEGIN
43    const double hx = HXXF(i  );
44#if NDIMS == 2
45    LXY(i, j) = 1. / hx * (
46        - UY(i-1, j  )
47        + UY(i  , j  )
48    );
49#else
50    LXY(i, j, k) = 1. / hx * (
51        - UY(i-1, j  , k  )
52        + UY(i  , j  , k  )
53    );
54#endif
55  END

22

\[\vat{ \vgt{2}{2} }{ \ccindex{i}, \ccindex{j}, \ccindex{k} } = \vat{ \vgt{2}{2}^{\prime} }{ \ccindex{i}, \ccindex{j}, \ccindex{k} } + \vat{ \vgt{2}{2}^{\prime\prime} }{ \ccindex{i}, \ccindex{j}, \ccindex{k} } = \dlyy\]

Two terms are computed and stored separately.

\[\vat{ \vgt{2}{2}^{\prime} }{ \ccindex{i}, \ccindex{j}, \ccindex{k} } = \dlyya\]
src/fluid/predict/lyy.c
47  BEGIN
48    const double hy = HYXC(i  );
49#if NDIMS == 2
50    LYY0(i, j) = 1. / hy * (
51        - UY(i  , j  )
52        + UY(i  , j+1)
53    );
54#else
55    LYY0(i, j, k) = 1. / hy * (
56        - UY(i  , j  , k  )
57        + UY(i  , j+1, k  )
58    );
59#endif
60  END
\[\vat{ \vgt{2}{2}^{\prime\prime} }{ \ccindex{i}, \ccindex{j}, \ccindex{k} } = \dlyyb\]
src/fluid/predict/lyy.c
 94  BEGIN
 95    const double hx_xm = HXXF(i  );
 96    const double hx_xp = HXXF(i+1);
 97    const double jd_xm = JDXF(i  );
 98    const double jd_x0 = JDXC(i  );
 99    const double jd_xp = JDXF(i+1);
100    const double jdhx_xm = jd_xm / hx_xm;
101    const double jdhx_xp = jd_xp / hx_xp;
102    const double djdhx = - jdhx_xm + jdhx_xp;
103#if NDIMS == 2
104    LYY1(i, j) = 1. / jd_x0 * djdhx * (
105        + 0.5 * UX(i  , j  )
106        + 0.5 * UX(i+1, j  )
107    );
108#else
109    LYY1(i, j, k) = 1. / jd_x0 * djdhx * (
110        + 0.5 * UX(i  , j  , k  )
111        + 0.5 * UX(i+1, j  , k  )
112    );
113#endif
114  END

32

\[\vat{ \vgt{3}{2} }{ \ccindex{i}, \cpindex{j}, \cpindex{k} } = \dlzy\]
src/fluid/predict/lzy.c
22for(int k = 1; k <= ksize; k++){
23  for(int j = 1; j <= jsize; j++){
24    for(int i = 1; i <= isize; i++){
25      LZY(i, j, k) = 1. / hz * (
26          - UY(i  , j  , k-1)
27          + UY(i  , j  , k  )
28      );
29    }
30  }
31}

13

\[\vat{ \vgt{1}{3} }{ \cpindex{i}, \ccindex{j}, \cpindex{k} } = \dlxz\]
src/fluid/predict/lxz.c
23for(int k = 1; k <= ksize; k++){
24  for(int j = 1; j <= jsize; j++){
25    for(int i = 1; i <= isize + 1; i++){
26      const double hx = HXXF(i  );
27      LXZ(i, j, k) = 1. / hx * (
28          - UZ(i-1, j  , k  )
29          + UZ(i  , j  , k  )
30      );
31    }
32  }
33}

23

\[\vat{ \vgt{2}{3} }{ \ccindex{i}, \cpindex{j}, \cpindex{k} } = \dlyz\]
src/fluid/predict/lyz.c
23for(int k = 1; k <= ksize; k++){
24  for(int j = 1; j <= jsize; j++){
25    for(int i = 1; i <= isize; i++){
26      const double hy = HYXC(i  );
27      LYZ(i, j, k) = 1. / hy * (
28          - UZ(i  , j-1, k  )
29          + UZ(i  , j  , k  )
30      );
31    }
32  }
33}

33

\[\vat{ \vgt{3}{3} }{ \ccindex{i}, \ccindex{j}, \ccindex{k} } = \dlzz\]
src/fluid/predict/lzz.c
22for(int k = 1; k <= ksize; k++){
23  for(int j = 1; j <= jsize; j++){
24    for(int i = 1; i <= isize; i++){
25      LZZ(i, j, k) = 1. / hz * (
26          - UZ(i  , j  , k  )
27          + UZ(i  , j  , k+1)
28      );
29    }
30  }
31}