00001
00002
00003
00004 #include "cddefines.h"
00005 #include "yield.h"
00006 #include "heavy.h"
00007 #include "opacity.h"
00008 #include "dense.h"
00009 #include "thermal.h"
00010 #include "conv.h"
00011 #include "grainvar.h"
00012 #include "elementnames.h"
00013 #include "gammas.h"
00014 #include "ionbal.h"
00015
00016 void ion_photo(
00017
00018 long int nelem ,
00019
00020 bool lgPrintIt )
00021 {
00022 long int ion,
00023 iphi,
00024 iplow,
00025 ipop,
00026 limit_hi,
00027 limit_lo,
00028 ns;
00029
00030 DEBUG_ENTRY( "ion_photo()" );
00031
00032
00033
00034
00035 ASSERT( dense.IonLow[nelem] >= 0 );
00036 ASSERT( dense.IonLow[nelem] <= nelem);
00037 ASSERT( dense.IonHigh[nelem] <= nelem + 1);
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 limit_hi = MIN2( dense.IonHigh[nelem] , nelem+1-NISO );
00052
00053
00054 limit_hi = MAX2( 1 , limit_hi );
00055
00056
00057
00058 if( !conv.nPres2Ioniz && gv.lgDustOn )
00059 {
00060 limit_lo = 0;
00061 }
00062 else
00063 {
00064 limit_lo = dense.IonLow[nelem];
00065 }
00066
00067
00068
00069
00070 for( ion=limit_lo; ion < limit_hi; ion++ )
00071 {
00072
00073 for( ns=0; ns < Heavy.nsShells[nelem][ion]; ns++ )
00074 {
00075
00076 if( (ns==(Heavy.nsShells[nelem][ion]-1) || opac.lgRedoStatic) )
00077 {
00078
00079 iplow = opac.ipElement[nelem][ion][ns][0];
00080 iphi = opac.ipElement[nelem][ion][ns][1];
00081 ipop = opac.ipElement[nelem][ion][ns][2];
00082
00083
00084
00085 ionbal.PhotoRate_Shell[nelem][ion][ns][0] =
00086 GammaK(iplow,iphi,
00087 ipop,t_yield::Inst().elec_eject_frac(nelem,ion,ns,0))*ionbal.lgPhotoIoniz_On;
00088
00089
00090
00091
00092
00093 ionbal.PhotoRate_Shell[nelem][ion][ns][1] = thermal.HeatLowEnr*ionbal.lgPhotoIoniz_On;
00094 ionbal.PhotoRate_Shell[nelem][ion][ns][2] = thermal.HeatHiEnr*ionbal.lgPhotoIoniz_On;
00095 }
00096 }
00097
00098
00099
00100
00101 ns = (Heavy.nsShells[nelem][ion]-1);
00102
00103 ionbal.PhotoRate_Shell[nelem][ion][ns][0] += ionbal.CompRecoilIonRate[nelem][ion];
00104
00105 ionbal.PhotoRate_Shell[nelem][ion][ns][2] += ionbal.CompRecoilHeatRate[nelem][ion];
00106 }
00107
00108
00109 if( lgPrintIt )
00110 {
00111
00112 ns = 5;
00113 ion = 1;
00114 GammaPrt(
00115 opac.ipElement[nelem][ion][ns][0],
00116 opac.ipElement[nelem][ion][ns][1],
00117 opac.ipElement[nelem][ion][ns][2],
00118 ioQQQ,
00119 ionbal.PhotoRate_Shell[nelem][ion][ns][0],
00120 0.05);
00121
00122
00123 for( ns=0; ns < Heavy.nsShells[nelem][0]; ns++ )
00124 {
00125 fprintf( ioQQQ, "\n %s", elementnames.chElementNameShort[nelem] );
00126 fprintf( ioQQQ, " %s" , Heavy.chShell[ns]);
00127
00128 for( ion=0; ion < dense.IonHigh[nelem]; ion++ )
00129 {
00130 if( Heavy.nsShells[nelem][ion] > ns )
00131 {
00132 fprintf( ioQQQ, " %8.1e", ionbal.PhotoRate_Shell[nelem][ion][ns][0] );
00133 }
00134 else
00135 {
00136 break;
00137 }
00138 }
00139 }
00140 fprintf(ioQQQ,"\n");
00141 }
00142
00143 DEBUG_EXIT( "ion_photo()" );
00144 return;
00145 }
00146