Diffusion

Wall-normal derivative

\[\dmomdif{1}{1} = 2 \mu \frac{1}{J} \dif{}{\gcs{1}} \left( \frac{J}{\sfact{1}} \vgt{1}{1} \right) = 2 \mu \frac{1}{J} \dif{}{\gcs{1}} \left( \frac{J}{\sfact{1}} \dlxx \right)\]
src/fluid/predict/ux.c
49for(size_t i = 2; i <= isize; i++){
50  const double l = 1. / JDXF(i  ) * JDXC(i-1) / HXXC(i-1) / HXXC(i-1);
51  const double u = 1. / JDXF(i  ) * JDXC(i  ) / HXXC(i  ) / HXXC(i  );
52  const double c = - l - u;
53  laplacians.LAPX(i).l = l;
54  laplacians.LAPX(i).c = c;
55  laplacians.LAPX(i).u = u;
56}
src/fluid/predict/ux.c
297  BEGIN
298    // NOTE: txx = "2" lxx
299    src[cnt] += 2. * diffusivity * (
300#if NDIMS == 2
301        + LAPX(i).l * UX(i-1, j  )
302        + LAPX(i).c * UX(i  , j  )
303        + LAPX(i).u * UX(i+1, j  )
304#else
305        + LAPX(i).l * UX(i-1, j  , k  )
306        + LAPX(i).c * UX(i  , j  , k  )
307        + LAPX(i).u * UX(i+1, j  , k  )
308#endif
309    );
310  END

Stream-wise derivative

\[\dmomdif{2}{1} = \mu \frac{1}{J} \dif{}{\gcs{2}} \left( \frac{J}{\sfact{2}} \vgt{2}{1} \right) + \mu \frac{1}{J} \dif{}{\gcs{2}} \left( \frac{J}{\sfact{2}} \vgt{1}{2} \right)\]

Diagonal part

\[\mu \frac{1}{J} \dif{}{\gcs{2}} \left( \frac{J}{\sfact{2}} \vgt{2}{1}^{\prime} \right) = \mu \frac{1}{J} \dif{}{\gcs{2}} \left( \frac{J}{\sfact{2}} \dlyxa \right)\]
src/fluid/predict/ux.c
63for(size_t i = 2; i <= isize; i++){
64  const double l = 1. / HYXF(i  ) / HYXF(i  );
65  const double u = 1. / HYXF(i  ) / HYXF(i  );
66  const double c = - l - u;
67  laplacians.LAPY(i).l = l;
68  laplacians.LAPY(i).c = c;
69  laplacians.LAPY(i).u = u;
70}
src/fluid/predict/ux.c
327  BEGIN
328    src[cnt] += diffusivity * (
329#if NDIMS == 2
330        + LAPY(i).l * UX(i  , j-1)
331        + LAPY(i).c * UX(i  , j  )
332        + LAPY(i).u * UX(i  , j+1)
333#else
334        + LAPY(i).l * UX(i  , j-1, k  )
335        + LAPY(i).c * UX(i  , j  , k  )
336        + LAPY(i).u * UX(i  , j+1, k  )
337#endif
338    );
339  END

Non-diagonal part

\[\mu \frac{1}{J} \dif{}{\gcs{2}} \left( \frac{J}{\sfact{2}} \vgt{2}{1}^{\prime\prime} \right) + \mu \frac{1}{J} \dif{}{\gcs{2}} \left( \frac{J}{\sfact{2}} \vgt{1}{2} \right)\]
src/fluid/predict/ux.c
358  BEGIN
359    const double hy = HYXF(i  );
360    const double jd = JDXF(i  );
361#if NDIMS == 2
362    const double lyx_ym = LYX1(i  , j  );
363    const double lyx_yp = LYX1(i  , j+1);
364    const double lxy_ym = LXY(i  , j  );
365    const double lxy_yp = LXY(i  , j+1);
366#else
367    const double lyx_ym = LYX1(i  , j  , k  );
368    const double lyx_yp = LYX1(i  , j+1, k  );
369    const double lxy_ym = LXY(i  , j  , k  );
370    const double lxy_yp = LXY(i  , j+1, k  );
371#endif
372    src[cnt] += diffusivity / jd * (
373        - jd / hy * (lyx_ym + lxy_ym)
374        + jd / hy * (lyx_yp + lxy_yp)
375    );
376  END

Span-wise derivative

\[\dmomdif{3}{1} = \mu \frac{1}{J} \dif{}{\gcs{3}} \left( \frac{J}{\sfact{3}} \vgt{3}{1} \right) + \mu \frac{1}{J} \dif{}{\gcs{3}} \left( \frac{J}{\sfact{3}} \vgt{1}{3} \right)\]

Diagonal part

\[\mu \frac{1}{J} \dif{}{\gcs{3}} \left( \frac{J}{\sfact{3}} \vgt{3}{1} \right) = \mu \frac{1}{J} \dif{}{\gcs{3}} \left( \frac{J}{\sfact{3}} \dlzx \right)\]
src/fluid/predict/ux.c
77const double l = 1. / hz / hz;
78const double u = 1. / hz / hz;
79const double c = - l - u;
80laplacians.lapz.l = l;
81laplacians.lapz.c = c;
82laplacians.lapz.u = u;
src/fluid/predict/ux.c
392BEGIN
393  src[cnt] += diffusivity * (
394      + (*lapz).l * UX(i  , j  , k-1)
395      + (*lapz).c * UX(i  , j  , k  )
396      + (*lapz).u * UX(i  , j  , k+1)
397  );
398END

Non-diagonal part

\[\mu \frac{1}{J} \dif{}{\gcs{3}} \left( \frac{J}{\sfact{3}} \vgt{1}{3} \right)\]
src/fluid/predict/ux.c
416BEGIN
417  const double jd = JDXF(i  );
418  const double lxz_zm = LXZ(i  , j  , k  );
419  const double lxz_zp = LXZ(i  , j  , k+1);
420  src[cnt] += diffusivity / jd * (
421      - jd / hz * lxz_zm
422      + jd / hz * lxz_zp
423  );
424END

Additional term

\[\dmomdifx = - 2 \mu \frac{1}{J} \ave{ \dif{ \left( \frac{J}{\sfact{1}} \right) }{\gcs{1}} \vgt{2}{2} }{\gcs{1}}\]
src/fluid/predict/ux.c
444  BEGIN
445    const double hx_xm = HXXF(i-1);
446    const double hx_x0 = HXXF(i  );
447    const double hx_xp = HXXF(i+1);
448    const double jd_xm = JDXF(i-1);
449    const double jd_x0 = JDXF(i  );
450    const double jd_xp = JDXF(i+1);
451    const double djdhx_xm = - jd_xm / hx_xm + jd_x0 / hx_x0;
452    const double djdhx_xp = - jd_x0 / hx_x0 + jd_xp / hx_xp;
453#if NDIMS == 2
454    const double lyy_xm = LYY0(i-1, j  ) + LYY1(i-1, j  );
455    const double lyy_xp = LYY0(i  , j  ) + LYY1(i  , j  );
456#else
457    const double lyy_xm = LYY0(i-1, j  , k  ) + LYY1(i-1, j  , k  );
458    const double lyy_xp = LYY0(i  , j  , k  ) + LYY1(i  , j  , k  );
459#endif
460    // NOTE: tyy = "2" lyy
461    src[cnt] -= 2. * diffusivity / jd_x0 * (
462        + 0.5 * djdhx_xm * lyy_xm
463        + 0.5 * djdhx_xp * lyy_xp
464    );
465  END