00001
00002
00003
00004
00005
00006 #include "cddefines.h"
00007 #include "taulines.h"
00008 #include "iso.h"
00009 #include "dense.h"
00010 #include "secondaries.h"
00011 #include "trace.h"
00012 #include "phycon.h"
00013 #include "ionbal.h"
00014 #include "hydrogenic.h"
00015
00016
00017 STATIC void PrtHydroTrace1a(long nelem )
00018 {
00019 double colfrc,
00020 phtfrc,
00021 secfrc;
00022
00023 DEBUG_ENTRY( "PrtHydroTrace1a()" );
00024
00025
00026 if( iso.xIonSimple[ipH_LIKE][nelem] > 0. )
00027 {
00028
00029 phtfrc = iso.gamnc[ipH_LIKE][nelem][ipH1s]/((dense.eden*(iso.RadRec_effec[ipH_LIKE][nelem] +
00030 ionbal.CotaRate[nelem]) )*
00031 iso.xIonSimple[ipH_LIKE][nelem]);
00032
00033
00034 colfrc = (iso.ColIoniz[ipH_LIKE][nelem][ipH1s]*dense.EdenHCorr )/
00035 ((dense.eden*(iso.RadRec_effec[ipH_LIKE][nelem] +
00036 ionbal.CotaRate[0]) )*
00037 iso.xIonSimple[ipH_LIKE][nelem]);
00038
00039
00040 secfrc = secondaries.csupra[nelem][nelem]/((dense.eden*(iso.RadRec_effec[ipH_LIKE][nelem] +
00041 ionbal.CotaRate[0]) )*
00042 iso.xIonSimple[ipH_LIKE][nelem]);
00043 }
00044 else
00045 {
00046 phtfrc = 0.;
00047 colfrc = 0.;
00048 secfrc = 0.;
00049 }
00050
00051 fprintf( ioQQQ, " HydroLevel Z=%2ld called, simple II/I=",nelem);
00052 PrintE93( ioQQQ, iso.xIonSimple[ipH_LIKE][nelem]);
00053 fprintf( ioQQQ," PhotFrc:");
00054 PrintE93( ioQQQ,phtfrc);
00055 fprintf(ioQQQ," ColFrc:");
00056 PrintE93( ioQQQ,colfrc);
00057 fprintf( ioQQQ," SecFrc");
00058 PrintE93( ioQQQ, secfrc);
00059 fprintf( ioQQQ," Te:");
00060 PrintE93( ioQQQ,phycon.te);
00061 fprintf( ioQQQ," eden:");
00062 PrintE93( ioQQQ,dense.eden);
00063 fprintf( ioQQQ,"\n");
00064 return;
00065 }
00066
00067
00068 STATIC void PrtHydroTrace1(long nelem )
00069 {
00070 long int ipHi , ipLo , i;
00071
00072 DEBUG_ENTRY( "PrtHydroTrace1()" );
00073
00074 fprintf( ioQQQ,
00075 " HydroLevel%3ld finds arrays, with optical depths defined? %li induced 2ph=%12.3e\n",
00076 nelem, iteration, Transitions[ipH_LIKE][nelem][ipH2s][ipH1s].Emis->pump );
00077
00078 for( ipHi=ipH2s; ipHi < iso.numLevels_local[ipH_LIKE][nelem]; ipHi++ )
00079 {
00080 fprintf( ioQQQ, "up:%2ld", ipHi );
00081 fprintf( ioQQQ, "lo" );
00082 for( ipLo=ipH1s; ipLo < ipHi; ipLo++ )
00083 {
00084 fprintf( ioQQQ, "%9ld", ipLo );
00085 }
00086 fprintf( ioQQQ, "\n" );
00087
00088 fprintf( ioQQQ, "%3ld", ipHi );
00089 fprintf( ioQQQ, " A*esc" );
00090 for( ipLo=ipH1s; ipLo < ipHi; ipLo++ )
00091 {
00092 fprintf( ioQQQ,PrintEfmt("%9.2e", Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->Aul*
00093 Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->Pesc ));
00094 }
00095 fprintf( ioQQQ, "\n" );
00096
00097 fprintf( ioQQQ, "%3ld", ipHi );
00098 fprintf( ioQQQ, " A*ees" );
00099 for( ipLo=ipH1s; ipLo < ipHi; ipLo++ )
00100 {
00101 fprintf( ioQQQ,PrintEfmt("%9.2e", Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->Aul*
00102 Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->Pelec_esc ));
00103 }
00104 fprintf( ioQQQ, "\n" );
00105
00106 fprintf( ioQQQ, "%3ld", ipHi );
00107 fprintf( ioQQQ, " tauin" );
00108 for( ipLo=ipH1s; ipLo < ipHi; ipLo++ )
00109 {
00110 fprintf( ioQQQ,PrintEfmt("%9.2e", Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->TauIn ));
00111 }
00112 fprintf( ioQQQ, "\n" );
00113
00114 fprintf( ioQQQ, "%3ld", ipHi );
00115 fprintf( ioQQQ, " t tot" );
00116 for( ipLo=ipH1s; ipLo < ipHi; ipLo++ )
00117 {
00118 fprintf( ioQQQ,PrintEfmt("%9.2e", Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->TauTot ));
00119 }
00120 fprintf( ioQQQ, "\n" );
00121
00122 fprintf( ioQQQ, "%3ld", ipHi );
00123 fprintf( ioQQQ, " Esc " );
00124 for( ipLo=ipH1s; ipLo < ipHi; ipLo++ )
00125 {
00126 fprintf( ioQQQ,PrintEfmt("%9.2e", Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->Pesc ));
00127 }
00128 fprintf( ioQQQ, "\n" );
00129
00130 fprintf( ioQQQ, "%3ld", ipHi );
00131 fprintf( ioQQQ, " Eesc " );
00132 for( ipLo=ipH1s; ipLo < ipHi; ipLo++ )
00133 {
00134 fprintf( ioQQQ,PrintEfmt("%9.2e", Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->Pelec_esc ));
00135 }
00136 fprintf( ioQQQ, "\n" );
00137
00138 fprintf( ioQQQ, "%3ld", ipHi );
00139 fprintf( ioQQQ, " Dest " );
00140 for( ipLo=ipH1s; ipLo < ipHi; ipLo++ )
00141 {
00142 fprintf( ioQQQ,PrintEfmt("%9.2e", Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->Pdest) );
00143 }
00144 fprintf( ioQQQ, "\n" );
00145
00146 fprintf( ioQQQ, "%3ld", ipHi );
00147 fprintf( ioQQQ, " A*dst" );
00148 for( ipLo=ipH1s; ipLo < ipHi; ipLo++ )
00149 {
00150 fprintf( ioQQQ,PrintEfmt("%9.2e", Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->Aul*
00151 Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->Pdest ));
00152 }
00153 fprintf( ioQQQ, "\n" );
00154
00155 fprintf( ioQQQ, "%3ld", ipHi );
00156 fprintf( ioQQQ, " StrkE" );
00157 for( ipLo=ipH1s; ipLo < ipHi; ipLo++ )
00158 {
00159 fprintf( ioQQQ,PrintEfmt("%9.2e", iso.pestrk[ipH_LIKE][nelem][ipLo][ipHi] ));
00160 }
00161 fprintf( ioQQQ, "\n" );
00162
00163 fprintf( ioQQQ, "%3ld", ipHi );
00164 fprintf( ioQQQ, " B(ul)" );
00165 for( ipLo=ipH1s; ipLo < ipHi; ipLo++ )
00166 {
00167 fprintf( ioQQQ,PrintEfmt("%9.2e", Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->pump*
00168 StatesElemNEW[nelem][nelem-ipH_LIKE][ipLo].g/StatesElemNEW[nelem][nelem-ipH_LIKE][ipHi].g ));
00169 }
00170 fprintf( ioQQQ, "\n" );
00171
00172 fprintf( ioQQQ, "%3ld", ipHi );
00173 fprintf( ioQQQ, " tcont" );
00174 for( ipLo=ipH1s; ipLo < ipHi; ipLo++ )
00175 {
00176 fprintf( ioQQQ,PrintEfmt("%9.2e", Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->TauCon ));
00177 }
00178 fprintf( ioQQQ, "\n" );
00179
00180 fprintf( ioQQQ, "%3ld", ipHi );
00181 fprintf( ioQQQ, " C(ul)" );
00182 for( ipLo=ipH1s; ipLo < ipHi; ipLo++ )
00183 {
00184 fprintf( ioQQQ,PrintEfmt("%9.2e",
00185 Transitions[ipH_LIKE][nelem][ipHi][ipLo].Coll.ColUL*dense.eden ));
00186 }
00187 fprintf( ioQQQ, "\n" );
00188
00189 if( ipHi == 2 )
00190 {
00191 fprintf( ioQQQ, " FeIIo");
00192 fprintf( ioQQQ,PrintEfmt("%9.2e",
00193 hydro.dstfe2lya* Transitions[ipH_LIKE][ipHYDROGEN][ipH2p][ipH1s].Emis->Aul ));
00194 fprintf( ioQQQ, "\n");
00195 }
00196 }
00197
00198 fprintf( ioQQQ, " " );
00199
00200 for( i=1; i < iso.numLevels_local[ipH_LIKE][nelem]; i++ )
00201 {
00202 fprintf( ioQQQ, "%9ld", i );
00203 }
00204 fprintf( ioQQQ, "\n" );
00205 return;
00206 }
00207
00208
00209
00210 void HydroLevel(long int nelem)
00211 {
00212 long int i;
00213 int ipISO = ipH_LIKE;
00214
00215 DEBUG_ENTRY( "HydroLevel()" );
00216
00217
00218 ASSERT( nelem >= 0);
00219 ASSERT( nelem < LIMELM );
00220
00221
00222 if( (trace.lgTrace && trace.lgIsoTraceFull[ipISO]) && (nelem == trace.ipIsoTrace[ipISO]) )
00223 PrtHydroTrace1(nelem);
00224
00225 if( trace.lgHBug && trace.lgTrace )
00226 PrtHydroTrace1a(nelem);
00227
00228
00229 if( (trace.lgIsoTraceFull[ipISO] && trace.lgTrace) && (nelem == trace.ipIsoTrace[ipISO]) )
00230 {
00231 fprintf( ioQQQ, " HLEV HGAMNC" );
00232 PrintE93( ioQQQ, iso.gamnc[ipISO][nelem][ipH1s] );
00233
00234 for( i=ipH2s; i < iso.numLevels_local[ipISO][nelem]; i++ )
00235 {
00236 fprintf(ioQQQ,PrintEfmt("%9.2e", iso.gamnc[ipISO][nelem][i] ));
00237 }
00238 fprintf( ioQQQ, "\n" );
00239
00240 fprintf( ioQQQ, " HLEV TOTCAP" );
00241
00242 for( i=1; i < iso.numLevels_local[ipISO][nelem]; i++ )
00243 {
00244 fprintf(ioQQQ,PrintEfmt("%9.2e", iso.RateCont2Level[ipISO][nelem][i]/dense.eden ));
00245 }
00246 fprintf( ioQQQ," tot");
00247 fprintf( ioQQQ,PrintEfmt("%10.2e", ionbal.RateRecomTot[nelem][nelem-ipISO]/dense.eden ) );
00248 fprintf( ioQQQ, "\n" );
00249
00250 fprintf( ioQQQ, " HLEV IND Rc" );
00251
00252 for( i=ipH1s; i < iso.numLevels_local[ipISO][nelem]; i++ )
00253 {
00254 fprintf(ioQQQ,PrintEfmt("%9.2e", iso.RecomInducRate[ipISO][nelem][i]*iso.PopLTE[ipISO][nelem][i] ));
00255 }
00256 fprintf( ioQQQ, "\n" );
00257
00258
00259 fprintf( ioQQQ, " IND Rc LTE " );
00260
00261 for( i=ipH1s; i < iso.numLevels_local[ipISO][nelem]; i++ )
00262 {
00263 fprintf(ioQQQ,PrintEfmt("%9.2e",
00264 iso.gamnc[ipISO][nelem][i]*iso.PopLTE[ipISO][nelem][i] ));
00265 }
00266 fprintf( ioQQQ, "\n" );
00267
00268
00269 fprintf( ioQQQ, " HLEV HLTE" );
00270
00271 for( i=ipH1s; i < iso.numLevels_local[ipISO][nelem]; i++ )
00272 {
00273 fprintf(ioQQQ,PrintEfmt("%9.2e", iso.PopLTE[ipISO][nelem][i] ));
00274 }
00275 fprintf( ioQQQ, "\n" );
00276
00277
00278 fprintf( ioQQQ, " HLEVfr cion" );
00279
00280 for( i=ipH1s; i < iso.numLevels_local[ipISO][nelem]; i++ )
00281 {
00282 fprintf(ioQQQ,PrintEfmt("%9.2e",
00283 iso.ColIoniz[ipISO][nelem][i]*
00284 StatesElemNEW[nelem][nelem-ipISO][i].Pop*dense.EdenHCorr/MAX2(1e-30,iso.RateLevel2Cont[ipISO][nelem][i]) ) );
00285 }
00286 fprintf( ioQQQ, "\n" );
00287
00288
00289 if( ionbal.RateRecomTot[nelem][nelem]> 0. )
00290 {
00291 fprintf( ioQQQ, " HLEVfrPhIon" );
00292
00293 for( i=ipH1s; i < iso.numLevels_local[ipISO][nelem]; i++ )
00294 {
00295 fprintf(ioQQQ,PrintEfmt("%9.2e",
00296 iso.gamnc[ipISO][nelem][i]*StatesElemNEW[nelem][nelem-ipISO][i].Pop/MAX2(1e-30,iso.RateLevel2Cont[ipISO][nelem][i]) ) );
00297 }
00298 fprintf( ioQQQ, "\n" );
00299 }
00300
00301 fprintf( ioQQQ, " HLEV HN" );
00302
00303 for( i=ipH1s; i < iso.numLevels_local[ipISO][nelem]; i++ )
00304 {
00305 fprintf(ioQQQ,PrintEfmt("%9.2e", StatesElemNEW[nelem][nelem-ipISO][i].Pop ));
00306 }
00307 fprintf( ioQQQ, "\n" );
00308
00309 fprintf( ioQQQ, " HLEV b(n)" );
00310
00311 for( i=ipH1s; i < iso.numLevels_local[ipISO][nelem]; i++ )
00312 {
00313 fprintf(ioQQQ,PrintEfmt("%9.2e", iso.DepartCoef[ipISO][nelem][i] ));
00314 }
00315 fprintf( ioQQQ, "\n" );
00316
00317 fprintf( ioQQQ, " HLEV X12tot");
00318 fprintf(ioQQQ,PrintEfmt("%9.2e", secondaries.x12tot ));
00319 fprintf( ioQQQ," Grn dest:");
00320 fprintf(ioQQQ,PrintEfmt("%9.2e",
00321 ionbal.RateIoniz[nelem][nelem][nelem+1] ));
00322 fprintf(ioQQQ, "\n");
00323 }
00324
00325
00326
00327
00328
00329
00330 fixit();
00331 if( nelem == ipHYDROGEN )
00332 HydroRenorm();
00333
00334 if( trace.lgTrace )
00335 {
00336
00337
00338
00339 fprintf( ioQQQ, " HydroLevel Z:%2ld return %s te=",
00340 nelem,
00341 iso.chTypeAtomUsed[ipISO][nelem] );
00342 PrintE93( ioQQQ,phycon.te);
00343 fprintf( ioQQQ," density=%.4e", dense.xIonDense[nelem][nelem-ipISO] );
00344
00345 fprintf( ioQQQ," simple=%.4e",iso.xIonSimple[ipISO][nelem]);
00346
00347 fprintf( ioQQQ," b1=%.2e",iso.DepartCoef[ipISO][nelem][ipH1s]);
00348
00349 fprintf( ioQQQ," ion rate=%.4e",ionbal.RateIonizTot(nelem,nelem-ipISO) );
00350
00351 fprintf( ioQQQ," TotRec=%.4e",ionbal.RateRecomTot[nelem][nelem-ipISO]);
00352
00353 fprintf( ioQQQ," RadRec=%.4e",iso.RadRec_effec[ipISO][nelem]);
00354 fprintf( ioQQQ, "\n");
00355 }
00356 return;
00357 }