1#ifndef __CCEX_UTILITIES_UTILITIES_H_
2#define __CCEX_UTILITIES_UTILITIES_H_
9#define EIGEN_USE_MKL_ALL
10#define _USE_MATH_DEFINES
48typedef std::complex<double>doublec;
54typedef Eigen::Matrix<doublec, Eigen::Dynamic, Eigen::Dynamic> MatrixXcd;
66#define H_BAR 1.054571729
69#define MHZ_TO_RADKHZ(x) (1 * (2.0 * M_PI * 1.0e+3) * x)
70#define RADKHZ_TO_MHZ(x) (1 / (2.0 * M_PI * 1.0e+3) * x)
71#define KHZ_TO_RADKHZ(x) (1 * (2.0 * M_PI) * x)
72#define RADKHZ_TO_KHZ(x) (1 / (2.0 * M_PI) * x)
75#define GAMMA_ELECTRON -17608.597050;
78#define MAX_FILEPATH 500
81#define MAX_OPTION_ARRAY_LENGTH 500
82#define MAX_OPTION_ELEMENT_LENGTH 50
83#define MAX_CHARARRAY_LENGTH 20
85#define MAX_MAINTAG_SUBOPTION_NUMBER 500
86#define MAX_MAINTAG_SUBOPTION_LINE_LENGTH 1000
90double* MatrixXcdToDouble1d(MatrixXcd mat);
91MatrixXcd Double1dToMatrixXcd(
double* val,
int n);
92int Double_is_same_row(
double* row1,
double* row2);
97double dist(
double spin1[],
double spin2[]);
98double cosTheta(
double spin1[],
double spin2[],
double dist);
99double sinTheta(
double spin1[],
double spin2[],
double dist);
100double cosPhi(
double spin1[],
double spin2[]);
101double sinPhi(
double spin1[],
double spin2[]);
106float* substates(
float S);
107bool isSubLevel(
float S,
float ms);
108MatrixXcd getSpinor(
float S,
float ms);
109MatrixXcd kron(MatrixXcd a, MatrixXcd b);
110MatrixXcd partialtrace(MatrixXcd Mij,
int dimrow,
int dimcol);
111double calNorm(MatrixXcd m);
112int normalize(MatrixXcd* m);
113float findZbasisSubLevel(MatrixXcd spinor);
115MatrixXcd powMatrixXcdElementWise(MatrixXcd a,
int n);
116MatrixXcd mulMatrixXcdElementWise(MatrixXcd a, MatrixXcd b);
119void printInlineMatrixXcd(
char* key, MatrixXcd mat);
120void printStateInDiracNot(
char* key, MatrixXcd mat);
121void printStructElementChar(
char* key,
char* val);
122void printStructElementChar2d(
char* key,
char** val,
int n);
123void printStructElementInt(
char* key,
int val);
124void printStructElementInt1dIdx(
char* key,
int* val,
int n);
125void printStructElementFloat(
char* key,
float val);
126void printStructElementFloat1d(
char* key,
float* val,
int n);
127void printStructElementDouble(
char* key,
double val);
128void printStructElementDouble1d(
char* key,
double* val,
int n);
129void printStructElementBool(
char* key,
bool val);
131void printLineSection();
132void printTitle(
char* title);
133void printSubTitle(
char* title);
134void printMessage(
char* message);
137int findIndexInt(
int* array,
int ista,
int iend,
int val);
138int findIndexCharFix(
char array[][MAX_CHARARRAY_LENGTH],
int ista,
int iend,
char* val);
139int findIndexChar(
char** array,
int ista,
int iend,
char* val);
140int findIndexFloat(
float* array,
int ista,
int iend,
float val);
143int isStringDouble(
char *s);
146void QuickSort(
int** d_Array,
int left,
int right);
147int Partition(
int** d_Array,
int left,
int right);
148void Swap(
int** d_Array,
int a,
int b);
151void para_range(
int n1,
int n2,
int nprocs,
int myrank,
int*ista,
int *iend);
152int min(
int x,
int y);
153int*** MPI_getLocalClusters(
int order,
int*** clusters);
Complex number with double precision.
Definition utilities.h:28
double real
Definition utilities.h:29
double imag
Definition utilities.h:30
Tensor with double precision.
Definition utilities.h:37
double yz
Definition utilities.h:39
double xz
Definition utilities.h:38
double zz
Definition utilities.h:40