cloudy
trunk
|
00001 /* This file is part of Cloudy and is copyright (C)1978-2008 by Gary J. Ferland and 00002 * others. For conditions of distribution and use see copyright notice in license.txt */ 00003 /*IonSodiu ionization balance for sodium */ 00004 #include "cddefines.h" 00005 #include "trace.h" 00006 #include "dense.h" 00007 #include "ionbal.h" 00008 00009 void IonSodiu(void) 00010 { 00011 const int NDIM = ipSODIUM+1; 00012 00013 static const double dicoef[2][NDIM] = { 00014 {1.0e-3,2.6e-3,6.0e-3,1.1e-2,8.0e-3,1.0e-2,3.2e-2,1.2e-2,2.2e-1,1.8e-1,0.}, 00015 {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.} 00016 }; 00017 static const double dite[2][NDIM] = { 00018 {3.6e5,3.8e5,3.4e5,3.0e5,2.7e5,2.8e5,3.2e5,1.9e5,1.2e7,1.3e7,0.}, 00019 {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.} 00020 }; 00021 static const double ditcrt[NDIM] = {0.,1.3e5,4.4e5,7.2e4,2.8e5,4.0e5, 00022 1.3e6,1.6e6,1.9e6,3.4e4,0.}; 00023 static const double aa[NDIM] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; 00024 static const double bb[NDIM] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; 00025 static const double cc[NDIM] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; 00026 static const double dd[NDIM] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; 00027 static const double ff[NDIM] = {0.1,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; 00028 00029 DEBUG_ENTRY( "IonSodiu()" ); 00030 00031 /* sodium nelem=11 00032 * 00033 * rates taken from Mg Shull and van Steenberg, Ap.J. Sup 48, 95. */ 00034 00035 /* from Aldrovandi and Pequignot Revista Brasileira de Fisica, 4, 491, */ 00036 /* Pequignot and Aldrovandi Ast Ap 161, 169. */ 00037 00038 if( !dense.lgElmtOn[ipSODIUM] ) 00039 { 00040 return; 00041 } 00042 00043 ion_zero(ipSODIUM); 00044 00045 ion_photo(ipSODIUM,false); 00046 00047 /* find collisional ionization rates */ 00048 ion_collis(ipSODIUM); 00049 00050 /* get recombination coefficients */ 00051 ion_recomb(false,(const double*)dicoef,(const double*)dite,ditcrt,aa,bb,cc,dd,ff,ipSODIUM); 00052 00053 /* solve for ionization balance */ 00054 ion_solver(ipSODIUM,false); 00055 00056 if( trace.lgTrace && trace.lgHeavyBug ) 00057 { 00058 fprintf( ioQQQ, " IonSodiu returns; frac=" ); 00059 for( int i=0; i < 10; i++ ) 00060 { 00061 fprintf( ioQQQ, "%10.3e", dense.xIonDense[ipSODIUM][i]/ 00062 dense.gas_phase[ipSODIUM] ); 00063 } 00064 fprintf( ioQQQ, "\n" ); 00065 } 00066 return; 00067 }