31 conv.lgFirstSweepThisZone =
true;
32 conv.lgLastSweepThisZone =
false;
39 conv.hist_pres_density.clear();
40 conv.hist_pres_current.clear();
41 conv.hist_pres_error.clear();
45 conv.lgConvPops =
true;
49 if(
trace.nTrConvg>=1 )
52 " ConvPresTempEdenIoniz1 entered, will call ConvIoniz to initialize\n");
61 conv.lgConvPres =
false;
64 if(
trace.nTrConvg>=1 )
67 " ConvPresTempEdenIoniz1 ConvIoniz found following converged: Pres;%c, Temp;%c, Eden;%c, Ion:%c, Pops:%c\n",
76 if(
trace.nTrConvg>=1 )
79 "\n ConvPresTempEdenIoniz1 entering main pressure loop.\n");
84 if ( strcmp(
dense.chDenseLaw,
"CPRE") == 0 ||
85 strcmp(
dense.chDenseLaw,
"DYNA") == 0 )
89 double TemperatureInitial =
phycon.te;
104 bool lgPresOscil =
false;
106 long nloop_pres_oscil = 0;
109 double hden_chng = 0.;
111 double dP_chng_factor = 1.;
114 const int LOOPMAX = 100;
116 long LoopMax = LOOPMAX;
122 LoopMax = 10*LOOPMAX;
124 while( (loop < LoopMax) && !
conv.lgConvPres && !
lgAbort )
129 if( fabs( TemperatureInitial -
phycon.te )/
phycon.te > 0.3 )
153 if( lgTempStatus != 0 )
160 double hden_chng_old = hden_chng;
167 enum{DEBUG_LOC=
false};
171 fprintf(
ioQQQ,
"%li\t%.2e\t%.2e\n",
180 if( ( ( hden_chng*hden_chng_old < 0. ) ) && loop > 1 )
185 nloop_pres_oscil = loop;
187 dP_chng_factor =
MAX2(0.1 , dP_chng_factor * 0.75 );
201 if(
trace.nTrConvg>=1 )
204 " ConvPresTempEdenIoniz1 %.2f l:%3li nH:%.4e ne:%.4e PCurnt:%.4e err:%6.3f%% dP/dn:%.2e Te:%.4e Osc:%c\n",
222 if( loop - nloop_pres_oscil > 4 )
227 if( loop == LoopMax && !lgPresOscil )
229 LoopMax =
MIN2( LOOPMAX, LoopMax*2 );
237 double pdelta =
conv.MaxFractionalDensityStepPerIteration;
239 double logRatio = log(targetDensity/startingDensity);
240 long nstep = (long) ceil(fabs(logRatio)/pdelta);
244 double density_change_factor = exp(logRatio/nstep);
246 for (
long i=0; i<nstep; i++)
261 conv.hist_pres_current.push_back(
pressure.PresTotlCurr );
262 conv.hist_pres_error.push_back(
pressure.PresTotlError );
267 " DensityUpdate called, changing HDEN from %10.3e to %10.3e Set fill fac to %10.3e\n",
287 if(
trace.nTrConvg>=1 )
290 " ConvPresTempEdenIoniz1 %.2f l:%3li nH:%.4e ne:%.4e PCurnt:%.4e err:%6.3f%% Te:%.4e Osc:%c\n",
305 conv.lgConvPres =
true;
312 if(
gv.lgDustOn() &&
gv.lgGrainPhysicsOn )
320 if( !
conv.lgConvIoniz() )
322 else if( !
conv.lgConvEden )
324 else if( !
conv.lgConvTemp )
326 else if( !
conv.lgConvPres )