146 bool isFlexible =
system().iterator().isFlexible();
153 int nMonomer =
system().mixture().nMonomer();
154 int nBasis =
system().domain().basis().nBasis();
158 for (i=0; i < nMonomer; ++i) {
159 newFieldPtr = &(trial_.field(i));
164 for (j=0; j < nBasis; ++j) {
165 (*newFieldPtr)[j] = coeff*(*oldFieldPtr)[j];
172 for (j=0; j < nBasis; ++j) {
173 (*newFieldPtr)[j] += coeff*(*oldFieldPtr)[j];
182 unitCellParameters_ =
system().domain().unitCell().parameters();
190 =
system().iterator().flexibleParams();
192 =
system().domain().unitCell().nParameter();
198 for (
int i = 0; i < nParameter; ++i) {
201 unitCellParameters_[i] = 0.0;
205 unitCellParameters_[i] += coeff*parameter;
213 trial_.unitCell().setParameters(unitCellParameters_);
216 bool newCellParams(
true);
217 for (
int i = 0; i < oldParameters.
size(); i++) {
218 if (fabs(oldParameters[i] - unitCellParameters_[i]) < 1e-10) {
219 newCellParams =
false;
225 trial_.setSystemState(newCellParams);
235 template <
int D,
class T>
237 {
return system().iterate(isContinuation); };
245 template <
int D,
class T>
248 bool isFlexible =
system().iterator().isFlexible();
259 template <
int D,
class T>
269 outputSummary(logFile_);
273 template <
int D,
class T>
274 void Sweep<D,T>::outputSolution()
277 std::string outFileName;
278 std::string indexString =
toString(SweepTmplT::nAccept() - 1);
281 outFileName = SweepTmplT::baseFileName_;
282 outFileName += indexString;
283 outFileName +=
".stt";
284 system().fileMaster().openOutputFile(outFileName, out);
287 system().writeParamNoSweep(out);
289 system().scft().write(out);
294 outFileName = SweepTmplT::baseFileName_;
295 outFileName += indexString;
297 if (system().w().isSymmetric()) {
298 outFileName +=
".bf";
299 system().w().writeBasis(outFileName);
301 outFileName +=
".rf";
302 system().w().writeRGrid(outFileName);
308 outFileName = SweepTmplT::baseFileName_;
309 outFileName += indexString;
311 outFileName +=
".rf";
312 system().c().writeRGrid(outFileName);
316 if (writeCBasis_ && system().c().isSymmetric()) {
318 outFileName = SweepTmplT::baseFileName_;
319 outFileName += indexString;
321 outFileName +=
".bf";
322 system().c().writeBasis(outFileName);
326 if (writeWRGrid_ && system().w().isSymmetric()) {
327 outFileName = SweepTmplT::baseFileName_;
328 outFileName += indexString;
330 outFileName +=
".rf";
331 system().w().writeRGrid(outFileName);
336 template <
int D,
class T>
337 void Sweep<D,T>::outputSummary(std::ostream& out)
339 int i = SweepTmplT::nAccept() - 1;
340 double sNew = SweepTmplT::s(0);
341 if (!system().scft().hasData()) system().scft().compute();
342 out <<
Int(i,5) <<
Dbl(sNew)
343 <<
Dbl(system().scft().fHelmholtz(),16)
344 <<
Dbl(system().scft().pressure(),16);
348 template <
int D,
class T>
350 { logFile_.close(); }