PSCF v1.3
Pscf::Prdc::Environment Class Reference

Base class mask and external field generator for variable-cell SCFT. More...

#include <Environment.h>

Inheritance diagram for Pscf::Prdc::Environment:
Pscf::EnvironmentBase Util::ParamComposite Pscf::ParameterModifier Util::ParamComponent Util::Serializable Util::MpiFileIo

Public Member Functions

 Environment ()
 Constructor.
 ~Environment ()
 Destructor.
void reset ()
 Sets needsUpdate() to true and hasStress() to false.
template<int D, class PT, class ST>
void computeStress (MixtureReal< D, PT, ST > const &mixture, FSArray< bool, 6 > const &flexibleParams)
 Compute and store the environment-modified SCFT stress.
virtual double modifyStress (int paramId, double stress) const
 Modify stress to account for Environment, for one lattice parameter.
double stress (int paramId) const
 Return the environment-modified SCFT stress for one parameter.
void writeStress (std::ostream &out) const
 Write the environment-modified SCFT stress.
bool hasStress () const
 Has the stress been calculated?
void setNParams (int nParams)
 Set the number of lattice parameters.
Public Member Functions inherited from Pscf::EnvironmentBase
 EnvironmentBase ()
 Constructor.
 ~EnvironmentBase ()
 Destructor.
virtual void generate ()=0
 Checks if fields need to be (re)generated.
bool needsUpdate () const
 Does this Environment need to be updated?
bool generatesMask () const
 Does this Environment generate a mask?
bool generatesExternalFields () const
 Does this Environment generate external fields?
void setClassName (const char *className)
 Set class name string.
Public Member Functions inherited from Util::ParamComposite
 ParamComposite ()
 Constructor.
 ParamComposite (const ParamComposite &other)
 Copy constructor.
 ParamComposite (int capacity)
 Constructor.
virtual ~ParamComposite ()
 Virtual destructor.
void resetParam ()
 Resets ParamComposite to its empty state.
virtual void readParam (std::istream &in)
 Read the parameter file block.
virtual void readParamOptional (std::istream &in)
 Read optional parameter file block.
virtual void readParameters (std::istream &in)
 Read the body of parameter block, without begin and end lines.
virtual void writeParam (std::ostream &out) const
 Write all parameters to an output stream.
virtual void load (Serializable::IArchive &ar)
 Load all parameters from an input archive.
virtual void loadOptional (Serializable::IArchive &ar)
 Load an optional ParamComposite.
virtual void loadParameters (Serializable::IArchive &ar)
 Load state from archive, without adding Begin and End lines.
virtual void save (Serializable::OArchive &ar)
 Saves all parameters to an archive.
void saveOptional (Serializable::OArchive &ar)
 Saves isActive flag, and then calls save() iff isActive is true.
void readParamComposite (std::istream &in, ParamComposite &child, bool next=true)
 Add and read a required child ParamComposite.
void readParamCompositeOptional (std::istream &in, ParamComposite &child, bool next=true)
 Add and attempt to read an optional child ParamComposite.
template<typename Type>
ScalarParam< Type > & read (std::istream &in, const char *label, Type &value)
 Add and read a new required ScalarParam < Type > object.
template<typename Type>
ScalarParam< Type > & readOptional (std::istream &in, const char *label, Type &value)
 Add and read a new optional ScalarParam < Type > object.
template<typename Type>
CArrayParam< Type > & readCArray (std::istream &in, const char *label, Type *value, int n)
 Add and read a required C array parameter.
template<typename Type>
CArrayParam< Type > & readOptionalCArray (std::istream &in, const char *label, Type *value, int n)
 Add and read an optional C array parameter.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
template<typename Type>
DSymmMatrixParam< Type > & readDSymmMatrix (std::istream &in, const char *label, DMatrix< Type > &matrix, int n)
 Add and read a required symmetrix DMatrix.
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.
BeginreadBegin (std::istream &in, const char *label, bool isRequired=true)
 Add and read a class label and opening bracket.
EndreadEnd (std::istream &in)
 Add and read the closing bracket.
BlankreadBlank (std::istream &in)
 Add and read a new Blank object, representing a blank line.
void loadParamComposite (Serializable::IArchive &ar, ParamComposite &child, bool next=true)
 Add and load a required child ParamComposite.
void loadParamCompositeOptional (Serializable::IArchive &ar, ParamComposite &child, bool next=true)
 Add and load an optional child ParamComposite if isActive.
template<typename Type>
ScalarParam< Type > & loadParameter (Serializable::IArchive &ar, const char *label, Type &value, bool isRequired)
 Add and load a new ScalarParam < Type > object.
template<typename Type>
ScalarParam< Type > & loadParameter (Serializable::IArchive &ar, const char *label, Type &value)
 Add and load new required ScalarParam < Type > object.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
void addParamComposite (ParamComposite &child, bool next=true)
 Add a child ParamComposite object to the format array.
BeginaddBegin (const char *label)
 Add a Begin object representing a class name and bracket.
EndaddEnd ()
 Add a closing bracket.
BlankaddBlank ()
 Create and add a new Blank object, representing a blank line.
std::string className () const
 Get class name string.
bool isRequired () const
 Is this ParamComposite required in the input file?
bool isActive () const
 Is this parameter active?
Public Member Functions inherited from Util::ParamComponent
virtual ~ParamComponent ()
 Destructor.
void setIndent (const ParamComponent &parent, bool next=true)
 Set indent level.
std::string indent () const
 Return indent string for this object (string of spaces).
template<class Archive>
void serialize (Archive &ar, const unsigned int version)
 Serialize this ParamComponent as a string.
Public Member Functions inherited from Util::Serializable
virtual ~Serializable ()
 Destructor.
Public Member Functions inherited from Util::MpiFileIo
 MpiFileIo ()
 Constructor.
 MpiFileIo (const MpiFileIo &other)
 Copy constructor.
bool isIoProcessor () const
 Can this processor do file I/O ?
Public Member Functions inherited from Pscf::ParameterModifier
 ParameterModifier ()
 Constructor.
 ~ParameterModifier ()
 Destructor.
virtual GArray< ParameterTypegetParameterTypes ()
 Return specialized sweep parameter types to add to the Sweep object.
virtual void setParameter (std::string name, DArray< int > ids, double value, bool &success)
 Set the value of a specialized sweep parameter.
virtual double getParameter (std::string name, DArray< int > ids, bool &success) const
 Get the value of a specialized sweep parameter.
void setParameter (std::string name, DArray< int > ids, double value)
 Set the value of a specialized sweep parameter.
double getParameter (std::string name, DArray< int > ids) const
 Get the value of a specialized sweep parameter.

Additional Inherited Members

Public Types inherited from Util::Serializable
typedef BinaryFileOArchive OArchive
 Type of output archive used by save method.
typedef BinaryFileIArchive IArchive
 Type of input archive used by load method.
Static Public Member Functions inherited from Util::ParamComponent
static void initStatic ()
 Initialize static echo member to false.
static void setEcho (bool echo=true)
 Enable or disable echoing for all subclasses of ParamComponent.
static bool echo ()
 Get echo parameter.
Protected Member Functions inherited from Pscf::EnvironmentBase
void setNeedsUpdateFalse ()
 Set needsUpdate to false.
void setGenerateBools (bool generatesMask, bool generatesExt)
 Set generatesMask and generatesExternalFields.
void setClassName (const char *className)
 Set class name string.
void setIsRequired (bool isRequired)
 Set or unset the isActive flag.
void setIsActive (bool isActive)
 Set or unset the isActive flag.
void setParent (ParamComponent &param, bool next=true)
 Set this to the parent of a child component.
void addComponent (ParamComponent &param, bool isLeaf=true)
 Add a new ParamComponent object to the format array.
template<typename Type>
ScalarParam< Type > & add (std::istream &in, const char *label, Type &value, bool isRequired=true)
 Add a new required ScalarParam < Type > object.
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.
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.
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.
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.
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.
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.
Protected Member Functions inherited from Util::ParamComponent
 ParamComponent ()
 Constructor.
 ParamComponent (const ParamComponent &other)
 Copy constructor.

Detailed Description

Base class mask and external field generator for variable-cell SCFT.

In general, the mask and external fields generated by an Environment are dependent on the lattice parameter(s) of the calculation box. As a result, in variable-cell SCFT calculations, the mask and external fields may distort non-affinely upon changing the lattice parameters. Such a non-affine distortion will contribute to the stress. Therefore, in addition to the features defined in EnvironmentBase, this class contains members and methods that allow the Environment to compute, store, and write the stress for each lattice parameter, taking into account the contributions from any non-affine distortions.

Furthermore, it may be preferable with certain Environments to minimize a property other than fHelmholtz with respect to the lattice parameters. For instance, in a thin film it is useful to minimize the excess free energy per unit area, (fHelmholtz - fRef) * Delta, where fRef is a reference free energy and Delta is the film thickness. To minimize alternative free-energetic properties, one must use an alternate form of the stress. Subclasses of this class may define and use such an alternate form of the stress, the details of which will vary depending on the class.

The stress-related methods of this class are only used if the unit cell is flexible, which is not mandatory. Thus, the modifyStress() method, which performs the environment-specific aspects of the stress calculation, is not a pure virtual method, and it only needs to be redefined by a subclass if the subclass is meant to be paired with a flexible unit cell.

To use the stress-related features of this class, setNParam must first be called.

Definition at line 58 of file Environment.h.

Constructor & Destructor Documentation

◆ Environment()

Environment::Environment ( )

Constructor.

Definition at line 14 of file Environment.cpp.

References Pscf::EnvironmentBase::setClassName().

◆ ~Environment()

Environment::~Environment ( )

Destructor.

Definition at line 20 of file Environment.cpp.

Member Function Documentation

◆ reset()

void Environment::reset ( )
virtual

Sets needsUpdate() to true and hasStress() to false.

Whenever system properties that may affect the Environment are changed, reset() should be called. Such properties include lattice parameters and any input parameters in the Environment block of the parameter file.

Methods that use the Environment for calculations should first check if needsUpdate() is true, and if so, call generate(). Or, if a method expects that the Environment should always be up to date when it is called, it can simply check that needsUpdate() is false.

Reimplemented from Pscf::EnvironmentBase.

Definition at line 24 of file Environment.cpp.

References Pscf::EnvironmentBase::reset().

◆ computeStress()

template<int D, class PT, class ST>
void Environment::computeStress ( MixtureReal< D, PT, ST > const & mixture,
FSArray< bool, 6 > const & flexibleParams )

Compute and store the environment-modified SCFT stress.

First, the conventional SCFT stress is accessed from the Mixture object. Then, the modifyStress method is used to add any additional stress contributions due to the Environment and impose transformations (optional) on the stress to allow it to minimize a property other than fHelmholtz. The resulting stress is then stored, and can be accessed via the stress() method.

Upon returning, hasStress = true.

Parameters
mixtureconst reference to Mixture object with stress
flexibleParamsarray indicating which stresses to compute

Definition at line 176 of file Environment.h.

References Pscf::Prdc::MixtureReal< D, PT, ST >::hasStress(), modifyStress(), Pscf::EnvironmentBase::needsUpdate(), stress(), Pscf::Prdc::MixtureReal< D, PT, ST >::stress(), and UTIL_CHECK.

◆ modifyStress()

double Environment::modifyStress ( int paramId,
double stress ) const
virtual

Modify stress to account for Environment, for one lattice parameter.

This virtual method performs only the Environment-specific aspects of the stress calculation, while all other aspects are handled by the computeStress method above.

This method will only be called when the Environment is used in combination with a variable unit cell. Subclasses can thus leave the method unimplemented if they will only be used in rigid cells.

Parameters
paramIdindex of the lattice parameter with this stress
stressbaseline SCFT stress computed by a Mixture object

Definition at line 33 of file Environment.cpp.

References stress(), and UTIL_THROW.

Referenced by computeStress().

◆ stress()

double Environment::stress ( int paramId) const

Return the environment-modified SCFT stress for one parameter.

Parameters
paramIdindex of the lattice parameter with this stress

Definition at line 37 of file Environment.cpp.

References UTIL_CHECK, and UTIL_THROW.

Referenced by computeStress(), and modifyStress().

◆ writeStress()

void Environment::writeStress ( std::ostream & out) const

Write the environment-modified SCFT stress.

Parameters
outoutput stream

Definition at line 51 of file Environment.cpp.

References UTIL_CHECK.

◆ hasStress()

bool Environment::hasStress ( ) const

Has the stress been calculated?

Definition at line 71 of file Environment.cpp.

◆ setNParams()

void Environment::setNParams ( int nParams)

Set the number of lattice parameters.

This will throw an error if it has been called more than once.

Parameters
nParamsnumber of lattice parameters

Definition at line 75 of file Environment.cpp.

References UTIL_CHECK.


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