00001
00002
00003
00004 #ifndef IONBAL_H_
00005 #define IONBAL_H_
00006
00007 #include "dense.h"
00008
00009 bool lgOH_ChargeTransferDominant( void );
00010
00013 void ion_recom_calculate( void );
00014
00018 void ion_trim(
00019 long int nelem );
00020
00022 void ion_zero(long int nelem);
00023
00027 void ion_collis(
00028 long nelem);
00029
00034 void ion_solver(long int nelem, bool lgPrintIt);
00035
00036 #if 0
00037
00042 void ion_solver(long int nelem1, long int nelem2, bool lgPrintIt);
00043 #endif
00044
00049 void ion_photo(
00050 long int nelem ,
00051 bool lgPrintIt );
00052
00054 void ion_CX(long nelem );
00055
00057 void ion_recomb(bool,long);
00058
00060 void ion_recombAGN( FILE * io );
00061
00063 void ion_wrapper( long nelem );
00064
00068 void Badnell_rec_init( void );
00069
00070
00071 void IonNelem(bool lgPrintIt, long int nelem);
00072 void IonHelium( void );
00073
00075 #define NSHELLS 7
00076
00078 class t_ionbal
00079 {
00080 public:
00088 double trimhi,
00089
00092 trimlo;
00093
00095 bool lgTrimhiOn;
00096
00097
00098
00099
00111 double ****PhotoRate_Shell;
00112
00116 bool lgPhotoIoniz_On;
00117
00120 double ***CollIonRate_Ground;
00121
00123 double CosRayIonRate;
00124
00127 double CosRayHeatNeutralParticles;
00128
00131 double CosRayHeatThermalElectrons;
00132
00134 double ExtraHeatRate;
00135
00138 double xNeutronHeatRate;
00139
00141 double PairProducPhotoRate[3];
00142
00143
00144
00145
00149 bool lgCompRecoil;
00150
00152 double CompRecoilHeatLocal;
00153
00155 long int **ipCompRecoil;
00156
00158 double **CompRecoilIonRate;
00159
00161 double **CompRecoilIonRateSave;
00162
00164 double **CompRecoilHeatRate;
00165
00167 double **CompRecoilHeatRateSave;
00168
00170 double **UTA_ionize_rate;
00172 double **UTA_heat_rate;
00173
00175 bool lgInnerShellLine_on;
00177 bool lgInnerShell_Kisielius;
00180 bool lgInnerShell_Gu06;
00181
00184 double ***RateIoniz;
00185
00188 long int nCompRecoilElec[LIMELM];
00189
00190 double CompHeating_Max;
00191
00192
00193
00194
00195
00196
00198 double **RateRecomTot;
00199
00201 double **RateRecomIso;
00202
00204 double **RR_Badnell_rate_coef,
00205 **DR_Badnell_rate_coef,
00206 **CX_recomb_rate_used;
00207
00209 bool lgRecom_Badnell_print;
00210
00212 double **RR_rate_coef_used;
00213
00215 double **RR_Verner_rate_coef;
00216
00220 double DR_mean_scale[LIMELM];
00221
00223 realnum **GrainCreat,
00224 **GrainDestr;
00225
00226 int
00228 lgGrainIonRecom;
00229
00231 realnum guess_noise;
00232
00235 bool lgSupDie[2];
00236
00239 bool lgNoCota;
00240
00242 realnum CotaRate[LIMELM];
00243
00245 long int ilt,
00246 iltln,
00247 ilthn,
00248 ihthn,
00249 ifail;
00250
00251 double elecsrc[LIMELM], elecsnk[LIMELM];
00252
00253
00254 double RateIonizTot( long nelem, long ion )
00255 {
00256 double sum = 0.;
00257
00258 for( long ion_to=ion+1; ion_to<=dense.IonHigh[nelem]; ion_to++ )
00259 sum += RateIoniz[nelem][ion][ion_to];
00260
00261 return sum;
00262 }
00263 };
00264
00265 #if 0
00266 double t_ionbal::RateIonizTot(long nelem, long ion)
00267 {
00268 double sum = 0.;
00269
00270 for( long ion_to=ion+1; ion_to<=dense.IonHigh[nelem]; ion_to++ )
00271 sum += t_ionbal::RateIoniz[nelem][ion][ion_to];
00272
00273 return sum;
00274 }
00275 #endif
00276
00277 extern t_ionbal ionbal;
00278
00279 #endif