1#ifndef RP_CHI_DERIVATIVE_TPP
2#define RP_CHI_DERIVATIVE_TPP
11#include "BinaryChiDerivative.h"
12#include <pscf/interaction/Interaction.h>
22 template <
int D,
class T>
24 typename T::System& system)
25 : AverageAnalyzerT(simulator, system)
32 template <
int D,
class T>
37 const int nMonomer = system().mixture().nMonomer();
41 const double vSystem = system().domain().unitCell().volume();
42 const double vMonomer = system().mixture().vMonomer();
43 const double nMonomerSystem = vSystem / vMonomer;
44 const int meshSize = system().domain().mesh().size();
45 double chi = system().interaction().chi(0,1);
48 if (!system().c().hasData()) {
51 if (!simulator().hasWc()){
52 simulator().computeWc();
54 if (!simulator().hasHamiltonian()) {
55 simulator().computeHamiltonian();
59 double hField = simulator().fieldHamiltonian();
60 hField /= (double)nMonomerSystem;
63 double dfdchi = -(hField - 0.5*simulator().sc(nMonomer - 1))/chi
67 dfdchi *= (double)nMonomerSystem;
70 dfdchi += double(meshSize)/(2.0 * chi);
double compute() override
Compute and return the derivative of H w/ respect to chi.
BinaryChiDerivative(typename T::Simulator &simulator, typename T::System &system)
Constructor.
void setClassName(const char *className)
Set class name string.
#define UTIL_CHECK(condition)
Assertion macro suitable for serial or parallel production code.
Class templates for real-valued periodic fields.
PSCF package top-level namespace.