Advanced Computing Platform for Theoretical Physics

quda.h 2.27 KB
Newer Older
rbabich's avatar
rbabich committed
1
2
#ifndef _QUDA_H
#define _QUDA_H
mikeaclark's avatar
mikeaclark committed
3
4
5
6
7
8
9
10
11

#include <enum_quda.h>

#ifdef __cplusplus
extern "C" {
#endif

  typedef struct QudaGaugeParam_s {

12
    int X[4];
mikeaclark's avatar
mikeaclark committed
13

14
    double anisotropy;
mikeaclark's avatar
mikeaclark committed
15

mikeaclark's avatar
mikeaclark committed
16
    QudaGaugeFieldOrder gauge_order;
mikeaclark's avatar
mikeaclark committed
17

rbabich's avatar
rbabich committed
18
19
    QudaTboundary t_boundary;

mikeaclark's avatar
mikeaclark committed
20
    QudaPrecision cpu_prec;
mikeaclark's avatar
mikeaclark committed
21

22
23
    QudaPrecision cuda_prec;
    QudaReconstructType reconstruct;
24
25
26
27

    QudaPrecision cuda_prec_sloppy;
    QudaReconstructType reconstruct_sloppy;

mikeaclark's avatar
mikeaclark committed
28
    QudaGaugeFixed gauge_fix;
mikeaclark's avatar
mikeaclark committed
29

rbabich's avatar
rbabich committed
30
31
    int blockDim; // number of threads in a block
    int blockDim_sloppy;
mikeaclark's avatar
mikeaclark committed
32

33
34
    int ga_pad;

mikeaclark's avatar
mikeaclark committed
35
    int packed_size;
36
    double gaugeGiB;
mikeaclark's avatar
mikeaclark committed
37
38
39
40
41

  } QudaGaugeParam;

  typedef struct QudaInvertParam_s {
    
rbabich's avatar
rbabich committed
42
    QudaDslashType dslash_type;
mikeaclark's avatar
mikeaclark committed
43
    QudaInverterType inv_type;
rbabich's avatar
rbabich committed
44
45

    double kappa;  
46
    double tol;
mikeaclark's avatar
mikeaclark committed
47
    int maxiter;
48
    double reliable_delta; // reliable update tolerance
mikeaclark's avatar
mikeaclark committed
49

mikeaclark's avatar
mikeaclark committed
50
51
    QudaMatPCType matpc_type;
    QudaSolutionType solution_type;
rbabich's avatar
rbabich committed
52
    QudaMassNormalization mass_normalization;
mikeaclark's avatar
mikeaclark committed
53

mikeaclark's avatar
mikeaclark committed
54
    QudaPreserveSource preserve_source;
mikeaclark's avatar
mikeaclark committed
55

mikeaclark's avatar
mikeaclark committed
56
57
    QudaPrecision cpu_prec;
    QudaPrecision cuda_prec;
58
59
    QudaPrecision cuda_prec_sloppy;

mikeaclark's avatar
mikeaclark committed
60
    QudaDiracFieldOrder dirac_order;
mikeaclark's avatar
mikeaclark committed
61

rbabich's avatar
rbabich committed
62
63
64
65
66
67
    QudaPrecision clover_cpu_prec;
    QudaPrecision clover_cuda_prec;
    QudaPrecision clover_cuda_prec_sloppy;

    QudaCloverFieldOrder clover_order;

rbabich's avatar
rbabich committed
68
69
    QudaVerbosity verbosity;

70
71
72
    int sp_pad;
    int cl_pad;

rbabich's avatar
rbabich committed
73
    int iter;
74
    double spinorGiB;
rbabich's avatar
rbabich committed
75
    double cloverGiB;
76
77
    double gflops;
    double secs;
mikeaclark's avatar
mikeaclark committed
78
79
80

  } QudaInvertParam;

81
82
  // Interface functions, found in invert_quda.cpp

mikeaclark's avatar
mikeaclark committed
83
  void initQuda(int dev);
mikeaclark's avatar
mikeaclark committed
84
  void loadGaugeQuda(void *h_gauge, QudaGaugeParam *param);
mikeaclark's avatar
mikeaclark committed
85
  void saveGaugeQuda(void *h_gauge);
rbabich's avatar
rbabich committed
86
87
  void loadCloverQuda(void *h_clover, void *h_clovinv, QudaInvertParam *inv_param);
  void discardCloverQuda(QudaInvertParam *inv_param);
mikeaclark's avatar
mikeaclark committed
88
  void invertQuda(void *h_x, void *h_b, QudaInvertParam *param);
89
90

  void dslashQuda(void *h_out, void *h_in, QudaInvertParam *inv_param, int parity, int dagger);
mikeaclark's avatar
mikeaclark committed
91
  void MatPCQuda(void *h_out, void *h_in, QudaInvertParam *inv_param, int dagger);
92
  void MatPCDagMatPCQuda(void *h_out, void *h_in, QudaInvertParam *inv_param);
mikeaclark's avatar
mikeaclark committed
93
  void MatQuda(void *h_out, void *h_in, QudaInvertParam *inv_param, int dagger);
94

mikeaclark's avatar
mikeaclark committed
95
96
  void endQuda(void);

mikeaclark's avatar
   
mikeaclark committed
97
98
  void printGaugeParam(QudaGaugeParam *);
  void printInvertParam(QudaInvertParam *);
mikeaclark's avatar
mikeaclark committed
99
100
101
102
103

#ifdef __cplusplus
}
#endif

rbabich's avatar
rbabich committed
104
#endif // _QUDA_H