1#ifndef PRDC_CL_SYSTEM_H
2#define PRDC_CL_SYSTEM_H
11#include <util/param/ParamComposite.h>
12#include <pscf/chem/PolymerModel.h>
17 template <
typename E,
int N>
class FSArray;
72 template <
int D,
class T>
79 using MixtureT =
typename T::Mixture;
80 using InteractionT =
typename T::Interaction;
81 using DomainT =
typename T::Domain;
82 using WFieldsT =
typename T::WFields;
83 using CFieldsT =
typename T::CFields;
84 using CFieldT =
typename T::CField;
106 System(
typename T::System& system);
140 virtual void readParam(std::istream& in);
199 void compute(
bool needStress =
false);
273 typename T::CFields
const &
c()
const;
278 typename T::WFields&
w();
283 typename T::WFields
const &
w()
const;
298 typename T::MixtureModifier& mixtureModifier();
309 typename T::Interaction
const &
interaction()
const;
314 typename T::Domain
const &
domain()
const;
320 typename T::Simulator& simulator();
325 typename T::Simulator
const & simulator()
const;
350 void writeTimers(std::ostream& out)
const;
387 typename T::WFields w_;
392 typename T::CFields c_;
399 typename T::System* systemPtr_;
404 typename T::Mixture* mixturePtr_;
410 typename T::MixtureModifier* mixtureModifierPtr_;
416 typename T::Domain* domainPtr_;
421 typename T::Interaction* interactionPtr_;
427 typename T::Simulator* simulatorPtr_;
457 typename T::Mixture & mixture_();
462 typename T::Domain& domain_();
477 void readEcho(std::istream& in, std::string&
string)
const;
487 void readEcho(std::istream& in,
double& value)
const;
494 template <
int D,
class T>
inline
496 {
return *mixturePtr_; }
500 template <
int D,
class T>
inline
504 return *mixtureModifierPtr_;
509 template <
int D,
class T>
inline
513 return *interactionPtr_;
517 template <
int D,
class T>
inline
521 return *interactionPtr_;
525 template <
int D,
class T>
inline
527 {
return *domainPtr_; }
531 template <
int D,
class T>
inline
535 return *simulatorPtr_;
539 template <
int D,
class T>
inline
540 typename T::Simulator
const & System<D,T>::simulator()
const
543 return *simulatorPtr_;
548 template <
int D,
class T>
inline
550 {
return *fileMasterPtr_; }
553 template <
int D,
class T>
inline
555 {
return *fileMasterPtr_; }
558 template <
int D,
class T>
inline
563 template <
int D,
class T>
inline
568 template <
int D,
class T>
inline
575 template <
int D,
class T>
inline
576 typename T::Mixture & System<D,T>::mixture_()
577 {
return *mixturePtr_; }
580 template <
int D,
class T>
inline
581 typename T::Domain & System<D,T>::domain_()
582 {
return *domainPtr_; }
Base class template for a complex CL-FTS system.
void readCommands()
Read and process commands from the default command file.
T::WFields & w()
Get the chemical potential (w) fields (non-const).
void readParam()
Read input parameters from default param file.
FileMaster & fileMaster()
Get the FileMaster (non-const).
virtual void readParameters(std::istream &in)
Read body of parameter block (without opening and closing lines).
T::Domain const & domain() const
Get the Domain (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.
T::CFields const & c() const
Get the monomer concentration (c) fields (const).
void compute(bool needStress=false)
Solve the modified diffusion equation once, without iteration.
T::Mixture const & mixture() const
Get the Mixture (const).
virtual void setThreadCount(int nThread)
Set the number of threads given as a command line argument.
void setUnitCell(UnitCell< D > const &unitCell)
Set parameters of the associated unit cell.
void setOptions(int argc, char **argv)
Process command line options.
T::Interaction & interaction()
Get the Interaction (non-const).
System(typename T::System &system)
Constructor.
void simulate(int nStep)
Perform a field theoretic simulation (PS-FTS).
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.
Complex-valued periodic fields (class templates).
Periodic fields and crystallography.
void allocateFields(DArray< FT > &fields, int n, IntVec< D > const &dimension)
Allocate a DArray of fields.
PSCF package top-level namespace.
Utility classes for scientific computation.