24 mean.xIonMean.reserve(3);
25 for(
int j=0; j < 3; ++j )
29 for(
int nelem=0; nelem <
LIMELM; ++nelem )
31 int limit =
max(3,nelem+2);
33 mean.xIonMean.reserve(j,nelem,limit);
34 for(
int ion=0; ion < limit; ++ion )
36 mean.xIonMean.reserve(j,nelem,ion,2);
39 mean.xIonMean.alloc();
40 mean.xIonEdenMean.alloc(
mean.xIonMean.clone() );
41 mean.TempIonMean.alloc(
mean.xIonMean.clone() );
42 mean.TempIonEdenMean.alloc(
mean.xIonMean.clone() );
43 mean.TempB_HarMean.alloc(3,2);
44 mean.TempHarMean.alloc(3,2);
45 mean.TempH_21cmSpinMean.alloc(3,2);
46 mean.TempMean.alloc(3,2);
47 mean.TempEdenMean.alloc(3,2);
82 for(
int d=0; d < 3; ++d )
85 for(
int nelem=0; nelem <
LIMELM; nelem++ )
87 int limit =
max(3,nelem+2);
90 double norm =
dense.gas_phase[nelem]*Jac[d];
91 for(
int ion=0; ion < limit; ion++ )
97 dc = 2.*
hmi.H2_total*Jac[d];
99 dc =
dense.xIonDense[nelem][ion]*Jac[d];
100 mean.xIonMean[d][nelem][ion][0] += dc;
101 mean.xIonMean[d][nelem][ion][1] += norm;
102 mean.TempIonMean[d][nelem][ion][0] += dc*
phycon.te;
103 mean.TempIonMean[d][nelem][ion][1] += dc;
106 mean.xIonEdenMean[d][nelem][ion][0] += dc;
107 mean.xIonEdenMean[d][nelem][ion][1] += norm*
dense.eden;
108 mean.TempIonEdenMean[d][nelem][ion][0] += dc*
phycon.te;
109 mean.TempIonEdenMean[d][nelem][ion][1] += dc;
124 mean.TempB_HarMean[d][1] += dc;
133 mean.TempHarMean[d][0] += dc;
137 mean.TempH_21cmSpinMean[d][0] += dc;
142 mean.TempMean[d][1] += dc;
144 dc = Jac[d]*
dense.eden;
146 mean.TempEdenMean[d][1] += dc;
165 bool lgDensity )
const
170 int limit =
max( 3, nelem+2 );
180 if( !
dense.lgElmtOn[nelem] )
183 for(
int ion=0; ion < limit; ion++ )
191 while( *n > 0 &&
mean.xIonMean[0][nelem][*n-1][0] <= 0. )
198 for(
int ion=0; ion < *n; ion++ )
205 meanv =
mean.xIonEdenMean[dim][nelem][ion][0];
206 normv =
mean.xIonEdenMean[dim][nelem][ion][1];
210 meanv =
mean.xIonMean[dim][nelem][ion][0];
211 normv =
mean.xIonMean[dim][nelem][ion][1];
213 arlog[ion] = ( meanv > 0. ) ? (
realnum)log10(
max(1e-30,meanv/normv)) : -30.f;
216 else if( chType ==
't' )
220 meanv =
mean.TempIonEdenMean[dim][nelem][ion][0];
221 normv =
mean.TempIonEdenMean[dim][nelem][ion][1];
225 meanv =
mean.TempIonMean[dim][nelem][ion][0];
226 normv =
mean.TempIonMean[dim][nelem][ion][1];
232 fprintf(
ioQQQ,
" MeanIon called with insane job: %c \n",chType);
void MeanIon(char chType, long nelem, long dim, long *n, realnum arlog[], bool lgDensity) const