cloudy  trunk
deuterium.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 #include "cddefines.h"
4 #include "deuterium.h"
5 #include "dense.h"
6 #include "mole.h"
7 
9 
10 void ScaleDensitiesDeuterium( const realnum &factor )
11 {
12  deut.gas_phase *= factor;
13  deut.xMolecules *= factor;
14  deut.xIonDense[0] *= factor;
15  deut.xIonDense[1] *= factor;
16  return;
17 }
18 
20 {
22  deut.xIonDense[1] = 0.;
23  return;
24 }
25 
26 void SetDeuteriumIonization( const double &xNeutral, const double &xIonized )
27 {
28  if( !deut.lgElmtOn )
29  return;
30 
32 
34 
35  fixit(); // try to let D ionization be independent of H
36 #if 1
37  realnum neut = total * xNeutral/( xNeutral + xIonized );
38  realnum ionz = total * xIonized/( xNeutral + xIonized );
39 #else
40  realnum src = mole.findrk("D+,e-=>D,PHOTON") * dense.eden;
41  realnum snk = mole.findrk("D,PHOTON=>D+,e-");
42  realnum ion_ratio = xIonized/xNeutral;
43  if( src > SMALLFLOAT )
44  ion_ratio = snk/src;
45  realnum neut = total / ( ion_ratio + 1.f );
46  realnum ionz = total * ion_ratio / ( ion_ratio + 1.f );
47 #endif
48  if( total > 1e-4 * deut.gas_phase )
49  {
50  deut.xIonDense[0] = neut;
51  deut.xIonDense[1] = ionz;
52  }
53 
54  //if( iteration >= 3 )
55  // fprintf( ioQQQ, "DEBUGGG SetDeuteriumIonization %li\t%.12e\t%.12e\t%.12e\t%.12e\t%.12e\t%.12e\t%.12e\n",
56  // nzone, deut.gas_phase, deut.xMolecules, total, old0, deut.xIonDense[0], old1, deut.xIonDense[1] );
57 
58  return;
59 }
60 
62 {
63  if( !deut.lgElmtOn )
64  return;
65  deut.fractionation = frac;
66  return;
67 }
68 
69 void SetGasPhaseDeuterium( const realnum &Hdensity )
70 {
71  if( !deut.lgElmtOn )
72  return;
73  deut.gas_phase = Hdensity * deut.fractionation;
74 }
75 
t_dense::eden
double eden
Definition: dense.h:190
dense
t_dense dense
Definition: dense.cpp:24
t_deuterium::lgElmtOn
bool lgElmtOn
Definition: deuterium.h:19
realnum
float realnum
Definition: cddefines.h:103
mole.h
SetDeuteriumIonization
void SetDeuteriumIonization(const double &xNeutral, const double &xIonized)
Definition: deuterium.cpp:26
t_deuterium::gas_phase
realnum gas_phase
Definition: deuterium.h:20
total_molecule_deut
void total_molecule_deut(realnum &total)
Definition: mole_species.cpp:1034
dense.h
mole
t_mole_local mole
Definition: mole.cpp:7
cddefines.h
InitDeuteriumIonization
void InitDeuteriumIonization()
Definition: deuterium.cpp:19
deut
t_deuterium deut
Definition: deuterium.cpp:8
ScaleDensitiesDeuterium
void ScaleDensitiesDeuterium(const realnum &factor)
Definition: deuterium.cpp:10
SetDeuteriumFractionation
void SetDeuteriumFractionation(const realnum &frac)
Definition: deuterium.cpp:61
t_deuterium::xIonDense
double xIonDense[2]
Definition: deuterium.h:21
t_deuterium::xMolecules
realnum xMolecules
Definition: deuterium.h:22
fixit
void fixit(void)
Definition: service.cpp:991
t_deuterium
Definition: deuterium.h:7
t_deuterium::fractionation
realnum fractionation
Definition: deuterium.h:23
t_mole_local::findrk
double findrk(const char buf[]) const
Definition: mole_reactions.cpp:3886
SetGasPhaseDeuterium
void SetGasPhaseDeuterium(const realnum &Hdensity)
Definition: deuterium.cpp:69
SMALLFLOAT
const realnum SMALLFLOAT
Definition: cpu.h:191
deuterium.h