00001
00002
00003
00004
00005
00006 #include "cddefines.h"
00007 #include "taulines.h"
00008 #include "iso.h"
00009 #include "secondaries.h"
00010 #include "ionbal.h"
00011 #include "dense.h"
00012 #include "trace.h"
00013 #include "phycon.h"
00014 #include "hydrogenic.h"
00015
00016
00017 void HydroT2Low( long int nelem )
00018 {
00019 long int iup,
00020 level,
00021 low;
00022 double entries,
00023 exits,
00024 sum,
00025 renorm,
00026 collider;
00027
00028 DEBUG_ENTRY( "HydroT2Low()" );
00029
00030
00031 ASSERT( nelem >= 0);
00032 ASSERT( nelem < LIMELM );
00033
00034
00035
00036 if( nelem==ipHYDROGEN )
00037 {
00038
00039 collider = dense.EdenHontoHCorr;
00040 }
00041 else
00042 {
00043 collider = dense.EdenHCorr;
00044 }
00045
00046
00047
00048 for( level=iso.numLevels_local[ipH_LIKE][nelem]-1; level >= ipH1s; level-- )
00049 {
00050
00051
00052 entries = iso.RateCont2Level[ipH_LIKE][nelem][level];
00053
00054
00055
00056 for( iup=level + 1; iup < iso.numLevels_local[ipH_LIKE][nelem]; iup++ )
00057 {
00058
00059 double RadDecay =
00060 EmisLines[ipH_LIKE][nelem][iup][level].Aul*
00061 (EmisLines[ipH_LIKE][nelem][iup][level].Pesc +
00062 EmisLines[ipH_LIKE][nelem][iup][level].Pelec_esc +
00063 EmisLines[ipH_LIKE][nelem][iup][level].Pdest);
00064
00065
00066 entries += iso.Pop2Ion[ipH_LIKE][nelem][iup]*(RadDecay +
00067 EmisLines[ipH_LIKE][nelem][iup][level].ColUL*collider);
00068 }
00069
00070
00071
00072 exits = iso.gamnc[ipH_LIKE][nelem][level];
00073 for( low=ipH1s; low <= (level - 1); low++ )
00074 {
00075
00076 double RadDecay =
00077 EmisLines[ipH_LIKE][nelem][level][low].Aul*
00078 (EmisLines[ipH_LIKE][nelem][level][low].Pesc +
00079 EmisLines[ipH_LIKE][nelem][level][low].Pelec_esc +
00080 EmisLines[ipH_LIKE][nelem][level][low].Pdest);
00081
00082
00083 exits += RadDecay +
00084 EmisLines[ipH_LIKE][nelem][level][low].ColUL*collider;
00085 }
00086 if( exits > 1e-25 )
00087 {
00088 iso.Pop2Ion[ipH_LIKE][nelem][level] = entries/exits;
00089 }
00090 else
00091 {
00092 iso.Pop2Ion[ipH_LIKE][nelem][level] = 0.;
00093 }
00094
00095 if( iso.PopLTE[ipH_LIKE][nelem][level] > 1e-25 )
00096 {
00097 iso.DepartCoef[ipH_LIKE][nelem][level] =
00098 iso.Pop2Ion[ipH_LIKE][nelem][level]/(iso.PopLTE[ipH_LIKE][nelem][level]*
00099 dense.eden);
00100 }
00101 else
00102 {
00103 iso.DepartCoef[ipH_LIKE][nelem][level] = 0.;
00104 }
00105 }
00106
00107
00108
00109
00110
00111
00112
00113
00114 iso.Pop2Ion[ipH_LIKE][nelem][ipH1s] = ionbal.RateRecomTot[nelem][nelem]/iso.RateLevel2Cont[ipH_LIKE][nelem][ipH1s];
00115
00116 if( iso.PopLTE[ipH_LIKE][nelem][ipH1s] > 1e-25 )
00117 {
00118 iso.DepartCoef[ipH_LIKE][nelem][ipH1s] =
00119 iso.Pop2Ion[ipH_LIKE][nelem][ipH1s]/(iso.PopLTE[ipH_LIKE][nelem][ipH1s]*
00120 dense.eden);
00121 }
00122 else
00123 {
00124 iso.DepartCoef[ipH_LIKE][nelem][ipH1s] = 0.;
00125 }
00126
00127 iso.Pop2Ion[ipH_LIKE][nelem][ipH2s] =
00128 (iso.RadRec_caseB[ipH_LIKE][nelem]*0.33*dense.eden +
00129 iso.Pop2Ion[ipH_LIKE][nelem][ipH1s]*secondaries.Hx12[MIN2(nelem+1,2)-1][ipH2s] +
00130 iso.Pop2Ion[ipH_LIKE][nelem][ipH2p]*
00131 EmisLines[ipH_LIKE][nelem][ipH2p][ipH2s].ColUL*collider)/
00132 (EmisLines[ipH_LIKE][nelem][ipH2s][ipH1s].Aul +
00133 EmisLines[ipH_LIKE][nelem][ipH2s][ipH1s].ColUL*collider +
00134 EmisLines[ipH_LIKE][nelem][ipH2p][ipH2s].ColUL*collider*6. );
00135
00136 iso.Pop2Ion[ipH_LIKE][nelem][ipH2p] =
00137 (iso.RadRec_caseB[ipH_LIKE][nelem]*0.67*dense.eden +
00138 iso.Pop2Ion[ipH_LIKE][nelem][ipH1s]*secondaries.Hx12[MIN2(nelem+1,2)-1][ipH2p] +
00139 iso.Pop2Ion[ipH_LIKE][nelem][ipH2s]*
00140 EmisLines[ipH_LIKE][nelem][ipH2p][ipH2s].ColUL*collider*6.)/
00141 (EmisLines[ipH_LIKE][nelem][ipH2p][ipH1s].Aul*
00142 (EmisLines[ipH_LIKE][nelem][ipH2p][ipH1s].Pesc +
00143 EmisLines[ipH_LIKE][nelem][ipH2p][ipH1s].Pelec_esc +
00144 EmisLines[ipH_LIKE][nelem][ipH2p][ipH1s].Pdest) +
00145 EmisLines[ipH_LIKE][nelem][ipH2p][ipH1s].ColUL * collider +
00146 EmisLines[ipH_LIKE][nelem][ipH2p][ipH2s].ColUL * collider);
00147
00148
00149 sum = 0.;
00150
00151 for( level=0; level < iso.numLevels_local[ipH_LIKE][nelem]; level++ )
00152 {
00153 sum += iso.Pop2Ion[ipH_LIKE][nelem][level];
00154 }
00155
00156 renorm = 1. / SDIV( iso.xIonSimple[ipH_LIKE][nelem]) / SDIV( sum);
00157
00158
00159
00160
00161 for( level=0; level < iso.numLevels_local[ipH_LIKE][nelem]; level++ )
00162 {
00163
00164
00165 iso.Pop2Ion[ipH_LIKE][nelem][level] *= renorm;
00166 ASSERT( iso.Pop2Ion[ipH_LIKE][nelem][level]<BIGFLOAT );
00167 }
00168
00169 if( trace.lgHBug && trace.lgTrace )
00170 {
00171 fprintf( ioQQQ, " LOW TE,=%10.3e HN(1)=%10.3e rec=%10.3e Hgamnc(1s)=%10.3e\n",
00172 phycon.te, iso.Pop2Ion[ipH_LIKE][nelem][ipH1s], ionbal.RateRecomTot[nelem][nelem],
00173 iso.gamnc[ipH_LIKE][nelem][ipH1s] );
00174 }
00175
00176 if( trace.lgTrace )
00177 {
00178 fprintf( ioQQQ,
00179 " HydroT2Low return, LOW TE used, HII/HI=%.3e simple=%.3e IonRate=%.3e RecCo=%.3e\n",
00180 iso.pop_ion_ov_neut[ipH_LIKE][nelem],
00181 iso.xIonSimple[ipH_LIKE][nelem],
00182 iso.RateLevel2Cont[ipH_LIKE][nelem][ipH1s],
00183 ionbal.RateRecomTot[nelem][nelem] );
00184 }
00185
00186 DEBUG_EXIT( "HydroT2Low()" );
00187 return;
00188 }
00189
00190