Changeset 3347 in Sophya for trunk


Ignore:
Timestamp:
Oct 11, 2007, 4:34:42 PM (18 years ago)
Author:
cmv
Message:
  • changements des noms des methodes.
  • definition des options par enum. cmv 11/10/2007
Location:
trunk/Cosmo/SimLSS
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cosmo/SimLSS/cmvdefsurv.cc

    r3344 r3347  
    367367
    368368 PlanckSpectra planck(T_CMB_Par);
    369  planck.SetApprox(1);  // Rayleigh spectra
    370  planck.SetVar(0); // frequency
    371  planck.SetUnitOut(0); // output en W/....
    372  planck.SetTypSpectra(0); // radiance W/m^2/Sr/Hz
     369 planck.SetSpectraApprox(PlanckSpectra::RAYLEIGH);  // Rayleigh spectra
     370 planck.SetSpectraVar(PlanckSpectra::NU); // frequency
     371 planck.SetSpectraPower(PlanckSpectra::POWER); // output en W/....
     372 planck.SetSpectraUnit(PlanckSpectra::ANGSFLUX); // radiance W/m^2/Sr/Hz
    373373
    374374 // Signal
  • trunk/Cosmo/SimLSS/cmvtstblack.cc

    r3248 r3347  
    2222  //{compute_xroot(); return -41;}
    2323 double T = 2.718, nutest=-1.;
    24  unsigned short deriv = 0;
     24 unsigned short funcderiv = 0;
    2525 double x0;
    2626
    2727 if(narg>1) sscanf(arg[1],"%lf,%lf",&T,&nutest);
    2828 if(T<=0.) T = 2.718;
    29  if(narg>2) sscanf(arg[2],"%hu",&deriv);
    30  if(deriv!=0) deriv = 1;
    31 
    32  cout<<"Temperature "<<T<<" K , deriv="<<deriv<<endl;
     29 if(narg>2) sscanf(arg[2],"%hu",&funcderiv);
     30 PlanckSpectra::SpectraFunc deriv = (funcderiv==0) ? PlanckSpectra::VALUE : PlanckSpectra::DERIV;
     31
     32 cout<<"Temperature "<<T<<" K , deriv="<<(int)deriv<<endl;
    3333
    3434 //--------------------------------- Radiance Frequence
    3535 // frequence planck radiance W/..
    3636 PlanckSpectra pradf(T);
    37  pradf.SetDeriv(deriv); pradf.SetVar(0);
    38  pradf.SetApprox(0); pradf.SetTypSpectra(0); pradf.SetUnitOut(0);
    39  PlanckSpectra phpradf(pradf); phpradf.SetUnitOut(1);
     37 pradf.SetSpectraFunc(deriv);
     38 pradf.SetSpectraVar(PlanckSpectra::NU);
     39 pradf.SetSpectraApprox(PlanckSpectra::PLANCK);
     40 pradf.SetSpectraUnit(PlanckSpectra::ANGSFLUX);
     41 pradf.SetSpectraPower(PlanckSpectra::POWER);
     42 PlanckSpectra phpradf(pradf);
     43 phpradf.SetSpectraPower(PlanckSpectra::PHOTON);
    4044
    4145 // frequence rayleigh radiance W/..
    4246 PlanckSpectra rradf(T);
    43  rradf.SetDeriv(deriv); rradf.SetVar(0);
    44  rradf.SetApprox(1); rradf.SetTypSpectra(0); rradf.SetUnitOut(0);
    45  PlanckSpectra phrradf(rradf); phrradf.SetUnitOut(1);
     47 rradf.SetSpectraFunc(deriv);
     48 rradf.SetSpectraVar(PlanckSpectra::NU);
     49 rradf.SetSpectraApprox(PlanckSpectra::RAYLEIGH);
     50 rradf.SetSpectraUnit(PlanckSpectra::ANGSFLUX);
     51 rradf.SetSpectraPower(PlanckSpectra::POWER);
     52 PlanckSpectra phrradf(rradf);
     53 phrradf.SetSpectraPower(PlanckSpectra::PHOTON);
    4654
    4755 // frequence wien radiance W/..
    4856 PlanckSpectra wradf(T);
    49  wradf.SetDeriv(deriv); wradf.SetVar(0);
    50  wradf.SetApprox(2); wradf.SetTypSpectra(0); wradf.SetUnitOut(0);
    51  PlanckSpectra phwradf(wradf); phwradf.SetUnitOut(1);
     57 wradf.SetSpectraFunc(deriv);
     58 wradf.SetSpectraVar(PlanckSpectra::NU);
     59 wradf.SetSpectraApprox(PlanckSpectra::WIEN);
     60 wradf.SetSpectraUnit(PlanckSpectra::ANGSFLUX);
     61 wradf.SetSpectraPower(PlanckSpectra::POWER);
     62 PlanckSpectra phwradf(wradf);
     63 phwradf.SetSpectraPower(PlanckSpectra::PHOTON);
    5264
    5365 // Check
     
    6173 // frequence planck density W/..
    6274 PlanckSpectra pdensf(T);
    63  pdensf.SetDeriv(deriv); pdensf.SetVar(0);
    64  pdensf.SetApprox(0); pdensf.SetTypSpectra(2); pdensf.SetUnitOut(0);
    65  PlanckSpectra phpdensf(pdensf); phpdensf.SetUnitOut(1);
     75 pdensf.SetSpectraFunc(deriv);
     76 pdensf.SetSpectraVar(PlanckSpectra::NU);
     77 pdensf.SetSpectraApprox(PlanckSpectra::PLANCK);
     78 pdensf.SetSpectraUnit(PlanckSpectra::DENSENERG);
     79 pdensf.SetSpectraPower(PlanckSpectra::POWER);
     80 PlanckSpectra phpdensf(pdensf);
     81 phpdensf.SetSpectraPower(PlanckSpectra::PHOTON);
    6682
    6783 // frequence rayleigh density W/..
    6884 PlanckSpectra rdensf(T);
    69  rdensf.SetDeriv(deriv); rdensf.SetVar(0);
    70  rdensf.SetApprox(1); rdensf.SetTypSpectra(2); rdensf.SetUnitOut(0);
    71  PlanckSpectra phrdensf(rdensf); phrdensf.SetUnitOut(1);
     85 rdensf.SetSpectraFunc(deriv);
     86 rdensf.SetSpectraVar(PlanckSpectra::NU);
     87 rdensf.SetSpectraApprox(PlanckSpectra::RAYLEIGH);
     88 rdensf.SetSpectraUnit(PlanckSpectra::DENSENERG);
     89 rdensf.SetSpectraPower(PlanckSpectra::POWER);
     90 PlanckSpectra phrdensf(rdensf);
     91 phrdensf.SetSpectraPower(PlanckSpectra::PHOTON);
    7292
    7393 // frequence wien density W/..
    7494 PlanckSpectra wdensf(T);
    75  wdensf.SetDeriv(deriv); wdensf.SetVar(0);
    76  wdensf.SetApprox(2); wdensf.SetTypSpectra(2); wdensf.SetUnitOut(0);
    77  PlanckSpectra phwdensf(wdensf); phwdensf.SetUnitOut(1);
     95 wdensf.SetSpectraFunc(deriv);
     96 wdensf.SetSpectraVar(PlanckSpectra::NU);
     97 wdensf.SetSpectraApprox(PlanckSpectra::WIEN);
     98 wdensf.SetSpectraUnit(PlanckSpectra::DENSENERG);
     99 wdensf.SetSpectraPower(PlanckSpectra::POWER);
     100 PlanckSpectra phwdensf(wdensf);
     101 phwdensf.SetSpectraPower(PlanckSpectra::PHOTON);
    78102
    79103 //--------------------------------- Radiance Longeur d'onde
    80104 // longueur d'onde planck radiance W/..
    81105 PlanckSpectra pradl(T);
    82  pradl.SetDeriv(deriv); pradl.SetVar(1);
    83  pradl.SetApprox(0); pradl.SetTypSpectra(0); pradl.SetUnitOut(0);
    84  PlanckSpectra phpradl(pradl); phpradl.SetUnitOut(1);
     106 pradl.SetSpectraFunc(deriv);
     107 pradl.SetSpectraVar(PlanckSpectra::LAMBDA);
     108 pradl.SetSpectraApprox(PlanckSpectra::PLANCK);
     109 pradl.SetSpectraUnit(PlanckSpectra::ANGSFLUX);
     110 pradl.SetSpectraPower(PlanckSpectra::POWER);
     111 PlanckSpectra phpradl(pradl);
     112 phpradl.SetSpectraPower(PlanckSpectra::PHOTON);
    85113
    86114 // longueur d'onde rayleigh radiance W/..
    87115 PlanckSpectra rradl(T);
    88  rradl.SetDeriv(deriv); rradl.SetVar(1);
    89  rradl.SetApprox(1); rradl.SetTypSpectra(0); rradl.SetUnitOut(0);
    90  PlanckSpectra phrradl(rradl); phrradl.SetUnitOut(1);
     116 rradl.SetSpectraFunc(deriv);
     117 rradl.SetSpectraVar(PlanckSpectra::LAMBDA);
     118 rradl.SetSpectraApprox(PlanckSpectra::RAYLEIGH);
     119 rradl.SetSpectraUnit(PlanckSpectra::ANGSFLUX);
     120 rradl.SetSpectraPower(PlanckSpectra::POWER);
     121 PlanckSpectra phrradl(rradl);
     122 phrradl.SetSpectraPower(PlanckSpectra::PHOTON);
    91123
    92124 // longueur d'onde wien radiance W/..
    93125 PlanckSpectra wradl(T);
    94  wradl.SetDeriv(deriv); wradl.SetVar(1);
    95  wradl.SetApprox(2); wradl.SetTypSpectra(0); wradl.SetUnitOut(0);
    96  PlanckSpectra phwradl(wradl); phwradl.SetUnitOut(1);
     126 wradl.SetSpectraFunc(deriv);
     127 wradl.SetSpectraVar(PlanckSpectra::LAMBDA);
     128 wradl.SetSpectraApprox(PlanckSpectra::WIEN);
     129 wradl.SetSpectraUnit(PlanckSpectra::ANGSFLUX);
     130 wradl.SetSpectraPower(PlanckSpectra::POWER);
     131 PlanckSpectra phwradl(wradl);
     132 phwradl.SetSpectraPower(PlanckSpectra::PHOTON);
    97133
    98134 //--------------------------------- Densite Longeur d'onde
    99135 // longueur d'onde planck density W/..
    100136 PlanckSpectra pdensl(T);
    101  pdensl.SetDeriv(deriv); pdensl.SetVar(1);
    102  pdensl.SetApprox(0); pdensl.SetTypSpectra(2); pdensl.SetUnitOut(0);
    103  PlanckSpectra phpdensl(pdensl); phpdensl.SetUnitOut(1);
     137 pdensl.SetSpectraFunc(deriv);
     138 pdensl.SetSpectraVar(PlanckSpectra::LAMBDA);
     139 pdensl.SetSpectraApprox(PlanckSpectra::PLANCK);
     140 pdensl.SetSpectraUnit(PlanckSpectra::DENSENERG);
     141 pdensl.SetSpectraPower(PlanckSpectra::POWER);
     142 PlanckSpectra phpdensl(pdensl);
     143 phpdensl.SetSpectraPower(PlanckSpectra::PHOTON);
    104144
    105145 // longueur d'onde rayleigh density W/..
    106146 PlanckSpectra rdensl(T);
    107  rdensl.SetDeriv(deriv); rdensl.SetVar(1);
    108  rdensl.SetApprox(1); rdensl.SetTypSpectra(2); rdensl.SetUnitOut(0);
    109  PlanckSpectra phrdensl(rdensl); phrdensl.SetUnitOut(1);
     147 rdensl.SetSpectraFunc(deriv);
     148 rdensl.SetSpectraVar(PlanckSpectra::LAMBDA);
     149 rdensl.SetSpectraApprox(PlanckSpectra::RAYLEIGH);
     150 rdensl.SetSpectraUnit(PlanckSpectra::DENSENERG);
     151 rdensl.SetSpectraPower(PlanckSpectra::POWER);
     152 PlanckSpectra phrdensl(rdensl);
     153 phrdensl.SetSpectraPower(PlanckSpectra::PHOTON);
    110154
    111155 // longueur d'onde wien density W/..
    112156 PlanckSpectra wdensl(T);
    113  wdensl.SetDeriv(deriv); wdensl.SetVar(1);
    114  wdensl.SetApprox(2); wdensl.SetTypSpectra(2); wdensl.SetUnitOut(0);
    115  PlanckSpectra phwdensl(wdensl); phwdensl.SetUnitOut(1);
     157 wdensl.SetSpectraFunc(deriv);
     158 wdensl.SetSpectraVar(PlanckSpectra::LAMBDA);
     159 wdensl.SetSpectraApprox(PlanckSpectra::WIEN);
     160 wdensl.SetSpectraUnit(PlanckSpectra::DENSENERG);
     161 wdensl.SetSpectraPower(PlanckSpectra::POWER);
     162 PlanckSpectra phwdensl(wdensl);
     163 phwdensl.SetSpectraPower(PlanckSpectra::PHOTON);
    116164
    117165 //--------------------------------- Le maximum des spectres de planck
  • trunk/Cosmo/SimLSS/planckspectra.cc

    r3325 r3347  
    105105//************************************************************************
    106106PlanckSpectra::PlanckSpectra(double T)
    107   : T_(T) , approx_(0) , deriv_(0) , typvar_(0) , typspec_(0) , unitout_(0)
     107  : T_(T) , spectraapprox_(PLANCK) , spectrafunc_(VALUE) , spectravar_(NU)
     108  , spectraunit_(ANGSFLUX) , spectrapower_(POWER)
    108109{
    109110}
    110111
    111112PlanckSpectra::PlanckSpectra(PlanckSpectra& s)
    112   : T_(s.T_) , approx_(s.approx_) , deriv_(s.deriv_) , typvar_(s.typvar_) , typspec_(s.typspec_)
    113   , unitout_(s.unitout_)
     113  : T_(s.T_) , spectraapprox_(s.spectraapprox_) , spectrafunc_(s.spectrafunc_) , spectravar_(s.spectravar_)
     114  , spectraunit_(s.spectraunit_), spectrapower_(s.spectrapower_)
    114115{
    115116}
     
    120121
    121122//************************************************************************
    122 void PlanckSpectra::SetApprox(unsigned short approx)
    123 // approx = 0 : Planck spectra
    124 //        = 1 : Rayleigh spectra
    125 //        = 2 : Wien spectra
    126 {
    127   if(approx>2) {
    128     cout<<"PlanckSpectra::SetApprox : unknown approximation"<<endl;
    129     throw ParmError("PlanckSpectra::SetApprox : unknown approximation");
    130   }
    131   approx_ = approx;
    132 }
    133 
    134 void PlanckSpectra::SetDeriv(unsigned short deriv)
    135 // deriv = 0 : spectra
    136 //       = 1 : derivative of spectra relative to temperature
    137 {
    138   if(deriv>1) {
    139     cout<<"PlanckSpectra::SetDeriv : parameter out of range"<<endl;
    140     throw ParmError("PlanckSpectra::SetDeriv : parameter out of range");
    141   }
    142   deriv_ = deriv;
    143 }
    144 
    145 void PlanckSpectra::SetVar(unsigned short typvar)
    146 // typvar = 0 : variable is frequency (Hz)
    147 //        = 1 : variable is wavelength (m)
    148 {
    149   if(typvar>1) {
    150     cout<<"PlanckSpectra::SetVar : parameter out of range"<<endl;
    151     throw ParmError("PlanckSpectra::SetVar : parameter out of range");
    152   }
    153   typvar_ = typvar;
    154 }
    155 
    156 void PlanckSpectra::SetUnitOut(unsigned short unitout)
    157 // unitout = 0 : in W/...
    158 //         = 1 : in photon/s/...
    159 {
    160   if(unitout>1) {
    161     cout<<"PlanckSpectra::SetUnitOut : parameter out of range"<<endl;
    162     throw ParmError("PlanckSpectra::SetUnitOut : parameter out of range");
    163   }
    164   unitout_ = unitout;
    165 }
    166 
    167 void PlanckSpectra::SetTypSpectra(unsigned short typspec)
    168 // typspec = 0 : radiance   W/m^2/Sr/Hz  or ...
    169 //         = 1 : emittance  W/m^2/Hz     or ...
    170 //         = 2 : density    J/m^3/Hz     or ...
    171 //         = 3 : just the function exp() or equivalent for Rayleigh
    172 {
    173   if(typspec>3) {
    174     cout<<"PlanckSpectra::SetTypSpectra : parameter out of range"<<endl;
    175     throw ParmError("PlanckSpectra::SetTypSpectra : parameter out of range");
    176   }
    177   typspec_ = typspec;
     123void PlanckSpectra::SetSpectraApprox(SpectraApprox spectraapprox)
     124// spectraapprox = PLANCK   : Planck spectra
     125//               = RAYLEIGH : Rayleigh spectra
     126//               = WIEN     : Wien spectra
     127{
     128  spectraapprox_ = spectraapprox;
     129}
     130
     131void PlanckSpectra::SetSpectraFunc(SpectraFunc spectrafunc)
     132// spectrafunc = VALUE : spectra
     133//             = DERIV : derivative of spectra relative to temperature
     134{
     135  spectrafunc_ = spectrafunc;
     136}
     137
     138void PlanckSpectra::SetSpectraVar(SpectraVar spectravar)
     139// spectravar = NU     : variable is frequency (Hz)
     140//            = LAMBDA : variable is wavelength (m)
     141{
     142  spectravar_ = spectravar;
     143}
     144
     145void PlanckSpectra::SetSpectraPower(SpectraPower spectrapower)
     146// spectrapower = POWER : in W/...
     147//              = PHOTON : in photon/s/...
     148{
     149  spectrapower_ = spectrapower;
     150}
     151
     152void PlanckSpectra::SetSpectraUnit(SpectraUnit spectraunit)
     153// spectraunit = ANGSFLUX  : radiance   W/m^2/Sr/Hz  or ...
     154//             = SFLUX     : emittance  W/m^2/Hz     or ...
     155//             = DENSENERG : density    J/m^3/Hz     or ...
     156//             = EXPON     : just the function exp() or equivalent for Rayleigh
     157{
     158  spectraunit_ = spectraunit;
    178159}
    179160
     
    190171double PlanckSpectra::PlanckExp(double fl)
    191172{
    192   double x = (typvar_) ? HCsK_/(fl*T_) : HsK_*fl/T_;
    193 
    194   if(approx_ == 1) return 1./x;  // Rayleigh
     173  double x = (spectravar_==LAMBDA) ? HCsK_/(fl*T_) : HsK_*fl/T_;
     174
     175  if(spectraapprox_ == RAYLEIGH) return 1./x;  // Rayleigh
    195176
    196177  if(x>MAXARGEXP) return 0.;
    197178
    198   if(approx_ == 2) return exp(-x);  // Wien
     179  if(spectraapprox_ == WIEN) return exp(-x);  // Wien
    199180
    200181  if(x<MINARGEXP) return 1./(x*(1.+x/2.));
     
    204185double PlanckSpectra::DPlanckExp_DT(double fl)
    205186{
    206   if(approx_ == 1) return (typvar_) ? fl/HCsK_: 1. / (HsK_*fl);  // Rayleigh
    207 
    208   double x = (typvar_) ? HCsK_/(fl*T_) : HsK_*fl/T_;
     187  if(spectraapprox_ == RAYLEIGH)
     188    return (spectravar_==LAMBDA) ? fl/HCsK_: 1. / (HsK_*fl);  // Rayleigh
     189
     190  double x = (spectravar_==LAMBDA) ? HCsK_/(fl*T_) : HsK_*fl/T_;
    209191
    210192  if(x>MAXARGEXP) return 0.;
    211193
    212   if(approx_ == 2) return x/T_ * exp(-x);  // Wien
     194  if(spectraapprox_ == WIEN) return x/T_ * exp(-x);  // Wien
    213195
    214196  double v;
     
    225207{
    226208  // --- type de spectre et d'approximation selon choix variable
    227   double fex = (deriv_) ? DPlanckExp_DT(x): PlanckExp(x);
     209  double fex = (spectrafunc_==DERIV) ? DPlanckExp_DT(x): PlanckExp(x);
    228210
    229211  // --- le coefficient multiplicateur devant l'expo
    230   if(typspec_ == 3) return fex;  // expo seule
    231 
    232   // radiance en ph/...       longeur d'onde         frequency
    233   double coeff = (typvar_) ? 2.*CinM_/(x*x*x*x): 2.*x*x/(CinM_*CinM_);
    234 
    235   if(typspec_ == 1)      coeff *= M_PI;  // emittance en ph/...
    236   else if(typspec_ == 2) coeff *= 4.*M_PI/CinM_;  // densite en ph/...
    237 
    238   // unite en W/...                       longeur d'onde         frequency
    239   if(unitout_ == 0) coeff *= (typvar_) ? h_Planck_Cst*CinM_/x: h_Planck_Cst*x;
     212  if(spectraunit_ == EXPON) return fex;  // expo seule
     213
     214  // radiance en ph/...               longeur d'onde         frequency
     215  double coeff = (spectravar_==LAMBDA) ? 2.*CinM_/(x*x*x*x): 2.*x*x/(CinM_*CinM_);
     216
     217  if(spectraunit_ == SFLUX)      coeff *= M_PI;  // emittance en ph/...
     218  else if(spectraunit_ == DENSENERG) coeff *= 4.*M_PI/CinM_;  // densite en ph/...
     219
     220  // unite en W/...                longeur d'onde         frequency
     221  if(spectrapower_ == POWER)
     222    coeff *= (spectravar_==LAMBDA) ? h_Planck_Cst*CinM_/x: h_Planck_Cst*x;
    240223
    241224  return coeff * fex;
     
    274257{
    275258  double x=-1.;
    276   if(typvar_ == 0) { // Frequence
    277     if(deriv_ == 0) {  // Le spectre
    278       if(unitout_ == 0) //  W/...
    279         {if(approx_==0) x=2.82143938074; else if(approx_==2) x=3.;}
    280       else if(unitout_ == 1) //  Ph/s/...
    281         {if(approx_==0) x=1.59362426; else if(approx_==2) x=2.;}
    282     } else if(deriv_ == 1) {  // La derivee du spectre
    283       if(unitout_ == 0) //  W/...
    284         {if(approx_==0) x=3.830016095; else if(approx_==2) x=4.;}
    285       else if(unitout_ == 1) //  Ph/s/...
    286         {if(approx_==0) x=2.575678888; else if(approx_==2) x=3.;}
     259  if(spectravar_ == NU) { // Frequence
     260    if(spectrafunc_ == VALUE) {  // Le spectre
     261      if(spectrapower_ == POWER) //  W/...
     262        {if(spectraapprox_==PLANCK) x=2.82143938074; else if(spectraapprox_==WIEN) x=3.;}
     263      else if(spectrapower_ == PHOTON) //  Ph/s/...
     264        {if(spectraapprox_==PLANCK) x=1.59362426; else if(spectraapprox_==WIEN) x=2.;}
     265    } else if(spectrafunc_ == DERIV) {  // La derivee du spectre
     266      if(spectrapower_ == POWER) //  W/...
     267        {if(spectraapprox_==PLANCK) x=3.830016095; else if(spectraapprox_==WIEN) x=4.;}
     268      else if(spectrapower_ == PHOTON) //  Ph/s/...
     269        {if(spectraapprox_==PLANCK) x=2.575678888; else if(spectraapprox_==WIEN) x=3.;}
    287270    }
    288271  } else { // Longeur d'onde
    289     if(deriv_ == 0) {  // Le spectre
    290       if(unitout_ == 0) //  W/...
    291         {if(approx_==0) x=4.96511420; else if(approx_==2) x=5.;}
    292       else if(unitout_ == 1) //  Ph/s/...
    293         {if(approx_==0) x=3.9206904099; else if(approx_==2) x=4.;}
    294     } else if(deriv_ == 1) {  // La derivee du spectre
    295       if(unitout_ == 0) //  W/...
    296         {if(approx_==0) x=5.969409190; else if(approx_==2) x=6.;}
    297      else if(unitout_ == 1) //  Ph/s/...
    298         {if(approx_==0) x=4.928119345; else if(approx_==2) x=5.;}
     272    if(spectrafunc_ == VALUE) {  // Le spectre
     273      if(spectrapower_ == POWER) //  W/...
     274        {if(spectraapprox_==PLANCK) x=4.96511420; else if(spectraapprox_==WIEN) x=5.;}
     275      else if(spectrapower_ == PHOTON) //  Ph/s/...
     276        {if(spectraapprox_==PLANCK) x=3.9206904099; else if(spectraapprox_==WIEN) x=4.;}
     277    } else if(spectrafunc_ == DERIV) {  // La derivee du spectre
     278      if(spectrapower_ == POWER) //  W/...
     279        {if(spectraapprox_==PLANCK) x=5.969409190; else if(spectraapprox_==WIEN) x=6.;}
     280     else if(spectrapower_ == PHOTON) //  Ph/s/...
     281        {if(spectraapprox_==PLANCK) x=4.928119345; else if(spectraapprox_==WIEN) x=5.;}
    299282    }
    300283  }
    301284
    302285  if(x<0.) return x;  // Rayleigh n'a pas de maximum
    303   if(typvar_ == 0) return x / HsK_ *T_; // Frequence
     286  if(spectravar_ == NU) return x / HsK_ *T_; // Frequence
    304287  return HCsK_ / x /T_; // Longeur d'onde
    305288}
     
    308291// Retourne le maximum des spectres (a la precicion eps)
    309292{
    310   if(approx_ == 1) {  // Pas de maximum pour les spectres de Raleigh
     293  if(spectraapprox_ == RAYLEIGH) {  // Pas de maximum pour les spectres de Raleigh
    311294    cout<<"PlanckSpectra::FindMaximum : no maximum for Raleigh spectra"<<endl;
    312295    throw ParmError("PlanckSpectra::FindMaximum : no maximum for Raleigh spectra");
  • trunk/Cosmo/SimLSS/planckspectra.h

    r3325 r3347  
    1010class PlanckSpectra : public GenericFunc {
    1111public:
     12
     13  typedef enum {PLANCK=0, RAYLEIGH=1, WIEN=2} SpectraApprox;
     14  typedef enum {POWER=0, PHOTON=1} SpectraPower;
     15  typedef enum {VALUE=0, DERIV=1} SpectraFunc;
     16  typedef enum {NU=0, LAMBDA=1} SpectraVar;
     17  typedef enum {ANGSFLUX=0, SFLUX=1, DENSENERG=2, EXPON=3} SpectraUnit;
     18
    1219  PlanckSpectra(double T);
    1320  PlanckSpectra(PlanckSpectra& s);
     
    1724  inline double GetTemperature(void) {return T_;}
    1825
    19   void SetApprox(unsigned short approx=0);
    20   void SetDeriv(unsigned short deriv=0);
    21   void SetVar(unsigned short typvar=0);
    22   void SetTypSpectra(unsigned short typspec=0);
    23   void SetUnitOut(unsigned short unitout=0);
     26  void SetSpectraApprox(SpectraApprox spectraapprox=PLANCK);
     27  void SetSpectraFunc(SpectraFunc spectrafunc=VALUE);
     28  void SetSpectraVar(SpectraVar spectravar=NU);
     29  void SetSpectraUnit(SpectraUnit spectraunit=ANGSFLUX);
     30  void SetSpectraPower(SpectraPower spectrapower=POWER);
    2431
    2532
     
    3441protected:
    3542  double T_;
    36   unsigned short approx_,deriv_,typvar_,typspec_,unitout_;
     43  SpectraApprox spectraapprox_;
     44  SpectraFunc spectrafunc_;
     45  SpectraVar spectravar_;
     46  SpectraUnit spectraunit_;
     47  SpectraPower spectrapower_;
    3748
    3849  double PlanckExp(double fl);
Note: See TracChangeset for help on using the changeset viewer.