cloudy  trunk
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
parse_stop.cpp
Go to the documentation of this file.
1 /* This file is part of Cloudy and is copyright (C)1978-2017 by Gary J. Ferland and
2  * others. For conditions of distribution and use see copyright notice in license.txt */
3 /*ParseStop parse the stop command */
4 #include "cddefines.h"
5 #include "optimize.h"
6 #include "phycon.h"
7 #include "predcont.h"
8 #include "rfield.h"
9 #include "geometry.h"
10 #include "iterations.h"
11 #include "stopcalc.h"
12 #include "input.h"
13 #include "parser.h"
14 #include "flux.h"
15 #include "service.h"
16 
17 void ParseStop(Parser &p)
18 {
19  long int j;
20 
21  double effcol,
22  tread;
23 
24  DEBUG_ENTRY( "ParseStop()" );
25 
26  /* time option, for stopping time dependent calculations, used to stop
27  * iterations rather than zones. Only some stop commands have this option */
28  bool lgStopZone = true;
29  if( p.nMatch("TIME") )
30  lgStopZone = false;
31 
32  if( p.nMatch("TEMP") )
33  {
34  double a = p.FFmtRead();
35 
36  if( p.lgEOL() && !p.nMatch(" OFF") )
37  {
38  p.NoNumb("temperature");
39  }
40 
41  /* off option disables this stopping criterion */
42  if( p.lgEOL() && p.nMatch(" OFF") )
43  {
44  /* this is special case for ending temperature - do not use -
45  * but will still stop if Te falls below TeLowest, the lowest
46  * possible temperature */
47  if( lgStopZone )
48  StopCalc.TempLoStopZone = -1.f;
49  else
51  }
52  else
53  {
54  /* lowest electron temperature allowed before stopping
55  * assumed to be the log of the temperature if <10
56  * optional keyword LINEAR forces linear */
57  if( a <= 10. && !p.nMatch("LINE") )
58  {
59  tread = exp10(a);
60  }
61  else
62  {
63  tread = a;
64  }
65 
66  /* tread is linear temperature*/
67  if( tread < phycon.TEMP_LIMIT_LOW )
68  {
69  fprintf( ioQQQ,
70  " Temperatures below %.2e K not allowed. Reset to lowest value."
71  " I am doing this myself.\n" ,
73  /* set slightly off extreme limit for safety */
74  tread = phycon.TEMP_LIMIT_LOW*1.01;
75  }
76  else if( tread > phycon.TEMP_LIMIT_HIGH )
77  {
78  fprintf( ioQQQ,
79  " Temperatures is above %.2e K not allowed. Reset to highest value."
80  " I am doing this myself.\n" ,
82  /* set slightly off extreme limit for safety */
83  tread = phycon.TEMP_LIMIT_HIGH*0.99;
84  }
85 
86  if( p.nMatch("EXCE") )
87  {
88  /* option for this to be highest allowed temperature,
89  * stop temperate exceeds */
90  if( lgStopZone )
92  else
94  }
95  else
96  {
97  /* this is ending temperature - we stop if kinetic temperature
98  * falls below this */
99  if( lgStopZone )
101  else
103  }
104  }
105  }
106 
107  /* stop at 21cm line center optical depth */
108  else if( p.nMatch("OPTI") && p.nMatch("21CM") )
109  {
110  /* default is for number to be log of optical depth */
111  bool lgLOG = true;
112  if( p.nMatch("LINE") )
113  {
114  /* force it to be linear not log */
115  lgLOG = false;
116  }
117  j = (long int)p.FFmtRead();
118  if( j!=21 )
119  {
120  fprintf( ioQQQ, " First number on STOP 21CM OPTICAL DEPTH command must be 21\n" );
122  }
123  /* now get the next number, which is the optical depth */
124  double a = (long int)p.FFmtRead();
125 
126  /* tau must be a log, and second number is energy where tau specified */
127  if( lgLOG )
128  {
130  }
131  else
132  {
133  StopCalc.tauend = (realnum)a;
134  }
135  /* this flag says that 21cm line optical depth is the stop quantity */
136  StopCalc.lgStop21cm = true;
137  }
138  /* stop optical depth at some energy */
139  else if( p.nMatch("OPTI") )
140  {
141  double a = p.FFmtRead();
142 
143  if( p.lgEOL() && !p.nMatch(" OFF") )
144  {
145  p.NoNumb("optical depth");
146  }
147 
148  /* default is for number to be log of optical depth */
149  bool lgLOG = true;
150  if( p.nMatch("LINE") )
151  {
152  /* force it to be linear not log */
153  lgLOG = false;
154  }
155 
156  if( a > 37. )
157  {
158  fprintf( ioQQQ, " optical depth too big\n" );
160  }
161 
162  /* tau entered as a log unless liner specified */
163  if( lgLOG )
164  {
166  }
167  else
168  {
169  StopCalc.tauend = (realnum)a;
170  }
171 
172  /* energy where tau specified */
174 
175  if( p.lgEOL() )
176  {
177  if( p.nMatch("LYMA") )
178  {
179  /* largest Lyman limit optical depth */
180  StopCalc.taunu = 1.;
181  }
182  else if( p.nMatch("BALM") )
183  {
184  /* stop at this Balmer continuum optical depth */
185  StopCalc.taunu = 0.25;
186  }
187  else
188  {
189  fprintf( ioQQQ, " There must be a second number, the energy in Ryd. Sorry.\n" );
191  }
192  }
193 
194  else
195  {
196  /* if second number is negative then log of energy in rydbergs */
197  if( StopCalc.taunu < 0. )
198  {
200  }
201 
202  /* check that energy is within bounds of code */
204  {
205  fprintf( ioQQQ, " The energy must be in the range %10.2e to %10.2e. It was %10.2e. Sorry.\n",
208  }
209  }
210 
211  /* vary option */
212  if( optimize.lgVarOn )
213  {
214  strcpy( optimize.chVarFmt[optimize.nparm], "STOP OPTICAL DEPTH = %f LOG AT %f RYD" );
215  /* pointer to where to write */
219  optimize.vincr[optimize.nparm] = 0.5;
221  ++optimize.nparm;
222  }
223  }
224 
225  /* stop optical depth at extinction in V filter */
226  else if( p.nMatch(" AV ") )
227  {
228  double a = p.FFmtRead();
229 
230  if( p.lgEOL() && !p.nMatch(" OFF") )
231  {
232  p.NoNumb("optical depth in V");
233  }
234  /* default is for number to be A_V, log if negative */
235  if( a<=0. )
236  {
237  a = exp10(a);
238  }
239  /* A_V can be for either point or extended source, difference is (1-g) multiplied by scat opacity
240  * if keyword point occurs then for point source, otherwise for extended source */
241  if( p.nMatch("EXTE" ) )
242  {
244  }
245  else
246  {
247  /* default is point, as measured in ism work */
249  }
250  }
251 
252  /* stop when a fraction of molecules frozen out on grain surfaces is reached */
253  else if( p.nMatch("MOLE") && p.nMatch("DEPL") )
254  {
255  double a = p.FFmtRead();
256 
257  if( p.lgEOL() && !p.nMatch(" OFF") )
258  {
259  p.NoNumb("molecular depletion");
260  }
261  if( a <= 0. )
262  {
264  }
265  else
266  {
268  }
269  }
270 
271  /* stop when absolute value of flow velocity falls below this value */
272  else if( p.nMatch("VELO") )
273  {
274  double a = p.FFmtRead();
275 
276  if( p.lgEOL() && !p.nMatch(" OFF") )
277  {
278  p.NoNumb("flow velocity");
279  }
280  /* entered in km/s but stored as cm/s */
281  StopCalc.StopVelocity = (realnum)(a*1e5);
282  }
283 
284  /* stop at a given computed mass */
285  else if( p.nMatch("MASS") )
286  {
287  double a = p.FFmtRead();
288 
289  if( p.lgEOL() && !p.nMatch(" OFF") )
290  {
291  p.NoNumb("mass");
292  }
293  /* number of log of mass in gm if inner radius is specified,
294  * mass per unit area, gm cm-2 if not
295  * leave it as a log since dare not deal with linear mass */
296  StopCalc.xMass = (realnum)a;
297  /* NB 0 is sentinel for not set, if a is zero we must reset it */
298  if( StopCalc.xMass == 0 )
300 
301  /* vary option */
302  if( optimize.lgVarOn )
303  {
304  strcpy( optimize.chVarFmt[optimize.nparm], "STOP MASS = %f LOG" );
305  /* pointer to where to write */
308  optimize.vincr[optimize.nparm] = 0.5;
310  ++optimize.nparm;
311  }
312  }
313 
314  /* stop thickness command, also stop depth, this must come after stop
315  * optical depth, since do not want to trigger on depth in optical depth */
316  else if( p.nMatch("THIC") || p.nMatch("DEPT") || p.nMatch("RADI") )
317  {
318  double a = p.FFmtRead();
319 
320  if( p.lgEOL() && !p.nMatch(" OFF") )
321  {
322  p.NoNumb("distance");
323  }
324  const double convl = p.nMatch("PARS") ? log10( PARSEC ) : 0.;
325  bool lgStopRadius = p.nMatch("RADI") ? true : false ;
326  const char* what = lgStopRadius ? "radius" : "thickness";
327 
328  if( p.nMatch("LINE") )
329  {
330  if( a > 0. )
331  {
332  a = log10(a) + convl;
333  }
334  else
335  {
336  fprintf(ioQQQ,"The %s is negative and linear is set - this is impossible.\n", what);
338  }
339  }
340  else
341  {
342  a += convl;
343  }
344  if( a > 37. )
345  {
346  fprintf( ioQQQ, "DISASTER %s too large\n", what );
348  }
349  if( lgStopRadius )
350  iterations.StopRadius[0] = exp10(a);
351  else
353 
354  /* can stop at different thickness on each iteration */
355  for( j=1; j < iterations.iter_malloc; j++ )
356  {
357  a = p.FFmtRead();
358  if( p.lgEOL() )
359  {
360  if( lgStopRadius )
362  else
364  }
365  else
366  {
367  if( p.nMatch("LINE") )
368  {
369  if( a > 0. )
370  {
371  a = log10(a) + convl;
372  }
373  else
374  {
375  fprintf(ioQQQ,"The %s is negative and linear is set -"
376  " this is impossible.\n", what);
378  }
379  }
380  else
381  {
382  a += convl;
383  }
384  if( a > 37. )
385  {
386  fprintf( ioQQQ, "DISASTER %s too large\n", what );
388  }
389  if( lgStopRadius )
390  iterations.StopRadius[j] = exp10(a);
391  else
393  }
394  }
395 
396  /* vary option */
397  if( optimize.lgVarOn )
398  {
400  /* pointer to where to write */
402  if( lgStopRadius )
403  {
404  strcpy( optimize.chVarFmt[optimize.nparm], "STOP RADIUS %f LOG" );
406  }
407  else
408  {
409  strcpy( optimize.chVarFmt[optimize.nparm], "STOP THICKNESS %f LOG" );
411  }
412  optimize.vincr[optimize.nparm] = 0.5f;
413  ++optimize.nparm;
414  }
415  }
416 
417  /* stop at a particular zone, for each iteration */
418  else if( p.nMatch("ZONE") )
419  {
420  double a = p.FFmtRead();
421 
422  if( p.lgEOL() && !p.nMatch(" OFF") )
423  {
424  p.NoNumb("zone number");
425  }
426  /* stop after computing this zone */
427  /* >>chng 03 jun 06, do not let fall below 1, stop zone 0 has same effect
428  * as stop zone 1, bug caught by Joop Schaye */
429  iterations.nend[0] = (long)MAX2(1.,a);
430  geometry.lgZoneSet = true;
431 
432  /* this tells code that we intend to stop at this zone, so caution not generated*/
433  iterations.lgEndDflt = false;
434 
435  long int nZoneMax = iterations.nend[0];
436  for( j=1; j < iterations.iter_malloc; j++ )
437  {
438  iterations.nend[j] = (long)p.FFmtRead();
439  /* if eol on this iteration, set to previous. In most cases
440  * all will be equal to the first */
441  if( p.lgEOL() )
442  {
443  iterations.nend[j] = iterations.nend[j-1];
444  }
445  else
446  {
447  /* do not let fall below 1, stop zone 0 has same effect
448  * as stop zone 1, bug caught by Joop Schaye */
449  iterations.nend[j] = MAX2( 1 , iterations.nend[j] );
450  }
451  nZoneMax = max( nZoneMax , iterations.nend[j] );
452  }
453 
454  if( nZoneMax>2000 )
455  fprintf(ioQQQ,"CAUTION - it will take a lot of memory to save"
456  " results for %li zones. Is this many zones really necessary?\n",
457  nZoneMax );
458  }
459 
460  /* stop when a prescribed continuum flux is reached */
461  else if( p.nMatch("CONT") && p.nMatch("FLUX") )
462  {
463  /* first read the continuum energy and add this point to PredCont */
464  double energy = p.FFmtRead();
465  if( p.lgEOL() )
466  p.NoNumb("energy");
467  const char* unit = p.StandardEnergyUnit();
468  long ind = t_PredCont::Inst().add( energy, unit );
469  Energy E( energy, unit );
470 
471  double flux = p.FFmtRead();
472  if( p.lgEOL() )
473  p.NoNumb("flux");
474  if( flux <= 0. || p.nMatch( " LOG") )
475  flux = exp10(flux);
476  Flux F( E, flux, p.StandardFluxUnit() );
477 
478  StopCalc.ContIndex.push_back( ind );
479  StopCalc.ContNFnu.push_back( F );
480  }
481 
482  /* stop at this electron fraction, relative to hydrogen */
483  else if( p.nMatch("EFRA") )
484  {
485  double a = p.FFmtRead();
486 
487  if( p.lgEOL() && !p.nMatch(" OFF") )
488  {
489  p.NoNumb("electron fraction");
490  }
491  if( a <= 0. )
492  {
494  }
495  else
496  {
498  }
499  }
500 
501  /* stop at a hydrogen molecular fraction, relative to total hydrogen,
502  * this is 2H_2 / H_total*/
503  else if( p.nMatch("MFRA") )
504  {
505  double a = p.FFmtRead();
506 
507  if( p.lgEOL() && !p.nMatch(" OFF") )
508  {
509  p.NoNumb("hydrogen molecular fraction");
510  }
511  if( a <= 0. )
512  {
514  }
515  else
516  {
518  }
519  }
520 
521  /* stop at a ionized hydrogen fraction, relative to total hydrogen,
522  * this is H+ / H_total */
523  else if( p.nMatch("PFRA") )
524  {
525  double a = p.FFmtRead();
526 
527  if( p.lgEOL() && !p.nMatch(" OFF") )
528  {
529  p.NoNumb("ionized hydrogen fraction");
530  }
531  if( a <= 0. )
532  {
534  }
535  else
536  {
538  }
539  }
540 
541  /* stop at a particular column density */
542  else if( p.nMatch("COLU") )
543  {
544  double a = p.FFmtRead();
545 
546  if( p.lgEOL() && !p.nMatch(" OFF") )
547  {
548  p.NoNumb("column density");
549  }
550  string chLabel;
551 
552  /* check for linear option, if present take log since a being
553  * log column density is default */
554  if( p.nMatch( "LINE" ) )
555  a = log10(a);
556 
557  if( !p.GetQuote( chLabel ) )
558  {
559  /* species was given in double quotes */
564  }
565  /* stop at an effective column density */
566  else if( p.nMatch("EFFE") )
567  {
568  /* actually stop at certain optical depth at 1keV */
569  effcol = exp10(a);
570  StopCalc.tauend = (realnum)(effcol*2.14e-22);
571  StopCalc.taunu = (realnum)(1000./EVRYD);
572  /* vary option */
573  if( optimize.lgVarOn )
574  {
576  strcpy( optimize.chVarFmt[optimize.nparm], "STOP EFFECTIVE COLUMN DENSITY %f LOG" );
577  /* pointer to where to write */
579  /* log of temp will be pointer */
580  optimize.vparm[0][optimize.nparm] = (realnum)log10(effcol);
581  optimize.vincr[optimize.nparm] = 0.5f;
582  ++optimize.nparm;
583  }
584  }
585 
586  else if( p.nMatch("IONI") )
587  {
588  /* this is ionized column */
589  if( a > 37. )
590  {
591  fprintf( ioQQQ, " column too big\n" );
593  }
594 
596 
597  /* vary option */
598  if( optimize.lgVarOn )
599  {
601  strcpy( optimize.chVarFmt[optimize.nparm], "STOP IONIZED COLUMN DENSITY %f LOG" );
602  /* pointer to where to write */
604  /* log of temp will be pointer */
606  optimize.vincr[optimize.nparm] = 0.5f;
607  ++optimize.nparm;
608  }
609  }
610 
611  /* stop at a neutral column */
612  else if( p.nMatch("NEUT") )
613  {
615 
616  /* vary option */
617  if( optimize.lgVarOn )
618  {
620  strcpy( optimize.chVarFmt[optimize.nparm], "STOP NEUTRAL COLUMN DENSITY %f LOG");
621  /* pointer to where to write */
623  /* log of temp will be pointer */
625  optimize.vincr[optimize.nparm] = 0.5f;
626  ++optimize.nparm;
627  }
628  }
629 
630  /* >>chng 03 apr 15, add this option
631  * stop at a molecular hydrogen column density, input parameter
632  * is log of the H2 column density */
633  else if( p.nMatch(" H2 ") )
634  {
635  /* this command has a 2 in the H2 label - must not parse the two by
636  * accident. Get the first number off the line image, and confirm that
637  * it is a 2 */
638  j = (long int)a;
639  if( j != 2 )
640  {
641  fprintf( ioQQQ, " Something is wrong with the order of the numbers on this line.\n" );
642  fprintf( ioQQQ, " The first number I encounter should be the 2 in H2.\n Sorry.\n" );
644  }
645  a = p.FFmtRead();
647 
648  /* vary option */
649  if( optimize.lgVarOn )
650  {
652  strcpy( optimize.chVarFmt[optimize.nparm], "STOP H2 COLUMN DENSITY %f LOG");
653  /* pointer to where to write */
655  /* log of temp will be pointer */
657  optimize.vincr[optimize.nparm] = 0.5f;
658  ++optimize.nparm;
659  }
660  }
661 
662  // atomic hydrogen
663  else if( p.nMatch("ATOM") )
664  {
666  /* vary option */
667  if( optimize.lgVarOn )
668  {
670  strcpy( optimize.chVarFmt[optimize.nparm], "STOP ATOMIC COLUMN DENSITY %f LOG");
671  /* pointer to where to write */
673  /* log of temp will be pointer */
675  optimize.vincr[optimize.nparm] = 0.5f;
676  ++optimize.nparm;
677  }
678  }
679 
680  else if( p.nMatch("H/TS") )
681  {
682  /* >> 05 jan 09, add stop integrated n(H0) / Tspin */
684  /* vary option */
685  if( optimize.lgVarOn )
686  {
688  strcpy( optimize.chVarFmt[optimize.nparm], "STOP H/TSPIN COLUMN DENSITY %f LOG");
689  /* pointer to where to write */
691  /* log of temp will be pointer */
693  optimize.vincr[optimize.nparm] = 0.5f;
694  ++optimize.nparm;
695  }
696  }
697 
698  else if( p.nMatch(" CO ") )
699  {
700  /* chng << 03 Oct. 27--Nick Abel, add this option */
701  /* stop at a carbon monoxide column density */
703  /* vary option */
704  if( optimize.lgVarOn )
705  {
707  strcpy( optimize.chVarFmt[optimize.nparm], "STOP CO COLUMN DENSITY %f LOG");
708  /* pointer to where to write */
710  /* log of temp will be pointer */
712  optimize.vincr[optimize.nparm] = 0.5f;
713  ++optimize.nparm;
714  }
715  }
716 
717  /* fall through default is total hydrogen column density */
718  else
719  {
720  /* both HII and HI */
721  if( a > 37. )
722  {
723  fprintf( ioQQQ, " column too big\n" );
725  }
726 
728 
729  /* vary option */
730  if( optimize.lgVarOn )
731  {
733  strcpy( optimize.chVarFmt[optimize.nparm], "STOP COLUMN DENSITY %f LOG" );
734  /* pointer to where to write */
736  /* log of temp will be pointer */
738  optimize.vincr[optimize.nparm] = 0.5f;
739  ++optimize.nparm;
740  }
741  }
742  }
743 
744  /* stop when electron density falls below this value, linear or log */
745  else if( p.nMatch("EDEN") )
746  {
747  double a = p.FFmtRead();
748 
749  if( p.lgEOL() && !p.nMatch(" OFF") )
750  {
751  p.NoNumb("electron density");
752  }
753  /* stop if electron density falls below this value
754  * LINEAR option */
755  if( p.nMatch("LINE") )
756  {
758  }
759  else
760  {
762  }
763  }
764 
765  /* stop at a particular line ratio - this must come last since many commands
766  * have linear option - don't want to trigger on that */
767  else if( p.nMatch("LINE") )
768  {
769  string chLabel;
770  /* first line wavelength, then intensity relative to Hbeta for stop
771  * if third number is entered, it is wl of line in denominator */
772 
773  /* get label for the line - must do this first so we clear the label string before
774  * trying to read the wavelength */
775  if (p.GetQuote( chLabel ))
776  p.StringError();
777 
778  /* copy first four char of label into caps, and null terminate*/
779  strncpy( StopCalc.chStopLabel1[StopCalc.nstpl], chLabel.c_str() , NCHLAB-1 );
782 
783  // default intrinsic intensity, accept emergent
785  if( p.nMatch("EMER") )
787 
788  /* get line wavelength */
790 
791  /* get relative intensity */
793  if( p.lgEOL() )
794  {
795  fprintf( ioQQQ, " There MUST be a relative intensity entered "
796  "for first line in STOP LINE command. Sorry.\n" );
798  }
799 
800  /* check for second line - use Hbeta is not specified */
801 
802  /* get label for the line - must do this first so we clear the label string before
803  * trying to read the wavelength */
804 
805  j = p.GetQuote( chLabel );
806 
807  if( j != 0 )
808  {
809  /* no line label, normalization line will be H beta */
810  strncpy( StopCalc.chStopLabel2[StopCalc.nstpl], "H 1" , NCHLAB-1 );
813  StopCalc.StopLineWl2[StopCalc.nstpl] = 4861.36f;
814  }
815  else
816  {
817  /* copy first four char of label into caps, and null terminate*/
818  strncpy( StopCalc.chStopLabel2[StopCalc.nstpl], chLabel.c_str() , NCHLAB-1 );
821 
822  /* wavelength of second line, may be absent and so zero -
823  * we will use Hbeta if not specified */
825 
826  }
827  /* increment number of stop lines commands entered */
829  }
830 
831  else if( p.nMatch("NTOTALIO" ) )
832  {
833  double a = p.FFmtRead();
834 
835  if( p.lgEOL() && !p.nMatch(" OFF") )
836  {
837  p.NoNumb("number of calls to conv_base");
838  }
839  /* this counter is incremented at end of conv_base - total number of
840  * times conv base was called
841  * this is a debugging aid - code aborts */
842  StopCalc.nTotalIonizStop = (long)a;
843  }
844 
845  /* oops! no keyword that we could find */
846  else
847  {
848  fprintf( ioQQQ, " I did not recognize a keyword on this STOP line, line image follows;\n" );
849  p.PrintLine(ioQQQ);
850  fprintf( ioQQQ, "Sorry.\n");
852  }
853  return;
854 }
realnum col_h2
Definition: stopcalc.h:74
realnum StopLineWl2[MXSTPL]
Definition: stopcalc.h:111
double emm() const
Definition: mesh.h:84
bool nMatch(const char *chKey) const
Definition: parser.h:140
realnum StopElecDensity
Definition: stopcalc.h:92
long int iter_malloc
Definition: iterations.h:40
realnum StopDepleteFrac
Definition: stopcalc.h:61
realnum colnut
Definition: stopcalc.h:69
long int nstpl
Definition: stopcalc.h:109
realnum StopElecFrac
Definition: stopcalc.h:48
double FFmtRead(void)
Definition: parser.cpp:438
double exp10(double x)
Definition: cddefines.h:1383
t_input input
Definition: input.cpp:12
long int nvfpnt[LIMPAR]
Definition: optimize.h:198
bool lgStop21cm
Definition: stopcalc.h:120
const realnum SMALLFLOAT
Definition: cpu.h:246
char chStopLabel1[MXSTPL][NCHLAB]
Definition: stopcalc.h:115
realnum AV_extended
Definition: stopcalc.h:89
vector< long int > nend
Definition: iterations.h:71
realnum stpint[MXSTPL]
Definition: stopcalc.h:103
t_StopCalc StopCalc
Definition: stopcalc.cpp:7
int nEmergent[MXSTPL]
Definition: stopcalc.h:117
int GetQuote(string &chLabel)
Definition: parser.cpp:184
long int nRead
Definition: input.h:62
t_phycon phycon
Definition: phycon.cpp:6
realnum col_monoxco
Definition: stopcalc.h:86
bool lgEndDflt
Definition: iterations.h:65
char chVarFmt[LIMPAR][FILENAME_PATH_LENGTH_2]
Definition: optimize.h:267
vector< double > StopThickness
Definition: iterations.h:77
bool lgZoneSet
Definition: geometry.h:94
FILE * ioQQQ
Definition: cddefines.cpp:7
void ParseStop(Parser &p)
Definition: parse_stop.cpp:17
realnum vparm[LIMEXT][LIMPAR]
Definition: optimize.h:192
char chStopLabel2[MXSTPL][NCHLAB]
Definition: stopcalc.h:115
double getWave()
Definition: parser.cpp:345
#define MIN2(a, b)
Definition: cddefines.h:807
Definition: parser.h:42
realnum colpls
Definition: stopcalc.h:69
Definition: flux.h:9
void trimTrailingWhiteSpace(string &str)
Definition: service.cpp:155
NORETURN void StringError() const
Definition: parser.cpp:174
bool lgVarOn
Definition: optimize.h:207
static T & Inst()
Definition: cddefines.h:209
const int MXSTPL
Definition: stopcalc.h:10
const double TEMP_LIMIT_LOW
Definition: phycon.h:121
t_geometry geometry
Definition: geometry.cpp:5
string StandardFluxUnit(void) const
Definition: parser.cpp:263
realnum HColStop
Definition: stopcalc.h:69
realnum StopHPlusFrac
Definition: stopcalc.h:56
double energy(const genericState &gs)
bool lgStopSpeciesColumn
Definition: stopcalc.h:132
long int nparm
Definition: optimize.h:204
const double TEMP_LIMIT_HIGH
Definition: phycon.h:123
t_rfield rfield
Definition: rfield.cpp:9
realnum xMass
Definition: stopcalc.h:77
float realnum
Definition: cddefines.h:124
const char * StandardEnergyUnit(void) const
Definition: parser.cpp:259
#define EXIT_FAILURE
Definition: cddefines.h:168
realnum col_species
Definition: stopcalc.h:134
realnum AV_point
Definition: stopcalc.h:89
string chSpeciesColumn
Definition: stopcalc.h:133
long max(int a, long b)
Definition: cddefines.h:821
#define cdEXIT(FAIL)
Definition: cddefines.h:484
NORETURN void NoNumb(const char *chDesc) const
Definition: parser.cpp:318
realnum StopH2MoleFrac
Definition: stopcalc.h:52
realnum col_H0_ov_Tspin
Definition: stopcalc.h:83
t_iterations iterations
Definition: iterations.cpp:6
char * chLabel
Definition: species.h:38
realnum StopLineWl1[MXSTPL]
Definition: stopcalc.h:111
vector< Flux > ContNFnu
Definition: stopcalc.h:124
t_optimize optimize
Definition: optimize.cpp:6
long int nTotalIonizStop
Definition: stopcalc.h:127
realnum vincr[LIMPAR]
Definition: optimize.h:195
realnum TempLoStopZone
Definition: stopcalc.h:42
realnum TempLoStopIteration
Definition: stopcalc.h:45
realnum taunu
Definition: stopcalc.h:26
Definition: energy.h:9
#define DEBUG_ENTRY(funcname)
Definition: cddefines.h:729
double egamry() const
Definition: mesh.h:88
realnum tauend
Definition: stopcalc.h:23
bool lgEOL(void) const
Definition: parser.h:103
realnum StopVelocity
Definition: stopcalc.h:65
const int NCHLAB
Definition: cddefines.h:303
#define MAX2(a, b)
Definition: cddefines.h:828
int fprintf(const Output &stream, const char *format,...)
Definition: service.cpp:1217
vector< long > ContIndex
Definition: stopcalc.h:123
int PrintLine(FILE *fp) const
Definition: parser.h:200
vector< double > StopRadius
Definition: iterations.h:80
realnum TempHiStopZone
Definition: stopcalc.h:36
double getWaveOpt()
Definition: parser.cpp:329
realnum col_h2_nut
Definition: stopcalc.h:80
long int nvarxt[LIMPAR]
Definition: optimize.h:198
realnum TempHiStopIteration
Definition: stopcalc.h:38