00001
00002
00003
00004 #ifndef DENSE_H_
00005 #define DENSE_H_
00006
00007
00008
00013 double dense_fabden(double radius,
00014 double depth);
00015
00020 double dense_tabden(double r0,
00021 double depth);
00022
00023
00024 double dense_parametric_wind(double rad);
00025
00026 const int LIMTABDLAW = 500;
00027
00029 struct t_dense
00030 {
00031 t_dense() {
00032
00033
00034 AtomicWeight[0] = 1.00794f;
00035 AtomicWeight[1] = 4.0026022f;
00036 AtomicWeight[2] = 6.9412f;
00037 AtomicWeight[3] = 9.0121823f;
00038 AtomicWeight[4] = 10.8117f;
00039 AtomicWeight[5] = 12.01078f;
00040 AtomicWeight[6] = 14.00672f;
00041 AtomicWeight[7] = 15.99943f;
00042 AtomicWeight[8] = 18.9984032f;
00043 AtomicWeight[9] = 20.17976f;
00044 AtomicWeight[10] = 22.989770f;
00045 AtomicWeight[11] = 24.30506f;
00046 AtomicWeight[12] = 26.9815382f;
00047 AtomicWeight[13] = 28.08553f;
00048 AtomicWeight[14] = 30.9737612f;
00049 AtomicWeight[15] = 32.0655f;
00050 AtomicWeight[16] = 35.4532f;
00051 AtomicWeight[17] = 39.9481f;
00052 AtomicWeight[18] = 39.09831f;
00053 AtomicWeight[19] = 40.0784f;
00054 AtomicWeight[20] = 44.9559108f;
00055 AtomicWeight[21] = 47.8671f;
00056 AtomicWeight[22] = 50.94151f;
00057 AtomicWeight[23] = 51.99616f;
00058 AtomicWeight[24] = 54.9380499f;
00059 AtomicWeight[25] = 55.8472f;
00060 AtomicWeight[26] = 58.9332009f;
00061 AtomicWeight[27] = 58.69342f;
00062 AtomicWeight[28] = 63.5463f;
00063 AtomicWeight[29] = 65.392f;
00064
00065 zero();
00066 }
00067
00071 realnum gas_phase[LIMELM];
00072 void SetGasPhaseDensity( const long nelem, const realnum density );
00073
00075 realnum AtomicWeight[LIMELM];
00076
00077 private:
00080 realnum m_xMolecules[LIMELM];
00081
00082 public:
00083 realnum xMolecules(long nelem)
00084 {
00085 return m_xMolecules[nelem];
00086 }
00087 void updateXMolecules();
00088 void zero();
00089
00091 realnum xMassDensity;
00092
00095 realnum xMassDensity0;
00096
00098 realnum pden;
00099
00101 realnum wmole;
00102
00104 realnum xNucleiTotal;
00105
00107 realnum xMassTotal;
00108
00111 realnum HCorrFac;
00112
00119 long int IonLow[LIMELM+1];
00120 long int IonHigh[LIMELM+1];
00121
00125 double xIonDense[LIMELM][LIMELM+1];
00126
00128 bool lgIonChiantiOn[LIMELM][LIMELM+1];
00129
00131 bool lgIonStoutOn[LIMELM][LIMELM+1];
00132
00134 double maxWN[LIMELM][LIMELM+1];
00135
00139 realnum AbundanceLimit;
00140
00146 bool lgElmtOn[LIMELM];
00147
00149 bool lgSetIoniz[LIMELM];
00150
00154 realnum SetIoniz[LIMELM][LIMELM+1];
00155
00158 char chDenseLaw[5];
00159
00160
00161
00162 bool lgDenseInitConstant;
00163
00164
00165 bool lgPressureVaryTime;
00166
00167
00168 double PressureVaryTimeTimescale;
00169
00170 double PressureVaryTimeIndex;
00171
00173 double DensityLaw[10];
00174
00176 bool lgAsChoose[LIMELM][LIMELM];
00177 bool lgCSChoose[LIMELM][LIMELM];
00178
00180 realnum frad[LIMTABDLAW];
00181 realnum fhden[LIMTABDLAW];
00182
00184 long int nvals;
00185
00187 bool lgDLWDepth;
00188
00190 double eden;
00191
00193 double EdenMax , EdenMin;
00194
00197 double density_low_limit;
00198
00200 long int nzEdenBad;
00201
00203 realnum EdenSet;
00204
00206 realnum EdenExtra;
00207
00209 realnum EdenFraction;
00210
00212 double SqrtEden;
00213
00216 double EdenHCorr;
00217
00218 realnum EdenHCorr_f;
00219
00221 double EdenTrue;
00222
00224 double eden_from_metals;
00225
00227 bool lgEdenBad;
00228
00230 double edensqte;
00231
00235 double cdsqte;
00236
00239 realnum DensityPower;
00240 realnum rscale;
00241 realnum den0;
00242
00244 bool lgDenFlucOn;
00245
00248 bool lgDenFlucRadius;
00249
00251 realnum flong;
00252 realnum cfirst;
00253 realnum csecnd;
00254 realnum flcPhase;
00255
00256 };
00257 extern t_dense dense;
00258
00259
00260 bool lgElemsConserved(void);
00261
00262 #include "iso.h"
00263
00264
00265 void lgStatesConserved ( long nelem, long ionStage, qList states, long numStates, realnum err_tol, long loop_ion );
00266
00267 void SumDensities( void );
00268
00269 void ScaleAllDensities( const realnum factor );
00270 void ScaleIonDensities( const long nelem, const realnum factor );
00271 bool AbundChange( );
00272
00273 realnum scalingDensity(void);
00274 realnum scalingZoneDensity(long i);
00275
00276 #endif