LORENE
tslice_dirac_max.C
1 /*
2 * Methods of class Tslice_dirac_max
3 *
4 * (see file time_slice.h for documentation).
5 *
6 */
7
8/*
9 * Copyright (c) 2004 Eric Gourgoulhon, Jose Luis Jaramillo & Jerome Novak
10 *
11 * This file is part of LORENE.
12 *
13 * LORENE is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2
15 * as published by the Free Software Foundation.
16 *
17 * LORENE is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with LORENE; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 *
26 */
27
28
29
30/*
31 * $Id: tslice_dirac_max.C,v 1.27 2016/12/05 16:18:19 j_novak Exp $
32 * $Log: tslice_dirac_max.C,v $
33 * Revision 1.27 2016/12/05 16:18:19 j_novak
34 * Suppression of some global variables (file names, loch, ...) to prevent redefinitions
35 *
36 * Revision 1.26 2014/10/13 08:53:48 j_novak
37 * Lorene classes and functions now belong to the namespace Lorene.
38 *
39 * Revision 1.25 2014/10/06 15:13:22 j_novak
40 * Modified #include directives to use c++ syntax.
41 *
42 * Revision 1.24 2008/12/04 18:22:49 j_novak
43 * Enhancement of the dzpuis treatment + various bug fixes.
44 *
45 * Revision 1.23 2008/12/02 15:02:22 j_novak
46 * Implementation of the new constrained formalism, following Cordero et al. 2009
47 * paper. The evolution eqs. are solved as a first-order system. Not tested yet!
48 *
49 * Revision 1.22 2007/11/06 14:47:07 j_novak
50 * New constructor from a rotating star in Dirac gauge (class Star_rot_Dirac).
51 * Evolution can take into account matter terms.
52 *
53 * Revision 1.21 2007/09/25 16:54:11 j_novak
54 * *** empty log message ***
55 *
56 * Revision 1.20 2007/09/25 16:52:15 j_novak
57 * *** empty log message ***
58 *
59 * Revision 1.19 2007/06/05 07:38:37 j_novak
60 * Better treatment of dzpuis for A and tilde(B) potentials. Some errors in the bases manipulation have been also corrected.
61 *
62 * Revision 1.18 2007/04/25 15:21:01 j_novak
63 * Corrected an error in the initialization of tildeB in
64 * Tslice_dirac_max::initial_dat_cts. + New method for solve_hij_AB.
65 *
66 * Revision 1.17 2007/03/21 14:51:50 j_novak
67 * Introduction of potentials A and tilde(B) of h^{ij} into Tslice_dirac_max.
68 *
69 * Revision 1.16 2004/12/28 14:21:48 j_novak
70 * Added the method Sym_tensor_trans::trace_from_det_one
71 *
72 * Revision 1.15 2004/07/08 12:29:01 j_novak
73 * use of new method Tensor::annule_extern_cn
74 *
75 * Revision 1.14 2004/06/30 08:02:40 j_novak
76 * Added filtering in l of khi_new and mu_new. ki_source is forced to go to
77 * zero at least as r^2.
78 *
79 * Revision 1.13 2004/06/17 06:59:41 e_gourgoulhon
80 * -- Method initial_data_cts: re-organized treatment of vanishing uu.
81 * -- Method hh_det_one: replaced the attenuation with tempo by a call
82 * to the new method Tensor::annule_extern_c2.
83 *
84 * Revision 1.12 2004/06/08 14:05:06 j_novak
85 * Added the attenuation of khi and mu in the last domain in ::det_one(). They are set to zero in the CED.
86 *
87 * Revision 1.11 2004/05/31 20:31:31 e_gourgoulhon
88 * -- Method hh_det_one takes now a time step as argument, to compute
89 * h^{ij} from khi and mu at some arbitrary time step and not only at
90 * the latest one.
91 * -- h^{ij} is no longer saved in binary files (method sauve);
92 * accordingly, the constructor from file calls the new version of
93 * hh_det_one to restore h^{ij}.
94 *
95 * Revision 1.10 2004/05/31 09:08:18 e_gourgoulhon
96 * Method sauve and constructor from binary file are now operational.
97 *
98 * Revision 1.9 2004/05/27 15:25:04 e_gourgoulhon
99 * Added constructors from binary file, as well as corresponding
100 * functions sauve and save.
101 *
102 * Revision 1.8 2004/05/17 19:54:10 e_gourgoulhon
103 * Method initial_data_cts: added arguments graph_device and method_poisson_vect.
104 *
105 * Revision 1.7 2004/05/12 15:24:20 e_gourgoulhon
106 * Reorganized the #include 's, taking into account that
107 * time_slice.h contains now an #include "metric.h".
108 *
109 * Revision 1.6 2004/05/10 09:16:32 e_gourgoulhon
110 * -- Method initial_data_cts: added a call to del_deriv() at the end.
111 * -- Methods set_trh and hh_det_one: added "adm_mass_evol.downdate(jtime)".
112 * -- Method trh() : the update is now performed via a call to hh_det_one().
113 *
114 * Revision 1.5 2004/05/06 15:23:55 e_gourgoulhon
115 * Added method initial_data_cts.
116 *
117 * Revision 1.4 2004/05/03 08:15:48 e_gourgoulhon
118 * Method hh_det_one(): added check at the end (deviation from det = 1).
119 *
120 * Revision 1.3 2004/04/08 16:44:19 e_gourgoulhon
121 * Added methods set_* and hh_det_one().
122 *
123 * Revision 1.2 2004/04/05 21:22:49 e_gourgoulhon
124 * Added constructor as standard time slice of Minkowski spacetime.
125 *
126 * Revision 1.1 2004/03/30 14:00:31 j_novak
127 * New class Tslide_dirac_max (first version).
128 *
129 *
130 * $Header: /cvsroot/Lorene/C++/Source/Time_slice/tslice_dirac_max.C,v 1.27 2016/12/05 16:18:19 j_novak Exp $
131 *
132 */
133
134// C headers
135#include <cassert>
136
137// Lorene headers
138#include "time_slice.h"
139#include "utilitaires.h"
140
141
142
143 //--------------//
144 // Constructors //
145 //--------------//
146
147
148// Constructor from conformal decomposition
149// ----------------------------------------
150
151namespace Lorene {
152Tslice_dirac_max::Tslice_dirac_max(const Scalar& lapse_in, const Vector& shift_in,
153 const Metric_flat& ff_in, const Scalar& psi_in,
154 const Sym_tensor_trans& hh_in, const Sym_tensor& hata_in,
155 int depth_in)
156 : Time_slice_conf( lapse_in, shift_in, ff_in, psi_in, hh_in, hata_in,
157 0*lapse_in, depth_in),
158 A_hh_evol(depth_in), B_hh_evol(depth_in), source_A_hh_evol(depth_in),
159 source_B_hh_evol(depth_in), source_A_hata_evol(depth_in) ,
160 source_B_hata_evol(depth_in), trh_evol(hh_in.the_trace(), depth_in)
161{ }
162
163// Constructor as standard time slice of flat spacetime (Minkowski)
164// ----------------------------------------------------------------
165
167 const Metric_flat& ff_in, int depth_in)
168 : Time_slice_conf(mp, triad, ff_in, depth_in),
169 A_hh_evol(depth_in), B_hh_evol(depth_in),
170 source_A_hh_evol(depth_in), source_B_hh_evol(depth_in),
171 source_A_hata_evol(depth_in), source_B_hata_evol(depth_in),
172 trh_evol(depth_in) {
173
174 double time_init = the_time[jtime] ;
175
176 // All potentials identically zero:
177 Scalar tmp(mp) ;
178 tmp.set_etat_zero() ;
179 A_hh_evol.update(tmp, jtime, time_init) ;
180 B_hh_evol.update(tmp, jtime, time_init) ;
181
182 source_A_hh_evol.update(tmp, jtime, time_init) ;
183 source_B_hh_evol.update(tmp, jtime, time_init) ;
184
185 source_A_hata_evol.update(tmp, jtime, time_init) ;
186 source_B_hata_evol.update(tmp, jtime, time_init) ;
187
188 // tr h identically zero:
189 trh_evol.update(tmp, jtime, time_init) ;
190}
191
192
193// Constructor from binary file
194// ----------------------------
195
197 const Metric_flat& ff_in, FILE* fich,
198 bool partial_read, int depth_in)
199 : Time_slice_conf(mp, triad, ff_in, fich, true, depth_in),
200 A_hh_evol(depth_in), B_hh_evol(depth_in),
201 source_A_hh_evol(depth_in), source_B_hh_evol(depth_in),
202 source_A_hata_evol(depth_in), source_B_hata_evol(depth_in),
203 trh_evol(depth_in) {
204
205 if (partial_read) {
206 cout <<
207 "Constructor of Tslice_dirac_max from file: the case of partial reading\n"
208 << " is not ready yet !"
209 << endl ;
210 abort() ;
211 }
212
213 // Reading of various fields
214 // -------------------------
215
216 int jmin = jtime - depth + 1 ;
217 int indicator ;
218
219 // h^{ij}
220 for (int j=jmin; j<=jtime; j++) {
221 fread_be(&indicator, sizeof(int), 1, fich) ;
222 if (indicator == 1) {
223 Sym_tensor hh_file(mp, triad, fich) ;
224 hh_evol.update(hh_file, j, the_time[j]) ;
225 }
226 }
227
228 // A - hh
229 for (int j=jmin; j<=jtime; j++) {
230 fread_be(&indicator, sizeof(int), 1, fich) ;
231 if (indicator == 1) {
232 Scalar A_hh_file(mp, *(mp.get_mg()), fich) ;
233 A_hh_evol.update(A_hh_file, j, the_time[j]) ;
234 }
235 }
236
237 // B - hh
238 for (int j=jmin; j<=jtime; j++) {
239 fread_be(&indicator, sizeof(int), 1, fich) ;
240 if (indicator == 1) {
241 Scalar B_hh_file(mp, *(mp.get_mg()), fich) ;
242 B_hh_evol.update(B_hh_file, j, the_time[j]) ;
243 }
244 }
245}
246
247// Constructor from a rotating star
248// --------------------------------
249
250Tslice_dirac_max::Tslice_dirac_max(const Star_rot_Dirac& star, double pdt, int depth_in)
251 : Time_slice_conf(star.get_nn(), star.get_beta(), star.get_mp().flat_met_spher(),
252 0.*star.get_nn(), star.get_hh(), 0.*star.get_aa(),
253 0.*star.get_nn(), depth_in),
254 A_hh_evol(depth_in), B_hh_evol(depth_in),
255 source_A_hh_evol(depth_in), source_B_hh_evol(depth_in),
256 source_A_hata_evol(depth_in), source_B_hata_evol(depth_in),
257 trh_evol(depth_in) {
258
259 Scalar tmp = exp(star.get_ln_psi()) ;
260 tmp.std_spectral_base() ;
261 psi_evol.downdate(jtime) ;
262 psi_evol.update(tmp, jtime, the_time[jtime]) ;
263
264 Sym_tensor tmp2 = psi4()*psi()*psi()*star.get_aa() ;
265 hata_evol.downdate(jtime) ;
266 hata_evol.update(tmp2, jtime, the_time[jtime]) ;
267
268 A_hh() ;
269 B_hh() ;
270 A_hata() ;
271 B_hata() ;
273
274 // Update of various fields
275 // -------------------------
276 double ttime1 = the_time[jtime] ;
277 int jtime1 = jtime ;
278 for (int j=1; j < depth; j++) {
279 jtime1++ ;
280 ttime1 += pdt ;
281 psi_evol.update(psi_evol[jtime], jtime1, ttime1) ;
282 n_evol.update(n_evol[jtime], jtime1, ttime1) ;
283 beta_evol.update(beta_evol[jtime], jtime1, ttime1) ;
284 hh_evol.update(hh_evol[jtime], jtime1, ttime1) ;
285 trk_evol.update(trk_evol[jtime], jtime1, ttime1) ;
286 A_hh_evol.update(A_hh_evol[jtime], jtime1, ttime1) ;
287 B_hh_evol.update(B_hh_evol[jtime], jtime1, ttime1) ;
288 A_hata_evol.update(A_hata_evol[jtime], jtime1, ttime1) ;
289 B_hata_evol.update(B_hata_evol[jtime], jtime1, ttime1) ;
290 trh_evol.update(trh_evol[jtime], jtime1, ttime1) ;
291 k_dd_evol.update(k_dd_evol[jtime], jtime1, ttime1) ;
292 the_time.update(ttime1, jtime1, ttime1) ;
293 }
294 jtime += depth - 1 ;
295
297}
298
299// Copy constructor
300// ----------------
301
311
312
313 //--------------//
314 // Destructor //
315 //--------------//
316
318
319
320 //-----------------------//
321 // Mutators / assignment //
322 //-----------------------//
323
337
338
340
342
343 // Reset of quantities depending on h^{ij}:
344 A_hh_evol.downdate(jtime) ;
345 B_hh_evol.downdate(jtime) ;
346 source_A_hh_evol.downdate(jtime) ;
347 source_B_hh_evol.downdate(jtime) ;
348 source_A_hata_evol.downdate(jtime) ;
349 source_B_hata_evol.downdate(jtime) ;
350 trh_evol.downdate(jtime) ;
351
352}
353
354
356 const Scalar& trk_in, const Scalar& trk_point,
357 double pdt, double precis, int method_poisson_vect,
358 const char* graph_device, const Scalar* p_ener_dens,
359 const Vector* p_mom_dens, const Scalar* p_trace_stress) {
360
361
362 Time_slice_conf::initial_data_cts(uu, trk_in, trk_point, pdt, precis,
363 method_poisson_vect, graph_device,
364 p_ener_dens, p_mom_dens, p_trace_stress) ;
365
366 int nz = trk_in.get_mp().get_mg()->get_nzone() ;
367 // Setting khi and mu for j <= jtime, taking into account u^{ij} = dh^{ij}/dt
368 //--------------------------------------------------------------------------
369 for (int j = jtime-depth+1 ; j <= jtime; j++) {
370
371 // A and tildeB are computed from the value of hh
372 Scalar tmp = hh_evol[j].compute_A(true) ;
373 assert (tmp.get_etat() != ETATNONDEF) ;
374 if (tmp.get_etat() != ETATZERO) {
375 assert(tmp.get_mp().get_mg()->get_type_r(nz-1) == UNSURR) ;
376 tmp.annule_domain(nz-1) ;
377 }
378 tmp.set_dzpuis(0) ;
379 A_hh_evol.update(tmp, j, the_time[j]) ;
380
381 tmp = hh_evol[jtime].compute_tilde_B_tt(true) ;
382 assert (tmp.get_etat() != ETATNONDEF) ;
383 if (tmp.get_etat() != ETATZERO) {
384 assert(tmp.get_mp().get_mg()->get_type_r(nz-1) == UNSURR) ;
385 tmp.annule_domain(nz-1) ;
386 }
387 tmp.set_dzpuis(0) ;
388 B_hh_evol.update(tmp, j, the_time[j]) ;
389 }
390
391 cout << endl <<
392 "Tslice_dirac_max::initial_data_cts : variation of A and tilde(B) for J = "
393 << jtime << " :\n" ;
394 maxabs(A_hh_evol[jtime] - A_hh_evol[jtime-1], "A(h)^J - A(h)^{J-1}") ;
395
396 maxabs(B_hh_evol[jtime] - B_hh_evol[jtime-1], "B(h)^J - B(h)^{J-1}") ;
397
398 maxabs(A_hata_evol[jtime] - A_hata_evol[jtime-1], "A(hat{A})^J - A(hat{A})^{J-1}") ;
399
400 maxabs(B_hata_evol[jtime] - B_hata_evol[jtime-1], "B(hat{A})^J - B(hat{A})^{J-1}") ;
401
402 // Reset of derived quantities (at the new time step jtime)
403 // ---------------------------
404 del_deriv() ;
405
407 initialize_sources_copy() ; //## should be a call to the Runge-Kutta integrator
408}
409
410
411void Tslice_dirac_max::set_khi_mu(const Scalar& khi_in, const Scalar& mu_in) {
412
413 const Map& mp = khi_in.get_mp() ;
414
415 Sym_tensor_tt hh_tt(mp, mp.get_bvect_spher(), mp.flat_met_spher());
416 hh_tt.set_khi_mu(khi_in, mu_in, 2) ;
417
418 Sym_tensor_trans hh_tmp(mp, mp.get_bvect_spher(), mp.flat_met_spher());
419 hh_tmp.trace_from_det_one(hh_tt) ;
420
421 // Result set to trh_evol and hh_evol
422 // ----------------------------------
423 Scalar tmp = hh_tmp.the_trace() ;
424 tmp.dec_dzpuis(4) ;
425 trh_evol.update(tmp, jtime, the_time[jtime]) ;
426
427 // The longitudinal part of h^{ij}, which is zero by virtue of Dirac gauge :
428 Vector wzero(mp, CON, *(ff.get_triad())) ;
429 wzero.set_etat_zero() ;
430
431 // Temporary Sym_tensor with longitudinal part set to zero :
432 Sym_tensor hh_new(mp, CON, *(ff.get_triad())) ;
433
434 hh_new.set_longit_trans(wzero, hh_tmp) ;
435
436 hh_evol.update(hh_new, jtime, the_time[jtime]) ;
437
438}
439
441
442 trh_evol.update(trh_in, jtime, the_time[jtime]) ;
443 cout << "Tslice_dirac_max::set_trh : #### WARNING : \n"
444 << " this method does not check whether det(tilde gamma) = 1"
445 << endl ;
446
447 // Reset of quantities depending on the trace:
448 hh_evol.downdate(jtime) ;
449 if (p_tgamma != 0x0) {
450 delete p_tgamma ;
451 p_tgamma = 0x0 ;
452 }
453 if (p_hdirac != 0x0) {
454 delete p_hdirac ;
455 p_hdirac = 0x0 ;
456 }
457 if (p_gamma != 0x0) {
458 delete p_gamma ;
459 p_gamma = 0x0 ;
460 }
461 source_A_hh_evol.downdate(jtime) ;
462 source_B_hh_evol.downdate(jtime) ;
463 source_A_hata_evol.downdate(jtime) ;
464 source_B_hata_evol.downdate(jtime) ;
465 gam_dd_evol.downdate(jtime) ;
466 gam_uu_evol.downdate(jtime) ;
467 adm_mass_evol.downdate(jtime) ;
468
469}
470
471
472 //----------------------------------------------------//
473 // Update of fields from base class Time_slice_conf //
474 //----------------------------------------------------//
475
476
477const Sym_tensor& Tslice_dirac_max::hh(Param* par_bc, Param* par_mat) const {
478
479 if (!( hh_evol.is_known(jtime) ) ) {
480
481 assert (A_hh_evol.is_known(jtime)) ;
482 assert (B_hh_evol.is_known(jtime)) ;
483
484 // Computation of h^{ij} to ensure det tgam_{ij} = det f_{ij} :
485
486 hh_det_one(jtime, par_bc, par_mat) ;
487 }
488
489 return hh_evol[jtime] ;
490
491}
492
493
495
496 if( !(trk_evol.is_known(jtime)) ) {
497
498 Scalar resu(ff.get_mp()) ;
499 resu.set_etat_zero() ;
500
501 trk_evol.update(resu, jtime, the_time[jtime]) ;
502
503 }
504
505 return trk_evol[jtime] ;
506
507}
508
509
511
512 if (p_hdirac == 0x0) {
513 p_hdirac = new Vector(ff.get_mp(), CON, ff.get_triad() ) ;
514 p_hdirac->set_etat_zero() ;
515 }
516
517 return *p_hdirac ;
518
519}
520
521
522
523
524 //-----------------------------------//
525 // Update of fields from this class //
526 //-----------------------------------//
527
529
530 if (!( A_hh_evol.is_known(jtime) ) ) {
531 assert( hh_evol.is_known(jtime) ) ;
532
533 A_hh_evol.update( hh_evol[jtime].compute_A(true), jtime, the_time[jtime] ) ;
534
535 }
536 return A_hh_evol[jtime] ;
537}
538
540
541 if (!( B_hh_evol.is_known(jtime) ) ) {
542 assert( hh_evol.is_known(jtime) ) ;
543
544 B_hh_evol.update( hh_evol[jtime].compute_tilde_B_tt(true), jtime, the_time[jtime] ) ;
545
546 }
547 return B_hh_evol[jtime] ;
548}
549
551
552 if( !(trh_evol.is_known(jtime)) ) {
553
554 // Computation of tr(h) to ensure det tgam_{ij} = det f_{ij} :
556
557 }
558
559 return trh_evol[jtime] ;
560
561}
562
563
564
565 //------------------//
566 // output //
567 //------------------//
568
569ostream& Tslice_dirac_max::operator>>(ostream& flux) const {
570
572
573 flux << "Dirac gauge and maximal slicing" << '\n' ;
574
575 if (A_hh_evol.is_known(jtime)) {
576 maxabs( A_hh_evol[jtime], "A_hh", flux) ;
577 }
578 if (B_hh_evol.is_known(jtime)) {
579 maxabs( B_hh_evol[jtime], "B_hh", flux) ;
580 }
581 if (trh_evol.is_known(jtime)) {
582 maxabs( trh_evol[jtime], "tr h", flux) ;
583 }
584
585 return flux ;
586
587}
588
589
590void Tslice_dirac_max::sauve(FILE* fich, bool partial_save) const {
591
592 if (partial_save) {
593 cout <<
594 "Tslice_dirac_max::sauve : the partial_save case is not ready yet !"
595 << endl ;
596 abort() ;
597 }
598
599 // Writing of quantities common to all derived classes of Time_slice_conf
600 // ----------------------------------------------------------------------
601
602 Time_slice_conf::sauve(fich, true) ;
603
604 // Writing of the other fields
605 // ---------------------------
606
607 int jmin = jtime - depth + 1 ;
608
609 // h^{ij}
610 assert( hh_evol.is_known(jtime) ) ;
611 for (int j=jmin; j<=jtime; j++) {
612 int indicator = (hh_evol.is_known(j)) ? 1 : 0 ;
613 fwrite_be(&indicator, sizeof(int), 1, fich) ;
614 if (indicator == 1) hh_evol[j].sauve(fich) ;
615 }
616
617 // A_hh
618 A_hh() ; // forces the update at the current time step
619 for (int j=jmin; j<=jtime; j++) {
620 int indicator = (A_hh_evol.is_known(j)) ? 1 : 0 ;
621 fwrite_be(&indicator, sizeof(int), 1, fich) ;
622 if (indicator == 1) A_hh_evol[j].sauve(fich) ;
623 }
624
625 // B_hh
626 B_hh() ; // forces the update at the current time step
627 for (int j=jmin; j<=jtime; j++) {
628 int indicator = (B_hh_evol.is_known(j)) ? 1 : 0 ;
629 fwrite_be(&indicator, sizeof(int), 1, fich) ;
630 if (indicator == 1) B_hh_evol[j].sauve(fich) ;
631 }
632}
633
634
635
636
637
638
639
640}
Vectorial bases (triads) with respect to which the tensorial components are defined.
Definition base_vect.h:105
Flat metric for tensor calculation.
Definition metric.h:261
Parameter storage.
Definition param.h:125
Tensor field of valence 0 (or component of a tensorial field).
Definition scalar.h:393
virtual void std_spectral_base()
Sets the spectral bases of the Valeur va to the standard ones for a scalar field.
Definition scalar.C:790
virtual void set_etat_zero()
Sets the logical state to ETATZERO (zero).
Definition scalar.C:330
int get_etat() const
Returns the logical state ETATNONDEF (undefined), ETATZERO (null) or ETATQCQ (ordinary).
Definition scalar.h:560
void set_dzpuis(int)
Modifies the dzpuis flag.
Definition scalar.C:814
virtual void dec_dzpuis(int dec=1)
Decreases by dec units the value of dzpuis and changes accordingly the values of the Scalar in the co...
Class for relativistic rotating stars in Dirac gauge and maximal slicing.
const Sym_tensor get_aa() const
Returns .
const Scalar & get_ln_psi() const
Returns .
Transverse symmetric tensors of rank 2.
Definition sym_tensor.h:611
void trace_from_det_one(const Sym_tensor_tt &htt, double precis=1.e-14, int it_max=100)
Assigns the derived member p_tt and computes the trace so that *this + the flat metric has a determin...
const Scalar & the_trace() const
Returns the trace of the tensor with respect to metric *met_div.
Transverse and traceless symmetric tensors of rank 2.
Definition sym_tensor.h:933
void set_khi_mu(const Scalar &khi_i, const Scalar &mu_i, int dzp=0, Param *par1=0x0, Param *par2=0x0, Param *par3=0x0)
Sets the component , as well as the angular potential (see member p_khi and p_mu ).
Class intended to describe valence-2 symmetric tensors.
Definition sym_tensor.h:226
void set_longit_trans(const Vector &v, const Sym_tensor_trans &a)
Assigns the derived members p_longit_pot and p_transverse and updates the components accordingly.
Evolution_std< Sym_tensor > hh_evol
Values at successive time steps of the components .
Definition time_slice.h:533
virtual void sauve(FILE *fich, bool partial_save) const
Total or partial saves in a binary file.
Evolution_std< Sym_tensor > hata_evol
Values at successive time steps of the components .
Definition time_slice.h:545
virtual const Scalar & A_hata() const
Returns the potential A of .
void operator=(const Time_slice_conf &)
Assignment to another Time_slice_conf.
virtual const Scalar & psi() const
Conformal factor relating the physical metric to the conformal one: .
Metric * p_tgamma
Pointer on the conformal metric at the current time step (jtime).
Definition time_slice.h:563
virtual const Scalar & B_hata() const
Returns the potential of .
virtual void initial_data_cts(const Sym_tensor &uu, const Scalar &trk_in, const Scalar &trk_point, double pdt, double precis=1.e-12, int method_poisson_vect=6, const char *graph_device=0x0, const Scalar *ener_dens=0x0, const Vector *mom_dens=0x0, const Scalar *trace_stress=0x0)
Computes valid initial data by solving the constraint equations in the conformal thin-sandwich approa...
virtual ostream & operator>>(ostream &) const
Operator >> (virtual function called by the operator<<).
virtual void del_deriv() const
Deletes all the derived quantities.
Vector * p_hdirac
Pointer on the vector (which vanishes in Dirac gauge), at the current time step (jtime).
Definition time_slice.h:574
const Scalar & psi4() const
Factor at the current time step (jtime ).
Evolution_std< Scalar > psi_evol
Values at successive time steps of the conformal factor relating the physical metric to the conform...
Definition time_slice.h:520
Time_slice_conf(const Scalar &lapse_in, const Vector &shift_in, const Metric_flat &ff_in, const Scalar &psi_in, const Sym_tensor &hh_in, const Sym_tensor &hata_in, const Scalar &trk_in, int depth_in=3)
Constructor from conformal decomposition.
Evolution_std< Scalar > A_hata_evol
Potential A associated with the symmetric tensor .
Definition time_slice.h:550
const Metric_flat & ff
Pointer on the flat metric with respect to which the conformal decomposition is performed.
Definition time_slice.h:510
Evolution_std< Scalar > B_hata_evol
Potential associated with the symmetric tensor .
Definition time_slice.h:555
virtual void set_hh(const Sym_tensor &hh_in)
Sets the deviation of the conformal metric from the flat metric : .
int jtime
Time step index of the latest slice.
Definition time_slice.h:193
Evolution_std< Scalar > trk_evol
Values at successive time steps of the trace K of the extrinsic curvature.
Definition time_slice.h:227
Metric * p_gamma
Pointer on the induced metric at the current time step (jtime).
Definition time_slice.h:242
Evolution_std< Sym_tensor > k_dd_evol
Values at successive time steps of the covariant components of the extrinsic curvature tensor .
Definition time_slice.h:211
Evolution_full< Tbl > adm_mass_evol
ADM mass at each time step, since the creation of the slice.
Definition time_slice.h:236
Evolution_std< Sym_tensor > gam_dd_evol
Values at successive time steps of the covariant components of the induced metric .
Definition time_slice.h:201
Evolution_std< Sym_tensor > gam_uu_evol
Values at successive time steps of the contravariant components of the induced metric .
Definition time_slice.h:206
int depth
Number of stored time slices.
Definition time_slice.h:182
Evolution_std< Scalar > n_evol
Values at successive time steps of the lapse function N.
Definition time_slice.h:219
Evolution_std< double > the_time
Time label of each slice.
Definition time_slice.h:196
Evolution_std< Vector > beta_evol
Values at successive time steps of the shift vector .
Definition time_slice.h:222
virtual const Scalar & trh() const
Computes the trace h, with respect to the flat metric ff , of .
virtual const Sym_tensor & hh(Param *par_bc=0x0, Param *par_mat=0x0) const
Deviation of the conformal metric from the flat metric : .
Evolution_std< Scalar > source_B_hh_evol
The potential of the source of equation for .
Definition time_slice.h:998
Evolution_std< Scalar > source_A_hh_evol
The A potential of the source of equation for .
Definition time_slice.h:992
virtual const Scalar & B_hh() const
Returns the potential of .
virtual void initial_data_cts(const Sym_tensor &uu, const Scalar &trk_in, const Scalar &trk_point, double pdt, double precis=1.e-12, int method_poisson_vect=6, const char *graph_device=0x0, const Scalar *ener_dens=0x0, const Vector *mom_dens=0x0, const Scalar *trace_stress=0x0)
Computes valid initial data by solving the constraint equations in the conformal thin-sandwich approa...
Evolution_std< Scalar > A_hh_evol
The A potential of .
Definition time_slice.h:980
virtual ~Tslice_dirac_max()
Destructor.
void operator=(const Tslice_dirac_max &)
Assignment to another Tslice_dirac_max.
virtual const Scalar & trk() const
Trace K of the extrinsic curvature at the current time step (jtime ).
void hh_det_one(int j, Param *par_bc=0x0, Param *par_mat=0x0) const
Computes from the values of A and and using the condition , which fixes the trace of .
Evolution_std< Scalar > source_B_hata_evol
The potential of the source of equation for .
virtual void set_hh(const Sym_tensor &hh_in)
Sets the deviation of the conformal metric from the flat metric : .
void compute_sources(const Sym_tensor *strain_tensor=0x0) const
Computes the sources source_A_XXX_evol and source_B_XXX_evol , for the solution of the evolution equa...
virtual void set_khi_mu(const Scalar &khi_in, const Scalar &mu_in)
Sets the potentials and of the TT part of (see the documentation of Sym_tensor_tt for details).
virtual void sauve(FILE *fich, bool partial_save) const
Total or partial saves in a binary file.
virtual void set_trh(const Scalar &trh_in)
Sets the trace, with respect to the flat metric ff , of .
virtual const Scalar & A_hh() const
Returns the potential A of .
virtual ostream & operator>>(ostream &) const
Operator >> (virtual function called by the operator<<).
virtual const Vector & hdirac() const
Vector which vanishes in Dirac gauge.
Evolution_std< Scalar > trh_evol
The trace, with respect to the flat metric ff , of .
Tslice_dirac_max(const Scalar &lapse_in, const Vector &shift_in, const Metric_flat &ff_in, const Scalar &psi_in, const Sym_tensor_trans &hh_in, const Sym_tensor &hata_in, int depth_in=3)
Constructor from conformal decomposition.
void initialize_sources_copy() const
Copy the sources source_A_XXX_evol and source_B_XXX_evol to all time-steps.
Evolution_std< Scalar > B_hh_evol
The potential of .
Definition time_slice.h:986
Evolution_std< Scalar > source_A_hata_evol
The potential A of the source of equation for .
Tensor field of valence 1.
Definition vector.h:188
Cmp exp(const Cmp &)
Exponential.
Definition cmp_math.C:273
int fread_be(int *aa, int size, int nb, FILE *fich)
Reads integer(s) from a binary file according to the big endian convention.
Definition fread_be.C:72
int fwrite_be(const int *aa, int size, int nb, FILE *fich)
Writes integer(s) into a binary file according to the big endian convention.
Definition fwrite_be.C:73
const Map & get_mp() const
Returns the mapping.
Definition tensor.h:874
void annule_domain(int l)
Sets the Tensor to zero in a given domain.
Definition tensor.C:675
virtual void set_etat_zero()
Sets the logical state of all components to ETATZERO (zero state).
Definition tensor.C:506
Tbl maxabs(const Tensor &aa, const char *comment=0x0, ostream &ost=cout, bool verb=true)
Maxima in each domain of the absolute values of the tensor components.
Lorene prototypes.
Definition app_hor.h:67
Map(const Mg3d &)
Constructor from a multi-domain 3D grid.
Definition map.C:142
const Metric_flat & flat_met_spher() const
Returns the flat metric associated with the spherical coordinates and with components expressed in th...
Definition map.C:324