1/* PR target/7784 */
2/* Originator: Peter van Hoof <p.van-hoof@qub.ac.uk> */
3/* { dg-do compile { target sparc-*-* } } */
4/* { dg-options "-O2 -mcpu=ultrasparc" } */
5
6typedef struct
7{
8  float EnergyErg;
9  float ots;
10} EmLine;
11
12extern const int ipH_LIKE ;
13extern const int ipHYDROGEN ;
14extern const int ipH1s;
15extern const int ipH2s;
16extern const int ipH2p;
17
18extern EmLine ****EmisLines;
19
20typedef struct
21{
22  long n;
23  long s;
24  long l;
25} Elevels;
26
27extern struct t_iso
28{
29  float ***Pop2Ion;
30  long int numLevels[2][30L];
31} iso;
32
33extern struct t_LineSave
34{
35  long int nsum;
36  long int ndsum;
37  long int nComment;
38  long int npxdd;
39  long int ipass;
40  char chHoldComments[10][200];
41} LineSave;
42
43extern struct t_hydro
44{
45  int lgHydEmiss;
46  float **pestrk ;
47} hydro;
48
49extern struct t_dense
50{
51  double DensityLaw[10];
52  float frad[500];
53  float fhden[500];
54  float den0;
55  double eden;
56} dense;
57
58extern struct t_abund
59{
60  float xIonFracs[30L +3][30L +1];
61} abund;
62
63extern struct t_CaseBHS
64{
65  long int nDensity[2][8] , ntemp[2][8] , ncut[2][8] ;
66  int lgHCaseBOK[2][8];
67} CaseBHS ;
68
69extern struct t_smbeta
70{
71  float SimHBeta,
72    cn4861,
73    cn1216,
74    sv4861,
75    sv1216;
76} smbeta;
77
78extern struct t_phycon
79{
80  float te;
81} phycon;
82
83
84extern struct t_sphere
85{
86  int lgSphere;
87  float covgeo;
88} sphere;
89
90void linadd(double xInten, float wavelength, char *chLab, char chInfo);
91
92extern struct t_radiusVar
93{
94  int lgDrNeg;
95  double dVeff;
96} radius;
97
98void lines_hydro(void)
99{
100  long int i, nelem, ipHi, ipLo;
101  double hbetab, em , EmisFac, pump;
102  char chLabel[5];
103
104  linadd(abund.xIonFracs[ipHYDROGEN][1]*iso.Pop2Ion[ipH_LIKE][ipHYDROGEN][3]*hydro.pestrk[3][2]*3.025e-12, 6563,"Strk",'i');
105
106  linadd(abund.xIonFracs[ipHYDROGEN][1]*iso.Pop2Ion[ipH_LIKE][ipHYDROGEN][4]*hydro.pestrk[4][2]*4.084e-12, 4861,"Strk",'i');
107
108  linadd(abund.xIonFracs[ipHYDROGEN][1]*iso.Pop2Ion[ipH_LIKE][ipHYDROGEN][4]*hydro.pestrk[4][3]*1.059e-12, 18751,"Strk",'i');
109
110  linadd(abund.xIonFracs[ipHYDROGEN][1]*iso.Pop2Ion[ipH_LIKE][ipHYDROGEN][5]*hydro.pestrk[5][4]*4.900e-13, 40512,"Strk",'i');
111
112  ((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)));
113
114  linadd(EmisLines[ipH_LIKE][ipHYDROGEN][3][ipH2s].ots*EmisLines[ipH_LIKE][ipHYDROGEN][3][ipH2s].EnergyErg, 6563,"Dest",'i');
115
116  linadd(EmisLines[ipH_LIKE][ipHYDROGEN][5][4].ots*EmisLines[ipH_LIKE][ipHYDROGEN][5][4].EnergyErg,40516, "Dest",'i');
117
118  smbeta.SimHBeta = smbeta.SimHBeta/(float)radius.dVeff*sphere.covgeo;
119
120  linadd(smbeta.SimHBeta,4861,"Q(H)",'i');
121
122  smbeta.SimHBeta = smbeta.SimHBeta*(float)radius.dVeff/sphere.covgeo;
123
124  for( nelem=0; nelem < 30L; nelem++ )
125  {
126    int iCase;
127    for( iCase=0; iCase<2; ++iCase )
128    {
129      char chAB[2]={'A','B'};
130      char chLab[5]="Ca  ";
131
132      for( ipLo=1+iCase; ipLo<(((6)<(iso.numLevels[ipH_LIKE][nelem])) ? (6) : (5)); ++ipLo )
133      {
134        for( ipHi=ipLo+1; ipHi< (((ipLo+5)<(iso.numLevels[ipH_LIKE][nelem])) ? (ipLo+5) : (iso.numLevels[ipH_LIKE][nelem])); ++ipHi )
135        {
136          float wl;
137
138          hbetab = HSRate( ipHi,ipLo , nelem+1, phycon.te , dense.eden, chAB[iCase] );
139          if( hbetab<=0. )
140            CaseBHS.lgHCaseBOK[iCase][nelem] = 0;
141
142          if( !hydro.lgHydEmiss )
143            hbetab *= abund.xIonFracs[nelem][nelem+1]*dense.eden;
144
145         linadd(hbetab,wl,chLab,'i' );
146        }
147      }
148    }
149  }
150}
151