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 float 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 DEBUG_EXIT( "OpacityAdd1Subshell()" );
00044 return;
00045 }
00046
00047
00048 if( chStat=='v' )
00049 {
00050 for( i=ipLowLim-1; i < limit; i++ )
00051 {
00052 opac.opacity_abs[i] += opac.OpacStack[i+ipOffset]*abundance;
00053 }
00054 }
00055 else
00056 {
00057 for( i=ipLowLim-1; i < limit; i++ )
00058 {
00059 opac.OpacStatic[i] += opac.OpacStack[i+ipOffset]*abundance;
00060 }
00061 }
00062
00063 DEBUG_EXIT( "OpacityAdd1Subshell()" );
00064 return;
00065 }
00066
00067
00068 void OpacityAdd1SubshellInduc(
00069
00070 long int ipOpac,
00071
00072 long int ipLowEnergy,
00073
00074 long int ipHiEnergy,
00075
00076 double abundance,
00077
00078 double DepartCoef ,
00079
00080 char chStat )
00081 {
00082 long int i,
00083 iup,
00084 k;
00085
00086 float DepartCoefInv;
00087
00088 DEBUG_ENTRY( "OpacityAdd1SubshellInduc()" );
00089
00090
00091
00092
00093
00094
00095 ASSERT( ipOpac > 0 );
00096
00097
00098 ASSERT( chStat == 'v' || chStat == 's' );
00099
00100
00101
00102 if( abundance <= 0. || (chStat=='s' && !opac.lgRedoStatic) )
00103 {
00104 DEBUG_EXIT( "OpacityAdd1SubshellInduc()" );
00105 return;
00106 }
00107
00108 k = ipOpac - ipLowEnergy;
00109
00110
00111 if( (DepartCoef > 1e-35 && rfield.lgInducProcess) && hydro.lgHInducImp )
00112 {
00113 iup = MIN2(ipHiEnergy,rfield.nflux);
00114
00115
00116 DepartCoefInv = (float)(1./DepartCoef);
00117 if( chStat == 'v' )
00118 {
00119
00120 for( i=ipLowEnergy-1; i < iup; i++ )
00121 {
00122 opac.opacity_abs[i] += opac.OpacStack[i+k]*abundance*
00123 MAX2(0.f , 1.f- rfield.ContBoltz[i]*DepartCoefInv);
00124 }
00125 }
00126 else
00127 {
00128
00129 for( i=ipLowEnergy-1; i < iup; i++ )
00130 {
00131 opac.OpacStatic[i] += opac.OpacStack[i+k]*abundance*
00132 MAX2(0.f , 1.f- rfield.ContBoltz[i]*DepartCoefInv);
00133 }
00134 }
00135 }
00136
00137 else
00138 {
00139
00140
00141 iup = MIN2(ipHiEnergy,rfield.nflux);
00142
00143
00144 if( chStat == 'v' )
00145 {
00146 for( i=ipLowEnergy-1; i < iup; i++ )
00147 {
00148 opac.opacity_abs[i] += opac.OpacStack[i+k]*abundance;
00149 }
00150 }
00151 else
00152 {
00153 for( i=ipLowEnergy-1; i < iup; i++ )
00154 {
00155 opac.OpacStatic[i] += opac.OpacStack[i+k]*abundance;
00156 }
00157 }
00158 }
00159
00160
00161 DEBUG_EXIT( "OpacityAdd1SubshellInduc()" );
00162 return;
00163 }
00164