CCEX-1.0.0
Loading...
Searching...
No Matches
bath.h
1#ifndef __CCEX_BATH_H_
2#define __CCEX_BATH_H_
3
4#include "utilities.h"
5#include "qubit.h"
6#include "general.h"
7
17typedef struct {
18
19 /* Basic spin information (Essential) */
20
26 char name[MAX_CHARARRAY_LENGTH];
27
32 float spin;
33
39 double gyro;
40
41 // /**
42 // * @brief Quadrupole moment (Unit : 10^-30 [m^2])
43 // * @details Value can be obtained from &Bath -> qtensorfile (default : 0.0)
44 // * - cf. eQ = 20.44[Q/millibarn = Q * 10^-31 m^2] , in DFT eQ = 2.044 * 10^-30 [m^2]
45 // * @note Unit in input file (cce.in) : (Unit : 10^-30 [m^2])
46 // * @todo Add documentation for cce.in : &Bath -> qtensorfile
47 // * @todo When you read quadrupole tensor,
48 // * - you have to get them with unit Hatree/Bohr_radius^2 (QE) -> Think about How to do this
49 // * - you have to get them with unit MHz (VASP) -> Think about How to do this
50 // * - which one is better? -> Think about How to do this
51 // * @todo Now, there is no default value for eq. In future, add the information of each spin' eQ in code internally.
52 // */
53 // double eq;
54
61 double xyz[3];
62
63
64 /* Spin state (Optional)*/
65
78 float state;
79
80
81 /* Interaction Information (Optional) */
82
90 double detuning;
91
97 double disorder;
98
107 MatrixXcd* hypf; // 2024.01.26 change naming due to &Defect.defect.hypf : hypf to intqb 보류
108
118 MatrixXcd quad; // 2024.01.26 change naming due to &Defect.defect.quad : quad to intself 보류
119
120 /* &Defect */
121 MatrixXcd hypf_sub; // the hyperfine interaction with bath spin (if there is dft data)
122 int mainspidx; // the connected main spin index with the coupling strength of hypf_sub
123
124 double mindist; // minimum distance between qubit set and a bath spin
125} BathSpin;
126
131typedef struct {
132
137 int nspin;
138
144
145 // spin properties
147 char** prop_names;
148 double* prop_gyros;
149 float* prop_spins;
150
151} BathArray;
152
153
154// spin pairs
155void BathArray_connectivity(int*** cmap, float*** stmap, BathArray* ba, float rdip, float rdipcut); // connectivity between bath spins
156void makeSparsemap(int*** spmap, int** cmap, int nspin); // sparsemap
157
158// spin interactions
159MatrixXcd BathArray_int_i_j(BathArray* ba, int i, int j);
160double BathArray_dist_i_j(BathArray* ba, int i, int j);
161
162void BathArray_setBathHypfs(BathArray* ba, QubitArray* qa);
163
164void BathArray_setBathDisorders(BathArray* ba);
165// ! update bath disorder if there is additional spins
166
167double BathArray_getBath_i_disorder_j(BathArray* ba, int isp, int jsp);
168
169double BathArray_getOverhaus(BathArray* ba, int iq); // overhaus field for i-th qubit
170// ! update bath overhausers if there is additional spins
171
172double BathArray_getBath_i_overhaus_j(BathArray* ba, int isp, int iq); // overhaus field for i-th qubit
173
174// random state generator
175void BathArray_setBathStatesRandom(BathArray* ba); // random state
176
177// physics
178int BathArray_dim(BathArray* ba);
179int BathArray_dimBath_i(BathArray* ba, int i);
180int BathSpin_dim(BathSpin* bs);
181
182// Hamiltonian
183MatrixXcd BathArray_ZeemanHamil(BathArray* ba, MatrixXcd** sigmas, int ib, float* bfield);
184MatrixXcd BathArray_DetuningHamil(BathArray* ba, MatrixXcd** sigmas, int ib);
185MatrixXcd BathArray_DisorderHamil(BathArray* ba, MatrixXcd** sigmas, int ib, bool rm_overlap);
186MatrixXcd BathArray_QuadHamil(BathArray* ba, MatrixXcd** sigmas, int ib);
187MatrixXcd BathArray_InteractionHamil(BathArray* ba, MatrixXcd** sigmas, int ib, int jb);
188MatrixXcd** BathArray_PauliOperators(BathArray* ba);
189
190// density matrix
191MatrixXcd BathArray_Rho0(BathArray* ba, bool isEnsemble);
192MatrixXcd BathArray_Psi0(BathArray* ba);
193
194/* Low level functions --------------------------------------------*/
195
196BathArray* BathArray_init();
197
198//report
199void BathArray_report(BathArray* ba);
200void BathArray_reportBath(BathArray* ba);
201void BathArray_reportBath_i_props(BathArray* ba, int i);
202void BathArray_reportBath_states(BathArray* ba);
203void BathArray_reportBath_detunings(BathArray* ba);
204void BathArray_reportBath_disorders(BathArray* ba);
205void BathArray_reportBath_hypf(BathArray* ba, int nqubit);
206void BathArray_reportBath_quad(BathArray* ba);
207void BathArray_reportBath_hypf_sub(BathArray* ba);
208void BathArray_reportSpinProperties(BathArray* ba);
209
210//alloc
211void BathArray_allocBath(BathArray* ba, int nqubit);
212void BathArray_reallocBath(BathArray* ba, int nspin_old, int nspin_new, int nqubit);
213void BathArray_allocProp(BathArray* ba);
214void BathArray_reallocProp(BathArray* ba, int nspin_old, int nspin_new);
215void BathArray_allocBath_i_hypf(BathArray* ba, int i, int nqubit);
216
217//sets
218void BathArray_setNspin(BathArray* ba, const int nspin);
219void BathArray_setBath_i(BathArray* ba, const BathSpin* bath, int i, int nqubit);
220void BathArray_setBath_i_name(BathArray* ba, const char* name, int i);
221void BathArray_setBath_i_spin(BathArray* ba, const float spin, int i);
222void BathArray_setBath_i_gyro(BathArray* ba, const double gyro, int i);
223void BathArray_setBath_i_xyz(BathArray* ba, const double* xyz, int i);
224void BathArray_setBath_i_state(BathArray* ba, const float state, int i);
225void BathArray_setBath_i_detuning(BathArray* ba, const double detuning, int i);
226void BathArray_setBath_i_disorder(BathArray* ba, const double disorder, int i);
227void BathArray_setBath_i_hypf_j(BathArray* ba, const MatrixXcd hypf, int i, int j); // j : qubit index
228void BathArray_setBath_i_quad(BathArray* ba, const MatrixXcd quad, int i);
229void BathArray_setBath_i_hypf_sub(BathArray* ba, const MatrixXcd hypf_sub, int i);
230void BathArray_setBath_i_mainspidx(BathArray* ba, const int mainspidx, int i);
231void BathArray_setProp_nspecies(BathArray* ba, const int nspecies);
232void BathArray_setProp_names_i(BathArray* ba, const char* name, const int i);
233void BathArray_setProp_gyros_i(BathArray* ba, const double gyro, const int i);
234void BathArray_setProp_spins_i(BathArray* ba, const float spin, const int i);
235void BathArray_setBath_i_mindist(BathArray* ba, const double mindist, int i);
236
237// get
238int BathArray_getNspin(BathArray* ba);
239int BathArray_getProp_nspecies(BathArray* ba);
240char** BathArray_getProp_names(BathArray* ba);
241double* BathArray_getProp_gyros(BathArray* ba);
242float* BathArray_getProp_spins(BathArray* ba);
243BathSpin* BathArray_getBath_i(BathArray* ba, int i);
244char* BathArray_getBath_i_name(BathArray* ba, int i);
245float BathArray_getBath_i_spin(BathArray* ba, int i);
246double BathArray_getBath_i_gyro(BathArray* ba, int i);
247double* BathArray_getBath_i_xyz(BathArray* ba, int i);
248float BathArray_getBath_i_state(BathArray* ba, int i);
249double BathArray_getBath_i_detuning(BathArray* ba, int i);
250double BathArray_getBath_i_disorder(BathArray* ba, int i);
251MatrixXcd BathArray_getBath_i_hypf_j(BathArray* ba, int i, int j);
252MatrixXcd BathArray_getBath_i_quad(BathArray* ba, int i);
253MatrixXcd BathArray_getBath_i_hypf_sub(BathArray* ba, int i);
254int BathArray_getBath_i_mainspidx(BathArray* ba, int i);
255
256// free
257void BathArray_freeAll(BathArray* ba);
258void BathArray_freeProp_names(BathArray* ba);
259void BathArray_freeProp_gyros(BathArray* ba);
260void BathArray_freeProp_spins(BathArray* ba);
261void BathArray_freeBath(BathArray* ba);
262void BathArray_freeBath_i_hypf(BathArray* ba, int i);
263
264// BathSpin
265void BathSpin_setName(BathSpin* bs, char* name);
266void BathSpin_setName_withType(BathSpin* bs, char* name, char* type); // name : mainspin name, type : subspin
267void BathSpin_setSpin(BathSpin* bs, float spin);
268void BathSpin_setGyro(BathSpin* bs, double gyro);
269void BathSpin_setXyz(BathSpin* bs, double* xyz);
270void BathSpin_setXyz_fromRxyz(BathSpin* bs, double* xyz0, double* rxyz); // Input : xyz0 : main spin position, rxyz : sub spin relative position, Output : xyz : sub spin position
271void BathSpin_setState(BathSpin* bs, float state);
272void BathSpin_setDetuning(BathSpin* bs, double detuning);
273void BathSpin_setDisorder(BathSpin* bs, double disorder);
274void BathSpin_setHypf_i(BathSpin* bs, MatrixXcd hypf, int iq);
275void BathSpin_setQuad(BathSpin* bs, MatrixXcd quad);
276void BathSpin_setQuad_fromEFG(BathSpin* bs, MatrixXcd efg, double eq, float spin); // Input : efg : Hartree/Bohr^2, eq : 10e-30 m^2 , spin number, Output : quad : radkHz
277void BathSpin_setHypfSub(BathSpin* bs, MatrixXcd hypf_sub);
278void BathSpin_setMainspidx(BathSpin* bs, int mainspidx);
279
280char* BathSpin_getName(BathSpin* bs);
281float BathSpin_getSpin(BathSpin* bs);
282double BathSpin_getGyro(BathSpin* bs);
283double* BathSpin_getXyz(BathSpin* bs);
284float BathSpin_getState(BathSpin* bs);
285double BathSpin_getDetuning(BathSpin* bs);
286double BathSpin_getDisorder(BathSpin* bs);
287MatrixXcd BathSpin_getHypf_i(BathSpin* bs, int iq);
288MatrixXcd BathSpin_getQuad(BathSpin* bs);
289MatrixXcd BathSpin_getHypfSub(BathSpin* bs);
290int BathSpin_getMainspidx(BathSpin* bs);
291
292#endif // __CCEX_BATH_H_
Definition bath.h:131
int prop_nspecies
Definition bath.h:146
double * prop_gyros
Definition bath.h:148
BathSpin ** bath
The array of BathSpin.
Definition bath.h:143
char ** prop_names
Definition bath.h:147
int nspin
The number of bath spins.
Definition bath.h:137
float * prop_spins
Definition bath.h:149
BathSpin structure contains each BathSpin's information.
Definition bath.h:17
double detuning
The detuning value of a bath spin (Unit : radkHz)
Definition bath.h:90
float spin
Spin quantum number.
Definition bath.h:32
char name[MAX_CHARARRAY_LENGTH]
the name of spin
Definition bath.h:26
MatrixXcd quad
The quadrupole interaction a bath spin (Unit : radkHz)
Definition bath.h:118
float state
Spin sub-level in z-basis (if &General -> nstate != 0, i.e. single-sample approach)
Definition bath.h:78
double gyro
Gyromagnetic ratio (Unit : radkHz/Gauss)
Definition bath.h:39
MatrixXcd * hypf
The hyperfine interaction between qubits and a bath spin (Unit : radkHz)
Definition bath.h:107
double disorder
The mean-field effect from zz-coupling with other bath spins (Unit : radkHz)
Definition bath.h:97
double xyz[3]
Quadrupole moment (Unit : 10^-30 [m^2])
Definition bath.h:61
QubitArray include information of all qubits.
Definition qubit.h:115