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