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_CONFIGURATIONS_PARALLELTOPOLOGYCONFIGURATION_H_
6 : #define _MOLECULARDYNAMICS_COUPLING_CONFIGURATIONS_PARALLELTOPOLOGYCONFIGURATION_H_
7 :
8 : #include "coupling/paralleltopology/ParallelTopologyFactory.h"
9 : #include "tarch/configuration/Configuration.h"
10 : #include "tarch/configuration/ParseConfiguration.h"
11 : #include "tarch/la/Vector.h"
12 : #include <iostream>
13 :
14 : namespace coupling {
15 : namespace configurations {
16 : class ParallelTopologyConfiguration;
17 : }
18 : } // namespace coupling
19 :
20 : /** reads parallel topology configuration. XYZ and ZYX are supported.. Derive
21 : *from the class tarch::configuration::Configuration
22 : * @brief reads parallel topology configuration. XYZ and ZYX are supported.
23 : * @author Philipp Neumann
24 : */
25 : class coupling::configurations::ParallelTopologyConfiguration : public tarch::configuration::Configuration {
26 : public:
27 : /** Constructor, initializes the class */
28 408 : ParallelTopologyConfiguration() : _type(coupling::paralleltopology::UNDEFINED), _isValid(true) {}
29 :
30 : /** Destructor */
31 412 : virtual ~ParallelTopologyConfiguration() {}
32 :
33 4 : void parseSubtag(tinyxml2::XMLElement* node) {
34 4 : std::string value;
35 4 : tarch::configuration::ParseConfiguration::readStringMandatory(value, node, "type");
36 4 : if (value == "xyz") {
37 4 : _type = coupling::paralleltopology::XYZ;
38 0 : } else if (value == "zyx") {
39 0 : _type = coupling::paralleltopology::ZYX;
40 : } else {
41 0 : std::cout << "ERROR coupling::ParallelTopologyConfiguration: Wrong type!" << std::endl;
42 0 : _isValid = false;
43 0 : exit(EXIT_FAILURE);
44 : }
45 4 : }
46 :
47 : /** Returns name of xml tag that is associated to the configuration.
48 : * @return name of xml tag that is associated to the configuration
49 : */
50 12 : std::string getTag() const { return "parallel-topology"; }
51 :
52 : /** checks if the configuration is valid. This operation usually fails, if
53 : *e.g.
54 : * 1. parseSubtag() hasn't been called, i.e. configuration has not been
55 : *used, or
56 : * 2. parseSubtag() failed due to a wrong file.
57 : * @return _isValid
58 : */
59 4 : bool isValid() const { return _isValid; }
60 :
61 : /** Returns the parallel topology type.
62 : * @return _type
63 : */
64 : coupling::paralleltopology::ParallelTopologyType getParallelTopologyType() const { return _type; }
65 :
66 : protected:
67 4 : ParallelTopologyConfiguration(coupling::paralleltopology::ParallelTopologyType type) : _type(type), _isValid(true) {}
68 :
69 : private:
70 : coupling::paralleltopology::ParallelTopologyType _type;
71 :
72 : bool _isValid;
73 : };
74 :
75 : #endif // _MOLECULARDYNAMICS_COUPLING_CONFIGURATIONS_PARALLELTOPOLOGYCONFIGURATION_H_
|