00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "ENDF_file.hpp"
00037 #include "record_types.hpp"
00038
00039
00040 const int Line_len = 80;
00041
00042
00043 void ENDF_file::skip(int N)
00044
00045 {
00046 char linje[Line_len];
00047 string linebuff;
00048 string strbuff;
00049 double dummy;
00050
00051 for( int iN=0; iN < N; iN++ )
00052 {
00053 int iC=iN % 6;
00054 if ( iC == 0 )
00055 {
00056 getline( linje, Line_len-1 );
00057 linebuff = linje;
00058 }
00059 strbuff = linebuff.substr(iC*11, 11);
00060 read_d(&strbuff, &dummy );
00061 }
00062 }
00063
00064 void ENDF_file::mfx_line1(int *ZA, double *AWR, int *I1, int *I2,
00065 int *I3, int *I4)
00066
00067 {
00068 char linje[Line_len];
00069
00070 getline(linje, Line_len-1 );
00071 string linebuff(linje);
00072
00073 read_idiiii(&linebuff,
00074 ZA,
00075 AWR,
00076 I1, I2, I3, I4);
00077 }
00078
00079 void ENDF_file::mfx_line2(double *D1, double *D2, int *I1, int *I2,
00080 int *I3, int *I4)
00081
00082 {
00083 char linje[Line_len];
00084
00085 getline(linje, Line_len-1 );
00086 string linebuff(linje);
00087
00088 read_ddiiii(&linebuff,
00089 D1, D2,
00090 I1, I2, I3, I4);
00091 }
00092
00093 void ENDF_file::get_regions(int NR, vector<int>& NBT, vector<int>& INT)
00094
00095 {
00096 char linje[Line_len];
00097
00098 string linebuff;
00099 string strbuff;
00100
00101 int NBT_value, INT_value;
00102
00103
00104 for ( int iNR = 0; iNR < NR; iNR++ )
00105 {
00106 int iR = iNR % 3;
00107 if ( iR == 0 )
00108 {
00109 getline(linje, Line_len-1);
00110 linebuff = linje;
00111 }
00112 strbuff = linebuff.substr(iR*22, 22);
00113 read_ii( &strbuff, &NBT_value, &INT_value );
00114 NBT.push_back( NBT_value );
00115 INT.push_back( INT_value );
00116 }
00117 }
00118
00119
00120 void mf1_file::read_line1(int *ZA, double *AWR, int *LNU)
00121
00122 {
00123 int iDum;
00124
00125 mfx_line1(ZA,
00126 AWR,
00127 &iDum,
00128 LNU,
00129 &iDum, &iDum);
00130 }
00131
00132 void mf1_file::delay_head(int *NC)
00133
00134 {
00135 int iDum;
00136 double zero;
00137
00138 mfx_line2(&zero,
00139 &zero,
00140 &iDum, &iDum,
00141 NC,
00142 &iDum);
00143 }
00144
00145 void mf1_file::mult_head(int *NR, int *NP)
00146
00147 {
00148 int iDum;
00149 double zero;
00150
00151 mfx_line2(&zero,
00152 &zero,
00153 &iDum, &iDum,
00154 NR,
00155 NP);
00156 }
00157
00158 void mf3_file::read_line1(int *ZA, double *AWR)
00159
00160 {
00161 int iDum;
00162
00163 mfx_line1(ZA,
00164 AWR,
00165 &iDum, &iDum,
00166 &iDum, &iDum);
00167 }
00168
00169 void mf3_file::read_line2(double *QM, double *QI, int *LR, int *NR, int *NP)
00170
00171 {
00172 int iDum;
00173
00174 mfx_line2(QM,
00175 QI,
00176 &iDum,
00177 LR,
00178 NR,
00179 NP);
00180 }
00181
00182 void mf4_file::read_line1(int *ZA, double *AWR, int *LVT, int *LTT)
00183
00184 {
00185 int iDum;
00186
00187 mfx_line1(ZA,
00188 AWR,
00189 LVT,
00190 LTT,
00191 &iDum, &iDum);
00192 }
00193
00194 void mf4_file::read_line2(int *LI, int *LCT, int *NK, int *NM)
00195
00196 {
00197 double ZERO;
00198 double AWR;
00199
00200 mfx_line2(&ZERO,
00201 &AWR,
00202 LI,
00203 LCT,
00204 NK,
00205 NM );
00206 }
00207
00208 void mf4_file::read_line3(int *NR, int *NE)
00209
00210 {
00211 double ZERO;
00212 int iDum;
00213
00214 mfx_line2(&ZERO,
00215 &ZERO,
00216 &iDum,
00217 &iDum,
00218 NR,
00219 NE );
00220 }
00221
00222 void mf5_file::read_line1(int *ZA, double *AWR, int *NK)
00223
00224 {
00225 int iDum;
00226
00227 mfx_line1(ZA,
00228 AWR,
00229 &iDum, &iDum,
00230 NK,
00231 &iDum);
00232 }
00233
00234 void mf5_file::read_line2(double *U, int *LF, int *NR, int *NP)
00235
00236 {
00237 double ZERO;
00238 int iZERO;
00239
00240 mfx_line2(U,
00241 &ZERO,
00242 &iZERO,
00243 LF,
00244 NR,
00245 NP );
00246 }
00247
00248 void mf5_file::read_Madland(double *EFL, double *EFH, int *NR, int *NE)
00249
00250 {
00251 int iZERO;
00252
00253 mfx_line2(EFL,
00254 EFH,
00255 &iZERO,
00256 &iZERO,
00257 NR,
00258 NE );
00259 }
00260
00261 void mf6_file::read_line1(int *ZA, double *AWR, int *LCT, int *NK)
00262
00263 {
00264 int iDum;
00265
00266 mfx_line1(ZA,
00267 AWR,
00268 &iDum,
00269 LCT,
00270 NK,
00271 &iDum);
00272 }
00273
00274 void mf6_file::particle_line1(int *ZAP, double *AWP, int *LIP,
00275 int *LAW, int *NR, int *NP)
00276
00277 {
00278 mfx_line1(ZAP,
00279 AWP,
00280 LIP,
00281 LAW,
00282 NR,
00283 NP);
00284 }
00285
00286 void mf6_file::get_model(int *LANG, int *LEP, int *NR, int *NE)
00287
00288 {
00289 double ZERO;
00290
00291 mfx_line2(&ZERO, &ZERO,
00292 LANG,
00293 LEP,
00294 NR,
00295 NE);
00296 }
00297
00298 void mf6_file::gamma_ein( double *e_in, int *ND, int *NEP )
00299
00300 {
00301 double ZERO;
00302 int dummy;
00303 int NA;
00304
00305 mfx_line2( &ZERO,
00306 e_in,
00307 ND,
00308 &NA,
00309 &dummy,
00310 NEP );
00311 if( NA != 0 )
00312 {
00313 Unimplemented("mf6_file::gamma_ein","Implement anisotropic gammas.");
00314 }
00315 }
00316
00317 void mf6_file::phase_space( double *APSX, int *NPSX )
00318
00319 {
00320 double Zero;
00321 int zero;
00322 mfx_line2(APSX,
00323 &Zero,
00324 &zero, &zero, &zero,
00325 NPSX);
00326 }
00327
00328 void mf6_file::mf4_line1(int *NR, int *NE)
00329
00330 {
00331 double ZERO;
00332 int zero;
00333
00334 mfx_line2(&ZERO, &ZERO,
00335 &zero, &zero,
00336 NR,
00337 NE);
00338 }
00339
00340 void mf6_file::mf4_line2( double *e_in, int *LANG, int *NW, int *NL )
00341
00342 {
00343 double ZERO;
00344 int zero;
00345
00346 mfx_line2(&ZERO,
00347 e_in,
00348 LANG,
00349 &zero,
00350 NW,
00351 NL);
00352 }
00353
00354 void mf6_file::ENDL(int *NR, int *NE)
00355
00356 {
00357 mf4_line1( NR,
00358 NE );
00359 }
00360
00361 void mf6_file::ENDL_head( double *e_in, int *NR, int *NE )
00362
00363 {
00364 double ZERO;
00365 int zero;
00366
00367 mfx_line2(&ZERO,
00368 e_in,
00369 &zero, &zero,
00370 NR,
00371 NE);
00372 }
00373
00374 void mf6_file::Legendre_E_in( double *e_in, int *ND, int *order, int *NE )
00375
00376 {
00377 double ZERO;
00378 int dummy;
00379
00380 mfx_line2(&ZERO,
00381 e_in,
00382 ND,
00383 order,
00384 &dummy,
00385 NE);
00386 if( dummy != (*NE)*(*order + 2) )
00387 {
00388 Warning( "mf6_file::Legendre_E_in",
00389 pastenum("order inconsistent for e_in: ", *e_in ) );
00390 *order = dummy/(*NE) - 2;
00391 }
00392 }
00393
00394 void mf6_file::read_spin( double *spin, int *NR, int *NE )
00395
00396 {
00397 int zero, dummy;
00398 double Zero;
00399
00400 mfx_line2(spin,
00401 &Zero,
00402 &dummy,
00403 &zero,
00404 NR,
00405 NE);
00406 }
00407
00408 void mf6_file::read_model( double *e_in, int *LTP, int *NL )
00409
00410 {
00411 int zero, dummy;
00412 double Zero;
00413
00414 mfx_line2(&Zero,
00415 e_in,
00416 LTP,
00417 &zero,
00418 &dummy,
00419 NL);
00420 }
00421
00422 void mf12_file::read_line1(int *ZA, double *AWR, int *LO, int *LG,
00423 int *NK)
00424
00425 {
00426 int iDum;
00427
00428 mfx_line1(ZA,
00429 AWR,
00430 LO,
00431 LG,
00432 NK,
00433 &iDum);
00434 }
00435
00436 void mf12_file::read_line2(int *NR, int *NP)
00437
00438 {
00439 double ZERO;
00440 int iZERO;
00441
00442 mfx_line2(&ZERO, &ZERO,
00443 &iZERO, &iZERO,
00444 NR,
00445 NP );
00446 }
00447
00448 void mf12_file::gamma_line1(double *EG, double *ES, int *LP, int *LF,
00449 int *NR, int *NP)
00450
00451 {
00452 mfx_line2(EG,
00453 ES,
00454 LP,
00455 LF,
00456 NR,
00457 NP);
00458 }
00459
00460 void mf13_file::read_line1(int *ZA, double *AWR, int *NK)
00461
00462 {
00463 int iDum;
00464
00465 mfx_line1(ZA,
00466 AWR,
00467 &iDum,
00468 &iDum,
00469 NK,
00470 &iDum);
00471 }
00472
00473 void mf13_file::read_line2(int *NR, int *NP)
00474
00475 {
00476 double ZERO;
00477 int iZERO;
00478
00479 mfx_line2(&ZERO, &ZERO,
00480 &iZERO, &iZERO,
00481 NR,
00482 NP );
00483 }
00484
00485 void mf13_file::gamma_line1(double *EG, double *ES, int *LP, int *LF,
00486 int *NR, int *NP)
00487
00488 {
00489 mfx_line2(EG,
00490 ES,
00491 LP,
00492 LF,
00493 NR,
00494 NP);
00495 }
00496
00497 void mf14_file::first_line(int *ZA, double *AWR, int *LI, int *LTT,
00498 int *NK, int *NI)
00499
00500 {
00501 mfx_line1(ZA,
00502 AWR,
00503 LI,
00504 LTT,
00505 NK,
00506 NI);
00507 }
00508
00509 void mf14_file::read_EG( double *EG, int *NR, int *NE )
00510
00511 {
00512 double ES;
00513 int zero;
00514
00515 mfx_line2(EG,
00516 &ES,
00517 &zero,
00518 &zero,
00519 NR,
00520 NE);
00521 }
00522
00523 void mf14_file::discrete( double *EG )
00524
00525 {
00526 double ES;
00527 int zero;
00528
00529 mfx_line2(EG,
00530 &ES,
00531 &zero,
00532 &zero,
00533 &zero,
00534 &zero);
00535 }
00536
00537 void mf14_file::Leg_head( double *e_in, int *NL )
00538
00539 {
00540 double Zero;
00541 int zero;
00542
00543 mfx_line2(&Zero,
00544 e_in,
00545 &zero,
00546 &zero,
00547 NL,
00548 &zero);
00549 }
00550
00551 int mf14_file::get_order( int NK, int NI )
00552
00553
00554
00555 {
00556 int max_order = 0;
00557 int num_to_do = NK - NI;
00558 int count;
00559 double EG;
00560
00561
00562 skip_iso( NI );
00563
00564
00565 for( count = 0; count < num_to_do; ++count )
00566 {
00567 int NR, NE;
00568 read_EG( &EG, &NR, &NE );
00569 skip( 2*NR );
00570 for( int iNE = 0; iNE < NE; ++iNE )
00571 {
00572 int num_coef;
00573 double e_in;
00574 Leg_head( &e_in, & num_coef );
00575 if( num_coef > max_order )
00576 {
00577 max_order = num_coef;
00578 }
00579 skip( num_coef );
00580 }
00581 }
00582 return max_order;
00583 }
00584
00585 void mf14_file::skip_iso( int NI )
00586
00587 {
00588
00589 for( int count = 0; count < NI; ++count )
00590 {
00591 double EG;
00592 discrete( &EG );
00593 }
00594 }
00595
00596 void mf15_file::read_line1(int *ZA, double *AWR, int *NC)
00597
00598 {
00599 int iDum;
00600
00601 mfx_line1(ZA,
00602 AWR,
00603 &iDum,
00604 &iDum,
00605 NC,
00606 &iDum);
00607 }
00608
00609 void mf15_file::weight_line(int *LF, int *NR, int *NP)
00610
00611 {
00612 int iDum;
00613 double zero;
00614
00615 mfx_line1(&iDum,
00616 &zero,
00617 &iDum,
00618 LF,
00619 NR,
00620 NP);
00621 }
00622
00623 void mf15_file::E_in_interp(int *NR, int *NP)
00624
00625 {
00626 int iDum;
00627 double zero;
00628
00629 mfx_line1(&iDum,
00630 &zero,
00631 &iDum, &iDum,
00632 NR,
00633 NP);
00634 }
00635
00636 void mf15_file::get_E_in(double *E_in, int *NR, int *NP)
00637
00638 {
00639 int iDum;
00640
00641 mfx_line1(&iDum,
00642 E_in,
00643 &iDum, &iDum,
00644 NR,
00645 NP);
00646 }
00647
00648 void mt458_file::read_line1(int *ZA, double *AWR)
00649
00650 {
00651 int iDum;
00652
00653 mfx_line1(ZA,
00654 AWR,
00655 &iDum,
00656 &iDum,
00657 &iDum,
00658 &iDum);
00659 }
00660
00661 void mt458_file::read_line2( int *num_E, int *num_data )
00662
00663 {
00664 int zero;
00665 double Zero;
00666
00667 mfx_line2(&Zero, &Zero,
00668 &zero, &zero,
00669 num_E,
00670 num_data);
00671 }
00672
00673 void mt458_file::read_data( double *E_1, double *dE_1, double *E_2,
00674 double *dE_2, double *E_3, double *dE_3 )
00675
00676 {
00677 char linje[Line_len];
00678
00679 getline(linje, Line_len-1 );
00680 string linebuff(linje);
00681
00682 read_dddddd(&linebuff,
00683 E_1, dE_1, E_2, dE_2, E_3, dE_3);
00684 }
00685
00686 double mt458_file::reduce_Q( double Q )
00687
00688 {
00689 double new_Q = Q;
00690 int ZA;
00691 double AWR;
00692 int num_E, num_data;
00693
00694 read_line1(&ZA, &AWR);
00695 read_line2(&num_E, &num_data);
00696
00697 double EFR, d_EFR,
00698 ENP, d_ENP,
00699 END, d_END;
00700 read_data( &EFR, &d_EFR, &ENP, &d_ENP, &END, &d_END );
00701 new_Q -= END;
00702
00703 double EGP, d_EGP,
00704 EGD, d_EGD,
00705 EB, d_EB;
00706 read_data( &EGP, &d_EGP, &EGD, &d_EGD, &EB, &d_EB );
00707 new_Q -= EGD + EB;
00708
00709 return new_Q;
00710 }