11#include <util/param/ParamComposite.h>
12#include <pscf/chem/PolymerModel.h>
17 template <
typename E,
int N>
class FSArray;
115 template <
int D,
class T>
123 System(System<D,T>
const &) =
delete;
124 System<D,T>& operator = (System<D,T>
const & ) =
delete;
147 virtual void readParam(std::istream& in);
206 void compute(
bool needStress =
false);
242 int iterate(
bool isContinuation =
false);
337 typename T::CFields
const &
c()
const;
342 typename T::WFields
const &
w()
const;
347 typename T::WFields&
w();
352 typename T::WFields
const &
h()
const;
357 typename T::WFields&
h();
362 typename T::Mask
const &
mask()
const;
367 typename T::Mask&
mask();
396 typename T::Domain
const &
domain()
const;
428 typename T::ScftThermo
const &
scft()
const;
433 typename T::ScftThermo&
scft();
540 System(
typename T::System& system);
571 typename T::System* systemPtr_;
578 typename T::CFields* cPtr_;
583 typename T::WFields* wPtr_;
588 typename T::WFields* hPtr_;
593 typename T::Mask* maskPtr_;
598 typename T::Mixture* mixturePtr_;
603 typename T::MixtureModifier* mixtureModifierPtr_;
608 typename T::Domain* domainPtr_;
613 typename T::Interaction* interactionPtr_;
618 typename T::ScftThermo* scftPtr_;
623 typename T::Environment* environmentPtr_;
628 typename T::EnvironmentFactory* environmentFactoryPtr_;
633 typename T::Iterator* iteratorPtr_;
638 typename T::IteratorFactory* iteratorFactoryPtr_;
643 typename T::Sweep* sweepPtr_;
648 typename T::SweepFactory* sweepFactoryPtr_;
653 typename T::Simulator* simulatorPtr_;
658 typename T::SimulatorFactory* simulatorFactoryPtr_;
680 bool isAllocatedGrid_;
685 bool isAllocatedBasis_;
697 typename T::Mixture & mixture_();
702 typename T::Domain& domain_();
707 typename T::CFields& c_();
712 void allocateFieldsGrid();
717 void allocateFieldsBasis();
727 void readEcho(std::istream& in, std::string&
string)
const;
737 void readEcho(std::istream& in,
double& value)
const;
744 template <
int D,
class T>
inline
746 {
return *mixturePtr_; }
749 template <
int D,
class T>
inline
753 return *mixtureModifierPtr_;
757 template <
int D,
class T>
inline
761 return *interactionPtr_;
765 template <
int D,
class T>
inline
769 return *interactionPtr_;
773 template <
int D,
class T>
inline
775 {
return *domainPtr_; }
778 template <
int D,
class T>
inline
780 {
return domainPtr_->waveList(); }
785 template <
int D,
class T>
inline
790 template <
int D,
class T>
inline
795 template <
int D,
class T>
inline
800 template <
int D,
class T>
inline
805 template <
int D,
class T>
inline
810 template <
int D,
class T>
inline
812 {
return *maskPtr_; }
815 template <
int D,
class T>
inline
817 {
return *maskPtr_; }
822 template <
int D,
class T>
inline
824 {
return (environmentPtr_); }
827 template <
int D,
class T>
inline
831 return *environmentPtr_;
835 template <
int D,
class T>
inline
839 return *environmentPtr_;
843 template <
int D,
class T>
inline
851 template <
int D,
class T>
inline
859 template <
int D,
class T>
inline
861 {
return (iteratorPtr_); }
864 template <
int D,
class T>
inline
868 return *iteratorPtr_;
872 template <
int D,
class T>
inline
876 return *iteratorPtr_;
880 template <
int D,
class T>
inline
882 {
return (sweepPtr_); }
885 template <
int D,
class T>
inline
887 {
return (simulatorPtr_); }
890 template <
int D,
class T>
inline
894 return *simulatorPtr_;
898 template <
int D,
class T>
inline
902 return *simulatorPtr_;
906 template <
int D,
class T>
inline
908 {
return *fileMasterPtr_; }
911 template <
int D,
class T>
inline
913 {
return *fileMasterPtr_; }
918 template <
int D,
class T>
inline
919 typename T::Mixture & System<D,T>::mixture_()
920 {
return *mixturePtr_; }
923 template <
int D,
class T>
inline
924 typename T::Domain & System<D,T>::domain_()
925 {
return *domainPtr_; }
928 template <
int D,
class T>
inline
929 typename T::CFields & System<D,T>::c_()
Base template for UnitCell<D> classes, D=1, 2 or 3.
T::Simulator const & simulator() const
Get the Simulator (const).
void simulate(int nStep)
Perform a field theoretic simulation (PS-FTS).
T::Mixture const & mixture() const
Get the Mixture (const).
T::WFields const & w() const
Get the chemical potential (w) fields (const).
void sweep()
Sweep in parameter space, solving an SCF problem at each point.
T::Interaction const & interaction() const
Get the Interaction (const).
T::Domain const & domain() const
Get the Domain (const).
bool hasSimulator() const
Does this system have a Simulator?
void computeStress()
Compute SCFT stress.
T::CFields const & c() const
Get the monomer concentration (c) fields (const).
T::WaveList & waveList()
Get the WaveList (non-const).
bool hasEnvironment() const
Does this system have an Environment?
FileMaster const & fileMaster() const
Get the FileMaster (const).
virtual void setThreadCount(int nThread)
Set the number of threads given as a command line argument.
bool hasSweep() const
Does this system have a Sweep?
void readCommands()
Read and process commands from the default command file.
T::ScftThermo const & scft() const
Get the ScftThermo object (const).
T::Iterator const & iterator() const
Get the Iterator (const).
void clearUnitCellData()
Notify System members that unit cell parameters have been modified.
void clearCFields()
Mark c-fields and free energy as outdated or invalid.
void setUnitCell(UnitCell< D > const &unitCell)
Set parameters of the associated unit cell.
virtual void readParameters(std::istream &in)
Read body of parameter block (without opening and closing lines).
void compute(bool needStress=false)
Solve the modified diffusion equation once, without iteration.
T::Environment const & environment() const
Get the Environment (const).
int iterate(bool isContinuation=false)
Iteratively solve a SCFT problem.
void readParam()
Read input parameters from default param file.
void clearTimers()
Clear all timers.
T::Mask const & mask() const
Get the mask (const).
T::MixtureModifier & mixtureModifier()
Get the MixtureModifier (non-const).
bool hasIterator() const
Does this system have an Iterator?
void writeParamNoSweep(std::ostream &out) const
Write partial parameter file to an ostream.
void writeTimers(std::ostream &out) const
Write timer information to an output stream.
T::WFields const & h() const
Get the external potential (h) fields (const).
void setOptions(int argc, char **argv)
Process command line options.
A fixed capacity (static) contiguous array with a variable logical size.
A FileMaster manages input and output files for a simulation.
ParamComposite()
Constructor.
#define UTIL_ASSERT(condition)
Assertion macro suitable for debugging serial or parallel code.
Type
Scoped enumeration of polymer model types.
Periodic fields and crystallography.
Class templates for real-valued periodic fields.
PSCF package top-level namespace.
Utility classes for scientific computation.