cloudy  trunk
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
prt_met.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 /*prtmet print all line optical depths at end of iteration */
4 #include "cddefines.h"
5 #include "taulines.h"
6 #include "h2.h"
7 #include "iso.h"
8 #include "dense.h"
9 #include "prt.h"
10 #include "trace.h"
11 
12 STATIC void prme(
13  const bool lgReset,
14  const TransitionProxy &t);
15 
16 /*prtmet print all line optical depths at end of iteration */
17 void prtmet(void)
18 {
19  DEBUG_ENTRY( "prtmet()" );
20 
21  /* default is to not print optical depths, turn on with
22  * print optical depths on command */
23  if( prt.lgPrtTau || (trace.lgTrace && trace.lgOptcBug) )
24  {
25  fprintf( ioQQQ, "\n\n Mean Line Optical Depths\n");
26 
27  /* iso sequences */
28  for( long ipISO=ipH_LIKE; ipISO<NISO; ++ipISO )
29  {
30  for( long nelem=ipISO; nelem < LIMELM; nelem++ )
31  {
32  if( dense.lgElmtOn[nelem] )
33  {
34  if( (*iso_sp[ipISO][nelem].trans(1,0).Lo()).ColDen() <= 0. )
35  continue;
36 
37  /* print Lyman, Balmer, Paschen, etc sequence optical depths */
38  for( long ipLo=0; ipLo < iso_sp[ipISO][nelem].numLevels_local-1; ipLo++ )
39  {
40  for( long ipHi=ipLo+1; ipHi < iso_sp[ipISO][nelem].numLevels_local; ipHi++ )
41  {
42  prme(false,iso_sp[ipISO][nelem].trans(ipHi,ipLo));
43  }
44  }
45  }
46  }
47  }
48 
49  /* print main lines optical depths */
50  for( long i=0; i < nWindLine; i++ )
51  {
52  if( (*TauLine2[i].Hi()).IonStg() < (*TauLine2[i].Hi()).nelem()+1-NISO )
53  {
54  prme(false,TauLine2[i]);
55  }
56  }
57 
58  for( size_t i=0; i < UTALines.size(); i++ )
59  {
60  prme(false,UTALines[i]);
61  }
62 
63  /* print H2 line optical depths */
64  for( diatom_iter diatom = diatoms.begin(); diatom != diatoms.end(); ++diatom )
65  {
66  for( TransitionList::iterator tr = (*diatom)->trans.begin();
67  tr != (*diatom)->trans.end(); ++tr )
68  {
69  if( (*tr).ipCont() <= 0 )
70  continue;
71  prme( false, *tr );
72  }
73  }
74 
75  for( size_t i=0; i < HFLines.size(); i++ )
76  {
77  prme(false,HFLines[i]);
78  }
79 
80  /* data base lines */
81  for (int ipSpecies=0; ipSpecies < nSpecies; ++ipSpecies)
82  {
83  for( EmissionList::iterator em=dBaseTrans[ipSpecies].Emis().begin();
84  em != dBaseTrans[ipSpecies].Emis().end(); ++em)
85  {
86  prme(false,(*em).Tran());
87  }
88  }
89 
90  fprintf( ioQQQ, "\n");
91  }
92  return;
93 }
94 
95 /* prme - print line optical depth */
96 STATIC void prme(
97  const bool lgReset,
98  const TransitionProxy &t)
99 {
100  static long int n ;
101 
102  DEBUG_ENTRY( "prme()" );
103 
104  if( lgReset )
105  n = 0;
106 
107  if( t.ipCont() <= 0 )
108  {
109  /* line is not transferred */
110  return;
111  }
112 
113  if( (*t.Lo()).ColDen() <= 0. )
114  return;
115 
116  /* print optical depth if greater than lower limit, or significantly negative
117  * PrtTauFnt is threshold for printing it
118  * */
119  if( t.Emis().TauIn()*SQRTPI > prt.PrtTauFnt || t.Emis().TauIn()*SQRTPI < -1e-5 )
120  {
121  // throw CR after printing NCOLMAX characters
122  const int NOPCMAX = 10;
123  string label = t.chLabel();
124  long len = 2*NOPCMAX + label.size();
125 
126  // Reset n if would overflow
127  if(n+len > NCOLMAX)
128  {
129  n = 0;
130  fprintf( ioQQQ, "\n");
131  }
132  fprintf( ioQQQ, "%s", label.c_str() );
133  /*>> chng 12 jul 25, print mean optical depths, rather than line center */
134  fprintf( ioQQQ, "%*.2e", NOPCMAX, t.Emis().TauIn()*SQRTPI );
135 
136  fprintf( ioQQQ, "%*.2e", NOPCMAX, t.Emis().TauInSpecific()*SQRTPI );
137 
138  // Add wide gap between columns
139  if( n + 2*len + prt_linecol.col_gap_len < NCOLMAX )
140  {
141  fprintf( ioQQQ, "%s", prt_linecol.col_gap.c_str() );
142  len += prt_linecol.col_gap_len;
143  }
144  else
145  {
146  n = NCOLMAX;
147  }
148  n += len;
149  }
150 
151  return;
152 }
STATIC void prme(const bool lgReset, const TransitionProxy &t)
Definition: prt_met.cpp:96
realnum & TauInSpecific() const
Definition: emission.h:468
t_line_col prt_linecol
Definition: prt.cpp:15
bool lgPrtTau
Definition: prt.h:171
const long NCOLMAX
Definition: prt.h:13
size_t size(void) const
Definition: transition.h:331
TransitionList UTALines("UTALines",&AnonStates)
const int NISO
Definition: cddefines.h:310
TransitionList HFLines("HFLines",&AnonStates)
int col_gap_len
Definition: prt.h:322
FILE * ioQQQ
Definition: cddefines.cpp:7
TransitionList TauLine2("TauLine2",&AnonStates)
long int nSpecies
Definition: taulines.cpp:22
t_dense dense
Definition: global.cpp:15
t_iso_sp iso_sp[NISO][LIMELM]
Definition: iso.cpp:11
t_trace trace
Definition: trace.cpp:5
void prtmet(void)
Definition: prt_met.cpp:17
#define STATIC
Definition: cddefines.h:118
bool lgTrace
Definition: trace.h:12
EmissionList::reference Emis() const
Definition: transition.h:447
long & ipCont() const
Definition: transition.h:489
vector< diatomics * > diatoms
Definition: h2.cpp:8
long nWindLine
Definition: cdinit.cpp:19
t_prt prt
Definition: prt.cpp:14
bool lgElmtOn[LIMELM]
Definition: dense.h:160
string chLabel() const
Definition: transition.cpp:271
string col_gap
Definition: prt.h:328
realnum PrtTauFnt
Definition: prt.h:182
qList::iterator Lo() const
Definition: transition.h:431
const int ipH_LIKE
Definition: iso.h:64
const int LIMELM
Definition: cddefines.h:307
#define DEBUG_ENTRY(funcname)
Definition: cddefines.h:729
int fprintf(const Output &stream, const char *format,...)
Definition: service.cpp:1217
bool lgOptcBug
Definition: trace.h:49
vector< TransitionList > dBaseTrans
Definition: taulines.cpp:18
long int numLevels_local
Definition: iso.h:529
realnum & TauIn() const
Definition: emission.h:458
vector< diatomics * >::iterator diatom_iter
Definition: h2.h:13