cloudy  trunk
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
radius_first.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 /*radius_first derive thickness of first zone, called after conditions in first zone
4  * are established, sets
5 radius.drad_x_fillfac
6 radius.drad
7  */
8 #include "cddefines.h"
9 #include "wind.h"
10 #include "stopcalc.h"
11 #include "thermal.h"
12 #include "dynamics.h"
13 #include "trace.h"
14 #include "save.h"
15 #include "pressure.h"
16 #include "iso.h"
17 #include "h2.h"
18 #include "dense.h"
19 #include "mole.h"
20 #include "hmi.h"
21 #include "geometry.h"
22 #include "iterations.h"
23 #include "opacity.h"
24 #include "ipoint.h"
25 #include "radius.h"
26 #include "rfield.h"
27 
28 void radius_first(void)
29 {
30  long int i ,
31  ip;
32 
33  bool lgDoPun;
34 
35  int indexOfSmallest = 0;
36 
37  const double Z = 1.0001;
38  const int NUM_DR_TYPES = 13;
39 
40  struct t_drValues{
41  double dr;
42  string whatToSay;
43  } drValues[NUM_DR_TYPES];
44 
45  double accel,
46  BigOpacity,
47  dr912,
48  drH2 ,
49  drContPres ,
50  drOpacity ,
51  drStromgren, /* used for Stromgren length */
52  drTabDen,
53  dradf,
54  drcol,
55  dr_time_dep,
56  drthrm,
57  factor,
58  winddr;
59  static double drad_last_iteration=-1.;
60 
61  DEBUG_ENTRY( "radius_first()" );
62 
63  /***********************************************************************
64  *
65  * wind model, use acceleration length
66  *
67  ***********************************************************************/
68 
69  if( wind.lgBallistic() )
70  {
71  /* evaluate total pressure, although value not used (so stuffed into dr912) */
72  /* >>chng 01 nov 02, remove call, confirm vals defined with assert */
73  ASSERT( dense.pden > 0. && dense.wmole > 0. );
74  accel = 1.3e-10*dense.pden*dense.wmole;
75  winddr = POW2(wind.windv)/25./accel;
76  }
77  else
78  {
79  winddr = 1e30;
80  }
81 
82  /* key off of Lyman continuum optical depth */
83  if( StopCalc.taunu > 0.99 && StopCalc.taunu < 3. )
84  {
85  dr912 = StopCalc.tauend/6.3e-18/(dense.xIonDense[ipHYDROGEN][0]*geometry.FillFac)*Z/50.;
86  }
87  else
88  {
89  dr912 = 1e30;
90  }
91 
93  {
94  /* when time dependent case on do not let dr change since current continuum
95  * is not good indicator of conditions */
96  dr_time_dep = drad_last_iteration;
97  }
98  else
99  {
100  dr_time_dep = 1e30;
101  }
102 
103  /***********************************************************************
104  *
105  * key off of column density; total, neutral, or ionized
106  *
107  ***********************************************************************/
108 
109  if( StopCalc.HColStop < 5e29 )
110  {
111  /* this is useful for very thin columns, normally larger than 1st DR */
112  drcol = log10(StopCalc.HColStop) - log10(dense.gas_phase[ipHYDROGEN]*geometry.FillFac* 20.);
113  }
114  else if( StopCalc.colpls < 5e29 )
115  {
116  /* ionized column density */
117  drcol = log10(StopCalc.colpls) - log10(dense.xIonDense[ipHYDROGEN][1]*geometry.FillFac* 20.);
118  }
119  else if( StopCalc.colnut < 5e29 )
120  {
121  /* neutral column density */
122  drcol = log10(StopCalc.colnut) - log10(dense.xIonDense[ipHYDROGEN][0]*geometry.FillFac*50.);
123  }
124  else if( StopCalc.col_species < 5e29 )
125  {
126  /* arbitrary species */
127  drcol = log10(StopCalc.col_species) -
129  }
130  else
131  {
132  /* not used */
133  drcol = 30.;
134  }
135  /* finally convert the drived column density to linear scale */
136  drcol = exp10(MIN2(35.,drcol));
137 
138  /***********************************************************************
139  *
140  * key off of density or abundance fluctuations, must be small part of wavelength
141  *
142  ***********************************************************************/
143 
144  if( dense.flong != 0. )
145  {
146  /* flong set => density fluctuations */
147  dradf = PI2/dense.flong/10.;
148  dradf = MIN4(dradf,iterations.StopThickness[iteration-1]*Z,drcol,dr912);
149  }
150  else
151  {
152  dradf = FLT_MAX;
153  }
154 
155  /* >>>chng 99 nov 18, add check on stromgren length */
156  /* estimate Stromgren length, but only if there are ionizing photons
157  * and not constant temperature model */
158  if( (rfield.qhtot>0.) && (rfield.qhtot> rfield.qbal*0.01) && (rfield.uh>1e-10) )
159  {
160  /* >>chng 99 dec 23, double to allow lte.in to work on alphas */
161  /* >>chng 03 mar 15, density to double to avoid overflow, PvH */
162  drStromgren = (double)(rfield.qhtot)/iso_sp[ipH_LIKE][ipHYDROGEN].RadRec_caseB/
163  POW2((double)dense.gas_phase[ipHYDROGEN]);
164 
165  // Hubble radius is largest value
166  drStromgren = MIN2(1e28 , drStromgren );
167 
168  /* different logic if this is a sphere */
169  if( drStromgren/radius.rinner > 1. )
170  {
171  /* >>chng 03 mar 15, to double to avoid FP overflow, PvH */
172  drStromgren = (double)rfield.qhtot*3./(radius.rinner*
173  iso_sp[ipH_LIKE][ipHYDROGEN].RadRec_caseB*POW2((double)dense.gas_phase[ipHYDROGEN]) );
174  drStromgren += 1.;
175  /* this results in r_out / r_in */
176  drStromgren = cbrt(drStromgren);
177  /* make it a physics thickness in cm */
178  drStromgren *= radius.rinner;
179  }
180 
181  /* remember the Stromgren thickness */
182  radius.thickness_stromgren = (realnum)drStromgren;
183 
184  /* take one hundredth of this, do nothing if near underflow */
185  if( drStromgren > SMALLFLOAT *100.)
186  drStromgren /= 100.;
187  }
188  else
189  {
190  drStromgren = FLT_MAX;
191  radius.thickness_stromgren = FLT_MAX;
192  }
193 
194  /***********************************************************************
195  *
196  * find largest opacity, to keep the first zone optical depth 1
197  * this is usually the physics that sets the first zone thickness
198  *
199  ***********************************************************************/
200 
201  /* >>>chng 99 jun 25, this is to simulate behavior of code before extension
202  * of continuum array to 1e-8 Ryd */
203  ip = ipoint(1e-5);
204 
205  /* find largest opacity */
206  BigOpacity = 0.;
207  for( i=ip; i < rfield.nflux; i++ )
208  {
209  /* remember largest opacity, and energy where this happened,
210  * make sure flux at energy is gt 0, can be zero for case where
211  * nflux increased to include emission from some ions */
212  // >>chng 13 oct 13 test for all fluxes to get consistent results
213  // with -DFLT_IS_DBL for ism_hot_brems: need to resolve line escape
214  // even when incoming flux is zero
215  if( opac.opacity_abs[i] > BigOpacity )
216  {
217  BigOpacity = opac.opacity_abs[i];
218  }
219  }
220  /* BigOpacity may be zero on very first call */
221 
222  /* drChange set with set didz command, is only number set with this command,
223  * default in zerologic is 0.15
224  * set drad to small part of*/
225  drOpacity = safe_div((radius.drChange/100.),BigOpacity*geometry.FillFac,
226  1e30);
227 
228  /***********************************************************************
229  *
230  * thermalization length of typical lines
231  *
232  ***********************************************************************/
233 
234  drthrm = 1.5e31/MAX2(1.,POW2((double)dense.gas_phase[ipHYDROGEN]));
235  /* thermalization length is irrelevant above critical density, which we
236  * regard as 1e16 cm-3. Put a floor at the corresponding drthrm. */
237  drthrm = MAX2( 0.15, drthrm );
238 
239  /***********************************************************************
240  *
241  * make sure we resolve initial structure in dense_tabden command
242  * if interpolated table we need to make sure that we resolve the
243  * initial changes in the structure
244  *
245  ***********************************************************************/
246 
247  if( strcmp(dense.chDenseLaw,"DLW2") == 0 )
248  {
249  drTabDen = 1.;
250  i = 1;
251  factor = 0.;
252  while( i < 100 && factor < 0.05 && radius.Radius+drTabDen*2.<iterations.StopThickness[0] )
253  {
254  /* check densities at ever larger dr's, until factor becomes more than 5% */
255  factor = dense.gas_phase[ipHYDROGEN]/
256  dense.DLW.tabval(radius.Radius+drTabDen, drTabDen );
257  /* density change can be positive or negative sign */
258  factor = fabs(factor-1.);
259  drTabDen *= 2.;
260  i += 1;
261  }
262  drTabDen /= 2.;
263  }
264  else
265  {
266  drTabDen = 1e30;
267  }
268 
269  /* >>chng 04 mar 14 go back to original logic since molecular
270  * pdr's had big jump in conditions from
271  * first to second zon even when most H in H2
272  change = 0.1; */
273  /* >>chng 04 apr 18, change from 0.1 to 0.001, inital zones too large in
274  * leiden test case f1 */
275  double change = 0.001;
276 
277  /* >>chng 04 mar 13, not too large when big H2 is on */
278  if( h2.lgEnabled && h2.lgEvaluated )
279  {
280  if( fabs(h2.HeatDexc)/thermal.ctot > 0.05 )
281  {
282  /* changes in H2 heating caused by changes in solomon rate
283  * would drive temperature failures */
284  /* >>chng 04 apr 18, change from 0.001 to 0.0001, inital zones too large in
285  * leiden test case f1 */
286  change = 0.0001;
287  }
288  else
289  {
290  /* >>chng 04 apr 18, change from 0.01 to 0.001, inital zones too large in
291  * leiden test case f1 */
292  change = 0.001;
293  }
294  }
295  drH2 = change / SDIV(
297 
298  /* >>chng 06 feb 01, very high U ulirg models had dramatic increase in
299  * cont pre in first few zones,
300  * in constant total pressure case, don't want acceleration across first zone to
301  * be large compared with current gas pressure */
302  if( (strcmp( dense.chDenseLaw, "CPRE" )==0) && pressure.lgContRadPresOn )
303  {
304  /* radiative acceleration was evaluated in PressureTotal */
305  drContPres = 0.;
306  if( wind.AccelTotalOutward > 0. || wind.AccelTotalOutward < 0. )
307  drContPres = 0.05 * pressure.PresTotlCurr /
309  }
310  else if( !wind.lgStatic() )
311  {
312  /* acceleration and change in v in wind */
313  double g = fabs(wind.AccelTotalOutward-wind.AccelGravity);
314  /* wind - do not let velocity change by too much */
315  drContPres = 0.05*POW2(wind.windv)/(2.*SDIV(g));
316  }
317  else
318  drContPres = 1e30;
319 
320  drValues[0].dr = drOpacity;
321  drValues[1].dr = radius.Radius/20.;
322  drValues[2].dr = drStromgren;
323  drValues[3].dr = iterations.StopThickness[iteration-1]/10.;
324  drValues[4].dr = drcol;
325  drValues[5].dr = dr912;
326  drValues[6].dr = drthrm;
327  drValues[7].dr = winddr;
328  drValues[8].dr = dradf;
329  drValues[9].dr = drTabDen;
330  drValues[10].dr = drH2;
331  drValues[11].dr = drContPres;
332  drValues[12].dr = dr_time_dep;
333 
334  drValues[0].whatToSay = "drOpacity";
335  drValues[1].whatToSay = "radius.Radius/20.";
336  drValues[2].whatToSay = "drStromgren";
337  drValues[3].whatToSay = "iterations.StopThickness[iteration-1]/10.";
338  drValues[4].whatToSay = "drcol";
339  drValues[5].whatToSay = "dr912";
340  drValues[6].whatToSay = "drthrm";
341  drValues[7].whatToSay = "winddr";
342  drValues[8].whatToSay = "dradf";
343  drValues[9].whatToSay = "drTabDen";
344  drValues[10].whatToSay = "drH2";
345  drValues[11].whatToSay = "drContPres";
346  drValues[12].whatToSay = "dr_time_dep";
347 
348  for( i=0; i<NUM_DR_TYPES; i++ )
349  {
350  if( drValues[i].dr < drValues[indexOfSmallest].dr )
351  {
352  indexOfSmallest = i;
353  }
354  }
355 
356  radius.drad = drValues[indexOfSmallest].dr;
357 
358  double rfacmin = radius.lgSdrminRel ? radius.Radius : 1.;
359  /* reset if radius.drad is less than radius.sdrmin */
360  if( rfacmin*radius.sdrmin >= radius.drad )
361  {
362  radius.drad = rfacmin*radius.sdrmin;
363  /* set flag for comment if the previous line forced a larger dr than
364  * would otherwise have been chosen. will cause comment to be generated
365  * in PrtComment if set true*/
366  radius.lgDR2Big = true;
367  }
368  else
369  {
370  radius.lgDR2Big = false;
371  }
372 
373  /* this min had been in the big min set above, but caused a false alarm
374  * on the lgDR2Big test above since the set dr command sets both in and max */
375  // lgSdrmaxRel true if sdrmax is relative to current radius, false if limit in cm
376  double rfacmax = radius.lgSdrmaxRel ? radius.Radius : 1.;
377  radius.drad = MIN2( rfacmax*radius.sdrmax, radius.drad );
379 
380 #if 0
381  /***********************************************************************
382  *
383  * we have now generated range of estimates of first thickness,
384  * now choose smallest of the group
385  *
386  ***********************************************************************/
387 
388  /* radius div by 20, to prevent big change in iron ionization for high ioniz gas,
389  * this is also the ONLY place that sphericity comes in */
390  radius.drad = MIN4( MIN3( drOpacity, radius.Radius/20., drStromgren ),
391  MIN3( iterations.StopThickness[iteration-1]/10., drcol, dr912 ),
392  MIN4( drthrm, winddr, dradf, drTabDen ),
393  MIN3( drH2, drContPres, dr_time_dep ) );
394 
395  /* option to set lower limit to zone thickness, with set drmin command*/
396  radius.drad = MAX2( radius.drad, rfacmin*radius.sdrmin );
397 
398  /* set flag for comment if the previous line forced a larger dr than
399  * would otherwise have been chosen. will cause comment to be generated
400  * in PrtComment if set true*/
401  if( fp_equal( radius.drad, rfacmin*radius.sdrmin ) )
402  {
403  radius.lgDR2Big = true;
404  }
405  else
406  {
407  radius.lgDR2Big = false;
408  }
409 
410  /* this min had been in the big min set above, but caused a false alarm
411  * on the lgDR2Big test above since the set dr command sets both in and max */
412  radius.drad = MIN2( rfacmax*radius.sdrmax, radius.drad );
413 #endif
414 
416 
417  /* save dr for this iteration */
418  drad_last_iteration = radius.drad;
419 
420  /* drMinimum is smallest acceptable DRAD, and is 1/100 OF DRAD(1) */
421  /* this can be turned off by GLOB command */
422  if( radius.lgDrMnOn )
423  {
424  /* >>chng 05 mar 05, drMinimum is now drad * hden, to make propro to optical depth
425  * avoid false trigger across thermal fronts
426  * add * dense.gas_phase */
427  /* NB - drMinimum not used in code - delete? */
428  radius.drMinimum = (realnum)(radius.drad * dense.gas_phase[ipHYDROGEN]/1e7);
429  }
430  else
431  {
432  radius.drMinimum = 0.;
433  }
434 
435  /* if set drmin is used, make sure drMinimum (which will cause an abort) is
436  * smaller than drmin */
437  if( radius.lgSMinON )
438  {
439  /* >>chng 05 mar 05, drMinimum is now drad * hden, to make propro to optical depth
440  * avoid false trigger across thermal fronts
441  * add * dense.gas_phase */
442  /* NB - drMinimum not used in code - delete? */
444  (realnum)(rfacmin*radius.sdrmin/10.f) );
445  }
446 
447  if( trace.lgTrace )
448  {
449  fprintf( ioQQQ,
450  " radius_first called, finds dr=%13.5e drMinimum=%12.3e sdrmin=%10.2e sdrmax=%10.2e\n",
451  radius.drad, radius.drMinimum/ dense.gas_phase[ipHYDROGEN],
452  rfacmin*radius.sdrmin, rfacmax*radius.sdrmax );
453  }
454 
455  if( radius.drad < SMALLFLOAT*1.1 )
456  {
457  fprintf( ioQQQ,
458  " PROBLEM radius_first detected likely insanity, found dr=%13.5e \n", radius.drad);
459  fprintf( ioQQQ,
460  " radius_first: calculation continuing but crash is likely. \n");
461  /* this sets flag that insanity has occurred */
462  TotalInsanity();
463  }
464 
465  /* all this is to only save on last iteration
466  * the save dr command is not really a save command, making this necessary
467  * lgDRon is set true if "save dr" entered */
468  if( save.lgDROn )
469  {
470  lgDoPun = true;
471  }
472  else
473  {
474  lgDoPun = false;
475  }
476 
477  /* save what we decided up? */
478  if( lgDoPun )
479  {
480  /* create hash marks on second and later iterations */
481  if( iteration > 1 && save.lgDRHash )
482  {
483  static int iter_punch=-1;
484  if( iteration !=iter_punch )
485  fprintf( save.ipDRout, "%s\n",save.chHashString );
486  iter_punch = iteration;
487  }
488  /* this is common part of each line, the zone count, depth, chosen dr, and depth2go */
489  /* >>chng 05 aug 15, had printed drNext, always zero, rather the drad, which is set here */
490  fprintf( save.ipDRout , "%ld\t%.5e\t%.3e\t%.3e\t", nzone, radius.depth, radius.drad, radius.Depth2Go );
491 
492  if( radius.lgDR2Big )
493  {
494  fprintf( save.ipDRout,
495  "radius_first keys from radius.sdrmin\n");
496 
497  }
498  else if( fp_equal( radius.drad, rfacmax*radius.sdrmax ) )
499  {
500 
501  fprintf( save.ipDRout,
502  "radius_first keys from radius.sdrmax\n");
503  }
504  else
505  {
506  ASSERT( indexOfSmallest < NUM_DR_TYPES - 1 );
507  fprintf( save.ipDRout, "radius_first keys from %s\n",
508  drValues[indexOfSmallest].whatToSay.c_str());
509  }
510 
511  /* \todo 1 improve this printout and the drValues treatment above. */
512 
513 #if 0
514  if( fp_equal( radius.drad, drOpacity ) )
515  {
516  fprintf( save.ipDRout,
517  "radius_first keys from drOpacity, opac was %.2e at %.2e Ryd\n",
518  BigOpacity , BigOpacityAnu );
519  }
520  else if( fp_equal( radius.drad, radius.Radius/20. ) )
521  {
522  fprintf( save.ipDRout,
523  "radius_first keys from radius.Radius\n" );
524  }
525  else if( fp_equal( radius.drad, drStromgren ) )
526  {
527  fprintf( save.ipDRout,
528  "radius_first keys from drStromgren\n");
529  }
530  else if( fp_equal( radius.drad, dr_time_dep ) )
531  {
532  fprintf( save.ipDRout,
533  "radius_first keys from time dependent\n");
534  }
535  else if( fp_equal( radius.drad, iterations.StopThickness[iteration-1]/10. ) )
536  {
537  fprintf( save.ipDRout,
538  "radius_first keys from iterations.StopThickness[iteration-1]\n");
539  }
540  else if( fp_equal( radius.drad, drcol ) )
541  {
542  fprintf( save.ipDRout,
543  "radius_first keys from drcol\n");
544  }
545  else if( fp_equal( radius.drad, rfacmin*radius.sdrmin ) )
546  {
547  fprintf( save.ipDRout,
548  "radius_first keys from radius.sdrmin\n");
549  }
550  else if( fp_equal( radius.drad, dr912 ) )
551  {
552  fprintf( save.ipDRout,
553  "radius_first keys from dr912\n");
554  }
555  else if( fp_equal( radius.drad, rfacmax*radius.sdrmax ) )
556  {
557  fprintf( save.ipDRout,
558  "radius_first keys from radius.sdrmax\n");
559  }
560  else if( fp_equal( radius.drad, drthrm ) )
561  {
562  fprintf( save.ipDRout,
563  "radius_first keys from drthrm\n");
564  }
565  else if( fp_equal( radius.drad, winddr ) )
566  {
567  fprintf( save.ipDRout,
568  "radius_first keys from winddr\n");
569  }
570  else if( fp_equal( radius.drad, drH2 ) )
571  {
572  fprintf( save.ipDRout,
573  "radius_first keys from H2 lyman lines\n");
574  }
575  else if( fp_equal( radius.drad, dradf ) )
576  {
577  fprintf( save.ipDRout,
578  "radius_first keys from dradf\n");
579  }
580  else if( fp_equal( radius.drad, drTabDen ) )
581  {
582  fprintf( save.ipDRout,
583  "radius_first keys from drTabDen\n");
584  }
585  else if( fp_equal( radius.drad, drContPres ) )
586  {
587  fprintf( save.ipDRout,
588  "radius_first keys from radiative acceleration across zone\n");
589  }
590  else
591  {
592  fprintf( save.ipDRout, "radius_first insanity\n" );
593  fprintf( ioQQQ, "radius_first insanity, radius is %e\n" ,
594  radius.drad);
595  ShowMe();
596  }
597 #endif
598 
599  }
600  return;
601 }
bool lgContRadPresOn
Definition: pressure.h:65
bool lgDrMnOn
Definition: radius.h:142
double Radius
Definition: radius.h:31
realnum colnut
Definition: stopcalc.h:69
double depth
Definition: radius.h:31
realnum thickness_stromgren
Definition: radius.h:192
realnum drMinimum
Definition: radius.h:179
t_thermal thermal
Definition: thermal.cpp:6
double drad_mid_zone
Definition: radius.h:31
double * opacity_abs
Definition: opacity.h:104
#define MIN4(a, b, c, d)
Definition: cddefines.h:813
double exp10(double x)
Definition: cddefines.h:1368
void radius_first(void)
NORETURN void TotalInsanity(void)
Definition: service.cpp:971
realnum qbal
Definition: rfield.h:341
t_opac opac
Definition: opacity.cpp:5
double RadRec_caseB
Definition: iso.h:544
bool lgDRHash
Definition: save.h:465
const realnum SMALLFLOAT
Definition: cpu.h:246
bool lgTimeDependentStatic
Definition: dynamics.h:102
t_StopCalc StopCalc
Definition: stopcalc.cpp:7
realnum drChange
Definition: radius.h:189
bool lgEvaluated
Definition: h2_priv.h:317
char chHashString[INPUT_LINE_LENGTH]
Definition: save.h:416
double sdrmax
Definition: radius.h:159
vector< double > StopThickness
Definition: iterations.h:77
FILE * ioQQQ
Definition: cddefines.cpp:7
realnum FillFac
Definition: geometry.h:29
long int nzone
Definition: cddefines.cpp:14
t_dynamics dynamics
Definition: dynamics.cpp:42
#define MIN2(a, b)
Definition: cddefines.h:803
double PresTotlCurr
Definition: pressure.h:46
realnum colpls
Definition: stopcalc.h:69
molezone * findspecieslocal_validate(const char buf[])
t_dense dense
Definition: global.cpp:15
t_iso_sp iso_sp[NISO][LIMELM]
Definition: iso.cpp:11
bool lgDR2Big
Definition: radius.h:174
Wind wind
Definition: wind.cpp:5
double xIonDense[LIMELM][LIMELM+1]
Definition: dense.h:135
long int iteration
Definition: cddefines.cpp:16
t_trace trace
Definition: trace.cpp:5
bool fp_equal(sys_float x, sys_float y, int n=3)
Definition: cddefines.h:854
double drad
Definition: radius.h:31
bool lgBallistic(void) const
Definition: wind.h:31
double rinner
Definition: radius.h:31
double sdrmin
Definition: radius.h:158
realnum AccelGravity
Definition: wind.h:49
t_geometry geometry
Definition: geometry.cpp:5
long ipoint(double energy_ryd)
Definition: cont_ipoint.cpp:15
realnum HColStop
Definition: stopcalc.h:69
realnum pden
Definition: dense.h:108
#define POW2
Definition: cddefines.h:979
bool lgSdrminRel
Definition: radius.h:166
bool lgTrace
Definition: trace.h:12
bool lgEnabled
Definition: h2_priv.h:352
double Depth2Go
Definition: radius.h:31
realnum qhtot
Definition: rfield.h:341
t_pressure pressure
Definition: pressure.cpp:9
t_rfield rfield
Definition: rfield.cpp:9
float realnum
Definition: cddefines.h:124
realnum uh
Definition: rfield.h:349
realnum AccelTotalOutward
Definition: wind.h:52
realnum col_species
Definition: stopcalc.h:134
bool lgSdrmaxRel
Definition: radius.h:167
string chSpeciesColumn
Definition: stopcalc.h:133
realnum flong
Definition: dense.h:262
realnum DirectionalCosin
Definition: geometry.h:25
DepthTable DLW
Definition: dense.h:198
double tabval(double r0, double depth) const
Definition: depth_table.cpp:8
diatomics h2("h2", 4100.,&hmi.H2_total, Yan_H2_CS)
sys_float safe_div(sys_float x, sys_float y, sys_float res_0by0)
Definition: cddefines.h:1011
t_iterations iterations
Definition: iterations.cpp:6
t_radius radius
Definition: radius.cpp:5
double HeatDexc
Definition: h2_priv.h:297
realnum gas_phase[LIMELM]
Definition: dense.h:76
realnum wmole
Definition: dense.h:111
#define ASSERT(exp)
Definition: cddefines.h:613
realnum taunu
Definition: stopcalc.h:26
char chDenseLaw[5]
Definition: dense.h:176
const int ipH_LIKE
Definition: iso.h:64
double drad_x_fillfac
Definition: radius.h:77
#define DEBUG_ENTRY(funcname)
Definition: cddefines.h:723
bool lgSMinON
Definition: radius.h:170
realnum xMassDensity
Definition: dense.h:101
double H2_total
Definition: hmi.h:25
#define MIN3(a, b, c)
Definition: cddefines.h:808
bool lgDROn
Definition: save.h:465
realnum tauend
Definition: stopcalc.h:23
#define MAX2(a, b)
Definition: cddefines.h:824
int fprintf(const Output &stream, const char *format,...)
Definition: service.cpp:1121
sys_float SDIV(sys_float x)
Definition: cddefines.h:1002
bool lgStatic(void) const
Definition: wind.h:24
realnum H2Opacity
Definition: hmi.h:38
t_hmi hmi
Definition: hmi.cpp:5
void ShowMe(void)
Definition: service.cpp:205
t_save save
Definition: save.cpp:5
FILE * ipDRout
Definition: save.h:464
const int ipHYDROGEN
Definition: cddefines.h:349
long int nflux
Definition: rfield.h:46
realnum windv
Definition: wind.h:18
double ctot
Definition: thermal.h:130