00001
00002
00003 #include "cddefines.h"
00004 #include "hmi.h"
00005 #include "trace.h"
00006 #include "grainvar.h"
00007 #include "rfield.h"
00008 #include "mole.h"
00009 #include "dense.h"
00010 #include "taulines.h"
00011
00012
00013
00014
00015
00016 int eden_sum(void)
00017 {
00018 DEBUG_ENTRY( "eden_sum()" );
00019
00020
00021
00022 if( dense.EdenSet > 0.f )
00023 {
00024 dense.EdenTrue = dense.EdenSet;
00025 dense.eden_from_metals = 1.;
00026
00027 if( trace.lgTrace || trace.lgESOURCE )
00028 fprintf( ioQQQ, " eden_sum zn: %.2f eden set to: %.4e\n", fnzone, dense.EdenSet );
00029 }
00030 else
00031 {
00032
00033 dense.EdenTrue = dense.EdenExtra;
00034
00035
00036 double eden_ions[LIMELM];
00037 double sum_all_ions = 0.;
00038 double sum_metals = 0.;
00039 for( long nelem=ipHYDROGEN; nelem < LIMELM; nelem++ )
00040 {
00041 eden_ions[nelem] = 0.;
00042 for( long ion=1; ion <= nelem+1; ion++ )
00043 eden_ions[nelem] += ion*dense.xIonDense[nelem][ion];
00044
00045 sum_all_ions += eden_ions[nelem];
00046 if( nelem >= ipLITHIUM )
00047 sum_metals += eden_ions[nelem];
00048 }
00049 dense.EdenTrue += sum_all_ions;
00050
00051
00052 double hmole_eden = 0.;
00053 for( long i=0; i < N_H_MOLEC; i++ )
00054 {
00055
00056 hmole_eden += hmi.Hmolec[i]*hmi.nElectron[i];
00057 }
00058 dense.EdenTrue += hmole_eden;
00059
00060
00061 co.comole_eden = 0.;
00062 for( long i=0; i < mole.num_comole_calc; i++ )
00063 {
00064 if( COmole[i]->n_nuclei != 1 )
00065 co.comole_eden += COmole[i]->hevmol*COmole[i]->nElec;
00066 }
00067 dense.EdenTrue += co.comole_eden;
00068
00069
00070
00071 dense.EdenTrue += gv.TotalEden*gv.lgGrainElectrons;
00072
00073
00074 dense.eden_from_metals = safe_div( sum_metals, dense.EdenTrue, 1. );
00075
00076 if( trace.lgTrace || trace.lgESOURCE )
00077 {
00078 fprintf( ioQQQ,
00079 " eden_sum zn: %.2f current: %.4e new true: %.4e ions: %.4e comole: %.4e"
00080 " hmole: %.4e grain: %.4e extra: %.4e LaOTS: %.4e\n",
00081 fnzone ,
00082 dense.eden ,
00083 dense.EdenTrue ,
00084 sum_all_ions ,
00085 co.comole_eden ,
00086 hmole_eden ,
00087 gv.TotalEden*gv.lgGrainElectrons,
00088 dense.EdenExtra ,
00089 rfield.otslin[Transitions[ipH_LIKE][ipHYDROGEN][ipH2p][ipH1s].ipCont-1] );
00090
00091 if( trace.lgNeBug )
00092 {
00093 for( long nelem=ipHYDROGEN; nelem < LIMELM; nelem++ )
00094 {
00095 if( nelem == 0 )
00096 fprintf( ioQQQ, " eden_sum H -Ne:" );
00097 else if( nelem == 10 )
00098 fprintf( ioQQQ, " eden_sum Na-Ca:" );
00099 else if( nelem == 20 )
00100 fprintf( ioQQQ, " eden_sum Sc-Zn:" );
00101 fprintf( ioQQQ, " %.4e", eden_ions[nelem] );
00102 if( nelem%10 == 9 )
00103 fprintf( ioQQQ, "\n" );
00104 }
00105 }
00106 }
00107 }
00108
00109
00110 ASSERT( dense.EdenSet <= 0.f || fp_equal((realnum)dense.EdenTrue, dense.EdenSet) );
00111
00112 return 0;
00113 }