excision_surf.h

00001 /*
00002  *  Definition of Lorene class Excision_surf, friend class of Spheroid.
00003  *
00004  */
00005 
00006 /*
00007  *   Copyright (c) 2008  Jose-Luis Jaramillo & Nicolas Vasset
00008  *
00009  *   This file is part of LORENE.
00010  *
00011  *   LORENE is free software; you can redistribute it and/or modify
00012  *   it under the terms of the GNU General Public License version 2
00013  *   as published by the Free Software Foundation.
00014  *
00015  *   LORENE is distributed in the hope that it will be useful,
00016  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00017  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018  *   GNU General Public License for more details.
00019  *
00020  *   You should have received a copy of the GNU General Public License
00021  *   along with LORENE; if not, write to the Free Software
00022  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00023  *
00024  */
00025 
00026 #ifndef __EXCISIONSURF_H_ 
00027 #define __EXCISIONSURF_H_ 
00028 
00029 /*
00030  * $Header: /cvsroot/Lorene/C++/Include/excision_surf.h,v 1.6 2010/01/29 14:38:59 n_vasset Exp $
00031  *
00032  */
00033 #include "metric.h"
00034 #include "spheroid.h"
00035 
00042 class Excision_surf {
00043 
00044 
00045     // Data : 
00046     // -----
00047  protected:
00049   Spheroid sph ;
00050   
00052   Scalar conf_fact ; 
00053   
00055   Scalar lapse ;
00056   
00058   Vector shift ;
00059   
00061   Metric gamij ; 
00062   
00064   Sym_tensor Kij ;
00065   
00067   double delta_t;
00068 
00070   double no_of_steps;
00071 
00073   Scalar expa;
00074   
00076   Scalar dt_expa;
00077   
00078 
00079     // Derived data : 
00080     // ------------
00081  protected:
00082 
00083     mutable Scalar* p_get_BC_conf_fact_1 ; 
00084     mutable Scalar* p_get_BC_lapse_1 ;   
00085     mutable Vector* p_get_BC_shift_1 ; 
00086     mutable Scalar* p_get_BC_Npsi_1 ; 
00087     mutable Scalar* p_get_BC_conf_fact_2 ; 
00088     mutable Scalar* p_get_BC_conf_fact_3 ; 
00089     mutable Scalar* p_get_BC_conf_fact_4 ; 
00090     mutable Scalar* p_get_BC_lapse_2 ;   
00091     mutable Scalar* p_get_BC_lapse_3 ;   
00092     mutable Scalar* p_get_BC_lapse_4 ;   
00093     mutable Scalar* p_derive_t_expa ;   
00094     mutable Vector* p_get_BC_shift_2 ; 
00095     mutable Vector* p_get_BC_shift_3 ; 
00096     mutable Vector* p_get_BC_shift_4 ; 
00097     mutable Scalar* p_get_BC_Npsi_2 ; 
00098     mutable Scalar* p_get_BC_Npsi_3 ; 
00099     mutable Scalar* p_get_BC_Npsi_4 ; 
00100     mutable Scalar* p_get_BC_Npsi_5 ; 
00101 
00102 
00103     // Constructors - Destructor
00104     // -------------------------
00105     public:
00106 
00118     Excision_surf(const Scalar& h_in, const Metric& gij, const Sym_tensor& Kij2, const Scalar& ppsi, const Scalar& nn, const Vector& beta, double timestep, int int_nos) ;
00119     Excision_surf(const Excision_surf& ) ;      
00120 
00122     Excision_surf(FILE* ) ;         
00123 
00124     virtual ~Excision_surf() ;          
00125  
00126 
00127     // Memory management
00128     // -----------------
00129     protected:
00131     virtual void del_deriv() const ; 
00132     
00134     void set_der_0x0() const ; 
00135 
00136 
00137 
00138     // Mutators / assignment
00139     // ---------------------
00140     public:
00142     void operator=(const Excision_surf&) ;  
00143 
00144 
00145     // Functions/Accessors
00146     //---------------------
00147 
00150     void get_evol_params_from_ID(double alpha, double beta, double gamma, Scalar& Ee, Vector& Jj, Sym_tensor& Ss) ;
00151 
00153     void set_expa_parab(double c_theta_lap, double c_theta_fin, Scalar& expa_fin) ;
00159     void set_expa_hyperb(double alph0, double beta0, double gamma0) ;
00160 
00161 
00162     // Accessors
00163     // ---------
00164     public:
00166     const Spheroid& get_sph() const {return sph; }; 
00167     
00169     const Scalar& get_conf_fact() const {return conf_fact; } ;
00170 
00172     const Scalar& get_lapse() const {return lapse ; } ;
00173 
00175     const Vector& get_shift() const {return shift ; } ;
00176 
00178     const Metric& get_gamij() const {return gamij ; } ;
00179 
00181     const Sym_tensor& get_Kij() const {return Kij ; } ;
00182 
00184     double get_delta_t() const {return delta_t ;};
00185 
00187     double get_no_of_steps() const {return no_of_steps ;};
00188 
00190     const Scalar & get_expa() const {return expa; };
00191 
00193     const Scalar& get_dt_expa() const {return dt_expa;} ;
00194 
00196     Spheroid& set_sph() {del_deriv() ; return sph ;};
00197 
00199     Scalar& set_conf_fact() {del_deriv() ; return conf_fact ; } ;
00200 
00202     Scalar& set_lapse() {del_deriv() ; return lapse ; } ;
00203 
00205     Vector& set_shift() {del_deriv() ; return shift ; } ;
00206 
00208     Metric& set_gamij() {del_deriv() ; return gamij ; } ;
00209 
00211     Sym_tensor& set_Kij() {del_deriv() ; return Kij ; } ;
00212 
00213     double set_delta_t() {del_deriv() ; return delta_t ; } ;
00214 
00215     double set_no_of_steps() {del_deriv() ; return no_of_steps ; } ;
00216 
00218 
00219     Scalar& set_expa() {del_deriv(); return expa;};
00220 
00222 
00223     Scalar& set_dt_expa() {del_deriv(); return dt_expa;};
00224     
00225     // Computational functions
00226     // -----------------------
00227     public:
00229     const Scalar& get_BC_conf_fact_1(bool isMOTS = false) const ;
00230 // Source for an arbitrary Dirichlet BC on the lapse    
00231     const Scalar& get_BC_lapse_1(double value) const ;
00232 // Source for a global Dirichlet BC on the shift, imposing a conformal Killing symmetry on \f$ \varphi \f$.
00233     const Vector& get_BC_shift_1(double Omega) const ;
00234 // Source for a Dirichlet arbitrary BC on (N*Psi1)
00235     const Scalar& get_BC_Npsi_1(double value) const ;
00237     const Scalar& get_BC_conf_fact_2(double c_psi_lap, double c_psi_fin, Scalar& expa_fin) const ;
00239     const Scalar& get_BC_conf_fact_3(double c_theta_lap, double c_theta_fin, Scalar& expa_fin) const ;
00241     const Scalar& get_BC_conf_fact_4() const ;
00243     const Scalar& get_BC_lapse_2(double lapse_fin, double c_lapse_lap, double c_lapse_fi) const ;
00245     const Scalar& get_BC_lapse_3(Scalar& dttheta, Scalar& Ee, Vector& Jj, Sym_tensor& Sij, bool sph_sym = true) const ;
00247     const Scalar& get_BC_lapse_4 (Scalar& old_nn, Vector& beta_point, Sym_tensor& strain_tens) const ;
00249     const Scalar& derive_t_expa(Scalar& Ee, Vector& Jj, Sym_tensor& Sij) const;
00251     const Vector& get_BC_shift_2(double c_bb_lap, double c_bb_fin, double c_V_lap, double epsilon) const ;
00253     const Vector& get_BC_shift_3(Scalar& dtpsi, double c_V_lap, double epsilon) const ;
00255     const Vector & get_BC_shift_4(Scalar& dttheta, Scalar& Ee, Vector& Jj, Sym_tensor& Sij, double c_V_lap, double epsilon, bool sph_sym= true) const ;
00257     const Scalar& get_BC_Npsi_2(double value, double c_npsi_lap, double c_npsi_fin) const ;        
00259     const Scalar& get_BC_Npsi_3(double n_0, double beta) const ;      
00261     const Scalar& get_BC_Npsi_4(double Kappa) const ;      
00263     const Scalar& get_BC_Npsi_5(double Kappa) const ; 
00264     // Outputs
00265     // -------
00266     public:
00267     virtual void sauve(FILE *) const ;      
00268     
00270     friend ostream& operator<<(ostream& , const Spheroid& ) ;   
00271 
00272 };
00273 
00274 ostream& operator<<(ostream& , const Spheroid& ) ;
00275 
00276 
00277 #endif

Generated on Tue Feb 7 01:35:17 2012 for LORENE by  doxygen 1.4.6