source: src/comm/comm.hpp@ b51c3b

Last change on this file since b51c3b was b51c3b, checked in by Julian Iseringhausen <isering@…>, 14 years ago

Minor changes to vmg.

git-svn-id: https://svn.version.fz-juelich.de/scafacos/trunk@1733 5161e1c8-67bf-11de-9fd5-51895aff932f

  • Property mode set to 100644
File size: 4.7 KB
Line 
1/**
2 * @file comm.hpp
3 * @author Julian Iseringhausen <isering@ins.uni-bonn.de>
4 * @date Wed Jun 16 13:21:06 2010
5 *
6 * @brief Base class for communication.
7 *
8 */
9
10#ifndef COMM_HPP_
11#define COMM_HPP_
12
13#include <list>
14
15#include "base/defs.hpp"
16#include "base/index.hpp"
17#include "base/object.hpp"
18#include "base/particle.hpp"
19#include "thirdparty/pugixml/pugixml.hpp"
20
21namespace VMG
22{
23
24class DomainDecomposition;
25class Grid;
26class Multigrid;
27class Stencil;
28
29namespace Particle
30{
31class LinkedCellList;
32}
33
34class Comm : public Object
35{
36public:
37 Comm(const Boundary& boundary, DomainDecomposition* domain_dec) :
38 bound(boundary),
39 dd(domain_dec),
40 particle_grid(NULL),
41 output_directory_is_created(false),
42 output_count(0)
43 {}
44
45 virtual ~Comm();
46
47 virtual Grid& GetCoarserGrid(Multigrid& multigrid) = 0;
48 virtual Grid& GetFinerGrid(Multigrid& multigrid) = 0;
49 Grid& GetParticleGrid();
50
51 virtual void CommFromGhosts(Grid& grid) = 0;
52 virtual void CommToGhosts(Grid& grid) = 0;
53 virtual void CommSubgrid(Grid& grid_old, Grid& grid_new, const int& direction) = 0;
54 virtual void CommAddSubgrid(Grid& grid_old, Grid& grid_new, const int& direction) = 0;
55
56 virtual void CommToGhostsAsyncStart(Grid& grid) = 0;
57 virtual void CommToGhostsAsyncFinish(Grid& grid) = 0;
58 virtual void CommFromGhostsAsyncStart(Grid& grid) = 0;
59 virtual void CommFromGhostsAsyncFinish(Grid& grid) = 0;
60
61 virtual void CommParticles(const Grid& grid, std::list<Particle::Particle>& particles) = 0;
62 virtual void CommParticlesBack(std::list<Particle::Particle>& particles) = 0;
63 virtual void CommLCListToGhosts(Particle::LinkedCellList& lc) = 0;
64 virtual void CommLCListFromGhosts(const Grid& grid, Particle::LinkedCellList& lc) = 0;
65
66 virtual vmg_float GlobalSum(const vmg_float& value) {return value;}
67 virtual vmg_float GlobalSumRoot(const vmg_float& value) {return value;}
68 virtual void GlobalSumArray(vmg_float* array, const vmg_int& size) {}
69
70 virtual vmg_int GlobalSum(const vmg_int& value) {return value;}
71 virtual vmg_int GlobalSumRoot(const vmg_int& value) {return value;}
72 virtual void GlobalSumArray(vmg_int* array, const vmg_int& size) {}
73
74 virtual vmg_float GlobalMax(const vmg_float& value) {return value;}
75 virtual vmg_float GlobalMaxRoot(const vmg_float& value) {return value;}
76 virtual void GlobalMaxArray(vmg_float* array, const vmg_int& size) {}
77
78 virtual vmg_int GlobalMax(const vmg_int& value) {return value;}
79 virtual vmg_int GlobalMaxRoot(const vmg_int& value) {return value;}
80 virtual void GlobalMaxArray(vmg_int* array, const vmg_int& size) {}
81
82 virtual vmg_float LevelSum(const Grid& grid, const vmg_float& value) {return value;}
83 virtual vmg_float LevelSumRoot(const Grid& grid, const vmg_float& value) {return value;}
84 virtual void LevelSumArray(const Grid& grid, vmg_float* array, const vmg_int& size) {}
85
86 virtual vmg_int LevelSum(const Grid& grid, const vmg_int& value) {return value;}
87 virtual vmg_int LevelSumRoot(const Grid& grid, const vmg_int& value) {return value;}
88 virtual void LevelSumArray(const Grid& grid, vmg_int* array, const vmg_int& size) {}
89
90 virtual void PrintString(const char* format, ...) = 0;
91 virtual void PrintStringOnce(const char* format, ...) = 0;
92 virtual void PrintXML(const std::string& filename, const std::string& xml_data) = 0;
93 virtual void PrintXMLAll(const std::string& filename, const std::string& xml_data) = 0;
94 virtual void PrintAllSettings() = 0;
95 virtual void PrintGrid(Grid& grid, const char* information) = 0;
96 virtual void PrintDefect(Grid& sol, Grid& rhs, const char* information) = 0;
97
98 virtual void DebugPrintError(const Grid& sol, const char* information) {}
99 virtual void DebugPrintErrorNorm(Grid& sol) {}
100 virtual void DebugPrintGridStructure(Multigrid& multigrid) {}
101
102 virtual int GlobalRank() const {return 0;}
103 virtual int GlobalSize() const {return 1;}
104 virtual Index GlobalPos() const {return Index(0);}
105 virtual Index GlobalProcs() const {return Index(1);}
106
107 virtual int Rank(const Grid& grid) const {return 0;}
108 virtual int Size(const Grid& grid) const {return 1;}
109 virtual Index Pos(const Grid& grid) const {return Index(0);}
110 virtual Index Procs(const Grid& grid) const {return Index(1);}
111
112 virtual void PostInit(Multigrid& sol, Multigrid& rhs) = 0;
113
114 const Boundary& BoundaryConditions() const {return bound;}
115
116 DomainDecomposition& GetDomainDecomposition() {return *dd;}
117
118 vmg_float ComputeResidualNorm(Multigrid& sol, Multigrid& rhs);
119
120protected:
121 const std::string& OutputPath();
122 int OutputCount() {return ++output_count;}
123
124 Boundary bound;
125 DomainDecomposition* dd;
126
127private:
128 virtual std::string CreateOutputDirectory() = 0;
129
130 Grid* particle_grid;
131 std::string output_path_str;
132 bool output_directory_is_created;
133 int output_count;
134};
135
136}
137
138#endif /* COMM_HPP_ */
Note: See TracBrowser for help on using the repository browser.