17#include "../global/global.h"
18#include "../global/global_cuda.h"
19#include "../utils/cuda_utilities.h"
20#include "../utils/gpu.hpp"
66inline __host__ __device__ Real _ctSlope(Real
const *flux, Real
const *dev_conserved, Real
const &fluxSign,
67 int const &ctDirection,
int const &conservedQuadrent1,
68 int const &conservedQuadrent2,
int const &fluxQuadrent1,
69 int const &fluxQuadrent2,
int const &xid,
int const &yid,
int const &zid,
70 int const &nx,
int const &ny,
int const &n_cells)
75 int const modPlus1 = (ctDirection + 1) % 3;
76 int const modPlus2 = (ctDirection + 2) % 3;
79 int const xidCentered = xid - int(conservedQuadrent1 == 0) - int(conservedQuadrent2 == 0);
80 int const yidCentered = yid - int(conservedQuadrent1 == 1) - int(conservedQuadrent2 == 1);
81 int const zidCentered = zid - int(conservedQuadrent1 == 2) - int(conservedQuadrent2 == 2);
82 int const idxCentered = cuda_utilities::compute1DIndex(xidCentered, yidCentered, zidCentered, nx, ny);
85 int const idxFlux = cuda_utilities::compute1DIndex(xid -
int(fluxQuadrent1 == 0) -
int(fluxQuadrent2 == 0),
86 yid -
int(fluxQuadrent1 == 1) -
int(fluxQuadrent2 == 1),
87 zid -
int(fluxQuadrent1 == 2) -
int(fluxQuadrent2 == 2), nx, ny);
90 int const idxB2Shift = cuda_utilities::compute1DIndex(
91 xidCentered -
int(modPlus1 == 0), yidCentered -
int(modPlus1 == 1), zidCentered -
int(modPlus1 == 2), nx, ny);
92 int const idxB3Shift = cuda_utilities::compute1DIndex(
93 xidCentered -
int(modPlus2 == 0), yidCentered -
int(modPlus2 == 1), zidCentered -
int(modPlus2 == 2), nx, ny);
100 Real
const density = dev_conserved[idxCentered + grid_enum::density * n_cells];
101 Real
const Momentum2 = dev_conserved[idxCentered + (modPlus1 + grid_enum::momentum_x) * n_cells];
102 Real
const Momentum3 = dev_conserved[idxCentered + (modPlus2 + grid_enum::momentum_x) * n_cells];
103 Real
const B2Centered = 0.5 * (dev_conserved[idxCentered + (modPlus1 + grid_enum::magnetic_start) * n_cells] +
104 dev_conserved[idxB2Shift + (modPlus1 + grid_enum::magnetic_start) * n_cells]);
105 Real
const B3Centered = 0.5 * (dev_conserved[idxCentered + (modPlus2 + grid_enum::magnetic_start) * n_cells] +
106 dev_conserved[idxB3Shift + (modPlus2 + grid_enum::magnetic_start) * n_cells]);
109 Real
const electric_centered = (Momentum3 * B2Centered - Momentum2 * B3Centered) / density;
114 Real
const electric_face = fluxSign * flux[idxFlux + (int(fluxSign == 1) + grid_enum::magnetic_start) * n_cells];
118 return electric_face - electric_centered;
139__global__
void Calculate_CT_Electric_Fields(Real
const *fluxX, Real
const *fluxY, Real
const *fluxZ,
140 Real
const *dev_conserved, Real *ctElectricFields,
int const nx,
141 int const ny,
int const nz,
int const n_cells);
Namespace for MHD code.
Definition magnetic_divergence.h:26