00001 
00002 
00003 
00004 #include "cddefines.h"
00005 #include "physconst.h"
00006 #include "taulines.h"
00007 #include "hydrogenic.h"
00008 #include "elementnames.h"
00009 #include "phycon.h"
00010 #include "dense.h"
00011 #include "thermal.h"
00012 #include "cooling.h"
00013 #include "iso.h"
00014 
00015  
00016 #if defined(__HP_aCC)
00017 #       pragma OPT_LEVEL 1
00018 #endif
00019 
00020 
00021 const bool lgPrintIonizCooling = false;
00022 
00023 void iso_cool(
00024            
00025            long int ipISO , 
00026                 
00027                 long int nelem)
00028 {
00029         long int ipHi, 
00030           ipbig,
00031           ipLo, 
00032           n;
00033         double RecCoolExtra,
00034           biggest = 0.,
00035           dCdT_all, 
00036           edenHCorr_IonAbund, 
00037           edenIonAbund, 
00038           CollisIonizatCoolingTotal, 
00039           dCollisIonizatCoolingTotalDT, 
00040           HeatExcited,
00041           heat_max,
00042           CollisIonizatCooling, 
00043           CollisIonizatCoolingDT, 
00044           hlone,
00045           thin,
00046           ThinCoolingCaseB, 
00047           ThinCoolingSum,
00048           collider;
00049 
00050         valarray<double> CollisIonizatCoolingArr, 
00051           CollisIonizatCoolingDTArr,
00052           SavePhotoHeat,
00053           SaveInducCool,
00054           SaveRadRecCool;
00055 
00056         long int nlo_heat_max  , nhi_heat_max;
00057 
00058         
00059         char chLabel[NCOLNT_LAB_LEN+1];
00060 
00061         DEBUG_ENTRY( "iso_cool()" );
00062 
00063         
00064         ASSERT( nelem >= ipISO );
00065         ASSERT( ipISO <NISO );
00066         ASSERT( nelem < LIMELM );
00067         
00068 
00069         ASSERT( iso.numLevels_local[ipISO][nelem] <= iso.numLevels_max[ipISO][nelem] );
00070 
00071         
00072 
00073         if( dense.xIonDense[nelem][nelem+1-ipISO] <= 0. || 
00074                 
00075 
00076                 dense.xIonDense[nelem][nelem-ipISO]<=0. ||
00077                 !dense.lgElmtOn[nelem] )
00078         {
00079                 
00080                 iso.coll_ion[ipISO][nelem] = 0.;
00081                 iso.cLya_cool[ipISO][nelem] = 0.;
00082                 iso.cLyrest_cool[ipISO][nelem] = 0.;
00083                 iso.cBal_cool[ipISO][nelem] = 0.;
00084                 iso.cRest_cool[ipISO][nelem] = 0.;
00085                 iso.xLineTotCool[ipISO][nelem] = 0.;
00086                 iso.RadRecCool[ipISO][nelem] = 0.;
00087                 iso.FreeBnd_net_Cool_Rate[ipISO][nelem] = 0.;
00088                 iso.dLTot[ipISO][nelem] = 0.;
00089                 iso.RecomInducCool_Rate[ipISO][nelem] = 0.;
00090                 return;
00091         }
00092         
00093 
00094 
00095 
00096 
00097         if( nelem==ipHYDROGEN )
00098         {
00099                 
00100                 collider = dense.EdenHontoHCorr;
00101         }
00102         else
00103         {
00104                 collider = dense.EdenHCorr;
00105         }
00106 
00107         
00108 
00109         if( lgPrintIonizCooling )
00110         {
00111                 CollisIonizatCoolingArr.resize( iso.numLevels_local[ipISO][nelem] );
00112                 CollisIonizatCoolingDTArr.resize( iso.numLevels_local[ipISO][nelem] );
00113         }
00114         SavePhotoHeat.resize( iso.numLevels_local[ipISO][nelem] );
00115         SaveInducCool.resize( iso.numLevels_local[ipISO][nelem] );
00116         SaveRadRecCool.resize( iso.numLevels_local[ipISO][nelem] );
00117 
00118         
00119 
00120 
00121 
00122 
00123 
00124         
00125         CollisIonizatCoolingTotal = 0.;
00126         dCollisIonizatCoolingTotalDT = 0.;
00127 
00128         
00129 
00130 
00131 
00132 
00133 
00134 
00135 
00136         for( n=0; n < iso.numLevels_local[ipISO][nelem]-1; ++n )
00137         {
00138                 
00139                 CollisIonizatCooling = 
00140                   iso.xIsoLevNIonRyd[ipISO][nelem][n]*iso.ColIoniz[ipISO][nelem][n]*collider*
00141                   (StatesElem[ipISO][nelem][n].Pop -iso.PopLTE[ipISO][nelem][n]*dense.eden);
00142                 CollisIonizatCoolingTotal += CollisIonizatCooling;
00143 
00144                 
00145 
00146                 CollisIonizatCoolingDT = CollisIonizatCooling*
00147                         (iso.xIsoLevNIonRyd[ipISO][nelem][n]/TE1RYD/POW2(phycon.te_ryd));
00148 
00149                 dCollisIonizatCoolingTotalDT += CollisIonizatCoolingDT;
00150                 
00151                 if( lgPrintIonizCooling )
00152                 {
00153                         CollisIonizatCoolingArr[n] = CollisIonizatCooling;
00154                         CollisIonizatCoolingDTArr[n] = CollisIonizatCoolingDT;
00155                 }
00156         }
00157 
00158         
00159 
00160 
00161 
00162         iso.coll_ion[ipISO][nelem] = CollisIonizatCoolingTotal * EN1RYD*
00163                 dense.xIonDense[nelem][nelem+1-ipISO];
00164 
00165         
00166 
00167 
00168         double dcool = dCollisIonizatCoolingTotalDT * EN1RYD *
00169                 dense.xIonDense[nelem][nelem+1-ipISO];
00170         fixit();
00173         dcool = iso.coll_ion[ipISO][nelem] / phycon.te;
00174 
00175         
00176         sprintf(chLabel , "IScion%2s%2s" , elementnames.chElementSym[ipISO] , 
00177                 elementnames.chElementSym[nelem] );
00178         
00179         CoolAdd(chLabel,(realnum)nelem,MAX2(0.,iso.coll_ion[ipISO][nelem]));
00180 
00181         thermal.dCooldT += dcool;
00182 
00183         
00184 
00185 
00186 
00187         thermal.heating[0][3] += MAX2(0.,-iso.coll_ion[ipISO][nelem]);
00188 
00189         
00190         if( lgPrintIonizCooling && nelem==1 && ipISO==1 )
00191         {
00192                 fprintf(ioQQQ,"DEBUG coll ioniz cool contributors:");
00193                 for( n=0; n < iso.numLevels_local[ipISO][nelem]; n++ )
00194                 {
00195                         if( CollisIonizatCoolingArr[n] / SDIV( CollisIonizatCoolingTotal ) > 0.1 )
00196                                 fprintf(ioQQQ," %2li %.1e",
00197                                         n,
00198                                         CollisIonizatCoolingArr[n]/ SDIV( CollisIonizatCoolingTotal ) );
00199                 }
00200                 fprintf(ioQQQ,"\n");
00201                 fprintf(ioQQQ,"DEBUG coll ioniz derivcontributors:");
00202                 for( n=0; n < iso.numLevels_local[ipISO][nelem]; n++ )
00203                 {
00204                         if( CollisIonizatCoolingDTArr[n] / SDIV( dCollisIonizatCoolingTotalDT ) > 0.1 )
00205                                 fprintf(ioQQQ," %2li %.1e",
00206                                         n,
00207                                         CollisIonizatCoolingDTArr[n]/ SDIV( dCollisIonizatCoolingTotalDT ) );
00208                 }
00209                 fprintf(ioQQQ,"\n");
00210         }
00211 
00212         
00213 
00214 
00215 
00216 
00217 
00218         
00219 
00220 
00221         edenIonAbund = dense.eden*dense.xIonDense[nelem][nelem+1-ipISO];
00222 
00223         
00224 
00225 
00226 
00227         edenHCorr_IonAbund = collider*dense.xIonDense[nelem][nelem+1-ipISO];
00228 
00229         
00230         iso.RadRecCool[ipISO][nelem] = 0.;
00231         ThinCoolingSum = 0.;
00232 
00233         if( ipISO == ipH_LIKE )
00234         {
00235                 
00236                 thin = HydroRecCool(
00237                         
00238                         1 , 
00239                         
00240                         nelem);
00241         }
00242         else
00243         {
00244                 
00245                  thin = iso.RadRecomb[ipISO][nelem][0][ipRecRad]*
00246                         
00247 
00248                         HCoolRatio( 
00249                         phycon.te * POW2( (double)StatesElem[ipISO][nelem][0].n / (double)(nelem+1-ipISO) ))*
00250                         
00251                         phycon.te * BOLTZMANN;
00252         }
00253         
00254         SaveRadRecCool[0] = iso.RadRecomb[ipISO][nelem][0][ipRecNetEsc] * thin;
00255         
00256         iso.RadRecCool[ipISO][nelem] += SaveRadRecCool[0] * edenIonAbund;
00257 
00258         
00259         for( n=1; n < iso.numLevels_local[ipISO][nelem]; n++ )
00260         {
00261                 
00262                  thin = iso.RadRecomb[ipISO][nelem][n][ipRecRad]*
00263                         
00264 
00265                         HCoolRatio( 
00266                         phycon.te * POW2( (double)StatesElem[ipISO][nelem][n].n / (double)(nelem+1-ipISO) ))*
00267                         
00268                         phycon.te * BOLTZMANN;
00269 
00270                 
00271                 SaveRadRecCool[n] = iso.RadRecomb[ipISO][nelem][n][ipRecNetEsc] * thin * edenIonAbund;
00272                 
00273                 iso.RadRecCool[ipISO][nelem] += SaveRadRecCool[n];
00274 
00275                 
00276                 ThinCoolingSum += thin;
00277         }
00278         {
00279                 
00280                 enum {DEBUG_LOC=false};
00281                 if( DEBUG_LOC  )
00282                 {
00283                         if( nelem==ipISO )
00284                         {
00285                                 
00286                                 for( n=0; n < (iso.numLevels_local[ipISO][nelem] - 1); n++ )
00287                                 {
00288                                         fprintf(ioQQQ,"\t%.2f",SaveRadRecCool[n]/ThinCoolingSum);
00289                                 }
00290                                 fprintf(ioQQQ,"\n");
00291                         }
00292                 }
00293         }
00294 
00295         
00296 
00297 
00298 
00299         if( ipISO == ipH_LIKE )
00300         {
00301                 
00302                 if( nelem == 0 )
00303                 {
00304                         
00305                         ThinCoolingCaseB = (-25.859117 + 
00306                         0.16229407*phycon.telogn[0] + 
00307                         0.34912863*phycon.telogn[1] - 
00308                         0.10615964*phycon.telogn[2])/(1. + 
00309                         0.050866793*phycon.telogn[0] - 
00310                         0.014118924*phycon.telogn[1] + 
00311                         0.0044980897*phycon.telogn[2] + 
00312                         6.0969594e-5*phycon.telogn[3]);
00313                 }
00314                 else
00315                 {
00316                         
00317                         ThinCoolingCaseB = (-25.859117 + 
00318                         0.16229407*(phycon.telogn[0]-phycon.sqlogz[nelem-ipISO]) + 
00319                         0.34912863*POW2(phycon.telogn[0]-phycon.sqlogz[nelem-ipISO]) - 
00320                         0.10615964*powi( (phycon.telogn[0]-phycon.sqlogz[nelem-ipISO]),3) )/(1. + 
00321                         0.050866793*(phycon.telogn[0]-phycon.sqlogz[nelem-ipISO]) - 
00322                         0.014118924*POW2(phycon.telogn[0]-phycon.sqlogz[nelem-ipISO]) + 
00323                         0.0044980897*powi( (phycon.telogn[0]-phycon.sqlogz[nelem-ipISO]),3) + 
00324                         6.0969594e-5*powi( (phycon.telogn[0]-phycon.sqlogz[nelem-ipISO]),4) );
00325                 }
00326 
00327                 
00328                 ThinCoolingCaseB = POW3(1.+nelem-ipISO)*pow(10.,ThinCoolingCaseB)/(phycon.te/POW2(1.+nelem-ipISO) );
00329 
00330                 
00331                 RecCoolExtra = ThinCoolingCaseB - ThinCoolingSum;
00332         }
00333         else
00334         {
00335                 ThinCoolingCaseB = 0.;
00336                 RecCoolExtra = 0.;
00337         }
00338 
00339         
00340 
00341         RecCoolExtra = MAX2(0., RecCoolExtra );
00342 
00343         
00344         iso.RadRecCool[ipISO][nelem] += RecCoolExtra* edenIonAbund *iso.RadRecomb[ipISO][nelem][iso.numLevels_local[ipISO][nelem]-1][ipRecNetEsc];
00345 
00346         
00347 
00348 
00349 
00350 
00351 
00352 
00353         
00354         HeatExcited = 0.;
00355         ipbig = -1000;
00356         for( n=1; n < (iso.numLevels_local[ipISO][nelem] - 1); ++n )
00357         {
00358                 SavePhotoHeat[n] = dense.xIonDense[nelem][nelem+1-ipISO]*StatesElem[ipISO][nelem][n].Pop*
00359                         iso.PhotoHeat[ipISO][nelem][n];
00360                 HeatExcited += SavePhotoHeat[n];
00361                 if( SavePhotoHeat[n] > biggest )
00362                 {
00363                         biggest = SavePhotoHeat[n];
00364                         ipbig = (int)n;
00365                 }
00366         }
00367         {
00368                 
00369                 enum {DEBUG_LOC=false};
00370                 if( DEBUG_LOC  && ipISO==0 && nelem==0  && nzone > 700)
00371                 {
00372                         
00373                         SavePhotoHeat[ipH1s] = dense.xIonDense[nelem][nelem+1-ipISO]*StatesElem[ipISO][nelem][ipH1s].Pop*
00374                           iso.PhotoHeat[ipISO][nelem][ipH1s];
00375                         fprintf(ioQQQ,"ipISO = %li nelem=%li ipbig=%li biggest=%g HeatExcited=%.2e ctot=%.2e\n",
00376                                 ipISO , nelem,
00377                                 ipbig , 
00378                                 biggest,
00379                                 HeatExcited ,
00380                                 thermal.ctot);
00381                         
00382                         for(n=ipH1s; n< (iso.numLevels_local[ipISO][nelem] - 1); ++n )
00383                         {
00384                                 fprintf(ioQQQ,"DEBUG phot heat%2li\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\n", 
00385                                         n,
00386                                         SavePhotoHeat[n]/HeatExcited,
00387                                         dense.xIonDense[nelem][nelem+1-ipISO],
00388                                         StatesElem[ipISO][nelem][n].Pop,
00389                                         iso.PhotoHeat[ipISO][nelem][n],
00390                                         iso.gamnc[ipISO][nelem][n]);
00391                         }
00392                 }
00393         }
00394 
00395         
00396 
00397 
00398         iso.FreeBnd_net_Cool_Rate[ipISO][nelem] = iso.RadRecCool[ipISO][nelem] - HeatExcited;
00399         
00400 
00401 
00402 
00403         
00404 
00405 
00406         thermal.heating[0][1] += MAX2(0.,-iso.FreeBnd_net_Cool_Rate[ipISO][nelem]);
00407 
00408         
00409         
00410         sprintf(chLabel , "ISrcol%2s%2s" , elementnames.chElementSym[ipISO]  , 
00411                 elementnames.chElementSym[nelem]);
00412         CoolAdd(chLabel, (realnum)nelem, MAX2(0.,iso.FreeBnd_net_Cool_Rate[ipISO][nelem]));
00413 
00414         
00415         thermal.dCooldT += 0.2*iso.FreeBnd_net_Cool_Rate[ipISO][nelem]*phycon.teinv;
00416 
00417         
00418 
00419 
00420 
00421 
00422 
00423         iso.RecomInducCool_Rate[ipISO][nelem] = 0.;
00424         
00425         for( n=0; n < (iso.numLevels_local[ipISO][nelem] - 1); ++n )
00426         {
00427                 
00428                 SaveInducCool[n] = iso.RecomInducCool_Coef[ipISO][nelem][n]*iso.PopLTE[ipISO][nelem][n]*edenIonAbund;
00429                 iso.RecomInducCool_Rate[ipISO][nelem] += SaveInducCool[n];
00430                 thermal.dCooldT += SaveInducCool[n]*
00431                         (iso.xIsoLevNIonRyd[ipISO][nelem][n]/phycon.te_ryd - 1.5)*phycon.teinv;
00432         }
00433 
00434         {
00435                 
00436                 enum {DEBUG_LOC=false};
00437                 if( DEBUG_LOC && ipISO==0 && nelem==5  )
00438                 {
00439                         fprintf(ioQQQ," ipISO=%li nelem=%li ctot = %.2e\n",
00440                                 ipISO,
00441                                 nelem,
00442                                 thermal.ctot);
00443                         fprintf(ioQQQ,"sum\t%.2e\t%.2e\t%.2e\n", 
00444                                 HeatExcited,
00445                                 iso.RadRecCool[ipISO][nelem],
00446                                 iso.RecomInducCool_Rate[ipISO][nelem]);
00447                         fprintf(ioQQQ,"sum\tp ht\tr cl\ti cl\n");
00448 
00449                         
00450                         for(n=0; n< (iso.numLevels_local[ipISO][nelem] - 1); ++n )
00451                         {
00452                                 fprintf(ioQQQ,"%li\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e  \n", 
00453                                         n,
00454                                         SavePhotoHeat[n],
00455                                         SaveRadRecCool[n],
00456                                         SaveInducCool[n] ,
00457                                         iso.RecomInducCool_Coef[ipISO][nelem][n],
00458                                         iso.PopLTE[ipISO][nelem][n],
00459                                         iso.RecomInducRate[ipISO][nelem][n]);
00460                         }
00461                         fprintf(ioQQQ," \n");
00462                 }
00463         }
00464         
00465         sprintf(chLabel , "ISicol%2s%2s" , elementnames.chElementSym[ipISO]  , 
00466                 elementnames.chElementSym[nelem]);
00467         
00468         CoolAdd(chLabel,(realnum)nelem,iso.RecomInducCool_Rate[ipISO][nelem]);
00469 
00470         
00471         iso.xLineTotCool[ipISO][nelem] = 0.;
00472         dCdT_all = 0.;
00473         heat_max = 0.;
00474         nlo_heat_max = -1;
00475         nhi_heat_max = -1;
00476 
00477         
00478 
00479         for( ipLo=0; ipLo < iso.numLevels_local[ipISO][nelem]-2; ipLo++ )
00480         {
00481                 for( ipHi=ipLo + 1; ipHi < iso.numLevels_local[ipISO][nelem]-1; ipHi++ )
00482                 {
00483                         
00484                         hlone = 
00485                           Transitions[ipISO][nelem][ipHi][ipLo].Coll.ColUL*
00486                           (StatesElem[ipISO][nelem][ipLo].Pop*
00487                           iso.Boltzmann[ipISO][nelem][ipHi][ipLo]*
00488                           StatesElem[ipISO][nelem][ipHi].g/StatesElem[ipISO][nelem][ipLo].g - 
00489                           StatesElem[ipISO][nelem][ipHi].Pop)*edenHCorr_IonAbund*
00490                           Transitions[ipISO][nelem][ipHi][ipLo].EnergyErg;
00491 
00492                         iso.xLineTotCool[ipISO][nelem] += hlone;
00493 
00494                         
00495                         if( hlone > 0. )
00496                         {
00497                                 
00498 
00499 
00500                                 dCdT_all += hlone*
00501                                   (Transitions[ipISO][nelem][ipHi][ipH1s].EnergyK*thermal.tsq1 - thermal.halfte);
00502                         }
00503                         else
00504                         {
00505                                 
00506 
00507 
00508                                 if( hlone < heat_max )
00509                                 {
00510                                         heat_max = hlone;
00511                                         nlo_heat_max = ipLo;
00512                                         nhi_heat_max = ipHi;
00513                                 } 
00514                                 dCdT_all -= hlone*thermal.halfte;
00515                         }
00516                 }
00517         }
00518         {
00519                 
00520                 enum {DEBUG_LOC=false};
00521                 if( DEBUG_LOC )
00522                 {
00523                         if( nelem==ipISO )
00524                                 fprintf(ioQQQ,"%li %li %.2e\n", nlo_heat_max, nhi_heat_max, heat_max );
00525                 }
00526         }
00527 
00528         
00529         
00530         iso.cLya_cool[ipISO][nelem] = 0.;
00531         
00532         iso.cLyrest_cool[ipISO][nelem] = 0.;
00533 
00534         for( ipHi=1; ipHi < iso.numLevels_local[ipISO][nelem]; ipHi++ )
00535         {
00536                 hlone = Transitions[ipISO][nelem][ipHi][ipH1s].Coll.ColUL*
00537                   (StatesElem[ipISO][nelem][0].Pop*iso.Boltzmann[ipISO][nelem][ipHi][0]*
00538                   StatesElem[ipISO][nelem][ipHi].g/StatesElem[ipISO][nelem][0].g - 
00539                   StatesElem[ipISO][nelem][ipHi].Pop)* edenHCorr_IonAbund*
00540                   Transitions[ipISO][nelem][ipHi][0].EnergyErg;
00541 
00542                 if( ipHi == iso.nLyaLevel[ipISO] )
00543                 {
00544                         iso.cLya_cool[ipISO][nelem] = hlone;
00545 
00546                 }
00547                 else
00548                 {
00549                         
00550                         iso.cLyrest_cool[ipISO][nelem] += hlone;
00551                 }
00552         }
00553 
00554         
00555 
00556         iso.cBal_cool[ipISO][nelem] = 0.;
00557         for( ipHi=3; ipHi < iso.numLevels_local[ipISO][nelem]; ipHi++ )
00558         {
00559                 
00560                 ipLo = ipH2s;
00561                 hlone = 
00562                   Transitions[ipISO][nelem][ipHi][ipLo].Coll.ColUL*(
00563                   StatesElem[ipISO][nelem][ipLo].Pop*
00564                   iso.Boltzmann[ipISO][nelem][ipHi][ipLo]*
00565                   StatesElem[ipISO][nelem][ipHi].g/StatesElem[ipISO][nelem][ipLo].g - 
00566                   StatesElem[ipISO][nelem][ipHi].Pop)*edenHCorr_IonAbund*
00567                   Transitions[ipISO][nelem][ipHi][ipLo].EnergyErg;
00568 
00569                 ipLo = ipH2p;
00570                 hlone += 
00571                   Transitions[ipISO][nelem][ipHi][ipLo].Coll.ColUL*(
00572                   StatesElem[ipISO][nelem][ipLo].Pop*
00573                   iso.Boltzmann[ipISO][nelem][ipHi][ipLo]*
00574                   StatesElem[ipISO][nelem][ipHi].g/StatesElem[ipISO][nelem][ipLo].g - 
00575                   StatesElem[ipISO][nelem][ipHi].Pop)*edenHCorr_IonAbund*
00576                   Transitions[ipISO][nelem][ipHi][ipLo].EnergyErg;
00577 
00578                 
00579                 iso.cBal_cool[ipISO][nelem] += hlone;
00580         }
00581 
00582         
00583 
00584         iso.cRest_cool[ipISO][nelem] = 0.;
00585         for( ipLo=3; ipLo < iso.numLevels_local[ipISO][nelem]-1; ipLo++ )
00586         {
00587                 for( ipHi=ipLo + 1; ipHi < iso.numLevels_local[ipISO][nelem]; ipHi++ )
00588                 {
00589                         hlone = 
00590                           Transitions[ipISO][nelem][ipHi][ipLo].Coll.ColUL*(
00591                           StatesElem[ipISO][nelem][ipLo].Pop*
00592                           iso.Boltzmann[ipISO][nelem][ipHi][ipLo]*
00593                           StatesElem[ipISO][nelem][ipHi].g/StatesElem[ipISO][nelem][ipLo].g - 
00594                           StatesElem[ipISO][nelem][ipHi].Pop)*edenHCorr_IonAbund*
00595                           Transitions[ipISO][nelem][ipHi][ipLo].EnergyErg;
00596 
00597                         iso.cRest_cool[ipISO][nelem] += hlone;
00598                 }
00599         }
00600 
00601         
00602         
00603 
00604         
00605         sprintf(chLabel , "ISclin%2s%2s" , elementnames.chElementSym[ipISO] , 
00606                 elementnames.chElementSym[nelem]);
00607         if( iso.xLineTotCool[ipISO][nelem] > 0. )
00608         {
00609                 
00610                 CoolAdd(chLabel,(realnum)nelem,iso.xLineTotCool[ipISO][nelem]);
00611                 thermal.dCooldT += dCdT_all;
00612                 iso.dLTot[ipISO][nelem] = 0.;
00613         }
00614         else
00615         {
00616                 
00617                 thermal.heating[0][23] -= iso.xLineTotCool[ipISO][nelem];
00618                 CoolAdd(chLabel,(realnum)nelem,0.);
00619                 iso.dLTot[ipISO][nelem] = -dCdT_all;
00620         }
00621 
00622         {
00623                 
00624                 enum {DEBUG_LOC=false};
00625                 if( DEBUG_LOC )
00626                 {
00627                         if( nelem == 0 )
00628                         {
00629                                 fprintf(ioQQQ,"%.2e la %.2f restly %.2f barest %.2f hrest %.2f\n",
00630                                         iso.xLineTotCool[ipISO][nelem] ,
00631                                         iso.cLya_cool[ipISO][nelem]/iso.xLineTotCool[ipISO][nelem] ,
00632                                         iso.cLyrest_cool[ipISO][nelem]/iso.xLineTotCool[ipISO][nelem] ,
00633                                         iso.cBal_cool[ipISO][nelem]/iso.xLineTotCool[ipISO][nelem] ,
00634                                         iso.cRest_cool[ipISO][nelem]/iso.xLineTotCool[ipISO][nelem] );
00635                         }
00636                 }
00637         }
00638         {
00639                 
00640 
00641                 enum {DEBUG_LOC=false};
00642                 enum {LTEPOP=true};
00643                 
00644                 if( DEBUG_LOC  && (nelem==1 || nelem==0) )
00645                 {
00646                         
00647                         if( LTEPOP )
00648                         {
00649                                 
00650                                 for(n=ipH1s; n<iso.numLevels_local[ipISO][nelem]-1; ++n )
00651                                 {
00652                                         fprintf(ioQQQ,"%li\t%li\t%g\t%g\t%g\t%g\tT=\t%g\t%g\t%g\t%g\n", nelem,n,
00653                                                 iso.gamnc[ipISO][nelem][n] *iso.PopLTE[ipISO][nelem][n], 
00654                                                 
00655                                                 
00656                                                 
00657                                                 iso.RadRecomb[ipISO][nelem][n][ipRecRad]+ 
00658                                                         iso.RecomInducRate[ipISO][nelem][n]*iso.PopLTE[ipISO][nelem][n]  ,
00659                                                 
00660                                                 iso.RecomInducRate[ipISO][nelem][n]*iso.PopLTE[ipISO][nelem][n]  ,
00661                                                 
00662                                                 iso.RadRecomb[ipISO][nelem][n][ipRecRad] ,
00663                                                 
00664                                                 iso.PhotoHeat[ipISO][nelem][n]*iso.PopLTE[ipISO][nelem][n], 
00665                                                 iso.RecomInducCool_Coef[ipISO][nelem][n]*iso.PopLTE[ipISO][nelem][n]+SaveRadRecCool[n] ,
00666                                                 
00667                                                 iso.RecomInducCool_Coef[ipISO][nelem][n]*iso.PopLTE[ipISO][nelem][n] ,
00668                                                 
00669                                                 SaveRadRecCool[n] );
00670                                 }
00671                         }
00672                         else
00673                         {
00674                                 
00675                                 for(n=ipH1s; n<iso.numLevels_local[ipISO][nelem]-1; ++n )
00676                                 {
00677                                         fprintf(ioQQQ,"%li\t%li\t%g\t%g\t%g\t%g\tT=\t%g\t%g\t%g\t%g\n", nelem,n,
00678                                                 iso.gamnc[ipISO][nelem][n] *dense.xIonDense[nelem][nelem+1-ipISO]*StatesElem[ipISO][nelem][n].Pop, 
00679                                                 
00680                                                 iso.RadRecomb[ipISO][nelem][n][ipRecRad]*edenIonAbund+
00681                                                         iso.RecomInducRate[ipISO][nelem][n]*iso.PopLTE[ipISO][nelem][n] *edenIonAbund ,
00682                                                 iso.RadRecomb[ipISO][nelem][n][ipRecRad]*edenIonAbund ,
00683                                                 iso.RecomInducRate[ipISO][nelem][n]*iso.PopLTE[ipISO][nelem][n] *edenIonAbund ,
00684                                                 
00685                                                 SavePhotoHeat[n], 
00686                                                 SaveInducCool[n]+SaveRadRecCool[n]*edenIonAbund ,
00687                                                 
00688                                                 SaveInducCool[n] ,
00689                                                 
00690                                                 SaveRadRecCool[n]*edenIonAbund );
00691                                 }
00692                         }
00693                 }
00694         }
00695         return;
00696 }
00697 #if defined(__HP_aCC)
00698 #pragma OPTIMIZE OFF
00699 #pragma OPTIMIZE ON
00700 #endif