LCOV - code coverage report
Current view: top level - coupling - ZhouBoundaryForceController.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 9 0.0 %
Date: 2025-06-25 11:26:37 Functions: 0 6 0.0 %

          Line data    Source code
       1             : // Copyright (C) 2015 Technische Universitaet Muenchen
       2             : // This file is part of the Mamico project. For conditions of distribution
       3             : // and use, please see the copyright notice in Mamico's main folder, or at
       4             : // www5.in.tum.de/mamico
       5             : #ifndef _MOLECULARDYNAMICS_COUPLING_ZHOUBOUNDARYFORCECONTROLLER_H_
       6             : #define _MOLECULARDYNAMICS_COUPLING_ZHOUBOUNDARYFORCECONTROLLER_H_
       7             : 
       8             : #include "coupling/BoundaryForceController.h"
       9             : #include "coupling/cell-mappings/ZhouBoundaryForce.h"
      10             : 
      11             : namespace coupling {
      12             : template <class LinkedCell, unsigned int dim> class ZhouBoundaryForceController;
      13             : }
      14             : 
      15             : /** For details on the forcing, check out the descriptions in
      16             :  * cell-mappings/ZhouBoundaryForce.
      17             :  *  @brief applies the boundary force from Zhou et al. in boundary cell.
      18             :  *  @tparam LinkedCell the LinkedCell class is given by the implementation of
      19             :  * linked cells in the molecular dynamics simulation
      20             :  *  @tparam dim the integer dim refers to the spacial dimension of the
      21             :  * simulation, can be 1, 2, or 3
      22             :  *  @author Philipp Neumann
      23             :  */
      24             : template <class LinkedCell, unsigned int dim> class coupling::ZhouBoundaryForceController : public coupling::BoundaryForceController<LinkedCell, dim> {
      25             : public:
      26             :   /** @brief A simple constructor
      27             :    * @param density the mean density for the setup
      28             :    * @param temperature the mean temperature for the setup
      29             :    * @param boundary a vector of booleans indicating at which boundaries the
      30             :    * force shall be applied
      31             :    * @param mdSolverInterface a reference to the interface of the MD solver*/
      32           0 :   ZhouBoundaryForceController(const double& density, const double& temperature, const tarch::la::Vector<2 * dim, bool>& boundary,
      33             :                               coupling::interface::MDSolverInterface<LinkedCell, dim>* const mdSolverInterface)
      34           0 :       : coupling::BoundaryForceController<LinkedCell, dim>(mdSolverInterface), _density(density), _temperature(temperature), _boundary(boundary),
      35           0 :         _zhouBoundaryForce(density, temperature, mdSolverInterface->getMoleculeEpsilon(), mdSolverInterface->getMoleculeSigma(), boundary,
      36           0 :                            mdSolverInterface->getGlobalMDDomainOffset(), mdSolverInterface->getGlobalMDDomainSize(), mdSolverInterface) {}
      37             : 
      38             :   /** @brief Destructor*/
      39           0 :   virtual ~ZhouBoundaryForceController() {}
      40             : 
      41             :   /** iterates over all linked cells of the given coupling cell and applies
      42             :    * the cellmapping for the Zhou boundary force
      43             :    * @brief applies the Zhou boundary force on a boundary cell
      44             :    * @param cell the macroscopic boundary cell to apply the boundary force
      45             :    */
      46           0 :   virtual void applyBoundaryForce(coupling::datastructures::CouplingCellWithLinkedCells<LinkedCell, dim>& cell) { cell.iterateCells(_zhouBoundaryForce); }
      47             : 
      48             :   /** @brief calculates the potential energy for a given position
      49             :    *  @param position the position for which the potential energy will be
      50             :    * calculated
      51             :    *  @returns the potential energy at the given position */
      52           0 :   virtual double getPotentialEnergy(const tarch::la::Vector<dim, double>& position) const { return _zhouBoundaryForce.getPotentialEnergy(position); }
      53             : 
      54             :   /** @brief calculates the boundary force for the given particle position
      55             :    *  @param position particle position for the force calculation
      56             :    *  @returns the boundary force at the given position */
      57           0 :   virtual tarch::la::Vector<dim, double> getForce(const tarch::la::Vector<dim, double>& position) const {
      58           0 :     return _zhouBoundaryForce.getBoundaryForces(position);
      59             :   }
      60             : 
      61             : private:
      62             :   const double _density;     ///< the mean density
      63             :   const double _temperature; ///< the mean temperature
      64             :   /** A boolean vector which indicates where to apply the boundary force.
      65             :    * Per dimension it has two enteries. They refer to the boundaries in the
      66             :    * following order: left (small x), right (high x), front (small y), back
      67             :    * (high y), bottom (small z), top (high z).
      68             :    * @brief indicates at which boundaries to apply the force  */
      69             :   const tarch::la::Vector<2 * dim, bool> _boundary;
      70             :   coupling::cellmappings::ZhouBoundaryForce<LinkedCell, dim> _zhouBoundaryForce; ///< the cell mapping for the application of the force
      71             : };
      72             : #endif // _MOLECULARDYNAMICS_COUPLING_ZHOUBOUNDARYFORCECONTROLLER_H_

Generated by: LCOV version 1.14