5#ifndef _MOLECULARDYNAMICS_COUPLING_CONFIGURATIONS_BOUNDARYFORCECONFIGURATION_H_
6#define _MOLECULARDYNAMICS_COUPLING_CONFIGURATIONS_BOUNDARYFORCECONFIGURATION_H_
8#include "coupling/NoBoundaryForce.h"
9#include "coupling/ZhouBoundaryForceController.h"
10#include "coupling/interface/MDSolverInterface.h"
11#include "tarch/configuration/Configuration.h"
12#include "tarch/configuration/ParseConfiguration.h"
13#include "tarch/la/Vector.h"
17namespace configurations {
49 const std::string boundaries[6] = {
"west",
"east",
"south",
"north",
"bottom",
"top"};
51 if (value ==
"zhou-boundary-force") {
52 _insertionType =
ZHOU;
53 }
else if (value ==
"none") {
56 std::cout <<
"ERROR coupling::BoundaryForceConfiguration: Wrong insertion type!" << std::endl;
66 for (
unsigned int d = 0; d < 2 * dim; d++) {
70 if (_insertionType ==
ZHOU) {
72 if (_density <= 0.0) {
73 std::cout <<
"ERROR coupling::BoundaryForceConfiguration: density is "
74 "smaller than zero! Density="
81 if (_temperature <= 0.0) {
82 std::cout <<
"ERROR coupling::BoundaryForceConfiguration: temperature "
83 "is smaller than zero! Temperature="
94 std::string
getTag()
const {
return "boundary-force"; }
121 template <
class LinkedCell>
124 if (_insertionType ==
ZHOU) {
126 std::cout <<
"ERROR "
127 "coupling::configurations::BoundaryForceConfiguration::"
128 "interpreteConfiguration(): Zhou boundary force only "
142 : _insertionType(insertionType), _density(density), _temperature(temperature), _isValid(true) {}
controller for forces acting at open MD boundaries
Definition BoundaryForceController.h:25
dummy implementation, applying no boundary force.
Definition NoBoundaryForce.h:21
applies the boundary force from Zhou et al. in boundary cell.
Definition ZhouBoundaryForceController.h:24
reads boundary force tag
Definition BoundaryForceConfiguration.h:27
const tarch::la::Vector< 2 *dim, bool > & getBoundary() const
Definition BoundaryForceConfiguration.h:114
virtual ~BoundaryForceConfiguration()
Definition BoundaryForceConfiguration.h:41
BoundaryForceType
Definition BoundaryForceConfiguration.h:32
@ NO_BOUNDARYFORCE
Definition BoundaryForceConfiguration.h:34
@ ZHOU
Definition BoundaryForceConfiguration.h:33
void parseSubtag(tinyxml2::XMLElement *node)
Definition BoundaryForceConfiguration.h:46
bool isValid() const
Definition BoundaryForceConfiguration.h:104
std::string getTag() const
Definition BoundaryForceConfiguration.h:94
const BoundaryForceType & getBoundaryForceType() const
Definition BoundaryForceConfiguration.h:109
BoundaryForceConfiguration()
Definition BoundaryForceConfiguration.h:38
coupling::BoundaryForceController< LinkedCell, dim > * interpreteConfiguration(coupling::interface::MDSolverInterface< LinkedCell, dim > *const mdSolverInterface) const
Definition BoundaryForceConfiguration.h:123
interface to the MD simulation
Definition MDSolverInterface.h:25
Definition Configuration.h:22
static void readBoolMandatory(bool &storage, tinyxml2::XMLElement *node, std::string tag)
Definition ParseConfiguration.h:151
static void readStringMandatory(std::string &storage, tinyxml2::XMLElement *node, std::string tag)
Definition ParseConfiguration.h:201
static void readDoubleMandatory(double &storage, tinyxml2::XMLElement *node, std::string tag)
Definition ParseConfiguration.h:79
Definition tinyxml2.h:1268
everything necessary for coupling operations, is defined in here
Definition AdditiveMomentumInsertion.h:15