LCOV - code coverage report
Current view: top level - coupling/cell-mappings - NieVelocityImpositionMapping.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 0.0 % 14 0
Test Date: 2026-08-21 15:14:06 Functions: 0.0 % 3 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_CELLMAPPINGS_NIEVELOCITYIMPOSITIONMAPPING_H_
       6              : #define _MOLECULARDYNAMICS_COUPLING_CELLMAPPINGS_NIEVELOCITYIMPOSITIONMAPPING_H_
       7              : 
       8              : #include "coupling/CouplingMDDefinitions.h"
       9              : #include "coupling/datastructures/CouplingCell.h"
      10              : #include "coupling/interface/MDSolverInterface.h"
      11              : #include "coupling/interface/Molecule.h"
      12              : #include "tarch/la/Matrix.h"
      13              : #include <iostream>
      14              : 
      15              : namespace coupling {
      16              : namespace cellmappings {
      17              : template <class LinkedCell, unsigned int dim> class NieVelocityImpositionMapping;
      18              : }
      19              : } // namespace coupling
      20              : 
      21              : /** employs an acceleration based on velocity gradients (in time) using the
      22              :  *forcing term of the molecules. We currently expect that valid force entries
      23              :  *are provided in each molecule, that is all molecule-molecule interactions have
      24              :  *previously been computed. The scheme follows the descriptions in the paper by
      25              :  *Nie et al., J. Fluid. Mech. 500, 55-64, 2004. However, we only average over
      26              :  *single grid cells (no averaging over one (periodic) dimension or similar
      27              :  *tricks ;-) ).
      28              :  *      @brief This class employs an acceleration based on velocity gradients
      29              :  *(in time) using the forcing term of the molecules.
      30              :  *      @tparam LinkedCell cell type
      31              :  *      @tparam dim Number of dimensions; it can be 1, 2 or 3
      32              :  *  @author Philipp Neumann
      33              :  */
      34              : template <class LinkedCell, unsigned int dim> class coupling::cellmappings::NieVelocityImpositionMapping {
      35              : public:
      36              :   /** Constructor
      37              :    *    @param continuumVelocity    current velocity in this coupling cell
      38              :    *(=velocity from continuum solver)
      39              :    *    @param avgMDVelocity            current avg. velocity of molecules
      40              :    *    @param avgForce                         average force within this
      41              :    *coupling cell
      42              :    *    @param mdSolverInterface        MD solver interface, required for
      43              :    *molecule iterator and molecule mass
      44              :    */
      45            0 :   NieVelocityImpositionMapping(const tarch::la::Vector<dim, double>& continuumVelocity, const tarch::la::Vector<dim, double>& avgMDVelocity,
      46              :                                const tarch::la::Vector<dim, double>& avgForce, coupling::interface::MDSolverInterface<LinkedCell, dim>* const mdSolverInterface)
      47            0 :       : _mdSolverInterface(mdSolverInterface), _continuumVelocity(continuumVelocity), _avgMDVelocity(avgMDVelocity), _avgForce(avgForce) {}
      48              : 
      49              :   /** Destructor */
      50            0 :   virtual ~NieVelocityImpositionMapping() {}
      51              : 
      52              :   /** empty function
      53              :    */
      54              :   void beginCellIteration() {}
      55              : 
      56              :   /** empty function
      57              :    */
      58              :   void endCellIteration() {}
      59              : 
      60              :   /** This function computes average force contribution inside this linked cell
      61              :    *    @param cell
      62              :    */
      63            0 :   void handleCell(LinkedCell& cell) {
      64            0 :     coupling::interface::MoleculeIterator<LinkedCell, dim>* it = _mdSolverInterface->getMoleculeIterator(cell);
      65              : 
      66            0 :     it->begin();
      67            0 :     while (it->continueIteration()) {
      68            0 :       coupling::interface::Molecule<dim>& wrapper(it->get());
      69            0 :       tarch::la::Vector<dim, double> force(wrapper.getForce());
      70            0 :       force = force - _avgForce - (_mdSolverInterface->getMoleculeMass() / _mdSolverInterface->getDt()) * (_avgMDVelocity - _continuumVelocity);
      71            0 :       wrapper.setForce(force);
      72            0 :       it->next();
      73              :     }
      74            0 :     delete it;
      75            0 :   }
      76              : 
      77              : private:
      78              :   /** MD solver interface, required for molecule iterator and molecule mass */
      79              :   coupling::interface::MDSolverInterface<LinkedCell, dim>* const _mdSolverInterface;
      80              :   /** current velocity in this coupling cell (=velocity from continuum
      81              :    * solver) */
      82              :   const tarch::la::Vector<dim, double> _continuumVelocity;
      83              :   /** current avg. velocity of molecules */
      84              :   const tarch::la::Vector<dim, double> _avgMDVelocity;
      85              :   /** average force within this coupling cell */
      86              :   const tarch::la::Vector<dim, double> _avgForce;
      87              : };
      88              : 
      89              : #endif // _MOLECULARDYNAMICS_COUPLING_CELLMAPPINGS_NIEVELOCITYIMPOSITIONMAPPING_H_
        

Generated by: LCOV version 2.0-1