00001
00002
00003
00004 #include "cddefines.h"
00005 #include "pressure.h"
00006 #include "taulines.h"
00007 #include "iso.h"
00008 #include "dense.h"
00009 #include "lines_service.h"
00010 #include "h2.h"
00011 #include "rt.h"
00012 #include "prt.h"
00013
00014 #define THRESH 0.05
00015
00016 void PrtLinePres(void)
00017 {
00018 long int i,
00019 ip,
00020 ipLo,
00021 ipHi,
00022 nelem;
00023 int ier;
00024 double RadPres1;
00025
00026
00027 # define NLINE 100
00028
00029 char chLab[NLINE][5];
00030 float wl[NLINE] , frac[NLINE];
00031 long int iperm[NLINE];
00032
00033
00034 float smallfloat=SMALLFLOAT*10.f;
00035
00036 DEBUG_ENTRY( "PrtLinePres()" );
00037
00038
00039
00040
00041
00042 ip = 0;
00043
00044 for(i=0; i<NLINE; ++i)
00045 {
00046 frac[i] = FLT_MAX;
00047 wl[i] = FLT_MAX;
00048 }
00049
00050 if( pressure.pres_radiation_lines_curr > 1e-30 )
00051 {
00052 long int ipISO = 0;
00056
00057 for( nelem=0; nelem < LIMELM; nelem++ )
00058 {
00059 if( dense.IonHigh[nelem] == nelem + 1 )
00060 {
00061
00062
00063
00064 for( ipLo=ipH1s; ipLo < (iso.numLevels_local[ipH_LIKE][nelem] - 2); ipLo++ )
00065 {
00066
00067
00068 for( ipHi=ipLo+1; ipHi < iso.numLevels_local[ipH_LIKE][nelem]-1; ipHi++ )
00069 {
00070 if( EmisLines[ipISO][nelem][ipHi][ipLo].Aul > 10. &&
00071 EmisLines[ipISO][nelem][ipHi][ipLo].PopHi > smallfloat &&
00072 EmisLines[ipISO][nelem][ipHi][ipLo].PopOpc > smallfloat &&
00073
00074 ( (EmisLines[ipISO][nelem][ipHi][ipLo].TauTot - EmisLines[ipISO][nelem][ipHi][ipLo].TauIn) > smallfloat ) &&
00075 EmisLines[ipISO][nelem][ipHi][ipLo].ipCont>0)
00076 {
00077 RadPres1 = 5.551e-2*
00078 (powi(EmisLines[ipH_LIKE][nelem][ipHi][ipLo].EnergyWN/1.e6,4))*
00079 (EmisLines[ipH_LIKE][nelem][ipHi][ipLo].PopHi/
00080 iso.stat[ipH_LIKE][nelem][ipHi])/
00081 (EmisLines[ipH_LIKE][nelem][ipHi][ipLo].PopOpc/
00082 iso.stat[ipH_LIKE][nelem][ipLo])*
00083
00084 RT_LineWidth(&EmisLines[ipH_LIKE][nelem][ipHi][ipLo]);
00085 if( RadPres1 > pressure.pres_radiation_lines_curr*THRESH )
00086 {
00087 wl[ip] = EmisLines[ipH_LIKE][nelem][ipHi][ipLo].WLAng;
00088
00089
00090 chIonLbl(chLab[ip], &EmisLines[ipH_LIKE][nelem][ipHi][ipLo]);
00091 frac[ip] = (float)(RadPres1/pressure.pres_radiation_lines_curr);
00092
00093 ip = MIN2((long)NLINE-1,ip+1);
00094 }
00095 }
00096 }
00097 }
00098 }
00099 }
00100
00101
00102 ipISO = 1;
00103 for( nelem=1; nelem < LIMELM; nelem++ )
00104 {
00105 if( dense.IonHigh[nelem] >= nelem )
00106 {
00107
00108 for( ipHi=1; ipHi <iso.numLevels_local[ipHE_LIKE][nelem]; ipHi++ )
00109 {
00110 for( ipLo=0; ipLo < ipHi; ipLo++ )
00111 {
00112
00113 if( EmisLines[ipISO][nelem][ipHi][ipLo].Aul > 10. &&
00114 EmisLines[ipISO][nelem][ipHi][ipLo].PopHi > smallfloat &&
00115 EmisLines[ipISO][nelem][ipHi][ipLo].PopOpc > smallfloat &&
00116
00117 ( (EmisLines[ipISO][nelem][ipHi][ipLo].TauTot - EmisLines[ipISO][nelem][ipHi][ipLo].TauIn) > smallfloat ) &&
00118 EmisLines[ipISO][nelem][ipHi][ipLo].ipCont>0)
00119 {
00120 RadPres1 = 5.551e-2*
00121 (powi(EmisLines[ipHE_LIKE][nelem][ipHi][ipLo].EnergyWN/1.e6,4))*
00122 (EmisLines[ipHE_LIKE][nelem][ipHi][ipLo].PopHi/
00123 iso.stat[ipHE_LIKE][nelem][ipHi])/
00124 (EmisLines[ipHE_LIKE][nelem][ipHi][ipLo].PopOpc/
00125 iso.stat[ipHE_LIKE][nelem][ipLo])*
00126
00127 RT_LineWidth(&EmisLines[ipHE_LIKE][nelem][ipHi][ipLo]);
00128 if( RadPres1 > pressure.pres_radiation_lines_curr*THRESH )
00129 {
00130 wl[ip] = EmisLines[ipHE_LIKE][nelem][ipHi][ipLo].WLAng;
00131
00132
00133 chIonLbl(chLab[ip], &EmisLines[ipHE_LIKE][nelem][ipHi][ipLo]);
00134 frac[ip] = (float)(RadPres1/pressure.pres_radiation_lines_curr);
00135
00136 ip = MIN2((long)NLINE-1,ip+1);
00137 }
00138 }
00139 }
00140 }
00141 }
00142 }
00143
00144
00145 for( i=1; i <= nLevel1; i++ )
00146 {
00147 if( TauLines[i].PopHi > 1e-30 )
00148 {
00149 RadPres1 = 5.551e-2*(powi(TauLines[i].EnergyWN/
00150 1.e6,4))*(TauLines[i].PopHi/TauLines[i].gHi)/
00151 (TauLines[i].PopLo/TauLines[i].gLo)*
00152 RT_LineWidth(&TauLines[i]);
00153 }
00154 else
00155 {
00156 RadPres1 = 0.;
00157 }
00158
00159 if( RadPres1 > pressure.pres_radiation_lines_curr*THRESH )
00160 {
00161 wl[ip] = TauLines[i].WLAng;
00162
00163
00164 chIonLbl(chLab[ip], &TauLines[i]);
00165 frac[ip] = (float)(RadPres1/pressure.pres_radiation_lines_curr);
00166
00167 ip = MIN2((long)NLINE-1,ip+1);
00168 }
00169 }
00170
00171 for( i=0; i < nWindLine; i++ )
00172 {
00173 if( TauLine2[i].IonStg < TauLine2[i].nelem+1-NISO )
00174 {
00175 if( TauLine2[i].PopHi > 1e-30 )
00176 {
00177 RadPres1 = 5.551e-2*(powi(TauLine2[i].EnergyWN/
00178 1.e6,4))*(TauLine2[i].PopHi/TauLine2[i].gHi)/
00179 (TauLine2[i].PopLo/TauLine2[i].gLo)*
00180 RT_LineWidth(&TauLine2[i]);
00181 }
00182 else
00183 {
00184 RadPres1 = 0.;
00185 }
00186
00187 if( RadPres1 > pressure.pres_radiation_lines_curr*THRESH )
00188 {
00189 wl[ip] = TauLine2[i].WLAng;
00190
00191
00192 chIonLbl(chLab[ip], &TauLine2[i]);
00193 frac[ip] = (float)(RadPres1/pressure.pres_radiation_lines_curr);
00194
00195 ip = MIN2((long)NLINE-1,ip+1);
00196 }
00197 }
00198 }
00199
00200 for( i=0; i < nHFLines; i++ )
00201 {
00202 if( HFLines[i].PopHi > 1e-30 )
00203 {
00204 RadPres1 = 5.551e-2*(powi(HFLines[i].EnergyWN/
00205 1.e6,4))*(HFLines[i].PopHi/HFLines[i].gHi)/
00206 (HFLines[i].PopLo/HFLines[i].gLo)*
00207 RT_LineWidth(&HFLines[i]);
00208 }
00209 else
00210 {
00211 RadPres1 = 0.;
00212 }
00213
00214 if( RadPres1 > pressure.pres_radiation_lines_curr*THRESH )
00215 {
00216 wl[ip] = HFLines[i].WLAng;
00217
00218
00219 chIonLbl(chLab[ip], &HFLines[i]);
00220 frac[ip] = (float)(RadPres1/pressure.pres_radiation_lines_curr);
00221
00222 ip = MIN2((long)NLINE-1,ip+1);
00223 }
00224 }
00225
00226
00227 RadPres1 = H2_RadPress();
00228 if( RadPres1 > pressure.pres_radiation_lines_curr*THRESH )
00229 {
00230 wl[ip] = 0;
00231
00232
00233 strcpy(chLab[ip], "H2 ");
00234 frac[ip] = (float)(RadPres1/pressure.pres_radiation_lines_curr);
00235
00236 ip = MIN2((long)NLINE-1,ip+1);
00237 }
00238
00239 for( i=0; i < nCORotate; i++ )
00240 {
00241 if( C12O16Rotate[i].PopHi > 1e-30 )
00242 {
00243 RadPres1 = 5.551e-2*(powi(C12O16Rotate[i].EnergyWN/
00244 1.e6,4))*(C12O16Rotate[i].PopHi/C12O16Rotate[i].gHi)/
00245 (C12O16Rotate[i].PopLo/C12O16Rotate[i].gLo)*
00246 RT_LineWidth(&C12O16Rotate[i]);
00247 }
00248 else
00249 {
00250 RadPres1 = 0.;
00251 }
00252
00253 if( RadPres1 > pressure.pres_radiation_lines_curr*THRESH )
00254 {
00255 wl[ip] = C12O16Rotate[i].WLAng;
00256
00257
00258 chIonLbl(chLab[ip], &C12O16Rotate[i]);
00259 frac[ip] = (float)(RadPres1/pressure.pres_radiation_lines_curr);
00260
00261 ip = MIN2((long)NLINE-1,ip+1);
00262 }
00263 }
00264
00265 for( i=0; i < nCORotate; i++ )
00266 {
00267 if( C13O16Rotate[i].PopHi > 1e-30 )
00268 {
00269 RadPres1 = 5.551e-2*(powi(C13O16Rotate[i].EnergyWN/
00270 1.e6,4))*(C13O16Rotate[i].PopHi/C13O16Rotate[i].gHi)/
00271 (C13O16Rotate[i].PopLo/C13O16Rotate[i].gLo)*
00272 RT_LineWidth(&C13O16Rotate[i]);
00273 }
00274 else
00275 {
00276 RadPres1 = 0.;
00277 }
00278
00279 if( RadPres1 > pressure.pres_radiation_lines_curr*THRESH )
00280 {
00281 wl[ip] = C13O16Rotate[i].WLAng;
00282
00283
00284 chIonLbl(chLab[ip], &C13O16Rotate[i]);
00285 frac[ip] = (float)(RadPres1/pressure.pres_radiation_lines_curr);
00286
00287 ip = MIN2((long)NLINE-1,ip+1);
00288 }
00289 }
00290
00291
00292
00293
00294 ASSERT( ip> 0);
00295
00296 spsort(
00297
00298 frac,
00299
00300 ip,
00301
00302 iperm,
00303
00304
00305 -1,
00306
00307 &ier);
00308
00309
00310 fprintf( ioQQQ, " P(Lines):" );
00311 for( i=0; i < MIN2(6,ip); i++ )
00312 {
00313 int ipline = iperm[i];
00314 fprintf( ioQQQ, "(%4.4s ", chLab[ipline]);
00315 prt_wl(ioQQQ, wl[ipline] );
00316 fprintf(ioQQQ," %.2f) ",frac[ipline]);
00317 }
00318
00319
00320 fprintf( ioQQQ, "\n" );
00321 }
00322
00323 DEBUG_EXIT( "PrtLinePres()" );
00324 return;
00325 }
00326