From 814bcc0193a30abc231d90850ae1bfb8f3f587af Mon Sep 17 00:00:00 2001 From: Tom Theuns <tom.theuns@durham.ac.uk> Date: Thu, 7 Apr 2016 15:48:30 +0100 Subject: [PATCH] point mass potential parameters are read from a parameter file --- examples/ExternalGravity/externalGravity.yml | 10 +++++++- examples/ExternalGravity/makeIC.py | 4 ++++ examples/main.c | 2 +- src/potentials.c | 24 ++++++++++++-------- src/potentials.h | 3 ++- src/runner.c | 3 ++- 6 files changed, 33 insertions(+), 13 deletions(-) diff --git a/examples/ExternalGravity/externalGravity.yml b/examples/ExternalGravity/externalGravity.yml index 857bba0068..959d7c1c28 100644 --- a/examples/ExternalGravity/externalGravity.yml +++ b/examples/ExternalGravity/externalGravity.yml @@ -1,7 +1,7 @@ # Define the system of units to use internally. UnitSystem: - UnitMass_in_cgs: 1.898e33 # Grams + UnitMass_in_cgs: 1.989e33 # Grams UnitLength_in_cgs: 3.0856776e21 # Centimeters UnitVelocity_in_cgs: 1e5 # Centimeters per second UnitCurrent_in_cgs: 1 # Amperes @@ -46,3 +46,11 @@ DomainDecomposition: initial_grid_z: 10 repartition_type: b # The re-decomposition strategy ("n", "b", "v", "e" or "x"). See documentation for details. + +# External potential parameters +PointMass: + position_x: 50. # location of external point mass in internal units + position_y: 50. + position_z: 50. + mass: 1e10 # mass of external point mass in internal units + diff --git a/examples/ExternalGravity/makeIC.py b/examples/ExternalGravity/makeIC.py index 1bb4c69b75..e82d970eba 100644 --- a/examples/ExternalGravity/makeIC.py +++ b/examples/ExternalGravity/makeIC.py @@ -38,6 +38,10 @@ const_unit_length_in_cgs = (1000*PARSEC_IN_CGS) const_unit_mass_in_cgs = (SOLAR_MASS_IN_CGS) const_unit_velocity_in_cgs = (1e5) +print "UnitMass_in_cgs: ", const_unit_mass_in_cgs +print "UnitLength_in_cgs: ", const_unit_length_in_cgs +print "UnitVelocity_in_cgs: ", const_unit_velocity_in_cgs + # derived units const_unit_time_in_cgs = (const_unit_length_in_cgs / const_unit_velocity_in_cgs) const_G = ((NEWTON_GRAVITY_CGS*const_unit_mass_in_cgs*const_unit_time_in_cgs*const_unit_time_in_cgs/(const_unit_length_in_cgs*const_unit_length_in_cgs*const_unit_length_in_cgs))) diff --git a/examples/main.c b/examples/main.c index 3e4101c2d1..4631a09aa1 100644 --- a/examples/main.c +++ b/examples/main.c @@ -264,7 +264,7 @@ int main(int argc, char *argv[]) { struct external_potential potential; units_init(&us, params); initPhysicalConstants(&us, &prog_const); - initPotentialProperties(&us, &potential); + initPotentialProperties(params, &us, &potential); if (myrank == 0) { message("Unit system: U_M = %e g.", us.UnitMass_in_cgs); message("Unit system: U_L = %e cm.", us.UnitLength_in_cgs); diff --git a/src/potentials.c b/src/potentials.c index 856bdac3dc..772289e7b5 100644 --- a/src/potentials.c +++ b/src/potentials.c @@ -31,17 +31,23 @@ * @param us The current internal system of units * @param potential The external potential properties to initialize */ -void initPotentialProperties(struct UnitSystem* us, +void initPotentialProperties(const struct swift_params * parameter_file, + struct UnitSystem* us, struct external_potential* potential) { message(" %e\t %e", PARSEC_IN_CGS, units_conversion_factor(us, UNIT_CONV_LENGTH)); + + potential->point_mass.x = parser_get_param_double(parameter_file, "PointMass:position_x"); + potential->point_mass.y = parser_get_param_double(parameter_file, "PointMass:position_y"); + potential->point_mass.z = parser_get_param_double(parameter_file, "PointMass:position_z"); + potential->point_mass.mass = parser_get_param_double(parameter_file, "PointMass:mass"); - potential->point_mass.x = - 50000 * PARSEC_IN_CGS / units_conversion_factor(us, UNIT_CONV_LENGTH); - potential->point_mass.y = - 50000 * PARSEC_IN_CGS / units_conversion_factor(us, UNIT_CONV_LENGTH); - potential->point_mass.z = - 50000 * PARSEC_IN_CGS / units_conversion_factor(us, UNIT_CONV_LENGTH); - potential->point_mass.mass = - 1e10 * SOLAR_MASS_IN_CGS / units_conversion_factor(us, UNIT_CONV_MASS); + /* potential->point_mass.x = */ + /* 50000 * PARSEC_IN_CGS / units_conversion_factor(us, UNIT_CONV_LENGTH); */ + /* potential->point_mass.y = */ + /* 50000 * PARSEC_IN_CGS / units_conversion_factor(us, UNIT_CONV_LENGTH); */ + /* potential->point_mass.z = */ + /* 50000 * PARSEC_IN_CGS / units_conversion_factor(us, UNIT_CONV_LENGTH); */ + /* potential->point_mass.mass = */ + /* 1e10 * SOLAR_MASS_IN_CGS / units_conversion_factor(us, UNIT_CONV_MASS); */ } diff --git a/src/potentials.h b/src/potentials.h index 2c75669539..318daeb8df 100644 --- a/src/potentials.h +++ b/src/potentials.h @@ -115,7 +115,8 @@ __attribute__((always_inline)) INLINE static void external_gravity_pointmass(con * @param us The current internal system of units * @param potential The external potential properties to initialize */ -void initPotentialProperties(struct UnitSystem* us, +void initPotentialProperties(const struct swift_params * paramter_file, + struct UnitSystem* us, struct external_potential* potential); #endif /* SWIFT_POTENTIALS_H */ diff --git a/src/runner.c b/src/runner.c index 8ac4bc7538..af1a489b07 100644 --- a/src/runner.c +++ b/src/runner.c @@ -176,7 +176,8 @@ void runner_dograv_external(struct runner *r, struct cell *c) { // g->x[1], vx, vy); message("%f\t %f %f %f %f %f %f %f %f %f %f %f %f %f\n", r->e->time, g->tx, g->tv, dt, v2, fg, fga, dr, E, L[2], g->x[0], g->x[1], vx, vy); - // message(" G=%e M=%e\n", const_G, External_Potential_Mass); + message(" G=%e M=%e\n", r->e->physical_constants->newton_gravity, r->e->potential->point_mass.mass); + exit(-1); } } } -- GitLab