00001
00002
00003
00004
00005 #include "cddefines.h"
00006 #include "rfield.h"
00007 #include "hydrogenic.h"
00008 #include "opacity.h"
00009
00010 void OpacityAdd1Subshell(
00011
00012 long int ipOpac,
00013
00014 long int ipLowLim,
00015
00016 long int ipUpLim,
00017
00018 realnum abundance,
00019
00020 char chStat )
00021 {
00022 long int i ,
00023 ipOffset,
00024 limit;
00025
00026 DEBUG_ENTRY( "OpacityAdd1Subshell()" );
00027
00028
00029
00030 ASSERT( chStat == 's' || chStat == 'v' );
00031
00032 ipOffset = ipOpac - ipLowLim;
00033 ASSERT( ipLowLim > 0 );
00034
00035
00036
00037 limit = MIN2(ipUpLim,rfield.nflux);
00038
00039
00040
00041 if( abundance <= 0. || (chStat=='s' && !opac.lgRedoStatic) )
00042 {
00043 return;
00044 }
00045
00046
00047 if( chStat=='v' )
00048 {
00049 for( i=ipLowLim-1; i < limit; i++ )
00050 {
00051 opac.opacity_abs[i] += opac.OpacStack[i+ipOffset]*abundance;
00052 }
00053 }
00054 else
00055 {
00056 for( i=ipLowLim-1; i < limit; i++ )
00057 {
00058 opac.OpacStatic[i] += opac.OpacStack[i+ipOffset]*abundance;
00059 }
00060 }
00061 return;
00062 }
00063
00064
00065 void OpacityAdd1SubshellInduc(
00066
00067 long int ipOpac,
00068
00069 long int ipLowEnergy,
00070
00071 long int ipHiEnergy,
00072
00073 double abundance,
00074
00075 double DepartCoef ,
00076
00077 char chStat )
00078 {
00079 long int i,
00080 iup,
00081 k;
00082
00083 DEBUG_ENTRY( "OpacityAdd1SubshellInduc()" );
00084
00085
00086
00087
00088
00089
00090 ASSERT( ipOpac > 0 );
00091
00092
00093 ASSERT( chStat == 'v' || chStat == 's' );
00094
00095
00096
00097 if( abundance <= 0. || (chStat=='s' && !opac.lgRedoStatic) )
00098 {
00099 return;
00100 }
00101
00102 k = ipOpac - ipLowEnergy;
00103
00104
00105 if( (DepartCoef > 1e-35 && rfield.lgInducProcess) && hydro.lgHInducImp )
00106 {
00107 iup = MIN2(ipHiEnergy,rfield.nflux);
00108
00109
00110 double DepartCoefInv = 1./DepartCoef;
00111 if( chStat == 'v' )
00112 {
00113
00114 for( i=ipLowEnergy-1; i < iup; i++ )
00115 {
00116 opac.opacity_abs[i] += opac.OpacStack[i+k]*abundance*
00117 MAX2(0. , 1.- rfield.ContBoltz[i]*DepartCoefInv);
00118 }
00119 }
00120 else
00121 {
00122
00123 for( i=ipLowEnergy-1; i < iup; i++ )
00124 {
00125 opac.OpacStatic[i] += opac.OpacStack[i+k]*abundance*
00126 MAX2(0. , 1.- rfield.ContBoltz[i]*DepartCoefInv);
00127 }
00128 }
00129 }
00130
00131 else
00132 {
00133
00134
00135 iup = MIN2(ipHiEnergy,rfield.nflux);
00136
00137
00138 if( chStat == 'v' )
00139 {
00140 for( i=ipLowEnergy-1; i < iup; i++ )
00141 {
00142 opac.opacity_abs[i] += opac.OpacStack[i+k]*abundance;
00143 }
00144 }
00145 else
00146 {
00147 for( i=ipLowEnergy-1; i < iup; i++ )
00148 {
00149 opac.OpacStatic[i] += opac.OpacStack[i+k]*abundance;
00150 }
00151 }
00152 }
00153
00154 return;
00155 }