PSCF v1.1
Public Member Functions | Protected Member Functions | List of all members
Pscf::PolymerTmpl< Block > Class Template Reference

Descriptor and MDE solver for an acyclic block polymer. More...

#include <PolymerTmpl.h>

Inheritance diagram for Pscf::PolymerTmpl< Block >:
Pscf::Species Util::ParamComposite Util::ParamComponent Util::Serializable Util::MpiFileIo Pscf::Fd1d::Polymer

Public Member Functions

 PolymerTmpl ()
 Constructor. More...
 
 ~PolymerTmpl ()
 Destructor. More...
 
virtual void readParameters (std::istream &in)
 Read and initialize. More...
 
virtual void solve (double phiTot=1.0)
 Solve modified diffusion equation. More...
 
Accessors (objects, by reference)
Block & block (int id)
 Get a specified Block. More...
 
Block const & block (int id) const
 Get a specified Block by const reference. More...
 
const Vertexvertex (int id) const
 Get a specified Vertex by const reference. More...
 
Propagator & propagator (int blockId, int directionId)
 Get propagator for a specific block and direction. More...
 
Propagator const & propagator (int blockId, int directionId) const
 Get a const propagator for a specific block and direction. More...
 
Propagator & propagator (int id)
 Get propagator indexed in order of computation. More...
 
const Pair< int > & propagatorId (int id) const
 Get propagator identifier, indexed by order of computation. More...
 
Accessors (by value)
int nBlock () const
 Number of blocks. More...
 
int nVertex () const
 Number of vertices (junctions and chain ends). More...
 
int nPropagator () const
 Number of propagators (nBlock*2). More...
 
double length () const
 Sum of the lengths of all blocks in the polymer. More...
 
- Public Member Functions inherited from Pscf::Species
 Species ()
 Default constructor. More...
 
double phi () const
 Get the overall volume fraction for this species. More...
 
double mu () const
 Get the chemical potential for this species (units kT=1). More...
 
double q () const
 Get the molecular partition function for this species. More...
 
Ensemble ensemble ()
 Get the statistical ensemble for this species (open or closed). More...
 
- Public Member Functions inherited from Util::ParamComposite
 ParamComposite ()
 Constructor. More...
 
 ParamComposite (const ParamComposite &other)
 Copy constructor. More...
 
 ParamComposite (int capacity)
 Constructor. More...
 
virtual ~ParamComposite ()
 Virtual destructor. More...
 
void resetParam ()
 Resets ParamComposite to its empty state. More...
 
virtual void readParam (std::istream &in)
 Read the parameter file block. More...
 
virtual void readParamOptional (std::istream &in)
 Read optional parameter file block. More...
 
virtual void writeParam (std::ostream &out) const
 Write all parameters to an output stream. More...
 
virtual void load (Serializable::IArchive &ar)
 Load all parameters from an input archive. More...
 
virtual void loadOptional (Serializable::IArchive &ar)
 Load an optional ParamComposite. More...
 
virtual void loadParameters (Serializable::IArchive &ar)
 Load state from archive, without adding Begin and End lines. More...
 
virtual void save (Serializable::OArchive &ar)
 Saves all parameters to an archive. More...
 
void saveOptional (Serializable::OArchive &ar)
 Saves isActive flag, and then calls save() iff isActive is true. More...
 
void readParamComposite (std::istream &in, ParamComposite &child, bool next=true)
 Add and read a required child ParamComposite. More...
 
void readParamCompositeOptional (std::istream &in, ParamComposite &child, bool next=true)
 Add and attempt to read an optional child ParamComposite. More...
 
template<typename Type >
ScalarParam< Type > & read (std::istream &in, const char *label, Type &value)
 Add and read a new required ScalarParam < Type > object. More...
 
template<typename Type >
ScalarParam< Type > & readOptional (std::istream &in, const char *label, Type &value)
 Add and read a new optional ScalarParam < Type > object. More...
 
template<typename Type >
CArrayParam< Type > & readCArray (std::istream &in, const char *label, Type *value, int n)
 Add and read a required C array parameter. More...
 
template<typename Type >
CArrayParam< Type > & readOptionalCArray (std::istream &in, const char *label, Type *value, int n)
 Add and read an optional C array parameter. More...
 
template<typename Type >
DArrayParam< Type > & readDArray (std::istream &in, const char *label, DArray< Type > &array, int n)
 Add and read a required DArray < Type > parameter. More...
 
template<typename Type >
DArrayParam< Type > & readOptionalDArray (std::istream &in, const char *label, DArray< Type > &array, int n)
 Add and read an optional DArray < Type > parameter. More...
 
template<typename Type , int N>
FArrayParam< Type, N > & readFArray (std::istream &in, const char *label, FArray< Type, N > &array)
 Add and read a required FArray < Type, N > array parameter. More...
 
template<typename Type , int N>
FArrayParam< Type, N > & readOptionalFArray (std::istream &in, const char *label, FArray< Type, N > &array)
 Add and read an optional FArray < Type, N > array parameter. More...
 
template<typename Type , int N>
FSArrayParam< Type, N > & readFSArray (std::istream &in, const char *label, FSArray< Type, N > &array, int size)
 Add and read a required FSArray < Type, N > array parameter. More...
 
template<typename Type , int N>
FSArrayParam< Type, N > & readOptionalFSArray (std::istream &in, const char *label, FSArray< Type, N > &array, int size)
 Add and read an optional FSArray < Type, N > array parameter. More...
 
template<typename Type >
CArray2DParam< Type > & readCArray2D (std::istream &in, const char *label, Type *value, int m, int n, int np)
 Add and read a required CArray2DParam < Type > 2D C-array. More...
 
template<typename Type >
CArray2DParam< Type > & readOptionalCArray2D (std::istream &in, const char *label, Type *value, int m, int n, int np)
 Add and read an optional CArray2DParam < Type > 2D C-array parameter. More...
 
template<typename Type >
DMatrixParam< Type > & readDMatrix (std::istream &in, const char *label, DMatrix< Type > &matrix, int m, int n)
 Add and read a required DMatrix < Type > matrix parameter. More...
 
template<typename Type >
DMatrixParam< Type > & readOptionalDMatrix (std::istream &in, const char *label, DMatrix< Type > &matrix, int m, int n)
 Add and read an optional DMatrix < Type > matrix parameter. More...
 
template<typename Type >
DSymmMatrixParam< Type > & readDSymmMatrix (std::istream &in, const char *label, DMatrix< Type > &matrix, int n)
 Add and read a required symmetrix DMatrix. More...
 
template<typename Type >
DSymmMatrixParam< Type > & readOptionalDSymmMatrix (std::istream &in, const char *label, DMatrix< Type > &matrix, int n)
 Add and read an optional DMatrix matrix parameter. More...
 
BeginreadBegin (std::istream &in, const char *label, bool isRequired=true)
 Add and read a class label and opening bracket. More...
 
EndreadEnd (std::istream &in)
 Add and read the closing bracket. More...
 
BlankreadBlank (std::istream &in)
 Add and read a new Blank object, representing a blank line. More...
 
void loadParamComposite (Serializable::IArchive &ar, ParamComposite &child, bool next=true)
 Add and load a required child ParamComposite. More...
 
void loadParamCompositeOptional (Serializable::IArchive &ar, ParamComposite &child, bool next=true)
 Add and load an optional child ParamComposite if isActive. More...
 
template<typename Type >
ScalarParam< Type > & loadParameter (Serializable::IArchive &ar, const char *label, Type &value, bool isRequired)
 Add and load a new ScalarParam < Type > object. More...
 
template<typename Type >
ScalarParam< Type > & loadParameter (Serializable::IArchive &ar, const char *label, Type &value)
 Add and load new required ScalarParam < Type > object. More...
 
template<typename Type >
CArrayParam< Type > & loadCArray (Serializable::IArchive &ar, const char *label, Type *value, int n, bool isRequired)
 Add a C array parameter and load its elements. More...
 
template<typename Type >
CArrayParam< Type > & loadCArray (Serializable::IArchive &ar, const char *label, Type *value, int n)
 Add and load a required CArrayParam< Type > array parameter. More...
 
template<typename Type >
DArrayParam< Type > & loadDArray (Serializable::IArchive &ar, const char *label, DArray< Type > &array, int n, bool isRequired)
 Add an load a DArray < Type > array parameter. More...
 
template<typename Type >
DArrayParam< Type > & loadDArray (Serializable::IArchive &ar, const char *label, DArray< Type > &array, int n)
 Add and load a required DArray< Type > array parameter. More...
 
template<typename Type , int N>
FArrayParam< Type, N > & loadFArray (Serializable::IArchive &ar, const char *label, FArray< Type, N > &array, bool isRequired)
 Add and load an FArray < Type, N > fixed-size array parameter. More...
 
template<typename Type , int N>
FArrayParam< Type, N > & loadFArray (Serializable::IArchive &ar, const char *label, FArray< Type, N > &array)
 Add and load a required FArray < Type > array parameter. More...
 
template<typename Type , int N>
FSArrayParam< Type, N > & loadFSArray (Serializable::IArchive &ar, const char *label, FSArray< Type, N > &array, int size, bool isRequired)
 Add and load an FSArray < Type, N > array parameter. More...
 
template<typename Type , int N>
FSArrayParam< Type, N > & loadFSArray (Serializable::IArchive &ar, const char *label, FSArray< Type, N > &array, int size)
 Add and load a required FSArray < Type > array parameter. More...
 
template<typename Type >
CArray2DParam< Type > & loadCArray2D (Serializable::IArchive &ar, const char *label, Type *value, int m, int n, int np, bool isRequired)
 Add and load a CArray2DParam < Type > C 2D array parameter. More...
 
template<typename Type >
CArray2DParam< Type > & loadCArray2D (Serializable::IArchive &ar, const char *label, Type *value, int m, int n, int np)
 Add and load a required < Type > matrix parameter. More...
 
template<typename Type >
DMatrixParam< Type > & loadDMatrix (Serializable::IArchive &ar, const char *label, DMatrix< Type > &matrix, int m, int n, bool isRequired)
 Add and load a DMatrixParam < Type > matrix parameter. More...
 
template<typename Type >
DMatrixParam< Type > & loadDMatrix (Serializable::IArchive &ar, const char *label, DMatrix< Type > &matrix, int m, int n)
 Add and load a required DMatrixParam < Type > matrix parameter. More...
 
template<typename Type >
DSymmMatrixParam< Type > & loadDSymmMatrix (Serializable::IArchive &ar, const char *label, DMatrix< Type > &matrix, int n, bool isRequired)
 Add and load a symmetric DSymmMatrixParam < Type > matrix parameter. More...
 
template<typename Type >
DSymmMatrixParam< Type > & loadDSymmMatrix (Serializable::IArchive &ar, const char *label, DMatrix< Type > &matrix, int n)
 Add and load a required DSymmMatrixParam < Type > matrix parameter. More...
 
void addParamComposite (ParamComposite &child, bool next=true)
 Add a child ParamComposite object to the format array. More...
 
BeginaddBegin (const char *label)
 Add a Begin object representing a class name and bracket. More...
 
EndaddEnd ()
 Add a closing bracket. More...
 
BlankaddBlank ()
 Create and add a new Blank object, representing a blank line. More...
 
std::string className () const
 Get class name string. More...
 
bool isRequired () const
 Is this ParamComposite required in the input file? More...
 
bool isActive () const
 Is this parameter active? More...
 
- Public Member Functions inherited from Util::ParamComponent
virtual ~ParamComponent ()
 Destructor. More...
 
virtual void readParam (std::istream &in)=0
 Read parameter(s) from file. More...
 
virtual void writeParam (std::ostream &out) const =0
 Read parameter(s) to file. More...
 
virtual void load (Serializable::IArchive &ar)
 Load internal state from an archive. More...
 
virtual void save (Serializable::OArchive &ar)
 Save internal state to an archive. More...
 
virtual void resetParam ()
 Nontrivial implementation provided by ParamComposite subclass. More...
 
void setIndent (const ParamComponent &parent, bool next=true)
 Set indent level. More...
 
std::string indent () const
 Return indent string for this object (string of spaces). More...
 
template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 Serialize this ParamComponent as a string. More...
 
- Public Member Functions inherited from Util::Serializable
virtual ~Serializable ()
 Destructor. More...
 
virtual void save (OArchive &ar)=0
 Save to an archive. More...
 
virtual void load (IArchive &ar)=0
 Load from an archive. More...
 
- Public Member Functions inherited from Util::MpiFileIo
 MpiFileIo ()
 Constructor. More...
 
 MpiFileIo (const MpiFileIo &other)
 Copy constructor. More...
 
bool isIoProcessor () const
 Can this processor do file I/O ? More...
 
void setIoCommunicator (MPI::Intracomm &communicator)
 Set the communicator. More...
 
void clearCommunicator ()
 Clear (nullify) the communicator. More...
 
bool hasIoCommunicator () const
 Does this object have an associated MPI communicator? More...
 
MPI::Intracomm & ioCommunicator () const
 Get the MPI communicator by reference. More...
 

Protected Member Functions

virtual void makePlan ()
 Make a plan for order in which propagators should be computed. More...
 
- Protected Member Functions inherited from Util::ParamComposite
void setClassName (const char *className)
 Set class name string. More...
 
void setIsRequired (bool isRequired)
 Set or unset the isActive flag. More...
 
void setIsActive (bool isActive)
 Set or unset the isActive flag. More...
 
void setParent (ParamComponent &param, bool next=true)
 Set this to the parent of a child component. More...
 
void addComponent (ParamComponent &param, bool isLeaf=true)
 Add a new ParamComponent object to the format array. More...
 
template<typename Type >
ScalarParam< Type > & add (std::istream &in, const char *label, Type &value, bool isRequired=true)
 Add a new required ScalarParam < Type > object. More...
 
template<typename Type >
CArrayParam< Type > & addCArray (std::istream &in, const char *label, Type *value, int n, bool isRequired=true)
 Add (but do not read) a required C array parameter. More...
 
template<typename Type >
DArrayParam< Type > & addDArray (std::istream &in, const char *label, DArray< Type > &array, int n, bool isRequired=true)
 Add (but do not read) a DArray < Type > parameter. More...
 
template<typename Type , int N>
FArrayParam< Type, N > & addFArray (std::istream &in, const char *label, FArray< Type, N > &array, bool isRequired=true)
 Add (but do not read) a FArray < Type, N > array parameter. More...
 
template<typename Type , int N>
FSArrayParam< Type, N > & addFSArray (std::istream &in, const char *label, FSArray< Type, N > &array, int size, bool isRequired=true)
 Add (but do not read) a FSArray < Type, N > array parameter. More...
 
template<typename Type >
CArray2DParam< Type > & addCArray2D (std::istream &in, const char *label, Type *value, int m, int n, int np, bool isRequired=true)
 Add (but do not read) a CArray2DParam < Type > 2D C-array. More...
 
template<typename Type >
DMatrixParam< Type > & addDMatrix (std::istream &in, const char *label, DMatrix< Type > &matrix, int m, int n, bool isRequired=true)
 Add and read a required DMatrix < Type > matrix parameter. More...
 
- Protected Member Functions inherited from Util::ParamComponent
 ParamComponent ()
 Constructor. More...
 
 ParamComponent (const ParamComponent &other)
 Copy constructor. More...
 

Additional Inherited Members

- Public Types inherited from Pscf::Species
enum  Ensemble
 Statistical ensemble for number of molecules. More...
 
- Public Types inherited from Util::Serializable
typedef BinaryFileOArchive OArchive
 Type of output archive used by save method. More...
 
typedef BinaryFileIArchive IArchive
 Type of input archive used by load method. More...
 
- Static Public Member Functions inherited from Util::ParamComponent
static void initStatic ()
 Initialize static echo member to false. More...
 
static void setEcho (bool echo=true)
 Enable or disable echoing for all subclasses of ParamComponent. More...
 
static bool echo ()
 Get echo parameter. More...
 
- Protected Attributes inherited from Pscf::Species
double phi_
 Volume fraction, set by either setPhi or compute function. More...
 
double mu_
 Chemical potential, set by either setPhi or compute function. More...
 
double q_
 Partition function, set by compute function. More...
 
Ensemble ensemble_
 Statistical ensemble for this species (open or closed). More...
 

Detailed Description

template<class Block>
class Pscf::PolymerTmpl< Block >

Descriptor and MDE solver for an acyclic block polymer.

A PolymerTmpl<Block> object has arrays of Block and Vertex objects. Each Block has two propagator MDE solver objects. The solve() member function solves the modified diffusion equation (MDE) for the entire molecule and computes monomer concentration fields for all blocks.

Definition at line 41 of file PolymerTmpl.h.

Constructor & Destructor Documentation

◆ PolymerTmpl()

template<class Block >
Pscf::PolymerTmpl< Block >::PolymerTmpl

Constructor.

Definition at line 333 of file PolymerTmpl.h.

References Util::ParamComposite::setClassName().

◆ ~PolymerTmpl()

template<class Block >
Pscf::PolymerTmpl< Block >::~PolymerTmpl

Destructor.

Definition at line 347 of file PolymerTmpl.h.

Member Function Documentation

◆ readParameters()

template<class Block >
void Pscf::PolymerTmpl< Block >::readParameters ( std::istream &  in)
virtual

Read and initialize.

Parameters
ininput parameter stream

Reimplemented from Util::ParamComposite.

Definition at line 351 of file PolymerTmpl.h.

References Pscf::Vertex::inPropagatorId(), Pscf::Vertex::size(), and UTIL_CHECK.

◆ solve()

template<class Block >
void Pscf::PolymerTmpl< Block >::solve ( double  phiTot = 1.0)
virtual

Solve modified diffusion equation.

Upon return, propagators for all blocks, molecular partition function q, phi and mu, and the block concentration fields for all blocks are set.

This function should be called within a member function named "compute" of each concrete subclass. This compute function must take an array of chemical potential fields (w-fields) as an argument. Before calling the solve() function declared here, the compute() function of each such subclass must store information required to solve the MDE within each block within a set of implementation dependent private members of the class class that represents a block of a block polymer. The implementation of PolymerTmpl::solve() the calls the solve() function for all propagators in the molecule in a predeternined order.

The optional parameter phiTot is only relevant to problems such as thin films in which the material is excluded from part of the unit cell by an inhogeneous constraint on the sum of monomer concentration (i.e., a "mask").

Parameters
phiTotfraction of volume occupied by material

Definition at line 522 of file PolymerTmpl.h.

References UTIL_CHECK.

Referenced by Pscf::Fd1d::Polymer::compute().

◆ block() [1/2]

template<class Block >
Block & Pscf::PolymerTmpl< Block >::block ( int  id)
inline

Get a specified Block.

Parameters
idblock index, 0 <= id < nBlock

Definition at line 276 of file PolymerTmpl.h.

Referenced by Pscf::Fd1d::Polymer::compute().

◆ block() [2/2]

template<class Block >
Block const & Pscf::PolymerTmpl< Block >::block ( int  id) const
inline

Get a specified Block by const reference.

Parameters
idblock index, 0 <= id < nBlock

Definition at line 283 of file PolymerTmpl.h.

◆ vertex()

template<class Block >
const Vertex & Pscf::PolymerTmpl< Block >::vertex ( int  id) const
inline

Get a specified Vertex by const reference.

Both chain ends and junctions are vertices.

Parameters
idvertex index, 0 <= id < nVertex

Definition at line 269 of file PolymerTmpl.h.

Referenced by Pscf::Fd1d::FieldIo::writeVertexQ().

◆ propagator() [1/3]

template<class Block >
Block::Propagator & Pscf::PolymerTmpl< Block >::propagator ( int  blockId,
int  directionId 
)
inline

◆ propagator() [2/3]

template<class Block >
Block::Propagator const & Pscf::PolymerTmpl< Block >::propagator ( int  blockId,
int  directionId 
) const
inline

Get a const propagator for a specific block and direction.

Parameters
blockIdinteger index of associated block
directionIdinteger index for direction (0 or 1)

Definition at line 313 of file PolymerTmpl.h.

◆ propagator() [3/3]

template<class Block >
Block::Propagator & Pscf::PolymerTmpl< Block >::propagator ( int  id)
inline

Get propagator indexed in order of computation.

The propagator index must satisfy 0 <= id < 2*nBlock.

Parameters
idpropagator index, in order of computation plan

Definition at line 321 of file PolymerTmpl.h.

◆ propagatorId()

template<class Block >
Pair< int > const & Pscf::PolymerTmpl< Block >::propagatorId ( int  id) const
inline

Get propagator identifier, indexed by order of computation.

The return value is a pair of integers. The first integer is a block index between 0 and nBlock - 1, and the second is a propagator direction id, which must be 0 or 1.

Parameters
idpropagator index, in order of computation plan

Definition at line 291 of file PolymerTmpl.h.

References UTIL_CHECK.

◆ nBlock()

template<class Block >
int Pscf::PolymerTmpl< Block >::nBlock
inline

◆ nVertex()

template<class Block >
int Pscf::PolymerTmpl< Block >::nVertex
inline

Number of vertices (junctions and chain ends).

A theorem of graph theory tells us that, for any linear or acyclic branched polymer, nVertex = nBlock + 1.

Definition at line 234 of file PolymerTmpl.h.

◆ nPropagator()

template<class Block >
int Pscf::PolymerTmpl< Block >::nPropagator
inline

Number of propagators (nBlock*2).

Definition at line 248 of file PolymerTmpl.h.

◆ length()

template<class Block >
double Pscf::PolymerTmpl< Block >::length
inline

Sum of the lengths of all blocks in the polymer.

Definition at line 255 of file PolymerTmpl.h.

Referenced by Pscf::Fd1d::System::computeFreeEnergy(), Pscf::Pspc::System< D >::computeFreeEnergy(), and Pscf::Pspg::System< D >::computeFreeEnergy().

◆ makePlan()

template<class Block >
void Pscf::PolymerTmpl< Block >::makePlan
protectedvirtual

Make a plan for order in which propagators should be computed.

The algorithm creates a plan for computing propagators in an that guarantees that the inital conditions required for each propagator are known before it is processed. The algorithm is works for any acyclic branched block copolymer. This function is called in the default implementation of readParameters, and must be called the readParameters method of any subclass.

Definition at line 470 of file PolymerTmpl.h.

References Util::DMatrix< Data >::allocate(), Pscf::Vertex::inPropagatorId(), Pscf::Vertex::size(), and UTIL_THROW.


The documentation for this class was generated from the following file: