-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDataStructures.cpp
129 lines (95 loc) · 3.19 KB
/
DataStructures.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include "DataStructures.h"
// Functions for scalar and vector fields -------------------------------------
// Functions specific to the scalar field -------------------------------------
ScalarField::ScalarField ( int Nx, int Ny ): Field<FLOAT>( Nx, Ny, 1, 1 ) {
initialize();
}
ScalarField::ScalarField ( int Nx, int Ny, int Nz ): Field<FLOAT> ( Nx, Ny, Nz, 1 ) {
initialize();
}
FLOAT& ScalarField::getScalar ( int i, int j, int k ) {
return _data [ index2array ( i, j, k ) ];
}
void ScalarField::show(const std::string title){
std::cout << std::endl << "--- " << title << " ---" << std::endl;
for (int k = 0; k < _size_z; k++){
for (int j = _size_y-1; j > -1; j--){
for (int i = 0; i < _size_x; i++){
std::cout << getScalar(i,j,k) << "\t";
}
std::cout << std::endl;
}
std::cout << std::endl;
}
}
void ScalarField::initialize () {
for ( int i = 0; i < _size; i++ ){
_data[i] = 0.0;
}
}
// Functions related to the vector field --------------------------------------
VectorField::VectorField ( int Nx, int Ny ): Field<FLOAT> ( Nx, Ny, 1, 2 ) {
initialize();
}
VectorField::VectorField ( int Nx, int Ny, int Nz ): Field<FLOAT> ( Nx, Ny, Nz, 3 ) {
initialize();
}
FLOAT* VectorField::getVector ( int i, int j, int k ) {
return &_data[index2array( i, j, k )];
}
void VectorField::show(const std::string title){
std::cout << std::endl << "--- " << title << " ---" << std::endl;
std::cout << "Component 1" << std::endl;
for (int k = 0; k < _size_z; k++){
for (int j = _size_y-1; j > -1; j--){
for (int i = 0; i < _size_x; i++){
std::cout << getVector(i,j,k)[0] << "\t";
}
std::cout << std::endl;
}
std::cout << std::endl;
}
std::cout << "Component 2" << std::endl;
for (int k = 0; k < _size_z; k++){
for (int j = _size_y-1; j > -1; j--){
for (int i = 0; i < _size_x; i++){
std::cout << getVector(i,j,k)[1] << "\t";
}
std::cout << std::endl;
}
std::cout << std::endl;
}
}
void VectorField::initialize () {
for ( int i = 0; i < _size; i++ ){
_data[i] = 0.0;
}
}
//----------------------------------------------------------------------------
// Stuff related to the integer scalar field
IntScalarField::IntScalarField ( int Nx, int Ny ) : Field<int> ( Nx, Ny, 1, 1 ) {
initialize();
}
IntScalarField::IntScalarField ( int Nx, int Ny, int Nz ) : Field<int> ( Nx, Ny, Nz, 1 ) {
initialize();
}
void IntScalarField::initialize () {
for ( int i = 0; i < _size; i++ ){
_data[i] = 0;
}
}
int & IntScalarField::getValue ( int i, int j, int k ) {
return _data[ index2array (i, j, k) ];
}
void IntScalarField::show(const std::string title){
std::cout << std::endl << "--- " << title << " ---" << std::endl;
for (int k = 0; k < _size_z; k++){
for (int j = _size_y-1; j > -1; j--){
for (int i = 0; i < _size_x; i++){
std::cout << getValue(i,j,k) << "\t";
}
std::cout << std::endl;
}
std::cout << std::endl;
}
}