1#ifndef PRDC_SYSTEM_TMPL_H
2#define PRDC_SYSTEM_TMPL_H
11#include <util/param/ParamComposite.h>
12#include <pscf/chem/PolymerModel.h>
17 template <
typename E,
int N>
class FSArray;
101 template <
int D,
class T>
108 using MixtureT =
typename T::Mixture;
109 using InteractionT =
typename T::Interaction;
110 using DomainT =
typename T::Domain;
111 using WFieldsT =
typename T::WFields;
112 using CFieldsT =
typename T::CFields;
113 using MaskT =
typename T::Mask;
114 using RFieldT =
typename T::RField;
169 virtual void readParam(std::istream& in);
228 void compute(
bool needStress =
false);
264 int iterate(
bool isContinuation =
false);
359 typename T::CFields
const &
c()
const;
364 typename T::WFields&
w();
369 typename T::WFields
const &
w()
const;
374 typename T::WFields&
h();
379 typename T::WFields
const &
h()
const;
389 typename T::Mask
const &
mask()
const;
413 typename T::Interaction
const &
interaction()
const;
418 typename T::Domain
const &
domain()
const;
433 typename T::Environment
const &
environment()
const;
438 typename T::ScftThermo&
scft();
443 typename T::ScftThermo
const &
scft()
const;
458 typename T::Iterator
const &
iterator()
const;
478 typename T::Simulator
const &
simulator()
const;
555 typename T::WFields w_;
560 typename T::CFields c_;
565 typename T::WFields h_;
570 typename T::Mask mask_;
577 typename T::System* systemPtr_;
582 typename T::Mixture* mixturePtr_;
587 typename T::MixtureModifier* mixtureModifierPtr_;
592 typename T::Domain* domainPtr_;
597 typename T::Interaction* interactionPtr_;
602 typename T::Environment* environmentPtr_;
607 typename T::EnvironmentFactory* environmentFactoryPtr_;
612 typename T::ScftThermo* scftPtr_;
617 typename T::Iterator* iteratorPtr_;
622 typename T::IteratorFactory* iteratorFactoryPtr_;
627 typename T::Sweep* sweepPtr_;
632 typename T::SweepFactory* sweepFactoryPtr_;
637 typename T::Simulator* simulatorPtr_;
642 typename T::SimulatorFactory* simulatorFactoryPtr_;
664 bool isAllocatedGrid_;
669 bool isAllocatedBasis_;
687 typename T::Mixture & mixture_();
692 typename T::Domain& domain_();
697 void allocateFieldsGrid();
702 void allocateFieldsBasis();
712 void readEcho(std::istream& in, std::string&
string)
const;
722 void readEcho(std::istream& in,
double& value)
const;
729 template <
int D,
class T>
inline
731 {
return *mixturePtr_; }
734 template <
int D,
class T>
inline
738 return *mixtureModifierPtr_;
742 template <
int D,
class T>
inline
746 return *interactionPtr_;
750 template <
int D,
class T>
inline
754 return *interactionPtr_;
758 template <
int D,
class T>
inline
760 {
return *domainPtr_; }
763 template <
int D,
class T>
inline
765 {
return (environmentPtr_); }
768 template <
int D,
class T>
inline
772 return *environmentPtr_;
776 template <
int D,
class T>
inline
780 return *environmentPtr_;
784 template <
int D,
class T>
inline
792 template <
int D,
class T>
inline
800 template <
int D,
class T>
inline
802 {
return (iteratorPtr_); }
805 template <
int D,
class T>
inline
809 return *iteratorPtr_;
813 template <
int D,
class T>
inline
817 return *iteratorPtr_;
821 template <
int D,
class T>
inline
823 {
return (sweepPtr_); }
826 template <
int D,
class T>
inline
828 {
return (simulatorPtr_); }
831 template <
int D,
class T>
inline
835 return *simulatorPtr_;
839 template <
int D,
class T>
inline
843 return *simulatorPtr_;
847 template <
int D,
class T>
inline
849 {
return *fileMasterPtr_; }
852 template <
int D,
class T>
inline
854 {
return *fileMasterPtr_; }
857 template <
int D,
class T>
inline
862 template <
int D,
class T>
inline
867 template <
int D,
class T>
inline
872 template <
int D,
class T>
inline
877 template <
int D,
class T>
inline
882 template <
int D,
class T>
inline
887 template <
int D,
class T>
inline
894 template <
int D,
class T>
inline
895 typename T::Mixture & SystemTmpl<D,T>::mixture_()
896 {
return *mixturePtr_; }
899 template <
int D,
class T>
inline
900 typename T::Domain & SystemTmpl<D,T>::domain_()
901 {
return *domainPtr_; }
T::Domain const & domain() const
Get the Domain (const).
T::Mask & mask()
Get the mask (non-const).
void compute(bool needStress=false)
Solve the modified diffusion equation once, without iteration.
void computeStress()
Compute SCFT stress.
bool hasIterator() const
Does this system have an Iterator?
T::Simulator & simulator()
Get the Simulator (non-const).
T::Interaction & interaction()
Get the Interaction (non-const).
int iterate(bool isContinuation=false)
Iteratively solve a SCFT problem.
virtual void readParameters(std::istream &in)
Read body of parameter block (without opening and closing lines).
T::Environment & environment()
Get the Environment (non-const).
T::ScftThermo & scft()
Get the ScftThermo object (non-const).
void clearCFields()
Mark c-fields and free energy as outdated or invalid.
void readParam()
Read input parameters from default param file.
void setUnitCell(UnitCell< D > const &unitCell)
Set parameters of the associated unit cell.
T::WFields & w()
Get the chemical potential (w) fields (non-const).
void setOptions(int argc, char **argv)
Process command line options.
void simulate(int nStep)
Perform a field theoretic simulation (PS-FTS).
T::MixtureModifier & mixtureModifier()
Get the MixtureModifier (non-const).
bool hasSimulator() const
Does this system have a Simulator?
bool hasSweep() const
Does this system have a Sweep?
T::Mixture const & mixture() const
Get the Mixture (const).
void sweep()
Sweep in parameter space, solving an SCF problem at each point.
T::Iterator & iterator()
Get the Iterator (non-const).
void writeTimers(std::ostream &out) const
Write timer information to an output stream.
void clearTimers()
Clear timers.
void readCommands()
Read and process commands from the default command file.
virtual void setThreadCount(int nThread)
Set the number of threads given as a command line argument.
T::CFields const & c() const
Get the monomer concentration (c) fields (const).
void writeParamNoSweep(std::ostream &out) const
Write partial parameter file to an ostream.
bool hasEnvironment() const
Does this system have an Environment?
void clearUnitCellData()
Notify System members that unit cell parameters have been modified.
SystemTmpl(typename T::System &system)
Constructor.
FileMaster & fileMaster()
Get the FileMaster (non-const).
T::WFields & h()
Get the external potential (h) fields (non-const).
Base template for UnitCell<D> classes, D=1, 2 or 3.
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.
PSCF package top-level namespace.
Utility classes for scientific computation.