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