hole_bhns_bc.C

00001 /*
00002  *  Methods of class Hole_bhns to compute the inner boundary condition
00003  *  at the excised surface
00004  *
00005  *    (see file hile_bhns.h for documentation).
00006  *
00007  */
00008 
00009 /*
00010  *   Copyright (c) 2005-2007 Keisuke Taniguchi
00011  *
00012  *   This file is part of LORENE.
00013  *
00014  *   LORENE is free software; you can redistribute it and/or modify
00015  *   it under the terms of the GNU General Public License version 2
00016  *   as published by the Free Software Foundation.
00017  *
00018  *   LORENE is distributed in the hope that it will be useful,
00019  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00020  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00021  *   GNU General Public License for more details.
00022  *
00023  *   You should have received a copy of the GNU General Public License
00024  *   along with LORENE; if not, write to the Free Software
00025  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00026  *
00027  */
00028 
00029 char hole_bhns_bc_C[] = "$Header: /cvsroot/Lorene/C++/Source/Hole_bhns/hole_bhns_bc.C,v 1.2 2008/05/15 19:04:10 k_taniguchi Exp $" ;
00030 
00031 /*
00032  * $Id: hole_bhns_bc.C,v 1.2 2008/05/15 19:04:10 k_taniguchi Exp $
00033  * $Log: hole_bhns_bc.C,v $
00034  * Revision 1.2  2008/05/15 19:04:10  k_taniguchi
00035  * Change of some parameters.
00036  *
00037  * Revision 1.1  2007/06/22 01:23:56  k_taniguchi
00038  * *** empty log message ***
00039  *
00040  *
00041  * $Header: /cvsroot/Lorene/C++/Source/Hole_bhns/hole_bhns_bc.C,v 1.2 2008/05/15 19:04:10 k_taniguchi Exp $
00042  *
00043  */
00044 
00045 // C++ headers
00046 //#include <>
00047 
00048 // C headers
00049 #include <math.h>
00050 
00051 // Lorene headers
00052 #include "hole_bhns.h"
00053 #include "valeur.h"
00054 #include "grilles.h"
00055 #include "unites.h"
00056 
00057                     //----------------------------------//
00058                     //     Inner boundary condition     //
00059                     //----------------------------------//
00060 
00061 const Valeur Hole_bhns::bc_lapconf() const {
00062 
00063     // Fundamental constants and units
00064     // -------------------------------
00065     using namespace Unites ;
00066 
00067     const Mg3d* mg = mp.get_mg() ;
00068     const Mg3d* mg_angu = mg->get_angu() ;
00069     Valeur bc(mg_angu) ;
00070 
00071     int nt = mg->get_nt(0) ;
00072     int np = mg->get_np(0) ;
00073 
00074     Scalar tmp(mp) ;
00075 
00076     //    double cc ; // C/M^2
00077 
00078     if (bc_lapconf_nd) {
00079 
00080         Scalar st(mp) ;
00081     st = mp.sint ;
00082     st.std_spectral_base() ;
00083     Scalar ct(mp) ;
00084     ct = mp.cost ;
00085     ct.std_spectral_base() ;
00086     Scalar sp(mp) ;
00087     sp = mp.sinp ;
00088     sp.std_spectral_base() ;
00089     Scalar cp(mp) ;
00090     cp = mp.cosp ;
00091     cp.std_spectral_base() ;
00092 
00093     Scalar rr(mp) ;
00094     rr = mp.r ;
00095     rr.std_spectral_base() ;
00096 
00097         if (bc_lapconf_fs) {  // dlapconf/dr = 0
00098 
00099         if (kerrschild) {
00100             cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00101         abort() ;
00102         }
00103         else {  // Isotropic coordinates with the maximal slicing
00104             tmp = - d_lapconf_comp(1) % st % cp
00105           - d_lapconf_comp(2) % st % sp - d_lapconf_comp(3) % ct ;
00106         }
00107 
00108     }
00109     else {  // dlapconf/dr = 0.5*lapconf/rr
00110 
00111         Scalar tmp1(mp) ;
00112         tmp1 = 0.5 * (lapconf_auto_rs + lapconf_comp) / rr ;
00113         tmp1.std_spectral_base() ;
00114         tmp1.inc_dzpuis(2) ;  // dzpuis : 0 -> 2
00115 
00116         if (kerrschild) {  // dlapconf/dr = 0.5*lapconf/rr
00117             cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00118         abort() ;
00119         }
00120         else {  // Isotropic coordinates with the maximal slicing
00121                 // dlapconf/dr = 0.5*lapconf/rr
00122 
00123             tmp = - d_lapconf_comp(1) % st % cp
00124           - d_lapconf_comp(2) % st % sp - d_lapconf_comp(3) % ct
00125           + tmp1 ;
00126         }
00127 
00128     }
00129     }
00130     else {
00131 
00132         if (bc_lapconf_fs) {  // The poisson solver in LORENE assumes
00133                           // the asymptotic behavior of the function -> 0
00134 
00135         if (kerrschild) {
00136             cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00137         abort() ;
00138         // lapconf_auto -> 0.5 <-> lapconf_auto_rs -> -0.5
00139         }
00140         else {  // Isotropic coordinates with the maximal slicing
00141             cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00142         abort() ;
00143         //          tmp = -lapconf_comp + 0.5 ;  // lapconf = 0.5
00144 
00145         }
00146 
00147     }
00148     else {
00149 
00150         if (kerrschild) {
00151             cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00152         abort() ;
00153         }
00154         else {  // Isotropic coordinates with the maximal slicing
00155             cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00156         abort() ;
00157         //          tmp = -lapconf_comp + 0.5 ;
00158 
00159         }
00160 
00161     }
00162     }
00163 
00164     bc = 1. ;
00165     for (int j=0; j<nt; j++) {
00166         for (int k=0; k<np; k++) {
00167         bc.set(0,k,j,0) = tmp.val_grid_point(1,k,j,0) ;
00168     }
00169     }
00170 
00171     bc.std_base_scal() ;
00172     return bc ;
00173 
00174 }
00175 
00176 const Valeur Hole_bhns::bc_shift_x(double ome_orb, double y_rot) const {
00177 
00178     // Fundamental constants and units
00179     // -------------------------------
00180     using namespace Unites ;
00181 
00182     const Mg3d* mg = mp.get_mg() ;
00183     const Mg3d* mg_angu = mg->get_angu() ;
00184     Valeur bc(mg_angu) ;
00185 
00186     Base_val** bases = mp.get_mg()->std_base_vect_cart() ;
00187 
00188     Scalar rr(mp) ;
00189     rr = mp.r ;
00190     rr.std_spectral_base() ;
00191     Scalar st(mp) ;
00192     st = mp.sint ;
00193     st.std_spectral_base() ;
00194     Scalar cp(mp) ;
00195     cp = mp.cosp ;
00196     cp.std_spectral_base() ;
00197     Scalar yy(mp) ;
00198     yy = mp.y ;
00199     yy.std_spectral_base() ;
00200 
00201     double mass = ggrav * mass_bh ;
00202     double ori_y_bh = mp.get_ori_y() ;
00203 
00204     Scalar tmp(mp) ;
00205 
00206     if (kerrschild) {
00207 
00208     // Exact solution of an isolated BH is extracted
00209 
00210         cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00211     abort() ;
00212 
00213     }
00214     else {  // Isotropic coordinates with the maximal slicing
00215 
00216         double cc ;
00217 
00218         // Sets C/M^2 for each case of the lapse boundary condition
00219         // --------------------------------------------------------
00220 
00221     if (bc_lapconf_nd) {  // Neumann boundary condition
00222         if (bc_lapconf_fs) {  // First condition
00223             // d(\alpha \psi)/dr = 0
00224             // ---------------------
00225             cc = 2. * (sqrt(13.) - 1.) / 3. ;
00226         }
00227         else {  // Second condition
00228             // d(\alpha \psi)/dr = (\alpha \psi)/(2 rah)
00229             // -----------------------------------------
00230             cc = 4. / 3. ;
00231         }
00232     }
00233     else {  // Dirichlet boundary condition
00234         if (bc_lapconf_fs) {  // First condition
00235             // (\alpha \psi) = 1/2
00236             // -------------------
00237             cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00238         abort() ;
00239         }
00240         else {  // Second condition
00241             // (\alpha \psi) = 1/sqrt(2.) \psi_KS
00242             // ----------------------------------
00243             cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00244         abort() ;
00245         //          cc = 2. * sqrt(2.) ;
00246         }
00247     }
00248 
00249         Scalar r_are(mp) ;
00250     r_are = r_coord(bc_lapconf_nd, bc_lapconf_fs) ;
00251     r_are.std_spectral_base() ;
00252 
00253     /*
00254         tmp = ((lapse_tot / confo_tot / confo_tot)
00255            - mass*mass*cc/rr/rr/pow(r_are,3.)) * st * cp
00256       - shift_comp(1)
00257       + (ome_orb - omega_spin) * yy + ome_orb * (ori_y_bh - y_rot) ;
00258     */
00259         tmp = ((lapconf_tot / pow(confo_tot,3.)) - (0.25*cc/r_are)) * st * cp
00260       - shift_comp(1)
00261       + (ome_orb - omega_spin) * yy + ome_orb * (ori_y_bh - y_rot) ;
00262 
00263     }
00264 
00265     int nt = mg->get_nt(0) ;
00266     int np = mg->get_np(0) ;
00267 
00268     bc = 1. ;
00269     for (int j=0; j<nt; j++) {
00270         for (int k=0; k<np; k++) {
00271         bc.set(0,k,j,0) = tmp.val_grid_point(1,k,j,0) ;
00272     }
00273     }
00274 
00275     bc.base = *bases[0] ;
00276 
00277     for (int i=0; i<3; i++)
00278         delete bases[i] ;
00279 
00280     delete [] bases ;
00281 
00282     return bc ;
00283 
00284 }
00285 
00286 const Valeur Hole_bhns::bc_shift_y(double ome_orb, double x_rot) const {
00287 
00288     // Fundamental constants and units
00289     // -------------------------------
00290     using namespace Unites ;
00291 
00292     const Mg3d* mg = mp.get_mg() ;
00293     const Mg3d* mg_angu = mg->get_angu() ;
00294     Valeur bc(mg_angu) ;
00295 
00296     Base_val** bases = mp.get_mg()->std_base_vect_cart() ;
00297 
00298     Scalar rr(mp) ;
00299     rr = mp.r ;
00300     rr.std_spectral_base() ;
00301     Scalar st(mp) ;
00302     st = mp.sint ;
00303     st.std_spectral_base() ;
00304     Scalar sp(mp) ;
00305     sp = mp.sinp ;
00306     sp.std_spectral_base() ;
00307     Scalar xx(mp) ;
00308     xx = mp.x ;
00309     xx.std_spectral_base() ;
00310 
00311     double mass = ggrav * mass_bh ;
00312     double ori_x_bh = mp.get_ori_x() ;
00313 
00314     Scalar tmp(mp) ;
00315 
00316     if (kerrschild) {
00317 
00318     // Exact solution of an isolated BH is extracted
00319 
00320         cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00321     abort() ;
00322 
00323     }
00324     else {  // Isotropic coordinates with the maximal slicing
00325 
00326         double cc ;
00327 
00328         // Sets C/M^2 for each case of the lapse boundary condition
00329         // --------------------------------------------------------
00330 
00331     if (bc_lapconf_nd) {  // Neumann boundary condition
00332         if (bc_lapconf_fs) {  // First condition
00333             // d(\alpha \psi)/dr = 0
00334             // ---------------------
00335             cc = 2. * (sqrt(13.) - 1.) / 3. ;
00336         }
00337         else {  // Second condition
00338             // d(\alpha \psi)/dr = (\alpha \psi)/(2 rah)
00339             // -----------------------------------------
00340             cc = 4. / 3. ;
00341         }
00342     }
00343     else {  // Dirichlet boundary condition
00344         if (bc_lapconf_fs) {  // First condition
00345             // (\alpha \psi) = 1/2
00346             // -------------------
00347             cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00348         abort() ;
00349         }
00350         else {  // Second condition
00351             // (\alpha \psi) = 1/sqrt(2.) \psi_KS
00352             // ----------------------------------
00353             cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00354         abort() ;
00355         //          cc = 2. * sqrt(2.) ;
00356         }
00357     }
00358 
00359         Scalar r_are(mp) ;
00360     r_are = r_coord(bc_lapconf_nd, bc_lapconf_fs) ;
00361     r_are.std_spectral_base() ;
00362 
00363     /*
00364         tmp = ((lapse_tot / confo_tot / confo_tot)
00365            - mass*mass*cc/rr/rr/pow(r_are,3.)) * st * sp
00366       - shift_comp(2)
00367       - (ome_orb - omega_spin) * xx - ome_orb * (ori_x_bh - x_rot) ;
00368     */
00369         tmp = ((lapconf_tot / pow(confo_tot,3.)) - (0.25*cc/r_are)) * st * sp
00370       - shift_comp(2)
00371       - (ome_orb - omega_spin) * xx - ome_orb * (ori_x_bh - x_rot) ;
00372 
00373     }
00374 
00375     int nt = mg->get_nt(0) ;
00376     int np = mg->get_np(0) ;
00377 
00378     bc = 1. ;
00379     for (int j=0; j<nt; j++) {
00380         for (int k=0; k<np; k++) {
00381         bc.set(0,k,j,0) = tmp.val_grid_point(1,k,j,0) ;
00382     }
00383     }
00384 
00385     bc.base = *bases[1] ;
00386 
00387     for (int i=0; i<3; i++)
00388         delete bases[i] ;
00389 
00390     delete [] bases ;
00391 
00392     return bc ;
00393 
00394 }
00395 
00396 const Valeur Hole_bhns::bc_shift_z() const {
00397 
00398     // Fundamental constants and units
00399     // -------------------------------
00400     using namespace Unites ;
00401 
00402     const Mg3d* mg = mp.get_mg() ;
00403     const Mg3d* mg_angu = mg->get_angu() ;
00404     Valeur bc(mg_angu) ;
00405 
00406     Base_val** bases = mp.get_mg()->std_base_vect_cart() ;
00407 
00408     Scalar rr(mp) ;
00409     rr = mp.r ;
00410     rr.std_spectral_base() ;
00411     Scalar ct(mp) ;
00412     ct = mp.cost ;
00413     ct.std_spectral_base() ;
00414 
00415     double mass = ggrav * mass_bh ;
00416 
00417     Scalar tmp(mp) ;
00418 
00419     if (kerrschild) {
00420 
00421     // Exact solution of an isolated BH is extracted
00422 
00423         cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00424     abort() ;
00425 
00426     }
00427     else {  // Isotropic coordinates with the maximal slicing
00428 
00429         double cc ;
00430 
00431         // Sets C/M^2 for each case of the lapse boundary condition
00432         // --------------------------------------------------------
00433 
00434     if (bc_lapconf_nd) {  // Neumann boundary condition
00435         if (bc_lapconf_fs) {  // First condition
00436             // d(\alpha \psi)/dr = 0
00437             // ---------------------
00438             cc = 2. * (sqrt(13.) - 1.) / 3. ;
00439         }
00440         else {  // Second condition
00441             // d(\alpha \psi)/dr = (\alpha \psi)/(2 rah)
00442             // -----------------------------------------
00443             cc = 4. / 3. ;
00444         }
00445     }
00446     else {  // Dirichlet boundary condition
00447         if (bc_lapconf_fs) {  // First condition
00448             // (\alpha \psi) = 1/2
00449             // -------------------
00450             cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00451         abort() ;
00452         }
00453         else {  // Second condition
00454             // (\alpha \psi) = 1/sqrt(2.) \psi_KS
00455             // ----------------------------------
00456             cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00457         abort() ;
00458         //          cc = 2. * sqrt(2.) ;
00459         }
00460     }
00461 
00462         Scalar r_are(mp) ;
00463     r_are = r_coord(bc_lapconf_nd, bc_lapconf_fs) ;
00464     r_are.std_spectral_base() ;
00465 
00466     /*
00467         tmp = ((lapse_tot / confo_tot / confo_tot)
00468            - mass*mass*cc/rr/rr/pow(r_are,3.)) * ct - shift_comp(3) ;
00469     */
00470         tmp = ((lapconf_tot / pow(confo_tot,3.)) - (0.25*cc/r_are)) * ct
00471       - shift_comp(3) ;
00472 
00473     }
00474 
00475     int nt = mg->get_nt(0) ;
00476     int np = mg->get_np(0) ;
00477 
00478     bc = 1. ;
00479     for (int j=0; j<nt; j++) {
00480         for (int k=0; k<np; k++) {
00481         bc.set(0,k,j,0) = tmp.val_grid_point(1,k,j,0) ;
00482     }
00483     }
00484 
00485     bc.base = *bases[2] ;
00486 
00487     for (int i=0; i<3; i++)
00488       delete bases[i] ;
00489 
00490     delete [] bases ;
00491 
00492     return bc ;
00493 
00494 }
00495 
00496 const Valeur Hole_bhns::bc_confo(double ome_orb, double x_rot,
00497                  double y_rot) const {
00498 
00499     // Fundamental constants and units
00500     // -------------------------------
00501     using namespace Unites ;
00502 
00503     const Mg3d* mg = mp.get_mg() ;
00504     const Mg3d* mg_angu = mg->get_angu() ;
00505     Valeur bc(mg_angu) ;
00506 
00507     Scalar rr(mp) ;
00508     rr = mp.r ;
00509     rr.std_spectral_base() ;
00510     Scalar st(mp) ;
00511     st = mp.sint ;
00512     st.std_spectral_base() ;
00513     Scalar ct(mp) ;
00514     ct = mp.cost ;
00515     ct.std_spectral_base() ;
00516     Scalar sp(mp) ;
00517     sp = mp.sinp ;
00518     sp.std_spectral_base() ;
00519     Scalar cp(mp) ;
00520     cp = mp.cosp ;
00521     cp.std_spectral_base() ;
00522 
00523     Vector ll(mp, CON, mp.get_bvect_cart()) ;
00524     ll.set_etat_qcq() ;
00525     ll.set(1) = st % cp ;
00526     ll.set(2) = st % sp ;
00527     ll.set(3) = ct ;
00528     ll.std_spectral_base() ;
00529 
00530     Scalar divshift(mp) ;  // dzpuis = 2
00531     divshift = shift_auto_rs(1).deriv(1) + shift_auto_rs(2).deriv(2)
00532       + shift_auto_rs(3).deriv(3) + d_shift_comp(1,1) + d_shift_comp(2,2)
00533       + d_shift_comp(3,3) ;
00534     divshift.std_spectral_base() ;
00535 
00536     Scalar llshift(mp) ;   // dzpuis = 0
00537     llshift = ll(1) % (shift_auto_rs(1) + shift_comp(1))
00538       + ll(2) % (shift_auto_rs(2) + shift_comp(2))
00539       + ll(3) % (shift_auto_rs(3) + shift_comp(3)) ;
00540     llshift.std_spectral_base() ;
00541 
00542     Scalar llshift_auto_rs(mp) ;   // dzpuis = 0
00543     llshift_auto_rs = ll(1)%shift_auto_rs(1) + ll(2)%shift_auto_rs(2)
00544       + ll(3)%shift_auto_rs(3) ;
00545     llshift_auto_rs.std_spectral_base() ;
00546 
00547     Scalar lldllsh = llshift_auto_rs.dsdr()
00548       + ll(1) * ( ll(1)%d_shift_comp(1,1) + ll(2)%d_shift_comp(1,2)
00549           + ll(3)%d_shift_comp(1,3) )
00550       + ll(2) * ( ll(1)%d_shift_comp(2,1) + ll(2)%d_shift_comp(2,2)
00551           + ll(3)%d_shift_comp(2,3) )
00552       + ll(3) * ( ll(1)%d_shift_comp(3,1) + ll(2)%d_shift_comp(3,2)
00553           + ll(3)%d_shift_comp(3,3) ) ; // dzpuis = 2
00554     lldllsh.std_spectral_base() ;
00555 
00556     Scalar tmp2 = divshift ;
00557     Scalar tmp3 = -3.*lldllsh ;
00558 
00559     tmp2.dec_dzpuis(2) ;
00560     tmp3.dec_dzpuis(2) ;
00561 
00562     Scalar tmp(mp) ;
00563 
00564     double mass = ggrav * mass_bh ;
00565 
00566     if (kerrschild) {
00567 
00568         cout << "!!!!! WARNING: Not yet available !!!!!" << endl ;
00569     abort() ;
00570 
00571     }
00572     else {  // Isotropic coordinates with the maximal slicing
00573 
00574         double cc ;
00575 
00576         // Sets C/M^2 for each case of the lapse boundary condition
00577         // --------------------------------------------------------
00578 
00579     if (bc_lapconf_nd) {  // Neumann boundary condition
00580         if (bc_lapconf_fs) {  // First condition
00581             // d(\alpha \psi)/dr = 0
00582             // ---------------------
00583             cc = 2. * (sqrt(13.) - 1.) / 3. ;
00584         }
00585         else {  // Second condition
00586             // d(\alpha \psi)/dr = (\alpha \psi)/(2 rah)
00587             // -----------------------------------------
00588             cc = 4. / 3. ;
00589         }
00590     }
00591     else {  // Dirichlet boundary condition
00592         if (bc_lapconf_fs) {  // First condition
00593             // (\alpha \psi) = 1/2
00594             // -------------------
00595             cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00596         abort() ;
00597         }
00598         else {  // Second condition
00599             // (\alpha \psi) = 1/sqrt(2.) \psi_KS
00600             // ----------------------------------
00601             cout << "!!!!! WARNING: Not yet prepared !!!!!" << endl ;
00602         abort() ;
00603         //          cc = 2. * sqrt(2.) ;
00604         }
00605     }
00606 
00607         Scalar r_are(mp) ;
00608     r_are = r_coord(bc_lapconf_nd, bc_lapconf_fs) ;
00609     r_are.std_spectral_base() ;
00610 
00611         Scalar tmp1 = - 0.5 * (confo_auto_rs + confo_comp) / rr ;
00612         Scalar tmp7 = - ll(1)%d_confo_comp(1) - ll(2)%d_confo_comp(2)
00613       - ll(3)%d_confo_comp(3) ;
00614     tmp7.std_spectral_base() ;
00615     tmp7.dec_dzpuis(2) ;  // dzpuis : 2 -> 0
00616 
00617     /*
00618     Scalar tmp8 = 0.5 * sqrt(1. - 2.*mass/r_are/rr
00619                  + cc*cc*pow(mass/r_are/rr,4.))
00620       * (pow(confo_tot,3.)*mass*mass*cc/lapse_tot/pow(r_are*rr,3.)
00621          - sqrt(r_are) / rr) ;
00622     */
00623     Scalar tmp8 = 0.125*cc*(0.25*cc*pow(confo_tot,4.)/r_are/lapconf_tot
00624                 - sqrt(r_are)) / rr ;
00625     tmp8.std_spectral_base() ;
00626 
00627         tmp = tmp7 + tmp1
00628       + pow(confo_tot,4.) * (tmp2 + tmp3) / 12. / lapconf_tot
00629       + tmp8 ;
00630 
00631     }
00632 
00633     int nt = mg->get_nt(0) ;
00634     int np = mg->get_np(0) ;
00635 
00636     bc = 1. ;
00637     for (int j=0; j<nt; j++) {
00638         for (int k=0; k<np; k++) {
00639         bc.set(0,k,j,0) = tmp.val_grid_point(1,k,j,0) ;
00640     }
00641     }
00642 
00643     bc.std_base_scal() ;
00644     return bc ;
00645 
00646 }

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