LCOV - code coverage report
Current view: top level - coupling - ZhouBoundaryForceController.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 0.0 % 9 0
Test Date: 2026-08-21 15:14:06 Functions: 0.0 % 5 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 2.0-1