GPUE  v1.0
GPU Gross-Pitaevskii Equation numerical solver for Bose-Einstein condensates
operators.h File Reference

File to hold all operators for finding fields on the GPU. More...

#include "../include/ds.h"
#include "../include/constants.h"
#include <sys/stat.h>
#include <unordered_map>
Include dependency graph for operators.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

double * curl2d (Grid &par, double *Ax, double *Ay)
 Finds Bz, the curl of the gauge field. More...
 
double * curl3d_x (Grid &par, double *Ax, double *Ay, double *Az)
 Finds Bx, the curl of the gauge field. More...
 
double * curl3d_y (Grid &par, double *Ax, double *Ay, double *Az)
 Finds By, the curl of the gauge field. More...
 
double * curl3d_z (Grid &par, double *Ax, double *Ay, double *Az)
 Finds Bz, the curl of the gauge field. More...
 
double * curl3d_r (Grid &par, double *Bx, double *By)
 Finds Br, the curl of the gauge field. More...
 
double * curl3d_phi (Grid &par, double *Bx, double *By)
 Finds Bphi, the curl of the gauge field. More...
 
std::string filecheck (std::string filename)
 Determines if file exists, requests new file if it does not. More...
 
void file_A (std::string filename, double *A, double omega)
 Reads A from file. More...
 
void generate_p_space (Grid &par)
 Function to generate momentum grids. More...
 
void generate_K (Grid &par)
 This function calls the appropriate K kernel. More...
 
__global__ void simple_K (double *xp, double *yp, double *zp, double mass, double *K)
 Simple kernel for generating K. More...
 
void generate_gauge (Grid &par)
 Function to generate game fields. More...
 
__global__ void kconstant_A (double *x, double *y, double *z, double xMax, double yMax, double zMax, double omegaX, double omegaY, double omegaZ, double omega, double fudge, double *A)
 constant Kernel A More...
 
__global__ void krotation_Ax (double *x, double *y, double *z, double xMax, double yMax, double zMax, double omegaX, double omegaY, double omegaZ, double omega, double fudge, double *A)
 Kernel for simple rotational case, Ax. More...
 
__global__ void krotation_Ay (double *x, double *y, double *z, double xMax, double yMax, double zMax, double omegaX, double omegaY, double omegaZ, double omega, double fudge, double *A)
 Kernel for simple rotational case, Ay. More...
 
__global__ void kring_rotation_Ax (double *x, double *y, double *z, double xMax, double yMax, double zMax, double omegaX, double omegaY, double omegaZ, double omega, double fudge, double *A)
 Kernel for simple triangular lattice of rings, Ax. More...
 
__global__ void kring_rotation_Ay (double *x, double *y, double *z, double xMax, double yMax, double zMax, double omegaX, double omegaY, double omegaZ, double omega, double fudge, double *A)
 Kernel for simple triangular lattice of rings, Ay. More...
 
__global__ void kring_rotation_Az (double *x, double *y, double *z, double xMax, double yMax, double zMax, double omegaX, double omegaY, double omegaZ, double omega, double fudge, double *A)
 Kernel for simple triangular lattice of rings, Az. More...
 
__global__ void ktest_Ay (double *x, double *y, double *z, double xMax, double yMax, double zMax, double omegaX, double omegaY, double omegaZ, double omega, double fudge, double *A)
 Kernel for testing Ay. More...
 
__global__ void ktest_Ax (double *x, double *y, double *z, double xMax, double yMax, double zMax, double omegaX, double omegaY, double omegaZ, double omega, double fudge, double *A)
 Kernel for testing Ax. More...
 
__global__ void kring_Az (double *x, double *y, double *z, double xMax, double yMax, double zMax, double omegaX, double omegaY, double omegaZ, double omega, double fudge, double *A)
 Kernel for testing Az. More...
 
void generate_fields (Grid &par)
 Function to generate V. More...
 
__global__ void kharmonic_V (double *x, double *y, double *z, double *items, double *Ax, double *Ay, double *Az, double *V)
 Kernel to generate harmonic V. More...
 
__global__ void ktorus_V (double *x, double *y, double *z, double *items, double *Ax, double *Ay, double *Az, double *V)
 Kernel to generate toroidal V (3d) More...
 
__global__ void kstd_wfc (double *x, double *y, double *z, double *items, double winding, double *phi, double2 *wfc)
 Kernel to generate simple gaussian wavefunction. More...
 
__global__ void ktorus_wfc (double *x, double *y, double *z, double *items, double winding, double *phi, double2 *wfc)
 Kernel to generate toroidal wavefunction. More...
 
__global__ void aux_fields (double *V, double *K, double gdt, double dt, double *Ax, double *Ay, double *Az, double *px, double *py, double *pz, double *pAx, double *pAy, double *pAz, double2 *GV, double2 *EV, double2 *GK, double2 *EK, double2 *GpAx, double2 *GpAy, double2 *GpAz, double2 *EpAx, double2 *EpAy, double2 *EpAz)
 Kernel to generate all auxiliary fields. More...
 
void generate_grid (Grid &par)
 

Detailed Description

File to hold all operators for finding fields on the GPU.

Author
James R. Schloss (Leios)
Date
1/1/2017
Version
0.1

DESCRIPTION

This file holds all operators for finding fields on the GPU

Definition in file operators.h.

Function Documentation

◆ aux_fields()

__global__ void aux_fields ( double *  V,
double *  K,
double  gdt,
double  dt,
double *  Ax,
double *  Ay,
double *  Az,
double *  px,
double *  py,
double *  pz,
double *  pAx,
double *  pAy,
double *  pAz,
double2 *  GV,
double2 *  EV,
double2 *  GK,
double2 *  EK,
double2 *  GpAx,
double2 *  GpAy,
double2 *  GpAz,
double2 *  EpAx,
double2 *  EpAy,
double2 *  EpAz 
)

Kernel to generate all auxiliary fields.

◆ curl2d()

double* curl2d ( Grid par,
double *  Ax,
double *  Ay 
)

Finds Bz, the curl of the gauge field.

Parameters
Gridsimulation data
gaugefield Ax
gaugefield Ay
Returns
Bz, the curl of A

◆ curl3d_phi()

double* curl3d_phi ( Grid par,
double *  Bx,
double *  By 
)

Finds Bphi, the curl of the gauge field.

Parameters
Gridsimulation data
gaugefield Ax
gaugefield Ay
gaugefield Az
Returns
Bphi, the curl of A

◆ curl3d_r()

double* curl3d_r ( Grid par,
double *  Bx,
double *  By 
)

Finds Br, the curl of the gauge field.

Parameters
Gridsimulation data
gaugefield Ax
gaugefield Ay
gaugefield Az
Returns
Br, the curl of A

◆ curl3d_x()

double* curl3d_x ( Grid par,
double *  Ax,
double *  Ay,
double *  Az 
)

Finds Bx, the curl of the gauge field.

Parameters
Gridsimulation data
gaugefield Ax
gaugefield Ay
gaugefield Az
Returns
Bx, the curl of A

◆ curl3d_y()

double* curl3d_y ( Grid par,
double *  Ax,
double *  Ay,
double *  Az 
)

Finds By, the curl of the gauge field.

Parameters
Gridsimulation data
gaugefield Ax
gaugefield Ay
gaugefield Az
Returns
By, the curl of A

◆ curl3d_z()

double* curl3d_z ( Grid par,
double *  Ax,
double *  Ay,
double *  Az 
)

Finds Bz, the curl of the gauge field.

Parameters
Gridsimulation data
gaugefield Ax
gaugefield Ay
gaugefield Az
Returns
Bz, the curl of A

◆ file_A()

void file_A ( std::string  filename,
double *  A,
double  omega 
)

Reads A from file.

Parameters
filename
Afield array
omegamultiplicative constant

◆ filecheck()

std::string filecheck ( std::string  filename)

Determines if file exists, requests new file if it does not.

◆ generate_fields()

void generate_fields ( Grid par)

Function to generate V.

◆ generate_gauge()

void generate_gauge ( Grid par)

Function to generate game fields.

◆ generate_grid()

void generate_grid ( Grid par)

◆ generate_K()

void generate_K ( Grid par)

This function calls the appropriate K kernel.

◆ generate_p_space()

void generate_p_space ( Grid par)

Function to generate momentum grids.

◆ kconstant_A()

__global__ void kconstant_A ( double *  x,
double *  y,
double *  z,
double  xMax,
double  yMax,
double  zMax,
double  omegaX,
double  omegaY,
double  omegaZ,
double  omega,
double  fudge,
double *  A 
)

constant Kernel A

◆ kharmonic_V()

__global__ void kharmonic_V ( double *  x,
double *  y,
double *  z,
double *  items,
double *  Ax,
double *  Ay,
double *  Az,
double *  V 
)

Kernel to generate harmonic V.

◆ kring_Az()

__global__ void kring_Az ( double *  x,
double *  y,
double *  z,
double  xMax,
double  yMax,
double  zMax,
double  omegaX,
double  omegaY,
double  omegaZ,
double  omega,
double  fudge,
double *  A 
)

Kernel for testing Az.

◆ kring_rotation_Ax()

__global__ void kring_rotation_Ax ( double *  x,
double *  y,
double *  z,
double  xMax,
double  yMax,
double  zMax,
double  omegaX,
double  omegaY,
double  omegaZ,
double  omega,
double  fudge,
double *  A 
)

Kernel for simple triangular lattice of rings, Ax.

◆ kring_rotation_Ay()

__global__ void kring_rotation_Ay ( double *  x,
double *  y,
double *  z,
double  xMax,
double  yMax,
double  zMax,
double  omegaX,
double  omegaY,
double  omegaZ,
double  omega,
double  fudge,
double *  A 
)

Kernel for simple triangular lattice of rings, Ay.

◆ kring_rotation_Az()

__global__ void kring_rotation_Az ( double *  x,
double *  y,
double *  z,
double  xMax,
double  yMax,
double  zMax,
double  omegaX,
double  omegaY,
double  omegaZ,
double  omega,
double  fudge,
double *  A 
)

Kernel for simple triangular lattice of rings, Az.

◆ krotation_Ax()

__global__ void krotation_Ax ( double *  x,
double *  y,
double *  z,
double  xMax,
double  yMax,
double  zMax,
double  omegaX,
double  omegaY,
double  omegaZ,
double  omega,
double  fudge,
double *  A 
)

Kernel for simple rotational case, Ax.

◆ krotation_Ay()

__global__ void krotation_Ay ( double *  x,
double *  y,
double *  z,
double  xMax,
double  yMax,
double  zMax,
double  omegaX,
double  omegaY,
double  omegaZ,
double  omega,
double  fudge,
double *  A 
)

Kernel for simple rotational case, Ay.

◆ kstd_wfc()

__global__ void kstd_wfc ( double *  x,
double *  y,
double *  z,
double *  items,
double  winding,
double *  phi,
double2 *  wfc 
)

Kernel to generate simple gaussian wavefunction.

◆ ktest_Ax()

__global__ void ktest_Ax ( double *  x,
double *  y,
double *  z,
double  xMax,
double  yMax,
double  zMax,
double  omegaX,
double  omegaY,
double  omegaZ,
double  omega,
double  fudge,
double *  A 
)

Kernel for testing Ax.

◆ ktest_Ay()

__global__ void ktest_Ay ( double *  x,
double *  y,
double *  z,
double  xMax,
double  yMax,
double  zMax,
double  omegaX,
double  omegaY,
double  omegaZ,
double  omega,
double  fudge,
double *  A 
)

Kernel for testing Ay.

◆ ktorus_V()

__global__ void ktorus_V ( double *  x,
double *  y,
double *  z,
double *  items,
double *  Ax,
double *  Ay,
double *  Az,
double *  V 
)

Kernel to generate toroidal V (3d)

◆ ktorus_wfc()

__global__ void ktorus_wfc ( double *  x,
double *  y,
double *  z,
double *  items,
double  winding,
double *  phi,
double2 *  wfc 
)

Kernel to generate toroidal wavefunction.

◆ simple_K()

__global__ void simple_K ( double *  xp,
double *  yp,
double *  zp,
double  mass,
double *  K 
)

Simple kernel for generating K.