155 lines
3.5 KiB
C
155 lines
3.5 KiB
C
/* PR target/7784 */
|
|
/* Originator: Peter van Hoof <p.van-hoof@qub.ac.uk> */
|
|
|
|
/* { dg-do compile } */
|
|
/* { dg-options "-O2 -mcpu=ultrasparc" } */
|
|
|
|
void __assert (const char *, const char *, int);
|
|
double HSRate(long, long, long, double, double, int);
|
|
|
|
typedef struct
|
|
{
|
|
float EnergyErg;
|
|
float ots;
|
|
} EmLine;
|
|
|
|
extern const int ipH_LIKE ;
|
|
extern const int ipHYDROGEN ;
|
|
extern const int ipH1s;
|
|
extern const int ipH2s;
|
|
extern const int ipH2p;
|
|
|
|
extern EmLine ****EmisLines;
|
|
|
|
typedef struct
|
|
{
|
|
long n;
|
|
long s;
|
|
long l;
|
|
} Elevels;
|
|
|
|
extern struct t_iso
|
|
{
|
|
float ***Pop2Ion;
|
|
long int numLevels[2][30L];
|
|
} iso;
|
|
|
|
extern struct t_LineSave
|
|
{
|
|
long int nsum;
|
|
long int ndsum;
|
|
long int nComment;
|
|
long int npxdd;
|
|
long int ipass;
|
|
char chHoldComments[10][200];
|
|
} LineSave;
|
|
|
|
extern struct t_hydro
|
|
{
|
|
int lgHydEmiss;
|
|
float **pestrk ;
|
|
} hydro;
|
|
|
|
extern struct t_dense
|
|
{
|
|
double DensityLaw[10];
|
|
float frad[500];
|
|
float fhden[500];
|
|
float den0;
|
|
double eden;
|
|
} dense;
|
|
|
|
extern struct t_abund
|
|
{
|
|
float xIonFracs[30L +3][30L +1];
|
|
} abund;
|
|
|
|
extern struct t_CaseBHS
|
|
{
|
|
long int nDensity[2][8] , ntemp[2][8] , ncut[2][8] ;
|
|
int lgHCaseBOK[2][8];
|
|
} CaseBHS ;
|
|
|
|
extern struct t_smbeta
|
|
{
|
|
float SimHBeta,
|
|
cn4861,
|
|
cn1216,
|
|
sv4861,
|
|
sv1216;
|
|
} smbeta;
|
|
|
|
extern struct t_phycon
|
|
{
|
|
float te;
|
|
} phycon;
|
|
|
|
|
|
extern struct t_sphere
|
|
{
|
|
int lgSphere;
|
|
float covgeo;
|
|
} sphere;
|
|
|
|
void linadd(double xInten, float wavelength, char *chLab, char chInfo);
|
|
|
|
extern struct t_radiusVar
|
|
{
|
|
int lgDrNeg;
|
|
double dVeff;
|
|
} radius;
|
|
|
|
void lines_hydro(void)
|
|
{
|
|
long int i, nelem, ipHi, ipLo;
|
|
double hbetab, em , EmisFac, pump;
|
|
char chLabel[5];
|
|
|
|
linadd(abund.xIonFracs[ipHYDROGEN][1]*iso.Pop2Ion[ipH_LIKE][ipHYDROGEN][3]*hydro.pestrk[3][2]*3.025e-12, 6563,"Strk",'i');
|
|
|
|
linadd(abund.xIonFracs[ipHYDROGEN][1]*iso.Pop2Ion[ipH_LIKE][ipHYDROGEN][4]*hydro.pestrk[4][2]*4.084e-12, 4861,"Strk",'i');
|
|
|
|
linadd(abund.xIonFracs[ipHYDROGEN][1]*iso.Pop2Ion[ipH_LIKE][ipHYDROGEN][4]*hydro.pestrk[4][3]*1.059e-12, 18751,"Strk",'i');
|
|
|
|
linadd(abund.xIonFracs[ipHYDROGEN][1]*iso.Pop2Ion[ipH_LIKE][ipHYDROGEN][5]*hydro.pestrk[5][4]*4.900e-13, 40512,"Strk",'i');
|
|
|
|
((void)((LineSave.ipass <1 || EmisLines[ipH_LIKE][ipHYDROGEN][ipH2p][ipH1s].ots>= 0.) || (__assert("LineSave.ipass <1 || EmisLines[ipH_LIKE][ipHYDROGEN][ipH2p][ipH1s].ots>= 0.", "lines_hydro.c", 118), 0)));
|
|
|
|
linadd(EmisLines[ipH_LIKE][ipHYDROGEN][3][ipH2s].ots*EmisLines[ipH_LIKE][ipHYDROGEN][3][ipH2s].EnergyErg, 6563,"Dest",'i');
|
|
|
|
linadd(EmisLines[ipH_LIKE][ipHYDROGEN][5][4].ots*EmisLines[ipH_LIKE][ipHYDROGEN][5][4].EnergyErg,40516, "Dest",'i');
|
|
|
|
smbeta.SimHBeta = smbeta.SimHBeta/(float)radius.dVeff*sphere.covgeo;
|
|
|
|
linadd(smbeta.SimHBeta,4861,"Q(H)",'i');
|
|
|
|
smbeta.SimHBeta = smbeta.SimHBeta*(float)radius.dVeff/sphere.covgeo;
|
|
|
|
for( nelem=0; nelem < 30L; nelem++ )
|
|
{
|
|
int iCase;
|
|
for( iCase=0; iCase<2; ++iCase )
|
|
{
|
|
char chAB[2]={'A','B'};
|
|
char chLab[5]="Ca ";
|
|
|
|
for( ipLo=1+iCase; ipLo<(((6)<(iso.numLevels[ipH_LIKE][nelem])) ? (6) : (5)); ++ipLo )
|
|
{
|
|
for( ipHi=ipLo+1; ipHi< (((ipLo+5)<(iso.numLevels[ipH_LIKE][nelem])) ? (ipLo+5) : (iso.numLevels[ipH_LIKE][nelem])); ++ipHi )
|
|
{
|
|
float wl;
|
|
|
|
hbetab = HSRate( ipHi,ipLo , nelem+1, phycon.te , dense.eden, chAB[iCase] );
|
|
if( hbetab<=0. )
|
|
CaseBHS.lgHCaseBOK[iCase][nelem] = 0;
|
|
|
|
if( !hydro.lgHydEmiss )
|
|
hbetab *= abund.xIonFracs[nelem][nelem+1]*dense.eden;
|
|
|
|
linadd(hbetab,wl,chLab,'i' );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|