diff --git a/src/engine.h b/src/engine.h index d61769034fd6d72d49e729f52b9f01e2f90a653b..3ee8bcf06e7f94e7bb1c786c79fbbf88e6f97bc0 100644 --- a/src/engine.h +++ b/src/engine.h @@ -191,6 +191,9 @@ struct engine { /* The internal system of units */ const struct unit_system *internal_units; + + /* The STF system of units */ + struct unit_system *stf_units; /* Snapshot information */ double timeFirstSnapshot; diff --git a/src/velociraptor_interface.c b/src/velociraptor_interface.c index bbbcf484137445f2320162f8407081f62c1ba273..f2734130f9c073c51c348a8ae886a286ff129156 100644 --- a/src/velociraptor_interface.c +++ b/src/velociraptor_interface.c @@ -48,12 +48,11 @@ void velociraptor_init(struct engine *e) { struct unitinfo unit_info; struct siminfo sim_info; - struct unit_system vel_us; struct phys_const vel_const; /* Initialize velociraptor unit system and constants */ - units_init(&vel_us, e->parameter_file, "VelociraptorUnitSystem"); - phys_const_init(&vel_us, e->parameter_file, &vel_const); + units_init(e->stf_units, e->parameter_file, "VelociraptorUnitSystem"); + phys_const_init(e->stf_units, e->parameter_file, &vel_const); /* Set cosmological constants. */ cosmo_info.atime = e->cosmology->a; @@ -73,10 +72,10 @@ void velociraptor_init(struct engine *e) { message("w_de: %e", cosmo_info.w_de); /* Set unit conversions. */ - unit_info.lengthtokpc = units_conversion_factor(e->internal_units, &vel_us, UNIT_CONV_LENGTH); /* 1kpc <=> 3.086e21cm */ - unit_info.velocitytokms = units_conversion_factor(e->internal_units, &vel_us, UNIT_CONV_SPEED); /* 1km/s <=> 1e5cm/s */ - unit_info.masstosolarmass = units_conversion_factor(e->internal_units, &vel_us, UNIT_CONV_MASS); /* 1M_sol <=> 1.99e33g */ - unit_info.energyperunitmass = units_conversion_factor(e->internal_units, &vel_us, UNIT_CONV_ENERGY_PER_UNIT_MASS); /* Conversion for gravitational potential. */ + unit_info.lengthtokpc = units_conversion_factor(e->internal_units, e->stf_units, UNIT_CONV_LENGTH); /* 1kpc <=> 3.086e21cm */ + unit_info.velocitytokms = units_conversion_factor(e->internal_units, e->stf_units, UNIT_CONV_SPEED); /* 1km/s <=> 1e5cm/s */ + unit_info.masstosolarmass = units_conversion_factor(e->internal_units, e->stf_units, UNIT_CONV_MASS); /* 1M_sol <=> 1.99e33g */ + unit_info.energyperunitmass = units_conversion_factor(e->internal_units, e->stf_units, UNIT_CONV_ENERGY_PER_UNIT_MASS); /* Conversion for gravitational potential. */ unit_info.gravity = vel_const.const_newton_G; /* TODO: G = 6.67408e-8 (cgs) */ unit_info.hubbleunit = e->cosmology->H; /* TODO: double check this. */ @@ -185,7 +184,8 @@ void velociraptor_invoke(struct engine *e) { nr_hydro_parts * sizeof(float)) != 0) error("Failed to allocate array of internal energies for VELOCIraptor."); - for(int i=0; i<nr_hydro_parts; i++) internal_energies[i] = hydro_get_physical_internal_energy(&parts[i], e->cosmology); + const float energy_scale = units_conversion_factor(e->internal_units, e->stf_units, UNIT_CONV_ENERGY); /* Conversion for particle internal energy. */ + for(int i=0; i<nr_hydro_parts; i++) internal_energies[i] = hydro_get_physical_internal_energy(&parts[i], e->cosmology) * energy_scale; message("MPI rank %d sending %lld gparts to VELOCIraptor.", e->nodeID, nr_gparts);