cloudy  trunk
parse_drive.cpp
Go to the documentation of this file.
1 /* This file is part of Cloudy and is copyright (C)1978-2013 by Gary J. Ferland and
2  * others. For conditions of distribution and use see copyright notice in license.txt */
3 /*ParseDrive parse the drive command - drive calls to various subs */
4 /*DrvCaseBHS allow user to query hydrogen A's, asks for up, low level, gives A, drive hyas */
5 /*DrvHyas allow user to query hydrogen A's, asks for up, low level, gives A, drive hyas */
6 /*dgaunt drive gaunt factor routines by letting user query values */
7 #include "cddefines.h"
8 #include "trace.h"
9 #include "hydro_bauman.h"
10 #include "hydroeinsta.h"
11 #include "thirdparty.h"
12 #include "phycon.h"
13 #include "atmdat.h"
14 #include "taulines.h"
15 #include "thermal.h"
16 #include "thirdparty.h"
17 #include "abund.h"
18 #include "rt.h"
19 #include "continuum.h"
20 #include "parser.h"
21 #include "physconst.h"
22 
23 /*dgaunt drive gaunt factor routines by letting user query values */
24 STATIC void dgaunt(void);
25 
26 /*DrvHyas allow user to query hydrogen A's, asks for up, low level, gives A, drive hyas */
27 STATIC void DrvHyas(void);
28 
29 /* drive escape probability routines */
30 STATIC void DrvEscP( void );
31 
32 /*DrvCaseBHS allow user to query hydrogen A's, asks for up, low level, gives A, drive hyas */
33 STATIC void DrvCaseBHS(void);
34 
35 void ParseDrive(Parser &p )
36 {
37  bool lgEOL;
38  long int n,
39  i;
40  double fac,
41  zed;
42 
43  DEBUG_ENTRY( "ParseDrive()" );
44 
45  /* NB evolve all following names to style DrvSomething */
46 
47  /* option to drive cloudy, which one? */
48  if( p.nMatch("FFMT") )
49  {
50  /* free format parser */
51  char chInput[INPUT_LINE_LENGTH];
52  fprintf( ioQQQ, " FFmtRead ParseDrive entered. Enter number.\n" );
53  lgEOL = false;
54  while( !lgEOL )
55  {
56  if( read_whole_line( chInput , (int)sizeof(chInput) , ioStdin ) == NULL )
57  {
58  fprintf( ioQQQ, " ParseDrive.dat error getting magic number\n" );
60  }
61  i = 1;
62  fac = FFmtRead(chInput,&i,sizeof(chInput),&lgEOL);
63  if( lgEOL )
64  {
65  fprintf( ioQQQ, " FFmtRead hit the EOL with no value, return=%10.2e\n",
66  fac );
67  break;
68  }
69  else if( fac == 0. )
70  {
71  break;
72  }
73  else
74  {
75  fprintf( ioQQQ, " FFmtRead returned with value%11.4e\n",
76  fac );
77  }
78  fprintf( ioQQQ, " Enter 0 to stop, or another value.\n" );
79  }
80  fprintf( ioQQQ, " FFmtRead ParseDrive exits.\n" );
81  }
82 
83  else if( p.nMatch("CASE") )
84  {
85  /* option to interpolate on Hummer and Storey case b hydrogenic emission routines */
86  DrvCaseBHS( );
87  }
88 
89  else if( p.nMatch("CDLI") )
90  {
91  /* drive cdLine to check that it finds all the right lines, routine is in lines.c */
92  trace.lgDrv_cdLine = true;
93  }
94 
95  else if( p.nMatch(" E1 ") )
96  {
97  // option to drive exponential integral routines
98  // first, special case given in Abramovitc & Stegan
99  double tau = 1.275;
100  for( i=0; i<50; ++i )
101  {
102  fprintf(ioQQQ,"tau\t%.3e\t exp-tau\t%.5e\t e1 tau\t%.5e \t e2 "
103  "\t%.5e \te2n %.5e \t e3\t%.5e \t e4\t%.5e \n",
104  tau , sexp(tau) , ee1(tau) , e2(tau ), expn(2, tau) ,
105  expn(3 , tau ), expn(4 , tau ) );
106  tau = pow( 10. , ((double)i/4. - 9.) );
107  }
109  }
110 
111  else if( p.nMatch("ESCA") )
112  {
113  /* option to drive escape probability routines */
114  DrvEscP( );
115  }
116 
117  else if( p.nMatch("HYAS") )
118  {
119  /* option to drive Jason's hydrogen transition probabilities */
120  DrvHyas();
121  }
122 
123  else if( p.nMatch("GAUN") )
124  {
125  /* drive gaunt factor routine */
126  dgaunt();
127  }
128 
129  else if( p.nMatch("POIN") )
130  {
131  /* later on, check cell pointers, centers, widths */
132  fprintf( ioQQQ, " Define entire model first, later I will ask for energies.\n" );
133  trace.lgPtrace = true;
134  }
135 
136  else if( p.nMatch("PUMP") )
137  {
138  char chInput[INPUT_LINE_LENGTH];
139  lgEOL = false;
140  fprintf( ioQQQ, " Continuum pump ParseDrive entered - Enter log tau\n" );
141  while( !lgEOL )
142  {
143  if( read_whole_line( chInput , (int)sizeof(chInput) , ioStdin ) == NULL )
144  {
145  fprintf( ioQQQ, " ParseDrive.dat error getting magic number\n" );
147  }
148  /* get tau */
149  i = 1;
150  fac = FFmtRead(chInput,&i,sizeof(chInput),&lgEOL);
151  if( lgEOL )
152  break;
153  fac = pow(10.,fac);
154  fprintf( ioQQQ, " Tau =%11.4e\n", fac );
155  (*TauDummy).Emis().TauIn() = (realnum)fac;
156  // not sure what this is supposed to do, but TauDummy.Hi->nelem() and therefore the doppler width are ill-defined here!
157  // just put 1 for hydrogen
158  fac = DrvContPump(*TauDummy,1.f);
159  fprintf( ioQQQ, " ContPump =%11.4e\n", fac );
160  fprintf( ioQQQ, " Enter null to stop, or another value.\n" );
161  }
162  fprintf( ioQQQ, " ContPump ParseDrive exits.\n" );
163  }
164 
165  else if( p.nMatch("STAR") )
166  {
167  char chInput[INPUT_LINE_LENGTH];
168  /* get starburst abundances */
169  for( i=0; i < 40; i++ )
170  {
171  zed = ((double)i+1.)/4. + 0.01;
172  sprintf( chInput, "starburst, zed=%10.4f", zed );
173  p.setline(chInput);
174  abund_starburst(p);
175  fprintf( ioQQQ, "%8.1e", zed );
176  for(n=0; n < LIMELM; n++)
177  fprintf( ioQQQ, "%8.1e", abund.solar[n] );
178  fprintf( ioQQQ, "\n" );
179  }
180  }
181 
182  else if( p.nMatch("VOIGT") )
183  {
184  /* create tab-delimited table giving Voigt function */
185  FILE *ioVOIGT = fopen("voigt.dat" , "w");
186  fprintf(ioVOIGT,"x \\ a");
187  const realnum DampLogMin = -4., DampLogMax = 4.01;
188  for( realnum damplog=DampLogMin; damplog<DampLogMax; ++damplog)
189  fprintf(ioVOIGT,"\tlog a=%.3e",pow(10.,damplog));
190  fprintf(ioVOIGT , "\n");
191 
192  for( realnum x=-2.; x<5.;x+=0.05)
193  {
194  realnum xlin = (realnum)pow(10.,x);
195  fprintf(ioVOIGT,"%.3e",xlin);
196  for( realnum damplog=DampLogMin; damplog<DampLogMax; ++damplog)
197  {
198  realnum xval[1];
199  xval[0] = xlin;
200  realnum damp = (realnum)pow(10. , damplog);
201  realnum yval[1];
202  VoigtH(damp,xval,yval,1);
203  fprintf(ioVOIGT , "\t%.3e",yval[0]);
204  }
205  fprintf(ioVOIGT , "\n");
206  }
207  fclose(ioVOIGT);
209  }
210 
211  else
212  {
213  fprintf( ioQQQ,
214  " Unrecognized key; keys are CASE, CDLIne, E1 , ESCApe, FFMTread, GAUNt, "
215  "HYAS, POINt, PUMP, STAR, and VOIGt. Sorry.\n" );
217  }
218  return;
219 }
220 
221 /*DrvEscP user queries escape probability routines, which return values */
222 STATIC void DrvEscP( void )
223 {
224  char chCard[INPUT_LINE_LENGTH];
225  bool lgEOL;
226  long i;
227  double tau;
228 
229  DEBUG_ENTRY( "DrvEscP()" );
230 
231  /* this routine is enterd with the command escape probability, and
232  * drives the escape probability routine to compare answers */
233  fprintf( ioQQQ, " Enter the log of the one-sided optical depth; line with no number to stop.\n" );
234 
235  lgEOL = false;
236  while( !lgEOL )
237  {
238  if( read_whole_line( chCard , (int)sizeof(chCard) , ioStdin ) == NULL )
239  {
240  break;
241  }
242 
243  i = 1;
244  tau = FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
245  if( lgEOL )
246  {
247  break;
248  }
249 
250  tau = pow(10.,tau);
251  fprintf( ioQQQ, "tau was %e\n", tau );
252  fprintf( ioQQQ, " ESCINC=%11.3e\n", esc_PRD_1side(tau,1e-4) );
253  fprintf( ioQQQ, " ESCCOM=%11.3e\n", esc_CRDwing_1side(tau,1e-4 ) );
254  fprintf( ioQQQ, " ESCA0K2=%11.3e\n", esca0k2(tau) );
255 
256  }
257  return;
258 }
259 
260 /*DrvCaseBHS allow user to query hydrogen A's, asks for up, low level, gives A, drive hyas */
261 STATIC void DrvCaseBHS(void)
262 {
263  char chCard[INPUT_LINE_LENGTH];
264  bool lgEOL,
265  lgHit;
266  long int i,
267  n1,
268  nelem ,
269  n2;
270  double Temperature,
271  Density;
272 
273  DEBUG_ENTRY( "DrvCaseBHS()" );
274 
275  /* this routine is entered with the command DRIVE CASEB, and
276  * interpolates on the Hummer & Storey case b data set */
277 
278  /* read in some external data files, but only if this is first call */
279  fprintf(ioQQQ," I will get needed H data files. This will take a second.\n");
280  atmdat_readin();
281 
282  {
283  /* following should be set true to print input lines */
284  /*@-redef@*/
285  enum {DEBUG_LOC=false};
286  /*@+redef@*/
287  if( DEBUG_LOC )
288  {
289  double xLyman , alpha;
290  long int ipHi;
291  nelem = 2;
292  Temperature = 2e4;
293  Density = 1e2;
294  for( ipHi=3; ipHi<25; ++ipHi )
295  {
296  double photons = (1./POW2(ipHi-1.)-1./POW2((double)ipHi) ) /(1.-1./ipHi/ipHi );
297  xLyman = atmdat_HS_caseB(1,ipHi, nelem,Temperature , Density , 'A' );
298  alpha = atmdat_HS_caseB(ipHi-1,ipHi, nelem,Temperature , Density , 'A' );
299  fprintf(ioQQQ,"%li\t%.3e\t%.3e\n", ipHi, xLyman/alpha*photons, photons );
300  }
302  }
303  }
304 
305  /* first get the charge, only H and He at present */
306  lgHit = false;
307  nelem = 0;
308  while( !lgHit )
309  {
310  fprintf( ioQQQ, " Enter atomic number of species, either 1(H) or 2(He).\n" );
311  if( read_whole_line( chCard , (int)sizeof(chCard) , ioStdin ) == NULL )
312  {
313  fprintf( ioQQQ, " error getting species \n" );
315  }
316 
317  i = 1;
318  nelem = (long int)FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
319  if( lgEOL || nelem< 1 || nelem > 2 )
320  {
321  fprintf( ioQQQ, " must be either 1 or 2!\n" );
322  }
323  else
324  {
325  lgHit = true;
326  }
327  }
328 
329  fprintf(ioQQQ," In the following temperatures <10 are log, >=10 linear.\n");
330  fprintf(ioQQQ," The density is always a log.\n");
331  fprintf(ioQQQ," The order of the quantum numbers do not matter.\n");
332  fprintf(ioQQQ," The smallest must not be smaller than 2,\n");
333  fprintf(ioQQQ," and the largest must not be larger than 25.\n");
334  fprintf(ioQQQ," Units of emissivity are erg cm^3 s^-1\n\n");
335  fprintf(ioQQQ," The limits of the HS tables are 2 <= n <= 25.\n");
336 
337  lgHit = true;
338  /* this is always true */
339  while( lgHit )
340  {
341  fprintf( ioQQQ, " Enter 4 numbers, temperature, density, 2 quantum numbers, null line stop.\n" );
342  if( read_whole_line( chCard , (int)sizeof(chCard) , ioStdin ) == NULL )
343  {
344  fprintf( ioQQQ, " Thanks for interpolating on the Hummer & Storey data set!\n" );
346  }
347 
348  i = 1;
349  Temperature = FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
350  if( lgEOL )
351  {
352  fprintf( ioQQQ, " error getting temperature!\n" );
353  break;
354  }
355 
356  /* log if less than 10 */
357  if( Temperature < 10. )
358  {
359  Temperature = pow(10., Temperature );
360  }
361  fprintf(ioQQQ," Temperature is %g\n", Temperature );
362 
363  Density = FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
364  if( lgEOL )
365  {
366  fprintf( ioQQQ, " error getting density!\n" );
367  break;
368  }
369  Density = pow(10., Density );
370  fprintf(ioQQQ," Density is %g\n", Density );
371 
372  /* these quantum numbers can be in any order */
373  n1 = (long)FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
374  if( lgEOL )
375  {
376  fprintf( ioQQQ, " error getting quantum number!\n" );
377  break;
378  }
379 
380  n2 = (long)FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
381  if( lgEOL )
382  {
383  fprintf( ioQQQ, " error getting quantum number!\n" );
384  break;
385  }
386 
387  if( MAX2( n1 , n2 ) > 25 )
388  {
389  fprintf( ioQQQ," The limits of the HS tables are 2 <= n <= 25. Sorry.\n");
390  break;
391  }
392 
393  fprintf( ioQQQ,
394  " 4pJ(%ld,%ld)/n_e n_p=%11.3e\n",
395  n1, n2,
396  atmdat_HS_caseB(n1,n2, nelem,Temperature , Density , 'B' ) );
397 
398  /* this is check that we were in bounds */
399 #if 0
400  {
401  long j;
402  double tempTable[33] = {
403  11870.,12490.,12820.,
404  11060.,17740.,12560.,
405  16390.,16700.,11360.,
406  10240.,20740.,12030.,
407  14450.,19510.,12550.,
408  16470.,16560.,12220.,
409  15820.,12960.,10190.,
410  12960.,14060.,12560.,
411  11030.,10770.,13360.,
412  10780.,11410.,11690.,
413  12500.,13190.,21120. };
414  double edenTable[33] = {
415  10.,270.,80.,10.,70.,
416  110.,200.,10.,40.,90.,
417  340.,80.,60.,340.,30.,
418  120.,10.,50.,450.,30.,
419  180.,20.,170.,60.,20.,
420  40.,30.,20.,100.,130.,
421  10.,10.,110. };
422 
423 
424  for( j=0; j<33; j++ )
425  {
426  double halpha, hbeta, hgamma;
427 
428  halpha = atmdat_HS_caseB(2,3, 1,tempTable[j] , edenTable[j] , 'B' );
429  hbeta = atmdat_HS_caseB(2,4, 1,tempTable[j] , edenTable[j] , 'B' );
430  hgamma = atmdat_HS_caseB(2,5, 1,tempTable[j] , edenTable[j] , 'B' );
431 
432  fprintf( ioQQQ, "%e\t%e\t%e\t%e\n",
433  tempTable[j],
434  edenTable[j],
435  halpha/hbeta,
436  hgamma/hbeta );
437  }
438  }
439 #endif
440  }
441 
442  fprintf( ioQQQ, " Thanks for interpolating on the Hummer & Storey data set!\n" );
444 
445 }
446 
447 /*DrvHyas allow user to query hydrogen A's, asks for up, low level, gives A, drive hyas */
448 STATIC void DrvHyas(void)
449 {
450  char chCard[INPUT_LINE_LENGTH];
451  bool lgEOL;
452  long int i, nHi, lHi, nLo, lLo;
453 
454  DEBUG_ENTRY( "DrvHyas()" );
455 
456  /* this routine is entered with the command DRIVE HYAS, and
457  * drives Jason's hydrogen einstein A routines */
458 
459  nHi = 1;
460  /* nHi never lt 1 */
461  while( nHi != 0 )
462  {
463  fprintf( ioQQQ, " Enter four quantum numbers (n, l, n', l'), null line to stop.\n" );
464  if( read_whole_line( chCard , (int)sizeof(chCard) , ioStdin ) == NULL )
465  {
466  fprintf( ioQQQ, " error getting drvhyas \n" );
468  }
469 
470  i = 1;
471  nHi = (long int)FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
472  if( lgEOL )
473  break;
474 
475  lHi = (long int)FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
476  if( lgEOL )
477  {
478  fprintf( ioQQQ, " must be four numbers!\n" );
479  break;
480  }
481 
482  if( lHi >= nHi )
483  {
484  fprintf( ioQQQ, " l must be less than n!\n" );
485  break;
486  }
487 
488  nLo = (long int)FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
489  if( lgEOL )
490  {
491  fprintf( ioQQQ, " must be four numbers!\n" );
492  break;
493  }
494 
495  lLo = (long int)FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
496  if( lgEOL )
497  {
498  fprintf( ioQQQ, " must be four numbers!\n" );
499  break;
500  }
501 
502  if( lLo >= nLo )
503  {
504  fprintf( ioQQQ, " l must be less than n!\n" );
505  break;
506  }
507 
508  if( nLo > nHi )
509  {
510  long nTemp, lTemp;
511 
512  /* swap hi and lo */
513  nTemp = nLo;
514  lTemp = lLo;
515  nLo = nHi;
516  lLo = lHi;
517  nHi = nTemp;
518  lHi = lTemp;
519  }
520 
521  fprintf( ioQQQ, " A(%3ld,%3ld->%3ld,%3ld)=%11.3e\n",
522  nHi, lHi, nLo, lLo,
523  H_Einstein_A( nHi, lHi, nLo, lLo, 1 ) );
524 
525  }
526  fprintf( ioQQQ, " Driver exits, enter next line.\n" );
527 
528  return;
529 }
530 
531 /*dgaunt drive gaunt factor routines by letting user query values */
532 STATIC void dgaunt(void)
533 {
534  char chCard[INPUT_LINE_LENGTH];
535  bool lgEOL;
536  int inputflag;
537  long int i,
538  ierror;
539  realnum enerlin[1];
540  double SaveTemp;
541  double z,mygaunt=0.;
542  double loggamma2, logu;
543 
544  DEBUG_ENTRY( "dgaunt()" );
545 
546  SaveTemp = phycon.te;
547 
548  /* this routine is entered with the command DRIVE GAUNT, and
549  * drives the gaunt factor routine to check range
550  * */
551  fprintf( ioQQQ, " Enter 0 to input temp, energy, and net charge, or 1 for u and gamma**2.\n" );
552  if( read_whole_line( chCard , (int)sizeof(chCard) , ioStdin ) == NULL )
553  {
554  fprintf( ioQQQ, " dgaunt error getting magic number\n" );
556  }
557  i = 1;
558  inputflag = (int)FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
559 
560  if( inputflag == 0 )
561  {
562  fprintf( ioQQQ, " Enter the temperature (log if <=10), energy (Ryd), and net charge. Null line to stop.\n" );
563  /* >>chng 96 july 07, got rid of statement labels replacing with do while
564  * */
565  ierror = 0;
566  while( ierror == 0 )
567  {
568  if( read_whole_line( chCard , (int)sizeof(chCard) , ioStdin ) == NULL )
569  {
570  fprintf( ioQQQ, " dgaunt error getting magic number\n" );
572  }
573  i = 1;
574  phycon.alogte = FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
575  /* the line may be trash but ierror will pick it up */
576  if( lgEOL )
577  {
578  fprintf( ioQQQ, " Gaunt driver exits, enter next line.\n" );
579  break;
580  }
581  /* numbers less than or equal to 10 are the log of the temperature */
582  double TeNew;
583  if( phycon.alogte > 10. )
584  {
585  TeNew = phycon.alogte;
586  }
587  else
588  {
589  TeNew = pow(10.,phycon.alogte);
590  }
591  TempChange(TeNew , false);
592 
593  enerlin[0] = (realnum)FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
594  if( lgEOL || enerlin[0] == 0. )
595  {
596  fprintf( ioQQQ, " Sorry, but there should be two more numbers, energy and charge.\n" );
597  }
598 
599  z = (double)FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
600  if( lgEOL || z == 0. )
601  {
602  fprintf( ioQQQ, " Sorry, but there should be a third number, charge.\n" );
603  }
604 
605  /* This is non-thermally averaged gaunt factors. */
606  mygaunt = cont_gaunt_calc( (double)phycon.te, z, enerlin[0] );
607 
608  fprintf( ioQQQ, " Using my routine, Gff= \t" );
609  fprintf( ioQQQ, "%11.3e\n", mygaunt );
610 
611  }
612  }
613  else
614  {
615  /* this routine is entered with the command DRIVE GAUNT, and
616  * drives the gaunt factor routine to check range
617  * */
618  fprintf( ioQQQ, " Enter log u and log gamma2. Null line to stop.\n" );
619  ierror = 0;
620  while( ierror == 0 )
621  {
622  if( read_whole_line( chCard , (int)sizeof(chCard) , ioStdin ) == NULL )
623  {
624  fprintf( ioQQQ, " dgaunt error getting magic number\n" );
626  }
627  i = 1;
628  logu = FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
629  /* the line may be trash but ierror will pick it up */
630  if( lgEOL )
631  {
632  fprintf( ioQQQ, " Gaunt driver exits, enter next line.\n" );
633  break;
634  }
635 
636  loggamma2 = FFmtRead(chCard,&i,sizeof(chCard),&lgEOL);
637  if( lgEOL )
638  {
639  fprintf( ioQQQ, " Sorry, but there should be another numbers, log gamma2.\n" );
640  }
641 
642  /* This is my attempt to calculate non-thermally averaged gaunt factors. */
643  mygaunt = cont_gaunt_calc( TE1RYD/pow(10.,loggamma2), 1., pow(10.,logu-loggamma2) );
644 
645  TempChange(TE1RYD/pow(10.,loggamma2) , false);
646 
647  fprintf( ioQQQ, " Using my routine, Gaunt factor is" );
648  fprintf( ioQQQ, "%11.3e\n", mygaunt );
649  }
650  }
651 
652  TempChange(SaveTemp , false);
653  return;
654 }
thermal.h
Parser::nMatch
bool nMatch(const char *chKey) const
Definition: parser.h:135
H_Einstein_A
double H_Einstein_A(long int n, long int l, long int np, long int lp, long int iz)
Definition: hydro_bauman.cpp:2324
cont_gaunt_calc
double cont_gaunt_calc(double temp, double z, double photon)
Definition: cont_gaunt.cpp:26
ioQQQ
FILE * ioQQQ
Definition: cddefines.cpp:7
TempChange
void TempChange(double TempNew, bool lgForceUpdate)
Definition: temp_change.cpp:51
FFmtRead
double FFmtRead(const char *chCard, long int *ipnt, long int last, bool *lgEOL)
Definition: service.cpp:381
VoigtH
void VoigtH(realnum a, const realnum v[], realnum y[], int n)
Definition: thirdparty.h:350
realnum
float realnum
Definition: cddefines.h:103
DrvCaseBHS
STATIC void DrvCaseBHS(void)
Definition: parse_drive.cpp:261
STATIC
#define STATIC
Definition: cddefines.h:97
hydro_bauman.h
abund.h
ioStdin
FILE * ioStdin
Definition: cddefines.cpp:8
thirdparty.h
phycon
t_phycon phycon
Definition: phycon.cpp:6
trace.h
dgaunt
STATIC void dgaunt(void)
Definition: parse_drive.cpp:532
DrvEscP
STATIC void DrvEscP(void)
Definition: parse_drive.cpp:222
EXIT_SUCCESS
#define EXIT_SUCCESS
Definition: cddefines.h:138
atmdat.h
atmdat_HS_caseB
double atmdat_HS_caseB(long int iHi, long int iLo, long int iZ, double TempIn, double DenIn, char chCase)
Definition: atmdat_HS_caseb.cpp:7
POW2
#define POW2
Definition: cddefines.h:929
ee1
double ee1(double x)
Definition: service.cpp:312
sexp
sys_float sexp(sys_float x)
Definition: service.cpp:914
EXIT_FAILURE
#define EXIT_FAILURE
Definition: cddefines.h:140
expn
double expn(int n, double x)
Definition: thirdparty.cpp:2121
esc_CRDwing_1side
double esc_CRDwing_1side(double tau, double a)
Definition: rt_escprob.cpp:221
Parser
Definition: parser.h:31
t_trace::lgPtrace
bool lgPtrace
Definition: trace.h:118
trace
t_trace trace
Definition: trace.cpp:5
cddefines.h
abund_starburst
void abund_starburst(Parser &p)
Definition: abund_starburst.cpp:11
e2
double e2(double t)
Definition: service.cpp:299
TauDummy
TransitionProxy::iterator TauDummy
Definition: taulines.cpp:60
t_abund::solar
realnum solar[LIMELM]
Definition: abund.h:65
MAX2
#define MAX2
Definition: cddefines.h:782
LIMELM
const int LIMELM
Definition: cddefines.h:258
esc_PRD_1side
double esc_PRD_1side(double tau, double a)
Definition: rt_escprob.cpp:97
t_trace::lgDrv_cdLine
bool lgDrv_cdLine
Definition: trace.h:121
cdEXIT
#define cdEXIT(FAIL)
Definition: cddefines.h:434
atmdat_readin
void atmdat_readin(void)
Definition: atmdat_readin.cpp:149
abund
t_abund abund
Definition: abund.cpp:5
INPUT_LINE_LENGTH
const int INPUT_LINE_LENGTH
Definition: cddefines.h:254
Parser::setline
void setline(const char *const card)
Definition: parser.h:69
rt.h
parser.h
physconst.h
DrvHyas
STATIC void DrvHyas(void)
Definition: parse_drive.cpp:448
t_phycon::alogte
double alogte
Definition: phycon.h:82
read_whole_line
char * read_whole_line(char *chLine, int nChar, FILE *ioIN)
Definition: service.cpp:70
taulines.h
phycon.h
TE1RYD
const UNUSED double TE1RYD
Definition: physconst.h:183
continuum.h
esca0k2
double esca0k2(double taume)
Definition: rt_escprob.cpp:490
t_phycon::te
double te
Definition: phycon.h:11
hydroeinsta.h
DEBUG_ENTRY
#define DEBUG_ENTRY(funcname)
Definition: cddefines.h:684
DrvContPump
double DrvContPump(const TransitionProxy &t, realnum DopplerWidth)
Definition: cont_pump.cpp:40
ParseDrive
void ParseDrive(Parser &p)
Definition: parse_drive.cpp:35