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_sp[ipH_LIKE][nelem].xIonSimple > 0. )
00027         {
00028                 
00029                 phtfrc = iso_sp[ipH_LIKE][nelem].fb[ipH1s].gamnc/((dense.eden*(iso_sp[ipH_LIKE][nelem].RadRec_effec + 
00030                         ionbal.CotaRate[nelem]) )*
00031                         iso_sp[ipH_LIKE][nelem].xIonSimple);
00032 
00033                 
00034                 colfrc = (iso_sp[ipH_LIKE][nelem].fb[ipH1s].ColIoniz*dense.EdenHCorr )/
00035                         ((dense.eden*(iso_sp[ipH_LIKE][nelem].RadRec_effec + 
00036                         ionbal.CotaRate[0]) )*
00037                         iso_sp[ipH_LIKE][nelem].xIonSimple);
00038 
00039                 
00040                 secfrc = secondaries.csupra[nelem][nelem]/((dense.eden*(iso_sp[ipH_LIKE][nelem].RadRec_effec + 
00041                         ionbal.CotaRate[0]) )*
00042                         iso_sp[ipH_LIKE][nelem].xIonSimple);
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_sp[ipH_LIKE][nelem].xIonSimple);
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, iso_sp[ipH_LIKE][nelem].TwoNu[0].induc_up );
00077         
00078         for( ipHi=ipH2s; ipHi < iso_sp[ipH_LIKE][nelem].numLevels_local; 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",  iso_sp[ipH_LIKE][nelem].trans(ipHi,ipLo).Emis().Aul()*
00093                                 iso_sp[ipH_LIKE][nelem].trans(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",  iso_sp[ipH_LIKE][nelem].trans(ipHi,ipLo).Emis().Aul()*
00102                                 iso_sp[ipH_LIKE][nelem].trans(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",  iso_sp[ipH_LIKE][nelem].trans(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", iso_sp[ipH_LIKE][nelem].trans(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", iso_sp[ipH_LIKE][nelem].trans(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", iso_sp[ipH_LIKE][nelem].trans(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",  iso_sp[ipH_LIKE][nelem].trans(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",  iso_sp[ipH_LIKE][nelem].trans(ipHi,ipLo).Emis().Aul()*
00151                                 iso_sp[ipH_LIKE][nelem].trans(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_sp[ipH_LIKE][nelem].ex[ipHi][ipLo].pestrk_up ));
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", iso_sp[ipH_LIKE][nelem].trans(ipHi,ipLo).Emis().pump()*
00168                                 iso_sp[ipH_LIKE][nelem].st[ipLo].g()/iso_sp[ipH_LIKE][nelem].st[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",  iso_sp[ipH_LIKE][nelem].trans(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", iso_sp[ipH_LIKE][nelem].trans(ipHi,ipLo).Coll().ColUL( colliders ) ));
00185                 }
00186                 fprintf( ioQQQ, "\n" );
00187 
00188                 if( ipHi == 2 )
00189                 {
00190                         fprintf( ioQQQ, "    FeIIo");
00191                         fprintf( ioQQQ,PrintEfmt("%9.2e", 
00192                                 hydro.dstfe2lya* iso_sp[ipH_LIKE][ipHYDROGEN].trans(ipH2p,ipH1s).Emis().Aul() ));
00193                         fprintf( ioQQQ, "\n");
00194                 }
00195         }
00196 
00197         fprintf( ioQQQ, "         " );
00198         
00199         for( i=1; i < iso_sp[ipH_LIKE][nelem].numLevels_local; i++ )
00200         {
00201                 fprintf( ioQQQ, "%9ld", i );
00202         }
00203         fprintf( ioQQQ, "\n" );
00204         return;
00205 }
00206 
00207 
00208 
00209 void HydroLevel(long int nelem)
00210 {
00211         long int i; 
00212         int ipISO = ipH_LIKE;
00213 
00214         DEBUG_ENTRY( "HydroLevel()" );
00215 
00216         
00217         ASSERT( nelem >= 0);
00218         ASSERT( nelem < LIMELM );
00219 
00220         
00221         if( (trace.lgTrace && trace.lgIsoTraceFull[ipISO]) && (nelem == trace.ipIsoTrace[ipISO]) )
00222                 PrtHydroTrace1(nelem);
00223 
00224         if( trace.lgHBug && trace.lgTrace )
00225                 PrtHydroTrace1a(nelem);
00226 
00227         
00228         if( (trace.lgIsoTraceFull[ipISO] && trace.lgTrace) && (nelem == trace.ipIsoTrace[ipISO]) )
00229         {
00230                 fprintf( ioQQQ, "       HLEV HGAMNC" );
00231                 PrintE93( ioQQQ, iso_sp[ipISO][nelem].fb[ipH1s].gamnc );
00232                 
00233                 for( i=ipH2s; i < iso_sp[ipISO][nelem].numLevels_local; i++ )
00234                 {
00235                         fprintf(ioQQQ,PrintEfmt("%9.2e", iso_sp[ipISO][nelem].fb[i].gamnc ));
00236                 }
00237                 fprintf( ioQQQ, "\n" );
00238 
00239                 fprintf( ioQQQ, "       HLEV TOTCAP" );
00240                 
00241                 for( i=1; i < iso_sp[ipISO][nelem].numLevels_local; i++ )
00242                 {
00243                         fprintf(ioQQQ,PrintEfmt("%9.2e", iso_sp[ipISO][nelem].fb[i].RateCont2Level/dense.eden ));
00244                 }
00245                 fprintf( ioQQQ," tot");
00246                 fprintf( ioQQQ,PrintEfmt("%10.2e", ionbal.RateRecomTot[nelem][nelem-ipISO]/dense.eden ) );
00247                 fprintf( ioQQQ, "\n" );
00248 
00249                 fprintf( ioQQQ, "       HLEV IND Rc" );
00250                 
00251                 for( i=ipH1s; i < iso_sp[ipISO][nelem].numLevels_local; i++ )
00252                 {
00253                         fprintf(ioQQQ,PrintEfmt("%9.2e", iso_sp[ipISO][nelem].fb[i].RecomInducRate*iso_sp[ipISO][nelem].fb[i].PopLTE ));
00254                 }
00255                 fprintf( ioQQQ, "\n" );
00256 
00257                 
00258                 fprintf( ioQQQ, "       IND Rc LTE " );
00259                 
00260                 for( i=ipH1s; i < iso_sp[ipISO][nelem].numLevels_local; i++ )
00261                 {
00262                         fprintf(ioQQQ,PrintEfmt("%9.2e",
00263                                 iso_sp[ipISO][nelem].fb[i].gamnc*iso_sp[ipISO][nelem].fb[i].PopLTE ));
00264                 }
00265                 fprintf( ioQQQ, "\n" );
00266 
00267                 
00268                 fprintf( ioQQQ, "       HLEV   HLTE" );
00269                 
00270                 for( i=ipH1s; i < iso_sp[ipISO][nelem].numLevels_local; i++ )
00271                 {
00272                         fprintf(ioQQQ,PrintEfmt("%9.2e", iso_sp[ipISO][nelem].fb[i].PopLTE ));
00273                 }
00274                 fprintf( ioQQQ, "\n" );
00275 
00276                 
00277                 fprintf( ioQQQ, "       HLEVfr cion" );
00278                 
00279                 for( i=ipH1s; i < iso_sp[ipISO][nelem].numLevels_local; i++ )
00280                 {
00281                         fprintf(ioQQQ,PrintEfmt("%9.2e", 
00282                                 iso_sp[ipISO][nelem].fb[i].ColIoniz*dense.EdenHCorr/MAX2(1e-30,iso_sp[ipISO][nelem].fb[i].RateLevel2Cont) ) );
00283                 }
00284                 fprintf( ioQQQ, "\n" );
00285 
00286                 
00287                 if( ionbal.RateRecomTot[nelem][nelem]> 0. )
00288                 {
00289                         fprintf( ioQQQ, "       HLEVfrPhIon" );
00290                         
00291                         for( i=ipH1s; i < iso_sp[ipISO][nelem].numLevels_local; i++ )
00292                         {
00293                                 fprintf(ioQQQ,PrintEfmt("%9.2e", 
00294                                         iso_sp[ipISO][nelem].fb[i].gamnc/MAX2(1e-30,iso_sp[ipISO][nelem].fb[i].RateLevel2Cont) ) );
00295                         }
00296                         fprintf( ioQQQ, "\n" );
00297                 }
00298 
00299                 fprintf( ioQQQ, "       HLEV     HN" );
00300                 
00301                 for( i=ipH1s; i < iso_sp[ipISO][nelem].numLevels_local; i++ )
00302                 {
00303                         fprintf(ioQQQ,PrintEfmt("%9.2e", iso_sp[ipISO][nelem].st[i].Pop() ));
00304                 }
00305                 fprintf( ioQQQ, "\n" );
00306 
00307                 fprintf( ioQQQ, "       HLEV   b(n)" );
00308                 
00309                 for( i=ipH1s; i < iso_sp[ipISO][nelem].numLevels_local; i++ )
00310                 {
00311                         fprintf(ioQQQ,PrintEfmt("%9.2e", iso_sp[ipISO][nelem].fb[i].DepartCoef ));
00312                 }
00313                 fprintf( ioQQQ, "\n" );
00314 
00315                 fprintf( ioQQQ, "       HLEV   X12tot");
00316                 fprintf(ioQQQ,PrintEfmt("%9.2e", secondaries.x12tot ));
00317                 fprintf( ioQQQ," Grn dest:");
00318                 fprintf(ioQQQ,PrintEfmt("%9.2e",
00319                   ionbal.RateIoniz[nelem][nelem][nelem+1] ));
00320                 fprintf(ioQQQ, "\n"); 
00321         }
00322 
00323         if( trace.lgTrace )
00324         {
00325                 
00326 
00327 
00328                 fprintf( ioQQQ, "       HydroLevel Z:%2ld return %s te=",
00329                         nelem,
00330                         iso_sp[ipISO][nelem].chTypeAtomUsed );
00331                 PrintE93( ioQQQ,phycon.te);
00332                 fprintf( ioQQQ," density=%.4e", dense.xIonDense[nelem][nelem-ipISO] );
00333 
00334                 fprintf( ioQQQ," simple=%.4e",iso_sp[ipISO][nelem].xIonSimple);
00335 
00336                 fprintf( ioQQQ," b1=%.2e",iso_sp[ipISO][nelem].fb[ipH1s].DepartCoef);
00337 
00338                 fprintf( ioQQQ," ion rate=%.4e",ionbal.RateIonizTot(nelem,nelem-ipISO) );
00339 
00340                 fprintf( ioQQQ," TotRec=%.4e",ionbal.RateRecomTot[nelem][nelem-ipISO]);
00341 
00342                 fprintf( ioQQQ," RadRec=%.4e",iso_sp[ipISO][nelem].RadRec_effec);
00343                 fprintf( ioQQQ, "\n");
00344         }
00345         return;
00346 }