00001
00002
00003
00004 #ifndef IONBAL_H_
00005 #define IONBAL_H_
00006
00007 #include "dense.h"
00008
00011 void ion_recom_calculate( void );
00012
00016 void ion_trim(
00017 long int nelem );
00018
00020 void ion_zero(long int nelem);
00021
00025 void ion_collis(
00026 long nelem);
00027
00032 void ion_solver(long int nelem, bool lgPrintIt);
00033
00039 void ion_solver(long int nelem1, long int nelem2, bool lgPrintIt);
00040
00045 void ion_photo(
00046 long int nelem ,
00047 bool lgPrintIt );
00048
00050 void ion_recomb(bool,const double*,const double*,const double[],const double[],
00051 const double[],const double[],const double[],const double[],long);
00052
00054 void ion_recombAGN( FILE * io );
00055
00057 void ion_wrapper( long nelem );
00058
00062 void Badnell_rec_init( void );
00063
00064
00065 void IonAlumi(void);
00066 void IonArgon(void);
00067 void IonBeryl(void);
00068 void IonBoron(void);
00069 void IonCalci(void);
00070 void IonCarbo(void);
00071 void IonChlor(void);
00072 void IonChrom(void);
00073 void IonCobal(void);
00074 void IonCoppe(void);
00075 void IonFluor(void);
00076 void IonHelium(void);
00077 void IonIron(void);
00078 void IonLithi(void);
00079 void IonMagne(void);
00080 void IonManga(void);
00081 void IonNeon(void);
00082 void IonNicke(void);
00083 void IonNitro(void);
00084 void IonOxyge(void);
00085 void IonPhosi(void);
00086 void IonPotas(void);
00087 void IonScand(void);
00088 void IonSilic(void);
00089 void IonSodiu(void);
00090 void IonSulph(void);
00091 void IonTitan(void);
00092 void IonVanad(void);
00093 void IonZinc(void);
00094
00096 #define NSHELLS 7
00097
00099 class t_ionbal
00100 {
00101 public:
00109 double trimhi,
00110
00113 trimlo;
00114
00116 bool lgTrimhiOn;
00117
00118
00119
00120
00132 double ****PhotoRate_Shell;
00133
00137 bool lgPhotoIoniz_On;
00138
00141 bool lgHO_ct_chem;
00142
00145 double ***CollIonRate_Ground;
00146
00148 double CosRayIonRate;
00149
00152 double CosRayHeatNeutralParticles;
00153
00156 double CosRayHeatThermalElectrons;
00157
00159 double ExtraHeatRate;
00160
00163 double xNeutronHeatRate;
00164
00166 double PairProducPhotoRate[3];
00167
00168
00169
00170
00174 bool lgCompRecoil;
00175
00177 double CompRecoilHeatLocal;
00178
00180 long int **ipCompRecoil;
00181
00183 double **CompRecoilIonRate;
00184
00186 double **CompRecoilIonRateSave;
00187
00189 double **CompRecoilHeatRate;
00190
00192 double **CompRecoilHeatRateSave;
00193
00195 double **UTA_ionize_rate;
00197 double **UTA_heat_rate;
00198
00200 bool lgInnerShellLine_on;
00202 bool lgInnerShell_Kisielius;
00205 bool lgInnerShell_Gu06;
00206
00209 double ***RateIoniz;
00210
00213 long int nCompRecoilElec[LIMELM];
00214
00215 double CompHeating_Max;
00216
00217
00218
00219
00220
00221
00223 double **RateRecomTot;
00224
00226 double **RR_Badnell_rate_coef ,
00227 **DR_Badnell_rate_coef,
00228 *DR_Badnell_rate_coef_mean_ion;
00229
00231 int **lgDR_Badnell_rate_coef_exist ,
00232 **lgRR_Badnell_rate_coef_exist;
00233
00235 bool lgDR_recom_Badnell_use,
00236 lgRR_recom_Badnell_use,
00238 lgRecom_Badnell_print;
00239
00241 double **DR_old_rate_coef;
00242
00244 double **RR_rate_coef_used,
00245 **DR_rate_coef_used;
00246
00248 double **RR_Verner_rate_coef;
00249
00254 int nDR_S_guess;
00255 realnum DR_S_scale[5];
00256
00258 realnum **GrainCreat,
00259 **GrainDestr;
00260
00261 int
00263 lgGrainIonRecom;
00264
00267 realnum DielSupprs[2][LIMELM];
00268
00270 realnum lg_guess_coef;
00272 realnum guess_noise;
00273
00276 bool lgSupDie[2];
00277
00280 bool lgNoCota;
00281
00283 realnum CotaRate[LIMELM];
00284
00286 long int ilt,
00287 iltln,
00288 ilthn,
00289 ihthn,
00290 ifail;
00291
00292
00293 double RateIonizTot( long nelem, long ion )
00294 {
00295 double sum = 0.;
00296
00297 for( long ion_to=ion+1; ion_to<=dense.IonHigh[nelem]; ion_to++ )
00298 sum += RateIoniz[nelem][ion][ion_to];
00299
00300 return sum;
00301 }
00302 };
00303
00304 #if 0
00305 double t_ionbal::RateIonizTot(long nelem, long ion)
00306 {
00307 double sum = 0.;
00308
00309 for( long ion_to=ion+1; ion_to<=dense.IonHigh[nelem]; ion_to++ )
00310 sum += t_ionbal::RateIoniz[nelem][ion][ion_to];
00311
00312 return sum;
00313 }
00314 #endif
00315
00316 EXTERN t_ionbal ionbal;
00317
00318 #endif