Skip to content

Commit

Permalink
Added flag for parity of eigenvectors loaded from file
Browse files Browse the repository at this point in the history
  • Loading branch information
leonhostetler committed Jan 28, 2025
1 parent cdedc07 commit 02eb6f5
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 10 deletions.
1 change: 1 addition & 0 deletions include/quda_milc_interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ extern "C" {
int block_size; /** For block method solvers, the block size **/
char vec_infile[256]; /** Filename prefix where to load the null-space vectors */
char vec_outfile[256]; /** Filename prefix for where to save the null-space vectors */
QudaParity vec_in_parity; /** Parity of the incoming eigenvectors **/
QudaPrecision save_prec; /** The precision with which to save the vectors */
QudaBoolean partfile; /** Whether to save eigenvectors in QIO singlefile or partfile format */
QudaBoolean io_parity_inflate; /** Whether to inflate single-parity eigen-vector I/O **/
Expand Down
23 changes: 13 additions & 10 deletions lib/milc_interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1217,8 +1217,6 @@ void qudaInvertDeflatable(int external_precision, int quda_precision, double mas
{
static const QudaVerbosity verbosity = getVerbosity();
qudamilc_called<true>(__func__, verbosity);

QudaParity local_parity = inv_args.evenodd;

// parameters for the eigensolve/deflation
QudaEigParam qep = newQudaEigParam();
Expand Down Expand Up @@ -1259,13 +1257,16 @@ void qudaInvertDeflatable(int external_precision, int quda_precision, double mas
setGaugeParams(fat_param, long_param, longlink, localDim, host_precision, device_precision, device_precision_sloppy,
inv_args.tadpole, inv_args.naik_epsilon);

QudaInvertParam invertParam = newQudaInvertParam();

QudaParity local_parity = inv_args.evenodd;
const double reliable_delta = 1e-1;


QudaInvertParam invertParam = newQudaInvertParam();
setInvertParams(host_precision, device_precision, device_precision_sloppy, mass, target_residual,
target_fermilab_residual, inv_args.max_iter, reliable_delta, local_parity, verbosity,
QUDA_CG_INVERTER, &invertParam);

if (eig_args.vec_in_parity != QUDA_EVEN_PARITY)
errorQuda("MILC interface deflation currently only supports even parity eigenvectors.");

// Deflation for even parity solves when desired
invertParam.eig_param = (local_parity == QUDA_EVEN_PARITY)&&(qep.n_ev_deflate>0) ? &qep : nullptr;
Expand Down Expand Up @@ -1489,8 +1490,6 @@ void qudaInvertMsrcDeflatable(int external_precision, int quda_precision, double
static const QudaVerbosity verbosity = getVerbosity();
qudamilc_called<true>(__func__, verbosity);

QudaParity local_parity = inv_args.evenodd;

// parameters for the eigensolve/deflation
QudaEigParam qep = newQudaEigParam();
setEigensolverParams(eig_args, &qep);
Expand All @@ -1513,14 +1512,18 @@ void qudaInvertMsrcDeflatable(int external_precision, int quda_precision, double
setGaugeParams(fat_param, long_param, longlink, localDim, host_precision, device_precision, device_precision_sloppy,
inv_args.tadpole, inv_args.naik_epsilon);

QudaInvertParam invertParam = newQudaInvertParam();


const double reliable_delta = 1e-1;

QudaParity local_parity = inv_args.evenodd;

QudaInvertParam invertParam = newQudaInvertParam();
setInvertParams(host_precision, device_precision, device_precision_sloppy, mass, target_residual,
target_fermilab_residual, inv_args.max_iter, reliable_delta, local_parity, verbosity,
QUDA_CG_INVERTER, &invertParam);
invertParam.num_src = num_src;

if (eig_args.vec_in_parity != QUDA_EVEN_PARITY)
errorQuda("MILC interface deflation currently only supports even parity eigenvectors.");

// Deflation for even parity solves when desired
invertParam.eig_param = (local_parity == QUDA_EVEN_PARITY)&&(qep.n_ev_deflate>0) ? &qep : nullptr;
Expand Down

0 comments on commit 02eb6f5

Please sign in to comment.