KADATH
domain_shell_nbr_conditions_boundary.cpp
1 /*
2  Copyright 2017 Philippe Grandclement
3 
4  This file is part of Kadath.
5 
6  Kadath is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  Kadath is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with Kadath. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #include "headcpp.hpp"
21 #include "spheric.hpp"
22 #include "scalar.hpp"
23 #include "tensor_impl.hpp"
24 #include "tensor.hpp"
25 
26 namespace Kadath {
28  int res = 0 ;
29 
30  for (int j=0 ; j<nbr_coefs(1) ; j++) {
31  bool indic = true ;
32  // Get base in theta :
33  int baset = (*so.get_base().bases_1d[1])(0) ;
34  switch (baset) {
35  case COS_EVEN:
36  if ((j==0) && (mquant!=0))
37  indic = false ;
38  break ;
39  case COS_ODD:
40  if ((j==nbr_coefs(1)-1) || ((j==0) && (mquant!=0)))
41  indic = false ;
42  break ;
43  case SIN_EVEN:
44  if (((j==1) && (mquant>1)) ||(j==0) || (j==nbr_coefs(1)-1))
45  indic = false ;
46  break ;
47  case SIN_ODD:
48  if (((j==0) && (mquant>1)) || (j==nbr_coefs(1)-1))
49  indic = false ;
50  break ;
51  default:
52  cerr << "Unknow theta basis in Domain_shell::nbr_conditions_val_boundary_mquant" << endl ;
53  abort() ;
54  }
55 
56  if (indic)
57  res ++ ;
58  }
59  return res ;
60 }
61 
63 
64  int res = 0 ;
65  int kmin = 2*mlim + 2 ;
66 
67  for (int k=0 ; k<nbr_coefs(2) ; k++)
68  for (int j=0 ; j<nbr_coefs(1) ; j++) {
69  bool indic = true ;
70  // True coef in phi ?
71  if ((k==1) || (k==nbr_coefs(2)-1))
72  indic = false ;
73  // Get base in theta :
74  int baset = (*so.get_base().bases_1d[1])(k) ;
75  switch (baset) {
76  case COS_EVEN:
77  if ((j==0) && (k>=kmin))
78  indic = false ;
79  break ;
80  case COS_ODD:
81  if ((j==nbr_coefs(1)-1) || ((j==0) && (k>=kmin)))
82  indic = false ;
83  break ;
84  case SIN_EVEN:
85  if (((j==1)&&(k>=kmin+2)) || (j==0) || (j==nbr_coefs(1)-1))
86  indic = false ;
87  break ;
88  case SIN_ODD:
89  if (((j==0)&&(k>=kmin+2))||(j==nbr_coefs(1)-1))
90  indic = false ;
91  break ;
92  default:
93  cerr << "Unknow theta basis in Domain_shell::nbr_conditions_val_boundary" << endl ;
94  abort() ;
95  }
96 
97  if (indic)
98  res ++ ;
99  }
100  return res ;
101 }
102 
103 Array<int> Domain_shell::nbr_conditions_boundary (const Tensor& tt, int dom, int bound, int n_cmp, Array<int>** p_cmp) const {
104 
105  // Check boundary
106  if ((bound!=INNER_BC) && (bound!=OUTER_BC)) {
107  cerr << "Unknown boundary in Domain_shell::nbr_conditions_boundary" << endl ;
108  abort() ;
109  }
110 
111  int size = (n_cmp==-1) ? tt.get_n_comp() : n_cmp ;
112  Array<int> res (size) ;
113  int val = tt.get_valence() ;
114  switch (val) {
115  case 0 :
116  if (tt.is_m_quant_affected()) {
117  // Special case for bosonic field
119  } else {
120  if (!tt.is_m_order_affected())
121  res.set(0) = nbr_conditions_val_domain_boundary (tt()(dom), 0) ;
122  else
124  }
125  break ;
126  case 1 : {
127  bool found = false ;
128  // Cartesian basis
129  if (tt.get_basis().get_basis(dom)==CARTESIAN_BASIS) {
130  if (n_cmp==-1) {
131  res.set(0) = nbr_conditions_val_domain_boundary (tt(1)(dom), 0) ;
132  res.set(1) = nbr_conditions_val_domain_boundary (tt(2)(dom), 0) ;
133  res.set(2) = nbr_conditions_val_domain_boundary (tt(3)(dom), 0) ;
134  }
135  else for (int i=0 ; i<n_cmp ; i++) {
136  if ((*p_cmp[i])(0)==1)
137  res.set(i) = nbr_conditions_val_domain_boundary (tt(1)(dom), 0) ;
138  if ((*p_cmp[i])(0)==2)
139  res.set(i) = nbr_conditions_val_domain_boundary (tt(2)(dom), 0) ;
140  if ((*p_cmp[i])(0)==3)
141  res.set(i) = nbr_conditions_val_domain_boundary (tt(3)(dom), 0) ;
142  }
143  found = true ;
144  }
145  // Spherical coordinates
146  if (tt.get_basis().get_basis(dom)==SPHERICAL_BASIS) {
147  if (n_cmp==-1) {
148  res.set(0) = nbr_conditions_val_domain_boundary (tt(1)(dom), 0) ;
149  res.set(1) = nbr_conditions_val_domain_boundary (tt(2)(dom), 1) ;
150  res.set(2) = nbr_conditions_val_domain_boundary (tt(3)(dom), 1) ;
151  }
152  else for (int i=0 ; i<n_cmp ; i++) {
153  if ((*p_cmp[i])(0)==1)
154  res.set(i) = nbr_conditions_val_domain_boundary (tt(1)(dom), 0) ;
155  if ((*p_cmp[i])(0)==2)
156  res.set(i) = nbr_conditions_val_domain_boundary (tt(2)(dom), 1) ;
157  if ((*p_cmp[i])(0)==3)
158  res.set(i) = nbr_conditions_val_domain_boundary (tt(3)(dom), 1) ;
159  }
160  found = true ;
161  }
162  // Spherical coordinates
163  if (tt.get_basis().get_basis(dom)==MTZ_BASIS) {
164  if (n_cmp==-1) {
165  res.set(0) = nbr_conditions_val_domain_boundary (tt(1)(dom), 0) ;
166  res.set(1) = nbr_conditions_val_domain_boundary (tt(2)(dom), 1) ;
167  res.set(2) = nbr_conditions_val_domain_boundary (tt(3)(dom), 1) ;
168  }
169  else for (int i=0 ; i<n_cmp ; i++) {
170  if ((*p_cmp[i])(0)==1)
171  res.set(i) = nbr_conditions_val_domain_boundary (tt(1)(dom), 0) ;
172  if ((*p_cmp[i])(0)==2)
173  res.set(i) = nbr_conditions_val_domain_boundary (tt(2)(dom), 1) ;
174  if ((*p_cmp[i])(0)==3)
175  res.set(i) = nbr_conditions_val_domain_boundary (tt(3)(dom), 1) ;
176  }
177  found = true ;
178  }
179  if (!found) {
180  cerr << "Unknown type of vector Domain_shell::nbr_conditions_boundary" << endl ;
181  abort() ;
182  }
183  }
184  break ;
185  case 2 : {
186  bool found = false ;
187  // Cartesian basis and symetric
188  if ((tt.get_basis().get_basis(dom)==CARTESIAN_BASIS) && (tt.get_n_comp()==6)) {
189  if (n_cmp==-1) {
190  res.set(0) = nbr_conditions_val_domain_boundary (tt(1,1)(dom), 0) ;
191  res.set(1) = nbr_conditions_val_domain_boundary (tt(1,2)(dom), 0) ;
192  res.set(2) = nbr_conditions_val_domain_boundary (tt(1,3)(dom), 0) ;
193  res.set(3) = nbr_conditions_val_domain_boundary (tt(2,2)(dom), 0) ;
194  res.set(4) = nbr_conditions_val_domain_boundary (tt(2,3)(dom), 0) ;
195  res.set(5) = nbr_conditions_val_domain_boundary (tt(3,3)(dom), 0) ;
196  }
197  else for (int i=0 ; i<n_cmp ; i++) {
198  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==1))
199  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 1)(dom), 0) ;
200  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==2))
201  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 2)(dom), 0) ;
202  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==3))
203  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 3)(dom), 0) ;
204  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==2))
205  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 2)(dom), 0) ;
206  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==3))
207  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 3)(dom), 0) ;
208  if (((*p_cmp[i])(0)==3) && ((*p_cmp[i])(1)==3))
209  res.set(i) = nbr_conditions_val_domain_boundary (tt(3, 3)(dom), 0) ;
210  }
211  found = true ;
212  }
213  // Cartesian basis and not symetric
214  if ((tt.get_basis().get_basis(dom)==CARTESIAN_BASIS) && (tt.get_n_comp()==9)) {
215  if (n_cmp==-1) {
216  res.set(0) = nbr_conditions_val_domain_boundary (tt(1,1)(dom), 0) ;
217  res.set(1) = nbr_conditions_val_domain_boundary (tt(1,2)(dom), 0) ;
218  res.set(2) = nbr_conditions_val_domain_boundary (tt(1,3)(dom), 0) ;
219  res.set(3) = nbr_conditions_val_domain_boundary (tt(2,1)(dom), 0) ;
220  res.set(4) = nbr_conditions_val_domain_boundary (tt(2,2)(dom), 0) ;
221  res.set(5) = nbr_conditions_val_domain_boundary (tt(2,3)(dom), 0) ;
222  res.set(6) = nbr_conditions_val_domain_boundary (tt(3,1)(dom), 0) ;
223  res.set(7) = nbr_conditions_val_domain_boundary (tt(3,2)(dom), 0) ;
224  res.set(8) = nbr_conditions_val_domain_boundary (tt(3,3)(dom), 0) ;
225  }
226  else for (int i=0 ; i<n_cmp ; i++) {
227  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==1))
228  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 1)(dom), 0) ;
229  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==2))
230  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 2)(dom), 0) ;
231  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==3))
232  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 3)(dom), 0) ;
233  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==1))
234  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 1)(dom), 0) ;
235  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==2))
236  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 2)(dom), 0) ;
237  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==3))
238  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 3)(dom), 0) ;
239  if (((*p_cmp[i])(0)==3) && ((*p_cmp[i])(1)==1))
240  res.set(i) = nbr_conditions_val_domain_boundary (tt(3, 1)(dom), 0) ;
241  if (((*p_cmp[i])(0)==3) && ((*p_cmp[i])(1)==2))
242  res.set(i) = nbr_conditions_val_domain_boundary (tt(3, 2)(dom), 0) ;
243  if (((*p_cmp[i])(0)==3) && ((*p_cmp[i])(1)==3))
244  res.set(i) = nbr_conditions_val_domain_boundary (tt(3, 3)(dom), 0) ;
245  }
246  found = true ;
247  }
248  // Spherical coordinates and symetric
249  if ((tt.get_basis().get_basis(dom)==SPHERICAL_BASIS) && (tt.get_n_comp()==6)) {
250  if (n_cmp==-1) {
251  res.set(0) = nbr_conditions_val_domain_boundary (tt(1,1)(dom), 0) ;
252  res.set(1) = nbr_conditions_val_domain_boundary (tt(1,2)(dom), 1) ;
253  res.set(2) = nbr_conditions_val_domain_boundary (tt(1,3)(dom), 1) ;
254  res.set(3) = nbr_conditions_val_domain_boundary (tt(2,2)(dom), 2) ;
255  res.set(4) = nbr_conditions_val_domain_boundary (tt(2,3)(dom), 2) ;
256  res.set(5) = nbr_conditions_val_domain_boundary (tt(3,3)(dom), 2) ;
257  }
258  else for (int i=0 ; i<n_cmp ; i++) {
259  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==1))
260  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 1)(dom), 0) ;
261  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==2))
262  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 2)(dom), 1) ;
263  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==3))
264  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 3)(dom), 1) ;
265  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==2))
266  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 2)(dom), 2) ;
267  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==3))
268  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 3)(dom), 2) ;
269  if (((*p_cmp[i])(0)==3) && ((*p_cmp[i])(1)==3))
270  res.set(i) = nbr_conditions_val_domain_boundary (tt(3, 3)(dom), 2) ;
271  }
272  found = true ;
273  }
274  // Spherical coordinates and not symetric
275  if ((tt.get_basis().get_basis(dom)==SPHERICAL_BASIS) && (tt.get_n_comp()==9)) {
276  if (n_cmp==-1) {
277  res.set(0) = nbr_conditions_val_domain_boundary (tt(1,1)(dom), 0) ;
278  res.set(1) = nbr_conditions_val_domain_boundary (tt(1,2)(dom), 1) ;
279  res.set(2) = nbr_conditions_val_domain_boundary (tt(1,3)(dom), 1) ;
280  res.set(3) = nbr_conditions_val_domain_boundary (tt(2,1)(dom), 1) ;
281  res.set(4) = nbr_conditions_val_domain_boundary (tt(2,2)(dom), 2) ;
282  res.set(5) = nbr_conditions_val_domain_boundary (tt(2,3)(dom), 2) ;
283  res.set(6) = nbr_conditions_val_domain_boundary (tt(3,1)(dom), 1) ;
284  res.set(7) = nbr_conditions_val_domain_boundary (tt(3,2)(dom), 2) ;
285  res.set(8) = nbr_conditions_val_domain_boundary (tt(3,3)(dom), 2) ;
286 
287  }
288  else for (int i=0 ; i<n_cmp ; i++) {
289  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==1))
290  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 1)(dom), 0) ;
291  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==2))
292  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 2)(dom), 1) ;
293  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==3))
294  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 3)(dom), 1) ;
295  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==1))
296  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 1)(dom), 1) ;
297  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==2))
298  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 2)(dom), 2) ;
299  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==3))
300  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 3)(dom), 2) ;
301  if (((*p_cmp[i])(0)==3) && ((*p_cmp[i])(1)==1))
302  res.set(i) = nbr_conditions_val_domain_boundary (tt(3, 1)(dom), 1) ;
303  if (((*p_cmp[i])(0)==3) && ((*p_cmp[i])(1)==2))
304  res.set(i) = nbr_conditions_val_domain_boundary (tt(3, 2)(dom), 2) ;
305  if (((*p_cmp[i])(0)==3) && ((*p_cmp[i])(1)==3))
306  res.set(i) = nbr_conditions_val_domain_boundary (tt(3, 3)(dom), 2) ;
307  }
308  found = true ;
309  }
310  // MTZ coordinates and symetric
311  if ((tt.get_basis().get_basis(dom)==MTZ_BASIS) && (tt.get_n_comp()==6)) {
312  if (n_cmp==-1) {
313  res.set(0) = nbr_conditions_val_domain_boundary (tt(1,1)(dom), 0) ;
314  res.set(1) = nbr_conditions_val_domain_boundary (tt(1,2)(dom), 1) ;
315  res.set(2) = nbr_conditions_val_domain_boundary (tt(1,3)(dom), 1) ;
316  res.set(3) = nbr_conditions_val_domain_boundary (tt(2,2)(dom), 2) ;
317  res.set(4) = nbr_conditions_val_domain_boundary (tt(2,3)(dom), 2) ;
318  res.set(5) = nbr_conditions_val_domain_boundary (tt(3,3)(dom), 2) ;
319  }
320  else for (int i=0 ; i<n_cmp ; i++) {
321  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==1))
322  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 1)(dom), 0) ;
323  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==2))
324  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 2)(dom), 1) ;
325  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==3))
326  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 3)(dom), 1) ;
327  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==2))
328  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 2)(dom), 2) ;
329  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==3))
330  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 3)(dom), 2) ;
331  if (((*p_cmp[i])(0)==3) && ((*p_cmp[i])(1)==3))
332  res.set(i) = nbr_conditions_val_domain_boundary (tt(3, 3)(dom), 2) ;
333  }
334  found = true ;
335  }
336  // MTZ coordinates and not symetric
337  if ((tt.get_basis().get_basis(dom)==MTZ_BASIS) && (tt.get_n_comp()==9)) {
338  if (n_cmp==-1) {
339  res.set(0) = nbr_conditions_val_domain_boundary (tt(1,1)(dom), 0) ;
340  res.set(1) = nbr_conditions_val_domain_boundary (tt(1,2)(dom), 1) ;
341  res.set(2) = nbr_conditions_val_domain_boundary (tt(1,3)(dom), 1) ;
342  res.set(3) = nbr_conditions_val_domain_boundary (tt(2,1)(dom), 1) ;
343  res.set(4) = nbr_conditions_val_domain_boundary (tt(2,2)(dom), 2) ;
344  res.set(5) = nbr_conditions_val_domain_boundary (tt(2,3)(dom), 2) ;
345  res.set(6) = nbr_conditions_val_domain_boundary (tt(3,1)(dom), 1) ;
346  res.set(7) = nbr_conditions_val_domain_boundary (tt(3,2)(dom), 2) ;
347  res.set(8) = nbr_conditions_val_domain_boundary (tt(3,3)(dom), 2) ;
348 
349  }
350  else for (int i=0 ; i<n_cmp ; i++) {
351  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==1))
352  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 1)(dom), 0) ;
353  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==2))
354  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 2)(dom), 1) ;
355  if (((*p_cmp[i])(0)==1) && ((*p_cmp[i])(1)==3))
356  res.set(i) = nbr_conditions_val_domain_boundary (tt(1, 3)(dom), 1) ;
357  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==1))
358  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 1)(dom), 1) ;
359  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==2))
360  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 2)(dom), 2) ;
361  if (((*p_cmp[i])(0)==2) && ((*p_cmp[i])(1)==3))
362  res.set(i) = nbr_conditions_val_domain_boundary (tt(2, 3)(dom), 2) ;
363  if (((*p_cmp[i])(0)==3) && ((*p_cmp[i])(1)==1))
364  res.set(i) = nbr_conditions_val_domain_boundary (tt(3, 1)(dom), 1) ;
365  if (((*p_cmp[i])(0)==3) && ((*p_cmp[i])(1)==2))
366  res.set(i) = nbr_conditions_val_domain_boundary (tt(3, 2)(dom), 2) ;
367  if (((*p_cmp[i])(0)==3) && ((*p_cmp[i])(1)==3))
368  res.set(i) = nbr_conditions_val_domain_boundary (tt(3, 3)(dom), 2) ;
369  }
370  found = true ;
371  }
372  if (!found) {
373  cerr << "Unknown type of 2-tensor Domain_shell::nbr_conditions_boundary" << endl ;
374  abort() ;
375  }
376  }
377  break ;
378  default :
379  cerr << "Valence " << val << " not implemented in Domain_shell::nbr_conditions_boundary" << endl ;
380  break ;
381  }
382  return res ;
383 }}
reference set(const Index &pos)
Read/write of an element.
Definition: array.hpp:186
Bases_container bases_1d
Arrays containing the various basis of decomposition.
int get_basis(int nd) const
Read only the basis in a given domain.
Definition: base_tensor.hpp:93
virtual Array< int > nbr_conditions_boundary(const Tensor &, int, int, int n_cmp=-1, Array< int > **p_cmp=0x0) const
Computes number of discretized equations associated with a given tensorial equation on a boundary.
int nbr_conditions_val_domain_boundary_mquant(const Val_domain &so, int mquant) const
Computes number of discretized equations associated with a given equation on a boundary.
int nbr_conditions_val_domain_boundary(const Val_domain &so, int mlim) const
Computes number of discretized equations associated with a given equation on a boundary.
Dim_array nbr_coefs
Number of coefficients.
Definition: space.hpp:66
int get_m_order() const
Returns .
Definition: tensor.hpp:737
int get_m_quant() const
Returns .
Definition: tensor.hpp:747
Tensor handling.
Definition: tensor.hpp:149
bool is_m_order_affected() const
Checks whether the additional parameter order is affected (not very used).
Definition: tensor.hpp:323
const Param_tensor & get_parameters() const
Returns a pointer on the possible additional parameter.
Definition: tensor.hpp:311
const Base_tensor & get_basis() const
Returns the vectorial basis (triad) on which the components are defined.
Definition: tensor.hpp:504
int get_n_comp() const
Returns the number of stored components.
Definition: tensor.hpp:514
int get_valence() const
Returns the valence.
Definition: tensor.hpp:509
bool is_m_quant_affected() const
Checks whether the additional parameter is affected (used for boson stars for instance).
Definition: tensor.hpp:326
Class for storing the basis of decompositions of a field and its values on both the configuration and...
Definition: val_domain.hpp:69
const Base_spectral & get_base() const
Returns the basis of decomposition.
Definition: val_domain.hpp:122