KADATH
domain_polar_outer_adapted_term_eq.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 "utilities.hpp"
22 #include "adapted_polar.hpp"
23 #include "point.hpp"
24 #include "array_math.hpp"
25 #include "val_domain.hpp"
26 #include "scalar.hpp"
27 #include "tensor_impl.hpp"
28 #include "vector.hpp"
29 
30 namespace Kadath {
32  return derive_r(so) ;
33 }
34 
36 
37  assert (so.get_dom() == num_dom) ;
38 
39  Tensor val_res(*so.val_t, false) ;
40 
41  for (int cmp = 0 ; cmp<so.val_t->get_n_comp() ; cmp++) {
42  Array<int>ind (val_res.indices(cmp)) ;
43  val_res.set(ind).set_domain(num_dom) = (*so.val_t)(ind)(num_dom).der_var(1) / (*der_rad_term_eq->val_t)()(num_dom) ;
44  }
45 
46  bool doder = ((so.der_t==0x0) || (der_rad_term_eq->der_t==0x0)) ? false : true ;
47  if (doder) {
48  Tensor der_res (*so.der_t, false) ;
49  for (int cmp = 0 ; cmp<so.val_t->get_n_comp() ; cmp++) {
50  Array<int>ind (val_res.indices(cmp)) ;
51  der_res.set(ind).set_domain(num_dom) = ((*so.der_t)(ind)(num_dom).der_var(1)*(*der_rad_term_eq->val_t)()(num_dom)
52  - (*so.val_t)(ind)(num_dom).der_var(1)*(*der_rad_term_eq->der_t)()(num_dom)) /
54  }
55  return Term_eq (num_dom, val_res, der_res) ;
56  }
57  else
58  return Term_eq (num_dom, val_res) ;
59 }
60 
62 
63  assert (so.get_dom() == num_dom) ;
64  Term_eq* dtprime ;
65  Tensor val_res(*so.val_t, false) ;
66 
67  for (int cmp = 0 ; cmp<so.val_t->get_n_comp() ; cmp++) {
68  Array<int>ind (val_res.indices(cmp)) ;
69  val_res.set(ind).set_domain(num_dom) = (*so.val_t)(ind)(num_dom).der_var(2) ;
70  }
71  bool doder = (so.der_t==0x0) ? false : true ;
72 
73  if (doder) {
74  Tensor der_res (*so.der_t, false) ;
75  for (int cmp = 0 ; cmp<so.val_t->get_n_comp() ; cmp++) {
76  Array<int>ind (val_res.indices(cmp)) ;
77  der_res.set(ind).set_domain(num_dom) = (*so.der_t)(ind)(num_dom).der_var(2) ;
78  }
79  dtprime = new Term_eq (num_dom, val_res, der_res) ;
80  }
81  else
82  dtprime = new Term_eq (num_dom, val_res) ;
83 
84 
85  Term_eq res (*dtprime - (*dt_rad_term_eq) * derive_r(so)) ;
86  delete dtprime ;
87  return res ;
88 
89 }
90 
92 
93  assert (so.get_dom() == num_dom) ;
94 
95  int valso = so.get_val_t().get_valence() ;
96  Array<int> type_ind (valso+1) ;
97  type_ind.set(0) = COV ;
98  for (int i=0 ; i<valso ; i++)
99  type_ind.set(i+1) = so.get_val_t().get_index_type(i) ;
100 
101  Base_tensor basis (sp) ;
102  basis.set_basis(num_dom) = SPHERICAL_BASIS ;
103  Tensor res (sp, valso+1 , type_ind, basis) ;
104 
105  Term_eq comp_r (derive_r(so)) ;
106  Term_eq comp_t (derive_t(so)/(*rad_term_eq)) ;
107 
108  // Loop on cmp :
109  for (int nc=0 ; nc<so.get_val_t().get_n_comp() ; nc++) {
110 
111  Array<int> ind (so.get_val_t().indices(nc)) ;
112  Array<int> indtarget (valso+1) ;
113  for (int i=0 ; i<valso ; i++)
114  indtarget.set(i+1) = ind(i) ;
115 
116  // R comp :
117  indtarget.set(0) = 1 ;
118  res.set(indtarget).set_domain(num_dom) = comp_r.get_val_t()(ind)(num_dom);
119  // theta comp :
120  indtarget.set(0) = 2 ;
121  res.set(indtarget).set_domain(num_dom) = comp_t.get_val_t()(ind)(num_dom) ;
122  }
123  bool doder = ((so.der_t==0x0) || (outer_radius_term_eq->der_t==0x0)) ? false : true ;
124 
125  if (!doder) {
126  return Term_eq (num_dom, res) ;
127  }
128  else {
129 
130  Tensor resder (sp, valso+1 , type_ind, basis) ;
131  // Loop on cmp :
132  for (int nc=0 ; nc<so.get_val_t().get_n_comp() ; nc++) {
133 
134  Array<int> ind (so.get_val_t().indices(nc)) ;
135  Array<int> indtarget (valso+1) ;
136  for (int i=0 ; i<valso ; i++)
137  indtarget.set(i+1) = ind(i) ;
138 
139  // R comp :
140  indtarget.set(0) = 1 ;
141  resder.set(indtarget).set_domain(num_dom) = comp_r.get_der_t()(ind)(num_dom);
142  // theta comp :
143  indtarget.set(0) = 2 ;
144  resder.set(indtarget).set_domain(num_dom) = comp_t.get_der_t()(ind)(num_dom) ;
145  }
146  return Term_eq (num_dom, res, resder) ;
147  }
148 }
149 
151 
153 
154  Scalar val_norme (sp) ;
155  val_norme.set_domain(num_dom) = sqrt((*grad.val_t)(1)(num_dom)*(*grad.val_t)(1)(num_dom)
156  + (*grad.val_t)(2)(num_dom)*(*grad.val_t)(2)(num_dom)) ;
157  bool doder = ((grad.der_t==0x0) || (outer_radius_term_eq->der_t==0x0)) ? false : true ;
158  if (doder) {
159  Scalar der_norme (sp) ;
160  der_norme.set_domain(num_dom) = ((*grad.der_t)(1)(num_dom)*(*grad.val_t)(1)(num_dom)
161  + (*grad.der_t)(2)(num_dom)*(*grad.val_t)(2)(num_dom)) / val_norme(num_dom) ;
162  Term_eq norme (num_dom, val_norme, der_norme) ;
163  if (normal_spher==0x0)
164  normal_spher = new Term_eq (grad / norme) ;
165  else
166  *normal_spher = Term_eq(grad/norme) ;
167  }
168  else {
169  Term_eq norme (num_dom, val_norme) ;
170  if (normal_spher==0x0)
171  normal_spher = new Term_eq (grad / norme) ;
172  else
173  *normal_spher = Term_eq(grad/norme) ;
174  }
175 }
176 
178 
179 
180  do_normal_spher() ;
181 
182  Base_tensor basis (sp) ;
183  basis.set_basis(num_dom) = CARTESIAN_BASIS ;
184  Vector val (sp, CON, basis) ;
185 
188 
189  bool doder = (normal_spher->der_t==0x0) ? false : true ;
190  if (doder) {
191  Vector der (sp, CON, basis) ;
192 
195 
196  if (normal_cart==0x0)
197  normal_cart = new Term_eq (num_dom, val, der) ;
198  else
199  *normal_cart = Term_eq(num_dom, val,der) ;
200  }
201  else {
202  if (normal_cart==0x0)
203  normal_cart = new Term_eq (num_dom, val) ;
204  else
205  *normal_cart = Term_eq(num_dom, val) ;
206  }
207 }
208 
210 
211 
212  switch (bound) {
213  case OUTER_BC : {
214  // Deformed surface
215  if (normal_spher == 0x0)
216  do_normal_spher() ;
217 
218  int valso = so.get_val_t().get_valence() ;
219 
220  Term_eq grad (flat_grad_spher(so)) ;
221 
222  Tensor res (so.get_val_t(), false) ;
223 
224  // Loop on cmp :
225  for (int nc=0 ; nc<so.get_val_t().get_n_comp() ; nc++) {
226 
227  Array<int> ind (so.get_val_t().indices(nc)) ;
228  Array<int> indgrad (valso+1) ;
229  for (int i=0 ; i<valso ; i++)
230  indgrad.set(i+1) = ind(i) ;
231 
232  indgrad.set(0) = 1 ;
233  res.set(ind).set_domain(num_dom) = (*grad.val_t)(indgrad)(num_dom) * (*normal_spher->val_t)(1)(num_dom) ;
234  indgrad.set(0) = 2 ;
235  res.set(ind).set_domain(num_dom) += (*grad.val_t)(indgrad)(num_dom) * (*normal_spher->val_t)(2)(num_dom) ;
236  }
237 
238  bool doder = ((grad.der_t == 0x0) || (normal_spher->der_t == 0x0)) ? false : true ;
239  if (doder) {
240 
241  Tensor der (so.get_val_t(), false) ;
242 
243  // Loop on cmp :
244  for (int nc=0 ; nc<so.get_val_t().get_n_comp() ; nc++) {
245 
246  Array<int> ind (so.get_val_t().indices(nc)) ;
247  Array<int> indgrad (valso+1) ;
248  for (int i=0 ; i<valso ; i++)
249  indgrad.set(i+1) = ind(i) ;
250 
251  indgrad.set(0) = 1 ;
252  der.set(ind).set_domain(num_dom) = (*grad.der_t)(indgrad)(num_dom) * (*normal_spher->val_t)(1)(num_dom)
253  + (*grad.val_t)(indgrad)(num_dom) * (*normal_spher->der_t)(1)(num_dom) ;
254  indgrad.set(0) = 2 ;
255  der.set(ind).set_domain(num_dom) += (*grad.der_t)(indgrad)(num_dom) * (*normal_spher->val_t)(2)(num_dom)
256  + (*grad.val_t)(indgrad)(num_dom) * (*normal_spher->der_t)(2)(num_dom) ;
257  }
258 
259  return Term_eq (num_dom, res, der) ;
260  }
261  else
262  return Term_eq (num_dom, res) ;
263  }
264  case INNER_BC : {
265  return derive_r(so) ;
266  }
267  default :
268  cerr << "Unknown boundary in Domain_polar_shell_outer_adapted::der_normal" << endl ;
269  abort() ;
270  }
271 }
272 
273 
275 
276 #ifndef REMOVE_ALL_CHECKS
277  if (so.get_val_t().get_valence() != 0) {
278  cerr << "Domain_polar_shell_outer_adapted::lap_term_eq only defined for scalars" << endl ;
279  abort() ;
280  }
281 #endif
282 
283  // Angular part :
284 
286 
287  Term_eq dert (derive_t(so));
288  Term_eq p1 (derive_t(dert)) ;
290 
291  Term_eq dr(derive_r(so)) ;
292 
293  Term_eq res (derive_r(dr) + 2 *dr / (*rad_term_eq) + (p1+p2)/(*rad_term_eq)/(*rad_term_eq));
294 
295 
296  return res ;
297 }
298 
300 #ifndef REMOVE_ALL_CHECKS
301  if (mm!=0) {
302  cerr << "Domain_polar_shell_outer_adapted::lap2_term_eq not defined for m != 0 (for now)" << endl ;
303  abort() ;
304  }
305 
306  if (so.get_val_t().get_valence() != 0) {
307  cerr << "Domain_polar_shell_outer_adapted::lap2_term_eq only defined for scalars" << endl ;
308  abort() ;
309  }
310 #endif
311 
312  // Angular part :
313  Term_eq dert (derive_t(so));
314  Term_eq p1 (derive_t(dert)) ;
315 
316  Term_eq dr(derive_r(so)) ;
317 
318  Term_eq res (derive_r(dr) + dr / (*rad_term_eq) + p1/(*rad_term_eq)/(*rad_term_eq));
319 
320 
321  return res ;
322 }
323 
325 
326 
327  return so * (*rad_term_eq) ;
328 }
329 
331 
332 
333  return so / (*rad_term_eq) ;
334 }
335 
337 
338  Tensor der (*so->val_t, false) ;
339  for (int cmp=0 ; cmp<so->val_t->get_n_comp() ; cmp ++) {
340 
341 
342 
343  Val_domain derr ((*(*so->val_t).cmp[cmp])(num_dom).der_var(1) / (*der_rad_term_eq->val_t)()(num_dom)) ;
344 
345  if (!derr.check_if_zero()) {
346  Val_domain res(this) ;
347  res.allocate_conf() ;
348  Index pos (nbr_points) ;
349  do {
350  res.set(pos) = (*(*outer_radius_term_eq->der_t).cmp[0])(num_dom)(pos) / 2. * (1+((*coloc[0])(pos(0)))) * derr(pos) ;
351  }
352  while (pos.inc()) ;
353  res.set_base() = (*(*so->val_t).cmp[cmp])(num_dom).get_base() ;
354  der.cmp[cmp]->set_domain(num_dom) = res ;
355  }
356  else
357  der.cmp[cmp]->set_domain(num_dom).set_zero() ;
358  }
359 
360  so->set_der_t (der) ;
361 }
362 
364  int dom = so.get_dom() ;
365  assert (dom == num_dom) ;
366 
367  int valence = so.val_t->get_valence() ;
368 
369  Array<int> type_ind (valence+1) ;
370  type_ind.set(0) = COV ;
371  for (int i=1 ; i<valence+1 ; i++)
372  type_ind.set(i) = so.val_t->get_index_type(i-1) ;
373 
374  Base_tensor basis (so.get_val_t().get_space()) ;
375  basis.set_basis(dom) = SPHERICAL_BASIS ;
376 
377  Term_eq comp_r (derive_r(so)) ;
378  Term_eq comp_t (derive_t(so) / (*rad_term_eq)) ;
379 
380  Tensor val_res (so.get_val_t().get_space(), valence+1, type_ind, basis) ;
381  {
382  Index pos_so (*so.val_t) ;
383  Index pos_res (val_res) ;
384  do {
385  for (int i=1 ; i<valence+1 ; i++)
386  pos_res.set(i) = pos_so(i-1) ;
387  // R part
388  pos_res.set(0) = 0 ;
389  val_res.set(pos_res).set_domain(num_dom) = (*comp_r.val_t)(pos_so)(num_dom) ;
390  // Theta part
391  pos_res.set(0) = 1 ;
392  val_res.set(pos_res).set_domain(num_dom) = (*comp_t.val_t)(pos_so)(num_dom) ;
393  }
394  while (pos_so.inc()) ;
395 }
396 
397  bool doder = ((so.der_t==0x0) || (outer_radius_term_eq->der_t==0x0)) ? false : true ;
398  if (doder) {
399  Tensor der_res (so.get_val_t().get_space(), valence+1, type_ind, basis) ;
400  Index pos_so (*so.der_t) ;
401  Index pos_res (val_res) ;
402  do {
403  for (int i=1 ; i<valence+1 ; i++)
404  pos_res.set(i) = pos_so(i-1) ;
405  // R part
406  pos_res.set(0) = 0 ;
407  der_res.set(pos_res).set_domain(num_dom) = (*comp_r.der_t)(pos_so)(num_dom) ;
408  // Theta part
409  pos_res.set(0) = 1 ;
410  der_res.set(pos_res).set_domain(num_dom) = (*comp_t.der_t)(pos_so)(num_dom) ;
411  }
412  while (pos_so.inc()) ;
413 
414  return Term_eq (num_dom, val_res, der_res) ;
415  }
416  else
417  return Term_eq (num_dom, val_res) ;
418 }
419 
420 
422  int dom = so.get_dom() ;
423  assert (dom == num_dom) ;
424 
425  int valence = so.val_t->get_valence() ;
426 
427  Array<int> type_ind (valence+1) ;
428  type_ind.set(0) = COV ;
429  for (int i=1 ; i<valence+1 ; i++)
430  type_ind.set(i) = so.val_t->get_index_type(i-1) ;
431 
432  Base_tensor basis (so.get_val_t().get_space()) ;
433  basis.set_basis(dom) = CARTESIAN_BASIS ;
434 
435  Term_eq comp_r (derive_r(so)) ;
436  Term_eq comp_t (derive_t(so) / (*rad_term_eq)) ;
437 
438  Tensor val_res (so.get_val_t().get_space(), valence+1, type_ind, basis) ;
439  {
440  Index pos_so (*so.val_t) ;
441  Index pos_res (val_res) ;
442  do {
443  for (int i=1 ; i<valence+1 ; i++)
444  pos_res.set(i) = pos_so(i-1) ;
445 
446  // X part
447  pos_res.set(0) = 0 ;
448  val_res.set(pos_res).set_domain(num_dom) = mult_sin_theta((*comp_r.val_t)(pos_so)(num_dom)) + mult_cos_theta((*comp_t.val_t)(pos_so)(num_dom)) ;
449  // Z part
450  pos_res.set(0) = 1 ;
451  val_res.set(pos_res).set_domain(num_dom) =
452  mult_cos_theta((*comp_r.val_t)(pos_so)(num_dom)) - mult_sin_theta((*comp_t.val_t)(pos_so)(num_dom)) ;
453  }
454  while (pos_so.inc()) ;
455 }
456 
457  bool doder = ((so.der_t==0x0) || (rad_term_eq->der_t==0x0)) ? false : true ;
458  if (doder) {
459  Tensor der_res (so.get_val_t().get_space(), valence+1, type_ind, basis) ;
460  Index pos_so (*so.der_t) ;
461  Index pos_res (val_res) ;
462  do {
463  for (int i=1 ; i<valence+1 ; i++)
464  pos_res.set(i) = pos_so(i-1) ;
465 
466  Val_domain auxi (mult_sin_theta((*comp_r.der_t)(pos_so)(num_dom)) + mult_cos_theta((*comp_t.der_t)(pos_so)(num_dom))) ;
467  // X part
468  pos_res.set(0) = 0 ;
469  der_res.set(pos_res).set_domain(num_dom) = mult_sin_theta((*comp_r.der_t)(pos_so)(num_dom)) + mult_cos_theta((*comp_t.der_t)(pos_so)(num_dom)) ;
470  // Z part
471  pos_res.set(0) = 1 ;
472  der_res.set(pos_res).set_domain(num_dom) =
473  mult_cos_theta((*comp_r.der_t)(pos_so)(num_dom)) - mult_sin_theta((*comp_t.der_t)(pos_so)(num_dom)) ;
474  }
475  while (pos_so.inc()) ;
476 
477  return Term_eq (num_dom, val_res, der_res) ;
478  }
479  else
480  return Term_eq (num_dom, val_res) ;
481 }
482 
484  return partial_cart(so) ;
485 }
486 
487 const Term_eq* Domain_polar_shell_outer_adapted::give_normal (int bound, int tipe) const {
488  assert (bound==INNER_BC) ;
489  switch (tipe) {
490  case CARTESIAN_BASIS :
491  if (normal_cart==0x0)
492  do_normal_cart() ;
493  return normal_cart ;
494 
495  case SPHERICAL_BASIS :
496  if (normal_spher==0x0)
497  do_normal_spher() ;
498  return normal_spher ;
499 
500  default:
501  cerr << "Unknown type of tensorial basis in Domain_polar_shell_outer_adapted::give_normal" << endl ;
502  abort() ;
503  }
504 }
505 
507  cerr << "Domain_polar_shell_outer_adapted::integ_term_eq not implemented yet" << endl ;
508  abort() ;
509 }
510 }
511 
reference set(const Index &pos)
Read/write of an element.
Definition: array.hpp:186
Describes the tensorial basis used by the various tensors.
Definition: base_tensor.hpp:49
int & set_basis(int nd)
Read/write the basis in a given domain.
Definition: base_tensor.hpp:91
virtual Term_eq lap_term_eq(const Term_eq &, int) const
Returns the flat Laplacian of Term_eq, for a given harmonic.
virtual Term_eq dr_term_eq(const Term_eq &) const
Radial derivative of a Term_eq.
Term_eq * normal_cart
Pointer on the Term_eq containing the normal vector to the outer boundary, in Cartesian coordinates.
virtual Term_eq der_normal_term_eq(const Term_eq &, int) const
Returns the normal derivative of a Term_eq.
virtual Term_eq integ_term_eq(const Term_eq &, int) const
Surface integral of a Term_eq.
void do_normal_cart() const
Computes the normal wrt the inner boundary, in Cartesian coordinates.
virtual Val_domain mult_cos_theta(const Val_domain &) const
Multiplication by .
const Space & sp
The corresponding Space ; required for updating fields whene the mapping changes.
virtual Term_eq lap2_term_eq(const Term_eq &, int) const
Returns the flat 2d-Laplacian of Term_eq, for a given harmonic.
virtual Term_eq partial_spher(const Term_eq &) const
Computes the part of the gradient containing the partial derivative of the field, in spherical orthon...
Term_eq derive_r(const Term_eq &so) const
Computes .
void do_normal_spher() const
Computes the normal wrt the inner boundary, in orthonormal spherical coordinates.
virtual Term_eq partial_cart(const Term_eq &) const
Computes the part of the gradient containing the partial derivative of the field, in Cartesian coordi...
Term_eq flat_grad_spher(const Term_eq &) const
Computes the flat gradient of a field, in orthonormal spherical coordinates.
virtual Term_eq mult_r_term_eq(const Term_eq &) const
Multiplication by of a Term_eq.
Term_eq * dt_rad_term_eq
Pointer on the Term_eq containing the .
Term_eq * normal_spher
Pointer on the Term_eq containing the normal vector to the outer boundary, in orthonormal spherical c...
virtual const Term_eq * give_normal(int, int) const
Returns the vector normal to a surface.
Term_eq derive_t(const Term_eq &so) const
Computes .
virtual void update_term_eq(Term_eq *) const
Update the value of a field, after the shape of the Domain has been changed by the system.
virtual Term_eq grad_term_eq(const Term_eq &) const
Gradient of Term_eq.
virtual Term_eq div_r_term_eq(const Term_eq &) const
Division by of a Term_eq.
Term_eq * rad_term_eq
Pointer on the Term_eq containing the radius.
virtual Val_domain mult_sin_theta(const Val_domain &) const
Multiplication by .
Term_eq * der_rad_term_eq
Pointer on the Term_eq containing the .
Term_eq * outer_radius_term_eq
Pointer on the outer boundary , as a Term_eq.
Term_eq do_comp_by_comp(const Term_eq &so, Val_domain(Domain::*pfunc)(const Val_domain &) const) const
Function used to apply the same operation to all the components of a tensor, in the current domain.
Definition: domain.cpp:283
int num_dom
Number of the current domain (used by the Space)
Definition: space.hpp:63
virtual Val_domain div_sin_theta(const Val_domain &) const
Division by .
Definition: domain.cpp:1248
Dim_array nbr_points
Number of colocation points.
Definition: space.hpp:65
Memory_mapped_array< Array< double > * > coloc
Colocation points in each dimension (stored in ndim 1d- arrays)
Definition: space.hpp:75
virtual Val_domain mult_cos_theta(const Val_domain &) const
Multiplication by .
Definition: domain.cpp:1224
Class that gives the position inside a multi-dimensional Array.
Definition: index.hpp:38
int & set(int i)
Read/write of the position in a given dimension.
Definition: index.hpp:72
bool inc(int increm, int var=0)
Increments the position of the Index.
Definition: index.hpp:99
The class Scalar does not really implements scalars in the mathematical sense but rather tensorial co...
Definition: scalar.hpp:67
Val_domain & set_domain(int)
Read/write of a particular Val_domain.
Definition: scalar.hpp:555
Tensor handling.
Definition: tensor.hpp:149
Memory_mapped_array< Scalar * > cmp
Array of size n_comp of pointers onto the components.
Definition: tensor.hpp:179
Scalar & set(const Array< int > &ind)
Returns the value of a component (read/write version).
Definition: tensor_impl.hpp:91
int get_index_type(int i) const
Gives the type (covariant or contravariant) of a given index.
Definition: tensor.hpp:526
int get_n_comp() const
Returns the number of stored components.
Definition: tensor.hpp:514
virtual Array< int > indices(int pos) const
Gives the values of the indices corresponding to a location in the array used for storage of the comp...
Definition: tensor.hpp:484
int get_valence() const
Returns the valence.
Definition: tensor.hpp:509
const Space & get_space() const
Returns the Space.
Definition: tensor.hpp:499
This class is intended to describe the manage objects appearing in the equations.
Definition: term_eq.hpp:62
Tensor * der_t
Pointer on the variation, if the Term_eq is a Tensor.
Definition: term_eq.hpp:69
void set_der_t(Tensor)
Sets the tensorial variation (only the values in the pertinent Domain are copied).
Definition: term_eq.cpp:171
int get_dom() const
Definition: term_eq.hpp:135
Tensor const & get_val_t() const
Definition: term_eq.hpp:355
Tensor const & get_der_t() const
Definition: term_eq.hpp:369
Tensor * val_t
Pointer on the value, if the Term_eq is a Tensor.
Definition: term_eq.hpp:68
Class for storing the basis of decompositions of a field and its values on both the configuration and...
Definition: val_domain.hpp:69
bool check_if_zero() const
Check whether the logical state is zero or not.
Definition: val_domain.hpp:142
double & set(const Index &pos)
Read/write the value of the field in the configuration space.
Definition: val_domain.cpp:171
Base_spectral & set_base()
Sets the basis of decomposition.
Definition: val_domain.hpp:126
void allocate_conf()
Allocates the values in the configuration space and destroys the values in the coefficients space.
Definition: val_domain.cpp:209
A class derived from Tensor to deal specificaly with objects of valence 1 (and so also 1-forms).
Definition: vector.hpp:41
Scalar & set(int)
Read/write access to a component.