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 /*IonAlumi ionization balance for aluminum */ 00004 #include "cddefines.h" 00005 #include "trace.h" 00006 #include "dense.h" 00007 #include "ionbal.h" 00008 00009 void IonAlumi(void) 00010 { 00011 const int NDIM = ipALUMINIUM+1; 00012 00013 static const double dicoef[2][NDIM] = { 00014 {5.5e-3,6.0e-3,7.5e-3,5.6e-3,1.2e-2,1.9e-2,1.6e-2,1.7e-2,4.4e-2,1.7e-2,3.0e-1,3.4e-0,0.}, 00015 {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.} 00016 }; 00017 static const double dite[2][NDIM] = { 00018 {9.0e4,7.5e4,8.5e5,5.0e5,4.4e5,3.8e5,3.4e5,3.4e5,3.9e5,2.3e5,1.6e7,1.7e7,1e20}, 00019 {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.} 00020 }; 00021 static const double ditcrt[NDIM] = {8.0e3,7.0e3,1.2e5,7.0e4,6.5e4,5.5e4, 00022 5.5e4,5.5e4,5.8e4,4.0e4,2.9e6,5.5e6,1e20}; 00023 static const double aa[NDIM] = {0.0219,0.7086,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; 00024 static const double bb[NDIM] = {-0.4528,-3.1083,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; 00025 static const double cc[NDIM] = {2.5427,7.0422,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; 00026 static const double dd[NDIM] = {-0.1678,0.5998,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; 00027 static const double ff[NDIM] = {0.2276,0.4194,0.1,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}; 00028 00029 DEBUG_ENTRY( "IonAlumi()" ); 00030 00031 /* aluminium nelem=13*/ 00032 00033 /* rates from Shull and van Steenberg, Ap.J. Sup 48, 95. 00034 * use silicon since not in shull + van steenberg */ 00035 00036 /* rec coef from Aldrovandi and Pequignot Revista Bras de Fisica 4, 491. */ 00037 /* Pequignot and Aldrovandi Ast Ap 161, 169. */ 00038 00039 00040 /* from Nussbaumer and Storey, Mg, Al, Si: n.b., al1 uses table 2(b) */ 00041 00042 if( !dense.lgElmtOn[ipALUMINIUM] ) 00043 { 00044 return; 00045 } 00046 00047 ion_zero(ipALUMINIUM); 00048 00049 ion_photo(ipALUMINIUM,false); 00050 00051 /* find collisional ionization rates */ 00052 ion_collis(ipALUMINIUM); 00053 00054 /* get recombination coefficients */ 00055 ion_recomb(false,(double*)dicoef,(double*)dite,ditcrt,aa,bb,cc,dd,ff,ipALUMINIUM); 00056 00057 /* solve for ionization balance */ 00058 ion_solver(ipALUMINIUM,false); 00059 00060 if( trace.lgTrace && trace.lgHeavyBug ) 00061 { 00062 fprintf( ioQQQ, " IonAlumi returns; frac=" ); 00063 for( int i=0; i < 10; i++ ) 00064 { 00065 fprintf( ioQQQ, "%10.3e", dense.xIonDense[ipALUMINIUM][i]/ 00066 dense.gas_phase[ipALUMINIUM] ); 00067 } 00068 fprintf( ioQQQ, "\n" ); 00069 } 00070 return; 00071 }