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