22 ASSERT( nTemps != 0 && nTrans != 0 );
27 if( chLine[0] ==
'!' || chLine[0] ==
'#' || chLine[0] ==
'\n' )
32 ASSERT( strlen( chLine ) > 0 );
36 char *chColltemp = strtok(chLine,
" \t\n");
37 while( chColltemp != NULL )
39 coll_rate_table.
temps.push_back( atof(chColltemp) );
40 chColltemp = strtok(NULL,
" \t\n");
44 nTemps = coll_rate_table.
temps.size();
46 ASSERT( (
unsigned)nTemps == coll_rate_table.
temps.size() );
51 for(
long ipHi=0; ipHi<nMolLevs; ipHi++ )
54 for(
long ipLo=0; ipLo<nMolLevs; ipLo++ )
66 if( chLine[0] ==
'!' || chLine[0] ==
'#' || chLine[0] ==
'\n' )
70 long ipHi = -1, ipLo = -1;
71 (*GetIndices)( ipHi, ipLo, chLine, i );
75 if( ipHi == -1 && ipLo == -1 )
79 if( ipLo >= nMolLevs || ipHi >= nMolLevs )
81 if( nTrans > 0 && ipTrans == nTrans )
90 ASSERT( ipLo == nMolLevs - 1);
100 for(
long j = 0; j < nTemps; ++j )
102 coll_rate_table.
collrates[ipHi][ipLo][j] =
103 (double)
FFmtRead( chLine, &i,
sizeof(chLine), &lgEOL );
108 FFmtRead( chLine, &i,
sizeof(chLine), &lgEOL );
112 enum {DEBUG_LOC=
false};
115 printf(
"The values of up and lo are %ld & %ld \n",ipHi,ipLo);
116 printf(
"The collision rates are");
117 for(
long i = 0; i < nTemps; ++i )
119 printf(
"\n %e", coll_rate_table.
collrates[ipHi][ipLo][i]);
125 if( nTrans > 0 && ipTrans == nTrans )
130 ASSERT( ipTrans == nTrans );
138 double ret_collrate = 0.;
140 if( rate_table.
temps.size() == 0 )
145 if( ftemp < rate_table.
temps[0] )
147 ret_collrate = rate_table.
collrates[ipHi][ipLo][0];
149 else if( ftemp > rate_table.
temps.back() )
151 ret_collrate = rate_table.
collrates[ipHi][ipLo][ rate_table.
temps.size()-1 ];
153 else if( rate_table.
temps.size() == 1 )
156 ret_collrate = rate_table.
collrates[ipHi][ipLo][0];
162 rate_table.
temps.size(),
167 return(ret_collrate);
double InterpCollRate(const CollRateCoeffArray &rate_table, const long &ipHi, const long &ipLo, const double &ftemp)
double ***** OP_Helike_Xsectn
double **** HS_He1_Xsectn
double **** HS_He1_Energy
void ReadCollisionRateTable(CollRateCoeffArray &coll_rate_table, FILE *io, FunctPtr GetIndices, long nMolLevs, long nTemps, long nTrans)
long **** OP_Helike_NumPts
double ***** OP_Helike_Energy
struct t_CollRatesArray CollRateCoeffArray
const int INPUT_LINE_LENGTH
double FFmtRead(const char *chCard, long int *ipnt, long int last, bool *lgEOL)
char * read_whole_line(char *chLine, int nChar, FILE *ioIN)
#define DEBUG_ENTRY(funcname)
void reserve(size_type i1)
multi_arr< double, 3 > collrates
double linint(const double x[], const double y[], long n, double xval)