LCOV - code coverage report
Current view: top level - coupling/configurations - MaMiCoConfiguration.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 83.3 % 6 5
Test Date: 2026-08-21 15:14:06 Functions: 50.0 % 4 2

            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
       4              : #ifndef _MOLECULARDYNAMICS_COUPLING_CONFIGURATIONS_MAMICOCONFIGURATION_H_
       5              : #define _MOLECULARDYNAMICS_COUPLING_CONFIGURATIONS_MAMICOCONFIGURATION_H_
       6              : 
       7              : #include "coupling/configurations/BoundaryForceConfiguration.h"
       8              : #include "coupling/configurations/CouplingCellConfiguration.h"
       9              : #include "coupling/configurations/MomentumInsertionConfiguration.h"
      10              : #include "coupling/configurations/ParallelTopologyConfiguration.h"
      11              : #include "coupling/configurations/ParticleInsertionConfiguration.h"
      12              : #include "coupling/configurations/ThermostatConfiguration.h"
      13              : #include "coupling/configurations/TimeIntegrationConfiguration.h"
      14              : #include "coupling/configurations/TransferStrategyConfiguration.h"
      15              : #include "tarch/configuration/Configuration.h"
      16              : #include "tarch/la/Vector.h"
      17              : #include <iostream>
      18              : 
      19              : namespace coupling {
      20              : namespace configurations {
      21              : template <unsigned int dim> class MaMiCoConfiguration;
      22              : }
      23              : } // namespace coupling
      24              : 
      25              : /** parses all sub-tags for MaMiCo configuration. Derive from the class
      26              :  * tarch::configuration::Configuration
      27              :  *      @brief parses all sub-tags for MaMiCo configuration.
      28              :  *      @tparam dim Number of dimensions; it can be 1, 2 or 3
      29              :  *  @author Philipp Neumann
      30              :  */
      31              : template <unsigned int dim> class coupling::configurations::MaMiCoConfiguration : public tarch::configuration::Configuration {
      32              : public:
      33              :   /** Constructor, initializes the class  */
      34          408 :   MaMiCoConfiguration()
      35          816 :       : _isValid(true), _isDefinedParticleInsertion(false), _isDefinedMomentumInsertion(false), _isDefinedBoundaryForce(false),
      36          816 :         _isDefinedTransferStrategy(false), _isDefinedParallelTopology(false), _isDefinedThermostat(false) {}
      37              : 
      38              :   /** Destructor */
      39          408 :   virtual ~MaMiCoConfiguration() {}
      40              : 
      41              :   /** parseSubtag
      42              :    *  @param node
      43              :    */
      44              :   void parseSubtag(tinyxml2::XMLElement* node);
      45              : 
      46              :   /** Returns name of xml tag that is associated to the configuration.
      47              :    *  @return name of xml tag that is associated to the configuration
      48              :    */
      49            0 :   std::string getTag() const { return "mamico"; }
      50              : 
      51              :   /**
      52              :    * Is config valid?
      53              :    *
      54              :    * This operation usually fails, if
      55              :    *
      56              :    * - parseSubtag() hasn't been called, i.e. configuration has not been
      57              :    *   used, or
      58              :    * - parseSubtag() failed due to a wrong file.
      59              :    *
      60              :    * If a tag ain't optional and parseSubtag() was not called (first case)
      61              :    *    @return _isValid
      62              :    */
      63            4 :   bool isValid() const { return _isValid; }
      64              : 
      65              :   /**
      66              :    *  @return _couplingCellConfiguration
      67              :    */
      68              :   const coupling::configurations::CouplingCellConfiguration<dim>& getCouplingCellConfiguration() const { return _couplingCellConfiguration; }
      69              : 
      70              :   /**
      71              :    *  @return _particleInsertionConfiguration
      72              :    */
      73              :   const coupling::configurations::ParticleInsertionConfiguration& getParticleInsertionConfiguration() const {
      74              :     if (!_isDefinedParticleInsertion) {
      75              :       std::cout << "ERROR coupling::configurations::MaMiCoConfiguration: "
      76              :                    "Particle insertion not defined!"
      77              :                 << std::endl;
      78              :       exit(EXIT_FAILURE);
      79              :     }
      80              :     return _particleInsertionConfiguration;
      81              :   }
      82              : 
      83              :   /**
      84              :    *    @return _momentumInsertionConfiguration
      85              :    */
      86              :   const coupling::configurations::MomentumInsertionConfiguration<dim>& getMomentumInsertionConfiguration() const {
      87              :     if (!_isDefinedMomentumInsertion) {
      88              :       std::cout << "ERROR coupling::configurations::MaMiCoConfiguration: "
      89              :                    "Momentum insertion not defined!"
      90              :                 << std::endl;
      91              :       exit(EXIT_FAILURE);
      92              :     }
      93              :     return _momentumInsertionConfiguration;
      94              :   }
      95              : 
      96              :   /**
      97              :    *    @return _boundaryForceConfiguration
      98              :    */
      99              :   const coupling::configurations::BoundaryForceConfiguration<dim>& getBoundaryForceConfiguration() const {
     100              :     if (!_isDefinedBoundaryForce) {
     101              :       std::cout << "ERROR coupling::configurations::MaMiCoConfiguration: "
     102              :                    "Boundary force not defined!"
     103              :                 << std::endl;
     104              :       exit(EXIT_FAILURE);
     105              :     }
     106              :     return _boundaryForceConfiguration;
     107              :   }
     108              : 
     109              :   /**
     110              :    *    @return _transferStrategyConfiguration
     111              :    */
     112              :   const coupling::configurations::TransferStrategyConfiguration<dim>& getTransferStrategyConfiguration() const {
     113              :     if (!_isDefinedTransferStrategy) {
     114              :       std::cout << "ERROR coupling::configurations::MaMiCoConfiguration: "
     115              :                    "Transfer-Strategy not defined!"
     116              :                 << std::endl;
     117              :       exit(EXIT_FAILURE);
     118              :     }
     119              :     return _transferStrategyConfiguration;
     120              :   }
     121              : 
     122              :   /**
     123              :    *  @return _parallelTopologyConfiguration
     124              :    */
     125              :   const coupling::configurations::ParallelTopologyConfiguration& getParallelTopologyConfiguration() const {
     126              :     if (!_isDefinedParallelTopology) {
     127              :       std::cout << "ERROR coupling::configurations::MaMiCoConfiguration: "
     128              :                    "Parallel-Topology not defined!"
     129              :                 << std::endl;
     130              :       exit(EXIT_FAILURE);
     131              :     }
     132              :     return _parallelTopologyConfiguration;
     133              :   }
     134              : 
     135              :   /**
     136              :    *  @return _timeIntegrationConfiguration
     137              :    */
     138              :   const coupling::configurations::TimeIntegrationConfiguration& getTimeIntegrationConfiguration() const {
     139              :     // is optional, thus always defined
     140              :     return _timeIntegrationConfiguration;
     141              :   }
     142              : 
     143              :   /**
     144              :    * @return _thermostatConfiguration
     145              :    */
     146              :   const coupling::configurations::ThermostatConfiguration& getThermostatConfiguration() const {
     147              :     if (!_isDefinedThermostat) {
     148              :       std::cout << "ERROR coupling::configurations::MaMiCoConfiguration: "
     149              :                    "Thermostat not defined!"
     150              :                 << std::endl;
     151              :       exit(EXIT_FAILURE);
     152              :     }
     153              :     return _thermostatConfiguration;
     154              :   }
     155              : 
     156              : private:
     157              :   bool _isValid;
     158              :   coupling::configurations::CouplingCellConfiguration<dim> _couplingCellConfiguration;
     159              :   coupling::configurations::ParticleInsertionConfiguration _particleInsertionConfiguration;
     160              :   coupling::configurations::MomentumInsertionConfiguration<dim> _momentumInsertionConfiguration;
     161              :   coupling::configurations::BoundaryForceConfiguration<dim> _boundaryForceConfiguration;
     162              :   coupling::configurations::TransferStrategyConfiguration<dim> _transferStrategyConfiguration;
     163              :   coupling::configurations::ParallelTopologyConfiguration _parallelTopologyConfiguration;
     164              :   coupling::configurations::TimeIntegrationConfiguration _timeIntegrationConfiguration;
     165              :   coupling::configurations::ThermostatConfiguration _thermostatConfiguration;
     166              :   bool _isDefinedParticleInsertion;
     167              :   bool _isDefinedMomentumInsertion;
     168              :   bool _isDefinedBoundaryForce;
     169              :   bool _isDefinedTransferStrategy;
     170              :   bool _isDefinedParallelTopology;
     171              :   bool _isDefinedThermostat;
     172              : };
     173              : #include "coupling/configurations/MaMiCoConfiguration.cpph"
     174              : 
     175              : #endif // _MOLECULARDYNAMICS_COUPLING_CONFIGURATIONS_MAMICOCONFIGURATION_H_
        

Generated by: LCOV version 2.0-1