10#include <r1d/field/Domain.h>
41 qFields_.allocate(
ns);
42 for (
int i = 0; i <
ns; ++i) {
43 qFields_[i].allocate(nx);
62 qFields_.deallocate();
65 qFields_.allocate(
ns);
66 for (
int i = 0; i <
ns; ++i) {
67 qFields_[i].allocate(nx_);
75 {
return isAllocated_; }
80 void Propagator::computeHead()
88 for (ix = 0; ix < nx_; ++ix) {
93 for (
int is = 0; is <
nSource(); ++is) {
95 UTIL_THROW(
"Source not solved in computeHead");
98 for (ix = 0; ix < nx_; ++ix) {
110 for (
int iStep = 0; iStep < ns_ - 1; ++iStep) {
111 block().step(qFields_[iStep], qFields_[iStep + 1]);
123 for (
int i = 0; i < nx_; ++i) {
128 for (
int iStep = 0; iStep < ns_ - 1; ++iStep) {
129 block().step(qFields_[iStep], qFields_[iStep + 1]);
146 UTIL_THROW(
"Partner propagator is not solved");
150 Q = block().domain().innerProduct(qh, qt);
void setIsSolved(bool isSolved)
const Propagator & partner() const
const Propagator & source(int id) const
FieldT const & head() const
Return q-field at beginning of block (initial condition).
bool isAllocated() const
Has memory been allocated for this propagator?
int ns() const
Number of values of s (or slices), including head and tail.
void solve()
Solve the modified diffusion equation (MDE) for this block.
void computeQ(double &Q)
Compute and return partition function for the molecule.
void reallocate(int ns)
Reallocate memory used by this propagator.
void allocate(int ns, int nx)
Set discretization and allocate memory.
DArray< double > FieldT
Generic field (function of position).
#define UTIL_CHECK(condition)
Assertion macro suitable for serial or parallel production code.
#define UTIL_THROW(msg)
Macro for throwing an Exception, reporting function, file and line number.
SCFT with real 1D fields.
PSCF package top-level namespace.