QUDA  v0.7.0
A library for QCD on GPUs
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
quda_fortran.h File Reference

Fortran interface functions. More...

#include <quda_constants.h>

Go to the source code of this file.

Functions

void init_quda_device_ (int *device)
 
void init_quda_memory_ ()
 
void init_quda_ (int *device)
 
void end_quda_ (void)
 
void comm_set_gridsize_ (int *grid)
 
void new_quda_gauge_param_ (QudaGaugeParam *param)
 
void new_quda_invert_param_ (QudaInvertParam *param)
 
void load_gauge_quda_ (void *h_gauge, QudaGaugeParam *param)
 
void free_gauge_quda_ (void)
 
void free_sloppy_gauge_quda_ (void)
 
void load_clover_quda_ (void *h_clover, void *h_clovinv, QudaInvertParam *inv_param)
 
void free_clover_quda_ (void)
 
void dslash_quda_ (void *h_out, void *h_in, QudaInvertParam *inv_param, QudaParity *parity)
 
void clover_quda_ (void *h_out, void *h_in, QudaInvertParam *inv_param, QudaParity *parity, int *inverse)
 
void mat_quda_ (void *h_out, void *h_in, QudaInvertParam *inv_param)
 
void mat_dag_mat_quda_ (void *h_out, void *h_in, QudaInvertParam *inv_param)
 
void invert_quda_ (void *h_x, void *h_b, QudaInvertParam *param)
 
void invert_md_quda_ (void *hp_x, void *hp_b, QudaInvertParam *param)
 
void invert_multi_shift_quda_ (void *_hp_x[QUDA_MAX_MULTI_SHIFT], void *_hp_b, QudaInvertParam *param)
 
void update_gauge_field_quda_ (void *gauge, void *momentum, double *dt, bool *conj_mom, bool *exact, QudaGaugeParam *param)
 
void compute_staggered_force_quda_ (void *cudaMom, void *qudaQuark, double *coeff)
 
int compute_gauge_force_quda_ (void *mom, void *gauge, int *input_path_buf, int *path_length, double *loop_coeff, int *num_paths, int *max_length, double *dt, QudaGaugeParam *qudaGaugeParam)
 
void apply_staggered_phase_quda_ ()
 
void remove_staggered_phase_quda_ ()
 
void set_kernel_pack_t_ (int *pack)
 

Detailed Description

Fortran interface functions.

The following are Fortran interface functions to QUDA that mirror the C-equivalents. This essentially just means making all calls by reference, using all the lower-case characters and adding a trailing underscore.

Definition in file quda_fortran.h.

Function Documentation

void apply_staggered_phase_quda_ ( )

Apply the staggered phase factors to the resident gauge field

Definition at line 5124 of file interface_quda.cpp.

void clover_quda_ ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param,
QudaParity parity,
int *  inverse 
)

Apply the clover operator or its inverse.

Parameters
h_outResult spinor field
h_inInput spinor field
paramContains all metadata regarding host and device storage
parityThe source and destination parity of the field
inverseWhether to apply the inverse of the clover term

Definition at line 5066 of file interface_quda.cpp.

void comm_set_gridsize_ ( int *  grid)

Setter method for the comm grid size to all us to reuse BQCD's MPI topology. This is considered a temporary hack that will be fixed when an interface for setting the logical topology is created (issue 31 on github).

BQCD wants a node mapping with x varying fastest.

Definition at line 5160 of file interface_quda.cpp.

int compute_gauge_force_quda_ ( void *  mom,
void *  gauge,
int *  input_path_buf,
int *  path_length,
double *  loop_coeff,
int *  num_paths,
int *  max_length,
double *  dt,
QudaGaugeParam qudaGaugeParam 
)

Compute the gauge force and update the mometum field

Parameters
momThe momentum field to be updated
gaugeThe gauge field from which we compute the force
input_path_buf[dim][num_paths][path_length](Fortran 3-d array)
path_lengthOne less that the number of links in a loop (e.g., 3 for a staple)
loop_coeffCoefficients of the different loops in the Symanzik action
num_pathsHow many contributions from path_length different "staples"
max_lengthThe maximum number of non-zero of links in any path in the action
dtThe integration step size (for MILC this is dt*beta/3)
paramThe parameters of the external fields and the computation settings

Definition at line 5091 of file interface_quda.cpp.

void compute_staggered_force_quda_ ( void *  cudaMom,
void *  qudaQuark,
double *  coeff 
)

Definition at line 5119 of file interface_quda.cpp.

void dslash_quda_ ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param,
QudaParity parity 
)

Apply the Dslash operator (D_{eo} or D_{oe}).

Parameters
h_outResult spinor field
h_inInput spinor field
paramContains all metadata regarding host and device storage
parityThe destination parity of the field

Definition at line 5064 of file interface_quda.cpp.

void end_quda_ ( void  )

Finalize the library.

Definition at line 5057 of file interface_quda.cpp.

void free_clover_quda_ ( void  )

Free QUDA's internal copy of the clover term and/or clover inverse.

Definition at line 5063 of file interface_quda.cpp.

void free_gauge_quda_ ( void  )

Free QUDA's internal copy of the gauge field.

Definition at line 5059 of file interface_quda.cpp.

void free_sloppy_gauge_quda_ ( void  )

Free QUDA's internal copy of the gauge field.

Definition at line 5060 of file interface_quda.cpp.

void init_quda_ ( int *  device)

Initialize the library. Under the interface this just calls initQudaMemory and initQudaDevice.

Parameters
deviceCUDA device number to use. In a multi-GPU build, this parameter may be either set explicitly on a per-process basis or set to -1 to enable a default allocation of devices to processes.

Definition at line 5054 of file interface_quda.cpp.

void init_quda_device_ ( int *  device)

Initialize the library. This is a low-level interface that is called by initQuda. Calling initQudaDevice requires that the user also call initQudaMemory before using QUDA.

Parameters
deviceCUDA device number to use. In a multi-GPU build, this parameter may either be set explicitly on a per-process basis or set to -1 to enable a default allocation of devices to processes.

Definition at line 5055 of file interface_quda.cpp.

void init_quda_memory_ ( )

Initialize the library persistant memory allocations (both host and device). This is a low-level interface that is called by initQuda. Calling initQudaMemory requires that the user has previously called initQudaDevice.

Definition at line 5056 of file interface_quda.cpp.

void invert_md_quda_ ( void *  hp_x,
void *  hp_b,
QudaInvertParam param 
)

Definition at line 5074 of file interface_quda.cpp.

void invert_multi_shift_quda_ ( void *  _hp_x[QUDA_MAX_MULTI_SHIFT],
void *  _hp_b,
QudaInvertParam param 
)

Solve for multiple shifts (e.g., masses).

Parameters
_hp_xArray of solution spinor fields
_hp_bArray of source spinor fields
paramContains all metadata regarding host and device storage and solver parameters
void invert_quda_ ( void *  h_x,
void *  h_b,
QudaInvertParam param 
)

Perform the solve, according to the parameters set in param. It is assumed that the gauge field has already been loaded via loadGaugeQuda().

Parameters
h_xSolution spinor field
h_bSource spinor field
paramContains all metadata regarding host and device storage and solver parameters

Definition at line 5072 of file interface_quda.cpp.

void load_clover_quda_ ( void *  h_clover,
void *  h_clovinv,
QudaInvertParam inv_param 
)

Load the clover term and/or the clover inverse from the host. Either h_clover or h_clovinv may be set to NULL.

Parameters
h_cloverBase pointer to host clover field
h_cloverinvBase pointer to host clover inverse field
inv_paramContains all metadata regarding host and device storage

Definition at line 5061 of file interface_quda.cpp.

void load_gauge_quda_ ( void *  h_gauge,
QudaGaugeParam param 
)

Load the gauge field from the host.

Parameters
h_gaugeBase pointer to host gauge field (regardless of dimensionality)
paramContains all metadata regarding host and device storage

Definition at line 5058 of file interface_quda.cpp.

void mat_dag_mat_quda_ ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param 
)

Apply M^{}M, possibly even/odd preconditioned.

Parameters
h_outResult spinor field
h_inInput spinor field
paramContains all metadata regarding host and device storage

Definition at line 5070 of file interface_quda.cpp.

void mat_quda_ ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param 
)

Apply the full Dslash matrix, possibly even/odd preconditioned.

Parameters
h_outResult spinor field
h_inInput spinor field
paramContains all metadata regarding host and device storage

Definition at line 5068 of file interface_quda.cpp.

void new_quda_gauge_param_ ( QudaGaugeParam param)

Initializes the QudaGaugeParam with default entries.

Parameters
TheQudaGaugeParam to be initialized

Definition at line 5078 of file interface_quda.cpp.

void new_quda_invert_param_ ( QudaInvertParam param)

Initializes the QudaInvertParam with default entries.

Parameters
TheQudaInvertParam to be initialized

Definition at line 5081 of file interface_quda.cpp.

void remove_staggered_phase_quda_ ( )

Remove the staggered phase factors to the resident gauge field

Definition at line 5134 of file interface_quda.cpp.

void set_kernel_pack_t_ ( int *  pack)

Temporary function exposed for TIFR benchmarking

Exposed due to poor derived MPI datatype performance with GPUDirect RDMA

Definition at line 5170 of file interface_quda.cpp.

void update_gauge_field_quda_ ( void *  gauge,
void *  momentum,
double *  dt,
bool *  conj_mom,
bool *  exact,
QudaGaugeParam param 
)

Evolve the gauge field by step size dt, using the momentum field I.e., Evalulate U(t+dt) = e(dt pi) U(t)

Parameters
gaugeThe gauge field to be updated
momentumThe momentum field
dtThe integration step size step
conj_momWhether to conjugate the momentum matrix
exactWhether to use an exact exponential or Taylor expand
paramThe parameters of the external fields and the computation settings

Definition at line 5085 of file interface_quda.cpp.