WarpX
PML_current.H
Go to the documentation of this file.
1 /* Copyright 2019 Aurore Blelly, Axel Huebl, Maxence Thevenet
2  * Remi Lehe
3  *
4  * This file is part of WarpX.
5  *
6  * License: BSD-3-Clause-LBNL
7  */
8 #ifndef PML_CURRENT_H_
9 #define PML_CURRENT_H_
10 
11 #include <AMReX.H>
12 #include <AMReX_FArrayBox.H>
13 
14 AMREX_GPU_HOST_DEVICE AMREX_INLINE
15 void push_ex_pml_current (int j, int k, int l,
16  amrex::Array4<amrex::Real> const& Ex,
17  amrex::Array4<amrex::Real const> const& jx,
18  amrex::Real const * const sigjy,
19  amrex::Real const * const sigjz,
20  int ylo, int zlo,
21  amrex::Real mu_c2_dt)
22 {
23 #if (AMREX_SPACEDIM == 3)
24  amrex::Real alpha_xy, alpha_xz;
25  if (sigjy[k-ylo]+sigjz[l-zlo] == 0){
26  alpha_xy = 0.5;
27  alpha_xz = 0.5;
28  }
29  else {
30  alpha_xy = sigjy[k-ylo]/(sigjy[k-ylo]+sigjz[l-zlo]);
31  alpha_xz = sigjz[l-zlo]/(sigjy[k-ylo]+sigjz[l-zlo]);
32  }
33  Ex(j,k,l,0) = Ex(j,k,l,0) - mu_c2_dt * alpha_xy * jx(j,k,l);
34  Ex(j,k,l,1) = Ex(j,k,l,1) - mu_c2_dt * alpha_xz * jx(j,k,l);
35 #else
36  Ex(j,k,l,1) = Ex(j,k,l,1) - mu_c2_dt * jx(j,k,l);
37  amrex::ignore_unused(sigjy, sigjz, ylo, zlo);
38 #endif
39 }
40 
41 AMREX_GPU_HOST_DEVICE AMREX_INLINE
42 void push_ey_pml_current (int j, int k, int l,
43  amrex::Array4<amrex::Real> const& Ey,
44  amrex::Array4<amrex::Real const> const& jy,
45  amrex::Real const * const sigjx,
46  amrex::Real const * const sigjz,
47  int xlo, int zlo,
48  amrex::Real mu_c2_dt)
49 {
50 #if (AMREX_SPACEDIM == 3)
51  amrex::Real alpha_yx, alpha_yz;
52  if (sigjx[j-xlo]+sigjz[l-zlo] == 0){
53  alpha_yx = 0.5;
54  alpha_yz = 0.5;
55  }
56  else {
57  alpha_yx = sigjx[j-xlo]/(sigjx[j-xlo]+sigjz[l-zlo]);
58  alpha_yz = sigjz[l-zlo]/(sigjx[j-xlo]+sigjz[l-zlo]);
59  }
60  Ey(j,k,l,0) = Ey(j,k,l,0) - mu_c2_dt * alpha_yx * jy(j,k,l);
61  Ey(j,k,l,1) = Ey(j,k,l,1) - mu_c2_dt * alpha_yz * jy(j,k,l);
62 #else
63  Ey(j,k,l,0) = Ey(j,k,l,0) - 0.5 * mu_c2_dt * jy(j,k,l);
64  Ey(j,k,l,1) = Ey(j,k,l,1) - 0.5 * mu_c2_dt * jy(j,k,l);
65  amrex::ignore_unused(sigjx, sigjz, xlo, zlo);
66 #endif
67 }
68 
69 AMREX_GPU_HOST_DEVICE AMREX_INLINE
70 void push_ez_pml_current (int j, int k, int l,
71  amrex::Array4<amrex::Real> const& Ez,
72  amrex::Array4<amrex::Real const> const& jz,
73  amrex::Real const * const sigjx,
74  amrex::Real const * const sigjy,
75  int xlo, int ylo,
76  amrex::Real mu_c2_dt)
77 {
78 #if (AMREX_SPACEDIM == 3)
79  amrex::Real alpha_zx, alpha_zy;
80  if (sigjx[j-xlo]+sigjy[k-ylo]==0){
81  alpha_zx = 0.5;
82  alpha_zy = 0.5;
83  }
84  else {
85  alpha_zx = sigjx[j-xlo]/(sigjx[j-xlo]+sigjy[k-ylo]);
86  alpha_zy = sigjy[k-ylo]/(sigjx[j-xlo]+sigjy[k-ylo]);
87  }
88  Ez(j,k,l,0) = Ez(j,k,l,0) - mu_c2_dt * alpha_zx * jz(j,k,l);
89  Ez(j,k,l,1) = Ez(j,k,l,1) - mu_c2_dt * alpha_zy * jz(j,k,l);
90 #else
91  Ez(j,k,l,0) = Ez(j,k,l,0) - mu_c2_dt * jz(j,k,l);
92  amrex::ignore_unused(sigjx, sigjy, xlo, ylo);
93 #endif
94 }
95 
96 AMREX_GPU_HOST_DEVICE AMREX_INLINE
97 void damp_jx_pml (int j, int k, int l,
98  amrex::Array4<amrex::Real> const& jx,
99  amrex::Real const* const sigsjx,
100  amrex::Real const* const sigjy,
101  amrex::Real const* const sigjz,
102  int xlo, int ylo, int zlo)
103 {
104 #if (AMREX_SPACEDIM == 3)
105  jx(j,k,l) = jx(j,k,l) * sigsjx[j-xlo] * sigjy[k-ylo] * sigjz[l-zlo];
106 #else
107  jx(j,k,l) = jx(j,k,l) * sigsjx[j-xlo] * sigjz[k-zlo];
108  amrex::ignore_unused(sigjy, ylo);
109 #endif
110 }
111 
112 AMREX_GPU_HOST_DEVICE AMREX_INLINE
113 void damp_jy_pml (int j, int k, int l,
114  amrex::Array4<amrex::Real> const& jy,
115  amrex::Real const * const sigjx,
116  amrex::Real const * const sigsjy,
117  amrex::Real const * const sigjz,
118  int xlo, int ylo, int zlo)
119 {
120 #if (AMREX_SPACEDIM == 3)
121  jy(j,k,l) = jy(j,k,l) * sigjx[j-xlo] * sigsjy[k-ylo] * sigjz[l-zlo];
122 #else
123  jy(j,k,l) = jy(j,k,l) * sigjx[j-xlo] * sigjz[k-zlo];
124  amrex::ignore_unused(sigsjy, ylo);
125 #endif
126 }
127 
128 AMREX_GPU_HOST_DEVICE AMREX_INLINE
129 void damp_jz_pml (int j, int k, int l,
130  amrex::Array4<amrex::Real> const& jz,
131  amrex::Real const * const sigjx,
132  amrex::Real const * const sigjy,
133  amrex::Real const * const sigsjz,
134  int xlo, int ylo, int zlo)
135 {
136 #if (AMREX_SPACEDIM == 3)
137  jz(j,k,l) = jz(j,k,l) * sigjx[j-xlo] * sigjy[k-ylo] * sigsjz[l-zlo];
138 #else
139  jz(j,k,l) = jz(j,k,l) * sigjx[j-xlo] * sigsjz[k-zlo];
140  amrex::ignore_unused(sigjy, ylo);
141 #endif
142 }
143 
144 #endif
AMREX_GPU_HOST_DEVICE AMREX_INLINE void damp_jz_pml(int j, int k, int l, amrex::Array4< amrex::Real > const &jz, amrex::Real const *const sigjx, amrex::Real const *const sigjy, amrex::Real const *const sigsjz, int xlo, int ylo, int zlo)
Definition: PML_current.H:129
AMREX_GPU_HOST_DEVICE AMREX_INLINE void push_ez_pml_current(int j, int k, int l, amrex::Array4< amrex::Real > const &Ez, amrex::Array4< amrex::Real const > const &jz, amrex::Real const *const sigjx, amrex::Real const *const sigjy, int xlo, int ylo, amrex::Real mu_c2_dt)
Definition: PML_current.H:70
AMREX_GPU_HOST_DEVICE AMREX_INLINE void damp_jy_pml(int j, int k, int l, amrex::Array4< amrex::Real > const &jy, amrex::Real const *const sigjx, amrex::Real const *const sigsjy, amrex::Real const *const sigjz, int xlo, int ylo, int zlo)
Definition: PML_current.H:113
AMREX_GPU_HOST_DEVICE AMREX_INLINE void push_ex_pml_current(int j, int k, int l, amrex::Array4< amrex::Real > const &Ex, amrex::Array4< amrex::Real const > const &jx, amrex::Real const *const sigjy, amrex::Real const *const sigjz, int ylo, int zlo, amrex::Real mu_c2_dt)
Definition: PML_current.H:15
AMREX_GPU_HOST_DEVICE AMREX_INLINE void damp_jx_pml(int j, int k, int l, amrex::Array4< amrex::Real > const &jx, amrex::Real const *const sigsjx, amrex::Real const *const sigjy, amrex::Real const *const sigjz, int xlo, int ylo, int zlo)
Definition: PML_current.H:97
AMREX_GPU_HOST_DEVICE AMREX_INLINE void push_ey_pml_current(int j, int k, int l, amrex::Array4< amrex::Real > const &Ey, amrex::Array4< amrex::Real const > const &jy, amrex::Real const *const sigjx, amrex::Real const *const sigjz, int xlo, int zlo, amrex::Real mu_c2_dt)
Definition: PML_current.H:42