1#ifndef RP_AM_COMPRESSOR_TPP
2#define RP_AM_COMPRESSOR_TPP
11#include "AmCompressor.h"
12#include <pscf/math/IntVec.h>
15#include <pscf/iterator/AmIteratorTmpl.tpp>
27 template <
int D,
class T,
class V>
31 CompressorT::setSystem(system);
38 template <
int D,
class T,
class V>
45 bool useLambdaRamp =
false;
55 template <
int D,
class T,
class V>
62 const int nMonomer = system().mixture().nMonomer();
63 const IntVec<D> dimensions = system().domain().mesh().dimensions();
67 w0_.allocate(nMonomer);
68 wFieldTmp_.allocate(nMonomer);
69 for (
int i = 0; i < nMonomer; ++i) {
70 w0_[i].allocate(dimensions);
71 wFieldTmp_[i].allocate(dimensions);
77 for (
int i = 0; i < nMonomer; ++i) {
86 template <
int D,
class T,
class V>
98 template <
int D,
class T,
class V>
102 out <<
"Compressor time contributions:\n";
109 template <
int D,
class T,
class V>
113 CompressorT::mdeCounter_ = 0;
121 template <
int D,
class T,
class V>
122 int AmCompressor<D,T,V>::nElements()
123 {
return system().domain().mesh().size(); }
128 template <
int D,
class T,
class V>
129 bool AmCompressor<D,T,V>::hasInitialGuess()
130 {
return system().w().hasData(); }
135 template <
int D,
class T,
class V>
136 void AmCompressor<D,T,V>::getCurrent(VectorT& curr)
150 template <
int D,
class T,
class V>
151 void AmCompressor<D,T,V>::evaluate()
154 ++(CompressorT::mdeCounter_);
160 template <
int D,
class T,
class V>
161 void AmCompressor<D,T,V>::getResidual(VectorT& resid)
167 const int nMonomer = system().mixture().nMonomer();
168 for (
int i = 0; i < nMonomer; ++i) {
176 template <
int D,
class T,
class V>
177 void AmCompressor<D,T,V>::update(VectorT& newGuess)
180 const int nMonomer = system().mixture().nMonomer();
181 for (
int i = 0; i < nMonomer; ++i) {
186 system().w().setRGrid(wFieldTmp_);
192 template <
int D,
class T,
class V>
193 void AmCompressor<D,T,V>::outputToLog()
virtual void setup(bool isContinuation)
void readMixingParameters(std::istream &in, bool useLambdaRamp=true)
void outputTimers(std::ostream &out) const
void readErrorType(std::istream &in)
virtual void readParameters(std::istream &in)
int solve(bool isContinuation=false)
An IntVec<D, T> is a D-component vector of elements of integer type T.
void readParameters(std::istream &in) override
Read all parameters and initialize.
void outputTimers(std::ostream &out) const override
Return compressor times contributions.
AmCompressor(typename T::System &system)
Constructor.
int compress() override
Compress to obtain partial saddle point w+.
void clearTimers() override
Clear all timers and mde counter.
void setup(bool isContinuation) override
Initialize just before entry to iterative loop.
static std::ostream & file()
Get log ostream by reference.
void setClassName(const char *className)
Set class name string.
File containing preprocessor macros for error handling.
void addEqV(Array< double > &a, Array< double > const &b)
Vector-vector in-place addition, a[i] += b[i] (real).
void eqV(Array< double > &a, Array< double > const &b, const int beginIdA, const int beginIdB, const int n)
Vector assignment, a[i] = b[i] (real, slice).
void subVV(Array< double > &a, Array< double > const &b, Array< double > const &c)
Vector-vector subtraction, a[i] = b[i] - c[i] (real)
void eqS(Array< double > &a, double b)
Vector assignment, a[i] = b (real).
void addVV(Array< double > &a, Array< double > const &b, Array< double > const &c)
Vector-vector addition, a[i] = b[i] + c[i] (real)
Class templates for real-valued periodic fields.
PSCF package top-level namespace.