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-2022 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  /* tau entered as a log unless liner specified */
157  if( lgLOG )
158  {
159  if( a > 37. )
160  {
161  fprintf( ioQQQ, " The log optical depth of %.2e is too big, the largest is log t = 37\n",
162  a);
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  string chLabel;
545  // species label may contain numbers, so needs to be parsed first...
546  bool lgFoundLabel = !p.GetQuote( chLabel );
547  double a = p.FFmtRead();
548 
549  if( p.lgEOL() && !p.nMatch(" OFF") )
550  {
551  p.NoNumb("column density");
552  }
553 
554  /* check for linear option, if present take log since a being
555  * log column density is default */
556  if( p.nMatch( "LINE" ) )
557  a = log10(a);
558 
559  if( lgFoundLabel )
560  {
561  /* species was given in double quotes */
566  }
567  /* stop at an effective column density */
568  else if( p.nMatch("EFFE") )
569  {
570  /* actually stop at certain optical depth at 1keV */
571  effcol = exp10(a);
572  StopCalc.tauend = (realnum)(effcol*2.14e-22);
573  StopCalc.taunu = (realnum)(1000./EVRYD);
574  /* vary option */
575  if( optimize.lgVarOn )
576  {
578  strcpy( optimize.chVarFmt[optimize.nparm], "STOP EFFECTIVE COLUMN DENSITY %f LOG" );
579  /* pointer to where to write */
581  /* log of temp will be pointer */
582  optimize.vparm[0][optimize.nparm] = (realnum)log10(effcol);
583  optimize.vincr[optimize.nparm] = 0.5f;
584  ++optimize.nparm;
585  }
586  }
587 
588  else if( p.nMatch("IONI") )
589  {
590  /* this is ionized column */
591  if( a > 37. )
592  {
593  fprintf( ioQQQ, " column too big\n" );
595  }
596 
598 
599  /* vary option */
600  if( optimize.lgVarOn )
601  {
603  strcpy( optimize.chVarFmt[optimize.nparm], "STOP IONIZED COLUMN DENSITY %f LOG" );
604  /* pointer to where to write */
606  /* log of temp will be pointer */
608  optimize.vincr[optimize.nparm] = 0.5f;
609  ++optimize.nparm;
610  }
611  }
612 
613  /* stop at a neutral column */
614  else if( p.nMatch("NEUT") )
615  {
617 
618  /* vary option */
619  if( optimize.lgVarOn )
620  {
622  strcpy( optimize.chVarFmt[optimize.nparm], "STOP NEUTRAL COLUMN DENSITY %f LOG");
623  /* pointer to where to write */
625  /* log of temp will be pointer */
627  optimize.vincr[optimize.nparm] = 0.5f;
628  ++optimize.nparm;
629  }
630  }
631 
632  /* >>chng 03 apr 15, add this option
633  * stop at a molecular hydrogen column density, input parameter
634  * is log of the H2 column density */
635  else if( p.nMatch(" H2 ") )
636  {
637  /* this command has a 2 in the H2 label - must not parse the two by
638  * accident. Get the first number off the line image, and confirm that
639  * it is a 2 */
640  j = (long int)a;
641  if( j != 2 )
642  {
643  fprintf( ioQQQ, " Something is wrong with the order of the numbers on this line.\n" );
644  fprintf( ioQQQ, " The first number I encounter should be the 2 in H2.\n Sorry.\n" );
646  }
647  a = p.FFmtRead();
649 
650  /* vary option */
651  if( optimize.lgVarOn )
652  {
654  strcpy( optimize.chVarFmt[optimize.nparm], "STOP H2 COLUMN DENSITY %f LOG");
655  /* pointer to where to write */
657  /* log of temp will be pointer */
659  optimize.vincr[optimize.nparm] = 0.5f;
660  ++optimize.nparm;
661  }
662  }
663 
664  // atomic hydrogen
665  else if( p.nMatch("ATOM") )
666  {
668  /* vary option */
669  if( optimize.lgVarOn )
670  {
672  strcpy( optimize.chVarFmt[optimize.nparm], "STOP ATOMIC COLUMN DENSITY %f LOG");
673  /* pointer to where to write */
675  /* log of temp will be pointer */
677  optimize.vincr[optimize.nparm] = 0.5f;
678  ++optimize.nparm;
679  }
680  }
681 
682  else if( p.nMatch("H/TS") )
683  {
684  /* >> 05 jan 09, add stop integrated n(H0) / Tspin */
686  /* vary option */
687  if( optimize.lgVarOn )
688  {
690  strcpy( optimize.chVarFmt[optimize.nparm], "STOP H/TSPIN COLUMN DENSITY %f LOG");
691  /* pointer to where to write */
693  /* log of temp will be pointer */
695  optimize.vincr[optimize.nparm] = 0.5f;
696  ++optimize.nparm;
697  }
698  }
699 
700  else if( p.nMatch(" CO ") )
701  {
702  /* chng << 03 Oct. 27--Nick Abel, add this option */
703  /* stop at a carbon monoxide column density */
705  /* vary option */
706  if( optimize.lgVarOn )
707  {
709  strcpy( optimize.chVarFmt[optimize.nparm], "STOP CO COLUMN DENSITY %f LOG");
710  /* pointer to where to write */
712  /* log of temp will be pointer */
714  optimize.vincr[optimize.nparm] = 0.5f;
715  ++optimize.nparm;
716  }
717  }
718 
719  /* fall through default is total hydrogen column density */
720  else
721  {
722  /* both HII and HI */
723  if( a > 37. )
724  {
725  fprintf( ioQQQ, " column too big\n" );
727  }
728 
730 
731  /* vary option */
732  if( optimize.lgVarOn )
733  {
735  strcpy( optimize.chVarFmt[optimize.nparm], "STOP COLUMN DENSITY %f LOG" );
736  /* pointer to where to write */
738  /* log of temp will be pointer */
740  optimize.vincr[optimize.nparm] = 0.5f;
741  ++optimize.nparm;
742  }
743  }
744  }
745 
746  /* stop when electron density falls below this value, linear or log */
747  else if( p.nMatch("EDEN") )
748  {
749  double a = p.FFmtRead();
750 
751  if( p.lgEOL() && !p.nMatch(" OFF") )
752  {
753  p.NoNumb("electron density");
754  }
755  /* stop if electron density falls below this value
756  * LINEAR option */
757  if( p.nMatch("LINE") )
758  {
760  }
761  else
762  {
764  }
765  }
766 
767  /* stop at a particular line ratio - this must come last since many commands
768  * have linear option - don't want to trigger on that */
769  else if( p.nMatch("LINE") )
770  {
771  string chLabel;
772  /* first line wavelength, then intensity relative to Hbeta for stop
773  * if third number is entered, it is wl of line in denominator */
774 
775  /* get label for the line - must do this first so we clear the label string before
776  * trying to read the wavelength */
777  if (p.GetQuote( chLabel ))
778  p.StringError();
779 
780  /* copy first four char of label into caps, and null terminate*/
781  strncpy( StopCalc.chStopLabel1[StopCalc.nstpl], chLabel.c_str() , NCHLAB-1 );
784 
785  // default intrinsic intensity, accept emergent
787  if( p.nMatch("EMER") )
789 
790  /* get line wavelength */
792 
793  /* get relative intensity */
795  if( p.lgEOL() )
796  {
797  fprintf( ioQQQ, " There MUST be a relative intensity entered "
798  "for first line in STOP LINE command. Sorry.\n" );
800  }
801 
802  /* check for second line - use Hbeta is not specified */
803 
804  /* get label for the line - must do this first so we clear the label string before
805  * trying to read the wavelength */
806 
807  j = p.GetQuote( chLabel );
808 
809  if( j != 0 )
810  {
811  /* no line label, normalization line will be H beta */
812  strncpy( StopCalc.chStopLabel2[StopCalc.nstpl], "H 1" , NCHLAB-1 );
815  StopCalc.StopLineWl2[StopCalc.nstpl] = 4861.33f;
816  }
817  else
818  {
819  /* copy first four char of label into caps, and null terminate*/
820  strncpy( StopCalc.chStopLabel2[StopCalc.nstpl], chLabel.c_str() , NCHLAB-1 );
823 
824  /* wavelength of second line, may be absent and so zero -
825  * we will use Hbeta if not specified */
827 
828  }
829  /* increment number of stop lines commands entered */
831  }
832 
833  else if( p.nMatch("NTOTALIO" ) )
834  {
835  double a = p.FFmtRead();
836 
837  if( p.lgEOL() && !p.nMatch(" OFF") )
838  {
839  p.NoNumb("number of calls to conv_base");
840  }
841  /* this counter is incremented at end of conv_base - total number of
842  * times conv base was called
843  * this is a debugging aid - code aborts */
844  StopCalc.nTotalIonizStop = (long)a;
845  }
846 
847  /* oops! no keyword that we could find */
848  else
849  {
850  fprintf( ioQQQ, " I did not recognize a keyword on this STOP line, line image follows;\n" );
851  p.PrintLine(ioQQQ);
852  fprintf( ioQQQ, "Sorry.\n");
854  }
855  return;
856 }
realnum col_h2
Definition: stopcalc.h:74
realnum StopLineWl2[MXSTPL]
Definition: stopcalc.h:111
double emm() const
Definition: mesh.h:93
bool nMatch(const char *chKey) const
Definition: parser.h:150
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:472
double exp10(double x)
Definition: cddefines.h:1368
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:213
long int nRead
Definition: input.h:105
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:379
#define MIN2(a, b)
Definition: cddefines.h:803
Definition: parser.h:43
realnum colpls
Definition: stopcalc.h:69
Definition: flux.h:9
void trimTrailingWhiteSpace(string &str)
Definition: service.cpp:153
NORETURN void StringError() const
Definition: parser.cpp:203
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:290
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:286
#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:817
#define cdEXIT(FAIL)
Definition: cddefines.h:482
NORETURN void NoNumb(const char *chDesc) const
Definition: parser.cpp:345
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:723
double egamry() const
Definition: mesh.h:97
realnum tauend
Definition: stopcalc.h:23
bool lgEOL(void) const
Definition: parser.h:113
realnum StopVelocity
Definition: stopcalc.h:65
const int NCHLAB
Definition: cddefines.h:304
#define MAX2(a, b)
Definition: cddefines.h:824
int fprintf(const Output &stream, const char *format,...)
Definition: service.cpp:1121
vector< long > ContIndex
Definition: stopcalc.h:123
int PrintLine(FILE *fp) const
Definition: parser.h:206
vector< double > StopRadius
Definition: iterations.h:80
realnum TempHiStopZone
Definition: stopcalc.h:36
double getWaveOpt()
Definition: parser.cpp:356
realnum col_h2_nut
Definition: stopcalc.h:80
long int nvarxt[LIMPAR]
Definition: optimize.h:198
realnum TempHiStopIteration
Definition: stopcalc.h:38