00001
00002
00003
00004 #ifndef CONV_H_
00005 #define CONV_H_
00006
00015 void ConvIterCheck( void );
00016
00019 bool ConvInitSolution();
00020
00025 int ConvPresTempEdenIoniz(void);
00026
00030 int ConvTempEdenIoniz(void);
00031
00035 int ConvEdenIoniz(void);
00036
00039 int ConvIoniz(void);
00040
00045 void ConvFail(
00046
00047 const char chMode[],
00048
00049 const char chDetail[] );
00050
00058 int ConvBase(long loopi);
00059
00063 int eden_sum(void);
00064
00066 void EdenChange( double EdenNew );
00067
00068
00069 enum counter_type
00070 {
00071 MOLE_SOLVE,
00072 MOLE_SOLVE_STEPS,
00073 NEWTON,
00074 NEWTON_LOOP,
00075 CONV_BASE_CALLS,
00076 CONV_BASE_LOOPS,
00077 CONV_BASE_ACCELS,
00078 ION_SOLVES,
00079 ISO_LOOPS,
00080 EDEN_CHANGES,
00081 TEMP_CHANGES,
00082 PRES_CHANGES,
00083 NTYPES
00084 };
00085
00089 struct t_conv {
00090
00092 char chConvEden[INPUT_LINE_LENGTH];
00093
00094 private:
00097 char m_chConvIoniz[INPUT_LINE_LENGTH];
00098
00099 public:
00100 void resetConvIoniz()
00101 {
00102 m_lgConvIoniz = true;
00103 strncpy(m_chConvIoniz, "NONE!!!!!", INPUT_LINE_LENGTH-1);
00104 m_BadConvIoniz[0] = 0.0;
00105 m_BadConvIoniz[1] = 0.0;
00106 }
00107 void setConvIonizFail(const char* reason, double oldval, double newval)
00108 {
00109 m_lgConvIoniz = false;
00110 strncpy(m_chConvIoniz, reason, INPUT_LINE_LENGTH-1);
00111 m_chConvIoniz[INPUT_LINE_LENGTH-1] = '\0';
00112 m_BadConvIoniz[0] = oldval;
00113 m_BadConvIoniz[1] = newval;
00114 }
00115 bool lgConvIoniz() const
00116 {
00117 return m_lgConvIoniz;
00118 }
00119 const char *chConvIoniz() const
00120 {
00121 return m_chConvIoniz;
00122 }
00123 double convIonizOldVal() const
00124 {
00125 return m_BadConvIoniz[0];
00126 }
00127 double convIonizNewVal() const
00128 {
00129 return m_BadConvIoniz[1];
00130 }
00131
00132
00135 char chNotConverged[INPUT_LINE_LENGTH];
00136
00137 private:
00139 bool m_lgConvIoniz;
00140
00141 public:
00143 bool lgConvPops;
00144
00145 private:
00148 double m_BadConvIoniz[2];
00149
00150 public:
00152 long int nPres2Ioniz;
00153
00155 bool lgFirstSweepThisZone;
00157 bool lgLastSweepThisZone;
00158
00161 long int limPres2Ioniz;
00162
00166 long int nTotalIoniz;
00167
00171 long int nTotalIoniz_start;
00172
00175 bool lgSearch;
00176
00178 realnum AverEdenError;
00179
00181 realnum BigHeatCoolError;
00182 realnum AverHeatCoolError;
00183
00185 realnum BigPressError;
00186 realnum AverPressError;
00187
00189 bool lgIonStageTrimed;
00190
00193 bool lgOscilOTS;
00194
00196 bool lgConvTemp;
00197
00199 bool lgConvPres;
00200
00202 bool lgConvEden;
00203
00205 long int nTotalFailures;
00206
00208 long int nTeFail;
00209
00211 realnum failmx;
00212
00214 long int nPreFail;
00215
00217 long int nNeFail;
00218
00220 realnum BigEdenError;
00221
00223 long int nIonFail;
00224
00226 long int nPopFail;
00227
00229 long int nGrainFail;
00230
00232 long int nChemFail;
00233
00235 long int LimFail;
00236
00238 bool lgMap;
00239
00241 long int ifailz[12];
00242
00245 char chSolverEden[20];
00246
00249 char chSolverTemp[20];
00250
00253 bool lgBadStop;
00254
00256 bool lgAutoIt;
00257
00259 bool lgUpdateCouplings;
00260
00262 realnum autocv;
00263
00267 double EdenErrorAllowed;
00268
00272 realnum PressureErrorAllowed;
00273
00274 double MaxFractionalDensityStepPerIteration;
00275
00278 realnum HeatCoolRelErrorAllowed;
00279
00280 realnum IonizErrorAllowed;
00281
00285 realnum GasPhaseAbundErrorAllowed;
00286
00288 double dCmHdT;
00289
00291 double sigma_dCmHdT;
00292
00295 vector<double> hist_pres_density, hist_pres_current, hist_pres_error;
00296 long int hist_pres_nzone;
00297
00300 vector<double> hist_temp_temp, hist_temp_heat, hist_temp_cool;
00301 long int hist_temp_nzone;
00302
00303 private:
00304
00305 long m_counters[NTYPES];
00306 long m_counters_zone[NTYPES];
00307 public:
00308 void incrementCounter( const counter_type type )
00309 {
00310 ++m_counters[type];
00311 ++m_counters_zone[type];
00312 }
00313 void resetCounters()
00314 {
00315 for( long i=0; i<NTYPES; ++i )
00316 m_counters[i] = 0;
00317 }
00318 void resetCountersZone()
00319 {
00320 for( long i=0; i<NTYPES; ++i )
00321 m_counters_zone[i] = 0;
00322 }
00323 long getCounter( const long type )
00324 {
00325 return m_counters[type];
00326 }
00327 long getCounterZone( const long type )
00328 {
00329 return m_counters_zone[type];
00330 }
00331 };
00332
00333
00334 extern t_conv conv;
00335
00336 #endif