00001
00002
00003
00004 #include "cddefines.h"
00005 #include "hmi.h"
00006 #include "mole.h"
00007 #include "h2.h"
00008 #include "h2_priv.h"
00009 #include "parse.h"
00010 #include "thirdparty.h"
00011
00012
00013 void ParseAtomH2(char *chCard )
00014 {
00015 bool lgEOL;
00016 long int i , j;
00017
00018 DEBUG_ENTRY( "ParseAtomH2()" );
00019
00020
00021
00022
00023 i = 5;
00024 j = (long int)FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00025 if( j != 2 )
00026 {
00027 fprintf( ioQQQ, " Something is wrong with the order of the numbers on this line.\n" );
00028 fprintf( ioQQQ, " The first number I encounter should be a 2.\n Sorry.\n" );
00029 cdEXIT(EXIT_FAILURE);
00030 }
00031
00032
00033 h2.lgH2ON = true;
00034
00035 if( nMatch("LEVE",chCard) )
00036 {
00037
00038
00039
00040
00041
00042 if( !lgH2_READ_DATA )
00043 {
00044 mole.n_h2_elec_states = (long int)FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00045 if( lgEOL )
00046 {
00047 if( nMatch("LARG",chCard) )
00048 {
00049
00050 mole.n_h2_elec_states = N_H2_ELEC;
00051 }
00052 else
00053 {
00054 NoNumb(chCard);
00055 }
00056 }
00057
00058
00059 if( mole.n_h2_elec_states < 3 )
00060 {
00061 fprintf( ioQQQ, " This would be too few electronic levels - resetting to 3.\n" );
00062 mole.n_h2_elec_states = 3;
00063 }
00064
00065 else if( mole.n_h2_elec_states > N_H2_ELEC )
00066 {
00067 fprintf( ioQQQ,
00068 " This would be too many levels, the limit is %i.\n" ,
00069 N_H2_ELEC);
00070 cdEXIT(EXIT_FAILURE);
00071 }
00072 }
00073 }
00074
00075 else if( nMatch("LIMI",chCard) )
00076 {
00077
00078
00079 mole.H2_to_H_limit = FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00080 if( lgEOL )
00081 {
00082
00083 if( nMatch( " OFF" , chCard ) )
00084 {
00085
00086 mole.H2_to_H_limit = -1.;
00087 }
00088 else
00089 {
00090 fprintf( ioQQQ," The limit must appear on this line.\n");
00091 NoNumb( chCard );
00092 }
00093 }
00094 else
00095 {
00096
00097
00098 if( mole.H2_to_H_limit <= 0. )
00099 mole.H2_to_H_limit = pow(10., mole.H2_to_H_limit);
00100 }
00101 }
00102 else if( nMatch("GBAR",chCard ) )
00103 {
00104
00105
00106 if( nMatch(" OFF",chCard ) )
00107 {
00108 mole.lgColl_gbar = false;
00109 }
00110 else if( nMatch(" ON ",chCard ) )
00111 {
00112 mole.lgColl_gbar = true;
00113 }
00114 else
00115 {
00116 fprintf( ioQQQ,
00117 " The gbar approximation must be off (\" OFF\") or on (\" ON \").\n");
00118 cdEXIT(EXIT_FAILURE);
00119 }
00120 }
00121
00122 else if( nMatch("COLL",chCard ) )
00123 {
00124
00125 if( nMatch("DISS",chCard ) )
00126 {
00127
00128 if( nMatch(" ON ",chCard ) )
00129 {
00130
00131 mole.lgColl_dissoc_coll = true;
00132 }
00133 else
00134 {
00135
00136 mole.lgColl_dissoc_coll = false;
00137 }
00138 }
00139
00140
00141
00142
00143 else if( nMatch("ORTH",chCard ) && nMatch("PARA",chCard ) )
00144 {
00145
00146 if( nMatch(" ON ",chCard ) )
00147 {
00148
00149 mole.lgH2_ortho_para_coll_on = true;
00150 }
00151 else
00152 {
00153
00154
00155 mole.lgH2_ortho_para_coll_on = false;
00156 }
00157 }
00158
00159
00160 else if( nMatch("GRAI",chCard ) )
00161 {
00162
00163 if( nMatch(" ON",chCard ) )
00164 {
00165
00166 mole.lgH2_grain_deexcitation = true;
00167 }
00168 else
00169 {
00170
00171 mole.lgH2_grain_deexcitation = false;
00172 }
00173 }
00174 else if( nMatch(" HE ",chCard ) )
00175 {
00176
00177
00178
00179 if( nMatch(" NEW",chCard ) || nMatch("ORNL",chCard ) )
00180 {
00181
00182 mole.lgH2_He_ORNL = true;
00183 }
00184 else if( nMatch(" OLD",chCard ) || nMatch("BOUR",chCard ) )
00185 {
00186
00187
00188
00189 mole.lgH2_He_ORNL = false;
00190 }
00191 else
00192 {
00193 fprintf( ioQQQ,
00194 " I did not find a keyword on this ATOM H2 HE command - I know about the keys ORNL and Le BOURlot\n");
00195 cdEXIT(EXIT_FAILURE);
00196 }
00197 }
00198 else
00199 {
00200
00201 if( nMatch(" ON ",chCard ) )
00202 {
00203
00204 mole.lgColl_deexec_Calc = true;
00205 }
00206 else
00207 {
00208
00209 mole.lgColl_deexec_Calc = false;
00210 }
00211 }
00212 }
00213
00214
00215 else if( nMatch("MATR",chCard ) && !nMatch("TRAC",chCard ) )
00216 {
00217
00218
00219 nXLevelsMatrix = (long)FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00220 if( nMatch(" ALL",chCard) )
00221 {
00222
00223
00224
00225
00226 nXLevelsMatrix = -1;
00227 }
00228 else if( lgEOL && !(nMatch(" OFF",chCard) || nMatch("NONE",chCard) ) )
00229 {
00230
00231 fprintf( ioQQQ,
00232 " The total number of levels used in the matrix solver must be entered, or keywords ALL or NONE entered.\n Sorry.\n");
00233 cdEXIT(EXIT_FAILURE);
00234 }
00235
00236
00237
00238 }
00239 else if( nMatch(" LTE",chCard ) )
00240 {
00241
00242 mole.lgH2_LTE = true;
00243 }
00244
00245 else if( nMatch("TRAC",chCard ) )
00246 {
00247
00248
00249
00250
00251
00252
00253
00254 if( nMatch("FINA",chCard ) )
00255 {
00256
00257 mole.nH2_TRACE = mole.nH2_trace_final;
00258 }
00259 else if( nMatch("ITER",chCard ) )
00260 {
00261
00262 mole.nH2_TRACE = mole.nH2_trace_iterations;
00263 }
00264 else if( nMatch("FULL",chCard ) )
00265 {
00266
00267 mole.nH2_TRACE = mole.nH2_trace_full;
00268 }
00269 else if( nMatch("MATR",chCard ) )
00270 {
00271
00272 mole.nH2_TRACE = mole.nH2_trace_matrix;
00273 }
00274 else
00275 {
00276
00277 mole.nH2_TRACE = mole.nH2_trace_full;
00278 }
00279 }
00280 else if( nMatch("NOIS",chCard ) )
00281 {
00282 unsigned int iseed;
00283
00284 mole.lgH2_NOISE = true;
00285 mole.lgH2_NOISECOSMIC = true;
00286
00287
00288 mole.xMeanNoise = FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00289 if( lgEOL )
00290 mole.xMeanNoise = 0.;
00291
00292
00293 mole.xSTDNoise = FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00294 if( lgEOL )
00295 mole.xSTDNoise = 0.5;
00296
00297
00298
00299 iseed = (unsigned int)FFmtRead(chCard,&i,INPUT_LINE_LENGTH,&lgEOL);
00300
00301 if( iseed > 0 )
00302 {
00303
00304 init_genrand( iseed );
00305 }
00306 else
00307 {
00308 init_genrand( (unsigned)time( NULL ) );
00309 }
00310 }
00311
00312 else if( nMatch("THER",chCard ) )
00313 {
00314
00315
00316 if( nMatch("SIMP",chCard ) )
00317 {
00318 hmi.lgH2_Thermal_BigH2 = false;
00319 }
00320 else if( nMatch("FULL",chCard ) )
00321 {
00322
00323 hmi.lgH2_Thermal_BigH2 = true;
00324 }
00325 }
00326
00327 else if( nMatch("CHEM",chCard ) )
00328 {
00329
00330
00331
00332 if( nMatch("SIMP",chCard ) )
00333 {
00334 hmi.lgH2_Chemistry_BigH2 = false;
00335 }
00336 else if( nMatch("FULL",chCard ) )
00337 {
00338
00339 hmi.lgH2_Chemistry_BigH2 = true;
00340 }
00341 }
00342
00343
00344
00345 return;
00346 }