1 #ifndef SIMP_LOCAL_LAMELLAR_ORDERING_EXTERNAL_H 2 #define SIMP_LOCAL_LAMELLAR_ORDERING_EXTERNAL_H 11 #include <simp/boundary/Boundary.h> 12 #include <util/space/Dimension.h> 13 #include <util/param/ParamComposite.h> 116 void set(std::string name,
double value);
121 double get(std::string name)
const;
156 static const int MaxAtomType = 2;
162 int parallelDirection_;
174 double externalParameter_;
220 double dPerp, dParallel, perpLength, parallelLength, q, clipParameter, arg, clipcos;
221 double parallelFactor1, parallelFactor2, parallelFactor;
222 dPerp = position[perpDirection_];
223 dParallel = position[parallelDirection_];
226 lengths = boundaryPtr_->lengths();
227 perpLength = lengths[perpDirection_];
228 parallelLength = lengths[parallelDirection_];
230 q = (2.0*M_PI*periodicity_)/perpLength;
231 clipParameter = 1.0/(q*width_*perpLength);
233 clipcos = clipParameter*cos(arg);
234 parallelFactor1 = tanh( 2.0*M_PI*((dParallel - (((1.0-fraction_)/2.0)*parallelLength))/(fraction_*parallelLength)) );
235 parallelFactor2 = tanh( 2.0*M_PI*(((((1+fraction_)/2.0)*parallelLength) - dParallel)/(fraction_*parallelLength)) );
236 parallelFactor = 1.0 + (parallelFactor1*parallelFactor2);
237 parallelFactor /= 2.0;
239 if (parallelFactor < 0.0)
242 return prefactor_[type]*externalParameter_*tanh(clipcos)*parallelFactor;
252 double dPerp, dParallel, perpLength, parallelLength, q, clipParameter, arg, clipcos, tanH, sechSq;
253 double parallelFactor1, parallelFactor2, parallelFactor, forceParallelSech1, forceParallelSech2;
254 dPerp = position[perpDirection_];
255 dParallel = position[parallelDirection_];
259 lengths = boundaryPtr_->lengths();
260 perpLength = lengths[perpDirection_];
261 parallelLength = lengths[parallelDirection_];
263 q = (2.0*M_PI*periodicity_)/perpLength;
264 clipParameter = 1.0/(q*width_*perpLength);
266 clipcos = clipParameter*cos(arg);
267 tanH = tanh(clipcos);
268 sechSq = (1.0 - tanH*tanH);
269 parallelFactor1 = tanh( 2.0*M_PI*((dParallel - (((1.0-fraction_)/2.0)*parallelLength))/(fraction_*parallelLength)) );
270 parallelFactor2 = tanh( 2.0*M_PI*(((((1+fraction_)/2.0)*parallelLength) - dParallel)/(fraction_*parallelLength)) );
271 parallelFactor = 1.0 + (parallelFactor1*parallelFactor2);
272 parallelFactor /= 2.0;
274 if (parallelFactor < 0.0) {
277 forceParallelSech1 = (1.0 - (parallelFactor1*parallelFactor1));
278 forceParallelSech1 *= 1.0*M_PI*(1/(fraction_*parallelLength))*parallelFactor2;
279 forceParallelSech2 = (1.0 - (parallelFactor2*parallelFactor2));
280 forceParallelSech2 *= -1.0*M_PI*(1/(fraction_*parallelLength))*parallelFactor1;
281 force[parallelDirection_] = -1.0*prefactor_[type]*externalParameter_*tanh(clipcos);
282 force[parallelDirection_] *= (forceParallelSech1 + forceParallelSech2);
283 force[perpDirection_] = prefactor_[type]*externalParameter_*sechSq*clipParameter*sin(arg)*q*parallelFactor;
void readParameters(std::istream &in)
Read potential parameters, and initialize other variables.
Vector & zero()
Set all elements of a 3D vector to zero.
A Vector is a Cartesian vector.
std::string className() const
Return name string "LocalLamellarOrderingExternal".
void setBoundary(Boundary &boundary)
Set pointer to Boundary.
An orthorhombic periodic unit cell.
double energy(const Vector &position, int i) const
Returns external potential energy of a single particle.
File containing preprocessor macros for error handling.
Classes used by all simpatico molecular simulations.
void setExternalParameter(double externalParameter)
Sets external parameter.
A clipped cosine potential that induces lamellar ordering along the direction specified by perpDirect...
Saving / output archive for binary ostream.
#define UTIL_THROW(msg)
Macro for throwing an Exception, reporting function, file and line number.
Utility classes for scientific computation.
void getForce(const Vector &position, int type, Vector &force) const
Returns force caused by the external potential.
Saving archive for binary istream.
double externalParameter() const
Returns external parameter.
virtual void save(Serializable::OArchive &ar)
Save internal state to an archive.
void setNAtomType(int nAtomType)
Set nAtomType value.
virtual void loadParameters(Serializable::IArchive &ar)
Load internal state from an archive.
LocalLamellarOrderingExternal & operator=(const LocalLamellarOrderingExternal &other)
Assignment.
An object that can read multiple parameters from file.
LocalLamellarOrderingExternal()
Default constructor.