2011-06-22 Paul Romano * .gitignore: Specifies intentionally untracked files for git version control * src/ace.f90: Added capability to read unresolved resonance probability tables. * src/global.f90: Added log file unit. * src/logging.f90: Added module for handling a log file. * src/main.f90: Added call to create log. * src/types.f90: Extended AceContinuous to handle unresolved resonance probability table data. 2011-04-25 Paul Romano * ace.f90: Fixed indentation of get_int and get_real. Added subroutine get_macro_xs. * fileio.f90: Added ability to read tally cards through read_tally subroutine. Changed ERROR_CODE to ERROR_INT. * global.f90: Added variables for tallies. Changed ERROR_CODE to ERROR_INT and added ERROR_REAL. * input_sample: Added tally card. * main.f90: Use tallies_on variable when appropriate. * output.f90: Add preliminary tally printing capabilites through print_tally subroutine. * physics.f90: Add call to score_tally for tallies. Changed Sigma_t to Sigam_rxn. * score.f90: Added score_tally and add_to_score subroutine. * search.f90: Added interpolate subroutine. * string.f90: Added is_number function. * tallies.f90: CHANGED NAME TO score.f90 * types.f90: Added list of tallies to Universe, Lattice and Cell. Modified Tally type. 2011-04-22 Paul Romano * geometry.f90: Deallocated count lists in neighbor_lists. * global.f90: Deallocate arrays that were not previously deallocated (xs_continuous, xs_thermal, e_grid, lattices). * mpi_routines.f90: Added variable p_sample to lessen calculation inside of sampling loop. * physics.f90: Commented warning about low particle energy. * source.f90: Changed source and fission banks to be allocated maxwork instead of n_particles. 2011-04-21 Paul Romano * main.f90: Moved RN_init_particle at end of cycle to synchronize_bank routine. * mcnp_random.f90: Added RN_skip subroutine since RN_skip_ahead was private and needed a specific seed. RN_skip is used in synchronize_bank. * mpi_routines.f90: Dramatically overhauled the fission bank synchronization algorithm. The algorithm was non-scalable due to each processor needing to iterate over the global list of fission sites when sampling. This has been modified so that each processor samples sites locally without knowledge of how many sites other processors have sampled. Essentially, this requires an extra MPI_EXSCAN and MPI_BCAST, but should be much faster than what was there before. * source.f90: Set uid of particle during get_source_particle 2011-04-21 Paul Romano * geometry.f90: Removed level on calls to message(). * global.f90: Adjustments to make necessary integers into 8-byte integers. Changed PI to non-compiler dependent constant. * lattice_sample: Changed lattice to 20 x 20. * main.f90: New timing data from fission bank synchronization * mpi_routines.f90: Switching to 8-byte integers, more comments, changed timing variables. * output.f90: Made the level argument in message subroutine optional. * physics.f90: Fixed bug in sample_angle whereby mu could possibly be greater than one (very rarely). This caused rotate_angle to fail when given mu>1. Removed level from message calls. * source.f90: Change necessary variables to integer(8) * tallies.f90: Change MPI_REDUCE to use MPI_INTEGER8 * types.f90: Change Bank type to use integer(8) for uid. 2011-04-13 Paul Romano * main.f90: Simple timing for total time elapsed and bank synchronization. * Makefile: Added USE_MPI flag and ifeq block. * mpi_routines.f90: Timing of fission bank synchronization. 2011-04-12 Paul Romano * global.f90: Added ifdef MPI sections * main.f90: Added ifdef MPI sections * Makefile: Made switching between compiling with or without MPI more seamless by adding -DMPI flag on F90FLAGS. * mpi_routines.f90: Added ifdef MPI sections * tallies.f90: Added ifdef MPI sections 2011-04-12 Paul Romano * ace.f90: Fixed bug relating to 'use' of str_to_real from wrong module * cross_section.f90: Fixed bug relating to 'use' of str_to_real from wrong module * fileio.f90: Fixed bug relating to 'use' of str_to_real from wrong module 2011-04-01 Paul Romano * ace.f90: Added ability to read S(a,b) data through the read_ACE_thermal and read_thermal_data subroutines. * endf.f90: Replaced many integer values of MTs with constants introduced in global module * fileio.f90: Added check for no boundary conditions. * global.f90: Introduced parameters to represent different reactions. Added real_to_str function and moved str_to_real function here instead of being in string module. * output.f90: Changed printing of real(8)s to use the real_to_str function. Changed print_material to show density of each nuclide. * physics.f90: Replaced actual integer values of MTs with constants introduced in global module * string.f90: Moved str_to_real function to global module. 2011-03-30 Paul Romano * benchmarks: Added boundary conditions to PU-MET-FAST-001, 002, and 005. * fileio.f90: Added ability to read boundary conditions through the new read_bc subroutine and a modification to adjust_indices. * global.f90: Added parameter for periodic boundary conditions. * input_sample: Added boundary conditions. * lattice_sample: Sample lattice geometry file added. * output.f90: Modified print_surface to show boundary condition. 2011-03-28 Paul Romano * fileio.f90: Ability to read lattice entries. * geometry.f90: Added lattice capabilities. Changed cross_boundary to cross_surface. Added many comments. In many places, changed testing of c%fill to c%type instead since fill could be universe or lattice. * Makefile: Added -traceback * output.f90: Added print_lattice, other minor changes. (Fixed indentation so looks like everything changed) * physics.f90: Call cross_lattice if crossing lattice boundary instead of surface. * source.f90: Set values for xyz_local, lattice indices * types.f90: Extending Lattice type, modified Particle type to include local coordinates, current lattice, and lattice indices. 2011-03-25 Paul Romano * physics.f90: Resample outgoing energy if sampled energy is greater than 20 MeV. Some cross sections go up to 150 MeV but others do not. * source.f90: Resample outgoing energy if >= 20 MeV. 2011-03-25 Paul Romano * ace.f90: Added ability to read delayed neutron energy distributions and precursor yields/constants. Created function length_energy_dist from inner section of read_energy_dist so that it could used for delayed neutrons as well. Added many comments where they were previously missing. * fileio.f90: Added many comments. * global.f90: Added lattice types * physics.f90: Added sampling of delayed neutrons (delayed/prompt, precursor group, outgoing energy). Added many comments. * types.f90: Moved all delayed neutron precursor data into one array. Made delayed neutron energy distribution allocatable (since there are 6 groups, each with a dist). Added many comments. 2011-03-24 Paul Romano * geometry.f90: Fixed significant bug in how quadratic surfaces were handled. Changed x**2 to x*x in the interest of efficiency. * global.f90: Added more interpolation types to prepare for interpolation other than histogram or lin-lin. * physics.f90: Fixed bug in E1 and EK energies for Law 4 (used NE instead of NP). 2011-03-22 Paul Romano * benchmarks: Added PU-MET-FAST-002 and PU-MET-FAST-005 benchmark problems. * mpi_routines.f90: Added check for no fission bank sites. * output.f90: Changed error subroutine to work when run in parallel. * physics.f90: Fixed sampling of seconary angle for elastic scattering. Changed sampling of reaction. Changed n_gamma to n_absorption and now includes (n,p), etc. Reverted sample_angle routine to arguments u,v,w,mu. 2011-03-22 Paul Romano * cross_section.f90: Calculation of material total cross section was completely wrong -- fixed it up. * global.f90: Added default keff. * mpi_routines.f90: Fixed major bug in how MPI_BANK type was created. Solution should be machine independent. Parallel fission bank now works. * physics.f90: Combined level_scatter into inelastic_scatter since the physics is the same. Simplifying sampling of angle (isotropic cases handled inside sample_angle). Fixed interpolation in many places (f and (1-f) were swapped). Fixed distance to collision. Fixed major bug in evaporation spectrum (restriction energy was wrong). * source.f90: Moved initial sampling of Watt spectrum for first cycle particles to init_source inside of being in physics module. * tallies.f90: Initial addition of tallies module. Only has one routine, calculate_keff, that is used to do end-of-cycle keff calculations. This will probably change significantly. * unittest.f90: Added test_mpi_bank useful for debugging the MPI_BANK type. 2011-03-21 Paul Romano * ace.f90: Adjusted locators energy and angle distributions for Law 61. * global.f90: Added 'work' variable. * main.f90: History loop is generalized. Added call to synchronize_bank. * mpi_routines.f90: Added fission bank synchronization from prior code. Introduced MPI_bank type in setup_mpi. * physics.f90: Added ability to simulate (n,xn), inelastic scattering reactions. Further extended energy sampling to include Law 61 (correlated energy-angle distributions). Fixed cases where nu values outside of array for binary_search are treated correctly. Fixed bugs in energy sampling (changed %energy to %data). * source.f90: Changed init_source to work in parallel. Minor changes to get_source_particle. Added copy_from_bank for fission bank synchronization. 2011-03-18 Paul Romano * ace.f90: Added ability to read nu data through the read_nu_data subroutine. Changed names of subroutines with 'parse' to 'read'. Change 'size' variable to 'length' to prevent conflict with SIZE intrinsic. Adjusted angle and energy distributions to fit new types. Adjusted locator arrays within energy and angle distribution data array. * fileio.f90: Can now read verbosity from input file rather than setting it arbitrarily in my source. * geometry.f90: Set current pointers particle attributes in find_cell. * global.f90: Added keff, bank indices, parallel processing variables, nu types. Moved default verbosity to set_defults. * mpi_routines.f90: First addition on MPI parallelization * output.f90: Added print_particle and print_reaction routines, moved ou and eu to be module variables so that every routine doesn't have to define them. * physics.f90: Added n_fission and level_scatter subroutines. Fixed bugs in sample_angle subroutine. Changed rotate_angle to operate on particle. Added sample_energy subroutine -- currently includes tabular equiprobable bins, inelastic level scattering, continuous tabular distribution, Maxwell spectrum, evaporation spectrum, Watt spectrum, and Kalbach-Mann correlated scattering. * source.f90: Added default values for source particles. Temporary add_bank_sites routine written -- not sure if it will be used here or elsewhere. * types.f90: Added n_coll attribite to particle. Extended Bank type to include direction and energy. Added AceDistAngle and AceDistEnergy types and changed AceReaction accordingly. Changed how nu data is stored in AceContinuous. 2011-03-10 Paul Romano * types.f90: The major changes are that the n_items and boundary_list attributes of 'Cell' are now n_surfaces and surfaces. Even though this doesn't quite make sense since parentheses and union operators are not surfaces per-se, it is easier to understand within other modules with these names. The 'Neutron' type is now called 'Particle' and will be used for all different particles (eventually). * fileio.f90: Changed aforementioned names. * geometry.f90: Changed aforementioned names. * global.f90: Changed aforementioned names. * main.f90: Changed aforementioned names. * output.f90: Changed aforementioned names. * physics.f90: Changed aforementioned names. * source.f90: Changed aforementioned names. 2011-03-04 Paul Romano * fileio.f90: Added build_universe routine which sets pointers betweens cells and parent cells and determines level of each universe. Added stub for read_lattice. * geometry.f90: Changed cross_boundary and dist_to_boundary to take into account universe boundaries as well as cell boundaries. * global.f90: Added initial variables for lattices. * output.f90: Added print_surface and print_material. * physics.f90: Added find_energy_index routine. * types.f90: Initial Lattice type. 2011-02-27 Paul Romano * ace.f90: Fixed minor bugs associated with reading angular distributions. * data_structures.f90: Added dict_keys routines. * fileio.f90: Considerably changed read_count and read_cell to be able to handle universes. * geometry.f90: Added universe logic to find_cell and allowed it to be recursively called. * global.f90: Added universe array and dictionary, cell types, pointer to lowest universe, angular distribution types, interpolation types, as well as ERROR_CODE and adjusted str_to_int to return ERROR_CODE on error. * output.f90: Added print_cell, print_universe, and print_summary subroutines. Need a few more useful routines like this! * physics.f90: Added ability to sample cosine of scattering angle from a 32-equiprobable bin distribution or a tabular distribution. This is done by the sample_energy routine. The rotate_angle subroutine takes a particles direction and applies that scattering angle to it. Also added some logic for universes. * types.f90: Changed some attributes in the Neutron structure, added type to angular distribution within AceReaction. 2011-02-22 Paul Romano * ace.f90: Added read_angular_dist and read_energy_dist subroutines that read the energy and angle distributions for secondary neutrons for reactions with MT < 100. Note that these routines don't actually parse the distributions since their form will depend on the secondary law is for that particle reaction. * global.f90: Incremented minor version * types.f90: Put angular and energy distribution information within AceReaction since it is unique to each reaction 2011-02-13 Paul Romano * ace.f90: Fixed xs_continuous allocation again -- cross sections were not being assigned correctly to materials. Added elastic scattering in list of reactions. Changed name of rxn % energy_index to IE. * endf.f90: New module. Includes subroutine reaction_name which returns the name of a reaction for a given ENDF MT value. * geometry.f90: Fixed bug in dist_to_boundary (the 'w' in uvw was actually being set to 'z', not 'w'). Changed 0's and 1's to ZEROs and ONEs. * global.f90: Added ZERO and ONE. * physics.f90: Can now sample reactions once nuclide is selected. Added subroutines elastic_scatter, level_inelastic, and n_gamma (level_inelastic is just a stub), and significantly changed elastic scattering (currently based on stationary target). * types.f90: Added n_reaction attribute on AceContinuous, changed AceReaction % energy_index to IE. 2011-02-09 Paul Romano * ace.f90: Fixed bug in the way xs_continuous was allocated. If, e.g., 92235.03c was listed twice in a file, two spots would be allocated in the array instead of one. * cross_section.f90: Added calculation of total material cross-section. * data_structures.f90: Added list routines for each different type (integer, real, key/value pairs) and an interface for them. Dictionaries can now take character keys or integer keys. New hash function for integers is simple mod function. * energy_grid.f90: Removed grid_count since we now have a generic list_size routine in data_structures. Added original_indices routine in order to do SERPENT-style double-indexing. * fileio.f90: Fixed normalize_ao routine to include calculations based on atom or gram density (this should probably be moved to different module). Added get_next_line routine that reads a full line of input including any continuation lines marked by an ampersand. * global.f90: Added separate dictionary types (CI and II), added pointers for current cell, surface, and material. Added e_grid and n_grid * physics.f90: Neutron energy sampled at beginning of transport. Added watt_spectrum and maxwell_spectrum routines. Changed collision routine so that actual nuclide is sampled. * search.f90: Fixed binary_search routine * string.f90: Changed concatenate subroutine into a function * types.f90: Moved List and Dictionary types from data_structures to here (including new types). LinkedListGrid is now ListReal. 2011-02-03 Paul Romano * ace.f90: Added initial routines for reading continuous-energy ACE cross section tables. No secondary energy/angle distributions or nu data is read. * cross_section.f90: Added read_xsdata routine which reads information from an xsdata file from SERPENT. * data_structures.f90: Moved derived types to the types module and change dict_create so that one doesn't need to add a (key,value) pair on initialization. * energy_grid.f90: First routines for energy grid unionization based on insertion sorts. * fileio.f90: Added routines for reading integer and real data, particularly from cross-section libraries. Made an interface so that a single routine can be called regardless of type. Ability to read material cards and added subroutine for normalization of atom/weight percents. * Makefile: Added 'unittest' target * output.f90: Fixed bug in get_today subroutine whereby the day was displayed wrong. * search.f90: Added binary search which will eventually be used for energy grid searches * unittest.f90: Added this program for unit testing. 2011-01-26 Paul Romano * physics.f90: Added collision routine, still segfaults though. * geometry.f90: Added messages for high verbosities * global.f90: Added verbosity parameter, key length for dictionaries * output.f90: Implemented verbosity for messages. * data_structures.f90: Added implementations of linked list and dictionaries based on the flib open source package 2011-01-23 Paul Romano * types.f90: Added cell, surface, and alive attributes to Neutron * fileio.f90: External source no longer array * geometry.f90: Changed cell_contains slightly so that it can evaluate simple cell logical expressions. Added find_cell and cross_boundary subroutines. Changed dist_to_boundary to also give back closest surface * global.f90: Added set_defaults subroutine * source.f90: Isotropic angle is now sampled in init_source, fixed sampling in box, checks for external source type. Added get_source_particle function. 2011-01-22 Paul Romano * input_sample: Added a sample input file * main.f90: Added run_problem subroutine * mcnp_random.f90: Added random number generator based on MCNP's linear congruential generator * fileio.f90: Completely changed how cells, surfaces, and materials are allocated. Now there is a first pass through the input file made by read_count which allows the arrays to be pre-allocated, then read_input actually parses the input data. * geometry.f90: Only formatting changes * output.f90: Added the echo_input subroutine, made formatting changes * string.f90: Moved int_to_str to the global module, changed string splitting to recognize tab characters * types.f90: Deleted List types, added Isotope, Material, and Source * source.f90: Added init_source routine which initializes source particles