11#include <util/param/ParamComposite.h>
13#include <pspg/solvers/Mixture.h>
14#include <pspg/field/Domain.h>
15#include <pspg/field/FieldIo.h>
16#include <pspg/field/WFieldContainer.h>
17#include <pspg/field/CFieldContainer.h>
18#include <pspg/field/RDField.h>
19#include <pspg/field/RDFieldDft.h>
21#include <pscf/homogeneous/Mixture.h>
23#include <util/misc/FileMaster.h>
24#include <util/containers/DArray.h>
25#include <util/containers/FSArray.h>
34 template <
int D>
class Iterator;
35 template <
int D>
class IteratorFactory;
36 template <
int D>
class Sweep;
37 template <
int D>
class SweepFactory;
110 virtual void readParam(std::istream& in);
160 void readWBasis(
const std::string & filename);
176 void readWRGrid(
const std::string & filename);
304 void compute(
bool needStress =
false);
327 int iterate(
bool isContinuation =
false);
423 void writeWRGrid(
const std::string & filename)
const;
437 void writeCRGrid(
const std::string & filename)
const;
465 int polymerId,
int blockId,
466 int directionId,
int segmentId)
const;
476 void writeQTail(std::string
const & filename,
int polymerId,
477 int blockId,
int directionId)
const;
487 void writeQ(std::string
const & filename,
int polymerId,
488 int blockId,
int directionId)
const;
508 void writeQAll(std::string
const & basename);
522 void writeStars(
const std::string & filename)
const;
532 void writeWaves(
const std::string & filename)
const;
539 void writeGroup(std::string
const & filename)
const;
556 const std::string & outFileName);
572 const std::string & outFileName);
581 const std::string& outFileName);
590 const std::string & outFileName);
606 const std::string& outFileName);
615 const std::string & outFileName);
827 bool isAllocatedGrid_;
832 bool isAllocatedBasis_;
856 void allocateFieldsGrid();
863 void allocateFieldsBasis();
870 void readFieldHeader(std::string filename);
880 void readEcho(std::istream& in, std::string&
string)
const;
890 void readEcho(std::istream& in,
double& value)
const;
895 void initHomogeneous();
911 return *interactionPtr_;
919 return *interactionPtr_;
928 {
return domain_.unitCell(); }
933 {
return domain_.mesh(); }
938 {
return domain_.basis(); }
943 {
return domain_.fft(); }
948 {
return domain_.fieldIo(); }
955 return *iteratorPtr_;
961 {
return fileMaster_; }
967 {
return homogeneous_; }
984 {
return fHelmholtz_; }
989 {
return pressure_; }
994 {
return hasCFields_; }
999 {
return (sweepPtr_ != 0); }
1001 #ifndef PSPG_SYSTEM_TPP
Symmetry-adapted Fourier basis for pseudo-spectral scft.
A spatially homogeneous mixture.
An IntVec<D, T> is a D-component vector of elements of integer type T.
Flory-Huggins excess free energy model.
Description of a regular grid of points in a periodic domain.
A list of c fields stored in both basis and r-grid format.
Dynamic array on the GPU with alligned data.
Spatial domain and spatial discretization for a periodic structure.
Fourier transform wrapper for real data.
File input/output operations for fields in several file formats.
Factory for subclasses of Iterator.
Base class for iterative solvers for SCF equations.
Solver for a mixture of polymers and solvents.
Field of real single precision values on an FFT mesh on a device.
Default Factory for subclasses of Sweep.
Solve a sequence of problems along a line in parameter space.
Main class in SCFT simulation of one system.
void writeThermo(std::ostream &out)
Write thermodynamic properties to a file.
void readWRGrid(const std::string &filename)
Read chemical potential fields in real space grid (r-grid) format.
double pressure() const
Get precomputed pressure times monomer volume / kT.
void setWRGrid(DArray< RDField< D > > const &fields)
Set new w fields, in real-space (r-grid) format.
UnitCell< D > const & unitCell() const
Get crystal UnitCell by const reference.
void writeQSlice(std::string const &filename, int polymerId, int blockId, int directionId, int segmentId) const
Write specified slice of a propagator at fixed s in r-grid format.
void compute(bool needStress=false)
Solve the modified diffusion equation once, without iteration.
CFieldContainer< D > const & c() const
Get container of monomer concentration / volume fration fields.
FieldIo< D > const & fieldIo() const
Get the FieldIo by const reference.
void writeGroup(std::string const &filename) const
Output all elements of the space group.
void symmetrizeWFields()
Symmetrize r-grid w-fields, compute basis components.
double fHelmholtz() const
Get precomputed Helmoltz free energy per monomer / kT.
FileMaster & fileMaster()
Get FileMaster by reference.
void writeCRGrid(const std::string &filename) const
Write concentration fields in real space grid (r-grid) format.
Homogeneous::Mixture & homogeneous()
Get homogeneous mixture (for reference calculations).
Mesh< D > const & mesh() const
Get spatial discretization Mesh by const reference.
void estimateWfromC(const std::string &filename)
Construct trial w-fields from c-fields.
void writeStars(const std::string &filename) const
Output information about stars and symmetrized basis functions.
Mixture< D > & mixture()
Get Mixture by reference.
void rGridToBasis(const std::string &inFileName, const std::string &outFileName)
Convert a field from real-space grid to symmetrized basis format.
FFT< D > const & fft() const
Get the FFT object by reference.
void rGridToKGrid(const std::string &inFileName, const std::string &outFileName)
Convert fields from real-space (r-grid) to Fourier (k-grid) format.
Domain< D > const & domain() const
Get Domain by const reference.
void basisToRGrid(const std::string &inFileName, const std::string &outFileName)
Convert a field from symmetry-adapted basis to r-grid format.
void writeParamNoSweep(std::ostream &out) const
Write parameter file to an ostream, omitting the sweep block.
int iterate(bool isContinuation=false)
Iteratively solve a SCFT problem.
void writeWBasis(const std::string &filename)
Write chemical potential fields in symmetry adapted basis format.
void setUnitCell(UnitCell< D > const &unitCell)
Set parameters of the associated unit cell.
void writeBlockCRGrid(const std::string &filename) const
Write c fields for all blocks and solvents in r-grid format.
WFieldContainer< D > const & w() const
Get container of chemical potential fields.
Basis< D > const & basis() const
Get the Basis by reference.
void readParam()
Read input parameters from default param file.
void writeQTail(std::string const &filename, int polymerId, int blockId, int directionId) const
Write the final slice of a propagator in r-grid format.
void writeQ(std::string const &filename, int polymerId, int blockId, int directionId) const
Write one propagator for one block, in r-grid format.
void writeWRGrid(const std::string &filename) const
Write chemical potential fields in real space grid (r-grid) format.
void kGridToRGrid(const std::string &inFileName, const std::string &outFileName)
Convert fields from Fourier (k-grid) to real-space (r-grid) format.
void writeQAll(std::string const &basename)
Write all propagators of all blocks, each to a separate file.
Iterator< D > & iterator()
Get the iterator by reference.
void readCommands()
Read commands from default command file.
void basisToKGrid(const std::string &inFileName, const std::string &outFileName)
Convert fields from symmetrized basis to Fourier (k-grid) format.
void sweep()
Sweep in parameter space, solving an SCF problem at each point.
void writeCBasis(const std::string &filename)
Write concentrations in symmetry-adapted basis format.
void setWBasis(DArray< DArray< double > > const &fields)
Set chemical potential fields, in symmetry-adapted basis format.
void writeWaves(const std::string &filename) const
Output information about waves.
Interaction & interaction()
Get interaction (i.e., excess free energy model) by reference.
void kGridToBasis(const std::string &inFileName, const std::string &outFileName)
Convert fields from Fourier (k-grid) to symmetrized basis format.
bool hasCFields() const
Have monomer concentration fields (c fields) been computed?
void readWBasis(const std::string &filename)
Read chemical potential fields in symmetry adapted basis format.
virtual void readParameters(std::istream &in)
Read body of parameter file (without opening, closing lines).
void setOptions(int argc, char **argv)
Process command line options.
void computeFreeEnergy()
Compute free energy density and pressure for current fields.
bool hasSweep() const
Does this system have an associated Sweep object?
A list of fields stored in both basis and r-grid format.
Base template for UnitCell<D> classes, D=1, 2 or 3.
Dynamically allocatable contiguous array template.
A fixed capacity (static) contiguous array with a variable logical size.
A FileMaster manages input and output files for a simulation.
An object that can read multiple parameters from file.
#define UTIL_ASSERT(condition)
Assertion macro suitable for debugging serial or parallel code.
C++ namespace for polymer self-consistent field theory (PSCF).
Utility classes for scientific computation.