diff --git a/examples/fof_test/makeIC.py b/examples/fof_test/makeIC.py new file mode 100644 index 0000000000000000000000000000000000000000..6ad4db3b3fead7fb1fd288ef0e541543137e8f7c --- /dev/null +++ b/examples/fof_test/makeIC.py @@ -0,0 +1,108 @@ +############################################################################### + # This file is part of SWIFT. + # Copyright (c) 2013 Pedro Gonnet (pedro.gonnet@durham.ac.uk), + # Matthieu Schaller (matthieu.schaller@durham.ac.uk) + # + # This program is free software: you can redistribute it and/or modify + # it under the terms of the GNU Lesser General Public License as published + # by the Free Software Foundation, either version 3 of the License, or + # (at your option) any later version. + # + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. + # + # You should have received a copy of the GNU Lesser General Public License + # along with this program. If not, see <http://www.gnu.org/licenses/>. + # + ############################################################################## + +import h5py +import sys +from numpy import * +import numpy as np + +# Generates a swift IC file containing a cartesian distribution of DM particles +# with a density of 1 + +# Parameters +periodic= 1 # 1 For periodic box +boxSize = 1. +rho = 1. +L = int(sys.argv[1]) # Number of particles along one axis +fileName = "uniformDMBox_%d.hdf5"%L + +#--------------------------------------------------- +numPart = L**3 +mass = boxSize**3 * rho / numPart + +#-------------------------------------------------- + +#File +file = h5py.File(fileName, 'w') + +# Header +grp = file.create_group("/Header") +grp.attrs["BoxSize"] = boxSize +grp.attrs["NumPart_Total"] = [0, numPart, 0, 0, 0, 0] +grp.attrs["NumPart_Total_HighWord"] = [0, 0, 0, 0, 0, 0] +grp.attrs["NumPart_ThisFile"] = [0, numPart, 0, 0, 0, 0] +grp.attrs["Time"] = 0.0 +grp.attrs["NumFilesPerSnapshot"] = 1 +grp.attrs["MassTable"] = [0.0, mass, 0.0, 0.0, 0.0, 0.0] +grp.attrs["Flag_Entropy_ICs"] = 0 +grp.attrs["Dimension"] = 3 + +#Runtime parameters +grp = file.create_group("/RuntimePars") +grp.attrs["PeriodicBoundariesOn"] = periodic + +#Units +grp = file.create_group("/Units") +grp.attrs["Unit length in cgs (U_L)"] = 1. +grp.attrs["Unit mass in cgs (U_M)"] = 1. +grp.attrs["Unit time in cgs (U_t)"] = 1. +grp.attrs["Unit current in cgs (U_I)"] = 1. +grp.attrs["Unit temperature in cgs (U_T)"] = 1. + + +#Particle group +grp = file.create_group("/PartType1") + +v = zeros((numPart, 3)) +ds = grp.create_dataset('Velocities', (numPart, 3), 'f') +ds[()] = v +v = zeros(1) + +m = full((numPart, 1), mass) +ds = grp.create_dataset('Masses', (numPart,1), 'f') +ds[()] = m +m = zeros(1) + +ids = linspace(0, numPart, numPart, endpoint=False).reshape((numPart,1)) +ds = grp.create_dataset('ParticleIDs', (numPart, 1), 'L') +ds[()] = ids + 1 + +# set seed for random number +np.random.seed(1234) + +x_pert = 1.2 * (np.random.rand(numPart, 1) - 0.5) +z_pert = 1.2 * (np.random.rand(numPart, 1) - 0.5) +y_pert = 1.2 * (np.random.rand(numPart, 1) - 0.5) + +#x_pert = zeros((numPart, 1)) +#y_pert = zeros((numPart, 1)) +#z_pert = zeros((numPart, 1)) + +x = (ids + x_pert) % L; +y = ((ids - x) / L + y_pert) % L; +z = (ids - x - L * y + z_pert) / L**2; +coords = zeros((numPart, 3)) +coords[:,0] = z[:,0] * boxSize / L + boxSize / (2*L) +coords[:,1] = y[:,0] * boxSize / L + boxSize / (2*L) +coords[:,2] = x[:,0] * boxSize / L + boxSize / (2*L) +ds = grp.create_dataset('Coordinates', (numPart, 3), 'd') +ds[()] = coords + +file.close() diff --git a/examples/fof_test/uniformBox.yml b/examples/fof_test/uniformBox.yml new file mode 100644 index 0000000000000000000000000000000000000000..690bcf87f296a4e8db5c8db45987579c1bd2c651 --- /dev/null +++ b/examples/fof_test/uniformBox.yml @@ -0,0 +1,45 @@ +# Define the system of units to use internally. +InternalUnitSystem: + UnitMass_in_cgs: 1 # Grams + UnitLength_in_cgs: 1 # Centimeters + UnitVelocity_in_cgs: 1 # Centimeters per second + UnitCurrent_in_cgs: 1 # Amperes + UnitTemp_in_cgs: 1 # Kelvin + +# Parameters governing the time integration +TimeIntegration: + time_begin: 0. # The starting time of the simulation (in internal units). + time_end: 100. # The end time of the simulation (in internal units). + dt_min: 1e-6 # The minimal time-step size of the simulation (in internal units). + dt_max: 1. # The maximal time-step size of the simulation (in internal units). + +Scheduler: + max_top_level_cells: 8 + cell_split_size: 50 + +# Parameters governing the snapshots +Snapshots: + basename: uniformDMBox # Common part of the name of output files + time_first: 0. # Time of the first output (in internal units) + delta_time: 10. # Time difference between consecutive outputs (in internal units) + +# Parameters for the self-gravity scheme +Gravity: + eta: 0.025 # Constant dimensionless multiplier for time integration. + theta: 0.85 # Opening angle (Multipole acceptance criterion) + comoving_softening: 0.0026994 # Comoving softening length (in internal units). + max_physical_softening: 0.0007 # Physical softening length (in internal units). + +# Parameters for the hydrodynamics scheme +SPH: + resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel). + CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration. + minimal_temperature: 100 # (internal units) + +# Parameters governing the conserved quantities statistics +Statistics: + delta_time: 5. # Time between statistics output + +# Parameters related to the initial conditions +InitialConditions: + file_name: ./uniformDMBox_100.hdf5 # The file to read