1 #ifndef SIMP_SIMPLE_PERIODIC_EXTERNAL_H 2 #define SIMP_SIMPLE_PERIODIC_EXTERNAL_H 11 #include <simp/boundary/Boundary.h> 12 #include <util/space/Dimension.h> 13 #include <util/space/Vector.h> 14 #include <util/param/ParamComposite.h> 105 void set(std::string name,
double value);
110 double get(std::string name)
const;
145 static const int MaxAtomType = 2;
151 double externalParameter_;
163 double interfaceWidth_;
183 const Vector cellLengths = boundaryPtr_->lengths();
184 double clipParameter = 1.0/(2.0*M_PI*periodicity_*interfaceWidth_);
187 for (
int i = 0; i < nWaveVectors_; ++i) {
189 q[0] = 2.0*M_PI*periodicity_*waveIntVectors_[i][0]/cellLengths[0];
190 q[1] = 2.0*M_PI*periodicity_*waveIntVectors_[i][1]/cellLengths[1];
191 q[2] = 2.0*M_PI*periodicity_*waveIntVectors_[i][2]/cellLengths[2];
192 double arg = q.
dot(position);
195 cosine *= clipParameter;
196 return prefactor_[type]*externalParameter_*tanh(cosine);
206 const Vector cellLengths = boundaryPtr_->lengths();
207 double clipParameter = 1.0/(2.0*M_PI*periodicity_*interfaceWidth_);
212 for (
int i = 0; i < nWaveVectors_; ++i) {
214 q[0] = 2.0*M_PI*periodicity_*waveIntVectors_[i][0]/cellLengths[0];
215 q[1] = 2.0*M_PI*periodicity_*waveIntVectors_[i][1]/cellLengths[1];
216 q[2] = 2.0*M_PI*periodicity_*waveIntVectors_[i][2]/cellLengths[2];
217 double arg = q.
dot(position);
219 double sine = -1.0*sin(arg);
223 cosine *= clipParameter;
224 deriv *= clipParameter;
225 double tanH = tanh(cosine);
226 double sechSq = (1.0 - tanH*tanH);
227 double f = prefactor_[type]*externalParameter_*sechSq;
Vector & zero()
Set all elements of a 3D vector to zero.
A Vector is a Cartesian vector.
double energy(const Vector &position, int i) const
Returns external potential energy of a single particle.
double dot(const Vector &v) const
Return dot product of this vector and vector v.
An orthorhombic periodic unit cell.
A clipped cosine potential that induces ordering along directions specified by waveIntVectors, w_i.
virtual void loadParameters(Serializable::IArchive &ar)
Load internal state from an archive.
std::string className() const
Return name string "SimplePeriodicExternal".
File containing preprocessor macros for error handling.
Classes used by all simpatico molecular simulations.
Saving / output archive for binary ostream.
Utility classes for scientific computation.
double externalParameter() const
Returns external parameter.
void setNAtomType(int nAtomType)
Set nAtomType value.
void setBoundary(Boundary &boundary)
Set pointer to Boundary.
void getForce(const Vector &position, int type, Vector &force) const
Returns force caused by the external potential.
Saving archive for binary istream.
virtual void save(Serializable::OArchive &ar)
Save internal state to an archive.
SimplePeriodicExternal()
Default constructor.
An object that can read multiple parameters from file.
SimplePeriodicExternal & operator=(const SimplePeriodicExternal &other)
Assignment.
void setExternalParameter(double externalParameter)
Sets external parameter.
void readParameters(std::istream &in)
Read potential parameters, and initialize other variables.