54 read(in,
"mobility", mobility_);
57 int nMonomer =
system().mixture().nMonomer();
59 wp_.allocate(nMonomer);
60 wf_.allocate(nMonomer);
61 for (
int i=0; i < nMonomer; ++i) {
62 wp_[i].allocate(meshDimensions);
63 wf_[i].allocate(meshDimensions);
65 dci_.allocate(nMonomer-1);
66 eta_.allocate(nMonomer-1);
67 for (
int i=0; i < nMonomer - 1; ++i) {
68 dci_[i].allocate(meshDimensions);
69 eta_[i].allocate(meshDimensions);
71 dwc_.allocate(meshDimensions);
72 dwp_.allocate(meshDimensions);
79 int meshSize =
system().domain().mesh().size();
80 int nMonomer =
system().mixture().nMonomer();
83 for (
int i=0; i < nMonomer; ++i) {
89 for (
int i=0; i < nMonomer - 1; ++i) {
101 const int nMonomer =
system().mixture().nMonomer();
102 const int meshSize =
system().domain().mesh().size();
109 for (i = 0; i < nMonomer; ++i) {
110 wp_[i] =
system().w().rgrid(i);
118 const double vSystem =
system().domain().unitCell().volume();
119 const double a = -1.0*mobility_;
120 const double b = sqrt(2.0*mobility_*
double(meshSize)/vSystem);
123 for (j = 0; j < nMonomer - 1; ++j) {
125 for (k = 0; k < meshSize; ++k) {
126 eta[k] = b*
random().gaussian();
134 for (j = 0; j < nMonomer - 1; ++j) {
138 for (k = 0; k < meshSize; ++k) {
139 dwc_[k] = a*dc[k] + eta[k];
143 for (i = 0; i < nMonomer; ++i) {
146 for (k = 0; k < meshSize; ++k) {
147 wp[k] += evec*dwc_[k];
153 system().w().setRGrid(wp_);
156 bool isConverged =
false;
159 int compress =
simulator().compressor().compress();
174 for (k = 0; k < meshSize; ++k) {
175 dwp_[k] = wp[k] - dwp_[k];
179 for (i = 0; i < nMonomer; ++i) {
181 for (k = 0; k < meshSize; ++k) {
187 const double ha = 0.5*a;
188 for (j = 0; j < nMonomer - 1; ++j) {
192 for (k = 0; k < meshSize; ++k) {
193 dwc_[k] = ha*( dci[k] + dcp[k]) + eta[k];
195 for (i = 0; i < nMonomer; ++i) {
198 for (k = 0; k < meshSize; ++k) {
199 wf[k] += evec*dwc_[k];
205 system().w().setRGrid(wf_);
208 int compress2 =
simulator().compressor().compress();