cloudy  trunk
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
parse_atom_iso.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 /*ParseAtomISO parse information from the atom XX-like command line */
4 #include "cddefines.h"
5 #include "elementnames.h"
6 #include "optimize.h"
7 #include "hydrogenic.h"
8 #include "input.h"
9 #include "iso.h"
10 #include "parser.h"
11 #include "phycon.h"
12 #include "rfield.h"
13 #include "taulines.h"
14 #include "thirdparty.h"
15 
16 /*ParseAtomISO parse parameters off the XX-like command */
17 void ParseAtomISO(long ipISO, Parser &p )
18 {
19  long int numLevels;
20 
21  DEBUG_ENTRY( "ParseAtomISO()" );
22 
23  /* look for the name of an element - if we don't find one do the entire
24  * iso sequence - returns negative number if element not found */
25  long int nelem = p.GetElem( );
26 
27  /* H-like Helium is not possible */
28  if( ipISO==ipHE_LIKE && nelem==ipHYDROGEN )
29  {
30  fprintf(ioQQQ," Sorry, H-like He does not exist.\n");
32  }
33 
34  /* collisions - don't pick up the levels collapsed command */
35  if( p.nMatch("COLL") && !p.nMatch("LEVE" ) )
36  {
37  /* option to turn collisions off, all are
38  * set to 1 in zero. command can accept only one option at a time */
39  if( p.nMatch("EXCI") )
40  {
41  /* turn off collisional excitation */
42  iso_ctrl.lgColl_excite[ipISO] = false;
43  phycon.lgPhysOK = false;
44  }
45  else if( p.nMatch("IONI") )
46  {
47  /* turn off collisional ionization */
48  iso_ctrl.lgColl_ionize[ipISO] = false;
49  phycon.lgPhysOK = false;
50  }
51 
52  else if( p.nMatch("2S2P") || ( p.nMatch("2P2S") && ipISO == ipH_LIKE ) )
53  {
54  /* >>chng 02 feb 07, change from 2s2p to l-mixing */
55  /* this is the atom h-like collision l-mixing command */
56  fprintf(ioQQQ,"This command changed to ATOM H-LIKE COLLISIONS L-MIXING\n");
57  fprintf(ioQQQ,"I will parse it for now, but may not in the future.\n");
58  /* turn off 2s - 2p collisions */
59  iso_ctrl.lgColl_l_mixing[ipISO] = false;
60  phycon.lgPhysOK = false;
61  }
62 
63  else if( p.nMatch("L-MI") )
64  {
65  if( ipISO == ipH_LIKE )
66  {
67  /* >>chng 02 feb 07, change from 2s2p to l-mixing */
68  /* this is the atom h-like collision l-mixing command */
69  iso_ctrl.lgColl_l_mixing[ipISO] = false;
70  phycon.lgPhysOK = false;
71  }
72  else if( p.nMatch("THER") )
73  {
74  /* use l-mix from
75  *>>refer l-mix all Vrinceanu, D. & Flannery, M. R. 2001, PhysRevA 63, 032701 */
76  if( p.nMatch("NO T") )
77  {
78  /* This is the "NO Thermal average" command. It
79  * causes collisions strengths to be evaluated at kT rather than
80  * integrated over a Maxwellian peaked at kT. */
81  iso_ctrl.lgCS_therm_ave[ipISO] = false;
82  }
83  else
84  {
85  iso_ctrl.lgCS_therm_ave[ipISO] = true;
86  }
87  }
88  else if( p.nMatch("PENG") )
89  {
90  iso_ctrl.lgCS_Vrinceanu[ipISO] = false;
91  }
92  else if( p.nMatch(" OFF" ) )
93  {
94  /* this is the atom xx-like collision l-mixing command */
95  /* turn off same-n collisions */
96  iso_ctrl.lgColl_l_mixing[ipISO] = false;
97  phycon.lgPhysOK = false;
98  iso_ctrl.lgCS_Vrinceanu[ipISO] = false;
99  iso_ctrl.lgCS_therm_ave[ipISO] = false;
100  }
101  else
102  {
103  fprintf( ioQQQ, " needs parameter\n" );
105  }
106  }
107  else if( p.nMatch(" OFF" ) )
108  {
109  /* turn everything off, since no keyword given */
110  iso_ctrl.lgColl_excite[ipISO] = false;
111  iso_ctrl.lgColl_ionize[ipISO] = false;
112  iso_ctrl.lgColl_l_mixing[ipISO] = false;
113  phycon.lgPhysOK = false;
114  }
115  else
116  {
117  fprintf( ioQQQ, " needs parameter\n" );
119  }
120  }
121 
122  else if( p.nMatch("CONT") && p.nMatch("LOWE") )
123  {
124  /* disable continuum lowering for this isoelectronic sequence */
125  if( p.nMatch("OFF") )
126  iso_ctrl.lgContinuumLoweringEnabled[ipISO] = false;
127  else
128  iso_ctrl.lgContinuumLoweringEnabled[ipISO] = true;
129  }
130 
131  else if( p.nMatch("DAMP") )
132  {
133  if( ipISO == ipHE_LIKE )
134  {
135  fprintf(ioQQQ," Sorry, the DAMPING option is not implemented for the he-like sequence.\n");
137  }
138 
139  /* turn off absorption due to Ly alpha damping wings */
140  hydro.DampOnFac = 0.;
141  }
142 
143  else if( p.nMatch("DIEL") )
144  {
145  if( ipISO == ipH_LIKE )
146  {
147  fprintf(ioQQQ," Sorry, but dielectronic recombination onto the h-like sequence is not possible.\n");
149  }
150 
151  /* This sets which set of data to use for dielectronic recombination. */
152  if( p.nMatch(" OFF") )
153  {
154  iso_ctrl.lgDielRecom[ipISO] = false;
155  }
156  else
157  iso_ctrl.lgDielRecom[ipISO] = true;
158  }
159 
160  else if( p.nMatch("LEVE") )
161  {
162  /* the number of levels read in is n, the principal quantum number
163  * only lines with upper levels less than n will be printed */
164 
165  /* number of levels for iso-sequence */
166  /* there are two options here,
167  * when keyword ELEMENT appears, scan off element name and change levels only for
168  * that one.
169  * when there is no ELEMENT then set all in iso to same number */
170 
171  /* lgHydroMalloc is false at start of calculation, set true when space
172  * allocated for the hydrogen and helium lines. Once done we must ignore all
173  * future changes in the number of levels */
174  if( p.nMatch("LTE") )
175  {
176  /* force level ratios to LTE */
177  iso_ctrl.lgLTE_levels[ipISO] = true;
178  }
179  else if( p.nMatch("PRIN") )
180  {
181  /* only print - do not change levels */
183  }
184  else if( !lgHydroMalloc )
185  {
186  numLevels = (long int)p.FFmtRead();
187 
188  if( !p.lgEOL() )
189  {
190  if( ipISO == ipH_LIKE && numLevels > NHYDRO_MAX_LEVEL-2 )
191  {
192  fprintf( ioQQQ, " Not possible to set nhlvl to >NHYDRO_MAX_LEVEL-2= %i\n",
193  NHYDRO_MAX_LEVEL-2 );
194  fprintf( ioQQQ, " change NHYDRO_MAX_LEVEL\n");
196  }
197 
198  /* check that alpha transition of highest level is within energy bounds of continuum */
199  if( !p.nMatch("COLL") && ipISO == ipH_LIKE &&
200  ( 2. / POW3((double)numLevels) < rfield.emm ) )
201  {
202  fprintf( ioQQQ, " Not possible to set iso_sp[ipH_LIKE][ipHYDROGEN].numLevels_max to such a high value, since "
203  "alpha transition not within energy bounds of code\n");
204 
205  fprintf( ioQQQ, " lowest energy is %e and corresponding highest level is %li\n" ,
206  rfield.emm, (long)pow(2./rfield.emm, 0.3333) );
208  }
209  }
210 
211  if( p.lgEOL() )
212  {
213  int LevelsResolved=-1 , LevelsCollapsed=10;
214  /* no number, so check for either large or small */
215  if( p.nMatch("LARG") )
216  {
217  /* includes all levels with tabulated rec coefficient */
218  LevelsResolved = RREC_MAXN;
219  }
220 
221  /* this is small or compact keyword */
222  else if( p.nMatch("SMAL") || p.nMatch("COMP") )
223  {
224  if( ipISO == ipH_LIKE )
225  LevelsResolved = 5;
226  else if( ipISO == ipHE_LIKE )
227  LevelsResolved = 3;
228  }
229  else
230  /* punch out if no number */
231  p.NoNumb("levels");
232 
233  if( nelem<0 )
234  {
235  // element not specified, do entire sequence
236  for( nelem=ipISO; nelem<LIMELM; ++nelem )
237  {
238  iso_sp[ipISO][nelem].nCollapsed_max =
239  MIN2( iso_sp[ipISO][nelem].nCollapsed_max , LevelsCollapsed );
240  iso_sp[ipISO][nelem].n_HighestResolved_max =
241  MIN2( iso_sp[ipISO][nelem].n_HighestResolved_max , LevelsResolved );
242  iso_update_num_levels( ipISO, nelem );
243  }
244  }
245  else
246  {
247  iso_sp[ipISO][nelem].nCollapsed_max = LevelsCollapsed;
248  iso_sp[ipISO][nelem].n_HighestResolved_max = LevelsResolved;
249  iso_update_num_levels( ipISO, nelem );
250  }
251  }
252 
253  else if( p.nMatch("COLLAP") )
254  {
255  // set number of collapsed levels
256  if( numLevels < 1 )
257  {
258  fprintf( ioQQQ, "There must be at least one collapsed level.\n");
260  }
261 
262  if( nelem<0 )
263  {
264  // element not specified, do entire sequence
265  for( nelem=ipISO; nelem<LIMELM; ++nelem )
266  {
267  iso_sp[ipISO][nelem].nCollapsed_max = numLevels;
268  iso_update_num_levels( ipISO, nelem );
269  }
270  }
271  else
272  {
273  iso_sp[ipISO][nelem].nCollapsed_max = numLevels;
274  iso_update_num_levels( ipISO, nelem );
275  }
276  }
277  else if( p.nMatch("RESOLV") )
278  {
279  // number of resolved levels
280  if( ( numLevels < 3 ) && !p.nMatch("COLL") )
281  {
282  fprintf( ioQQQ, " cannot have fewer than 3 resolved levels, the requested number was %li\n" ,
283  numLevels );
284  fprintf( ioQQQ, " Sorry.\n" );
286  }
287 
288  if( nelem<0 )
289  {
290  // element not specified, do entire sequence
291  for( nelem=ipISO; nelem<LIMELM; ++nelem )
292  {
293  iso_sp[ipISO][nelem].n_HighestResolved_max = numLevels;
294  iso_update_num_levels( ipISO, nelem );
295  }
296  }
297  else
298  {
299  iso_sp[ipISO][nelem].n_HighestResolved_max = numLevels;
300  iso_update_num_levels( ipISO, nelem );
301  }
302  }
303  else
304  {
305  fprintf(ioQQQ, "I did not recognize a keyword on this atom xx-like levels command."
306  " Should be COLLAPSED or RESOLVED.\n Sorry.\n\n");
308  }
309  }
310  }
311 
312  else if( p.nMatch("ERRO") && p.nMatch("GENE" ) )
313  {
314  /* Rates will be modified by a randomly generated error that falls within
315  * the range specifically set for each rate (or set of rates). */
316  iso_ctrl.lgRandErrGen[ipISO] = true;
317  iso_ctrl.modelRank[ipISO] = (int)p.FFmtRead();
318 
319  iso_ctrl.modelRank[ipISO] = MAX2( 0, iso_ctrl.modelRank[ipISO] );
320  if( p.lgEOL() )
321  /* Changed to avoid lint complaint */
322  /* iso_ctrl.modelRank[ipISO] = (unsigned)time(NULL); */
323  iso_ctrl.modelRank[ipISO] = abs((int)time(NULL));
324 
325  /* this allows a seed that is dependent upon the processor rank
326  * in a parallel run. */
327  /* We add 2 so that the seed is always greater than 1, which would reset the generator. */
328  init_genrand( (unsigned)iso_ctrl.modelRank[ipISO] + 2);
329 
330  if( p.nMatch("PESS") )
332  else
334  }
335 
336  else if( p.nMatch(" FSM") )
337  {
338  if( ipISO == ipH_LIKE )
339  {
340  fprintf(ioQQQ," Sorry, but fine-structure mixing can only be implemented for the He-like sequence.\n");
342  }
343 
344  /* turn on fine structure mixing of spontaneous decays.
345  * >>refer Helike FSM Bauman, R., MacAdams, K., and Ferland, G. (2003). */
346  if( p.nMatch(" OFF") )
347  iso_ctrl.lgFSM[ipISO] = false;
348  else
349  iso_ctrl.lgFSM[ipISO] = true;
350  }
351 
352  else if( p.nMatch("GBAR") )
353  {
354  if( ipISO == ipH_LIKE )
355  {
356  fprintf(ioQQQ," Sorry, the GBAR option is only implemented for the He-like sequence.\n");
358  }
359 
360  /* the HEGBAR command - to change cs of higher levels */
361  /* first turn all off, one will be turned back on */
362  iso_ctrl.lgCS_Vriens[ipISO] = false;
363  iso_ctrl.lgCS_None[ipISO] = false;
364  iso_ctrl.nCS_new[ipISO] = false;
365 
366  /* now turn one on */
367  if( p.nMatch("VRIE") )
368  {
369  /* option to change how collisions for unknown levels affect things */
370  iso_ctrl.lgCS_Vriens[ipISO] = true;
371  }
372  else if( p.nMatch(" NEW") )
373  {
374  /* option to change how collisions for unknown levels affect things */
375  iso_ctrl.nCS_new[ipISO] = (int)p.FFmtRead();
376 
377  /* there are two options, 1 and 2, for which fit - default (no number)
378  * will be 1, the broken power law fit */
379  if( p.lgEOL() )
380  iso_ctrl.nCS_new[ipISO] = 1;
381 
382  ASSERT( iso_ctrl.nCS_new[ipISO] );
383  }
384  else if( p.nMatch(" OFF") )
385  {
386  /* option to change how collisions for unknown levels affect things */
387  iso_ctrl.lgCS_None[ipISO] = true;
388  }
389  else
390  {
391  fprintf( ioQQQ, " needs parameter\n" );
393  }
394  }
395 
396 
397  else if( p.nMatch("LYMA") )
398  {
399  if( ipISO == ipH_LIKE && p.nMatch("PUMP") )
400  {
401  /* >>chng 05 jul 08, separate out Lyman pump commands */
402  if( p.nMatch(" OFF") )
403  {
404  /* option to turn off all continuum pumping of Lyman lines */
405  hydro.lgLymanPumping = false;
406  }
407  else if( p.nMatch("SCALE") )
408  {
409  /* multiplicative factor for all continuum pumping of H I Lyman lines,
410  * account for possible emission in the line - only affects H I
411  * not entire H-like iso sequence */
413  (realnum)p.FFmtRead();
414  /* scale factor is log if <=0,
415  * represents line in emission if >1
416  * LOG keyword forces interpretation as a log */
417  if( hydro.xLymanPumpingScaleFactor <= 0. ||
418  p.nMatch(" LOG") )
419  {
422  }
423 
424  /* vary option */
425  if( optimize.lgVarOn )
426  {
428  strcpy( optimize.chVarFmt[optimize.nparm], "ATOM H-LIKE LYMAN PUMPING SCALE %f LOG" );
429 
430  /* pointer to where to write */
432 
433  /* current parameters - always log so steps are log */
434  optimize.vincr[optimize.nparm] = 0.1f;
436  ++optimize.nparm;
437  }
438  }
439  else
440  {
441  fprintf(ioQQQ," Sorry, I didn\'t recognize an option on this ATOM H-LIKE LYMAN PUMP command.\n");
442  fprintf(ioQQQ," The options are \" OFF\", and \"SCALE\".\n");
444  }
445  }
446  else if( p.nMatch("EXTRA") )
447  {
448  /* option to set number of "extra" Lyman lines, used for optical depths only */
449  iso_ctrl.nLyman[ipISO] = (long int)p.FFmtRead();
450  if( p.lgEOL() )
451  p.NoNumb("'extra' Lyman lines");
452  if( iso_ctrl.nLyman[ipISO] < 2 )
453  {
454  // Code does not elsewhere protect against values less than 2.
455  fprintf(ioQQQ," Sorry, the value on this ATOM xx-LIKE LYMAN command must be at least 2.\n");
457  }
458  }
459  else
460  {
461  fprintf(ioQQQ," Sorry, I didn\'t recognize an option on this ATOM xx-LIKE LYMAN command.\n");
462  fprintf(ioQQQ," The options are \"PUMP\", and \"EXTRA\".\n");
464  }
465  }
466 
467  /* don't interpolate on look-up tables but compute recombination on the fly instead */
468  else if( p.nMatch("RECO") &&
469  p.nMatch(" NO ") && p.nMatch("INTE") )
470  {
471  /* flag set by atom xx-like no recombination interp command,
472  * says to generate recombination coefficients
473  * on the fly */
474  iso_ctrl.lgNoRecombInterp[ipISO] = true;
475  }
476 
477  else if( p.nMatch("REDI") )
478  {
479  int ipRedis=0;
480  /* there are three functions, PRD_, CRD_, and CRDW,
481  * representing partial redistribution,
482  * complete redistribution (doppler core only, no wings)
483  * and complete with wings */
484  /* partial redistribution */
485  if( p.nMatch(" PRD") )
486  {
487  ipRedis = ipPRD;
488  }
489  /* complete redistribution no wings */
490  else if( p.nMatch(" CRD") )
491  {
492  ipRedis = ipCRD;
493  }
494  /* complete redistribution with wings */
495  else if( p.nMatch("CRDW") )
496  {
497  ipRedis = ipCRDW;
498  }
499 
500  /* if not SHOW option (handled below) then we have a problem */
501  else if( !p.nMatch("SHOW") )
502  {
503  fprintf(ioQQQ," There should have been a second keyword on this command.\n");
504  fprintf(ioQQQ," Options are _PRD, _CRD, CRDW (_ is space). Sorry.\n");
506  }
507 
508  /* resonance lines - not Lya*/
509  if( p.nMatch("ALPH") )
510  {
511  iso_ctrl.ipLyaRedist[ipISO] = ipRedis;
512  }
513  /* Lya itself */
514  else if( p.nMatch("RESO") )
515  {
516  iso_ctrl.ipResoRedist[ipISO] = ipRedis;
517  }
518  /* subordinate lines */
519  else if( p.nMatch("SUBO") )
520  {
521  iso_ctrl.ipSubRedist[ipISO] = ipRedis;
522  }
523  /* the show option, say what we are assuming */
524  else if( p.nMatch("SHOW") )
525  {
526  fprintf(ioQQQ," Ly a is ");
527  if( iso_ctrl.ipLyaRedist[ipISO] ==ipCRDW )
528  {
529  fprintf(ioQQQ,"complete redistribution with wings\n");
530  }
531  else if( iso_ctrl.ipLyaRedist[ipISO] ==ipCRD )
532  {
533  fprintf(ioQQQ,"complete redistribution with core only.\n");
534  }
535  else if( iso_ctrl.ipLyaRedist[ipISO] ==ipPRD )
536  {
537  fprintf(ioQQQ,"partial redistribution.\n");
538  }
539  else if( iso_ctrl.ipLyaRedist[ipISO] ==ipLY_A )
540  {
541  fprintf(ioQQQ,"special Lya.\n");
542  }
543  else
544  {
545  fprintf(ioQQQ," PROBLEM Impossible value for iso_ctrl.ipLyaRedist.\n");
546  TotalInsanity();
547  }
548 
549  fprintf(ioQQQ," Other %s resonance lines are ",
550  elementnames.chElementSym[ipISO] );
551 
552  if( iso_ctrl.ipResoRedist[ipISO] ==ipCRDW )
553  {
554  fprintf(ioQQQ,"complete redistribution with wings\n");
555  }
556  else if( iso_ctrl.ipResoRedist[ipISO] ==ipCRD )
557  {
558  fprintf(ioQQQ,"complete redistribution with core only.\n");
559  }
560  else if( iso_ctrl.ipResoRedist[ipISO] ==ipPRD )
561  {
562  fprintf(ioQQQ,"partial redistribution.\n");
563  }
564  else
565  {
566  fprintf(ioQQQ," PROBLEM Impossible value for iso_ctrl.ipResoRedist.\n");
567  TotalInsanity();
568  }
569 
570  fprintf(ioQQQ," %s subordinate lines are ",
571  elementnames.chElementSym[ipISO] );
572 
573  if( iso_ctrl.ipSubRedist[ipISO] ==ipCRDW )
574  {
575  fprintf(ioQQQ,"complete redistribution with wings\n");
576  }
577  else if( iso_ctrl.ipSubRedist[ipISO] ==ipCRD )
578  {
579  fprintf(ioQQQ,"complete redistribution with core only.\n");
580  }
581  else if( iso_ctrl.ipSubRedist[ipISO] ==ipPRD )
582  {
583  fprintf(ioQQQ,"partial redistribution.\n");
584  }
585  else
586  {
587  fprintf(ioQQQ," PROBLEM Impossible value for iso_ctrl.ipSubRedist.\n");
588  TotalInsanity();
589  }
590  }
591  else
592  {
593  fprintf(ioQQQ," here should have been another keyword on this command.\n");
594  fprintf(ioQQQ," Options are ALPHA, RESONANCE, SUBORDINATE. Sorry.\n");
596  }
597  }
598 
599  else if( p.nMatch("TOPO") )
600  {
601  if( p.nMatch(" OFF") )
602  {
603  iso_ctrl.lgTopoff[ipISO] = false;
604  fprintf( ioQQQ, "ISO %li TOPOFF is OFF\n", ipISO );
605  }
606  else
607  iso_ctrl.lgTopoff[ipISO] = true;
608  }
609 
610 
611  else
612  {
613  fprintf( ioQQQ, " There should have been a keyword on this ATOM H-LIKE or HE-LIKE command.\n Sorry.\n" );
615  }
616  return;
617 }
#define MIN2
Definition: cddefines.h:765
realnum xLymanPumpingScaleFactor
Definition: hydrogenic.h:116
bool nMatch(const char *chKey) const
Definition: parser.h:135
int modelRank[NISO]
Definition: iso.h:411
bool lgContinuumLoweringEnabled[NISO]
Definition: iso.h:358
double FFmtRead(void)
Definition: parser.cpp:353
const int ipHE_LIKE
Definition: iso.h:63
bool lgPessimisticErrors
Definition: iso.h:406
NORETURN void TotalInsanity(void)
Definition: service.cpp:886
t_input input
Definition: input.cpp:12
long int nvfpnt[LIMPAR]
Definition: optimize.h:194
bool lgColl_ionize[NISO]
Definition: iso.h:345
bool lgHydroMalloc
Definition: cdinit.cpp:61
t_isoCTRL iso_ctrl
Definition: iso.cpp:6
bool lgFSM[NISO]
Definition: iso.h:399
bool lgCS_therm_ave[NISO]
Definition: iso.h:388
#define MAX2
Definition: cddefines.h:786
long int nCollapsed_max
Definition: iso.h:487
int ipResoRedist[NISO]
Definition: iso.h:374
realnum emm
Definition: rfield.h:49
long int nRead
Definition: input.h:46
t_phycon phycon
Definition: phycon.cpp:6
bool lgCS_None[NISO]
Definition: iso.h:388
char chVarFmt[LIMPAR][FILENAME_PATH_LENGTH_2]
Definition: optimize.h:263
bool lgColl_l_mixing[NISO]
Definition: iso.h:339
FILE * ioQQQ
Definition: cddefines.cpp:7
realnum vparm[LIMEXT][LIMPAR]
Definition: optimize.h:188
bool lgRandErrGen[NISO]
Definition: iso.h:403
bool lgLTE_levels[NISO]
Definition: iso.h:347
Definition: parser.h:31
bool lgCS_Vrinceanu[NISO]
Definition: iso.h:388
bool lgVarOn
Definition: optimize.h:203
bool lgPhysOK
Definition: phycon.h:101
t_elementnames elementnames
Definition: elementnames.cpp:5
t_iso_sp iso_sp[NISO][LIMELM]
Definition: iso.cpp:8
bool lgColl_excite[NISO]
Definition: iso.h:342
void iso_update_num_levels(long ipISO, long nelem)
long int n_HighestResolved_max
Definition: iso.h:505
int nCS_new[NISO]
Definition: iso.h:392
long int nLyman[NISO]
Definition: iso.h:334
long int nparm
Definition: optimize.h:200
t_rfield rfield
Definition: rfield.cpp:8
const int ipCRD
Definition: cddefines.h:296
void ParseAtomISO(long ipISO, Parser &p)
bool lgDielRecom[NISO]
Definition: iso.h:365
float realnum
Definition: cddefines.h:107
#define EXIT_FAILURE
Definition: cddefines.h:144
const int ipLY_A
Definition: cddefines.h:300
bool lgPrintNumberOfLevels
Definition: iso.h:328
t_hydro hydro
Definition: hydrogenic.cpp:5
#define cdEXIT(FAIL)
Definition: cddefines.h:438
NORETURN void NoNumb(const char *chDesc) const
Definition: parser.cpp:233
long int GetElem(void) const
Definition: parser.cpp:209
t_optimize optimize
Definition: optimize.cpp:5
realnum vincr[LIMPAR]
Definition: optimize.h:191
char chElementSym[LIMELM][CHARS_ELEMENT_SYM]
Definition: elementnames.h:25
#define ASSERT(exp)
Definition: cddefines.h:582
bool lgLymanPumping
Definition: hydrogenic.h:111
int ipLyaRedist[NISO]
Definition: iso.h:374
const int ipH_LIKE
Definition: iso.h:62
const int LIMELM
Definition: cddefines.h:262
realnum DampOnFac
Definition: hydrogenic.h:101
#define DEBUG_ENTRY(funcname)
Definition: cddefines.h:688
int ipSubRedist[NISO]
Definition: iso.h:374
bool lgEOL(void) const
Definition: parser.h:98
const int ipPRD
Definition: cddefines.h:294
void init_genrand(unsigned long s)
bool lgTopoff[NISO]
Definition: iso.h:408
#define POW3
Definition: cddefines.h:940
const int ipHYDROGEN
Definition: cddefines.h:309
const int NHYDRO_MAX_LEVEL
Definition: cddefines.h:270
long int nvarxt[LIMPAR]
Definition: optimize.h:194
#define RREC_MAXN
Definition: iso.h:95
bool lgCS_Vriens[NISO]
Definition: iso.h:388
const int ipCRDW
Definition: cddefines.h:298
bool lgNoRecombInterp[NISO]
Definition: iso.h:385