From a14e5f37074f9155a53b030ddf9506a04c617428 Mon Sep 17 00:00:00 2001 From: John Regan <john.a.regan@durham.ac.uk> Date: Fri, 26 Feb 2016 09:22:53 +0000 Subject: [PATCH] SWIFT now runs in a very basic fashion with gparts read in, next step is to turn on external gravity --- examples/main.c | 28 +++++++++++++------- src/cell.c | 11 ++++---- src/const.h | 6 +++-- src/debug.c | 2 ++ src/engine.c | 18 ++++++++----- src/gravity/ExternalPotential/gravity_part.h | 4 +-- src/hydro.h | 3 +++ src/hydro_io.h | 2 ++ src/part.h | 4 ++- src/single_io.c | 2 +- src/space.c | 2 ++ 11 files changed, 55 insertions(+), 27 deletions(-) diff --git a/examples/main.c b/examples/main.c index 07bf70e2e6..828448b8dd 100644 --- a/examples/main.c +++ b/examples/main.c @@ -56,6 +56,12 @@ #define ENGINE_POLICY engine_policy_none #endif +#if defined(MINIMAL_SPH) || defined(GADGET2_SPH) || defined(DEFAULT_SPH) +#define ENGINE_HYDRO engine_policy_hydro +#else +#define ENGINE_HYDRO 0 +#endif + /** * @brief Main routine that loads a few particles and generates some output. * @@ -63,7 +69,7 @@ int main(int argc, char *argv[]) { - int c, icount, j, k, Ngas, Ndm, periodic = 1; + int c, icount, j, k, Ngas = 0, Ndm = 0, periodic = 1; long long N_total = -1; int nr_threads = 1, nr_queues = -1; int dump_tasks = 0; @@ -265,10 +271,10 @@ int main(int argc, char *argv[]) { tic = getticks(); #if defined(WITH_MPI) #if defined(HAVE_PARALLEL_HDF5) - read_ic_parallel(ICfileName, dim, &parts, &gparts, &Ngas, &Ndm, &periodic, myrank, nr_nodes, + read_ic_parallel(ICfileName, dim, &gparts, &Ndm, &periodic, myrank, nr_nodes, MPI_COMM_WORLD, MPI_INFO_NULL); #else - read_ic_serial(ICfileName, dim, &parts, &gparts, &Ngas, &Ndm, &periodic, myrank, nr_nodes, + read_ic_serial(ICfileName, dim, &gparts, &Ndm, &periodic, myrank, nr_nodes, MPI_COMM_WORLD, MPI_INFO_NULL); #endif #else @@ -282,7 +288,7 @@ int main(int argc, char *argv[]) { #if defined(WITH_MPI) long long tmp; - long long N_long = Ngas; + long long N_long = Ngas + Ndm; MPI_Reduce(&N_long, &tmp, 1, MPI_LONG_LONG, MPI_SUM, 0, MPI_COMM_WORLD); long long N_long = Ndm; MPI_Reduce(&N_long, &N_total, 1, MPI_LONG_LONG, MPI_SUM, 0, MPI_COMM_WORLD); @@ -292,9 +298,12 @@ int main(int argc, char *argv[]) { #endif if (myrank == 0) message("Read %lld particles from the ICs", N_total); + j = 0; /* Apply h scaling */ - if (scaling != 1.0) - for (k = 0; k < Ngas; k++) parts[k].h *= scaling; + if (scaling != 1.0) { + for (k = 0; k < Ngas; k++) + parts[k].h *= scaling; + } /* Apply shift */ if (shift[0] != 0 || shift[1] != 0 || shift[2] != 0) { @@ -331,6 +340,7 @@ int main(int argc, char *argv[]) { message("%i gas parts in %i cells.", s.nr_parts, s.tot_cells); message("%i dm parts in %i cells.", s.nr_gparts, s.tot_cells); message("maximum depth is %d.", s.maxdepth); + message("gparts[10].id = %ld.", gparts[10].id); // message( "cutoffs in [ %g %g ]." , s.h_min , s.h_max ); fflush(stdout); } @@ -352,7 +362,7 @@ int main(int argc, char *argv[]) { tic = getticks(); if (myrank == 0) message("nr_nodes is %i.", nr_nodes); engine_init(&e, &s, dt_max, nr_threads, nr_queues, nr_nodes, myrank, - ENGINE_POLICY | engine_policy_steal | engine_policy_hydro, 0, + ENGINE_POLICY | engine_policy_steal | ENGINE_HYDRO, 0, time_end, dt_min, dt_max); if (myrank == 0) message("engine_init took %.3f ms.", @@ -398,10 +408,10 @@ int main(int argc, char *argv[]) { N_total, time_end, e.nr_threads, e.sched.nr_queues, e.dt_min, e.dt_max); fflush(stdout); } - + /* Initialise the particles */ engine_init_particles(&e); - exit(-99); + //exit(-99); /* Legend */ if (myrank == 0) printf( diff --git a/src/cell.c b/src/cell.c index 06312f448a..2a631ab57b 100644 --- a/src/cell.c +++ b/src/cell.c @@ -447,11 +447,11 @@ void cell_split(struct cell *c) { c->progeny[k]->parts = &c->parts[left[k]]; c->progeny[k]->xparts = &c->xparts[left[k]]; } - +#ifdef LINK /* Re-link the gparts. THIS IS BROKEN BUT NEEDS MENDING J & T */ - /* for (k = 0; k < count; k++) */ - /* if (parts[k].gpart != NULL) parts[k].gpart->part = &parts[k]; */ - + for (k = 0; k < count; k++) + if (parts[k].gpart != NULL) parts[k].gpart->part = &parts[k]; +#endif /* Verify that _all_ the parts have been assigned to a cell. */ /* for ( k = 1 ; k < 8 ; k++ ) if ( &c->progeny[k-1]->parts[ c->progeny[k-1]->count ] != @@ -541,10 +541,11 @@ void cell_split(struct cell *c) { c->progeny[k]->gcount = right[k] - left[k] + 1; c->progeny[k]->gparts = &c->gparts[left[k]]; } - +#ifdef LINK /* Re-link the parts. */ for (k = 0; k < gcount; k++) if (gparts[k].id > 0) gparts[k].part->gpart = &gparts[k]; +#endif } /** diff --git a/src/const.h b/src/const.h index 239ec18a5b..fbd46ac488 100644 --- a/src/const.h +++ b/src/const.h @@ -67,14 +67,16 @@ /* SPH variant to use */ //#define MINIMAL_SPH -#define GADGET2_SPH +//#define GADGET2_SPH //#define DEFAULT_SPH - +#define NO_SPH /* Gravity properties */ #define GRAVITY /* valid choices DEFAULT_GRAVITY || EXTERNAL_POTENTIAL */ #define EXTERNAL_POTENTIAL +//#define DEFAULT_GRAVITY + /* System of units */ #define const_unit_length_in_cgs 1 /* 3.08567810e16 /\* 1Mpc *\/ */ diff --git a/src/debug.c b/src/debug.c index 2be981175e..5ebb08fe49 100644 --- a/src/debug.c +++ b/src/debug.c @@ -34,6 +34,8 @@ #include "./hydro/Gadget2/hydro_debug.h" #elif defined(DEFAULT_SPH) #include "./hydro/Default/hydro_debug.h" +#elif defined(NO_SPH) +#include "./hydro/Gadget2/hydro_debug.h" #else #error "Invalid choice of SPH variant" #endif diff --git a/src/engine.c b/src/engine.c index 413cfb4a2e..ac36b3b13a 100644 --- a/src/engine.c +++ b/src/engine.c @@ -1100,6 +1100,7 @@ void engine_maketasks(struct engine *e) { } } +#ifdef DEFAULT_GRAVITY /* Add the gravity mm tasks. */ for (i = 0; i < nr_cells; i++) if (cells[i].gcount > 0) { @@ -1110,7 +1111,9 @@ void engine_maketasks(struct engine *e) { scheduler_addtask(sched, task_type_grav_mm, task_subtype_none, -1, 0, &cells[i], &cells[j], 0); } - +#endif + scheduler_print_tasks(sched, "sched.txt"); + return; /* Split the tasks. */ scheduler_splittasks(sched); @@ -1122,7 +1125,7 @@ void engine_maketasks(struct engine *e) { if ((e->links = malloc(sizeof(struct link) * e->size_links)) == NULL) error("Failed to allocate cell-task links."); e->nr_links = 0; - +#ifdef GRAVITY /* Add the gravity up/down tasks at the top-level cells and push them down. */ for (k = 0; k < nr_cells; k++) if (cells[k].nodeID == nodeID && cells[k].gcount > 0) { @@ -1138,7 +1141,7 @@ void engine_maketasks(struct engine *e) { /* Push tasks down the cell hierarchy. */ engine_addtasks_grav(e, &cells[k], up, down); } - +#endif /* Count the number of tasks associated with each cell and store the density tasks in each cell, and make each sort depend on the sorts of its progeny. */ @@ -1184,7 +1187,7 @@ void engine_maketasks(struct engine *e) { } } } - +#ifdef DEFAULT_GRAVITY /* Link gravity multipole tasks to the up/down tasks. */ if (t->type == task_type_grav_mm || (t->type == task_type_sub && t->subtype == task_subtype_grav)) { @@ -1196,8 +1199,8 @@ void engine_maketasks(struct engine *e) { scheduler_addunlock(sched, t, t->cj->grav_down); } } +#endif } - /* Append a ghost task to each cell, and add kick tasks to the super cells. */ for (k = 0; k < nr_cells; k++) engine_mkghosts(e, &cells[k], NULL); @@ -1505,6 +1508,7 @@ void engine_rebuild(struct engine *e) { /* Re-build the tasks. */ // tic = getticks(); engine_maketasks(e); + // message( "engine_maketasks took %.3f ms." , (double)(getticks() - // tic)/CPU_TPS*1000 ); @@ -1724,7 +1728,7 @@ void engine_init_particles(struct engine *e) { /* Make sure all particles are ready to go */ /* i.e. clean-up any stupid state in the ICs */ space_map_cells_pre(s, 1, cell_init_parts, NULL); - + engine_marktasks(e); // printParticle(e->s->parts, 1000, e->s->nr_parts); @@ -1775,7 +1779,7 @@ void engine_init_particles(struct engine *e) { TIMER_TIC; engine_launch(e, e->nr_threads, mask, submask); TIMER_TOC(timer_runners); - + // message("\n0th ENTROPY CONVERSION\n") /* Apply some conversions (e.g. internal energy -> entropy) */ diff --git a/src/gravity/ExternalPotential/gravity_part.h b/src/gravity/ExternalPotential/gravity_part.h index 0bdbc0b09f..5d966cade2 100644 --- a/src/gravity/ExternalPotential/gravity_part.h +++ b/src/gravity/ExternalPotential/gravity_part.h @@ -22,14 +22,14 @@ /* Some standard headers. */ #include <stdlib.h> - +#ifdef DONOTUSEYET /* properties of external potential */ static struct ExternalPointMass { const float Mass; const float Position[3]; } PointMass = {.Mass = 1, .Position={0.,0.,0.}}; - +#endif /* Gravity particle. */ struct gpart { diff --git a/src/hydro.h b/src/hydro.h index 4b131ea7bb..9986f61e93 100644 --- a/src/hydro.h +++ b/src/hydro.h @@ -31,6 +31,9 @@ #elif defined(DEFAULT_SPH) #include "./hydro/Default/hydro_iact.h" #include "./hydro/Default/hydro.h" +#elif defined(NO_SPH) +#include "./hydro/Gadget2/hydro_iact.h" +#include "./hydro/Gadget2/hydro.h" #else #error "Invalid choice of SPH variant" #endif diff --git a/src/hydro_io.h b/src/hydro_io.h index 30d663f647..3ca7b0b06c 100644 --- a/src/hydro_io.h +++ b/src/hydro_io.h @@ -28,6 +28,8 @@ #include "./hydro/Gadget2/hydro_io.h" #elif defined(DEFAULT_SPH) #include "./hydro/Default/hydro_io.h" +#elif defined(NO_SPH) +#include "./hydro/Gadget2/hydro_io.h" #else #error "Invalid choice of SPH variant" #endif diff --git a/src/part.h b/src/part.h index 33ee05fcb8..16fe48825a 100644 --- a/src/part.h +++ b/src/part.h @@ -44,6 +44,8 @@ #include "./hydro/Gadget2/hydro_part.h" #elif defined(DEFAULT_SPH) #include "./hydro/Default/hydro_part.h" +#elif defined(NO_SPH) +#include "./hydro/Gadget2/hydro_part.h" #else #error "Invalid choice of SPH variant" #endif @@ -53,7 +55,7 @@ #include "./gravity/Default/gravity_part.h" #elif defined(EXTERNAL_POTENTIAL) #include "./gravity/ExternalPotential/gravity_part.h" -#elif +#else #error "Invalid choice of gravity variant" #endif #endif diff --git a/src/single_io.c b/src/single_io.c index 2a03554a4e..b2a1481977 100644 --- a/src/single_io.c +++ b/src/single_io.c @@ -298,7 +298,7 @@ void writeArrayBackEnd(hid_t grp, char* fileName, FILE* xmfFile, char* name, * Calls #error() if an error occurs. * */ -void read_ic_single(char* fileName, double dim[3], struct part** parts, struct gpart** gparts, +void read_ic_single(char* fileName, double dim[3], struct part** parts, struct gpart **gparts, int *Ngas, int *Ndm, int* periodic) { hid_t h_file = 0, h_grp = 0; double boxSize[3] = {0.0, -1.0, -1.0}; diff --git a/src/space.c b/src/space.c index 74d480790f..6814b8d9f2 100644 --- a/src/space.c +++ b/src/space.c @@ -427,6 +427,8 @@ void space_rebuild(struct space *s, double cell_max, int verbose) { cell_getid(cdim, gp->x[0] * ih[0], gp->x[1] * ih[1], gp->x[2] * ih[2]); cells[ind[k]].gcount++; } + + // message( "getting particle indices took %.3f ms." , (double)(getticks() - // tic) / CPU_TPS * 1000 ); -- GitLab