commit/enzo-dev: 7 new changesets

1 view
Skip to first unread message

commits...@bitbucket.org

unread,
Oct 24, 2018, 12:36:31 PM10/24/18
to enzo...@googlegroups.com
7 new commits in enzo-dev:

https://bitbucket.org/enzo/enzo-dev/commits/e63ce9526ef4/
Changeset: e63ce9526ef4
Branch: week-of-code
User: ibutsky
Date: 2018-06-02 03:25:32+00:00
Summary: Fixing SupernovaSourceTerms memory leak
Affected #: 11 files

diff -r f79eb3f26b2a -r e63ce9526ef4 src/enzo/EnzoTiming.h
--- a/src/enzo/EnzoTiming.h
+++ b/src/enzo/EnzoTiming.h
@@ -29,8 +29,15 @@
#include <cstring>
#include <map>

-#define min(A,B) ((A) < (B) ? (A) : (B))
-#define max(A,B) ((A) > (B) ? (A) : (B))
+template <typename T>
+bool min(const T& A, const T& B) {
+ return A < B ? A : B;
+}
+
+template <typename T>
+bool max(const T& A, const T& B) {
+ return A > B ? A : B;
+}

double ReturnWallTime(void);
void Reduce_Times(double time, double *time_array);

diff -r f79eb3f26b2a -r e63ce9526ef4 src/enzo/FreeRealMem.C
--- /dev/null
+++ b/src/enzo/FreeRealMem.C
@@ -0,0 +1,199 @@
+#ifdef TASKMAP
+
+#ifdef USE_LL
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include "llapi.h"
+
+#include "macros_and_parameters.h"
+
+
+Eint64 FreeRealMem( char *node )
+{
+
+ LL_element *queryObject;
+ LL_element *job, *step;
+
+ Eint32 rc, obj_count, err_code, ok;
+
+ Eint64 free;
+ Eint64 freemem;
+ Eint64 def_mem;
+
+ def_mem = (Eint64)(12.0); /* minimum memory on DataStar */
+
+ Eint32 node_number;
+
+#ifdef SEABORG
+ sscanf(node, "s%5d", &node_number);
+ fprintf(stderr, "Seaborg Node %s number %d\n", node, node_number);
+
+ if ( 701 <= node_number && node_number <= 713 ) {
+ def_mem = (Eint64)(56.0);
+ } else {
+
+ if ( 3701 <= node_number && node_number <= 5213 ) {
+ def_mem = (Eint64)(28.0);
+ } else {
+ def_mem = (Eint64)(14.0);
+ }
+
+ }
+#endif
+
+#ifdef DATASTAR
+ sscanf(node, "ds%3d", &node_number);
+ fprintf(stderr, "DataStar Node %s number %d\n", node, node_number);
+
+ if ( 4 <= node_number && node_number <= 11 ) {
+ def_mem = (Eint64)(120.0);
+ } else {
+
+ if ( 300 <= node_number && node_number <= 395 ) {
+ def_mem = (Eint64)(27.0);
+ } else {
+ def_mem = (Eint64)(12.0);
+ }
+
+ }
+#endif
+
+ def_mem = def_mem * 1024.0;
+ fprintf(stderr,"Default node memory on node %s [%d] is %"ISYM" MBytes\n", node, node_number, def_mem);
+
+ ok = 0;
+
+ /* Initialize the query */
+
+ queryObject = ll_query(MACHINES);
+
+ if (!queryObject) {
+ fprintf(stderr, "Query MACHINES: ll_query() returns NULL.\n");
+ freemem = def_mem;
+ return(freemem);
+ }
+
+ char **nodelist;
+ nodelist = (char **) malloc(2*sizeof(char *));
+ char nodename[6];
+ strcpy(nodename, node);
+
+ nodelist[0] = nodename;
+ nodelist[1] = NULL;
+
+ rc = ll_set_request(queryObject, QUERY_HOST, nodelist, ALL_DATA);
+
+ if (rc) {
+ fprintf(stderr, "Query MACHINES: ll_set_request() return code is non-zero.\n");
+ freemem = def_mem;
+ return(freemem);
+ }
+
+ job = ll_get_objs(queryObject, LL_CM, NULL, &obj_count, &err_code);
+
+ /* Process the job objects */
+
+ rc = ll_get_data(job, LL_MachineFreeRealMemory64, &free);
+
+ if (rc) {
+ fprintf(stderr, "Get data: ll_get_data() return code is non-zero: %d\n", rc);
+ freemem = def_mem;
+ return(freemem);
+ }
+
+/*
+ fprintf(stderr, "Free: %lld MBytes\n", free);
+*/
+
+ ll_free_objs(queryObject);
+ ll_deallocate(queryObject);
+
+ freemem = (Eint64)(free);
+
+ return(freemem);
+}
+
+#else
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "macros_and_parameters.h"
+
+Eint64 FreeRealMem( char *node )
+{
+
+ Eint64 freemem;
+ Eint64 def_mem;
+
+ def_mem = (Eint64)(12.5); /* minimum memory of DataStar */
+
+ Eint32 node_number;
+
+
+#ifdef SEABORG
+ sscanf(node, "s%5d", &node_number);
+ fprintf(stderr, "Seaborg Node %s number %d\n", node, node_number);
+
+ if ( 701 <= node_number && node_number <= 713 ) {
+ def_mem = (Eint64)(56.0);
+ } else {
+
+ if ( 3701 <= node_number && node_number <= 5213 ) {
+ def_mem = (Eint64)(28.0);
+ } else {
+ def_mem = (Eint64)(14.0);
+ }
+
+ }
+#endif
+
+#ifdef DATASTAR
+ sscanf(node, "ds%3d", &node_number);
+ fprintf(stderr, "DataStarNode %s number %d\n", node, node_number);
+
+ if ( 4 <= node_number && node_number <= 11 ) {
+ def_mem = (Eint64)(120.0);
+ } else {
+
+ if ( 300 <= node_number && node_number <= 395 ) {
+ def_mem = (Eint64)(27.0);
+ } else {
+ def_mem = (Eint64)(12.0);
+ }
+
+ }
+#endif
+
+ def_mem = def_mem * 1024.0;
+ fprintf(stderr,"Default node memory on node %s [%d] is %"ISYM" MBytes\n", node, node_number, def_mem);
+
+ freemem = def_mem;
+
+ return(freemem);
+}
+
+#endif
+
+#else
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "macros_and_parameters.h"
+
+Eint64 FreeRealMem( char *node )
+{
+
+ Eint64 freemem;
+
+ fprintf(stderr, "Error in FreeRealMem - the TASKMAP macro is not defined! Default to 12.0 GBytes.\n");
+
+ freemem = (Eint64)(12.0*1024.0); /* minimum memory on DataStar */
+
+ return(freemem);
+}
+
+#endif

diff -r f79eb3f26b2a -r e63ce9526ef4 src/enzo/Grid.h
--- a/src/enzo/Grid.h
+++ b/src/enzo/Grid.h
@@ -11,6 +11,7 @@
************************************************************************/
#ifndef GRID_DEFINED__
#define GRID_DEFINED__
+#include <vector>
#include "ProtoSubgrid.h"
#include "ListOfParticles.h"
#include "region.h"
@@ -20,7 +21,6 @@
#include "Star.h"
#include "FOF_allvars.h"
#include "MemoryPool.h"
-#include "list.h"
#include "hydro_rk/SuperNova.h"
#ifdef ECUDA
#include "hydro_rk/CudaMHD.h"
@@ -3011,9 +3011,8 @@
int MHDCT_ConvertEnergyToConservedS();
int MHDCT_ConvertEnergyToSpecificS();

- //List of SuperNova objects that each grid needs to keep track of
-
- List<SuperNova> SuperNovaList;
+ //List of SuperNova objects that each grid needs to keep track of
+ std::vector<SuperNova> SuperNovaList;


};

diff -r f79eb3f26b2a -r e63ce9526ef4 src/enzo/Grid_AddFeedbackSphere.C
--- a/src/enzo/Grid_AddFeedbackSphere.C
+++ b/src/enzo/Grid_AddFeedbackSphere.C
@@ -44,6 +44,7 @@
int FindField(int field, int farray[], int numfields);

void mt_init(unsigned_int seed);
+unsigned_long_int mt_random();

int grid::AddFeedbackSphere(Star *cstar, int level, float radius, float DensityUnits,
float LengthUnits, float VelocityUnits,
@@ -993,15 +994,16 @@


// Create a randomly-oriented SuperNova object and add it to the SuperNova Grid list
- if (cstar->FeedbackFlag == SUPERNOVA_SEEDFIELD) {
+ if (cstar->ReturnFeedbackFlag() == SUPERNOVA_SEEDFIELD) {
if(UseSupernovaSeedFieldSourceTerms){

- SuperNova *P = new SuperNova();
- int mt_seed = 100;
- mt_init(mt_seed);
- float random_u = (float)mt_seed/100.0; // random variable from 0 to 1
- float random_v = (float)mt_seed/100.0;
- float random_phi = 2*M_PI*random_u; // 0 to 2pi
+ SuperNova P = SuperNova();
+
+ mt_init((unsigned_int) cstar->ReturnID());
+
+ float random_u = (float)(mt_random()%32768)/32768.0; // random variable from 0 to 1
+ float random_v = (float)(mt_random()%32768)/32768.0;
+ float random_phi = 2*M_PI*random_u; // 0 to 2pi
float random_theta = acos(2*random_v-1); // 0 to pi
// Setting up randomly oriented magnetic feedback of supernova
float phi_x = sin(random_theta)*cos(random_phi);
@@ -1023,11 +1025,10 @@
// Creates a supernova with magnetic feedback set by user-defined parameters and
// adds it to supernova list
if((Time > sn_birthtime) && (Time < sn_birthtime + SupernovaSeedFieldDuration)){
- P->setValues(phi_x, phi_y, phi_z, cstar->pos[0], cstar->pos[1], cstar->pos[2],
+ P.setValues(phi_x, phi_y, phi_z, cstar->pos[0], cstar->pos[1], cstar->pos[2],
sn_radius, sn_birthtime, sn_duration, sn_energy);

- this->SuperNovaList.append(P);
- printf("Added supernova to list \n");
+ this->SuperNovaList.push_back(P);
}
}
}

diff -r f79eb3f26b2a -r e63ce9526ef4 src/enzo/Grid_FindAllStarParticles.C
--- a/src/enzo/Grid_FindAllStarParticles.C
+++ b/src/enzo/Grid_FindAllStarParticles.C
@@ -58,7 +58,7 @@
(StarParticleRadiativeFeedback == TRUE &&
ParticleType[i] == PARTICLE_TYPE_STAR)) {

- if (ParticleType[i] == PARTICLE_TYPE_STAR)
+ if (ParticleType[i] == PARTICLE_TYPE_STAR && UseSupernovaSeedFieldSourceTerms == 0)
LifetimeFactor = 12.0;
else
LifetimeFactor = 1.0;

diff -r f79eb3f26b2a -r e63ce9526ef4 src/enzo/Grid_FindNewStarParticles.C
--- a/src/enzo/Grid_FindNewStarParticles.C
+++ b/src/enzo/Grid_FindNewStarParticles.C
@@ -39,7 +39,7 @@

for (i = 0; i < NumberOfParticles; i++)
if (ParticleType[i] == -PARTICLE_TYPE_SINGLE_STAR ||
- (ParticleType[i] == -PARTICLE_TYPE_STAR && UseSupernovaSeedFieldSourceTerms &&
+ (ParticleType[i] == PARTICLE_TYPE_STAR && UseSupernovaSeedFieldSourceTerms &&
(this->Time >= ParticleAttribute[0][i] &&
this->Time <= ParticleAttribute[0][i]+ParticleAttribute[1][i])) ||
ParticleType[i] == -PARTICLE_TYPE_BLACK_HOLE ||

diff -r f79eb3f26b2a -r e63ce9526ef4 src/enzo/StarParticleAddFeedback.C
--- a/src/enzo/StarParticleAddFeedback.C
+++ b/src/enzo/StarParticleAddFeedback.C
@@ -163,7 +163,8 @@
LCAPERF_START("star_FindFeedbackSphere2");
if ((cstar->ReturnFeedbackFlag() == MBH_THERMAL ||
cstar->ReturnFeedbackFlag() == MBH_JETS ||
- cstar->ReturnFeedbackFlag() == CONT_SUPERNOVA) &&
+ cstar->ReturnFeedbackFlag() == CONT_SUPERNOVA ||
+ cstar->ReturnFeedbackFlag() == SUPERNOVA_SEEDFIELD) &&
LevelArray[level+1] != NULL)
cstar->FindFeedbackSphere
(LevelArray, level+1, influenceRadius, EjectaDensity, EjectaThermalEnergy,

diff -r f79eb3f26b2a -r e63ce9526ef4 src/enzo/Star_CalculateFeedbackParameters.C
--- a/src/enzo/Star_CalculateFeedbackParameters.C
+++ b/src/enzo/Star_CalculateFeedbackParameters.C
@@ -247,6 +247,10 @@

break;

+ case SUPERNOVA_SEEDFIELD:
+ Radius = 1.1*SupernovaSeedFieldRadius * pc / LengthUnits; // Real injection radius SupernovaSeedFieldRadius
+ break;
+
} // ENDSWITCH FeedbackFlag

// fprintf(stdout, "star::CFP: EjectaThermalEnergy = %g, EjectaDensity = %g,

diff -r f79eb3f26b2a -r e63ce9526ef4 src/enzo/hydro_rk/Grid_MHDSourceTerms.C
--- a/src/enzo/hydro_rk/Grid_MHDSourceTerms.C
+++ b/src/enzo/hydro_rk/Grid_MHDSourceTerms.C
@@ -19,7 +19,6 @@
#include "macros_and_parameters.h"
#include "typedefs.h"
#include "global_data.h"
-#include "list.h"
#include "Fluxes.h"
#include "GridList.h"
#include "ExternalBoundary.h"
@@ -357,12 +356,11 @@
}
}

-if((UseSupernovaSeedFieldSourceTerms == 1)) {
+if(UseSupernovaSeedFieldSourceTerms) {

int n = 0, igrid;
int iden=FindField(Density, FieldType, NumberOfBaryonFields);
snsf_source_terms S;
- List<SuperNova>::Iterator *P = this->SuperNovaList.begin();
FLOAT cell_center[3];
FLOAT dx, dy, dz, dist_to_sn;
int temp =1;
@@ -377,23 +375,24 @@
cell_center[1] = CellLeftEdge[1][j] + 0.5*CellWidth[1][j];
cell_center[2] = CellLeftEdge[2][k] + 0.5*CellWidth[2][k];

- while(P != this->SuperNovaList.end()){
- dx = P->get()->getPosition()[0] - cell_center[0];
- dy = P->get()->getPosition()[1] - cell_center[1];
- dz = P->get()->getPosition()[2] - cell_center[2];
+ for (std::vector<SuperNova>::iterator P = this->SuperNovaList.begin();
+ P != this->SuperNovaList.end(); P++){
+ dx = P->getPosition()[0] - cell_center[0];
+ dy = P->getPosition()[1] - cell_center[1];
+ dz = P->getPosition()[2] - cell_center[2];

dist_to_sn = sqrt(dx*dx + dy*dy + dz*dz);
if (dist_to_sn < 1.1*SupernovaSeedFieldRadius){
- S = P->get()->getSourceTerms(dx, dy, dz, Time);
+ S = P->getSourceTerms(dx, dy, dz, Time);
double rho = BaryonField[DensNum][igrid];
-
+
dU[iBx][n] += S.dbx*dtFixed;
dU[iBy][n] += S.dby*dtFixed;
dU[iBz][n] += S.dbz*dtFixed;
dU[iEtot][n] += S.dUtot*dtFixed;

}
- P = P->next();
+
}// End of SuperNovaList iteration
} // End of k for-loop
} // End of j for-loop

diff -r f79eb3f26b2a -r e63ce9526ef4 src/enzo/hydro_rk/LLF_Zero_MHD.C
--- a/src/enzo/hydro_rk/LLF_Zero_MHD.C
+++ b/src/enzo/hydro_rk/LLF_Zero_MHD.C
@@ -34,7 +34,8 @@

// compute priml and primr
int iprim;
- for (int field = 0; field < NEQ_MHD; field++) {
+ int idual = (DualEnergyFormalism) ? 1 : 0;
+ for (int field = 0; field < NEQ_MHD-idual; field++) {
for (int i = 0; i < ActiveSize+1; i++) {
iprim = i + NumberOfGhostZones - 1;
priml[field][i] = prim[field][iprim];
@@ -53,9 +54,9 @@
iprim = i+NumberOfGhostZones-1;
for (int field = 0; field < NSpecies; field++) {
if (FluxLine[iD][i] >= 0) {
- species[field][i] = prim[field+5][iprim ];
+ species[field][i] = prim[field+NEQ_MHD-idual][iprim ];
} else {
- species[field][i] = prim[field+5][iprim+1];
+ species[field][i] = prim[field+NEQ_MHD-idual][iprim+1];
}
}
sum = 0;
@@ -76,9 +77,9 @@
iprim = i+NumberOfGhostZones-1;
for (int field = 0; field < NColor; field++) {
if (FluxLine[iD][i] >= 0) {
- colors[field][i] = prim[field+5+NSpecies][iprim ];
+ colors[field][i] = prim[field+NEQ_MHD-idual+NSpecies][iprim ];
} else {
- colors[field][i] = prim[field+5+NSpecies][iprim+1];
+ colors[field][i] = prim[field+NEQ_MHD-idual+NSpecies][iprim+1];
}
}
for (int field = 0; field < NColor; field++) {

diff -r f79eb3f26b2a -r e63ce9526ef4 src/enzo/macros_and_parameters.h
--- a/src/enzo/macros_and_parameters.h
+++ b/src/enzo/macros_and_parameters.h
@@ -1,5 +1,12 @@
#ifndef __macros_and_parameters_h_
#define __macros_and_parameters_h_
+#include "string.h"
+#include <iostream>
+#include <iomanip>
+#include <vector>
+#include <algorithm>
+#include <map>
+#include <cassert>
/***********************************************************************
/
/ MACRO DEFINITIONS AND PARAMETERS


https://bitbucket.org/enzo/enzo-dev/commits/13051b7b6287/
Changeset: 13051b7b6287
Branch: week-of-code
User: ibutsky
Date: 2018-06-02 03:31:31+00:00
Summary: moving FreeRealMem.c to FreeRealMem.C
Affected #: 1 file

diff -r e63ce9526ef4 -r 13051b7b6287 src/enzo/FreeRealMem.c
--- a/src/enzo/FreeRealMem.c
+++ /dev/null
@@ -1,199 +0,0 @@
-#ifdef TASKMAP
-
-#ifdef USE_LL
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include "llapi.h"
-
-#include "macros_and_parameters.h"
-
-
-Eint64 FreeRealMem( char *node )
-{
-
- LL_element *queryObject;
- LL_element *job, *step;
-
- Eint32 rc, obj_count, err_code, ok;
-
- Eint64 free;
- Eint64 freemem;
- Eint64 def_mem;
-
- def_mem = (Eint64)(12.0); /* minimum memory on DataStar */
-
- Eint32 node_number;
-
-#ifdef SEABORG
- sscanf(node, "s%5d", &node_number);
- fprintf(stderr, "Seaborg Node %s number %d\n", node, node_number);
-
- if ( 701 <= node_number && node_number <= 713 ) {
- def_mem = (Eint64)(56.0);
- } else {
-
- if ( 3701 <= node_number && node_number <= 5213 ) {
- def_mem = (Eint64)(28.0);
- } else {
- def_mem = (Eint64)(14.0);
- }
-
- }
-#endif
-
-#ifdef DATASTAR
- sscanf(node, "ds%3d", &node_number);
- fprintf(stderr, "DataStar Node %s number %d\n", node, node_number);
-
- if ( 4 <= node_number && node_number <= 11 ) {
- def_mem = (Eint64)(120.0);
- } else {
-
- if ( 300 <= node_number && node_number <= 395 ) {
- def_mem = (Eint64)(27.0);
- } else {
- def_mem = (Eint64)(12.0);
- }
-
- }
-#endif
-
- def_mem = def_mem * 1024.0;
- fprintf(stderr,"Default node memory on node %s [%d] is %"ISYM" MBytes\n", node, node_number, def_mem);
-
- ok = 0;
-
- /* Initialize the query */
-
- queryObject = ll_query(MACHINES);
-
- if (!queryObject) {
- fprintf(stderr, "Query MACHINES: ll_query() returns NULL.\n");
- freemem = def_mem;
- return(freemem);
- }
-
- char **nodelist;
- nodelist = (char **) malloc(2*sizeof(char *));
- char nodename[6];
- strcpy(nodename, node);
-
- nodelist[0] = nodename;
- nodelist[1] = NULL;
-
- rc = ll_set_request(queryObject, QUERY_HOST, nodelist, ALL_DATA);
-
- if (rc) {
- fprintf(stderr, "Query MACHINES: ll_set_request() return code is non-zero.\n");
- freemem = def_mem;
- return(freemem);
- }
-
- job = ll_get_objs(queryObject, LL_CM, NULL, &obj_count, &err_code);
-
- /* Process the job objects */
-
- rc = ll_get_data(job, LL_MachineFreeRealMemory64, &free);
-
- if (rc) {
- fprintf(stderr, "Get data: ll_get_data() return code is non-zero: %d\n", rc);
- freemem = def_mem;
- return(freemem);
- }
-
-/*
- fprintf(stderr, "Free: %lld MBytes\n", free);
-*/
-
- ll_free_objs(queryObject);
- ll_deallocate(queryObject);
-
- freemem = (Eint64)(free);
-
- return(freemem);
-}
-
-#else
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "macros_and_parameters.h"
-
-Eint64 FreeRealMem( char *node )
-{
-
- Eint64 freemem;
- Eint64 def_mem;
-
- def_mem = (Eint64)(12.5); /* minimum memory of DataStar */
-
- Eint32 node_number;
-
-
-#ifdef SEABORG
- sscanf(node, "s%5d", &node_number);
- fprintf(stderr, "Seaborg Node %s number %d\n", node, node_number);
-
- if ( 701 <= node_number && node_number <= 713 ) {
- def_mem = (Eint64)(56.0);
- } else {
-
- if ( 3701 <= node_number && node_number <= 5213 ) {
- def_mem = (Eint64)(28.0);
- } else {
- def_mem = (Eint64)(14.0);
- }
-
- }
-#endif
-
-#ifdef DATASTAR
- sscanf(node, "ds%3d", &node_number);
- fprintf(stderr, "DataStarNode %s number %d\n", node, node_number);
-
- if ( 4 <= node_number && node_number <= 11 ) {
- def_mem = (Eint64)(120.0);
- } else {
-
- if ( 300 <= node_number && node_number <= 395 ) {
- def_mem = (Eint64)(27.0);
- } else {
- def_mem = (Eint64)(12.0);
- }
-
- }
-#endif
-
- def_mem = def_mem * 1024.0;
- fprintf(stderr,"Default node memory on node %s [%d] is %"ISYM" MBytes\n", node, node_number, def_mem);
-
- freemem = def_mem;
-
- return(freemem);
-}
-
-#endif
-
-#else
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "macros_and_parameters.h"
-
-Eint64 FreeRealMem( char *node )
-{
-
- Eint64 freemem;
-
- fprintf(stderr, "Error in FreeRealMem - the TASKMAP macro is not defined! Default to 12.0 GBytes.\n");
-
- freemem = (Eint64)(12.0*1024.0); /* minimum memory on DataStar */
-
- return(freemem);
-}
-
-#endif


https://bitbucket.org/enzo/enzo-dev/commits/a9da25a430d5/
Changeset: a9da25a430d5
Branch: week-of-code
User: ibutsky
Date: 2018-06-02 03:33:04+00:00
Summary: merging with upstream
Affected #: 44 files

diff -r 13051b7b6287 -r a9da25a430d5 doc/flowchart/CreateSubgridList.html
--- a/doc/flowchart/CreateSubgridList.html
+++ b/doc/flowchart/CreateSubgridList.html
@@ -1,4 +1,4 @@
<img src="CreateSubgridList.gif" usemap="#CreateSubgridList" Border = 0><map name="CreateSubgridList">
-<area shape=rect coords="126,262, 270,334" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_ReturnFluxDims.C">
+<area shape=rect coords="126,262, 270,334" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ReturnFluxDims.C"></map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/flowchart/DetermineDT.html
--- a/doc/flowchart/DetermineDT.html
+++ b/doc/flowchart/DetermineDT.html
@@ -1,5 +1,5 @@
<img src="DetermineDT.gif" usemap="#DetermineDT"><map name="DetermineDT">
-<area shape=rect coords="20,596, 200,632" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid.h#L207">
-<area shape=rect coords="20,38, 200,74" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_ComputeTimeStep.C">
+<area shape=rect coords="20,596, 200,632" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid.h#L207">
+<area shape=rect coords="20,38, 200,74" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ComputeTimeStep.C"></map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/flowchart/EvolveHierarchy.html
--- a/doc/flowchart/EvolveHierarchy.html
+++ b/doc/flowchart/EvolveHierarchy.html
@@ -1,18 +1,18 @@
<img src="EvolveHierarchy.gif" usemap="#EvolveHierarchy" Border = 0><map name="EvolveHierarchy"><area shape=poly coords="236,1694, 229,1680, 212,1668, 185,1660, 155,1658, 124,1660, 97,1668, 80,1680, 74,1694, 80,1707, 97,1719, 124,1727, 155,1730, 185,1727, 212,1719, 229,1707" href="main.html">
-<area shape=rect coords="65,1586, 245,1622" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/WriteAllData.C">
-<area shape=rect coords="281,1406, 461,1451" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/ReduceFragmentation.C">
-<area shape=rect coords="65,1334, 245,1370" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CheckForOutput.C">
-<area shape=rect coords="65,479, 245,515" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CheckForOutput.C">
-<area shape=rect coords="65,1271, 245,1307" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CheckForTimeAction.C">
+<area shape=rect coords="65,1586, 245,1622" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/WriteAllData.C">
+<area shape=rect coords="281,1406, 461,1451" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/ReduceFragmentation.C">
+<area shape=rect coords="65,1334, 245,1370" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CheckForOutput.C">
+<area shape=rect coords="65,479, 245,515" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CheckForOutput.C">
+<area shape=rect coords="65,1271, 245,1307" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CheckForTimeAction.C"><area shape=rect coords="65,1046, 245,1082" href="RebuildHierarchy.html"><area shape=rect coords="65,965, 245,1001" href="EvolveLevel.html">
-<area shape=rect coords="65,776, 245,812" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/OutputLevelInformation.C">
+<area shape=rect coords="65,776, 245,812" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/OutputLevelInformation.C"><area shape=rect coords="65,830, 245,911" href="DetermineDT.html"><area shape=rect coords="65,542, 245,578" href="RebuildHierarchy.html">
-<area shape=rect coords="74,326, 236,362" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_SetExternalBoundaryValues.C">
-<area shape=rect coords="74,380, 236,416" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CopyOverlappingZones.C">
+<area shape=rect coords="74,326, 236,362" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_SetExternalBoundaryValues.C">
+<area shape=rect coords="74,380, 236,416" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CopyOverlappingZones.C"><area shape=rect coords="74,101, 236,137" href="http://lca.ucsd.edu/projects/enzo/wiki/UserGuide/FlowChart#ReturnCPUTime">
-<area shape=poly coords="236,38, 229,24, 212,12, 185,4, 155,2, 124,4, 97,12, 80,24, 74,38, 80,51, 97,63, 124,71, 155,74, 185,71, 212,63, 229,51" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/EvolveHierarchy.C">
+<area shape=poly coords="236,38, 229,24, 212,12, 185,4, 155,2, 124,4, 97,12, 80,24, 74,38, 80,51, 97,63, 124,71, 155,74, 185,71, 212,63, 229,51" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveHierarchy.C"></map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/flowchart/EvolveLevel.html
--- a/doc/flowchart/EvolveLevel.html
+++ b/doc/flowchart/EvolveLevel.html
@@ -1,20 +1,20 @@
<img src="EvolveLevel.gif" usemap="#EvolveLevel" Border = 0><map name="EvolveLevel">
-<area shape=rect coords="65,1757, 218,1802" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_AddToBoundaryFluxes.C">
+<area shape=rect coords="65,1757, 218,1802" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_AddToBoundaryFluxes.C"><area shape=rect coords="65,1703, 218,1748" href="EvolveLevel_UpdateFromFinerGrids.html"><area shape=poly coords="292,2083, 286,2069, 269,2057, 242,2049, 211,2047, 180,2049, 153,2057, 136,2069, 130,2083, 136,2096, 153,2108, 180,2116, 211,2119, 242,2116, 269,2108, 286,2096" href="EvolveHierarchy.html"><area shape=rect coords="65,1919, 218,1955" href="RebuildHierarchy.html">
-<area shape=rect coords="47,1838, 236,1874" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/RadiationFieldUpdate.C">
-<area shape=rect coords="245,1577, 344,1613" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/EvolveLevel.C">
-<area shape=rect coords="39,1345, 246,1408" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/EvolveLevelRoutinesOptimized.C">
+<area shape=rect coords="47,1838, 236,1874" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/RadiationFieldUpdate.C">
+<area shape=rect coords="245,1577, 344,1613" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveLevel.C">
+<area shape=rect coords="39,1345, 246,1408" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveLevelRoutinesOptimized.C"><area shape=rect coords="80,1165, 224,1273" href="EvolveLevel_Sub1.html"><area shape=rect coords="101,1082, 191,1118" href="SolveHydroEquations.html">
-<area shape=rect coords="83,947, 218,1028" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_CopyBaryonFieldToOldBaryonField.C">
+<area shape=rect coords="83,947, 218,1028" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_CopyBaryonFieldToOldBaryonField.C"><area shape=rect coords="227,857, 335,929" href="EvolveLevel_Gravity.html">
-<area shape=rect coords="254,623, 353,668" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/EvolveLevelRoutinesOptimized.C">
+<area shape=rect coords="254,623, 353,668" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveLevelRoutinesOptimized.C"><area shape=rect coords="65,524, 218,578" href="CreateSubgridList.html"><area shape=rect coords="65,461, 218,497" href="DetermineDT.html">
-<area shape=rect coords="92,254, 209,317" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_ClearBoundaryFluxes.C">
-<area shape=rect coords="59,113, 248,176" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/EvolveLevelRoutinesOptimized.C">
-<area shape=rect coords="47,2, 263,74" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/EvolveLevel.C">
+<area shape=rect coords="92,254, 209,317" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ClearBoundaryFluxes.C">
+<area shape=rect coords="59,113, 248,176" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveLevelRoutinesOptimized.C">
+<area shape=rect coords="47,2, 263,74" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveLevel.C"></map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/flowchart/EvolveLevel_CorrectForRefinedFluxes.html
--- a/doc/flowchart/EvolveLevel_CorrectForRefinedFluxes.html
+++ b/doc/flowchart/EvolveLevel_CorrectForRefinedFluxes.html
@@ -2,7 +2,7 @@
Border = 0><map name="EvolveLevel_CorrectForRefinedFluxes"><area shape=poly coords="336,2347, 327,2332, 305,2318, 269,2310, 228,2307, 187,2310, 151,2318, 129,2332, 120,2347, 129,2362, 151,2376, 187,2384, 228,2388, 269,2384, 305,2376, 327,2362" href="EvolveLevel_UpdateFromFinerGrids.html">
-<area shape=rect coords="354,192, 471,228" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CosmologyComputeExpansionFactor.C">
-<area shape=rect coords="174,120, 300,156" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_IdentifyPhysicalQuantities.C">
-<area shape=poly coords="344,51, 335,32, 313,16, 279,5, 240,2, 201,5, 167,16, 145,32, 137,51, 145,70, 167,86, 201,97, 240,101, 279,97, 313,86, 335,70" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_CorrectForRefinedFluxes.C">
+<area shape=rect coords="354,192, 471,228" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CosmologyComputeExpansionFactor.C">
+<area shape=rect coords="174,120, 300,156" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_IdentifyPhysicalQuantities.C">
+<area shape=poly coords="344,51, 335,32, 313,16, 279,5, 240,2, 201,5, 167,16, 145,32, 137,51, 145,70, 167,86, 201,97, 240,101, 279,97, 313,86, 335,70" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_CorrectForRefinedFluxes.C"></map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/flowchart/EvolveLevel_GetProjectedBoundaryFluxes.html
--- a/doc/flowchart/EvolveLevel_GetProjectedBoundaryFluxes.html
+++ b/doc/flowchart/EvolveLevel_GetProjectedBoundaryFluxes.html
@@ -2,7 +2,7 @@
usemap="#EvolveLevel_GetProjectedBoundaryFluxes" Border=0><map name="EvolveLevel_GetProjectedBoundaryFluxes"><area shape=poly coords="258,1658, 250,1644, 229,1632, 196,1624, 159,1622, 121,1624, 88,1632, 68,1644, 60,1658, 68,1671, 88,1683, 121,1691, 159,1694, 196,1691, 229,1683, 250,1671" href="EvolveLevel_UpdateFromFinerGrids.html">
-<area shape=rect coords="258,1487, 384,1532" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CommunicationSendFluxes.C">
-<area shape=rect coords="258,1352, 384,1397" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CommunicationReceiveFluxes.C">
-<area shape=poly coords="276,38, 267,24, 244,12, 209,4, 168,2, 127,4, 91,12, 68,24, 60,38, 68,51, 91,63, 127,71, 168,74, 209,71, 244,63, 267,51" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_GetProjectedBoundaryFluxes.C">
+<area shape=rect coords="258,1487, 384,1532" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationSendFluxes.C">
+<area shape=rect coords="258,1352, 384,1397" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationReceiveFluxes.C">
+<area shape=poly coords="276,38, 267,24, 244,12, 209,4, 168,2, 127,4, 91,12, 68,24, 60,38, 68,51, 91,63, 127,71, 168,74, 209,71, 244,63, 267,51" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_GetProjectedBoundaryFluxes.C"></map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/flowchart/EvolveLevel_Gravity.html
--- a/doc/flowchart/EvolveLevel_Gravity.html
+++ b/doc/flowchart/EvolveLevel_Gravity.html
@@ -1,7 +1,7 @@
<img src="EvolveLevel_Gravity.gif" usemap="#EvolveLevel_Gravity" Border = 0><map name="EvolveLevel_Gravity">
-<area shape=rect coords="185,334, 266,388" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CheckEnergyConservation.C">
-<area shape=rect coords="185,181, 275,253" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo//Grid_ComputeAccelerationFieldExternal.C">
-<area shape=rect coords="167,109, 248,145" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo//Grid_ComputeAccelerations.C">
-<area shape=rect coords="167,55, 248,91" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo//Grid_SolveForPotential.C">
+<area shape=rect coords="185,334, 266,388" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CheckEnergyConservation.C">
+<area shape=rect coords="185,181, 275,253" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo//Grid_ComputeAccelerationFieldExternal.C">
+<area shape=rect coords="167,109, 248,145" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo//Grid_ComputeAccelerations.C">
+<area shape=rect coords="167,55, 248,91" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo//Grid_SolveForPotential.C"></map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/flowchart/EvolveLevel_ProjectSolutionToParentGrid.html
--- a/doc/flowchart/EvolveLevel_ProjectSolutionToParentGrid.html
+++ b/doc/flowchart/EvolveLevel_ProjectSolutionToParentGrid.html
@@ -2,7 +2,7 @@
usemap="#EvolveLevel_ProjectSolutionToParentGrid" Border = 0><map name="EvolveLevel_ProjectSolutionToParentGrid"><area shape=poly coords="293,1860, 285,1846, 264,1834, 232,1826, 194,1824, 156,1826, 124,1834, 103,1846, 95,1860, 103,1873, 124,1885, 156,1893, 194,1896, 232,1893, 264,1885, 285,1873" href="EvolveLevel_UpdateFromFinerGrids.html">
-<area shape=rect coords="266,1311, 392,1401" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_Irecv_CommunicationReceiveRegion.C">
-<area shape=rect coords="158,636, 284,672" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_IdentifyPhysicalQuantities.C">
-<area shape=poly coords="311,123, 303,109, 282,97, 250,89, 212,87, 174,89, 142,97, 121,109, 113,123, 121,136, 142,148, 174,156, 212,159, 250,156, 282,148, 303,136" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_ProjectSolutionToParentGrid.C">
+<area shape=rect coords="266,1311, 392,1401" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_Irecv_CommunicationReceiveRegion.C">
+<area shape=rect coords="158,636, 284,672" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_IdentifyPhysicalQuantities.C">
+<area shape=poly coords="311,123, 303,109, 282,97, 250,89, 212,87, 174,89, 142,97, 121,109, 113,123, 121,136, 142,148, 174,156, 212,159, 250,156, 282,148, 303,136" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ProjectSolutionToParentGrid.C"></map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/flowchart/EvolveLevel_Sub1.html
--- a/doc/flowchart/EvolveLevel_Sub1.html
+++ b/doc/flowchart/EvolveLevel_Sub1.html
@@ -1,9 +1,9 @@
<img src="EvolveLevel_Sub1.gif" usemap="#EvolveLevel_Sub1" Border = 0><map name="EvolveLevel_Sub1">
-<area shape=rect coords="47,217, 173,253" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/UpdateParticlePositions.C">
-<area shape=rect coords="47,271, 173,298" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_StarParticleHandler.C">
-<area shape=rect coords="209,496, 281,532" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_ComovingExpansionTerms.C">
-<area shape=rect coords="191,343, 299,397" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid.h#L799">
-<area shape=rect coords="209,145, 281,181" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_SolveRadiativeCooling.C">
-<area shape=rect coords="209,64, 281,100" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_SolveRateEquations.C">
+<area shape=rect coords="47,217, 173,253" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/UpdateParticlePositions.C">
+<area shape=rect coords="47,271, 173,298" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_StarParticleHandler.C">
+<area shape=rect coords="209,496, 281,532" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ComovingExpansionTerms.C">
+<area shape=rect coords="191,343, 299,397" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid.h#L799">
+<area shape=rect coords="209,145, 281,181" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_SolveRadiativeCooling.C">
+<area shape=rect coords="209,64, 281,100" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_SolveRateEquations.C"></map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/flowchart/EvolveLevel_UpdateFromFinerGrids.html
--- a/doc/flowchart/EvolveLevel_UpdateFromFinerGrids.html
+++ b/doc/flowchart/EvolveLevel_UpdateFromFinerGrids.html
@@ -5,5 +5,5 @@
<area shape=rect coords="101,413, 245,458" href="EvolveLevel_ProjectSolutionToParentGrid.html"><area shape=rect coords="101,278, 245,323" href="EvolveLevel_CorrectForRefinedFluxes.html"><area shape=rect coords="101,215, 245,260" href="EvolveLevel_GetProjectedBoundaryFluxes.html">
-<area shape=poly coords="272,42, 265,27, 245,13, 214,5, 178,2, 142,5, 111,13, 91,27, 83,42, 91,57, 111,71, 142,79, 178,83, 214,79, 245,71, 265,57" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/EvolveLevelRoutinesOptimized.C">
+<area shape=poly coords="272,42, 265,27, 245,13, 214,5, 178,2, 142,5, 111,13, 91,27, 83,42, 91,57, 111,71, 142,79, 178,83, 214,79, 245,71, 265,57" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveLevelRoutinesOptimized.C"></map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/flowchart/RebuildHierarchy.html
--- a/doc/flowchart/RebuildHierarchy.html
+++ b/doc/flowchart/RebuildHierarchy.html
@@ -1,21 +1,21 @@
<img src="RebuildHierarchy.gif" usemap="#RebuildHierarchy" Border = 0><map name="RebuildHierarchy">
-<area shape=rect coords="236,3440, 362,3476" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_InterpolateBoundaryFromParent.C">
-<area shape=rect coords="218,3233, 389,3278" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_MoveSubgridParticlesFast.C">
-<area shape=rect coords="236,3143, 362,3179" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_ZeroSolutionUnderSubgrid.C">
-<area shape=rect coords="218,3008, 389,3053" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_ZeroSolutionUnderSubgrid.C">
-<area shape=rect coords="245,2495, 371,2531" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_InterpolateFieldValues.C">
-<area shape=rect coords="245,2378, 371,2414" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_InterpolateFieldValues.C">
-<area shape=rect coords="245,2135, 371,2171" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_CopyZonesFromGridCountOnly.C">
-<area shape=rect coords="245,2756, 371,2792" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CommunicationLoadBalanceGrids.C">
-<area shape=rect coords="245,2648, 380,2684" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_ComputeTimeStep.C">
-<area shape=rect coords="227,1892, 398,1937" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/LevelHierarchy_AddLevel.C">
-<area shape=rect coords="227,1793, 398,1838" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CommunicationShareGrids.C">
-<area shape=rect coords="227,1640, 398,1685" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_MoveSubgridParticlesFast.C">
-<area shape=rect coords="245,1550, 371,1586" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_ZeroSolutionUnderSubgrid.C">
-<area shape=rect coords="227,1415, 398,1460" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_ZeroSolutionUnderSubgrid.C">
-<area shape=rect coords="227,1226, 398,1271" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/FindSubgrids.C">
-<area shape=rect coords="362,677, 533,722" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CommunicationTransferParticles.C">
-<area shape=rect coords="236,560, 407,605" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_MoveAllParticles.C">
-<area shape=rect coords="216,114, 414,204" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/RebuildHierarchy.C">
+<area shape=rect coords="236,3440, 362,3476" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_InterpolateBoundaryFromParent.C">
+<area shape=rect coords="218,3233, 389,3278" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_MoveSubgridParticlesFast.C">
+<area shape=rect coords="236,3143, 362,3179" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ZeroSolutionUnderSubgrid.C">
+<area shape=rect coords="218,3008, 389,3053" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ZeroSolutionUnderSubgrid.C">
+<area shape=rect coords="245,2495, 371,2531" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_InterpolateFieldValues.C">
+<area shape=rect coords="245,2378, 371,2414" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_InterpolateFieldValues.C">
+<area shape=rect coords="245,2135, 371,2171" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_CopyZonesFromGridCountOnly.C">
+<area shape=rect coords="245,2756, 371,2792" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationLoadBalanceGrids.C">
+<area shape=rect coords="245,2648, 380,2684" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ComputeTimeStep.C">
+<area shape=rect coords="227,1892, 398,1937" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/LevelHierarchy_AddLevel.C">
+<area shape=rect coords="227,1793, 398,1838" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationShareGrids.C">
+<area shape=rect coords="227,1640, 398,1685" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_MoveSubgridParticlesFast.C">
+<area shape=rect coords="245,1550, 371,1586" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ZeroSolutionUnderSubgrid.C">
+<area shape=rect coords="227,1415, 398,1460" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ZeroSolutionUnderSubgrid.C">
+<area shape=rect coords="227,1226, 398,1271" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/FindSubgrids.C">
+<area shape=rect coords="362,677, 533,722" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationTransferParticles.C">
+<area shape=rect coords="236,560, 407,605" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_MoveAllParticles.C">
+<area shape=rect coords="216,114, 414,204" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/RebuildHierarchy.C"></map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/flowchart/SolveHydroEquations.html
--- a/doc/flowchart/SolveHydroEquations.html
+++ b/doc/flowchart/SolveHydroEquations.html
@@ -1,13 +1,13 @@
<img src="SolveHydroEquations.gif" usemap="#SolveHydroEquations" Border = 0><map name="SolveHydroEquations"><area shape=poly coords="327,2765, 320,2751, 302,2739, 274,2731, 242,2729, 209,2731, 181,2739, 163,2751, 156,2765, 163,2778, 181,2790, 209,2798, 242,2801, 274,2798, 302,2790, 320,2778" href="EvolveLevel.html">
-<area shape=rect coords="309,2486, 444,2522" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_ZeusSolver.C">
-<area shape=rect coords="309,2378, 444,2414" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/ppm_lr.src">
-<area shape=rect coords="309,2279, 444,2315" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_PPMDirectEuler.C">
-<area shape=rect coords="309,2054, 453,2099" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CosmologyComputeExpansionFactor.C">
-<area shape=rect coords="273,695, 435,740" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_ComputeGammaField.C">
-<area shape=rect coords="273,407, 435,452" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_IdentifyPhysicalQuantities.C">
-<area shape=rect coords="273,290, 435,335" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_IdentifyPhysicalQuantities.C">
-<area shape=rect coords="93,191, 255,236" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_IdentifyPhysicalQuantities.C">
-<area shape=rect coords="12,2, 336,92" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_SolveHydroEquations.C">
+<area shape=rect coords="309,2486, 444,2522" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ZeusSolver.C">
+<area shape=rect coords="309,2378, 444,2414" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/ppm_lr.src">
+<area shape=rect coords="309,2279, 444,2315" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_PPMDirectEuler.C">
+<area shape=rect coords="309,2054, 453,2099" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CosmologyComputeExpansionFactor.C">
+<area shape=rect coords="273,695, 435,740" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ComputeGammaField.C">
+<area shape=rect coords="273,407, 435,452" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_IdentifyPhysicalQuantities.C">
+<area shape=rect coords="273,290, 435,335" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_IdentifyPhysicalQuantities.C">
+<area shape=rect coords="93,191, 255,236" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_IdentifyPhysicalQuantities.C">
+<area shape=rect coords="12,2, 336,92" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_SolveHydroEquations.C"></map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/flowchart/main.html
--- a/doc/flowchart/main.html
+++ b/doc/flowchart/main.html
@@ -1,16 +1,16 @@
<img src="main.gif" usemap="#main" Border=0><map name="main">
-<area shape=rect coords="281,578, 452,614" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/OutputLevelInformation.C">
-<area shape=rect coords="272,497, 452,533" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/LevelHierarchy_AddLevel.C">
-<area shape=rect coords="272,281, 452,317" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/ReadAllData.C">
-<area shape=rect coords="452,380, 551,425" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CommunicationPartitionGrid.C">
+<area shape=rect coords="281,578, 452,614" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/OutputLevelInformation.C">
+<area shape=rect coords="272,497, 452,533" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/LevelHierarchy_AddLevel.C">
+<area shape=rect coords="272,281, 452,317" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/ReadAllData.C">
+<area shape=rect coords="452,380, 551,425" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationPartitionGrid.C"><area shape=poly coords="209,1095, 203,1083, 189,1073, 167,1066, 141,1064, 115,1066, 93,1073, 79,1083, 74,1095, 79,1107, 93,1117, 115,1124, 141,1127, 167,1124, 189,1117, 203,1107" href="http://www.stonebrew.com">
-<area shape=poly coords="182,24, 178,15, 170,8, 156,3, 141,2, 126,3, 112,8, 104,15, 101,24, 104,33, 112,40, 126,45, 141,47, 156,45, 170,40, 178,33" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/enzo.C">
+<area shape=poly coords="182,24, 178,15, 170,8, 156,3, 141,2, 126,3, 112,8, 104,15, 101,24, 104,33, 112,40, 126,45, 141,47, 156,45, 170,40, 178,33" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/enzo.C"><area shape=rect coords="56,992, 227,1028" href="EvolveHierarchy.html">
-<area shape=rect coords="281,884, 452,920" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/InitializeNew.C">
-<area shape=rect coords="281,803, 452,839" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/Grid_OutputAsParticleData.C">
-<area shape=rect coords="281,695, 452,731" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/ExtractSection.C">
-<area shape=rect coords="272,227, 452,263" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/SetDefaultGlobalValues.C">
-<area shape=rect coords="56,128, 227,164" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/InterpretCommandLine.C">
-<area shape=rect coords="56,74, 227,110" href="http://lca.ucsd.edu/projects/enzo/browser/public/trunk/src/enzo/CommunicationInitialize.C">
+<area shape=rect coords="281,884, 452,920" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/InitializeNew.C">
+<area shape=rect coords="281,803, 452,839" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_OutputAsParticleData.C">
+<area shape=rect coords="281,695, 452,731" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/ExtractSection.C">
+<area shape=rect coords="272,227, 452,263" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/SetDefaultGlobalValues.C">
+<area shape=rect coords="56,128, 227,164" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/InterpretCommandLine.C">
+<area shape=rect coords="56,74, 227,110" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationInitialize.C"></map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/CreateSubgridList.gif
Binary file doc/manual/source/_static/flowchart/CreateSubgridList.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/CreateSubgridList.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/CreateSubgridList.html
@@ -0,0 +1,4 @@
+<img src="CreateSubgridList.gif" usemap="#CreateSubgridList" Border = 0>
+<map name="CreateSubgridList">
+<area shape=rect coords="126,262, 270,334" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ReturnFluxDims.C">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/DetermineDT.gif
Binary file doc/manual/source/_static/flowchart/DetermineDT.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/DetermineDT.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/DetermineDT.html
@@ -0,0 +1,5 @@
+<img src="DetermineDT.gif" usemap="#DetermineDT">
+<map name="DetermineDT">
+<area shape=rect coords="20,596, 200,632" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid.h#L207">
+<area shape=rect coords="20,38, 200,74" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ComputeTimeStep.C">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveHierarchy.gif
Binary file doc/manual/source/_static/flowchart/EvolveHierarchy.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveHierarchy.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/EvolveHierarchy.html
@@ -0,0 +1,18 @@
+<img src="EvolveHierarchy.gif" usemap="#EvolveHierarchy" Border = 0>
+<map name="EvolveHierarchy">
+<area shape=poly coords="236,1694, 229,1680, 212,1668, 185,1660, 155,1658, 124,1660, 97,1668, 80,1680, 74,1694, 80,1707, 97,1719, 124,1727, 155,1730, 185,1727, 212,1719, 229,1707" href="main.html">
+<area shape=rect coords="65,1586, 245,1622" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/WriteAllData.C">
+<area shape=rect coords="281,1406, 461,1451" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/ReduceFragmentation.C">
+<area shape=rect coords="65,1334, 245,1370" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CheckForOutput.C">
+<area shape=rect coords="65,479, 245,515" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CheckForOutput.C">
+<area shape=rect coords="65,1271, 245,1307" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CheckForTimeAction.C">
+<area shape=rect coords="65,1046, 245,1082" href="RebuildHierarchy.html">
+<area shape=rect coords="65,965, 245,1001" href="EvolveLevel.html">
+<area shape=rect coords="65,776, 245,812" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/OutputLevelInformation.C">
+<area shape=rect coords="65,830, 245,911" href="DetermineDT.html">
+<area shape=rect coords="65,542, 245,578" href="RebuildHierarchy.html">
+<area shape=rect coords="74,326, 236,362" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_SetExternalBoundaryValues.C">
+<area shape=rect coords="74,380, 236,416" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CopyOverlappingZones.C">
+<area shape=rect coords="74,101, 236,137" href="http://lca.ucsd.edu/projects/enzo/wiki/UserGuide/FlowChart#ReturnCPUTime">
+<area shape=poly coords="236,38, 229,24, 212,12, 185,4, 155,2, 124,4, 97,12, 80,24, 74,38, 80,51, 97,63, 124,71, 155,74, 185,71, 212,63, 229,51" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveHierarchy.C">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel.gif
Binary file doc/manual/source/_static/flowchart/EvolveLevel.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/EvolveLevel.html
@@ -0,0 +1,20 @@
+<img src="EvolveLevel.gif" usemap="#EvolveLevel" Border = 0>
+<map name="EvolveLevel">
+<area shape=rect coords="65,1757, 218,1802" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_AddToBoundaryFluxes.C">
+<area shape=rect coords="65,1703, 218,1748" href="EvolveLevel_UpdateFromFinerGrids.html">
+<area shape=poly coords="292,2083, 286,2069, 269,2057, 242,2049, 211,2047, 180,2049, 153,2057, 136,2069, 130,2083, 136,2096, 153,2108, 180,2116, 211,2119, 242,2116, 269,2108, 286,2096" href="EvolveHierarchy.html">
+<area shape=rect coords="65,1919, 218,1955" href="RebuildHierarchy.html">
+<area shape=rect coords="47,1838, 236,1874" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/RadiationFieldUpdate.C">
+<area shape=rect coords="245,1577, 344,1613" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveLevel.C">
+<area shape=rect coords="39,1345, 246,1408" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveLevelRoutinesOptimized.C">
+<area shape=rect coords="80,1165, 224,1273" href="EvolveLevel_Sub1.html">
+<area shape=rect coords="101,1082, 191,1118" href="SolveHydroEquations.html">
+<area shape=rect coords="83,947, 218,1028" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_CopyBaryonFieldToOldBaryonField.C">
+<area shape=rect coords="227,857, 335,929" href="EvolveLevel_Gravity.html">
+<area shape=rect coords="254,623, 353,668" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveLevelRoutinesOptimized.C">
+<area shape=rect coords="65,524, 218,578" href="CreateSubgridList.html">
+<area shape=rect coords="65,461, 218,497" href="DetermineDT.html">
+<area shape=rect coords="92,254, 209,317" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ClearBoundaryFluxes.C">
+<area shape=rect coords="59,113, 248,176" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveLevelRoutinesOptimized.C">
+<area shape=rect coords="47,2, 263,74" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveLevel.C">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel_CorrectForRefinedFluxes.gif
Binary file doc/manual/source/_static/flowchart/EvolveLevel_CorrectForRefinedFluxes.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel_CorrectForRefinedFluxes.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/EvolveLevel_CorrectForRefinedFluxes.html
@@ -0,0 +1,8 @@
+<img src="EvolveLevel_CorrectForRefinedFluxes.gif" usemap="#EvolveLevel_CorrectForRefinedFluxes"
+Border = 0>
+<map name="EvolveLevel_CorrectForRefinedFluxes">
+<area shape=poly coords="336,2347, 327,2332, 305,2318, 269,2310, 228,2307, 187,2310, 151,2318, 129,2332, 120,2347, 129,2362, 151,2376, 187,2384, 228,2388, 269,2384, 305,2376, 327,2362" href="EvolveLevel_UpdateFromFinerGrids.html">
+<area shape=rect coords="354,192, 471,228" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CosmologyComputeExpansionFactor.C">
+<area shape=rect coords="174,120, 300,156" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_IdentifyPhysicalQuantities.C">
+<area shape=poly coords="344,51, 335,32, 313,16, 279,5, 240,2, 201,5, 167,16, 145,32, 137,51, 145,70, 167,86, 201,97, 240,101, 279,97, 313,86, 335,70" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_CorrectForRefinedFluxes.C">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel_GetProjectedBoundaryFluxes.gif
Binary file doc/manual/source/_static/flowchart/EvolveLevel_GetProjectedBoundaryFluxes.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel_GetProjectedBoundaryFluxes.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/EvolveLevel_GetProjectedBoundaryFluxes.html
@@ -0,0 +1,8 @@
+<img src="EvolveLevel_GetProjectedBoundaryFluxes.gif"
+usemap="#EvolveLevel_GetProjectedBoundaryFluxes" Border=0>
+<map name="EvolveLevel_GetProjectedBoundaryFluxes">
+<area shape=poly coords="258,1658, 250,1644, 229,1632, 196,1624, 159,1622, 121,1624, 88,1632, 68,1644, 60,1658, 68,1671, 88,1683, 121,1691, 159,1694, 196,1691, 229,1683, 250,1671" href="EvolveLevel_UpdateFromFinerGrids.html">
+<area shape=rect coords="258,1487, 384,1532" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationSendFluxes.C">
+<area shape=rect coords="258,1352, 384,1397" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationReceiveFluxes.C">
+<area shape=poly coords="276,38, 267,24, 244,12, 209,4, 168,2, 127,4, 91,12, 68,24, 60,38, 68,51, 91,63, 127,71, 168,74, 209,71, 244,63, 267,51" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_GetProjectedBoundaryFluxes.C">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel_Gravity.gif
Binary file doc/manual/source/_static/flowchart/EvolveLevel_Gravity.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel_Gravity.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/EvolveLevel_Gravity.html
@@ -0,0 +1,7 @@
+<img src="EvolveLevel_Gravity.gif" usemap="#EvolveLevel_Gravity" Border = 0>
+<map name="EvolveLevel_Gravity">
+<area shape=rect coords="185,334, 266,388" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CheckEnergyConservation.C">
+<area shape=rect coords="185,181, 275,253" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo//Grid_ComputeAccelerationFieldExternal.C">
+<area shape=rect coords="167,109, 248,145" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo//Grid_ComputeAccelerations.C">
+<area shape=rect coords="167,55, 248,91" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo//Grid_SolveForPotential.C">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel_ProjectSolutionToParentGrid.gif
Binary file doc/manual/source/_static/flowchart/EvolveLevel_ProjectSolutionToParentGrid.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel_ProjectSolutionToParentGrid.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/EvolveLevel_ProjectSolutionToParentGrid.html
@@ -0,0 +1,8 @@
+<img src="EvolveLevel_ProjectSolutionToParentGrid.gif"
+usemap="#EvolveLevel_ProjectSolutionToParentGrid" Border = 0>
+<map name="EvolveLevel_ProjectSolutionToParentGrid">
+<area shape=poly coords="293,1860, 285,1846, 264,1834, 232,1826, 194,1824, 156,1826, 124,1834, 103,1846, 95,1860, 103,1873, 124,1885, 156,1893, 194,1896, 232,1893, 264,1885, 285,1873" href="EvolveLevel_UpdateFromFinerGrids.html">
+<area shape=rect coords="266,1311, 392,1401" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_Irecv_CommunicationReceiveRegion.C">
+<area shape=rect coords="158,636, 284,672" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_IdentifyPhysicalQuantities.C">
+<area shape=poly coords="311,123, 303,109, 282,97, 250,89, 212,87, 174,89, 142,97, 121,109, 113,123, 121,136, 142,148, 174,156, 212,159, 250,156, 282,148, 303,136" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ProjectSolutionToParentGrid.C">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel_Sub1.gif
Binary file doc/manual/source/_static/flowchart/EvolveLevel_Sub1.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel_Sub1.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/EvolveLevel_Sub1.html
@@ -0,0 +1,9 @@
+<img src="EvolveLevel_Sub1.gif" usemap="#EvolveLevel_Sub1" Border = 0>
+<map name="EvolveLevel_Sub1">
+<area shape=rect coords="47,217, 173,253" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/UpdateParticlePositions.C">
+<area shape=rect coords="47,271, 173,298" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_StarParticleHandler.C">
+<area shape=rect coords="209,496, 281,532" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ComovingExpansionTerms.C">
+<area shape=rect coords="191,343, 299,397" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid.h#L799">
+<area shape=rect coords="209,145, 281,181" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_SolveRadiativeCooling.C">
+<area shape=rect coords="209,64, 281,100" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_SolveRateEquations.C">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel_UpdateFromFinerGrids.gif
Binary file doc/manual/source/_static/flowchart/EvolveLevel_UpdateFromFinerGrids.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/EvolveLevel_UpdateFromFinerGrids.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/EvolveLevel_UpdateFromFinerGrids.html
@@ -0,0 +1,9 @@
+<img src="EvolveLevel_UpdateFromFinerGrids.gif" usemap="#EvolveLevel_UpdateFromFinerGrids" Border =
+0>
+<map name="EvolveLevel_UpdateFromFinerGrids">
+<area shape=poly coords="272,609, 265,594, 245,580, 214,572, 178,569, 142,572, 111,580, 91,594, 83,609, 91,624, 111,638, 142,646, 178,650, 214,646, 245,638, 265,624" href="EvolveLevel.html">
+<area shape=rect coords="101,413, 245,458" href="EvolveLevel_ProjectSolutionToParentGrid.html">
+<area shape=rect coords="101,278, 245,323" href="EvolveLevel_CorrectForRefinedFluxes.html">
+<area shape=rect coords="101,215, 245,260" href="EvolveLevel_GetProjectedBoundaryFluxes.html">
+<area shape=poly coords="272,42, 265,27, 245,13, 214,5, 178,2, 142,5, 111,13, 91,27, 83,42, 91,57, 111,71, 142,79, 178,83, 214,79, 245,71, 265,57" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/EvolveLevelRoutinesOptimized.C">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/General.gif
Binary file doc/manual/source/_static/flowchart/General.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/RebuildHierarchy.gif
Binary file doc/manual/source/_static/flowchart/RebuildHierarchy.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/RebuildHierarchy.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/RebuildHierarchy.html
@@ -0,0 +1,21 @@
+<img src="RebuildHierarchy.gif" usemap="#RebuildHierarchy" Border = 0>
+<map name="RebuildHierarchy">
+<area shape=rect coords="236,3440, 362,3476" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_InterpolateBoundaryFromParent.C">
+<area shape=rect coords="218,3233, 389,3278" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_MoveSubgridParticlesFast.C">
+<area shape=rect coords="236,3143, 362,3179" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ZeroSolutionUnderSubgrid.C">
+<area shape=rect coords="218,3008, 389,3053" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ZeroSolutionUnderSubgrid.C">
+<area shape=rect coords="245,2495, 371,2531" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_InterpolateFieldValues.C">
+<area shape=rect coords="245,2378, 371,2414" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_InterpolateFieldValues.C">
+<area shape=rect coords="245,2135, 371,2171" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_CopyZonesFromGridCountOnly.C">
+<area shape=rect coords="245,2756, 371,2792" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationLoadBalanceGrids.C">
+<area shape=rect coords="245,2648, 380,2684" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ComputeTimeStep.C">
+<area shape=rect coords="227,1892, 398,1937" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/LevelHierarchy_AddLevel.C">
+<area shape=rect coords="227,1793, 398,1838" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationShareGrids.C">
+<area shape=rect coords="227,1640, 398,1685" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_MoveSubgridParticlesFast.C">
+<area shape=rect coords="245,1550, 371,1586" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ZeroSolutionUnderSubgrid.C">
+<area shape=rect coords="227,1415, 398,1460" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ZeroSolutionUnderSubgrid.C">
+<area shape=rect coords="227,1226, 398,1271" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/FindSubgrids.C">
+<area shape=rect coords="362,677, 533,722" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationTransferParticles.C">
+<area shape=rect coords="236,560, 407,605" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_MoveAllParticles.C">
+<area shape=rect coords="216,114, 414,204" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/RebuildHierarchy.C">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/SolveHydroEquations.gif
Binary file doc/manual/source/_static/flowchart/SolveHydroEquations.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/SolveHydroEquations.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/SolveHydroEquations.html
@@ -0,0 +1,13 @@
+<img src="SolveHydroEquations.gif" usemap="#SolveHydroEquations" Border = 0>
+<map name="SolveHydroEquations">
+<area shape=poly coords="327,2765, 320,2751, 302,2739, 274,2731, 242,2729, 209,2731, 181,2739, 163,2751, 156,2765, 163,2778, 181,2790, 209,2798, 242,2801, 274,2798, 302,2790, 320,2778" href="EvolveLevel.html">
+<area shape=rect coords="309,2486, 444,2522" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ZeusSolver.C">
+<area shape=rect coords="309,2378, 444,2414" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/ppm_lr.src">
+<area shape=rect coords="309,2279, 444,2315" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_PPMDirectEuler.C">
+<area shape=rect coords="309,2054, 453,2099" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CosmologyComputeExpansionFactor.C">
+<area shape=rect coords="273,695, 435,740" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_ComputeGammaField.C">
+<area shape=rect coords="273,407, 435,452" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_IdentifyPhysicalQuantities.C">
+<area shape=rect coords="273,290, 435,335" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_IdentifyPhysicalQuantities.C">
+<area shape=rect coords="93,191, 255,236" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_IdentifyPhysicalQuantities.C">
+<area shape=rect coords="12,2, 336,92" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_SolveHydroEquations.C">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/index.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/index.html
@@ -0,0 +1,11 @@
+<img src="General.gif" usemap="#General" Border = 0>
+<map name="General">
+<area shape=rect coords="245,407, 380,461" href="EvolveLevel_UpdateFromFinerGrids.html">
+<area shape=rect coords="245,587, 380,641" href="RebuildHierarchy.html">
+<area shape=rect coords="245,326, 380,380" href="SolveHydroEquations.html">
+<area shape=poly coords="551,2, 398,2, 398,99, 413,106, 427,108, 444,107, 474,99, 504,91, 521,90, 535,92, 551,99" href="http://lca.ucsd.edu/projects/enzo/wiki/UserGuide/FlowChart#Classes">
+<area shape=rect coords="245,479, 380,533" href="RebuildHierarchy.html">
+<area shape=rect coords="173,254, 434,569" href="EvolveLevel.html">
+<area shape=rect coords="137,200, 461,668" href="EvolveHierarchy.html">
+<area shape=rect coords="101,164, 497,713" href="main.html">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/main.gif
Binary file doc/manual/source/_static/flowchart/main.gif has changed

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/_static/flowchart/main.html
--- /dev/null
+++ b/doc/manual/source/_static/flowchart/main.html
@@ -0,0 +1,16 @@
+<img src="main.gif" usemap="#main" Border=0>
+<map name="main">
+<area shape=rect coords="281,578, 452,614" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/OutputLevelInformation.C">
+<area shape=rect coords="272,497, 452,533" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/LevelHierarchy_AddLevel.C">
+<area shape=rect coords="272,281, 452,317" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/ReadAllData.C">
+<area shape=rect coords="452,380, 551,425" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationPartitionGrid.C">
+<area shape=poly coords="209,1095, 203,1083, 189,1073, 167,1066, 141,1064, 115,1066, 93,1073, 79,1083, 74,1095, 79,1107, 93,1117, 115,1124, 141,1127, 167,1124, 189,1117, 203,1107" href="http://www.stonebrew.com">
+<area shape=poly coords="182,24, 178,15, 170,8, 156,3, 141,2, 126,3, 112,8, 104,15, 101,24, 104,33, 112,40, 126,45, 141,47, 156,45, 170,40, 178,33" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/enzo.C">
+<area shape=rect coords="56,992, 227,1028" href="EvolveHierarchy.html">
+<area shape=rect coords="281,884, 452,920" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/InitializeNew.C">
+<area shape=rect coords="281,803, 452,839" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/Grid_OutputAsParticleData.C">
+<area shape=rect coords="281,695, 452,731" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/ExtractSection.C">
+<area shape=rect coords="272,227, 452,263" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/SetDefaultGlobalValues.C">
+<area shape=rect coords="56,128, 227,164" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/InterpretCommandLine.C">
+<area shape=rect coords="56,74, 227,110" href="https://bitbucket.org/enzo/enzo-dev/src/week-of-code/src/enzo/CommunicationInitialize.C">
+</map>

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/conf.py
--- a/doc/manual/source/conf.py
+++ b/doc/manual/source/conf.py
@@ -124,7 +124,7 @@
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
-# html_static_path = ['_static']
+html_static_path = ['_static']

# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.

diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/index.rst
--- a/doc/manual/source/index.rst
+++ b/doc/manual/source/index.rst
@@ -14,7 +14,6 @@
Enzo development is supported by grants AST-0808184 and OCI-0832662 from the
National Science Foundation.

-
.. toctree::
:maxdepth: 2


diff -r 13051b7b6287 -r a9da25a430d5 doc/manual/source/supplementary_info/FlowChart.rst
--- a/doc/manual/source/supplementary_info/FlowChart.rst
+++ b/doc/manual/source/supplementary_info/FlowChart.rst
@@ -1,20 +1,19 @@
.. _FlowChart:

-Enzo Flow Chart, Source Browser
-===============================
+Enzo Flow Chart
+===============

`Here's a cartoon of
-Enzo. <http://lca.ucsd.edu/software/enzo/v1.5/flowchart/>`_ This was
-written as a first look as the details of how enzo works. Black
+Enzo. <../_static/flowchart/main.html>`_ This was
+written as a first look at the details of how Enzo works. Black
arrows indicate further flow charts. Grey boxes (usually) indicate
direct links to the source code.

No guarantees are made regarding the correctness of this flowchart --
it's meant to help get a basic understanding of the flow of Enzo
-before extensive code modifications. `Also see the Enzo Source
-Browser. <http://lca.ucsd.edu/software/enzo/v1.0.1/source_browser/>`_
-This is a second attempt at the same thing in a more dynamic way. It
-allows one to (in principle) see all the routines called from a
-function, in order, and jump to the source showing the call. It also
-allows you to see a reverse call stack of every routine that calls a
-particular function.
+before extensive code modifications. This flowchart is certainly
+out of date and contains inaccuracies. The user should consult the
+source code for an up-to-date look at how Enzo works. The purpose
+of this flowchart is just to get a rough idea of how Enzo works,
+but it does not show the exact order of operations, and it does not
+show all the methods that exist in the Enzo source code.
\ No newline at end of file


https://bitbucket.org/enzo/enzo-dev/commits/9d9cf7d37603/
Changeset: 9d9cf7d37603
Branch: week-of-code
User: ibutsky
Date: 2018-06-21 04:51:34+00:00
Summary: saving intermediate progress before deleting MagneticSupernova references in the Star class
Affected #: 23 files

diff -r a9da25a430d5 -r 9d9cf7d37603 doc/manual/source/physics/star_particles.rst
--- a/doc/manual/source/physics/star_particles.rst
+++ b/doc/manual/source/physics/star_particles.rst
@@ -550,27 +550,30 @@

Magnetic Supernova Feedback
----------------------------
-*Source: hydro_rk/SuperNovaSeedField.C*
+*Source: hydro_rk/MagneticSupernova.C*

-Select this method by setting ``UseSupernovaSeedFieldSourceTerms = 1``
-(Default = 0) and
-specifying the following parameters:
+Select this method by setting ``UseMagneticSupernovaFeedback = 1``
+(Default = 0) and specifying the parameters below. If
+``UseMagneticSupernovaFeedback == 2``, the parameters
+``MagneticSupernovaRadius`` and ``MagneticSupernovaDuration`` will
+be calculated at runtime based on the cell width and time step of the most-refined grid.

-``SupernovaSeedFieldTotalEnergy`` (in units of ergs) is the total amount
-of magnetic energy to be injected by a single supernova event. Defualt = 0.0.
+``MagneticSupernovaEnergy`` (in units of ergs) is the total amount
+of magnetic energy to be injected by a single supernova event. Defualt = 1e51
+ergs.

-``SupernovaSeedFieldRadius`` (in units of parsecs) gives the scale over
+``MagneticSupernovaRadius`` (in units of parsecs) gives the scale over
which to inject supernova energy. The injection mechanism normalizes the
spatial exponential decay of the injected supernova energy so that all of the
energy is contained within the specified radius. For this reason, the
-``SupernovaSeedFieldRadius`` should be at least 3 times the minimum cell width of
-the simulation. Default = 0.0.
+``MagneticSupernovaRadius`` should be at least 3 times the minimum cell width of
+the simulation. Default = 500 pc.

-``SupernovaSeedFieldDuration`` (in units of Myr) gives the duration of the
+``MagneticSupernovaDuration`` (in units of Myr) gives the duration of the
supernova magnetic energy injection. The injection mechanism is normalized so
-that all of the ``SupernovaSeedFieldTotalEnergy`` is injected over this
-time scale. In order to inject the correct amount of energy, ``SupernovaSeedFieldDuration`` should be set to at least 4
-times the minimum time step of the simulation. Default = 0.0.
+that all of the ``MagneticSupernovaEnergy`` is injected over this
+time scale. In order to inject the correct amount of energy, ``MagneticSupernovaDuration`` should be set to at least 5
+times the minimum time step of the simulation. Default = 10,000 years.


The following applies to Methods 0 (Cen & Ostriker) and 1 (+

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/EvolveLevel.C
--- a/src/enzo/EvolveLevel.C
+++ b/src/enzo/EvolveLevel.C
@@ -540,6 +540,10 @@

Grids[grid1]->GridData->CopyBaryonFieldToOldBaryonField();

+ // Find recently-supernova stars to add them the MagneticSupernovaList
+ // if ((UseMagneticSupernovaFeedback) && (level > MaximumRefinementLevel - 1))
+ // Grids[grid1]->GridData->AddMagneticSupernovaeToList();
+
/* Call hydro solver and save fluxes around subgrids.
* HD_RK and MHD_RK are the 2nd order Runge-Kutta integrations, which
* require two steps (*_1stStep and *_2ndStep)
@@ -547,7 +551,7 @@
* All others (PPM, Zeus, MHD_Li/CT) are called from SolveHydroEquations
*/

-
+
if( HydroMethod != HD_RK && HydroMethod != MHD_RK ){
Grids[grid1]->GridData->SolveHydroEquations(LevelCycleCount[level],
NumberOfSubgrids[grid1], SubgridFluxesEstimate[grid1], level);
@@ -713,7 +717,10 @@
if (ComovingCoordinates)
Grids[grid1]->GridData->ComovingExpansionTerms();

- } // end loop over grids
+ // if (UseMagneticSupernovaFeedback)
+ //Grids[grid1]->GridData->MagneticSupernovaList.clear();
+
+ } // end loop over grids

/* Finalize (accretion, feedback, etc.) star particles */


diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/Grid.h
--- a/src/enzo/Grid.h
+++ b/src/enzo/Grid.h
@@ -3011,10 +3011,10 @@
int MHDCT_ConvertEnergyToConservedS();
int MHDCT_ConvertEnergyToSpecificS();

- //List of SuperNova objects that each grid needs to keep track of
- std::vector<SuperNova> SuperNovaList;
-
-
+ // used if UseMagneticSupernovaFeedback is turned on
+ int AddMagneticSupernovaeToList();
+ //List of SuperNova objects that each grid needs to keep track of
+ std::vector<SuperNova> MagneticSupernovaList;
};

// inline int grid::ReadRandomForcingFields (FILE *main_file_pointer);

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/Grid_AddFeedbackSphere.C
--- a/src/enzo/Grid_AddFeedbackSphere.C
+++ b/src/enzo/Grid_AddFeedbackSphere.C
@@ -994,18 +994,22 @@


// Create a randomly-oriented SuperNova object and add it to the SuperNova Grid list
- if (cstar->ReturnFeedbackFlag() == SUPERNOVA_SEEDFIELD) {
- if(UseSupernovaSeedFieldSourceTerms){
+ printf("inside AddFeedbackSphere\n");
+ if (cstar->ReturnFeedbackFlag() == MAGNETIC_SUPERNOVA){
+ printf("inside MAGNETIC_SUPERNOVA in addfeedbackshpere \n");

SuperNova P = SuperNova();

+ // Setting up pseudo-randomly oriented toroidal magnetic field loops
+ // mt_init is deterministic, so that supernovae for the same star particle
+ // will always be generated in the same orientation
mt_init((unsigned_int) cstar->ReturnID());
-
+
float random_u = (float)(mt_random()%32768)/32768.0; // random variable from 0 to 1
float random_v = (float)(mt_random()%32768)/32768.0;
float random_phi = 2*M_PI*random_u; // 0 to 2pi
float random_theta = acos(2*random_v-1); // 0 to pi
- // Setting up randomly oriented magnetic feedback of supernova
+
float phi_x = sin(random_theta)*cos(random_phi);
float phi_y = sin(random_theta)*sin(random_phi);
float phi_z = cos(random_theta);
@@ -1015,22 +1019,34 @@

// Convert units to system units
// Converting time from years to seconds, then internal units
- float sn_duration = SupernovaSeedFieldDuration * 3.1556952e7 / TimeUnits;
+ float sn_duration = MagneticSupernovaDuration * 3.1556952e7 / TimeUnits;
// Converting radius from parsecs to cm, then internal units
- float sn_radius = SupernovaSeedFieldRadius * 3.0856775714e18 / LengthUnits;
+ float sn_radius = MagneticSupernovaRadius * 3.0856775714e18 / LengthUnits;
// Converting energy from ergs to internal units
float MassUnits = DensityUnits * POW(LengthUnits, 3);
- float sn_energy = SupernovaSeedFieldEnergy / (MassUnits*VelocityUnits*VelocityUnits);
+ float sn_energy = MagneticSupernovaEnergy / (MassUnits*VelocityUnits*VelocityUnits);

- // Creates a supernova with magnetic feedback set by user-defined parameters and
- // adds it to supernova list
- if((Time > sn_birthtime) && (Time < sn_birthtime + SupernovaSeedFieldDuration)){
+ if (UseMagneticSupernovaFeedback > 1){
+ // if UseMagneticSupernovaFeedback > 1, then we set the magnetic feedback radius and duration
+ // below based on the resolution of the grid at the highest refinement level
+ sn_duration = 5.0 * this->dtFixed;
+ MagneticSupernovaDuration = sn_duration * TimeUnits / 3.1156952e7;
+ sn_radius = 3.0 * this->CellWidth[0][0];
+ MagneticSupernovaRadius = sn_radius * LengthUnits / 3.0856775714e18;
+ }
+
+ // Creates a supernova with magnetic feedback adds it to the grid's magnetic supernova list
+ // This list is looped through in hydro_rk/Grid_MHDSourceTerms to inject the magnetic field
+ if((Time > sn_birthtime) && (Time < sn_birthtime + sn_duration)){
P.setValues(phi_x, phi_y, phi_z, cstar->pos[0], cstar->pos[1], cstar->pos[2],
- sn_radius, sn_birthtime, sn_duration, sn_energy);
+ sn_radius, sn_birthtime, sn_duration, sn_energy);

- this->SuperNovaList.push_back(P);
+ this->MagneticSupernovaList.push_back(P);
+ printf("added supernova to list\n");
}
- }
+ else if (Time > sn_birthtime + sn_duration)
+ cstar->SetFeedbackFlag(DEATH);
+
}



diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/Grid_AddMagneticSupernovaeToList.C
--- /dev/null
+++ b/src/enzo/Grid_AddMagneticSupernovaeToList.C
@@ -0,0 +1,105 @@
+/***********************************************************************
+/
+/ FIND DEAD STAR PARTICLES AND ADD THEM TO MAGNETIC SUPERNOVA LIST
+/
+/ written by: Iryna Butsky
+/ date: June 2018
+/
+/ PURPOSE: To apply magnetic supernova feedback, we need to first add
+/ all stars that have recently gone supernova to the global list.
+/
+************************************************************************/
+
+#define USE
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <math.h>
+
+#include "ErrorExceptions.h"
+#include "macros_and_parameters.h"
+#include "typedefs.h"
+#include "global_data.h"
+#include "Fluxes.h"
+#include "GridList.h"
+#include "ExternalBoundary.h"
+#include "TopGridData.h"
+#include "Grid.h"
+#include "hydro_rk/SuperNova.h"
+
+int GetUnits(float *DensityUnits, float *LengthUnits,
+ float *TemperatureUnits, float *TimeUnits,
+ float *VelocityUnits, FLOAT Time);
+
+void mt_init(unsigned_int seed);
+unsigned_long_int mt_random();
+
+int grid::AddMagneticSupernovaeToList()
+{
+
+ if (ProcessorNumber != MyProcessorNumber) {
+ return SUCCESS;
+ }
+
+ float random_u, random_v, random_phi, random_theta, phi_x, phi_y, phi_z;
+ float sn_birthtime, sn_duration, sn_radius, sn_energy, star_birthtime, star_lifetime;
+
+ float DensityUnits, LengthUnits, TemperatureUnits, TimeUnits, VelocityUnits, MassUnits, EnergyUnits;
+ if (GetUnits(&DensityUnits, &LengthUnits,&TemperatureUnits, &TimeUnits,
+ &VelocityUnits, Time) == FAIL){
+ fprintf(stderr, "Error in GetUnits.\n");
+ return FAIL;
+ }
+
+
+ // if UseMagneticSupernovaFeedback > 1, then we set the magnetic feedback radius and duration
+ // below based on the resolution of the grid at the highest refinement level
+ if (UseMagneticSupernovaFeedback > 1){
+ sn_duration = 5.0 * dtFixed;
+ MagneticSupernovaDuration = sn_duration * TimeUnits / 3.1156952e7;
+ sn_radius = 3.0 * this->CellWidth[0][0];
+ MagneticSupernovaRadius = sn_radius * LengthUnits / 3.0856775714e18;
+ }
+ else {
+ // Converting time from years to seconds, then internal units
+ sn_duration = MagneticSupernovaDuration * 3.1556952e7 / TimeUnits;
+
+ // Converting radius from parsecs to cm, then internal units
+ sn_radius = MagneticSupernovaRadius * 3.0856775714e18 / LengthUnits;
+ }
+ // Converting energy from ergs to internal units
+ MassUnits = DensityUnits * POW(LengthUnits, 3);
+ sn_energy = MagneticSupernovaEnergy / (MassUnits*VelocityUnits*VelocityUnits);
+
+ for (int star_id = 0; star_id < this->NumberOfParticles; star_id++){
+ if (this->ParticleType[star_id] == PARTICLE_TYPE_STAR){
+
+ star_birthtime = this->ParticleAttribute[0][star_id];
+ star_lifetime = this->ParticleAttribute[1][star_id];
+ sn_birthtime = star_birthtime + star_lifetime;
+
+ // Creates a supernova with magnetic feedback set by user-defined parameters and
+ // adds it to supernova list
+ if((this->Time > sn_birthtime) && (this->Time < sn_birthtime + sn_duration)){
+ SuperNova P = SuperNova();
+ mt_init((unsigned_int) this->ParticleNumber[star_id]);
+
+ random_u = (float)(mt_random()%32768)/32768.0; // random variable from 0 to 1
+ random_v = (float)(mt_random()%32768)/32768.0;
+ random_phi = 2*M_PI*random_u; // 0 to 2pi
+ random_theta = acos(2*random_v-1); // 0 to pi
+
+ // Setting up randomly oriented magnetic feedback of supernova
+ phi_x = sin(random_theta)*cos(random_phi);
+ phi_y = sin(random_theta)*sin(random_phi);
+ phi_z = cos(random_theta);
+
+ P.setValues(phi_x, phi_y, phi_z,
+ ParticlePosition[0][star_id], ParticlePosition[1][star_id], ParticlePosition[2][star_id],
+ sn_radius, sn_birthtime, sn_duration, sn_energy);
+ this->MagneticSupernovaList.push_back(P);
+ }
+ }
+ }
+ return SUCCESS;
+}

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/Grid_FindAllStarParticles.C
--- a/src/enzo/Grid_FindAllStarParticles.C
+++ b/src/enzo/Grid_FindAllStarParticles.C
@@ -50,7 +50,8 @@
//StarType = abs(ParticleType[i]);
if (ParticleType[i] == PARTICLE_TYPE_SINGLE_STAR ||
ParticleType[i] == PARTICLE_TYPE_BLACK_HOLE ||
- (ParticleType[i] == PARTICLE_TYPE_STAR && UseSupernovaSeedFieldSourceTerms) ||
+ (ParticleType[i] == PARTICLE_TYPE_STAR
+ && UseMagneticSupernovaFeedback && level == MaximumRefinementLevel) ||
ParticleType[i] == PARTICLE_TYPE_CLUSTER ||
ParticleType[i] == PARTICLE_TYPE_COLOR_STAR ||
ParticleType[i] == PARTICLE_TYPE_MBH ||
@@ -58,7 +59,7 @@
(StarParticleRadiativeFeedback == TRUE &&
ParticleType[i] == PARTICLE_TYPE_STAR)) {

- if (ParticleType[i] == PARTICLE_TYPE_STAR && UseSupernovaSeedFieldSourceTerms == 0)
+ if (ParticleType[i] == PARTICLE_TYPE_STAR && UseMagneticSupernovaFeedback == 0)
LifetimeFactor = 12.0;
else
LifetimeFactor = 1.0;

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/Grid_FindNewStarParticles.C
--- a/src/enzo/Grid_FindNewStarParticles.C
+++ b/src/enzo/Grid_FindNewStarParticles.C
@@ -39,9 +39,10 @@

for (i = 0; i < NumberOfParticles; i++)
if (ParticleType[i] == -PARTICLE_TYPE_SINGLE_STAR ||
- (ParticleType[i] == PARTICLE_TYPE_STAR && UseSupernovaSeedFieldSourceTerms &&
+ (ParticleType[i] == PARTICLE_TYPE_STAR && UseMagneticSupernovaFeedback &&
(this->Time >= ParticleAttribute[0][i] &&
- this->Time <= ParticleAttribute[0][i]+ParticleAttribute[1][i])) ||
+ this->Time <= ParticleAttribute[0][i]+ParticleAttribute[1][i])
+ && level == MaximumRefinementLevel) ||
ParticleType[i] == -PARTICLE_TYPE_BLACK_HOLE ||
ParticleType[i] == -PARTICLE_TYPE_CLUSTER ||
ParticleType[i] == -PARTICLE_TYPE_COLOR_STAR ||

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/Grid_constructor.C
--- a/src/enzo/Grid_constructor.C
+++ b/src/enzo/Grid_constructor.C
@@ -200,12 +200,11 @@
MagneticDims[field][dim] = -100;
}}

-
/* For once-per-rootgrid-timestep star formation, the following flag
determines whether SF is about to occur or not. It's currently
(April 2012) only implemented for H2REG_STAR and completely
ignored for all other star makers. */
MakeStars = 0;
- if (UseSupernovaSeedFieldSourceTerms == 1) List<SuperNova> SuperNovaList;

+ if (UseMagneticSupernovaFeedback) std::vector<SuperNova> MagneticSupernovaList;
}

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/Grid_destructor.C
--- a/src/enzo/Grid_destructor.C
+++ b/src/enzo/Grid_destructor.C
@@ -116,6 +116,8 @@
*/

//MHD stuff
+ // if (UseMagneticSupernovaFeedback)
+ // MagneticSupernovaList.clear();

if( UseMHDCT ){
for(i=0;i<3;i++){

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/Make.config.objects
--- a/src/enzo/Make.config.objects
+++ b/src/enzo/Make.config.objects
@@ -307,6 +307,7 @@
Grid_AddFeedbackSphere.o \
Grid_AddFieldMassToMassFlaggingField.o \
Grid_AddFields.o \
+ Grid_AddMagneticSupernovaeToList.o \
Grid_AddOneParticleFromList.o \
Grid_AddOverlappingParticleMassField.o \
Grid_AddParticlesFromList.o \

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/ReadParameterFile.C
--- a/src/enzo/ReadParameterFile.C
+++ b/src/enzo/ReadParameterFile.C
@@ -1268,10 +1268,10 @@
ret += sscanf(line, "GasDragCoefficient = %"GSYM, &GasDragCoefficient);

// Parameters for magnetic feedback from supernovae
- ret += sscanf(line, "UseSupernovaSeedFieldSourceTerms = %"ISYM, &UseSupernovaSeedFieldSourceTerms);
- ret += sscanf(line,"SupernovaSeedFieldRadius = %"FSYM, &SupernovaSeedFieldRadius);
- ret += sscanf(line,"SupernovaSeedFieldEnergy = %"FSYM, &SupernovaSeedFieldEnergy);
- ret += sscanf(line,"SupernovaSeedFieldDuration = %"FSYM, &SupernovaSeedFieldDuration);
+ ret += sscanf(line, "UseMagneticSupernovaFeedback = %"ISYM, &UseMagneticSupernovaFeedback);
+ ret += sscanf(line,"MagneticSupernovaRadius = %"FSYM, &MagneticSupernovaRadius);
+ ret += sscanf(line,"MagneticSupernovaEnergy = %"FSYM, &MagneticSupernovaEnergy);
+ ret += sscanf(line,"MagneticSupernovaDuration = %"FSYM, &MagneticSupernovaDuration);

/* If the dummy char space was used, then make another. */


diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/SetDefaultGlobalValues.C
--- a/src/enzo/SetDefaultGlobalValues.C
+++ b/src/enzo/SetDefaultGlobalValues.C
@@ -978,12 +978,12 @@
UseGasDrag = 0;
GasDragCoefficient = 0.;

- /* Supernova magnetic seed field */
+ /* Supernova magnetic feedback */
/* Default == 0 -> no magnetic field contribution */
- UseSupernovaSeedFieldSourceTerms = 0;
- SupernovaSeedFieldRadius = 0.0;
- SupernovaSeedFieldDuration = 0.0;
- SupernovaSeedFieldEnergy = 0.0;
+ UseMagneticSupernovaFeedback = 0; // 0 = off; 1+ = on; 2 = Radius and duration calculated during runtime
+ MagneticSupernovaRadius = 300.0; // Total injection radius of magnetic field in parsecs
+ MagneticSupernovaDuration = 1e4; // Total duration of magnetic feedback in years
+ MagneticSupernovaEnergy = 1.0e51; // Total energy (ergs) injected per star particle (supernova)

return SUCCESS;
}

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/StarParticleAddFeedback.C
--- a/src/enzo/StarParticleAddFeedback.C
+++ b/src/enzo/StarParticleAddFeedback.C
@@ -89,8 +89,8 @@

count = 0;
// clear list of Supernovae at each timestep to avoid adding duplicates in Grid_AddFeedbackSphere
- if(UseSupernovaSeedFieldSourceTerms){
- LevelArray[level]->GridData->SuperNovaList.clear();
+ if(UseMagneticSupernovaFeedback){
+ LevelArray[level]->GridData->MagneticSupernovaList.clear();
}
for (cstar = AllStars; cstar; cstar = cstar->NextStar, count++) {

@@ -164,7 +164,7 @@
if ((cstar->ReturnFeedbackFlag() == MBH_THERMAL ||
cstar->ReturnFeedbackFlag() == MBH_JETS ||
cstar->ReturnFeedbackFlag() == CONT_SUPERNOVA ||
- cstar->ReturnFeedbackFlag() == SUPERNOVA_SEEDFIELD) &&
+ cstar->ReturnFeedbackFlag() == MAGNETIC_SUPERNOVA) &&
LevelArray[level+1] != NULL)
cstar->FindFeedbackSphere
(LevelArray, level+1, influenceRadius, EjectaDensity, EjectaThermalEnergy,

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/Star_Accrete.C
--- a/src/enzo/Star_Accrete.C
+++ b/src/enzo/Star_Accrete.C
@@ -29,7 +29,7 @@

int Star::Accrete(void)
{
- if (UseSupernovaSeedFieldSourceTerms == 1){
+ if (UseMagneticSupernovaFeedback){
if (this->CurrentGrid == NULL ||(this->naccretions == 0))
return SUCCESS;
}

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/Star_CalculateFeedbackParameters.C
--- a/src/enzo/Star_CalculateFeedbackParameters.C
+++ b/src/enzo/Star_CalculateFeedbackParameters.C
@@ -247,8 +247,9 @@

break;

- case SUPERNOVA_SEEDFIELD:
- Radius = 1.1*SupernovaSeedFieldRadius * pc / LengthUnits; // Real injection radius SupernovaSeedFieldRadius
+ case MAGNETIC_SUPERNOVA:
+ printf("inside Star_CalculateFeedbackParameters\n");
+ Radius = 1.1*MagneticSupernovaRadius * pc / LengthUnits; // Real injection radius SupernovaSeedFieldRadius
break;

} // ENDSWITCH FeedbackFlag

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/Star_HitEndpoint.C
--- a/src/enzo/Star_HitEndpoint.C
+++ b/src/enzo/Star_HitEndpoint.C
@@ -102,6 +102,12 @@
break;

case NormalStar:
+ if (UseMagneticSupernovaFeedback)
+ if (this->FeedbackFlag == DEATH){
+ result = KILL_STAR;
+ printf("going to kill star\n");
+ }
+
break;

} // ENDSWITCH

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/Star_SetFeedbackFlag.C
--- a/src/enzo/Star_SetFeedbackFlag.C
+++ b/src/enzo/Star_SetFeedbackFlag.C
@@ -135,11 +135,15 @@

//this->type = abs_type;

- case PARTICLE_TYPE_STAR:
- if(UseSupernovaSeedFieldSourceTerms)
- this->FeedbackFlag = SUPERNOVA_SEEDFIELD;
- break;
-}
+ }
+
+if(UseMagneticSupernovaFeedback)
+ if (Time > (this->BirthTime + this->LifeTime)){
+ this->FeedbackFlag = MAGNETIC_SUPERNOVA;
+ printf("set feedback flag\n");
+ }
+
+


return SUCCESS;

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/WriteParameterFile.C
--- a/src/enzo/WriteParameterFile.C
+++ b/src/enzo/WriteParameterFile.C
@@ -1200,10 +1200,10 @@
fprintf(fptr, "CorrectParentBoundaryFlux = %d\n", CorrectParentBoundaryFlux);

/* Supernova magnetic seed field */
- fprintf(fptr, "UseSupernovaSeedFieldSourceTerms = %"ISYM"\n", UseSupernovaSeedFieldSourceTerms);
- fprintf(fptr, "SupernovaSeedFieldRadius = %"GSYM"\n", SupernovaSeedFieldRadius);
- fprintf(fptr,"SupernovaSeedFieldEnergy = %"GSYM"\n",SupernovaSeedFieldEnergy);
- fprintf(fptr,"SupernovaSeedFieldDuration = %"GSYM"\n",SupernovaSeedFieldDuration);
+ fprintf(fptr, "UseMagneticSupernovaFeedback = %"ISYM"\n", UseMagneticSupernovaFeedback);
+ fprintf(fptr, "MagneticSupernovaRadius = %"GSYM"\n", MagneticSupernovaRadius);
+ fprintf(fptr,"MagneticSupernovaEnergy = %"GSYM"\n",MagneticSupernovaEnergy);
+ fprintf(fptr,"MagneticSupernovaDuration = %"GSYM"\n",MagneticSupernovaDuration);

/* Output current time */
time_t ID;

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/global_data.h
--- a/src/enzo/global_data.h
+++ b/src/enzo/global_data.h
@@ -1109,9 +1109,9 @@
EXTERN float GalaxySimulationPreWindVelocity[MAX_DIMENSION];

/* Supernova magnetic seed field */
-EXTERN int UseSupernovaSeedFieldSourceTerms;
-EXTERN float SupernovaSeedFieldRadius;
-EXTERN float SupernovaSeedFieldDuration;
-EXTERN float SupernovaSeedFieldEnergy;
+EXTERN int UseMagneticSupernovaFeedback;
+EXTERN float MagneticSupernovaRadius;
+EXTERN float MagneticSupernovaDuration;
+EXTERN float MagneticSupernovaEnergy;

#endif

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/hydro_rk/Grid_MHDRK2_2ndStep.C
--- a/src/enzo/hydro_rk/Grid_MHDRK2_2ndStep.C
+++ b/src/enzo/hydro_rk/Grid_MHDRK2_2ndStep.C
@@ -91,7 +91,7 @@

/* Add source terms */

- this->MHDSourceTerms(dU);
+ this->MHDSourceTerms(dU);

/* Update primitive variables */

@@ -113,7 +113,7 @@
0.5, fallback) == FAIL) {
return FAIL;
}
- this->MHDSourceTerms(dU);
+ this->MHDSourceTerms(dU);
if (this->UpdateMHDPrim(dU, 0.5, 0.5) == FAIL) {
fprintf(stderr, "Grid_MHDRK2_2ndStep: Fallback failed, give up...\n");
return FAIL;

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/hydro_rk/Grid_MHDSourceTerms.C
--- a/src/enzo/hydro_rk/Grid_MHDSourceTerms.C
+++ b/src/enzo/hydro_rk/Grid_MHDSourceTerms.C
@@ -25,6 +25,7 @@
#include "TopGridData.h"
#include "Grid.h"
#include "EOS.h"
+#include "hydro_rk/SuperNova.h"

int GetUnits(float *DensityUnits, float *LengthUnits,
float *TemperatureUnits, float *TimeUnits,
@@ -32,6 +33,8 @@
int CosmologyComputeExpansionFactor(FLOAT time, FLOAT *a, FLOAT *dadt);
int FindField(int field, int farray[], int numfields);

+void mt_init(unsigned_int seed);
+unsigned_long_int mt_random();

int grid::MHDSourceTerms(float **dU)
{
@@ -356,49 +359,81 @@
}
}

-if(UseSupernovaSeedFieldSourceTerms) {
+ if(UseMagneticSupernovaFeedback) {
+
+ int n, active_x, active_y, center_i, center_j, center_k, num_sn_cells_x, num_sn_cells_y, num_sn_cells_z;
+ snsf_source_terms S;
+ float dx, dy, dz, dist_to_sn, magnetic_energy_density;
+ float DensityUnits, LengthUnits, TemperatureUnits, TimeUnits, VelocityUnits;
+
+ if (GetUnits(&DensityUnits, &LengthUnits,&TemperatureUnits, &TimeUnits,
+ &VelocityUnits, Time) == FAIL){
+ fprintf(stderr, "Error in GetUnits.\n");
+ return FAIL;
+ }
+
+ // Converting radius from parsecs to cm, then internal units
+ float sn_radius = MagneticSupernovaRadius * 3.0856775714e18 / LengthUnits;

- int n = 0, igrid;
- int iden=FindField(Density, FieldType, NumberOfBaryonFields);
- snsf_source_terms S;
- FLOAT cell_center[3];
- FLOAT dx, dy, dz, dist_to_sn;
- int temp =1;
- int entered = 0;
+ active_x = GridDimension[0] - 2*NumberOfGhostZones;
+ active_y = GridDimension[1] - 2*NumberOfGhostZones;
+ float active_z = GridDimension[2] - 2*NumberOfGhostZones;
+
+ num_sn_cells_x = (int) (sn_radius / CellWidth[0][0]);
+ num_sn_cells_y = (int) (sn_radius / CellWidth[1][0]);
+ num_sn_cells_z = (int) (sn_radius / CellWidth[2][0]);

- for (int k = GridStartIndex[2]; k <= GridEndIndex[2]; k++) {
- for (int j = GridStartIndex[1]; j <= GridEndIndex[1]; j++) {
- for (int i = GridStartIndex[0]; i <= GridEndIndex[0]; i++, n++) {
- igrid = i+(j+k*GridDimension[1])*GridDimension[0];
-
- cell_center[0] = CellLeftEdge[0][i] + 0.5*CellWidth[0][i];
- cell_center[1] = CellLeftEdge[1][j] + 0.5*CellWidth[1][j];
- cell_center[2] = CellLeftEdge[2][k] + 0.5*CellWidth[2][k];
+ int num_sn = 0;
+ for (std::vector<SuperNova>::iterator current_sn = this->MagneticSupernovaList.begin();
+ current_sn != this->MagneticSupernovaList.end(); current_sn++){
+ num_sn++;
+ // find index of the cell nearest to the supernova center
+ // assuming that supernova in the center of that cell
+ center_i = (int)((current_sn->getPosition()[0] - GridLeftEdge[0]) / CellWidth[0][0]);
+ center_j = (int)((current_sn->getPosition()[1] - GridLeftEdge[1]) / CellWidth[1][0]);
+ center_k = (int)((current_sn->getPosition()[2] - GridLeftEdge[2]) / CellWidth[2][0]);

- for (std::vector<SuperNova>::iterator P = this->SuperNovaList.begin();
- P != this->SuperNovaList.end(); P++){
- dx = P->getPosition()[0] - cell_center[0];
- dy = P->getPosition()[1] - cell_center[1];
- dz = P->getPosition()[2] - cell_center[2];
-
- dist_to_sn = sqrt(dx*dx + dy*dy + dz*dz);
- if (dist_to_sn < 1.1*SupernovaSeedFieldRadius){
- S = P->getSourceTerms(dx, dy, dz, Time);
- double rho = BaryonField[DensNum][igrid];
+ for(int k = center_k - num_sn_cells_z; k <= center_k + num_sn_cells_z; k++){
+ for(int j = center_j - num_sn_cells_y; j <= center_j + num_sn_cells_y; j++){
+ for(int i = center_i - num_sn_cells_x; i <= center_i + num_sn_cells_x; i++){
+
+ // only add magnetic feedback on the active grid cells
+ if ((k >= GridStartIndex[2]) && (k <= GridEndIndex[2]) &&
+ (j >= GridStartIndex[1]) && (j <= GridEndIndex[1]) &&
+ (i >= GridStartIndex[0]) && (i <= GridEndIndex[0])){
+
+ dx = CellWidth[0][0] * (float)(i-center_i);
+ dy = CellWidth[1][0] * (float)(j-center_j);
+ dz = CellWidth[2][0] * (float)(k-center_k);
+
+ dist_to_sn = sqrt(dx*dx + dy*dy + dz*dz);
+ S = current_sn->getSourceTerms(dx, dy, dz, Time);

- dU[iBx][n] += S.dbx*dtFixed;
- dU[iBy][n] += S.dby*dtFixed;
- dU[iBz][n] += S.dbz*dtFixed;
- dU[iEtot][n] += S.dUtot*dtFixed;
-
- }
+ // solving for index n
+ // analogous to how igrid is calculated, but taking into acount Ghost Zones
+ n = (i - GridStartIndex[0])+((j-GridStartIndex[1]) + (k-GridStartIndex[2])*active_y) * active_x;
+
+ dU[iBx][n] += S.dbx*dtFixed;
+ dU[iBy][n] += S.dby*dtFixed;
+ dU[iBz][n] += S.dbz*dtFixed;

- }// End of SuperNovaList iteration
- } // End of k for-loop
- } // End of j for-loop
- } // End of i for-loop
+ dU[iEtot][n] += S.dUtot * dtFixed;
+
+ float activesize = active_x*active_y*active_z;
+ if (n > activesize)
+ printf("added supernova at (%"ISYM", %"ISYM", %"ISYM"), n = %"ISYM", activesize=%"ISYM", dim_x=%"ISYM", dim_y=%"ISYM",\n\
+GridStartIndices=(%"ISYM", %"ISYM", %"ISYM"), GridEndIndices=(%"ISYM", %"ISYM", %"ISYM")\n",
+ i, j, k, n, activesize, active_x, active_y, GridStartIndex[0], GridStartIndex[1], GridStartIndex[2],GridEndIndex[0], GridEndIndex[1], GridEndIndex[2]);

-} // End of UseSuperNovaSeedFieldSourceTerms scope
+ }
+
+ } // End of k for-loop
+ } // End of j for-loop
+ } // End of i for-loop
+ } // End of MagneticSupernovaList loop
+ if (num_sn > 0)
+ printf("Number of magnetic supernova: %"ISYM"\n", num_sn);
+ } // End of UseMagneticSupernovaFeedback scope




diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/hydro_rk/SuperNovaSeedField.C
--- a/src/enzo/hydro_rk/SuperNovaSeedField.C
+++ b/src/enzo/hydro_rk/SuperNovaSeedField.C
@@ -127,14 +127,14 @@

snsf_source_terms SuperNova::getSourceTerms(double dx, double dy, double dz, double enzoTime){
// ------------------------------------------------------------------- //
- // Inputs: (1) distances to current cell, dx, dy, dz //
+ // Inputs: (1) distances to current cell, dx, dy, dz //
// (2) current time of the simulation //
// //
- // Output: (1) A struct of source terms corresponding to the given //
- // supernova //
- // (i) x,y,z components of time derivative of B-field //
- // (ii) time derivative of magnetic energy density //
- // (iii) time derivative of total energy density //
+ // Output: (1) A struct of source terms corresponding to the given //
+ // supernova //
+ // (i) x,y,z components of time derivative of B-field //
+ // (ii) time derivative of magnetic energy density //
+ // (iii) time derivative of total energy density //
// ------------------------------------------------------------------- //

FLOAT phi[3], zhat_cell[3];
@@ -180,6 +180,9 @@

FLOAT r_scale = (r_cyl/characteristicLength)*\
exp(- r_s*r_s /(characteristicLength*characteristicLength));
+
+ FLOAT db_r_scale = (r_cyl/characteristicLength)*\
+ exp(- r_s*r_s /(2.0*characteristicLength*characteristicLength));
FLOAT t_exp = exp(-t_s/characteristicTime);

FLOAT db_t_exp = t_exp / characteristicTime;

diff -r a9da25a430d5 -r 9d9cf7d37603 src/enzo/macros_and_parameters.h
--- a/src/enzo/macros_and_parameters.h
+++ b/src/enzo/macros_and_parameters.h
@@ -524,7 +524,7 @@
#define MBH_THERMAL 7
#define MBH_JETS 8
#define COLOR_FIELD 9
-#define SUPERNOVA_SEEDFIELD 11
+#define MAGNETIC_SUPERNOVA 11

/* Sink particle accretion modes */



https://bitbucket.org/enzo/enzo-dev/commits/f1c21b3ebca3/
Changeset: f1c21b3ebca3
Branch: week-of-code
User: ibutsky
Date: 2018-06-21 05:51:23+00:00
Summary: New implementation UseMagneticSupernovaFeedback (previously UseSupernovaSeedFieldSourceTerms) that doesn't depend on the Star Particle class
Affected #: 14 files

diff -r 9d9cf7d37603 -r f1c21b3ebca3 doc/manual/source/physics/star_particles.rst
--- a/doc/manual/source/physics/star_particles.rst
+++ b/doc/manual/source/physics/star_particles.rst
@@ -550,13 +550,15 @@

Magnetic Supernova Feedback
----------------------------
-*Source: hydro_rk/MagneticSupernova.C*
+*Source: hydro_rk/SuperNovaSeedField.C*

Select this method by setting ``UseMagneticSupernovaFeedback = 1``
(Default = 0) and specifying the parameters below. If
``UseMagneticSupernovaFeedback == 2``, the parameters
``MagneticSupernovaRadius`` and ``MagneticSupernovaDuration`` will
-be calculated at runtime based on the cell width and time step of the most-refined grid.
+be calculated to be the minimum allowed values (see below)
+at runtime based on the cell width and time step of the most-refined grid.
+

``MagneticSupernovaEnergy`` (in units of ergs) is the total amount
of magnetic energy to be injected by a single supernova event. Defualt = 1e51
@@ -567,17 +569,19 @@
spatial exponential decay of the injected supernova energy so that all of the
energy is contained within the specified radius. For this reason, the
``MagneticSupernovaRadius`` should be at least 3 times the minimum cell width of
-the simulation. Default = 500 pc.
+the simulation. Default = 300 pc.

-``MagneticSupernovaDuration`` (in units of Myr) gives the duration of the
+``MagneticSupernovaDuration`` (in units of years) gives the duration of the
supernova magnetic energy injection. The injection mechanism is normalized so
that all of the ``MagneticSupernovaEnergy`` is injected over this
time scale. In order to inject the correct amount of energy, ``MagneticSupernovaDuration`` should be set to at least 5
-times the minimum time step of the simulation. Default = 10,000 years.
+times the minimum time step of the simulation. Default = 50,000 years.


-The following applies to Methods 0 (Cen & Ostriker) and 1 (+
-stochastic star formation). The magnetic feedback method is described fully in `Butsky et al. (2017)
+The following applies to all star formation methods that produce a
+PARTICLE_TYPE_STAR object. Methods 0 (Cen & Ostriker) and 1 (+
+stochastic star formation) have been tested extensively.
+The magnetic feedback method is described fully in `Butsky et al. (2017)
<http://adsabs.harvard.edu/abs/2017ApJ...843..113B>`_.

When a star cluster particle reaches the end of its lifetime, we inject a

diff -r 9d9cf7d37603 -r f1c21b3ebca3 src/enzo/EvolveLevel.C
--- a/src/enzo/EvolveLevel.C
+++ b/src/enzo/EvolveLevel.C
@@ -541,8 +541,8 @@
Grids[grid1]->GridData->CopyBaryonFieldToOldBaryonField();

// Find recently-supernova stars to add them the MagneticSupernovaList
- // if ((UseMagneticSupernovaFeedback) && (level > MaximumRefinementLevel - 1))
- // Grids[grid1]->GridData->AddMagneticSupernovaeToList();
+ if ((UseMagneticSupernovaFeedback) && (level > MaximumRefinementLevel - 1))
+ Grids[grid1]->GridData->AddMagneticSupernovaeToList();

/* Call hydro solver and save fluxes around subgrids.
* HD_RK and MHD_RK are the 2nd order Runge-Kutta integrations, which
@@ -717,8 +717,8 @@
if (ComovingCoordinates)
Grids[grid1]->GridData->ComovingExpansionTerms();

- // if (UseMagneticSupernovaFeedback)
- //Grids[grid1]->GridData->MagneticSupernovaList.clear();
+ if (UseMagneticSupernovaFeedback)
+ Grids[grid1]->GridData->MagneticSupernovaList.clear();

} // end loop over grids


diff -r 9d9cf7d37603 -r f1c21b3ebca3 src/enzo/Grid_AddFeedbackSphere.C
--- a/src/enzo/Grid_AddFeedbackSphere.C
+++ b/src/enzo/Grid_AddFeedbackSphere.C
@@ -991,64 +991,7 @@
/* Now it's done, unmark. */

//cstar->FeedbackFlag = NO_FEEDBACK;
-
-
- // Create a randomly-oriented SuperNova object and add it to the SuperNova Grid list
- printf("inside AddFeedbackSphere\n");
- if (cstar->ReturnFeedbackFlag() == MAGNETIC_SUPERNOVA){
- printf("inside MAGNETIC_SUPERNOVA in addfeedbackshpere \n");
-
- SuperNova P = SuperNova();
-
- // Setting up pseudo-randomly oriented toroidal magnetic field loops
- // mt_init is deterministic, so that supernovae for the same star particle
- // will always be generated in the same orientation
- mt_init((unsigned_int) cstar->ReturnID());
-
- float random_u = (float)(mt_random()%32768)/32768.0; // random variable from 0 to 1
- float random_v = (float)(mt_random()%32768)/32768.0;
- float random_phi = 2*M_PI*random_u; // 0 to 2pi
- float random_theta = acos(2*random_v-1); // 0 to pi
-
- float phi_x = sin(random_theta)*cos(random_phi);
- float phi_y = sin(random_theta)*sin(random_phi);
- float phi_z = cos(random_theta);
-
- // Birthtime of supernova is at the end of a star particle's life
- float sn_birthtime = cstar->BirthTime + cstar->LifeTime;
-
- // Convert units to system units
- // Converting time from years to seconds, then internal units
- float sn_duration = MagneticSupernovaDuration * 3.1556952e7 / TimeUnits;
- // Converting radius from parsecs to cm, then internal units
- float sn_radius = MagneticSupernovaRadius * 3.0856775714e18 / LengthUnits;
- // Converting energy from ergs to internal units
- float MassUnits = DensityUnits * POW(LengthUnits, 3);
- float sn_energy = MagneticSupernovaEnergy / (MassUnits*VelocityUnits*VelocityUnits);
-
- if (UseMagneticSupernovaFeedback > 1){
- // if UseMagneticSupernovaFeedback > 1, then we set the magnetic feedback radius and duration
- // below based on the resolution of the grid at the highest refinement level
- sn_duration = 5.0 * this->dtFixed;
- MagneticSupernovaDuration = sn_duration * TimeUnits / 3.1156952e7;
- sn_radius = 3.0 * this->CellWidth[0][0];
- MagneticSupernovaRadius = sn_radius * LengthUnits / 3.0856775714e18;
- }
-
- // Creates a supernova with magnetic feedback adds it to the grid's magnetic supernova list
- // This list is looped through in hydro_rk/Grid_MHDSourceTerms to inject the magnetic field
- if((Time > sn_birthtime) && (Time < sn_birthtime + sn_duration)){
- P.setValues(phi_x, phi_y, phi_z, cstar->pos[0], cstar->pos[1], cstar->pos[2],
- sn_radius, sn_birthtime, sn_duration, sn_energy);
-
- this->MagneticSupernovaList.push_back(P);
- printf("added supernova to list\n");
- }
- else if (Time > sn_birthtime + sn_duration)
- cstar->SetFeedbackFlag(DEATH);
-
- }
-
+

return SUCCESS;


diff -r 9d9cf7d37603 -r f1c21b3ebca3 src/enzo/Grid_FindAllStarParticles.C
--- a/src/enzo/Grid_FindAllStarParticles.C
+++ b/src/enzo/Grid_FindAllStarParticles.C
@@ -50,8 +50,6 @@
//StarType = abs(ParticleType[i]);
if (ParticleType[i] == PARTICLE_TYPE_SINGLE_STAR ||
ParticleType[i] == PARTICLE_TYPE_BLACK_HOLE ||
- (ParticleType[i] == PARTICLE_TYPE_STAR
- && UseMagneticSupernovaFeedback && level == MaximumRefinementLevel) ||
ParticleType[i] == PARTICLE_TYPE_CLUSTER ||
ParticleType[i] == PARTICLE_TYPE_COLOR_STAR ||
ParticleType[i] == PARTICLE_TYPE_MBH ||

diff -r 9d9cf7d37603 -r f1c21b3ebca3 src/enzo/Grid_FindNewStarParticles.C
--- a/src/enzo/Grid_FindNewStarParticles.C
+++ b/src/enzo/Grid_FindNewStarParticles.C
@@ -39,10 +39,6 @@

for (i = 0; i < NumberOfParticles; i++)
if (ParticleType[i] == -PARTICLE_TYPE_SINGLE_STAR ||
- (ParticleType[i] == PARTICLE_TYPE_STAR && UseMagneticSupernovaFeedback &&
- (this->Time >= ParticleAttribute[0][i] &&
- this->Time <= ParticleAttribute[0][i]+ParticleAttribute[1][i])
- && level == MaximumRefinementLevel) ||
ParticleType[i] == -PARTICLE_TYPE_BLACK_HOLE ||
ParticleType[i] == -PARTICLE_TYPE_CLUSTER ||
ParticleType[i] == -PARTICLE_TYPE_COLOR_STAR ||

diff -r 9d9cf7d37603 -r f1c21b3ebca3 src/enzo/Grid_destructor.C
--- a/src/enzo/Grid_destructor.C
+++ b/src/enzo/Grid_destructor.C
@@ -116,8 +116,6 @@
*/

//MHD stuff
- // if (UseMagneticSupernovaFeedback)
- // MagneticSupernovaList.clear();

if( UseMHDCT ){
for(i=0;i<3;i++){

diff -r 9d9cf7d37603 -r f1c21b3ebca3 src/enzo/SetDefaultGlobalValues.C
--- a/src/enzo/SetDefaultGlobalValues.C
+++ b/src/enzo/SetDefaultGlobalValues.C
@@ -982,8 +982,8 @@
/* Default == 0 -> no magnetic field contribution */
UseMagneticSupernovaFeedback = 0; // 0 = off; 1+ = on; 2 = Radius and duration calculated during runtime
MagneticSupernovaRadius = 300.0; // Total injection radius of magnetic field in parsecs
- MagneticSupernovaDuration = 1e4; // Total duration of magnetic feedback in years
- MagneticSupernovaEnergy = 1.0e51; // Total energy (ergs) injected per star particle (supernova)
+ MagneticSupernovaDuration = 5e4 ; // Total duration of magnetic feedback in years
+ MagneticSupernovaEnergy = 1.0e51; // Total energy (ergs) injected per star particle (supernova)

return SUCCESS;
}

diff -r 9d9cf7d37603 -r f1c21b3ebca3 src/enzo/StarParticleAddFeedback.C
--- a/src/enzo/StarParticleAddFeedback.C
+++ b/src/enzo/StarParticleAddFeedback.C
@@ -88,10 +88,7 @@
&TimeUnits, &VelocityUnits, Time);

count = 0;
- // clear list of Supernovae at each timestep to avoid adding duplicates in Grid_AddFeedbackSphere
- if(UseMagneticSupernovaFeedback){
- LevelArray[level]->GridData->MagneticSupernovaList.clear();
- }
+
for (cstar = AllStars; cstar; cstar = cstar->NextStar, count++) {

AddedFeedback[count] = false;
@@ -163,8 +160,7 @@
LCAPERF_START("star_FindFeedbackSphere2");
if ((cstar->ReturnFeedbackFlag() == MBH_THERMAL ||
cstar->ReturnFeedbackFlag() == MBH_JETS ||
- cstar->ReturnFeedbackFlag() == CONT_SUPERNOVA ||
- cstar->ReturnFeedbackFlag() == MAGNETIC_SUPERNOVA) &&
+ cstar->ReturnFeedbackFlag() == CONT_SUPERNOVA) &&
LevelArray[level+1] != NULL)
cstar->FindFeedbackSphere
(LevelArray, level+1, influenceRadius, EjectaDensity, EjectaThermalEnergy,

diff -r 9d9cf7d37603 -r f1c21b3ebca3 src/enzo/Star_Accrete.C
--- a/src/enzo/Star_Accrete.C
+++ b/src/enzo/Star_Accrete.C
@@ -29,15 +29,10 @@

int Star::Accrete(void)
{
- if (UseMagneticSupernovaFeedback){
- if (this->CurrentGrid == NULL ||(this->naccretions == 0))
- return SUCCESS;
- }
- else {
- if (this->CurrentGrid == NULL ||
- (this->naccretions == 0 && fabs(this->DeltaMass) < tiny_number))
- return SUCCESS;
- }
+ if (this->CurrentGrid == NULL ||
+ (this->naccretions == 0 && fabs(this->DeltaMass) < tiny_number))
+ return SUCCESS;
+

const double Msun = 1.989e33, yr = 3.1557e7;
int dim, i, n, count;

diff -r 9d9cf7d37603 -r f1c21b3ebca3 src/enzo/Star_CalculateFeedbackParameters.C
--- a/src/enzo/Star_CalculateFeedbackParameters.C
+++ b/src/enzo/Star_CalculateFeedbackParameters.C
@@ -247,11 +247,6 @@

break;

- case MAGNETIC_SUPERNOVA:
- printf("inside Star_CalculateFeedbackParameters\n");
- Radius = 1.1*MagneticSupernovaRadius * pc / LengthUnits; // Real injection radius SupernovaSeedFieldRadius
- break;
-
} // ENDSWITCH FeedbackFlag

// fprintf(stdout, "star::CFP: EjectaThermalEnergy = %g, EjectaDensity = %g,

diff -r 9d9cf7d37603 -r f1c21b3ebca3 src/enzo/Star_HitEndpoint.C
--- a/src/enzo/Star_HitEndpoint.C
+++ b/src/enzo/Star_HitEndpoint.C
@@ -101,15 +101,6 @@
case PopIII_CF:
break;

- case NormalStar:
- if (UseMagneticSupernovaFeedback)
- if (this->FeedbackFlag == DEATH){
- result = KILL_STAR;
- printf("going to kill star\n");
- }
-
- break;
-
} // ENDSWITCH

return result;

diff -r 9d9cf7d37603 -r f1c21b3ebca3 src/enzo/Star_SetFeedbackFlag.C
--- a/src/enzo/Star_SetFeedbackFlag.C
+++ b/src/enzo/Star_SetFeedbackFlag.C
@@ -137,14 +137,5 @@

}

-if(UseMagneticSupernovaFeedback)
- if (Time > (this->BirthTime + this->LifeTime)){
- this->FeedbackFlag = MAGNETIC_SUPERNOVA;
- printf("set feedback flag\n");
- }
-
-
-
-
return SUCCESS;
}

diff -r 9d9cf7d37603 -r f1c21b3ebca3 src/enzo/hydro_rk/Grid_MHDSourceTerms.C
--- a/src/enzo/hydro_rk/Grid_MHDSourceTerms.C
+++ b/src/enzo/hydro_rk/Grid_MHDSourceTerms.C
@@ -377,16 +377,14 @@

active_x = GridDimension[0] - 2*NumberOfGhostZones;
active_y = GridDimension[1] - 2*NumberOfGhostZones;
- float active_z = GridDimension[2] - 2*NumberOfGhostZones;

num_sn_cells_x = (int) (sn_radius / CellWidth[0][0]);
num_sn_cells_y = (int) (sn_radius / CellWidth[1][0]);
num_sn_cells_z = (int) (sn_radius / CellWidth[2][0]);

- int num_sn = 0;
for (std::vector<SuperNova>::iterator current_sn = this->MagneticSupernovaList.begin();
current_sn != this->MagneticSupernovaList.end(); current_sn++){
- num_sn++;
+
// find index of the cell nearest to the supernova center
// assuming that supernova in the center of that cell
center_i = (int)((current_sn->getPosition()[0] - GridLeftEdge[0]) / CellWidth[0][0]);
@@ -419,20 +417,12 @@

dU[iEtot][n] += S.dUtot * dtFixed;

- float activesize = active_x*active_y*active_z;
- if (n > activesize)
- printf("added supernova at (%"ISYM", %"ISYM", %"ISYM"), n = %"ISYM", activesize=%"ISYM", dim_x=%"ISYM", dim_y=%"ISYM",\n\
-GridStartIndices=(%"ISYM", %"ISYM", %"ISYM"), GridEndIndices=(%"ISYM", %"ISYM", %"ISYM")\n",
- i, j, k, n, activesize, active_x, active_y, GridStartIndex[0], GridStartIndex[1], GridStartIndex[2],GridEndIndex[0], GridEndIndex[1], GridEndIndex[2]);
-
}

} // End of k for-loop
} // End of j for-loop
} // End of i for-loop
} // End of MagneticSupernovaList loop
- if (num_sn > 0)
- printf("Number of magnetic supernova: %"ISYM"\n", num_sn);
} // End of UseMagneticSupernovaFeedback scope



diff -r 9d9cf7d37603 -r f1c21b3ebca3 src/enzo/macros_and_parameters.h
--- a/src/enzo/macros_and_parameters.h
+++ b/src/enzo/macros_and_parameters.h
@@ -524,7 +524,6 @@
#define MBH_THERMAL 7
#define MBH_JETS 8
#define COLOR_FIELD 9
-#define MAGNETIC_SUPERNOVA 11

/* Sink particle accretion modes */



https://bitbucket.org/enzo/enzo-dev/commits/076a9f200aeb/
Changeset: 076a9f200aeb
Branch: week-of-code
User: ibutsky
Date: 2018-10-24 04:21:23+00:00
Summary: cleaning up magnetic supernova feedback to for pull request
Affected #: 8 files

diff -r f1c21b3ebca3 -r 076a9f200aeb doc/manual/source/physics/star_particles.rst
--- a/doc/manual/source/physics/star_particles.rst
+++ b/doc/manual/source/physics/star_particles.rst
@@ -568,8 +568,8 @@
which to inject supernova energy. The injection mechanism normalizes the
spatial exponential decay of the injected supernova energy so that all of the
energy is contained within the specified radius. For this reason, the
-``MagneticSupernovaRadius`` should be at least 3 times the minimum cell width of
-the simulation. Default = 300 pc.
+``MagneticSupernovaRadius`` should be at least 1.5 times the minimum cell width of
+the simulation (in pc). Default = 300 pc.

``MagneticSupernovaDuration`` (in units of years) gives the duration of the
supernova magnetic energy injection. The injection mechanism is normalized so

diff -r f1c21b3ebca3 -r 076a9f200aeb src/enzo/EvolveLevel.C
--- a/src/enzo/EvolveLevel.C
+++ b/src/enzo/EvolveLevel.C
@@ -541,7 +541,7 @@
Grids[grid1]->GridData->CopyBaryonFieldToOldBaryonField();

// Find recently-supernova stars to add them the MagneticSupernovaList
- if ((UseMagneticSupernovaFeedback) && (level > MaximumRefinementLevel - 1))
+ if ((UseMagneticSupernovaFeedback) && (level == MaximumRefinementLevel))
Grids[grid1]->GridData->AddMagneticSupernovaeToList();

/* Call hydro solver and save fluxes around subgrids.

diff -r f1c21b3ebca3 -r 076a9f200aeb src/enzo/Grid_AddFeedbackSphere.C
--- a/src/enzo/Grid_AddFeedbackSphere.C
+++ b/src/enzo/Grid_AddFeedbackSphere.C
@@ -43,9 +43,6 @@

int FindField(int field, int farray[], int numfields);

-void mt_init(unsigned_int seed);
-unsigned_long_int mt_random();
-
int grid::AddFeedbackSphere(Star *cstar, int level, float radius, float DensityUnits,
float LengthUnits, float VelocityUnits,
float TemperatureUnits, float TimeUnits, double EjectaDensity,

diff -r f1c21b3ebca3 -r 076a9f200aeb src/enzo/Grid_AddMagneticSupernovaeToList.C
--- a/src/enzo/Grid_AddMagneticSupernovaeToList.C
+++ b/src/enzo/Grid_AddMagneticSupernovaeToList.C
@@ -10,7 +10,6 @@
/
************************************************************************/

-#define USE
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
@@ -20,6 +19,7 @@
#include "macros_and_parameters.h"
#include "typedefs.h"
#include "global_data.h"
+#include "phys_constants.h"
#include "Fluxes.h"
#include "GridList.h"
#include "ExternalBoundary.h"
@@ -29,7 +29,7 @@

int GetUnits(float *DensityUnits, float *LengthUnits,
float *TemperatureUnits, float *TimeUnits,
- float *VelocityUnits, FLOAT Time);
+ float *VelocityUnits, double *MassUnits, FLOAT Time);

void mt_init(unsigned_int seed);
unsigned_long_int mt_random();
@@ -46,7 +46,7 @@

float DensityUnits, LengthUnits, TemperatureUnits, TimeUnits, VelocityUnits, MassUnits, EnergyUnits;
if (GetUnits(&DensityUnits, &LengthUnits,&TemperatureUnits, &TimeUnits,
- &VelocityUnits, Time) == FAIL){
+ &VelocityUnits, &MassUnits, Time) == FAIL){
fprintf(stderr, "Error in GetUnits.\n");
return FAIL;
}
@@ -56,19 +56,26 @@
// below based on the resolution of the grid at the highest refinement level
if (UseMagneticSupernovaFeedback > 1){
sn_duration = 5.0 * dtFixed;
- MagneticSupernovaDuration = sn_duration * TimeUnits / 3.1156952e7;
- sn_radius = 3.0 * this->CellWidth[0][0];
- MagneticSupernovaRadius = sn_radius * LengthUnits / 3.0856775714e18;
+ MagneticSupernovaDuration = sn_duration * TimeUnits / SecondsPerYear;
+ sn_radius = 1.5 * this->CellWidth[0][0];
+ MagneticSupernovaRadius = sn_radius * LengthUnits / pc;
}
else {
// Converting time from years to seconds, then internal units
- sn_duration = MagneticSupernovaDuration * 3.1556952e7 / TimeUnits;
-
+ sn_duration = MagneticSupernovaDuration * SecondsPerYear / TimeUnits;
+ if(sn_duration < 5.0 * dtFixed) {
+ printf("WARNING: Magnetic supernova feedback duration is less than the recommended minimum of 5 x dtFixed\n");
+ printf("Current dtFixed = %e years \n", dtFixed * TimeUnits / SecondsPerYear);
+ }
// Converting radius from parsecs to cm, then internal units
- sn_radius = MagneticSupernovaRadius * 3.0856775714e18 / LengthUnits;
+ sn_radius = MagneticSupernovaRadius * pc / LengthUnits;
+ if(sn_radius < 1.5 * this->CellWidth[0][0]){
+ printf("WARNING: Magnetic supernova feedback radius is less than the recommended minimum of 1.5 x CellWidth\n");
+ printf("Current CellWidth = %e pc \n", this->CellWidth[0][0] * LengthUnits / pc);
+ }
+
}
// Converting energy from ergs to internal units
- MassUnits = DensityUnits * POW(LengthUnits, 3);
sn_energy = MagneticSupernovaEnergy / (MassUnits*VelocityUnits*VelocityUnits);

for (int star_id = 0; star_id < this->NumberOfParticles; star_id++){

diff -r f1c21b3ebca3 -r 076a9f200aeb src/enzo/hydro_rk/Grid_MHDRK2_2ndStep.C
--- a/src/enzo/hydro_rk/Grid_MHDRK2_2ndStep.C
+++ b/src/enzo/hydro_rk/Grid_MHDRK2_2ndStep.C
@@ -91,7 +91,7 @@

/* Add source terms */

- this->MHDSourceTerms(dU);
+ this->MHDSourceTerms(dU);

/* Update primitive variables */

@@ -113,7 +113,7 @@
0.5, fallback) == FAIL) {
return FAIL;
}
- this->MHDSourceTerms(dU);
+ this->MHDSourceTerms(dU);
if (this->UpdateMHDPrim(dU, 0.5, 0.5) == FAIL) {
fprintf(stderr, "Grid_MHDRK2_2ndStep: Fallback failed, give up...\n");
return FAIL;

diff -r f1c21b3ebca3 -r 076a9f200aeb src/enzo/hydro_rk/Grid_MHDSourceTerms.C
--- a/src/enzo/hydro_rk/Grid_MHDSourceTerms.C
+++ b/src/enzo/hydro_rk/Grid_MHDSourceTerms.C
@@ -19,6 +19,7 @@
#include "macros_and_parameters.h"
#include "typedefs.h"
#include "global_data.h"
+#include "phys_constants.h"
#include "Fluxes.h"
#include "GridList.h"
#include "ExternalBoundary.h"
@@ -373,15 +374,17 @@
}

// Converting radius from parsecs to cm, then internal units
- float sn_radius = MagneticSupernovaRadius * 3.0856775714e18 / LengthUnits;
+ float sn_radius = MagneticSupernovaRadius * pc / LengthUnits;

active_x = GridDimension[0] - 2*NumberOfGhostZones;
active_y = GridDimension[1] - 2*NumberOfGhostZones;

- num_sn_cells_x = (int) (sn_radius / CellWidth[0][0]);
- num_sn_cells_y = (int) (sn_radius / CellWidth[1][0]);
- num_sn_cells_z = (int) (sn_radius / CellWidth[2][0]);
-
+ // the number of additional cells that receive magnetic supernova feedback.
+ // assuming the supernova is in the center of one cell
+ num_sn_cells_x = (int) ((sn_radius - 0.5*CellWidth[0][0])/ CellWidth[0][0]);
+ num_sn_cells_y = (int) ((sn_radius - 0.5*CellWidth[1][0])/ CellWidth[1][0]);
+ num_sn_cells_z = (int) ((sn_radius - 0.5*CellWidth[2][0])/ CellWidth[2][0]);
+
for (std::vector<SuperNova>::iterator current_sn = this->MagneticSupernovaList.begin();
current_sn != this->MagneticSupernovaList.end(); current_sn++){

@@ -409,7 +412,7 @@

// solving for index n
// analogous to how igrid is calculated, but taking into acount Ghost Zones
- n = (i - GridStartIndex[0])+((j-GridStartIndex[1]) + (k-GridStartIndex[2])*active_y) * active_x;
+ n = (i - GridStartIndex[0])+((j-GridStartIndex[1]) + (k-GridStartIndex[2])*active_y) * active_x;

dU[iBx][n] += S.dbx*dtFixed;
dU[iBy][n] += S.dby*dtFixed;

diff -r f1c21b3ebca3 -r 076a9f200aeb src/enzo/hydro_rk/LLF_Zero_MHD.C
--- a/src/enzo/hydro_rk/LLF_Zero_MHD.C
+++ b/src/enzo/hydro_rk/LLF_Zero_MHD.C
@@ -34,8 +34,7 @@

// compute priml and primr
int iprim;
- int idual = (DualEnergyFormalism) ? 1 : 0;
- for (int field = 0; field < NEQ_MHD-idual; field++) {
+ for (int field = 0; field < NEQ_MHD-DualEnergyFormalism; field++) {
for (int i = 0; i < ActiveSize+1; i++) {
iprim = i + NumberOfGhostZones - 1;
priml[field][i] = prim[field][iprim];
@@ -54,9 +53,9 @@
iprim = i+NumberOfGhostZones-1;
for (int field = 0; field < NSpecies; field++) {
if (FluxLine[iD][i] >= 0) {
- species[field][i] = prim[field+NEQ_MHD-idual][iprim ];
+ species[field][i] = prim[field+NEQ_MHD-DualEnergyFormalism][iprim ];
} else {
- species[field][i] = prim[field+NEQ_MHD-idual][iprim+1];
+ species[field][i] = prim[field+NEQ_MHD-DualEnergyFormalism][iprim+1];
}
}
sum = 0;
@@ -77,9 +76,9 @@
iprim = i+NumberOfGhostZones-1;
for (int field = 0; field < NColor; field++) {
if (FluxLine[iD][i] >= 0) {
- colors[field][i] = prim[field+NEQ_MHD-idual+NSpecies][iprim ];
+ colors[field][i] = prim[field+NEQ_MHD-DualEnergyFormalism+NSpecies][iprim ];
} else {
- colors[field][i] = prim[field+NEQ_MHD-idual+NSpecies][iprim+1];
+ colors[field][i] = prim[field+NEQ_MHD-DualEnergyFormalism+NSpecies][iprim+1];
}
}
for (int field = 0; field < NColor; field++) {

diff -r f1c21b3ebca3 -r 076a9f200aeb src/enzo/phys_constants.h
--- a/src/enzo/phys_constants.h
+++ b/src/enzo/phys_constants.h
@@ -60,4 +60,7 @@
#define kpc 3.0857e21
#define pc 3.0857e18

+/* Time units */
+#define SecondsPerYear 3.1556952e7
+
#endif


https://bitbucket.org/enzo/enzo-dev/commits/4c537ac40bce/
Changeset: 4c537ac40bce
Branch: week-of-code
User: gbryan
Date: 2018-10-24 16:36:23+00:00
Summary: Merged in ibutsky/enzo-dev (pull request #421)

Fixing memory leak in magnetic supernova feedback

Approved-by: Britton Smith <britto...@gmail.com>
Approved-by: Brian O'Shea <os...@msu.edu>
Approved-by: Greg Bryan <gbr...@astro.columbia.edu>
Affected #: 28 files

diff -r bc76c0b9ebf0 -r 4c537ac40bce doc/manual/source/physics/star_particles.rst
--- a/doc/manual/source/physics/star_particles.rst
+++ b/doc/manual/source/physics/star_particles.rst
@@ -552,29 +552,36 @@
----------------------------
*Source: hydro_rk/SuperNovaSeedField.C*

-Select this method by setting ``UseSupernovaSeedFieldSourceTerms = 1``
-(Default = 0) and
-specifying the following parameters:
+Select this method by setting ``UseMagneticSupernovaFeedback = 1``
+(Default = 0) and specifying the parameters below. If
+``UseMagneticSupernovaFeedback == 2``, the parameters
+``MagneticSupernovaRadius`` and ``MagneticSupernovaDuration`` will
+be calculated to be the minimum allowed values (see below)
+at runtime based on the cell width and time step of the most-refined grid.

-``SupernovaSeedFieldTotalEnergy`` (in units of ergs) is the total amount
-of magnetic energy to be injected by a single supernova event. Defualt = 0.0.

-``SupernovaSeedFieldRadius`` (in units of parsecs) gives the scale over
+``MagneticSupernovaEnergy`` (in units of ergs) is the total amount
+of magnetic energy to be injected by a single supernova event. Defualt = 1e51
+ergs.
+
+``MagneticSupernovaRadius`` (in units of parsecs) gives the scale over
which to inject supernova energy. The injection mechanism normalizes the
spatial exponential decay of the injected supernova energy so that all of the
energy is contained within the specified radius. For this reason, the
-``SupernovaSeedFieldRadius`` should be at least 3 times the minimum cell width of
-the simulation. Default = 0.0.
+``MagneticSupernovaRadius`` should be at least 1.5 times the minimum cell width of
+the simulation (in pc). Default = 300 pc.

-``SupernovaSeedFieldDuration`` (in units of Myr) gives the duration of the
+``MagneticSupernovaDuration`` (in units of years) gives the duration of the
supernova magnetic energy injection. The injection mechanism is normalized so
-that all of the ``SupernovaSeedFieldTotalEnergy`` is injected over this
-time scale. In order to inject the correct amount of energy, ``SupernovaSeedFieldDuration`` should be set to at least 4
-times the minimum time step of the simulation. Default = 0.0.
+that all of the ``MagneticSupernovaEnergy`` is injected over this
+time scale. In order to inject the correct amount of energy, ``MagneticSupernovaDuration`` should be set to at least 5
+times the minimum time step of the simulation. Default = 50,000 years.


-The following applies to Methods 0 (Cen & Ostriker) and 1 (+
-stochastic star formation). The magnetic feedback method is described fully in `Butsky et al. (2017)
+The following applies to all star formation methods that produce a
+PARTICLE_TYPE_STAR object. Methods 0 (Cen & Ostriker) and 1 (+
+stochastic star formation) have been tested extensively.
+The magnetic feedback method is described fully in `Butsky et al. (2017)
<http://adsabs.harvard.edu/abs/2017ApJ...843..113B>`_.

When a star cluster particle reaches the end of its lifetime, we inject a

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/EnzoTiming.h
--- a/src/enzo/EnzoTiming.h
+++ b/src/enzo/EnzoTiming.h
@@ -29,8 +29,15 @@
#include <cstring>
#include <map>

-#define min(A,B) ((A) < (B) ? (A) : (B))
-#define max(A,B) ((A) > (B) ? (A) : (B))
+template <typename T>
+bool min(const T& A, const T& B) {
+ return A < B ? A : B;
+}
+
+template <typename T>
+bool max(const T& A, const T& B) {
+ return A > B ? A : B;
+}

double ReturnWallTime(void);
void Reduce_Times(double time, double *time_array);

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/EvolveLevel.C
--- a/src/enzo/EvolveLevel.C
+++ b/src/enzo/EvolveLevel.C
@@ -540,6 +540,10 @@

Grids[grid1]->GridData->CopyBaryonFieldToOldBaryonField();

+ // Find recently-supernova stars to add them the MagneticSupernovaList
+ if ((UseMagneticSupernovaFeedback) && (level == MaximumRefinementLevel))
+ Grids[grid1]->GridData->AddMagneticSupernovaeToList();
+
/* Call hydro solver and save fluxes around subgrids.
* HD_RK and MHD_RK are the 2nd order Runge-Kutta integrations, which
* require two steps (*_1stStep and *_2ndStep)
@@ -547,7 +551,7 @@
* All others (PPM, Zeus, MHD_Li/CT) are called from SolveHydroEquations
*/

-
+
if( HydroMethod != HD_RK && HydroMethod != MHD_RK ){
Grids[grid1]->GridData->SolveHydroEquations(LevelCycleCount[level],
NumberOfSubgrids[grid1], SubgridFluxesEstimate[grid1], level);
@@ -713,7 +717,10 @@
if (ComovingCoordinates)
Grids[grid1]->GridData->ComovingExpansionTerms();

- } // end loop over grids
+ if (UseMagneticSupernovaFeedback)
+ Grids[grid1]->GridData->MagneticSupernovaList.clear();
+
+ } // end loop over grids

/* Finalize (accretion, feedback, etc.) star particles */


diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/FreeRealMem.C
--- /dev/null
+++ b/src/enzo/FreeRealMem.C
@@ -0,0 +1,199 @@
+#ifdef TASKMAP
+
+#ifdef USE_LL
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include "llapi.h"
+
+#include "macros_and_parameters.h"
+
+
+Eint64 FreeRealMem( char *node )
+{
+
+ LL_element *queryObject;
+ LL_element *job, *step;
+
+ Eint32 rc, obj_count, err_code, ok;
+
+ Eint64 free;
+ Eint64 freemem;
+ Eint64 def_mem;
+
+ def_mem = (Eint64)(12.0); /* minimum memory on DataStar */
+
+ Eint32 node_number;
+
+#ifdef SEABORG
+ sscanf(node, "s%5d", &node_number);
+ fprintf(stderr, "Seaborg Node %s number %d\n", node, node_number);
+
+ if ( 701 <= node_number && node_number <= 713 ) {
+ def_mem = (Eint64)(56.0);
+ } else {
+
+ if ( 3701 <= node_number && node_number <= 5213 ) {
+ def_mem = (Eint64)(28.0);
+ } else {
+ def_mem = (Eint64)(14.0);
+ }
+
+ }
+#endif
+
+#ifdef DATASTAR
+ sscanf(node, "ds%3d", &node_number);
+ fprintf(stderr, "DataStar Node %s number %d\n", node, node_number);
+
+ if ( 4 <= node_number && node_number <= 11 ) {
+ def_mem = (Eint64)(120.0);
+ } else {
+
+ if ( 300 <= node_number && node_number <= 395 ) {
+ def_mem = (Eint64)(27.0);
+ } else {
+ def_mem = (Eint64)(12.0);
+ }
+
+ }
+#endif
+
+ def_mem = def_mem * 1024.0;
+ fprintf(stderr,"Default node memory on node %s [%d] is %"ISYM" MBytes\n", node, node_number, def_mem);
+
+ ok = 0;
+
+ /* Initialize the query */
+
+ queryObject = ll_query(MACHINES);
+
+ if (!queryObject) {
+ fprintf(stderr, "Query MACHINES: ll_query() returns NULL.\n");
+ freemem = def_mem;
+ return(freemem);
+ }
+
+ char **nodelist;
+ nodelist = (char **) malloc(2*sizeof(char *));
+ char nodename[6];
+ strcpy(nodename, node);
+
+ nodelist[0] = nodename;
+ nodelist[1] = NULL;
+
+ rc = ll_set_request(queryObject, QUERY_HOST, nodelist, ALL_DATA);
+
+ if (rc) {
+ fprintf(stderr, "Query MACHINES: ll_set_request() return code is non-zero.\n");
+ freemem = def_mem;
+ return(freemem);
+ }
+
+ job = ll_get_objs(queryObject, LL_CM, NULL, &obj_count, &err_code);
+
+ /* Process the job objects */
+
+ rc = ll_get_data(job, LL_MachineFreeRealMemory64, &free);
+
+ if (rc) {
+ fprintf(stderr, "Get data: ll_get_data() return code is non-zero: %d\n", rc);
+ freemem = def_mem;
+ return(freemem);
+ }
+
+/*
+ fprintf(stderr, "Free: %lld MBytes\n", free);
+*/
+
+ ll_free_objs(queryObject);
+ ll_deallocate(queryObject);
+
+ freemem = (Eint64)(free);
+
+ return(freemem);
+}
+
+#else
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "macros_and_parameters.h"
+
+Eint64 FreeRealMem( char *node )
+{
+
+ Eint64 freemem;
+ Eint64 def_mem;
+
+ def_mem = (Eint64)(12.5); /* minimum memory of DataStar */
+
+ Eint32 node_number;
+
+
+#ifdef SEABORG
+ sscanf(node, "s%5d", &node_number);
+ fprintf(stderr, "Seaborg Node %s number %d\n", node, node_number);
+
+ if ( 701 <= node_number && node_number <= 713 ) {
+ def_mem = (Eint64)(56.0);
+ } else {
+
+ if ( 3701 <= node_number && node_number <= 5213 ) {
+ def_mem = (Eint64)(28.0);
+ } else {
+ def_mem = (Eint64)(14.0);
+ }
+
+ }
+#endif
+
+#ifdef DATASTAR
+ sscanf(node, "ds%3d", &node_number);
+ fprintf(stderr, "DataStarNode %s number %d\n", node, node_number);
+
+ if ( 4 <= node_number && node_number <= 11 ) {
+ def_mem = (Eint64)(120.0);
+ } else {
+
+ if ( 300 <= node_number && node_number <= 395 ) {
+ def_mem = (Eint64)(27.0);
+ } else {
+ def_mem = (Eint64)(12.0);
+ }
+
+ }
+#endif
+
+ def_mem = def_mem * 1024.0;
+ fprintf(stderr,"Default node memory on node %s [%d] is %"ISYM" MBytes\n", node, node_number, def_mem);
+
+ freemem = def_mem;
+
+ return(freemem);
+}
+
+#endif
+
+#else
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "macros_and_parameters.h"
+
+Eint64 FreeRealMem( char *node )
+{
+
+ Eint64 freemem;
+
+ fprintf(stderr, "Error in FreeRealMem - the TASKMAP macro is not defined! Default to 12.0 GBytes.\n");
+
+ freemem = (Eint64)(12.0*1024.0); /* minimum memory on DataStar */
+
+ return(freemem);
+}
+
+#endif

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/FreeRealMem.c
--- a/src/enzo/FreeRealMem.c
+++ /dev/null
@@ -1,199 +0,0 @@
-#ifdef TASKMAP
-
-#ifdef USE_LL
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include "llapi.h"
-
-#include "macros_and_parameters.h"
-
-
-Eint64 FreeRealMem( char *node )
-{
-
- LL_element *queryObject;
- LL_element *job, *step;
-
- Eint32 rc, obj_count, err_code, ok;
-
- Eint64 free;
- Eint64 freemem;
- Eint64 def_mem;
-
- def_mem = (Eint64)(12.0); /* minimum memory on DataStar */
-
- Eint32 node_number;
-
-#ifdef SEABORG
- sscanf(node, "s%5d", &node_number);
- fprintf(stderr, "Seaborg Node %s number %d\n", node, node_number);
-
- if ( 701 <= node_number && node_number <= 713 ) {
- def_mem = (Eint64)(56.0);
- } else {
-
- if ( 3701 <= node_number && node_number <= 5213 ) {
- def_mem = (Eint64)(28.0);
- } else {
- def_mem = (Eint64)(14.0);
- }
-
- }
-#endif
-
-#ifdef DATASTAR
- sscanf(node, "ds%3d", &node_number);
- fprintf(stderr, "DataStar Node %s number %d\n", node, node_number);
-
- if ( 4 <= node_number && node_number <= 11 ) {
- def_mem = (Eint64)(120.0);
- } else {
-
- if ( 300 <= node_number && node_number <= 395 ) {
- def_mem = (Eint64)(27.0);
- } else {
- def_mem = (Eint64)(12.0);
- }
-
- }
-#endif
-
- def_mem = def_mem * 1024.0;
- fprintf(stderr,"Default node memory on node %s [%d] is %"ISYM" MBytes\n", node, node_number, def_mem);
-
- ok = 0;
-
- /* Initialize the query */
-
- queryObject = ll_query(MACHINES);
-
- if (!queryObject) {
- fprintf(stderr, "Query MACHINES: ll_query() returns NULL.\n");
- freemem = def_mem;
- return(freemem);
- }
-
- char **nodelist;
- nodelist = (char **) malloc(2*sizeof(char *));
- char nodename[6];
- strcpy(nodename, node);
-
- nodelist[0] = nodename;
- nodelist[1] = NULL;
-
- rc = ll_set_request(queryObject, QUERY_HOST, nodelist, ALL_DATA);
-
- if (rc) {
- fprintf(stderr, "Query MACHINES: ll_set_request() return code is non-zero.\n");
- freemem = def_mem;
- return(freemem);
- }
-
- job = ll_get_objs(queryObject, LL_CM, NULL, &obj_count, &err_code);
-
- /* Process the job objects */
-
- rc = ll_get_data(job, LL_MachineFreeRealMemory64, &free);
-
- if (rc) {
- fprintf(stderr, "Get data: ll_get_data() return code is non-zero: %d\n", rc);
- freemem = def_mem;
- return(freemem);
- }
-
-/*
- fprintf(stderr, "Free: %lld MBytes\n", free);
-*/
-
- ll_free_objs(queryObject);
- ll_deallocate(queryObject);
-
- freemem = (Eint64)(free);
-
- return(freemem);
-}
-
-#else
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "macros_and_parameters.h"
-
-Eint64 FreeRealMem( char *node )
-{
-
- Eint64 freemem;
- Eint64 def_mem;
-
- def_mem = (Eint64)(12.5); /* minimum memory of DataStar */
-
- Eint32 node_number;
-
-
-#ifdef SEABORG
- sscanf(node, "s%5d", &node_number);
- fprintf(stderr, "Seaborg Node %s number %d\n", node, node_number);
-
- if ( 701 <= node_number && node_number <= 713 ) {
- def_mem = (Eint64)(56.0);
- } else {
-
- if ( 3701 <= node_number && node_number <= 5213 ) {
- def_mem = (Eint64)(28.0);
- } else {
- def_mem = (Eint64)(14.0);
- }
-
- }
-#endif
-
-#ifdef DATASTAR
- sscanf(node, "ds%3d", &node_number);
- fprintf(stderr, "DataStarNode %s number %d\n", node, node_number);
-
- if ( 4 <= node_number && node_number <= 11 ) {
- def_mem = (Eint64)(120.0);
- } else {
-
- if ( 300 <= node_number && node_number <= 395 ) {
- def_mem = (Eint64)(27.0);
- } else {
- def_mem = (Eint64)(12.0);
- }
-
- }
-#endif
-
- def_mem = def_mem * 1024.0;
- fprintf(stderr,"Default node memory on node %s [%d] is %"ISYM" MBytes\n", node, node_number, def_mem);
-
- freemem = def_mem;
-
- return(freemem);
-}
-
-#endif
-
-#else
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "macros_and_parameters.h"
-
-Eint64 FreeRealMem( char *node )
-{
-
- Eint64 freemem;
-
- fprintf(stderr, "Error in FreeRealMem - the TASKMAP macro is not defined! Default to 12.0 GBytes.\n");
-
- freemem = (Eint64)(12.0*1024.0); /* minimum memory on DataStar */
-
- return(freemem);
-}
-
-#endif

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/Grid.h
--- a/src/enzo/Grid.h
+++ b/src/enzo/Grid.h
@@ -11,6 +11,7 @@
************************************************************************/
#ifndef GRID_DEFINED__
#define GRID_DEFINED__
+#include <vector>
#include "ProtoSubgrid.h"
#include "ListOfParticles.h"
#include "region.h"
@@ -20,7 +21,6 @@
#include "Star.h"
#include "FOF_allvars.h"
#include "MemoryPool.h"
-#include "list.h"
#include "hydro_rk/SuperNova.h"
#ifdef ECUDA
#include "hydro_rk/CudaMHD.h"
@@ -3011,11 +3011,10 @@
int MHDCT_ConvertEnergyToConservedS();
int MHDCT_ConvertEnergyToSpecificS();

- //List of SuperNova objects that each grid needs to keep track of
-
- List<SuperNova> SuperNovaList;
-
-
+ // used if UseMagneticSupernovaFeedback is turned on
+ int AddMagneticSupernovaeToList();
+ //List of SuperNova objects that each grid needs to keep track of
+ std::vector<SuperNova> MagneticSupernovaList;
};

// inline int grid::ReadRandomForcingFields (FILE *main_file_pointer);

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/Grid_AddFeedbackSphere.C
--- a/src/enzo/Grid_AddFeedbackSphere.C
+++ b/src/enzo/Grid_AddFeedbackSphere.C
@@ -43,8 +43,6 @@

int FindField(int field, int farray[], int numfields);

-void mt_init(unsigned_int seed);
-
int grid::AddFeedbackSphere(Star *cstar, int level, float radius, float DensityUnits,
float LengthUnits, float VelocityUnits,
float TemperatureUnits, float TimeUnits, double EjectaDensity,
@@ -990,48 +988,7 @@
/* Now it's done, unmark. */

//cstar->FeedbackFlag = NO_FEEDBACK;
-
-
- // Create a randomly-oriented SuperNova object and add it to the SuperNova Grid list
- if (cstar->FeedbackFlag == SUPERNOVA_SEEDFIELD) {
- if(UseSupernovaSeedFieldSourceTerms){
-
- SuperNova *P = new SuperNova();
- int mt_seed = 100;
- mt_init(mt_seed);
- float random_u = (float)mt_seed/100.0; // random variable from 0 to 1
- float random_v = (float)mt_seed/100.0;
- float random_phi = 2*M_PI*random_u; // 0 to 2pi
- float random_theta = acos(2*random_v-1); // 0 to pi
- // Setting up randomly oriented magnetic feedback of supernova
- float phi_x = sin(random_theta)*cos(random_phi);
- float phi_y = sin(random_theta)*sin(random_phi);
- float phi_z = cos(random_theta);
-
- // Birthtime of supernova is at the end of a star particle's life
- float sn_birthtime = cstar->BirthTime + cstar->LifeTime;
-
- // Convert units to system units
- // Converting time from years to seconds, then internal units
- float sn_duration = SupernovaSeedFieldDuration * 3.1556952e7 / TimeUnits;
- // Converting radius from parsecs to cm, then internal units
- float sn_radius = SupernovaSeedFieldRadius * 3.0856775714e18 / LengthUnits;
- // Converting energy from ergs to internal units
- float MassUnits = DensityUnits * POW(LengthUnits, 3);
- float sn_energy = SupernovaSeedFieldEnergy / (MassUnits*VelocityUnits*VelocityUnits);
-
- // Creates a supernova with magnetic feedback set by user-defined parameters and
- // adds it to supernova list
- if((Time > sn_birthtime) && (Time < sn_birthtime + SupernovaSeedFieldDuration)){
- P->setValues(phi_x, phi_y, phi_z, cstar->pos[0], cstar->pos[1], cstar->pos[2],
- sn_radius, sn_birthtime, sn_duration, sn_energy);
-
- this->SuperNovaList.append(P);
- printf("Added supernova to list \n");
- }
- }
- }
-
+

return SUCCESS;


diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/Grid_AddMagneticSupernovaeToList.C
--- /dev/null
+++ b/src/enzo/Grid_AddMagneticSupernovaeToList.C
@@ -0,0 +1,112 @@
+/***********************************************************************
+/
+/ FIND DEAD STAR PARTICLES AND ADD THEM TO MAGNETIC SUPERNOVA LIST
+/
+/ written by: Iryna Butsky
+/ date: June 2018
+/
+/ PURPOSE: To apply magnetic supernova feedback, we need to first add
+/ all stars that have recently gone supernova to the global list.
+/
+************************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <math.h>
+
+#include "ErrorExceptions.h"
+#include "macros_and_parameters.h"
+#include "typedefs.h"
+#include "global_data.h"
+#include "phys_constants.h"
+#include "Fluxes.h"
+#include "GridList.h"
+#include "ExternalBoundary.h"
+#include "TopGridData.h"
+#include "Grid.h"
+#include "hydro_rk/SuperNova.h"
+
+int GetUnits(float *DensityUnits, float *LengthUnits,
+ float *TemperatureUnits, float *TimeUnits,
+ float *VelocityUnits, double *MassUnits, FLOAT Time);
+
+void mt_init(unsigned_int seed);
+unsigned_long_int mt_random();
+
+int grid::AddMagneticSupernovaeToList()
+{
+
+ if (ProcessorNumber != MyProcessorNumber) {
+ return SUCCESS;
+ }
+
+ float random_u, random_v, random_phi, random_theta, phi_x, phi_y, phi_z;
+ float sn_birthtime, sn_duration, sn_radius, sn_energy, star_birthtime, star_lifetime;
+
+ float DensityUnits, LengthUnits, TemperatureUnits, TimeUnits, VelocityUnits, MassUnits, EnergyUnits;
+ if (GetUnits(&DensityUnits, &LengthUnits,&TemperatureUnits, &TimeUnits,
+ &VelocityUnits, &MassUnits, Time) == FAIL){
+ fprintf(stderr, "Error in GetUnits.\n");
+ return FAIL;
+ }
+
+
+ // if UseMagneticSupernovaFeedback > 1, then we set the magnetic feedback radius and duration
+ // below based on the resolution of the grid at the highest refinement level
+ if (UseMagneticSupernovaFeedback > 1){
+ sn_duration = 5.0 * dtFixed;
+ MagneticSupernovaDuration = sn_duration * TimeUnits / SecondsPerYear;
+ sn_radius = 1.5 * this->CellWidth[0][0];
+ MagneticSupernovaRadius = sn_radius * LengthUnits / pc;
+ }
+ else {
+ // Converting time from years to seconds, then internal units
+ sn_duration = MagneticSupernovaDuration * SecondsPerYear / TimeUnits;
+ if(sn_duration < 5.0 * dtFixed) {
+ printf("WARNING: Magnetic supernova feedback duration is less than the recommended minimum of 5 x dtFixed\n");
+ printf("Current dtFixed = %e years \n", dtFixed * TimeUnits / SecondsPerYear);
+ }
+ // Converting radius from parsecs to cm, then internal units
+ sn_radius = MagneticSupernovaRadius * pc / LengthUnits;
+ if(sn_radius < 1.5 * this->CellWidth[0][0]){
+ printf("WARNING: Magnetic supernova feedback radius is less than the recommended minimum of 1.5 x CellWidth\n");
+ printf("Current CellWidth = %e pc \n", this->CellWidth[0][0] * LengthUnits / pc);
+ }
+
+ }
+ // Converting energy from ergs to internal units
+ sn_energy = MagneticSupernovaEnergy / (MassUnits*VelocityUnits*VelocityUnits);
+
+ for (int star_id = 0; star_id < this->NumberOfParticles; star_id++){
+ if (this->ParticleType[star_id] == PARTICLE_TYPE_STAR){
+
+ star_birthtime = this->ParticleAttribute[0][star_id];
+ star_lifetime = this->ParticleAttribute[1][star_id];
+ sn_birthtime = star_birthtime + star_lifetime;
+
+ // Creates a supernova with magnetic feedback set by user-defined parameters and
+ // adds it to supernova list
+ if((this->Time > sn_birthtime) && (this->Time < sn_birthtime + sn_duration)){
+ SuperNova P = SuperNova();
+ mt_init((unsigned_int) this->ParticleNumber[star_id]);
+
+ random_u = (float)(mt_random()%32768)/32768.0; // random variable from 0 to 1
+ random_v = (float)(mt_random()%32768)/32768.0;
+ random_phi = 2*M_PI*random_u; // 0 to 2pi
+ random_theta = acos(2*random_v-1); // 0 to pi
+
+ // Setting up randomly oriented magnetic feedback of supernova
+ phi_x = sin(random_theta)*cos(random_phi);
+ phi_y = sin(random_theta)*sin(random_phi);
+ phi_z = cos(random_theta);
+
+ P.setValues(phi_x, phi_y, phi_z,
+ ParticlePosition[0][star_id], ParticlePosition[1][star_id], ParticlePosition[2][star_id],
+ sn_radius, sn_birthtime, sn_duration, sn_energy);
+ this->MagneticSupernovaList.push_back(P);
+ }
+ }
+ }
+ return SUCCESS;
+}

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/Grid_FindAllStarParticles.C
--- a/src/enzo/Grid_FindAllStarParticles.C
+++ b/src/enzo/Grid_FindAllStarParticles.C
@@ -50,7 +50,6 @@
//StarType = abs(ParticleType[i]);
if (ParticleType[i] == PARTICLE_TYPE_SINGLE_STAR ||
ParticleType[i] == PARTICLE_TYPE_BLACK_HOLE ||
- (ParticleType[i] == PARTICLE_TYPE_STAR && UseSupernovaSeedFieldSourceTerms) ||
ParticleType[i] == PARTICLE_TYPE_CLUSTER ||
ParticleType[i] == PARTICLE_TYPE_COLOR_STAR ||
ParticleType[i] == PARTICLE_TYPE_MBH ||
@@ -58,7 +57,7 @@
(StarParticleRadiativeFeedback == TRUE &&
ParticleType[i] == PARTICLE_TYPE_STAR)) {

- if (ParticleType[i] == PARTICLE_TYPE_STAR)
+ if (ParticleType[i] == PARTICLE_TYPE_STAR && UseMagneticSupernovaFeedback == 0)
LifetimeFactor = 12.0;
else
LifetimeFactor = 1.0;

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/Grid_FindNewStarParticles.C
--- a/src/enzo/Grid_FindNewStarParticles.C
+++ b/src/enzo/Grid_FindNewStarParticles.C
@@ -39,9 +39,6 @@

for (i = 0; i < NumberOfParticles; i++)
if (ParticleType[i] == -PARTICLE_TYPE_SINGLE_STAR ||
- (ParticleType[i] == -PARTICLE_TYPE_STAR && UseSupernovaSeedFieldSourceTerms &&
- (this->Time >= ParticleAttribute[0][i] &&
- this->Time <= ParticleAttribute[0][i]+ParticleAttribute[1][i])) ||
ParticleType[i] == -PARTICLE_TYPE_BLACK_HOLE ||
ParticleType[i] == -PARTICLE_TYPE_CLUSTER ||
ParticleType[i] == -PARTICLE_TYPE_COLOR_STAR ||

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/Grid_constructor.C
--- a/src/enzo/Grid_constructor.C
+++ b/src/enzo/Grid_constructor.C
@@ -200,12 +200,11 @@
MagneticDims[field][dim] = -100;
}}

-
/* For once-per-rootgrid-timestep star formation, the following flag
determines whether SF is about to occur or not. It's currently
(April 2012) only implemented for H2REG_STAR and completely
ignored for all other star makers. */
MakeStars = 0;
- if (UseSupernovaSeedFieldSourceTerms == 1) List<SuperNova> SuperNovaList;

+ if (UseMagneticSupernovaFeedback) std::vector<SuperNova> MagneticSupernovaList;
}

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/Make.config.objects
--- a/src/enzo/Make.config.objects
+++ b/src/enzo/Make.config.objects
@@ -307,6 +307,7 @@
Grid_AddFeedbackSphere.o \
Grid_AddFieldMassToMassFlaggingField.o \
Grid_AddFields.o \
+ Grid_AddMagneticSupernovaeToList.o \
Grid_AddOneParticleFromList.o \
Grid_AddOverlappingParticleMassField.o \
Grid_AddParticlesFromList.o \

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/ReadParameterFile.C
--- a/src/enzo/ReadParameterFile.C
+++ b/src/enzo/ReadParameterFile.C
@@ -1273,10 +1273,10 @@
ret += sscanf(line, "GasDragCoefficient = %"GSYM, &GasDragCoefficient);

// Parameters for magnetic feedback from supernovae
- ret += sscanf(line, "UseSupernovaSeedFieldSourceTerms = %"ISYM, &UseSupernovaSeedFieldSourceTerms);
- ret += sscanf(line,"SupernovaSeedFieldRadius = %"FSYM, &SupernovaSeedFieldRadius);
- ret += sscanf(line,"SupernovaSeedFieldEnergy = %"FSYM, &SupernovaSeedFieldEnergy);
- ret += sscanf(line,"SupernovaSeedFieldDuration = %"FSYM, &SupernovaSeedFieldDuration);
+ ret += sscanf(line, "UseMagneticSupernovaFeedback = %"ISYM, &UseMagneticSupernovaFeedback);
+ ret += sscanf(line,"MagneticSupernovaRadius = %"FSYM, &MagneticSupernovaRadius);
+ ret += sscanf(line,"MagneticSupernovaEnergy = %"FSYM, &MagneticSupernovaEnergy);
+ ret += sscanf(line,"MagneticSupernovaDuration = %"FSYM, &MagneticSupernovaDuration);

/* If the dummy char space was used, then make another. */


diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/SetDefaultGlobalValues.C
--- a/src/enzo/SetDefaultGlobalValues.C
+++ b/src/enzo/SetDefaultGlobalValues.C
@@ -978,12 +978,12 @@
UseGasDrag = 0;
GasDragCoefficient = 0.;

- /* Supernova magnetic seed field */
+ /* Supernova magnetic feedback */
/* Default == 0 -> no magnetic field contribution */
- UseSupernovaSeedFieldSourceTerms = 0;
- SupernovaSeedFieldRadius = 0.0;
- SupernovaSeedFieldDuration = 0.0;
- SupernovaSeedFieldEnergy = 0.0;
+ UseMagneticSupernovaFeedback = 0; // 0 = off; 1+ = on; 2 = Radius and duration calculated during runtime
+ MagneticSupernovaRadius = 300.0; // Total injection radius of magnetic field in parsecs
+ MagneticSupernovaDuration = 5e4 ; // Total duration of magnetic feedback in years
+ MagneticSupernovaEnergy = 1.0e51; // Total energy (ergs) injected per star particle (supernova)

return SUCCESS;
}

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/StarParticleAddFeedback.C
--- a/src/enzo/StarParticleAddFeedback.C
+++ b/src/enzo/StarParticleAddFeedback.C
@@ -88,10 +88,7 @@
&TimeUnits, &VelocityUnits, Time);

count = 0;
- // clear list of Supernovae at each timestep to avoid adding duplicates in Grid_AddFeedbackSphere
- if(UseSupernovaSeedFieldSourceTerms){
- LevelArray[level]->GridData->SuperNovaList.clear();
- }
+
for (cstar = AllStars; cstar; cstar = cstar->NextStar, count++) {

AddedFeedback[count] = false;

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/Star_Accrete.C
--- a/src/enzo/Star_Accrete.C
+++ b/src/enzo/Star_Accrete.C
@@ -29,15 +29,10 @@

int Star::Accrete(void)
{
- if (UseSupernovaSeedFieldSourceTerms == 1){
- if (this->CurrentGrid == NULL ||(this->naccretions == 0))
- return SUCCESS;
- }
- else {
- if (this->CurrentGrid == NULL ||
- (this->naccretions == 0 && fabs(this->DeltaMass) < tiny_number))
- return SUCCESS;
- }
+ if (this->CurrentGrid == NULL ||
+ (this->naccretions == 0 && fabs(this->DeltaMass) < tiny_number))
+ return SUCCESS;
+

const double Msun = 1.989e33, yr = 3.1557e7;
int dim, i, n, count;

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/Star_HitEndpoint.C
--- a/src/enzo/Star_HitEndpoint.C
+++ b/src/enzo/Star_HitEndpoint.C
@@ -101,9 +101,6 @@
case PopIII_CF:
break;

- case NormalStar:
- break;
-
} // ENDSWITCH

return result;

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/Star_SetFeedbackFlag.C
--- a/src/enzo/Star_SetFeedbackFlag.C
+++ b/src/enzo/Star_SetFeedbackFlag.C
@@ -135,12 +135,7 @@

//this->type = abs_type;

- case PARTICLE_TYPE_STAR:
- if(UseSupernovaSeedFieldSourceTerms)
- this->FeedbackFlag = SUPERNOVA_SEEDFIELD;
- break;
-}
-
+ }

return SUCCESS;
}

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/WriteParameterFile.C
--- a/src/enzo/WriteParameterFile.C
+++ b/src/enzo/WriteParameterFile.C
@@ -1200,10 +1200,10 @@
fprintf(fptr, "CorrectParentBoundaryFlux = %d\n", CorrectParentBoundaryFlux);

/* Supernova magnetic seed field */
- fprintf(fptr, "UseSupernovaSeedFieldSourceTerms = %"ISYM"\n", UseSupernovaSeedFieldSourceTerms);
- fprintf(fptr, "SupernovaSeedFieldRadius = %"GSYM"\n", SupernovaSeedFieldRadius);
- fprintf(fptr,"SupernovaSeedFieldEnergy = %"GSYM"\n",SupernovaSeedFieldEnergy);
- fprintf(fptr,"SupernovaSeedFieldDuration = %"GSYM"\n",SupernovaSeedFieldDuration);
+ fprintf(fptr, "UseMagneticSupernovaFeedback = %"ISYM"\n", UseMagneticSupernovaFeedback);
+ fprintf(fptr, "MagneticSupernovaRadius = %"GSYM"\n", MagneticSupernovaRadius);
+ fprintf(fptr,"MagneticSupernovaEnergy = %"GSYM"\n",MagneticSupernovaEnergy);
+ fprintf(fptr,"MagneticSupernovaDuration = %"GSYM"\n",MagneticSupernovaDuration);

/* Output current time */
time_t ID;

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/global_data.h
--- a/src/enzo/global_data.h
+++ b/src/enzo/global_data.h
@@ -1109,9 +1109,9 @@
EXTERN float GalaxySimulationPreWindVelocity[MAX_DIMENSION];

/* Supernova magnetic seed field */
-EXTERN int UseSupernovaSeedFieldSourceTerms;
-EXTERN float SupernovaSeedFieldRadius;
-EXTERN float SupernovaSeedFieldDuration;
-EXTERN float SupernovaSeedFieldEnergy;
+EXTERN int UseMagneticSupernovaFeedback;
+EXTERN float MagneticSupernovaRadius;
+EXTERN float MagneticSupernovaDuration;
+EXTERN float MagneticSupernovaEnergy;

#endif

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/hydro_rk/Grid_MHDSourceTerms.C
--- a/src/enzo/hydro_rk/Grid_MHDSourceTerms.C
+++ b/src/enzo/hydro_rk/Grid_MHDSourceTerms.C
@@ -19,13 +19,14 @@
#include "macros_and_parameters.h"
#include "typedefs.h"
#include "global_data.h"
-#include "list.h"
+#include "phys_constants.h"
#include "Fluxes.h"
#include "GridList.h"
#include "ExternalBoundary.h"
#include "TopGridData.h"
#include "Grid.h"
#include "EOS.h"
+#include "hydro_rk/SuperNova.h"

int GetUnits(float *DensityUnits, float *LengthUnits,
float *TemperatureUnits, float *TimeUnits,
@@ -33,6 +34,8 @@
int CosmologyComputeExpansionFactor(FLOAT time, FLOAT *a, FLOAT *dadt);
int FindField(int field, int farray[], int numfields);

+void mt_init(unsigned_int seed);
+unsigned_long_int mt_random();

int grid::MHDSourceTerms(float **dU)
{
@@ -357,49 +360,73 @@
}
}

-if((UseSupernovaSeedFieldSourceTerms == 1)) {
+ if(UseMagneticSupernovaFeedback) {
+
+ int n, active_x, active_y, center_i, center_j, center_k, num_sn_cells_x, num_sn_cells_y, num_sn_cells_z;
+ snsf_source_terms S;
+ float dx, dy, dz, dist_to_sn, magnetic_energy_density;
+ float DensityUnits, LengthUnits, TemperatureUnits, TimeUnits, VelocityUnits;
+
+ if (GetUnits(&DensityUnits, &LengthUnits,&TemperatureUnits, &TimeUnits,
+ &VelocityUnits, Time) == FAIL){
+ fprintf(stderr, "Error in GetUnits.\n");
+ return FAIL;
+ }
+
+ // Converting radius from parsecs to cm, then internal units
+ float sn_radius = MagneticSupernovaRadius * pc / LengthUnits;

- int n = 0, igrid;
- int iden=FindField(Density, FieldType, NumberOfBaryonFields);
- snsf_source_terms S;
- List<SuperNova>::Iterator *P = this->SuperNovaList.begin();
- FLOAT cell_center[3];
- FLOAT dx, dy, dz, dist_to_sn;
- int temp =1;
- int entered = 0;
+ active_x = GridDimension[0] - 2*NumberOfGhostZones;
+ active_y = GridDimension[1] - 2*NumberOfGhostZones;

- for (int k = GridStartIndex[2]; k <= GridEndIndex[2]; k++) {
- for (int j = GridStartIndex[1]; j <= GridEndIndex[1]; j++) {
- for (int i = GridStartIndex[0]; i <= GridEndIndex[0]; i++, n++) {
- igrid = i+(j+k*GridDimension[1])*GridDimension[0];
+ // the number of additional cells that receive magnetic supernova feedback.
+ // assuming the supernova is in the center of one cell
+ num_sn_cells_x = (int) ((sn_radius - 0.5*CellWidth[0][0])/ CellWidth[0][0]);
+ num_sn_cells_y = (int) ((sn_radius - 0.5*CellWidth[1][0])/ CellWidth[1][0]);
+ num_sn_cells_z = (int) ((sn_radius - 0.5*CellWidth[2][0])/ CellWidth[2][0]);
+
+ for (std::vector<SuperNova>::iterator current_sn = this->MagneticSupernovaList.begin();
+ current_sn != this->MagneticSupernovaList.end(); current_sn++){

- cell_center[0] = CellLeftEdge[0][i] + 0.5*CellWidth[0][i];
- cell_center[1] = CellLeftEdge[1][j] + 0.5*CellWidth[1][j];
- cell_center[2] = CellLeftEdge[2][k] + 0.5*CellWidth[2][k];
+ // find index of the cell nearest to the supernova center
+ // assuming that supernova in the center of that cell
+ center_i = (int)((current_sn->getPosition()[0] - GridLeftEdge[0]) / CellWidth[0][0]);
+ center_j = (int)((current_sn->getPosition()[1] - GridLeftEdge[1]) / CellWidth[1][0]);
+ center_k = (int)((current_sn->getPosition()[2] - GridLeftEdge[2]) / CellWidth[2][0]);

- while(P != this->SuperNovaList.end()){
- dx = P->get()->getPosition()[0] - cell_center[0];
- dy = P->get()->getPosition()[1] - cell_center[1];
- dz = P->get()->getPosition()[2] - cell_center[2];
-
- dist_to_sn = sqrt(dx*dx + dy*dy + dz*dz);
- if (dist_to_sn < 1.1*SupernovaSeedFieldRadius){
- S = P->get()->getSourceTerms(dx, dy, dz, Time);
- double rho = BaryonField[DensNum][igrid];
+ for(int k = center_k - num_sn_cells_z; k <= center_k + num_sn_cells_z; k++){
+ for(int j = center_j - num_sn_cells_y; j <= center_j + num_sn_cells_y; j++){
+ for(int i = center_i - num_sn_cells_x; i <= center_i + num_sn_cells_x; i++){
+
+ // only add magnetic feedback on the active grid cells
+ if ((k >= GridStartIndex[2]) && (k <= GridEndIndex[2]) &&
+ (j >= GridStartIndex[1]) && (j <= GridEndIndex[1]) &&
+ (i >= GridStartIndex[0]) && (i <= GridEndIndex[0])){
+
+ dx = CellWidth[0][0] * (float)(i-center_i);
+ dy = CellWidth[1][0] * (float)(j-center_j);
+ dz = CellWidth[2][0] * (float)(k-center_k);
+
+ dist_to_sn = sqrt(dx*dx + dy*dy + dz*dz);
+ S = current_sn->getSourceTerms(dx, dy, dz, Time);
+
+ // solving for index n
+ // analogous to how igrid is calculated, but taking into acount Ghost Zones
+ n = (i - GridStartIndex[0])+((j-GridStartIndex[1]) + (k-GridStartIndex[2])*active_y) * active_x;
+
+ dU[iBx][n] += S.dbx*dtFixed;
+ dU[iBy][n] += S.dby*dtFixed;
+ dU[iBz][n] += S.dbz*dtFixed;

- dU[iBx][n] += S.dbx*dtFixed;
- dU[iBy][n] += S.dby*dtFixed;
- dU[iBz][n] += S.dbz*dtFixed;
- dU[iEtot][n] += S.dUtot*dtFixed;
+ dU[iEtot][n] += S.dUtot * dtFixed;
+
+ }

- }
- P = P->next();
- }// End of SuperNovaList iteration
- } // End of k for-loop
- } // End of j for-loop
- } // End of i for-loop
-
-} // End of UseSuperNovaSeedFieldSourceTerms scope
+ } // End of k for-loop
+ } // End of j for-loop
+ } // End of i for-loop
+ } // End of MagneticSupernovaList loop
+ } // End of UseMagneticSupernovaFeedback scope




diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/hydro_rk/LLF_Zero_MHD.C
--- a/src/enzo/hydro_rk/LLF_Zero_MHD.C
+++ b/src/enzo/hydro_rk/LLF_Zero_MHD.C
@@ -34,7 +34,7 @@

// compute priml and primr
int iprim;
- for (int field = 0; field < NEQ_MHD; field++) {
+ for (int field = 0; field < NEQ_MHD-DualEnergyFormalism; field++) {
for (int i = 0; i < ActiveSize+1; i++) {
iprim = i + NumberOfGhostZones - 1;
priml[field][i] = prim[field][iprim];
@@ -53,9 +53,9 @@
iprim = i+NumberOfGhostZones-1;
for (int field = 0; field < NSpecies; field++) {
if (FluxLine[iD][i] >= 0) {
- species[field][i] = prim[field+5][iprim ];
+ species[field][i] = prim[field+NEQ_MHD-DualEnergyFormalism][iprim ];
} else {
- species[field][i] = prim[field+5][iprim+1];
+ species[field][i] = prim[field+NEQ_MHD-DualEnergyFormalism][iprim+1];
}
}
sum = 0;
@@ -76,9 +76,9 @@
iprim = i+NumberOfGhostZones-1;
for (int field = 0; field < NColor; field++) {
if (FluxLine[iD][i] >= 0) {
- colors[field][i] = prim[field+5+NSpecies][iprim ];
+ colors[field][i] = prim[field+NEQ_MHD-DualEnergyFormalism+NSpecies][iprim ];
} else {
- colors[field][i] = prim[field+5+NSpecies][iprim+1];
+ colors[field][i] = prim[field+NEQ_MHD-DualEnergyFormalism+NSpecies][iprim+1];
}
}
for (int field = 0; field < NColor; field++) {

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/hydro_rk/SuperNovaSeedField.C
--- a/src/enzo/hydro_rk/SuperNovaSeedField.C
+++ b/src/enzo/hydro_rk/SuperNovaSeedField.C
@@ -127,14 +127,14 @@

snsf_source_terms SuperNova::getSourceTerms(double dx, double dy, double dz, double enzoTime){
// ------------------------------------------------------------------- //
- // Inputs: (1) distances to current cell, dx, dy, dz //
+ // Inputs: (1) distances to current cell, dx, dy, dz //
// (2) current time of the simulation //
// //
- // Output: (1) A struct of source terms corresponding to the given //
- // supernova //
- // (i) x,y,z components of time derivative of B-field //
- // (ii) time derivative of magnetic energy density //
- // (iii) time derivative of total energy density //
+ // Output: (1) A struct of source terms corresponding to the given //
+ // supernova //
+ // (i) x,y,z components of time derivative of B-field //
+ // (ii) time derivative of magnetic energy density //
+ // (iii) time derivative of total energy density //
// ------------------------------------------------------------------- //

FLOAT phi[3], zhat_cell[3];
@@ -180,6 +180,9 @@

FLOAT r_scale = (r_cyl/characteristicLength)*\
exp(- r_s*r_s /(characteristicLength*characteristicLength));
+
+ FLOAT db_r_scale = (r_cyl/characteristicLength)*\
+ exp(- r_s*r_s /(2.0*characteristicLength*characteristicLength));
FLOAT t_exp = exp(-t_s/characteristicTime);

FLOAT db_t_exp = t_exp / characteristicTime;

diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/macros_and_parameters.h
--- a/src/enzo/macros_and_parameters.h
+++ b/src/enzo/macros_and_parameters.h
@@ -1,5 +1,12 @@
#ifndef __macros_and_parameters_h_
#define __macros_and_parameters_h_
+#include "string.h"
+#include <iostream>
+#include <iomanip>
+#include <vector>
+#include <algorithm>
+#include <map>
+#include <cassert>
/***********************************************************************
/
/ MACRO DEFINITIONS AND PARAMETERS
@@ -517,7 +524,6 @@
#define MBH_THERMAL 7
#define MBH_JETS 8
#define COLOR_FIELD 9
-#define SUPERNOVA_SEEDFIELD 11

/* Sink particle accretion modes */


diff -r bc76c0b9ebf0 -r 4c537ac40bce src/enzo/phys_constants.h
--- a/src/enzo/phys_constants.h
+++ b/src/enzo/phys_constants.h
@@ -60,4 +60,7 @@
#define kpc 3.0857e21
#define pc 3.0857e18

+/* Time units */
+#define SecondsPerYear 3.1556952e7
+
#endif

Repository URL: https://bitbucket.org/enzo/enzo-dev/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
Reply all
Reply to author
Forward
0 new messages