QUDA v0.4.0
A library for QCD on GPUs
quda/include/enum_quda.h
Go to the documentation of this file.
00001 #ifndef _ENUM_QUDA_H
00002 #define _ENUM_QUDA_H
00003 
00004 #include <limits.h>
00005 #define QUDA_INVALID_ENUM INT_MIN
00006 
00007 #ifdef __cplusplus
00008 extern "C" {
00009 #endif
00010 
00011   //
00012   // Types used in QudaGaugeParam
00013   //
00014 
00015   typedef enum QudaLinkType_s {
00016     QUDA_WILSON_LINKS, // used by wilson, clover, twisted mass, and domain wall
00017     QUDA_ASQTAD_FAT_LINKS,
00018     QUDA_ASQTAD_LONG_LINKS,
00019     QUDA_ASQTAD_MOM_LINKS,
00020     QUDA_INVALID_LINKS = QUDA_INVALID_ENUM
00021   } QudaLinkType;
00022 
00023   
00024 
00025   typedef enum QudaGaugeFieldOrder_s {
00026     QUDA_FLOAT_GAUGE_ORDER = 1,
00027     QUDA_FLOAT2_GAUGE_ORDER = 2, // no reconstruct and double precision
00028     QUDA_FLOAT4_GAUGE_ORDER = 4, // 8 and 12 reconstruct half and single
00029     QUDA_QDP_GAUGE_ORDER, // expect *gauge[4], even-odd, row-column color
00030     QUDA_CPS_WILSON_GAUGE_ORDER, // expect *gauge, even-odd, mu inside, column-row color
00031     QUDA_MILC_GAUGE_ORDER, // expect *gauge, even-odd, mu inside, row-column order
00032     QUDA_INVALID_GAUGE_ORDER = QUDA_INVALID_ENUM
00033   } QudaGaugeFieldOrder;
00034 
00035   typedef enum QudaTboundary_s {
00036     QUDA_ANTI_PERIODIC_T = -1,
00037     QUDA_PERIODIC_T = 1,
00038     QUDA_INVALID_T_BOUNDARY = QUDA_INVALID_ENUM
00039   } QudaTboundary;
00040 
00041   typedef enum QudaPrecision_s {
00042     QUDA_HALF_PRECISION = 2,
00043     QUDA_SINGLE_PRECISION = 4,
00044     QUDA_DOUBLE_PRECISION = 8,
00045     QUDA_INVALID_PRECISION = QUDA_INVALID_ENUM
00046   } QudaPrecision;
00047 
00048   typedef enum QudaReconstructType_s {
00049     QUDA_RECONSTRUCT_NO = 18, // store all 18 real numbers explicitly
00050     QUDA_RECONSTRUCT_12 = 12, // reconstruct from 12 real numbers
00051     QUDA_RECONSTRUCT_8 = 8,  // reconstruct from 8 real numbers
00052     QUDA_RECONSTRUCT_10 = 10, // 10-number parameterization used for storing the momentum field
00053     QUDA_RECONSTRUCT_INVALID = QUDA_INVALID_ENUM
00054   } QudaReconstructType;
00055 
00056   typedef enum QudaGaugeFixed_s {
00057     QUDA_GAUGE_FIXED_NO,  // no gauge fixing
00058     QUDA_GAUGE_FIXED_YES, // gauge field stored in temporal gauge
00059     QUDA_GAUGE_FIXED_INVALID = QUDA_INVALID_ENUM
00060   } QudaGaugeFixed;
00061 
00062   //
00063   // Types used in QudaInvertParam
00064   //
00065 
00066   typedef enum QudaDslashType_s {
00067     QUDA_WILSON_DSLASH,
00068     QUDA_CLOVER_WILSON_DSLASH,
00069     QUDA_DOMAIN_WALL_DSLASH,
00070     QUDA_ASQTAD_DSLASH,
00071     QUDA_TWISTED_MASS_DSLASH,
00072     QUDA_INVALID_DSLASH = QUDA_INVALID_ENUM
00073   } QudaDslashType;
00074 
00075   typedef enum QudaInverterType_s {
00076     QUDA_CG_INVERTER,
00077     QUDA_BICGSTAB_INVERTER,
00078     QUDA_GCR_INVERTER,
00079     QUDA_MR_INVERTER,
00080     QUDA_INVALID_INVERTER = QUDA_INVALID_ENUM
00081   } QudaInverterType;
00082 
00083   typedef enum QudaSolutionType_s {
00084     QUDA_MAT_SOLUTION,
00085     QUDA_MATDAG_MAT_SOLUTION,
00086     QUDA_MATPC_SOLUTION,
00087     QUDA_MATPCDAG_MATPC_SOLUTION,
00088     QUDA_INVALID_SOLUTION = QUDA_INVALID_ENUM
00089   } QudaSolutionType;
00090 
00091   typedef enum QudaSolveType_s {
00092     QUDA_DIRECT_SOLVE,
00093     QUDA_NORMEQ_SOLVE,
00094     QUDA_DIRECT_PC_SOLVE,
00095     QUDA_NORMEQ_PC_SOLVE,
00096     QUDA_INVALID_SOLVE = QUDA_INVALID_ENUM
00097   } QudaSolveType;
00098 
00099   // Whether the preconditioned matrix is (1-k^2 Deo Doe) or (1-k^2 Doe Deo)
00100   //
00101   // For the clover-improved Wilson Dirac operator, QUDA_MATPC_EVEN_EVEN
00102   // defaults to the "symmetric" form, (1 - k^2 A_ee^-1 D_eo A_oo^-1 D_oe),
00103   // and likewise for QUDA_MATPC_ODD_ODD.
00104   //
00105   // For the "asymmetric" form, (A_ee - k^2 D_eo A_oo^-1 D_oe), select
00106   // QUDA_MATPC_EVEN_EVEN_ASYMMETRIC.
00107   //
00108   typedef enum QudaMatPCType_s {
00109     QUDA_MATPC_EVEN_EVEN,
00110     QUDA_MATPC_ODD_ODD,
00111     QUDA_MATPC_EVEN_EVEN_ASYMMETRIC,
00112     QUDA_MATPC_ODD_ODD_ASYMMETRIC,
00113     QUDA_MATPC_INVALID = QUDA_INVALID_ENUM
00114   } QudaMatPCType;
00115 
00116   typedef enum QudaDagType_s {
00117     QUDA_DAG_NO,
00118     QUDA_DAG_YES,
00119     QUDA_DAG_INVALID = QUDA_INVALID_ENUM
00120   } QudaDagType;
00121   
00122   typedef enum QudaMassNormalization_s {
00123     QUDA_KAPPA_NORMALIZATION,
00124     QUDA_MASS_NORMALIZATION,
00125     QUDA_ASYMMETRIC_MASS_NORMALIZATION,
00126     QUDA_INVALID_NORMALIZATION = QUDA_INVALID_ENUM
00127   } QudaMassNormalization;
00128 
00129   typedef enum QudaPreserveSource_s {
00130     QUDA_PRESERVE_SOURCE_NO,  // use the source for the residual
00131     QUDA_PRESERVE_SOURCE_YES, // keep the source intact
00132     QUDA_PRESERVE_SOURCE_INVALID = QUDA_INVALID_ENUM
00133   } QudaPreserveSource;
00134 
00135   typedef enum QudaDiracFieldOrder_s {
00136     QUDA_DIRAC_ORDER,            // even-odd, color inside spin
00137     QUDA_QDP_DIRAC_ORDER,        // even-odd, spin inside color
00138     QUDA_CPS_WILSON_DIRAC_ORDER, // odd-even, color inside spin
00139     QUDA_LEX_DIRAC_ORDER,        // lexicographical order, color inside spin
00140     QUDA_INVALID_DIRAC_ORDER = QUDA_INVALID_ENUM
00141   } QudaDiracFieldOrder;  
00142 
00143   typedef enum QudaCloverFieldOrder_s {
00144     QUDA_PACKED_CLOVER_ORDER,     // even-odd, packed
00145     QUDA_LEX_PACKED_CLOVER_ORDER, // lexicographical order, packed
00146     QUDA_INVALID_CLOVER_ORDER = QUDA_INVALID_ENUM
00147   } QudaCloverFieldOrder;
00148 
00149   typedef enum QudaVerbosity_s {
00150     QUDA_SILENT,
00151     QUDA_SUMMARIZE,
00152     QUDA_VERBOSE,
00153     QUDA_DEBUG_VERBOSE,
00154     QUDA_INVALID_VERBOSITY = QUDA_INVALID_ENUM
00155   } QudaVerbosity;
00156 
00157   typedef enum QudaTune_s {
00158     QUDA_TUNE_NO,
00159     QUDA_TUNE_YES,
00160     QUDA_TUNE_INVALID = QUDA_INVALID_ENUM
00161   } QudaTune;
00162 
00163   typedef enum QudaPreserveDirac_s {
00164     QUDA_PRESERVE_DIRAC_NO,
00165     QUDA_PRESERVE_DIRAC_YES,
00166     QUDA_PRESERVE_DIRAC_INVALID = QUDA_INVALID_ENUM
00167   } QudaPreserveDirac;
00168 
00169   //
00170   // Type used for "parity" argument to dslashQuda()
00171   //
00172 
00173   typedef enum QudaParity_s {
00174     QUDA_EVEN_PARITY = 0,
00175     QUDA_ODD_PARITY,
00176     QUDA_INVALID_PARITY = QUDA_INVALID_ENUM
00177   } QudaParity;
00178 
00179   //  
00180   // Types used only internally
00181   //
00182 
00183   typedef enum QudaDiracType_s {
00184     QUDA_WILSON_DIRAC,
00185     QUDA_WILSONPC_DIRAC,
00186     QUDA_CLOVER_DIRAC,
00187     QUDA_CLOVERPC_DIRAC,
00188     QUDA_DOMAIN_WALL_DIRAC,
00189     QUDA_DOMAIN_WALLPC_DIRAC,
00190     QUDA_ASQTAD_DIRAC,
00191     QUDA_ASQTADPC_DIRAC,
00192     QUDA_TWISTED_MASS_DIRAC,
00193     QUDA_TWISTED_MASSPC_DIRAC,
00194     QUDA_INVALID_DIRAC = QUDA_INVALID_ENUM
00195   } QudaDiracType;
00196 
00197   // Where the field is stored
00198   typedef enum QudaFieldLocation_s {
00199     QUDA_CPU_FIELD_LOCATION = 1,
00200     QUDA_CUDA_FIELD_LOCATION = 2,
00201     QUDA_INVALID_FIELD_LOCATION = QUDA_INVALID_ENUM
00202   } QudaFieldLocation;
00203   
00204   // Which sites are included
00205   typedef enum QudaSiteSubset_s {
00206     QUDA_FULL_SITE_SUBSET,
00207     QUDA_PARITY_SITE_SUBSET,
00208     QUDA_INVALID_SITE_SUBSET = QUDA_INVALID_ENUM
00209   } QudaSiteSubset;
00210   
00211   // Site ordering (always t-z-y-x, with rightmost varying fastest)
00212   typedef enum QudaSiteOrder_s {
00213     QUDA_LEXICOGRAPHIC_SITE_ORDER, // lexicographic ordering
00214     QUDA_EVEN_ODD_SITE_ORDER, // QUDA and QDP use this
00215     QUDA_ODD_EVEN_SITE_ORDER, // CPS uses this
00216     QUDA_INVALID_SITE_ORDER = QUDA_INVALID_ENUM
00217   } QudaSiteOrder;
00218   
00219   // Degree of freedom ordering
00220   typedef enum QudaFieldOrder_s {
00221     QUDA_FLOAT_FIELD_ORDER = 1, // spin-color-complex-space
00222     QUDA_FLOAT2_FIELD_ORDER = 2, // (spin-color-complex)/2-space-(spin-color-complex)%2
00223     QUDA_FLOAT4_FIELD_ORDER = 4, // (spin-color-complex)/4-space-(spin-color-complex)%4
00224     QUDA_SPACE_SPIN_COLOR_FIELD_ORDER, // CPS/QDP++ ordering
00225     QUDA_SPACE_COLOR_SPIN_FIELD_ORDER, // QLA ordering (spin inside color)
00226     QUDA_QOP_DOMAIN_WALL_FIELD_ORDER, // QOP domain-wall ordering
00227     QUDA_INVALID_FIELD_ORDER = QUDA_INVALID_ENUM
00228   } QudaFieldOrder;
00229   
00230   typedef enum QudaFieldCreate_s {
00231     QUDA_NULL_FIELD_CREATE, // create new field
00232     QUDA_ZERO_FIELD_CREATE, // create new field and zero it
00233     QUDA_COPY_FIELD_CREATE, // create copy to field
00234     QUDA_REFERENCE_FIELD_CREATE, // create reference to field
00235     QUDA_INVALID_FIELD_CREATE = QUDA_INVALID_ENUM
00236   } QudaFieldCreate;
00237 
00238   typedef enum QudaGammaBasis_s {
00239     QUDA_DEGRAND_ROSSI_GAMMA_BASIS,
00240     QUDA_UKQCD_GAMMA_BASIS,
00241     QUDA_INVALID_GAMMA_BASIS = QUDA_INVALID_ENUM
00242   } QudaGammaBasis;
00243 
00244   typedef enum QudaSourceType_s {
00245     QUDA_POINT_SOURCE,
00246     QUDA_RANDOM_SOURCE,
00247     QUDA_INVALID_SOURCE = QUDA_INVALID_ENUM
00248   } QudaSourceType;
00249   
00250   typedef enum QudaTwistFlavorType_s {
00251     QUDA_TWIST_MINUS = -1,
00252     QUDA_TWIST_PLUS = +1,
00253     QUDA_TWIST_NO  = 0,
00254     QUDA_TWIST_INVALID = QUDA_INVALID_ENUM
00255   } QudaTwistFlavorType;  
00256 
00257   typedef enum QudaTwistGamma5Type_s {
00258     QUDA_TWIST_GAMMA5_DIRECT,
00259     QUDA_TWIST_GAMMA5_INVERSE,
00260     QUDA_TWIST_GAMMA5_INVALID = QUDA_INVALID_ENUM
00261   } QudaTwistGamma5Type;
00262 
00263   typedef enum QudaUseInitGuess_s {
00264     QUDA_USE_INIT_GUESS_YES,
00265     QUDA_USE_INIT_GUESS_NO,    
00266     QUDA_USE_INIT_GUESS_INVALID = QUDA_INVALID_ENUM
00267   } QudaUseInitGuess;
00268 
00269   typedef enum QudaDirection_s {
00270     QUDA_BACKWARDS,
00271     QUDA_FORWARDS
00272   } QudaDirection;
00273   
00274   typedef enum QudaComputeFatMethod_s{
00275     QUDA_COMPUTE_FAT_STANDARD,
00276     QUDA_COMPUTE_FAT_EXTENDED_VOLUME,
00277     QUDA_COMPUTE_FAT_INVALID=  QUDA_INVALID_ENUM
00278   }QudaComputeFatMethod;
00279 
00280   typedef enum QudaFatLinkFlag_s{
00281     QUDA_FAT_PRESERVE_CPU_GAUGE=1,
00282     QUDA_FAT_PRESERVE_GPU_GAUGE=2,
00283 
00284     QUDA_FAT_PRESERVE_COMM_MEM=4,
00285   }QudaFatLinkFlag;
00286 
00287 #ifdef __cplusplus
00288 }
00289 #endif
00290 
00291 #endif // _ENUM_QUDA_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines