00001
00002
00003
00004
00005 #include "cddefines.h"
00006 #include "physconst.h"
00007 #include "iso.h"
00008 #include "dense.h"
00009 #include "taulines.h"
00010 #include "h2.h"
00011 #include "atomfeii.h"
00012 #include "rt.h"
00013
00014
00015
00016 double RT_line_driving(void)
00017 {
00018 long int i,
00019 ipHi,
00020 nelem,
00021 ipLo,
00022 ipISO;
00023
00024 double AllHeavy,
00025 AllRest,
00026 OneLine,
00027 fe2drive,
00028 forlin_v,
00029 h2drive,
00030 accel_iso[NISO];
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 DEBUG_ENTRY( "RT_line_driving()" );
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 for( ipISO=ipH_LIKE; ipISO<NISO; ++ipISO )
00056 {
00057 accel_iso[ipISO] = 0;
00058 for( nelem=ipISO; nelem < LIMELM; nelem++ )
00059 {
00060 if( (dense.IonHigh[nelem] >= nelem + 1-ipISO) )
00061 {
00062 for( ipHi=1; ipHi < iso.numLevels_local[ipISO][nelem]; ipHi++ )
00063 {
00064
00065 for( ipLo=0; ipLo < ipHi - 1; ipLo++ )
00066 {
00067
00068 if( Transitions[ipISO][nelem][ipHi][ipLo].ipCont > 0 )
00069 {
00070 OneLine = Transitions[ipISO][nelem][ipHi][ipLo].Emis->pump*
00071 Transitions[ipISO][nelem][ipHi][ipLo].EnergyErg*
00072 Transitions[ipISO][nelem][ipHi][ipLo].Emis->PopOpc;
00073
00074 accel_iso[ipISO] += OneLine;
00075 }
00076 }
00077 }
00078
00079
00080 for( ipLo=0; ipLo < iso.numLevels_local[ipISO][nelem]; ipLo++ )
00081 {
00082
00083 if( SatelliteLines[ipISO][nelem][ipLo].ipCont > 0 )
00084 {
00085 OneLine = SatelliteLines[ipISO][nelem][ipLo].Emis->pump*
00086 SatelliteLines[ipISO][nelem][ipLo].EnergyErg*
00087 SatelliteLines[ipISO][nelem][ipLo].Emis->PopOpc;
00088
00089 accel_iso[ipISO] += OneLine;
00090 }
00091
00092 }
00093
00094 for( ipHi=StatesElemNEW[nelem][nelem-ipISO][iso.numLevels_max[ipISO][nelem]-1].n; ipHi < iso.nLyman[ipISO]; ipHi++ )
00095 {
00096
00097 if( ExtraLymanLines[ipISO][nelem][ipHi].ipCont > 0 )
00098 {
00099 OneLine = ExtraLymanLines[ipISO][nelem][ipHi].Emis->pump*
00100 ExtraLymanLines[ipISO][nelem][ipHi].EnergyErg*
00101 ExtraLymanLines[ipISO][nelem][ipHi].Emis->PopOpc;
00102
00103 accel_iso[ipISO] += OneLine;
00104 }
00105
00106 }
00107 }
00108 }
00109 }
00110
00111
00112
00113 AllHeavy = 0.;
00114 for( i=1; i <= nLevel1; i++ )
00115 {
00116 OneLine =
00117 TauLines[i].Emis->pump*
00118 TauLines[i].EnergyErg*
00119 TauLines[i].Emis->PopOpc;
00120 AllHeavy += OneLine;
00121 }
00122
00123
00124
00125 AllRest = 0.;
00126 for( i=0; i < nWindLine; i++ )
00127 {
00128 OneLine =
00129 TauLine2[i].Emis->pump*
00130 TauLine2[i].EnergyErg*
00131 TauLine2[i].Emis->PopOpc;
00132 AllRest += OneLine;
00133 }
00134 for( i=0; i < nUTA; i++ )
00135 {
00136 OneLine =
00137 UTALines[i].Emis->pump*
00138 UTALines[i].EnergyErg*
00139 UTALines[i].Emis->PopOpc;
00140 AllRest += OneLine;
00141 }
00142 for( i=0; i < nHFLines; i++ )
00143 {
00144 OneLine =
00145 HFLines[i].Emis->pump*
00146 HFLines[i].EnergyErg*
00147 HFLines[i].Emis->PopOpc;
00148 AllRest += OneLine;
00149 }
00150 for( i=0; i < linesAdded2; i++)
00151 {
00152 OneLine =
00153 dBaseLines[i].pump*
00154 dBaseLines[i].tran->EnergyErg*
00155 dBaseLines[i].PopOpc;
00156 AllRest += OneLine;
00157 }
00158
00159
00160 h2drive = H2_Accel();
00161
00162
00163 fe2drive = 0.;
00164 FeIIAccel(&fe2drive);
00165
00166 forlin_v = AllHeavy + accel_iso[ipH_LIKE] + accel_iso[ipHE_LIKE] +
00167 fe2drive + h2drive + AllRest;
00168
00169
00170
00171 return( forlin_v );
00172 }