00001
00002
00003
00004 #ifndef ATMDAT_H_
00005 #define ATMDAT_H_
00006
00007
00014 double atmdat_2phot_shapefunction( double EbyE2nu, long ipISO, long nelem );
00015
00021 void atmdat_2phot_rate(
00022 long ipZ ,
00023 long ipISO );
00024
00028 void atmdat_readin(void);
00029
00035 void atmdat_CHIANTI_readin( long intNS, char *chFileName );
00036
00042 void atmdat_LAMDA_readin( long intNS, char *chFileName );
00043
00044
00055 void atmdat_outer_shell(
00056 long int iz,
00057 long int in,
00058 long int *imax,
00059 long int *ig0,
00060 long int *ig1);
00061
00067 void ChargTranEval( double *O_HIonRate );
00068
00073 double ChargTranSumHeat(void);
00074
00075
00081 void ChargTranPun( FILE* ipPnunit , char* chSave );
00082
00088 double atmdat_dielrec_fe(long int ion, double t);
00089
00092 void atmdat_H_phot_cs(void);
00093
00095 void atmdat_3body(void);
00096
00107 double atmdat_HS_caseB(
00108 long int iHi, long int iLo, long int iZ, double TempIn,
00109 double DenIn,
00110 char chCase
00111 );
00112
00114 void atmdat_DielSupres(void);
00115
00116
00117 EXTERN double ****HS_He1_Xsectn;
00118 EXTERN double ****HS_He1_Energy;
00119
00120
00121 EXTERN double *****OP_Helike_Xsectn;
00122 EXTERN double *****OP_Helike_Energy;
00123 EXTERN long ****OP_Helike_NumPts;
00124
00125
00126
00127 #define NHSDIM 15
00128 #define NLINEHS 300
00129 #define HS_NZ 8
00130 #define NHCSTE 8
00131 #define NUM_HS98_DATA_POINTS 811
00132
00133 EXTERN struct t_atmdat {
00154 double HCharExcIonOf[LIMELM][LIMELM+1],
00155 HCharExcRecTo[LIMELM][LIMELM+1],
00156 HCharHeatMax,
00157 HCharCoolMax,
00158 HCharHeatOn;
00159
00160
00161 double HCharExcRecTo_N0_2D;
00162
00164 double HCharExcIonTotal,
00165 HCharExcRecTotal;
00166
00168 double HeCharExcIonTotal,
00169 HeCharExcRecTotal;
00170
00172 double HIonFrac;
00173
00175 double HIonFracMax;
00176
00183 double HeCharExcIonOf[LIMELM][LIMELM],
00184 HeCharExcRecTo[LIMELM][LIMELM];
00185
00188 double HCTAlex;
00189
00192 bool lgCTOn;
00193
00196 double Density[2][HS_NZ][NHSDIM],
00197 ElecTemp[2][HS_NZ][NHSDIM],
00199 Emiss[2][HS_NZ][NHSDIM][NHSDIM][NLINEHS];
00200
00203 long int nDensity[2][HS_NZ] , ntemp[2][HS_NZ] , ncut[2][HS_NZ];
00204
00208 bool lgHCaseBOK[2][HS_NZ];
00209
00211 long int nsbig;
00212
00215 bool lgCollIonOn;
00216
00221 realnum WaveLengthCaseB[8][25][24];
00222
00224 realnum *CaseBWlHeI;
00226 long int nCaseBHeI;
00227
00229 bool lgChiantiOn;
00231 bool lgLamdaOn;
00232
00234 static const int iVersionLength = 10;
00236 char chVersion[iVersionLength];
00237
00238 } atmdat;
00239
00240 typedef enum { PHFIT_UNDEF, PHFIT95, PHFIT96 } phfit_version;
00241
00242 class t_ADfA : public Singleton<t_ADfA>
00243 {
00244 friend class Singleton<t_ADfA>;
00245 protected:
00246 t_ADfA();
00247 private:
00248 phfit_version version;
00249
00250 long int L[7];
00251 long int NINN[30];
00252 long int NTOT[30];
00253 realnum PH1[7][30][30][6];
00254 realnum PH2[30][30][7];
00255
00256 realnum PHH[NHYDRO_MAX_LEVEL][5];
00257
00258 realnum P[8][110];
00259 realnum ST[9][405];
00260
00261 realnum rrec[30][30][2];
00262 realnum rnew[30][30][4];
00263 realnum fe[13][3];
00264
00265 realnum HRF[NHYDRO_MAX_LEVEL][9];
00266
00269 realnum STH[NHYDRO_MAX_LEVEL];
00270
00271 double CF[30][30][5];
00272
00275
00276
00277 double HCS[14][10][8];
00278 public:
00282 void set_version(phfit_version val) { version = val; }
00283
00285 phfit_version get_version() const { return version; }
00286
00293 realnum ph1(int i, int j, int k, int l) const { return PH1[i][j][k][l]; }
00294
00299 realnum sth(int i) const { return STH[i]; }
00300
00309 double phfit(long int nz, long int ne, long int is, double e);
00310
00317 double hpfit(long int iz, long int n, double e);
00318
00324 void rec_lines(double t, realnum r[][471]);
00325
00332 double rad_rec(long int iz, long int in, double t);
00333
00340 double H_rad_rec(long int iz, long int n, double t);
00341
00348 double coll_ion(long int iz, long int in, double t);
00349
00355 realnum h_coll_str( long ipLo, long ipHi, long ipTe );
00356 };
00357
00358 #endif