Astaroth  2.2
pcstyleforcing.h
Go to the documentation of this file.
1 // PC-style helical forcing with profiles
2 uniform Vector AC_kk;
3 uniform Vector AC_coef1;
4 uniform Vector AC_coef2;
5 uniform Vector AC_coef3;
6 uniform Vector AC_fda;
7 
8 uniform Scalar AC_phase;
9 uniform Scalar AC_fact;
10 uniform Scalar AC_k1_ff;
11 
12 uniform ScalarArray AC_profx;
13 uniform ScalarArray AC_profy;
14 uniform ScalarArray AC_profz;
15 uniform ScalarArray AC_profx_hel;
16 uniform ScalarArray AC_profy_hel;
17 uniform ScalarArray AC_profz_hel;
18 
19 uniform int AC_iforcing_zsym;
20 
21 // PC-style helical forcing with support for profiles
22 Vector
23 pcforcing(int3 vertexIdx, int3 globalVertexIdx, Scalar dt, ScalarArray profx, ScalarArray profy,
24  ScalarArray profz, ScalarArray profx_hel, ScalarArray profy_hel, ScalarArray profz_hel)
25 {
26  Vector pos = (Vector){(globalVertexIdx.x - AC_nx_min) * AC_dsx,
27  (globalVertexIdx.y - AC_ny_min) * AC_dsy,
28  (globalVertexIdx.z - AC_nz_min) * AC_dsz};
29 
30  Complex fx = AC_fact * exp(Complex(0, AC_kk.x * AC_k1_ff * pos.z + AC_phase));
31  Complex fy = exp(Complex(0, AC_kk.y * AC_k1_ff * pos.y));
32 
33  Complex fz;
34  if (AC_iforcing_zsym == 0) {
35  fz = exp(Complex(0.0, AC_kk.z * AC_k1_ff * pos.z));
36  }
37  else if (AC_iforcing_zsym == 1) {
38  fz = Complex(cos(AC_kk.z * AC_k1_ff * pos.z), 0);
39  }
40  else if (AC_iforcing_zsym == -1) {
41  fz = Complex(sin(AC_kk.z * AC_k1_ff * pos.z), 0);
42  }
43  else {
44  // Failure
45  }
46 
47  Complex fxyz = fx * fy * fz;
48 
49  // TODO recheck indices
50  Scalar force_ampl = profx[vertexIdx.x - NGHOST] * profy[vertexIdx.y] * profz[vertexIdx.z];
51  Scalar prof_hel_ampl = profx_hel[vertexIdx.x - NGHOST] * profy_hel[vertexIdx.y] *
52  profz_hel[vertexIdx.z];
53 
54  return force_ampl * AC_fda * (Complex(AC_coef1.x, prof_hel_ampl * AC_coef2.x) * fxyz).x;
55 }
NGHOST
#define NGHOST
Definition: astaroth.h:27
AC_coef3
uniform Vector AC_coef3
Definition: pcstyleforcing.h:5
AC_fda
uniform Vector AC_fda
Definition: pcstyleforcing.h:6
AC_dsz
uniform Scalar AC_dsz
Definition: stdderiv.h:8
AC_phase
uniform Scalar AC_phase
Definition: pcstyleforcing.h:8
AC_profx
uniform ScalarArray AC_profx
Definition: pcstyleforcing.h:12
cos
#define cos(x)
Definition: math_utils.h:34
AC_kk
uniform Vector AC_kk
Definition: pcstyleforcing.h:2
AC_k1_ff
uniform Scalar AC_k1_ff
Definition: pcstyleforcing.h:10
AC_iforcing_zsym
uniform int AC_iforcing_zsym
Definition: pcstyleforcing.h:19
AC_dsx
uniform Scalar AC_dsx
Definition: stdderiv.h:6
AC_profy
uniform ScalarArray AC_profy
Definition: pcstyleforcing.h:13
Scalar
AcReal Scalar
Definition: modelsolver.c:44
AC_profz
uniform ScalarArray AC_profz
Definition: pcstyleforcing.h:14
AC_coef1
uniform Vector AC_coef1
Definition: pcstyleforcing.h:3
exp
#define exp(x)
Definition: math_utils.h:32
AC_coef2
uniform Vector AC_coef2
Definition: pcstyleforcing.h:4
AC_profx_hel
uniform ScalarArray AC_profx_hel
Definition: pcstyleforcing.h:15
pcforcing
Vector pcforcing(int3 vertexIdx, int3 globalVertexIdx, Scalar dt, ScalarArray profx, ScalarArray profy, ScalarArray profz, ScalarArray profx_hel, ScalarArray profy_hel, ScalarArray profz_hel)
Definition: pcstyleforcing.h:23
AC_profz_hel
uniform ScalarArray AC_profz_hel
Definition: pcstyleforcing.h:17
AC_dsy
uniform Scalar AC_dsy
Definition: stdderiv.h:7
AC_fact
uniform Scalar AC_fact
Definition: pcstyleforcing.h:9
sin
#define sin(x)
Definition: math_utils.h:33
AC_profy_hel
uniform ScalarArray AC_profy_hel
Definition: pcstyleforcing.h:16