mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
Change TrueResiduals to TrueResidualShift and IterationsToComplete to IterationsToCompleteShift
This commit is contained in:
parent
9479bc8486
commit
165c68e28e
@ -308,7 +308,7 @@ void BlockCGrQsolve(LinearOperatorBase<Field> &Linop, const Field &B, Field &X)
|
|||||||
Linop.HermOp(X, AD);
|
Linop.HermOp(X, AD);
|
||||||
AD = AD-B;
|
AD = AD-B;
|
||||||
TrueResidual = std::sqrt(norm2(AD)/norm2(B));
|
TrueResidual = std::sqrt(norm2(AD)/norm2(B));
|
||||||
std::cout << GridLogMessage <<"\t True residual is " << TrueResidual <<std::endl;
|
std::cout << GridLogMessage <<"\tTrue residual is " << TrueResidual <<std::endl;
|
||||||
|
|
||||||
std::cout << GridLogMessage << "Time Breakdown "<<std::endl;
|
std::cout << GridLogMessage << "Time Breakdown "<<std::endl;
|
||||||
std::cout << GridLogMessage << "\tElapsed " << SolverTimer.Elapsed() <<std::endl;
|
std::cout << GridLogMessage << "\tElapsed " << SolverTimer.Elapsed() <<std::endl;
|
||||||
@ -656,7 +656,7 @@ void BlockCGrQsolveVec(LinearOperatorBase<Field> &Linop, const std::vector<Field
|
|||||||
if ( rr > max_resid ) max_resid = rr;
|
if ( rr > max_resid ) max_resid = rr;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << GridLogIterative << "\t Block Iteration "<<k<<" ave resid "<< sqrt(rrsum/sssum) << " max "<< sqrt(max_resid) <<std::endl;
|
std::cout << GridLogIterative << "\t Block Iteration "<<k<<" ave resid "<< std::sqrt(rrsum/sssum) << " max "<< std::sqrt(max_resid) <<std::endl;
|
||||||
|
|
||||||
if ( max_resid < Tolerance*Tolerance ) {
|
if ( max_resid < Tolerance*Tolerance ) {
|
||||||
|
|
||||||
@ -672,7 +672,7 @@ void BlockCGrQsolveVec(LinearOperatorBase<Field> &Linop, const std::vector<Field
|
|||||||
for(int b=0;b<Nblock;b++) Linop.HermOp(X[b], AD[b]);
|
for(int b=0;b<Nblock;b++) Linop.HermOp(X[b], AD[b]);
|
||||||
for(int b=0;b<Nblock;b++) AD[b] = AD[b]-B[b];
|
for(int b=0;b<Nblock;b++) AD[b] = AD[b]-B[b];
|
||||||
TrueResidual = std::sqrt(normv(AD)/normv(B));
|
TrueResidual = std::sqrt(normv(AD)/normv(B));
|
||||||
std::cout << GridLogMessage <<"\t True residual is " << TrueResidual <<std::endl;
|
std::cout << GridLogMessage << "\tTrue residual is " << TrueResidual <<std::endl;
|
||||||
|
|
||||||
std::cout << GridLogMessage << "Time Breakdown "<<std::endl;
|
std::cout << GridLogMessage << "Time Breakdown "<<std::endl;
|
||||||
std::cout << GridLogMessage << "\tElapsed " << SolverTimer.Elapsed() <<std::endl;
|
std::cout << GridLogMessage << "\tElapsed " << SolverTimer.Elapsed() <<std::endl;
|
||||||
|
@ -85,7 +85,7 @@ public:
|
|||||||
|
|
||||||
// Handle trivial case of zero src
|
// Handle trivial case of zero src
|
||||||
if (ssq == 0.){
|
if (ssq == 0.){
|
||||||
psi = 0;
|
psi = Zero();
|
||||||
IterationsToComplete = 1;
|
IterationsToComplete = 1;
|
||||||
TrueResidual = 0.;
|
TrueResidual = 0.;
|
||||||
return;
|
return;
|
||||||
@ -102,7 +102,7 @@ public:
|
|||||||
|
|
||||||
// Check if guess is really REALLY good :)
|
// Check if guess is really REALLY good :)
|
||||||
if (cp <= rsq) {
|
if (cp <= rsq) {
|
||||||
TrueResidual = sqrt(a/ssq);
|
TrueResidual = std::sqrt(a/ssq);
|
||||||
std::cout << GridLogMessage << "ConjugateGradient guess is converged already " << std::endl;
|
std::cout << GridLogMessage << "ConjugateGradient guess is converged already " << std::endl;
|
||||||
IterationsToComplete = 0;
|
IterationsToComplete = 0;
|
||||||
return;
|
return;
|
||||||
|
@ -46,19 +46,19 @@ public:
|
|||||||
|
|
||||||
RealD Tolerance;
|
RealD Tolerance;
|
||||||
Integer MaxIterations;
|
Integer MaxIterations;
|
||||||
std::vector<int> IterationsToComplete;
|
Integer IterationsToComplete; //Number of iterations the CG took to finish. Filled in upon completion
|
||||||
// Integer IterationsToComplete; //Number of iterations the CG took to finish. Filled in upon completion
|
std::vector<int> IterationsToCompleteShift; // Iterations for this shift
|
||||||
int verbose;
|
int verbose;
|
||||||
MultiShiftFunction shifts;
|
MultiShiftFunction shifts;
|
||||||
std::vector<RealD> TrueResiduals;
|
std::vector<RealD> TrueResidualShift;
|
||||||
|
|
||||||
ConjugateGradientMultiShift(Integer maxit,MultiShiftFunction &_shifts) :
|
ConjugateGradientMultiShift(Integer maxit,MultiShiftFunction &_shifts) :
|
||||||
MaxIterations(maxit),
|
MaxIterations(maxit),
|
||||||
shifts(_shifts)
|
shifts(_shifts)
|
||||||
{
|
{
|
||||||
verbose=1;
|
verbose=1;
|
||||||
IterationsToComplete.resize(_shifts.order);
|
IterationsToCompleteShift.resize(_shifts.order);
|
||||||
TrueResiduals.resize(_shifts.order);
|
TrueResidualShift.resize(_shifts.order);
|
||||||
}
|
}
|
||||||
|
|
||||||
void operator() (LinearOperatorBase<Field> &Linop, const Field &src, Field &psi)
|
void operator() (LinearOperatorBase<Field> &Linop, const Field &src, Field &psi)
|
||||||
@ -133,9 +133,9 @@ public:
|
|||||||
// Handle trivial case of zero src.
|
// Handle trivial case of zero src.
|
||||||
if( cp == 0. ){
|
if( cp == 0. ){
|
||||||
for(int s=0;s<nshift;s++){
|
for(int s=0;s<nshift;s++){
|
||||||
psi[s] = 0;
|
psi[s] = Zero();
|
||||||
IterationsToComplete[s] = 1;
|
IterationsToCompleteShift[s] = 1;
|
||||||
TrueResiduals[s] = 0.;
|
TrueResidualShift[s] = 0.;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -285,7 +285,7 @@ public:
|
|||||||
for(int s=0;s<nshift;s++){
|
for(int s=0;s<nshift;s++){
|
||||||
|
|
||||||
if ( (!converged[s]) ){
|
if ( (!converged[s]) ){
|
||||||
IterationsToComplete[s] = k;
|
IterationsToCompleteShift[s] = k;
|
||||||
|
|
||||||
RealD css = c * z[s][iz]* z[s][iz];
|
RealD css = c * z[s][iz]* z[s][iz];
|
||||||
|
|
||||||
@ -315,8 +315,8 @@ public:
|
|||||||
axpy(r,-alpha[s],src,tmp);
|
axpy(r,-alpha[s],src,tmp);
|
||||||
RealD rn = norm2(r);
|
RealD rn = norm2(r);
|
||||||
RealD cn = norm2(src);
|
RealD cn = norm2(src);
|
||||||
TrueResiduals[s] = std::sqrt(rn/cn);
|
TrueResidualShift[s] = std::sqrt(rn/cn);
|
||||||
std::cout<<GridLogMessage<<"CGMultiShift: shift["<<s<<"] true residual "<< TrueResiduals[s] <<std::endl;
|
std::cout<<GridLogMessage<<"CGMultiShift: shift["<<s<<"] true residual "<< TrueResidualShift[s] <<std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << GridLogMessage << "Time Breakdown "<<std::endl;
|
std::cout << GridLogMessage << "Time Breakdown "<<std::endl;
|
||||||
@ -325,7 +325,7 @@ public:
|
|||||||
std::cout << GridLogMessage << "\tMarix " << MatrixTimer.Elapsed() <<std::endl;
|
std::cout << GridLogMessage << "\tMarix " << MatrixTimer.Elapsed() <<std::endl;
|
||||||
std::cout << GridLogMessage << "\tShift " << ShiftTimer.Elapsed() <<std::endl;
|
std::cout << GridLogMessage << "\tShift " << ShiftTimer.Elapsed() <<std::endl;
|
||||||
|
|
||||||
// IterationsToComplete = k;
|
IterationsToComplete = k;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user