1#ifndef PSCF_MIXTURE_TMPL_H
2#define PSCF_MIXTURE_TMPL_H
11#include <pscf/chem/Monomer.h>
12#include <util/param/ParamComposite.h>
13#include <util/containers/DArray.h>
25 template <
class TP,
class TS>
189 template <
class TP,
class TS>
191 {
return nMonomer_; }
193 template <
class TP,
class TS>
195 {
return nPolymer_; }
197 template <
class TP,
class TS>
199 {
return nSolvent_; }
201 template <
class TP,
class TS>
205 template <
class TP,
class TS>
209 return monomers_[id];
212 template <
class TP,
class TS>
216 return monomers_[id];
219 template <
class TP,
class TS>
223 return polymers_[id];
226 template <
class TP,
class TS>
230 return polymers_[id];
233 template <
class TP,
class TS>
237 return solvents_[id];
240 template <
class TP,
class TS>
244 return solvents_[id];
247 template <
class TP,
class TS>
249 {
return vMonomer_; }
256 template <
class TP,
class TS>
272 template <
class TP,
class TS>
279 template <
class TP,
class TS>
283 read<int>(in,
"nMonomer", nMonomer_);
284 monomers_.allocate(nMonomer_);
285 for (
int i = 0; i < nMonomer_; ++i) {
286 monomers_[i].setId(i);
288 readDArray< Monomer >(in,
"monomers", monomers_, nMonomer_);
298 read<int>(in,
"nPolymer", nPolymer_);
303 readOptional<int>(in,
"nSolvent", nSolvent_);
309 polymers_.allocate(nPolymer_);
310 for (
int i = 0; i < nPolymer_; ++i) {
311 readParamComposite(in, polymer(i));
312 nBlock_ = nBlock_ + polymer(i).nBlock();
318 for (
int i = 0; i < nPolymer_; ++i) {
319 for (
int j = 0; j < polymer(i).nBlock(); ++j) {
320 monomerId = polymer(i).block(j).monomerId();
321 kuhn = monomer(monomerId).kuhn();
322 polymer(i).block(j).setKuhn(kuhn);
331 solvents_.allocate(nSolvent_);
332 for (
int i = 0; i < nSolvent_; ++i) {
333 readParamComposite(in, solvent(i));
340 readOptional(in,
"vMonomer", vMonomer_);
A mixture of polymer and solvent species.
MixtureTmpl()
Constructor.
Polymer & polymer(int id)
Get a polymer object.
int nBlock() const
Get number of total blocks in the mixture across all polymers.
int nSolvent() const
Get number of solvent (point particle) species.
Solvent const & solvent(int id) const
Set a solvent solver object.
double vMonomer() const
Get monomer reference volume (set to 1.0 by default).
Polymer const & polymer(int id) const
Get a polymer object by const reference.
Monomer & monomer(int id)
Get a Monomer type descriptor (non-const reference).
TP Polymer
Polymer species solver typename.
int nMonomer() const
Get number of monomer types.
~MixtureTmpl()
Destructor.
Monomer const & monomer(int id) const
Get a Monomer type descriptor (const reference).
Solvent & solvent(int id)
Set a solvent solver object.
virtual void readParameters(std::istream &in)
Read parameters from file and initialize.
TS Solvent
Solvent species solver typename.
int nPolymer() const
Get number of polymer species.
Descriptor for a monomer or particle type.
Dynamically allocatable contiguous array template.
An object that can read multiple parameters from file.
#define UTIL_CHECK(condition)
Assertion macro suitable for serial or parallel production code.
C++ namespace for polymer self-consistent field theory (PSCF).
Utility classes for scientific computation.