12#include <pscf/solvers/PolymerTmpl.tpp>
13#include <pscf/chem/PolymerModel.h>
21 template <
int D,
class T>
30 template <
int D,
class T>
37 template <
int D,
class T>
44 template <
int D,
class T>
47 for (
int j = 0; j <
nBlock(); ++j) {
48 block(j).clearUnitCellData();
56 template <
int D,
class T>
62 for (
int j = 0; j <
nBlock(); ++j) {
63 monomerId =
block(j).monomerId();
64 block(j).setupSolver(wFields[monomerId]);
75 for (
int i = 0; i <
nBlock(); ++i) {
76 block(i).computeConcentrationThread(prefactor);
79 prefactor = phi() / ( q() * (double)nBead() );
80 for (
int i = 0; i < nBlock(); ++i) {
81 block(i).computeConcentrationBead(prefactor);
90 template <
int D,
class T>
99 for (
int i = 0; i <
nBlock(); ++i) {
100 block(i).computeStressThread(prefactor);
103 prefactor =
phi() / (
q() * (double)
nBead() );
104 for (
int i = 0; i <
nBlock(); ++i) {
105 block(i).computeStressBead(prefactor);
111 for (
int i = 0; i < nParam_; ++i) {
116 for (
int i = 0; i < nBlock(); ++i) {
117 for (
int j = 0; j < nParam_; ++j){
118 stress_[j] +=
block(i).stress(j);
void setNParams(int nParam)
Set the number of unit cell parameters.
BlockT & block(int id)
Get a specified Block (solver and descriptor).
void compute(DArray< typename T::RField > const &wFields, double phiTot=1.0)
Compute MDE solutions and block concentrations.
void clearUnitCellData()
Clear all data that depends on unit cell parameters.
void computeStress()
Compute SCFT stress contribution from this polymer species.
void setClassName(const char *className)
Set class name string.
#define UTIL_CHECK(condition)
Assertion macro suitable for serial or parallel production code.
bool isThread()
Is the thread model in use ?
Class templates for real-valued periodic fields.
PSCF package top-level namespace.