11#include <pscf/solvers/BlockTmpl.h>
13#include <prdc/cpu/CField.h>
14#include <prdc/cpu/RField.h>
19 template <
int D>
class Mesh;
23 template <
int D>
class FFT;
394 FFT<D> const & fft()
const;
404 void computeExpKsq();
423 template <
int D>
inline
424 Mesh<D> const & Block<D>::mesh()
const
431 template <
int D>
inline
433 {
return *unitCellPtr_; }
436 template <
int D>
inline
437 FFT<D> const & Block<D>::fft()
const
444 template <
int D>
inline
446 {
return *waveListPtr_; }
Class template for a block solver in a block copolymer.
Propagator< D > PropagatorT
virtual void setKuhn(double kuhn)
Propagator< D > & propagator(int directionId)
Block within a linear or branched block polymer.
BlockTmpl< Propagator< D >, CField< D > > Base
Base class.
void clearUnitCellData()
Clear all internal data that depends on the unit cell parameters.
void stepFieldBead(CField< D > &q) const
Apply the exponential field operator for the bead model.
void computeConcentrationThread(fftw_complex const &prefactor)
Compute the concentration for this block, for the thread model.
int ns() const
Get the number of contour grid points, including end points.
void computeConcentrationBead(fftw_complex const &prefactor)
Compute the concentration for this block, using the bead model.
void allocate(double ds)
Allocate memory and set number of counter steps.
void stepBead(CField< D > const &qin, CField< D > &qout) const
Compute one step of solution of MDE for the bead model.
void stepHalfBondBead(CField< D > const &qin, CField< D > &qout) const
Apply a half-bond operator for the bead model.
void setLength(double newLength)
Set or reset block length (only used in thread model).
double ds() const
Get contour length step size.
void stepBondBead(CField< D > const &qin, CField< D > &qout) const
Apply a bond operator for the bead model.
void setKuhn(double kuhn)
Set or reset monomer statistical segment length.
void stepThread(CField< D > const &qin, CField< D > &qout) const
Compute one step of solution of MDE for the thread model.
double kuhn() const
Get monomer statistical segment length.
void associate(Mesh< D > const &mesh, FFT< D > const &fft, UnitCell< D > const &cell, WaveList< D > &wavelist)
Create permanent associations with related objects.
void setupSolver(CField< D > const &w)
Set up the MDE solver for this block.
MDE solver for one direction of one block.
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.
Description of a regular grid of points in a periodic domain.
Field of complex double precision values on an FFT mesh.
Fourier transform wrapper.
Field of real double precision values on an FFT mesh.
Class to compute and store properties associated with wavevectors.
Base template for UnitCell<D> classes, D=1, 2 or 3.
#define UTIL_CHECK(condition)
Assertion macro suitable for serial or parallel production code.
Complex periodic fields, CL-FTS (CPU).
Fields and FFTs for periodic boundary conditions (CPU)
Periodic fields and crystallography.
PSCF package top-level namespace.