CCEX-1.0.0
Loading...
Searching...
No Matches
qubit.h
1#ifndef __CCEX_QUBIT_H_
2#define __CCEX_QUBIT_H_
3
4#include "utilities.h"
5
15typedef struct {
16
17 /* Basic spin information (Essential) */
18
24 char name[MAX_CHARARRAY_LENGTH];
25
31 float spin;
32
39 double gyro;
40
47 double xyz[3];
48
49
50 /* Interaction information (Optional) */
51
59 double detuning;
60
66 double overhaus;
67
68 /* Qubit projected state (Optional) */
69
78 MatrixXcd alpha;
79
88 MatrixXcd beta;
89
90} Qubit;
91
115typedef struct {
116
117 /* Use only during reading input file -----------------------------------------*/
118
119 // QubitArray
121 int* _betaidx;
122 /*-----------------------------------------------------------------------------*/
123 /* Use during simulation */
124 /*-----------------------------------------------------------------------------*/
125 int nqubit;
127 MatrixXcd** intmap;
128 MatrixXcd psia;
129 MatrixXcd psib;
130 MatrixXcd psi0;
131 bool overhaus;
132 /*-----------------------------------------------------------------------------*/
143} QubitArray;
144
145/* High Level --------------------------------------------------------*/
146
147// physical properties
148int QubitArray_dim(QubitArray* qa);
149int QubitArray_dimQubit_i(QubitArray* qa, int i);
150double QubitArray_mindist(double* xyz, QubitArray* qa);
151void QubitArray_setPsiaPsib_fromQubit(QubitArray* qa); // psia = kron(qubit_i_alpha,qubit_j_alpha, ...)
152void QubitArray_setPsiaPsib_fromIdx(QubitArray* qa, float* bfield); // psia, psib : eigenstate of Hq (idx)
153void QubitArray_setPsi0_fromPsiaPsib(QubitArray* qa); // psi0 = Normalize(psia + psib)
154
155// Hamiltonian
156MatrixXcd QubitArray_TotalHamil(QubitArray* qa, MatrixXcd** sigmas, float* bfield);
157MatrixXcd QubitArray_SingleHamil(QubitArray* qa, MatrixXcd** sigmas, int iq, float* bfield);
158MatrixXcd QubitArray_ZeemanHamil(QubitArray* qa, MatrixXcd** sigmas, int iq, float* bfield);
159MatrixXcd QubitArray_DetuningHamil(QubitArray* qa, MatrixXcd** sigmas, int iq);
160MatrixXcd QubitArray_OverhausHamil(QubitArray* qa, MatrixXcd** sigmas, int iq);
161MatrixXcd QubitArray_ZFSHamil(QubitArray* qa, MatrixXcd** sigmas, int iq);
162MatrixXcd QubitArray_InteractionHamil(QubitArray* qa, MatrixXcd** sigmas, int iq, int jq);
163MatrixXcd** QubitArray_PauliOperators(QubitArray* qa);
164MatrixXcd* QubitArray_PauliOperator_fromPsiaPsib(QubitArray* qa);
165
166// density matrix
167MatrixXcd QubitArray_Rho0(QubitArray* qa);
168
169// utils
170int QubitArray_getQubitIdx_fromName(QubitArray* qa, const char* name);
171
172/* Low Level --------------------------------------------------------*/
173
174QubitArray* QubitArray_init();
175
176// report
177void QubitArray_report(QubitArray* qa);
178void QubitArray_reportQubit_i(QubitArray* qa, int i);
179void QubitArray_reportIntmap(QubitArray* qa);
180void QubitArray_reportPsiaPsib(QubitArray* qa);
181void QubitArray_reportPsi0(QubitArray* qa);
182void QubitArray_reportQubit_overhaus(QubitArray* qa);
183
184// alloc
185void QubitArray_allocQubit(QubitArray* qa); // length = nqubit
186void QubitArray_allocIntmap(QubitArray* qa); // length = (nqubit,nqubit)
187void QubitArray_alloc_alphaidx_betaidx(QubitArray* qa); // length = 1
188
189// set
190void QubitArray_setNqubit(QubitArray* qa, const int nspin);
191void QubitArray_setOverhaus(QubitArray* qa, const bool overhaus);
192void QubitArray_setQubit(QubitArray* qa, Qubit** qubit);
193void QubitArray_set_alphaidx(QubitArray* qa, const int* alphaidx);
194void QubitArray_set_betaidx(QubitArray* qa, const int* betaidx);
195void QubitArray_setIntmap_i_j(QubitArray* qa, const MatrixXcd tensor, int i, int j);
196void QubitArray_setPsia(QubitArray* qa, const MatrixXcd psia);
197void QubitArray_setPsib(QubitArray* qa, const MatrixXcd psib);
198void QubitArray_setPsi0(QubitArray* qa, const MatrixXcd psi0);
199void QubitArray_setQubit_i_name(QubitArray* qa, const char* name, int i);
200void QubitArray_setQubit_i_spin(QubitArray* qa, const float spin, int i);
201void QubitArray_setQubit_i_gyro(QubitArray* qa, const double gyro, int i);
202void QubitArray_setQubit_i_xyz(QubitArray* qa, const double* xyz, int i);
203void QubitArray_setQubit_i_detuning(QubitArray* qa, const double detuning, int i);
204void QubitArray_setQubit_i_overhaus(QubitArray* qa, const double overhaus, int i);
205void QubitArray_setQubit_i_alpha(QubitArray* qa, const MatrixXcd alpha, int i);
206void QubitArray_setQubit_i_beta(QubitArray* qa, const MatrixXcd beta, int i);
207void QubitArray_setQubit_i_alpha_fromMs(QubitArray* qa, const float ms, int i);
208void QubitArray_setQubit_i_beta_fromMs(QubitArray* qa, const float ms, int i);
209
210// get (This is not a copy. Watch out when you change the value with this function!)
211int QubitArray_getNqubit(const QubitArray* qa);
212bool QubitArray_getOverhaus(const QubitArray* qa);
213int* QubitArray_get_alphaidx(const QubitArray* qa);
214int* QubitArray_get_betaidx(const QubitArray* qa);
215MatrixXcd** QubitArray_getIntmap(const QubitArray* qa);
216MatrixXcd QubitArray_getIntmap_i_j(const QubitArray* qa, int i, int j);
217MatrixXcd QubitArray_getPsia(const QubitArray* qa);
218MatrixXcd QubitArray_getPsib(const QubitArray* qa);
219MatrixXcd QubitArray_getPsi0(const QubitArray* qa);
220char* QubitArray_getQubit_i_name(const QubitArray* qa, int i);
221float QubitArray_getQubit_i_spin(const QubitArray* qa, int i);
222double QubitArray_getQubit_i_gyro(const QubitArray* qa, int i);
223double* QubitArray_getQubit_i_xyz(const QubitArray* qa, int i);
224double QubitArray_getQubit_i_detuning(const QubitArray* qa, int i);
225double QubitArray_getQubit_i_overhaus(const QubitArray* qa, int i);
226MatrixXcd QubitArray_getQubit_i_alpha(const QubitArray* qa, int i);
227MatrixXcd QubitArray_getQubit_i_beta(const QubitArray* qa, int i);
228
229// free
230void QubitArray_freeAll(QubitArray* qa);
231void QubitArray_freeQubit(QubitArray* qa);
232void QubitArray_freeIntmap(QubitArray* qa);
233void QubitArray_free_alphaidx_betaidx(QubitArray* qa);
234
235#endif // __CCEX_QUBIT_H_
QubitArray include information of all qubits.
Definition qubit.h:115
int * _alphaidx
Definition qubit.h:120
MatrixXcd psia
Definition qubit.h:128
MatrixXcd psi0
Definition qubit.h:130
MatrixXcd ** intmap
Definition qubit.h:127
int * _betaidx
Definition qubit.h:121
bool overhaus
Definition qubit.h:131
int nqubit
Definition qubit.h:125
MatrixXcd psib
Definition qubit.h:129
Qubit ** qubit
Definition qubit.h:126
Qubit structure contains each qubit's information.
Definition qubit.h:15
double gyro
The gyromagnetic ratio of a qubit (Unit : radkHz/G)
Definition qubit.h:39
MatrixXcd beta
The projected state of a qubit (beta)
Definition qubit.h:88
double detuning
The detuning value of a qubit (Unit : radkHz)
Definition qubit.h:59
double xyz[3]
The position of a qubit (Unit : angstrom)
Definition qubit.h:47
float spin
The spin number of a qubit.
Definition qubit.h:31
char name[MAX_CHARARRAY_LENGTH]
The name of a qubit.
Definition qubit.h:24
MatrixXcd alpha
The projected state of a qubit (alpha)
Definition qubit.h:78
double overhaus
The energy detuning from spin bath (Unit : radkHz)
Definition qubit.h:66