11#include <pscf/solvers/BlockTmpl.h>
12#include <rpc/solvers/Propagator.h>
14#include <prdc/cpu/RField.h>
15#include <prdc/cpu/RFieldDft.h>
16#include <util/containers/DMatrix.h>
17#include <util/containers/FSArray.h>
21 template <
int D>
class Mesh;
25 template <
int D>
class FFT;
309 double stress(
int n)
const;
420 {
return *unitCellPtr_; }
424 {
return *waveListPtr_; }
439 FFT<D> const & fft()
const;
444 void computeExpKsq();
463 {
return stress_[n]; }
467 inline Mesh<D> const & Block<D>::mesh()
const
475 inline FFT<D> const & Block<D>::fft()
const
481 #ifndef RPC_BLOCK_TPP
483 extern template class Block<1>;
484 extern template class Block<2>;
485 extern template class Block<3>;
Propagator< D > & propagator(int directionId)
virtual void setKuhn(double kuhn)
Propagator< D >::FieldT & cField()
int id() const
Get the id of this block (unique within the polymer).
void setVertexIds(int vertexId0, int vertexId1)
Set indices of associated vertices.
const Pair< int > & vertexIds() const
Get the pair of associated vertex ids.
int nBead() const
Get the number of beads in this block, in the bead model.
virtual void setLength(double length)
Set the length of this block (only valid for thread model).
int monomerId() const
Get the monomer type id for this block.
int vertexId(int i) const
Get the id of one associated vertex.
void setMonomerId(int monomerId)
Set the monomer type id.
void setId(int id)
Set the id for this block.
double length() const
Get the length of this block, in the thread model.
An IntVec<D, T> is a D-component vector of elements of integer type T.
Description of a regular grid of points in a periodic domain.
Fourier transform wrapper.
Fourier transform of a real field on an FFT mesh.
Field of real double precision values on an FFT mesh.
Class to calculate and store properties of wavevectors.
Base template for UnitCell<D> classes, D=1, 2 or 3.
BlockTmpl< Propagator< D > > Base
Base class.
void stepBondBead(RField< D > const &qin, RField< D > &qout) const
Apply a bond operator for the bead model.
void setLength(double newLength)
Set or reset block length (only used in thread model).
void computeConcentrationBead(double prefactor)
Compute the concentration for this block, using the bead model.
double stress(int n) const
Get derivative of free energy w/ respect to a unit cell parameter.
void setKuhn(double kuhn)
Set or reset monomer statistical segment length.
void clearUnitCellData()
Clear all internal data that depends on the unit cell parameters.
void setupSolver(RField< D > const &w)
Set up the MDE solver for this block.
void allocate(double ds)
Allocate memory and set contour step size.
void computeStressBead(double prefactor)
Compute stress contribution for this block, using bead model.
void associate(Mesh< D > const &mesh, FFT< D > const &fft, UnitCell< D > const &cell, WaveList< D > &wavelist)
Create permanent associations with related objects.
double kuhn() const
Get monomer statistical segment length.
FFT< D > FFTT
Fast Fourier Transform type.
Propagator< D > PropagatorT
Propagator type.
void computeConcentrationThread(double prefactor)
Compute the concentration for this block, for the thread model.
void stepThread(RField< D > const &qin, RField< D > &qout) const
Compute one step of solution of MDE for the thread model.
void computeStressThread(double prefactor)
Compute stress contribution for this block, using thread model.
double ds() const
Get contour length step size.
int ns() const
Get the number of contour grid points, including end points.
void stepFieldBead(RField< D > &q) const
Apply the exponential field operator for the bead model.
void stepHalfBondBead(RField< D > const &qin, RField< D > &qout) const
Apply a half-bond operator for the bead model.
WaveList< D > WaveListT
WaveList type.
void stepBead(RField< D > const &qin, RField< D > &qout) const
Compute one step of solution of MDE for the bead model.
FieldIo< D > FieldIoT
FieldIo type.
File input/output operations and format conversions for fields.
MDE solver for one direction of one block.
A fixed capacity (static) contiguous array with a variable logical size.
#define UTIL_CHECK(condition)
Assertion macro suitable for serial or parallel production code.
Fields and FFTs for periodic boundary conditions (CPU)
Periodic fields and crystallography.
Real periodic fields, SCFT and PS-FTS (CPU).
PSCF package top-level namespace.