cloudy trunk
Loading...
Searching...
No Matches
iter_end_chk.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/*iter_end_check after each zone by Cloudy, determines whether model is complete */
4#include "cddefines.h"
5/* */
6#ifdef EPS
7# undef EPS
8#endif
9#define EPS 1.00001
10#include "lines.h"
11#include "mole.h"
12#include "conv.h"
13#include "rfield.h"
14#include "iterations.h"
15#include "trace.h"
16#include "dense.h"
17#include "colden.h"
18#include "taulines.h"
19#include "hmi.h"
20#include "prt.h"
21#include "phycon.h"
22#include "geometry.h"
23#include "stopcalc.h"
24#include "opacity.h"
25#include "thermal.h"
26#include "cooling.h"
27#include "predcont.h"
28#include "pressure.h"
29#include "radius.h"
30#include "called.h"
31#include "wind.h"
32#include "hcmap.h"
33
34/*dmpary print all coolants for some zone, as from print cooling command */
35STATIC void dmpary(void);
36
38{
39 bool lgDone,
40 lgEndFun_v,
41 lgPrinted;
42 long int i;
43 double oxy_in_grains;
44
45 DEBUG_ENTRY( "iter_end_check()" );
46
47 /* >>chng 05 nov 22 - NPA. Stop calculation when fraction of oxygen frozen
48 * out on grains gets too high -
49 * NB this test is not used since StopCalc.StopDepleteFrac is set to > 1 */
50 oxy_in_grains = 0.0f;
52 for(i=0;i<mole_global.num_calc;++i)
53 {
54 /* define the abundance of oxygen frozen out on grain surfaces */
55 if( mole_global.list[i]->nAtom.find(elOxygen) != mole_global.list[i]->nAtom.end() && mole_global.list[i]->parentLabel.empty() )
56 oxy_in_grains += (1 - mole_global.list[i]->lgGas_Phase)*mole.species[i].den*mole_global.list[i]->nAtom[elOxygen];
57 }
58 /*fprintf(ioQQQ, "DEBUG oxy in grains %.2e %e %e\n",
59 oxy_in_grains ,
60 oxy_in_grains/MAX2(SMALLFLOAT,dense.gas_phase[ipOXYGEN]) , StopCalc.StopDepleteFrac );*/
61
62 if( trace.lgTrace )
63 {
64 fprintf( ioQQQ, " iter_end_check called, zone %li.\n" , nzone);
65 }
66 ASSERT( hcmap.MapZone >= 00 || !conv.lgSearch );
67
68 /* >>chng 97 jun 09, now called before first zone with nzone 0 */
69 if( nzone == 0 )
70 {
71 lgEndFun_v = false;
72
73 if( trace.lgTrace )
74 {
75 fprintf( ioQQQ, " iter_end_check returns, doing nothing since zone 0.\n" );
76 }
77 return( lgEndFun_v );
78 }
79
80 /* check whether trace is needed for this zone and iteration */
81 if( (nzone >= trace.nznbug && iteration >= trace.npsbug) && trace.lgTrOvrd )
82 {
83 if( trace.nTrConvg==0 )
84 {
85 geometry.nprint = 1;
86 trace.lgTrace = true;
87 }
88 else
89 /* trace convergence entered = but with negative flag = make positive,
90 * abs and not mult by -1 since may trigger more than one time */
91 trace.nTrConvg = abs( trace.nTrConvg );
92 }
93
94 /* option to turn printout on after certain zone; only the master rank talks */
95 if( prt.lgPrtStart && prt.nstart == nzone )
96 {
97 called.lgTalk = cpu.i().lgMPI_talk();
98 }
99
100 /* check whether model is done, various criteria used. */
101 lgDone = false;
102
103 /* this is flag to check whether stopping reason was bad */
104 conv.lgBadStop = false;
105
106 /* set temperature floor option -
107 * go to constant temperature calculation if temperature
108 * falls below floor */
109 if( phycon.te < StopCalc.TeFloor )
110 {
111 thermal.lgTemperatureConstant = true;
112 thermal.ConstTemp = (realnum)StopCalc.TeFloor;
113 phycon.te = thermal.ConstTemp;
114 TempChange(thermal.ConstTemp , false);
116 }
117
118 /* check on radiation pressure - constant pressure unstable if dominated
119 * by radiation pressure */
120 if( (pressure.lgPres_radiation_ON && pressure.pbeta > 1.0) &&
121 (strcmp(dense.chDenseLaw ,"CPRE") == 0) &&
122 /* >>chng 03 aug 20, check on extreme values of pbeta, and abort if true */
123 (iterations.lgLastIt||(pressure.pbeta>1000.)) &&
124 /* >>chng 03 aug 19, add check on pbeta, and abort even if "no abort"
125 * was specified, since rad pres dominated limit can lead to VERY
126 * small H densities and crash due to underflow */
127 (pressure.lgRadPresAbortOK||(pressure.pbeta>1000.)) )
128 {
129 /* const total pres model; if RadPres>PGAS, then unstable, stop */
130 if( called.lgTalk )
131 {
132 fprintf( ioQQQ, "\n STOP since P(rad)/P(gas)=%7.3f >1.0\n",
133 pressure.pbeta );
134
135 fprintf( ioQQQ, " Line contributors to radiation pressure follows:\n" );
137 }
138 lgDone = true;
139 conv.lgBadStop = true;
140 strncpy( StopCalc.chReasonStop, "of radiation pressure.", sizeof(StopCalc.chReasonStop) );
141 }
142
143 /* radius and resulting volume too large for this cpu */
144 if( radius.drad_x_fillfac*radius.r1r0sq > BIGFLOAT/10.)
145 {
146 /* too big */
147 lgDone = true;
148 strncpy( StopCalc.chReasonStop, "volume too large for this cpu.", sizeof(StopCalc.chReasonStop) );
149 }
150 /* supersonic outflowing wind, initial velocity, windv0, was > 0,
151 * but it has coasted to a stop - lgVelPos is false */
152 else if( !wind.lgVelPos && wind.lgBallistic() )
153 {
154 /* wind solution with negative velocity */
155 lgDone = true;
156 strncpy( StopCalc.chReasonStop, "wind veloc too small.", sizeof(StopCalc.chReasonStop) );
157 }
158
159 else if( !wind.lgStatic() && fabs(wind.windv) < StopCalc.StopVelocity )
160 {
161 /* stop if absolute value of velocity falls below value */
162 lgDone = true;
163 strncpy( StopCalc.chReasonStop, "wind V too small.", sizeof(StopCalc.chReasonStop) );
164 }
165
166 else if( (StopCalc.nTotalIonizStop>0) && conv.nTotalIoniz> StopCalc.nTotalIonizStop )
167 {
168 /* stop if exceed number of calls to conv base set with
169 * stop nTotalIonizStop command */
170 lgDone = true;
171 strncpy( StopCalc.chReasonStop, "nTotalIonizStop reached.", sizeof(StopCalc.chReasonStop) );
172 }
173
174 /* this flag says that 21cm line optical depth is the stop quantity */
175 else if( StopCalc.lgStop21cm && (HFLines[0].Emis().TauCon() >= StopCalc.tauend) )
176 {
177 lgDone = true;
178 strncpy( StopCalc.chReasonStop, "21 cm optical depth.", sizeof(StopCalc.chReasonStop) );
179 }
180
181 else if( rfield.extin_mag_V_extended >= StopCalc.AV_extended )
182 {
183 /* stop at specified AV for (1-g) in scattering opacity */
184 lgDone = true;
185 strncpy( StopCalc.chReasonStop, "A_V reached.", sizeof(StopCalc.chReasonStop) );
186 }
187
188 else if( rfield.extin_mag_V_point >= StopCalc.AV_point )
189 {
190 /* stop at specified AV without (1-g) in scattering opacity */
191 lgDone = true;
192 strncpy( StopCalc.chReasonStop, "A_V reached.", sizeof(StopCalc.chReasonStop) );
193 }
194
195 else if( StopCalc.xMass!=0. &&
196 log10(SDIV(dense.xMassTotal))+1.0992099+ 2.*log10(radius.rinner) >= StopCalc.xMass )
197 {
198 /* stop at specified AV without (1-g) in scattering opacity */
199 lgDone = true;
200 strncpy( StopCalc.chReasonStop, "mass reached.", sizeof(StopCalc.chReasonStop) );
201 }
202
203 /* >>chg 02 may 31, added pressure.lgSonicPoint logic */
204 /* WJH 19 May 2004: for some models, we want to get through the
205 * sonic point and out the other side */
206 else if( pressure.lgSonicPoint && pressure.lgSonicPointAbortOK )
207 {
208 /* D-critical solution reached sonic point */
209 lgDone = true;
210 strncpy( StopCalc.chReasonStop, "sonic point reached.", sizeof(StopCalc.chReasonStop) );
211 }
212
213 else if( dense.EdenTrue==0 )
214 {
215 /* calculation failed */
216 conv.lgBadStop = true;
217 lgDone = true;
218 strncpy( StopCalc.chReasonStop, "zero electron density.", sizeof(StopCalc.chReasonStop) );
219 }
220
221 else if( radius.lgdR2Small )
222 {
223 lgDone = true;
224 conv.lgBadStop = true;
225 strncpy( StopCalc.chReasonStop, "DR small rel to thick.", sizeof(StopCalc.chReasonStop) );
226 }
227
228 else if( dense.eden < StopCalc.StopElecDensity )
229 {
230 lgDone = true;
231 strncpy( StopCalc.chReasonStop, "lowest EDEN reached.", sizeof(StopCalc.chReasonStop) );
232 }
233
234 else if( dense.eden/dense.gas_phase[ipHYDROGEN] < StopCalc.StopElecFrac )
235 {
236 lgDone = true;
237 strncpy( StopCalc.chReasonStop, "low electron fraction.", sizeof(StopCalc.chReasonStop) );
238 }
239
240 /* >>chng 05 nov 22, NA add this stop condition - stop when too many molecules
241 * are ices or solids on grains - the limit StopCalc.StopDepleteFrac is changed
242 * with the stop molecular depletion command */
243 else if( dense.lgElmtOn[ipOXYGEN] &&
244 (oxy_in_grains/MAX2(SMALLFLOAT,dense.gas_phase[ipOXYGEN])) > StopCalc.StopDepleteFrac )
245 {
246 lgDone = true;
247 strncpy( StopCalc.chReasonStop, "freeze out fraction.", sizeof(StopCalc.chReasonStop) );
248 }
249
250 /*else if( 2.*findspecieslocal("H2")->den/dense.gas_phase[ipHYDROGEN] < StopCalc.StopH2MoleFrac )*/
251 else if( 2.*hmi.H2_total/dense.gas_phase[ipHYDROGEN] > StopCalc.StopH2MoleFrac )
252 {
253 lgDone = true;
254 strncpy( StopCalc.chReasonStop, "large H_2/H fraction.", sizeof(StopCalc.chReasonStop) );
255 }
256
257 else if( dense.xIonDense[ipHYDROGEN][1]/dense.gas_phase[ipHYDROGEN] <
258 StopCalc.StopHPlusFrac )
259 {
260 lgDone = true;
261 strncpy( StopCalc.chReasonStop, "low H_+/H fraction.", sizeof(StopCalc.chReasonStop) );
262 }
263
264 else if( radius.lgDrMinUsed )
265 {
266 /* dr became too small */
267 conv.lgBadStop = true;
268 lgDone = true;
269 strncpy( StopCalc.chReasonStop, "DRAD small- set DRMIN.", sizeof(StopCalc.chReasonStop) );
270 }
271
272 else if( radius.depth >= radius.StopThickness[iteration-1]/EPS )
273 {
274 lgDone = true;
275 strncpy( StopCalc.chReasonStop, "outer radius reached.", sizeof(StopCalc.chReasonStop) );
276 }
277
278 else if( StopCalc.iptnu >= 0 &&
279 opac.TauAbsGeo[0][StopCalc.iptnu-1] >= StopCalc.tauend/EPS )
280 {
281 lgDone = true;
282 strncpy( StopCalc.chReasonStop, "optical depth reached.", sizeof(StopCalc.chReasonStop) );
283 }
284
285 else if( StopCalc.lgStopSpeciesColumn &&
286 findspecieslocal( StopCalc.chSpeciesColumn )->column >= StopCalc.col_species/EPS )
287 {
288 /* StopCalc.col_species default set to COLUMN_INIT == 1e30 */
289 lgDone = true;
290 sprintf( StopCalc.chReasonStop, "%s column dens reached.", StopCalc.chSpeciesColumn );
291 //strncpy( StopCalc.chReasonStop, "H column dens reached.", sizeof(StopCalc.chReasonStop) );
292 }
293
294 else if( colden.colden[ipCOL_HTOT] >= StopCalc.HColStop/EPS )
295 {
296 /* StopCalc.HColStop default set to COLUMN_INIT == 1e30 */
297 lgDone = true;
298 strncpy( StopCalc.chReasonStop, "H column dens reached.", sizeof(StopCalc.chReasonStop) );
299 }
300
301 else if( colden.colden[ipCOL_Hp] >= StopCalc.colpls/EPS )
302 {
303 lgDone = true;
304 strncpy( StopCalc.chReasonStop, "H+ column dens reached.", sizeof(StopCalc.chReasonStop) );
305 }
306
307 else if( (colden.colden[ipCOL_H2g]+colden.colden[ipCOL_H2s]) >= StopCalc.col_h2/EPS )
308 {
309 /* >>chng 03 apr 15, add molecular hydrogen */
310 lgDone = true;
311 strncpy( StopCalc.chReasonStop, "H2 column dens reached.", sizeof(StopCalc.chReasonStop) );
312 }
313
314 else if( (2.*(colden.colden[ipCOL_H2g]+colden.colden[ipCOL_H2s]) + colden.colden[ipCOL_H0]) >= StopCalc.col_h2_nut/EPS )
315 {
316 /* >>chng 04 feb 10, stopping command for H2 + H I */
317 lgDone = true;
318 strncpy( StopCalc.chReasonStop, "H2+H0 column dens reached.", sizeof(StopCalc.chReasonStop) );
319 }
320
321 else if( colden.H0_ov_Tspin >= StopCalc.col_H0_ov_Tspin/EPS )
322 {
323 /* >>chng 05 jan 09, stopping command for N(H0) / Tspin */
324 lgDone = true;
325 strncpy( StopCalc.chReasonStop, "N(H0)/Tspin column dens reached.", sizeof(StopCalc.chReasonStop) );
326 }
327
328 else if( findspecieslocal("CO")->column >= StopCalc.col_monoxco/EPS )
329 {
330 /* >>chng 03 oct 27--Nick Abel, add carbon monoxide */
331 lgDone = true;
332 strncpy( StopCalc.chReasonStop, "CO column dens reached.", sizeof(StopCalc.chReasonStop) );
333 }
334
335 else if( colden.colden[ipCOL_H0] >= StopCalc.colnut/EPS )
336 {
337 lgDone = true;
338 strncpy( StopCalc.chReasonStop, "H0 column dens reached.", sizeof(StopCalc.chReasonStop) );
339 }
340
341 else if( phycon.te > StopCalc.TempHiStopZone )
342 {
343 lgDone = true;
344 strncpy( StopCalc.chReasonStop, "highest Te reached.", sizeof(StopCalc.chReasonStop) );
345 }
346
347 else if( phycon.te < StopCalc.TempLoStopZone )
348 {
349 lgDone = true;
350 strncpy( StopCalc.chReasonStop, "lowest Te reached.", sizeof(StopCalc.chReasonStop) );
351 }
352
353 else if( nzone >= geometry.nend[iteration-1] )
354 {
355 lgDone = true;
356 geometry.lgZoneTrp = true;
357 strncpy( StopCalc.chReasonStop, "NZONE reached.", sizeof(StopCalc.chReasonStop) );
358 }
359
360 /* option to stop calculation when line intensity ratio reaches certain value,
361 * nstpl is number of stop line commands entered */
362 else if( StopCalc.nstpl > 0 || StopCalc.ContIndex.size() > 0 )
363 {
364 /* line ratio exceeded maximum permitted value
365 * do not consider case where norm line has zero intensity */
366 for( i=0; i < StopCalc.nstpl; i++ )
367 {
368 /* the second line is always set to something, default is H beta */
369 if( LineSv[StopCalc.ipStopLin2[i]].SumLine[StopCalc.nEmergent[i]] > 0. )
370 {
371 char chString[10];
372 if( LineSv[StopCalc.ipStopLin1[i]].SumLine[StopCalc.nEmergent[i]]/
373 LineSv[StopCalc.ipStopLin2[i]].SumLine[StopCalc.nEmergent[i]] >
374 StopCalc.stpint[i] )
375 {
376 lgDone = true;
377 sprt_wl( chString , StopCalc.StopLineWl1[i] );
378 sprintf( StopCalc.chReasonStop, "line %s %s reached",
379 StopCalc.chStopLabel1[i] , chString );
380 }
381 }
382 }
383 /* continuum flux exceeded maximum permitted value */
384 for( size_t k=0; k < StopCalc.ContIndex.size(); ++k )
385 {
386 // there are 4 entries for each wavelength: nFnu, nInu, InwT, InwC
387 long ind = t_PredCont::Inst().offset() + 4*StopCalc.ContIndex[k];
388 double nFnu_model = LineSv[ind].SumLine[0]*pow(10.,radius.Conv2PrtInten);
389 if( nFnu_model >= StopCalc.ContNFnu[k].get("erg/s/cm2") )
390 {
391 char chTemp[10];
392 lgDone = true;
393 sprt_wl( chTemp, LineSv[ind].wavelength );
394 sprintf( StopCalc.chReasonStop, "flux %s %s reached",
395 LineSv[ind].chALab, chTemp );
396 }
397 }
398 }
399
400 else if( radius.drNext <= 0. )
401 {
402 /* this cant happen */
403 if( called.lgTalk )
404 {
405 fprintf( ioQQQ, " drNext=%10.2e STOP\n", radius.drNext );
406 }
407 lgDone = true;
408 conv.lgBadStop = true;
409 strncpy( StopCalc.chReasonStop, "internal error - DRAD.", sizeof(StopCalc.chReasonStop) );
410 ShowMe();
412 }
413
414 else if( lgAbort )
415 {
416 /* calculation failed */
417 conv.lgBadStop = true;
418 lgDone = true;
419 strncpy( StopCalc.chReasonStop, "calculation aborted.", sizeof(StopCalc.chReasonStop) );
420 }
421
422 lgPrinted = false;
423 if( lgDone )
424 {
425 /* flag to call it quits */
426 lgEndFun_v = true;
427 PrtZone();
428 lgPrinted = true;
429 }
430
431 else
432 {
433 /* passed all the tests, keep going */
434 /* check whether this zone should be printed */
435 if( ((nzone/geometry.nprint)*geometry.nprint == nzone ||
436 nzone == 1) || trace.nTrConvg )
437 {
438 PrtZone();
439 lgPrinted = true;
440 }
441 /* flag to keep going */
442 lgEndFun_v = false;
443 }
444
445 /* dump cooling arrays for this zone? */
446 if( prt.nzdump == nzone || prt.nzdump == 0 )
447 dmpary();
448
449 /* do map of cooling function if desired, and not yet done */
450 /* >>chng 02 may 29, MapZone < = to <= 0 - map 0 did not work */
451 /* >>chng 04 jun 16, change to MapZone = 0 for map of first zone then quit,
452 * -1 is not set, positive, do map of that zone */
453 if( !hcmap.lgMapDone && (hcmap.MapZone == 0 || nzone == hcmap.MapZone) )
454 {
455 /* print last zone if not already done */
456 if( !lgPrinted )
457 {
458 PrtZone();
459 }
460
461 /* say that we are doing a map */
462 hcmap.lgMapBeingDone = true;
463
464 /* save old output file then redirect to map file */
465 /* >>chng 01 mar 28, ioMAP may not be initialized, PvH */
466 if( ioMAP != NULL )
467 map_do(ioMAP, " map");
468 else
469 map_do(ioQQQ, " map");
470
471 /* stop after doing map */
472 lgEndFun_v = true;
473 strncpy( StopCalc.chReasonStop, "MAP command used-stop.", sizeof(StopCalc.chReasonStop) );
474
475 /* >>chng 03 jun 06, reset iterations since we want to stop even if
476 * iterate xx is specified, bug caught by Joop Schaye */
477 iterations.itermx = 0;
478
479 /* make really sure that the string contained in StopCalc.chReasonStop is properly terminated */
480 StopCalc.chReasonStop[sizeof(StopCalc.chReasonStop)-1] = '\0';
481
482 if( trace.lgTrace )
483 {
484 fprintf( ioQQQ, " iter_end_check returns after map.\n" );
485 }
486 return( lgEndFun_v );
487 }
488
489 if( lgEndFun_v && prt.lgOnlyZone )
490 {
492 }
493
494 /* the string contained in StopCalc.chReasonStop must be properly
495 * terminated -this can't fail - strlen returns the number of characters
496 * in str, excluding the terminal NULL.*/
497 if( strlen( StopCalc.chReasonStop ) >= nCHREASONSTOP-1 )
499
500 if( trace.lgTrace )
501 {
502 fprintf( ioQQQ, " iter_end_check bottom return.\n" );
503 }
504 return( lgEndFun_v );
505}
506
507#ifdef EPS
508# undef EPS
509#endif
510#define EPS 0.005
511/*dmpary print all coolants for some zone, as from print cooling command */
512STATIC void dmpary(void)
513{
514 long int i;
515 realnum ratio;
516
517 DEBUG_ENTRY( "dmpary()" );
518
519 fprintf( ioQQQ,
520 " This is a print out of the cooling array for zone number %3ld\n",
521 nzone );
522
523 fprintf( ioQQQ,
524 " The total heating was HTOT=%10.2e erg/s/cm3, the total cooling was CTOT=%10.2e, and the temperature was%10.3eK.\n",
525 thermal.htot, thermal.ctot, phycon.te );
526
527 fprintf( ioQQQ,
528 " All coolants greater than%6.2f%% of the total will be printed.\n",
529 EPS*100. );
530
531 /* flag all significant coolants */
532 coolpr(ioQQQ,"ZERO",1,0.,"ZERO");
533 for( i=0; i < thermal.ncltot; i++ )
534 {
535 ratio = (realnum)(thermal.cooling[i]/thermal.ctot);
536 if( fabs(ratio) > EPS )
537 {
538 coolpr(ioQQQ,(char*)thermal.chClntLab[i],thermal.collam[i],
539 ratio,"DOIT");
540 }
541
542 ratio = (realnum)(thermal.heatnt[i]/thermal.ctot);
543 if( fabs(ratio) > EPS )
544 {
545 coolpr(ioQQQ,(char*)thermal.chClntLab[i],thermal.collam[i],
546 ratio,"DOIT");
547 }
548 }
549 coolpr(ioQQQ,"DONE",1,0.,"DONE");
550 return;
551}
t_called called
Definition called.cpp:5
long int nzone
Definition cddefines.cpp:14
FILE * ioQQQ
Definition cddefines.cpp:7
bool lgAbort
Definition cddefines.cpp:10
long int iteration
Definition cddefines.cpp:16
#define ASSERT(exp)
Definition cddefines.h:578
#define STATIC
Definition cddefines.h:97
const int ipOXYGEN
Definition cddefines.h:312
FILE * ioMAP
Definition cdinit.cpp:9
#define EXIT_FAILURE
Definition cddefines.h:140
#define cdEXIT(FAIL)
Definition cddefines.h:434
float realnum
Definition cddefines.h:103
#define MAX2
Definition cddefines.h:782
NORETURN void TotalInsanity(void)
Definition service.cpp:886
sys_float SDIV(sys_float x)
Definition cddefines.h:952
const int ipHYDROGEN
Definition cddefines.h:305
#define DEBUG_ENTRY(funcname)
Definition cddefines.h:684
void ShowMe(void)
Definition service.cpp:181
LinSv * LineSv
Definition cdinit.cpp:70
static t_PredCont & Inst()
Definition cddefines.h:175
long offset() const
Definition predcont.h:36
t_colden colden
Definition colden.cpp:5
#define ipCOL_HTOT
Definition colden.h:12
#define ipCOL_H2s
Definition colden.h:18
#define ipCOL_H2g
Definition colden.h:16
#define ipCOL_Hp
Definition colden.h:26
#define ipCOL_H0
Definition colden.h:22
t_conv conv
Definition conv.cpp:5
#define EPS
void coolpr(FILE *io, const char *chLabel, realnum lambda, double ratio, const char *chJOB)
Definition cool_pr.cpp:9
static t_cpu cpu
Definition cpu.h:355
UNUSED const realnum BIGFLOAT
Definition cpu.h:189
const realnum SMALLFLOAT
Definition cpu.h:191
t_dense dense
Definition dense.cpp:24
t_geometry geometry
Definition geometry.cpp:5
t_hcmap hcmap
Definition hcmap.cpp:21
void map_do(FILE *io, const char *chType)
Definition hcmap.cpp:23
t_hmi hmi
Definition hmi.cpp:5
STATIC void dmpary(void)
int iter_end_check(void)
t_iterations iterations
Definition iterations.cpp:5
t_mole_global mole_global
Definition mole.cpp:6
t_mole_local mole
Definition mole.cpp:7
molezone * findspecieslocal(const char buf[])
ChemAtomList unresolved_atom_list
static realnum * wavelength
t_opac opac
Definition opacity.cpp:5
t_phycon phycon
Definition phycon.cpp:6
t_pressure pressure
Definition pressure.cpp:5
void sprt_wl(char *chString, realnum wl)
Definition prt.cpp:25
t_prt prt
Definition prt.cpp:10
void PrtZone(void)
Definition prt_zone.cpp:36
void PrtLinePres(FILE *ioPRESSURE)
t_radius radius
Definition radius.cpp:5
t_rfield rfield
Definition rfield.cpp:8
t_StopCalc StopCalc
Definition stopcalc.cpp:5
const int nCHREASONSTOP
Definition stopcalc.h:16
TransitionList HFLines("HFLines", &AnonStates)
void TempChange(double TempNew, bool lgForceUpdate)
t_thermal thermal
Definition thermal.cpp:5
t_trace trace
Definition trace.cpp:5
Wind wind
Definition wind.cpp:5