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 /*molcol generate and print molecular column densities */ 00004 #include "cddefines.h" 00005 #include "radius.h" 00006 #include "colden.h" 00007 #include "h2.h" 00008 #include "mole.h" 00009 #include "mole_co_atom.h" 00010 #include "atomfeii.h" 00011 #include "molcol.h" 00012 00013 void molcol( 00014 const char *chLabel, 00015 /* file for printout */ 00016 FILE *ioMEAN ) 00017 { 00018 long int i; 00019 00020 DEBUG_ENTRY( "molcol()" ); 00021 00022 if( strcmp(chLabel,"PRIN") == 0 ) 00023 { 00024 /* total hydrogen column density, all forms */ 00025 fprintf( ioMEAN, "\n Log10 Column density (cm^-2)\n"); 00026 fprintf( ioMEAN, " Htot :"); 00027 fprintf( ioMEAN, "%7.3f",log10(MAX2(SMALLFLOAT,colden.colden[ipCOL_HTOT]))); 00028 fprintf( ioMEAN, " HII :"); 00029 fprintf( ioMEAN, "%7.3f",log10(MAX2(SMALLFLOAT,colden.colden[ipCOL_Hp]))); 00030 fprintf( ioMEAN, " HI :"); 00031 fprintf( ioMEAN, "%7.3f",log10(MAX2(SMALLFLOAT,colden.colden[ipCOL_H0]))); 00032 fprintf( ioMEAN, " H- :"); 00033 fprintf( ioMEAN, "%7.3f",log10(MAX2(SMALLFLOAT,colden.colden[ipCOL_HMIN]))); 00034 fprintf( ioMEAN, " H2g :"); 00035 fprintf( ioMEAN, "%7.3f",log10(MAX2(SMALLFLOAT,colden.colden[ipCOL_H2g]))); 00036 fprintf( ioMEAN, " H2* :"); 00037 fprintf( ioMEAN, "%7.3f",log10(MAX2(SMALLFLOAT,colden.colden[ipCOL_H2s]))); 00038 fprintf( ioMEAN, " H2+ :"); 00039 fprintf( ioMEAN, "%7.3f",log10(MAX2(SMALLFLOAT,colden.colden[ipCOL_H2p]))); 00040 fprintf( ioMEAN, " HeH+ :"); 00041 fprintf( ioMEAN, "%7.3f",log10(MAX2(SMALLFLOAT,colden.colden[ipCOL_HeHp] ))); 00042 fprintf( ioMEAN, "\n"); 00043 fprintf( ioMEAN, " H3+ :"); 00044 fprintf( ioMEAN, "%7.3f",log10(MAX2(SMALLFLOAT,colden.colden[ipCOL_H3p] ))); 00045 fprintf( ioMEAN, "\n"); 00046 } 00047 00048 /* call large H2 and CO column density routines which will do their jobs */ 00049 FeII_Colden( chLabel); 00050 H2_Colden( chLabel); 00051 CO_Colden( chLabel); 00052 00053 if( strcmp(chLabel,"ZERO") == 0 ) 00054 { 00055 /* zero out the column densities */ 00056 for( i=0; i < mole.num_comole_calc; i++ ) 00057 { 00058 COmole[i]->hevcol = 0.; 00059 } 00060 } 00061 00062 else if( strcmp(chLabel,"ADD ") == 0 ) 00063 { 00064 /* add together column densities */ 00065 for( i=0; i < mole.num_comole_calc; i++ ) 00066 { 00067 COmole[i]->hevcol += COmole[i]->hevmol*(realnum)radius.drad_x_fillfac; 00068 } 00069 } 00070 00071 else if( strcmp(chLabel,"PRIN") == 0 ) 00072 { 00073 /* print the molecular column densities 00074 * want to print all the molecules, not including the atoms/ions 00075 * that are part of the co solver. use first to print them all */ 00076 /*for( i=0; i < mole.num_comole_calc; i++ )*/ 00077 int j=0; 00078 for( i=0; i < mole.num_comole_calc; i++ ) 00079 { 00080 if(COmole[i]->n_nuclei <= 1) 00081 continue; 00082 /* print 7 column densities per line */ 00083 if( j!=0 && j%8==0 ) 00084 fprintf( ioMEAN, "\n" ); 00085 fprintf( ioMEAN, " %-6.6s:", COmole[i]->label ); 00086 fprintf( ioMEAN, "%7.3f",log10(MAX2(SMALLFLOAT,COmole[i]->hevcol ))); 00087 j++; 00088 } 00089 fprintf( ioMEAN, "\n" ); 00090 } 00091 00092 else 00093 { 00094 fprintf( ioMEAN, " molcol does not understand the label %4.4s\n", 00095 chLabel ); 00096 cdEXIT(EXIT_FAILURE); 00097 } 00098 return; 00099 00100 }