plummer generation fixed; allow decoupling of num. tree pieces from ppc
authorPritish Jetley <pjetley2@illinois.edu>
Thu, 13 Oct 2011 02:32:20 +0000 (21:32 -0500)
committerPritish Jetley <pjetley2@illinois.edu>
Thu, 13 Oct 2011 02:32:20 +0000 (21:32 -0500)
DataManager.cpp
Main.cpp
Makefile
Makefile.dep
Particle.h
common.h [new file with mode: 0644]
defines.h
gen_util.cpp
plummer.cpp

index 4068c0a..afa9ef5 100644 (file)
@@ -306,7 +306,7 @@ void DataManager::receiveHistogram(CkReductionMsg *msg){
 #endif
       numTreePieces += (BRANCH_FACTOR-1);
       if(numTreePieces > globalParams.numTreePieces){
-        CkPrintf("have %d treepieces need %d\n",numTreePieces,globalParams.numTreePieces);
+        CkPrintf("have %d treepieces need %d\n",globalParams.numTreePieces,numTreePieces);
         CkAbort("bad universe?\n");
       }
     }
index 2d3a133..cec95b2 100644 (file)
--- a/Main.cpp
+++ b/Main.cpp
@@ -21,13 +21,6 @@ Parameters globalParams;
 Main::Main(CkArgMsg *msg){
   setParameters(msg);
 
-  getNumParticles();
-
-  globalParams.numTreePieces = (globalParams.numParticles/(1.0*globalParams.ppc))*2;
-  if(globalParams.numTreePieces == 0) globalParams.numTreePieces = 1;
-
-  CkPrintf("tree pieces: %d\n", globalParams.numTreePieces);
-
   dataManagerProxy = CProxy_DataManager::ckNew();
 
   CkArrayOptions opts(globalParams.numTreePieces);
@@ -89,6 +82,21 @@ void Main::setParameters(CkArgMsg *m){
 
   globalParams.yieldPeriod = params.getiparam("yield", DEFAULT_YIELD_PERIOD, table);
   CkPrintf("yieldPeriod: %d\n", globalParams.yieldPeriod);
+
+  getNumParticles();
+
+  it = table.find("p");
+  if(it == table.end()){
+    globalParams.numTreePieces = ((Real)globalParams.numParticles/((Real)globalParams.ppc))*2.0;
+    if(globalParams.numTreePieces == 0) globalParams.numTreePieces = 1;
+  }
+  else{
+    globalParams.numTreePieces = atoi(it->second.c_str());
+  }
+
+  CkPrintf("tree pieces: %d\n", globalParams.numTreePieces);
+
+
 }
 
 void Main::getNumParticles(){
index d8ace40..ff068d5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -29,9 +29,12 @@ all: $(TARGET) gen
 $(TARGET): $(OBJECTS) Makefile.dep 
        $(CHARMC) -o $(TARGET) $(LDFLAGS) $(OBJECTS)
 
-gen: particleGenerator.cpp 
+gen: particleGenerator.cpp  
        g++ -o gen particleGenerator.cpp
 
+plummer: plummer.o gen_util.o 
+       g++ -o plummer plummer.o gen_util.o
+
 %.decl.h %.def.h : %.ci
        $(CHARMC) $(APP_FLAGS) -E $<
 
index 280b93c..97aa3a7 100644 (file)
@@ -3,16 +3,17 @@ Main.cpp \
 Main.h \
 Parameters.h \
 defines.h \
+common.h \
 OrientedBox.h \
 barnes.decl.h \
+Descriptor.h \
+MultipoleMoments.h \
+Vector3D.h \
 TreePiece.h \
 Particle.h \
-Vector3D.h \
 Messages.h \
-MultipoleMoments.h \
 Node.h \
 util.h \
-Descriptor.h \
 State.h \
 Worker.h \
 Traversal_decls.h \
@@ -26,14 +27,15 @@ DataManager.o: \
 DataManager.cpp \
 DataManager.h \
 Particle.h \
-defines.h \
+common.h \
 Vector3D.h \
 OrientedBox.h \
 barnes.decl.h \
-Node.h \
+Descriptor.h \
+defines.h \
 MultipoleMoments.h \
+Node.h \
 util.h \
-Descriptor.h \
 ActiveBinInfo.h \
 Traversal_decls.h \
 Worker.h \
@@ -48,15 +50,16 @@ TreePiece.o: \
 TreePiece.cpp \
 TreePiece.h \
 defines.h \
+common.h \
 OrientedBox.h \
 barnes.decl.h \
-Particle.h \
+Descriptor.h \
+MultipoleMoments.h \
 Vector3D.h \
+Particle.h \
 Messages.h \
-MultipoleMoments.h \
 Node.h \
 util.h \
-Descriptor.h \
 State.h \
 Worker.h \
 Traversal_decls.h \
@@ -68,6 +71,7 @@ Parameters.h \
 util.o: \
 util.cpp \
 defines.h \
+common.h \
 Particle.h \
 Vector3D.h \
 util.h \
@@ -85,6 +89,7 @@ Reduction.o: \
 Reduction.cpp \
 OrientedBox.h \
 defines.h \
+common.h \
 ActiveBinInfo.h \
 Node.h \
 MultipoleMoments.h \
@@ -99,6 +104,7 @@ Node.h \
 MultipoleMoments.h \
 Vector3D.h \
 defines.h \
+common.h \
 OrientedBox.h \
 Particle.h \
 util.h \
@@ -122,6 +128,7 @@ Node.h \
 MultipoleMoments.h \
 Vector3D.h \
 defines.h \
+common.h \
 OrientedBox.h \
 Particle.h \
 util.h \
@@ -141,6 +148,7 @@ Node.h \
 MultipoleMoments.h \
 Vector3D.h \
 defines.h \
+common.h \
 OrientedBox.h \
 Particle.h \
 util.h \
@@ -151,3 +159,13 @@ barnes.decl.h \
 Messages.h \
 Worker.h \
 
+particleGenerator.o: \
+
+gen_util.o: \
+gen_util.cpp \
+
+plummer.o: \
+plummer.cpp \
+Vector3D.h \
+Particle.h \
+
index b721f35..9f15afa 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef __PARTICLE_H__
 #define __PARTICLE_H__
 
-#include "defines.h"
+#include "common.h"
 #include "Vector3D.h"
 
 struct Particle;
diff --git a/common.h b/common.h
new file mode 100644 (file)
index 0000000..c21efb4
--- /dev/null
+++ b/common.h
@@ -0,0 +1,24 @@
+#ifndef __COMMON_H__
+#define __COMMON_H__
+
+#include <limits.h>
+#include <stdint.h>
+
+typedef float Real;
+typedef uint64_t Key;
+
+#define   PI         3.14159265358979323846
+#define   TWO_PI     6.28318530717958647693
+#define   FOUR_PI   12.56637061435917295385
+#define   HALF_PI    1.57079632679489661923
+#define   FRTHRD_PI  4.18879020478639098462
+
+#define PREAMBLE_INTS 2 
+#define PREAMBLE_REALS 1
+#define PREAMBLE_SIZE ((PREAMBLE_INTS)*sizeof(int)+(PREAMBLE_REALS)*sizeof(Real))
+#define REALS_PER_PARTICLE 8
+#define SIZE_PER_PARTICLE ((REALS_PER_PARTICLE)*sizeof(Real))
+
+
+
+#endif
index 7d83298..36ac579 100644 (file)
--- a/defines.h
+++ b/defines.h
@@ -4,17 +4,10 @@
 #include "limits.h"
 #include "charm++.h"
 
-typedef CmiUInt8 Key;
+#include "common.h"
 
-#define TREE_KEY_BITS (sizeof(Key)*CHAR_BIT)
-
-#define PREAMBLE_INTS 2 
-#define PREAMBLE_REALS 1
-#define PREAMBLE_SIZE ((PREAMBLE_INTS)*sizeof(int)+(PREAMBLE_REALS)*sizeof(Real))
-#define REALS_PER_PARTICLE 8
-#define SIZE_PER_PARTICLE ((REALS_PER_PARTICLE)*sizeof(Real))
 
-typedef float Real;
+#define TREE_KEY_BITS (sizeof(Key)*CHAR_BIT)
 
 #define BITS_PER_DIM 21
 #define BOXES_PER_DIM (1<<(BITS_PER_DIM))
index 2a88034..3e1daf3 100644 (file)
@@ -15,9 +15,7 @@
 /*************************************************************************/
 
 #include <stdio.h>
-#include "stdinc.h"
-
-#include "define.h"
+#include "common.h"
 
 #define HZ 60.0
 #define MULT 1103515245
index 3f35afc..4a81823 100644 (file)
@@ -8,13 +8,20 @@
 
 #include "Vector3D.h"
 #include "Particle.h"
+#include <assert.h>
+#include <stdlib.h>
+#include <math.h>
+#include <iostream>
+#include <fstream>
+
+using namespace std;
 
 #define MFRAC  0.999                /* mass cut off at MFRAC of total */
 
-Real xrand();
-Real pow();
+Real xrand(Real,Real);
+void pickshell(Vector3D<Real> &vec, Real rad);
 
-void testdata(int nbody)
+Particle *testdata(int nbody)
 {
    Real rsc, vsc, rsq, r, v, x, y;
    Vector3D<Real> cmr, cmv;
@@ -26,10 +33,9 @@ void testdata(int nbody)
    Particle *cp;
    Real tmp;
 
-   Particle *bodytab = (bodyptr) G_MALLOC(nbody * sizeof(body));
-   if (bodytab == NULL) {
-      error("testdata: not enuf memory\n");
-   }
+   Particle *bodytab = new Particle[nbody * sizeof(Particle)];
+   assert(bodytab != NULL);
+
    rsc = 9 * PI / 16;
    vsc = sqrt(1.0 / rsc);
 
@@ -45,8 +51,10 @@ void testdata(int nbody)
       while (r > 9.0) {
         rejects++;
         r = 1 / sqrt(pow(xrand(0.0, MFRAC), -2.0/3.0) - 1);
+
       }        
       pickshell(p->position, rsc * r);
+      
       cmr += p->position;
       do {
         x = xrand(0.0, 1.0);
@@ -57,8 +65,12 @@ void testdata(int nbody)
       v = sqrt(2.0) * x / pow(1 + r*r, 0.25);
       pickshell(p->velocity, vsc * v);
       cmv += p->velocity;
+      
+      //cout << "particle generated" << endl;
    }
 
+   //cout << "done first loop" << endl;
+
    offset = 4.0;
 
    for (p = bodytab + halfnbody; p < bodytab+nbody; p++) {
@@ -77,6 +89,8 @@ void testdata(int nbody)
      p->position -= cmr;
      p->velocity -= cmv;
    }
+
+   return bodytab;
 }
 
 /*
@@ -95,6 +109,7 @@ void pickshell(Vector3D<Real> &vec, Real rad)
      vec.y = xrand(-1.0,1.0);
      vec.z = xrand(-1.0,1.0);
      rsq = vec.lengthSquared();
+     //cout << "rsq " << vec.x << "," << vec.y << "," << vec.z << "," << rsq << endl;
    } while (rsq > 1.0);
 
    rsc = rad / sqrt(rsq);
@@ -102,8 +117,7 @@ void pickshell(Vector3D<Real> &vec, Real rad)
 }
 
 
-int intpow(i,j)
-  int i,j;
+int intpow(int i, int j)
 {   
     int k;
     int temp = 1;
@@ -113,4 +127,48 @@ int intpow(i,j)
     return temp;
 }
 
+void pranset(int);
+
+int main(int argc, char **argv){
+  pranset(128363);
+  assert(argc == 3);
+
+  int nbody = atoi(argv[1]);
+  int ndims = 3;
+  Real tnow = 0.0;
+  ofstream out(argv[2], ios::out|ios::binary);
+  
+  Particle *p = testdata(nbody);
+  
+  out.write((char *)&nbody, sizeof(int));
+  out.write((char *)&ndims, sizeof(int));
+  out.write((char *)&tnow, sizeof(Real));
+
+  Real tmp[REALS_PER_PARTICLE];
+  Real soft = 0.001;
+  
+  for(int i = 0; i < nbody; i++){
+    tmp[0] = p->position.x;
+    tmp[1] = p->position.y;
+    tmp[2] = p->position.z;
+    tmp[3] = p->velocity.x;
+    tmp[4] = p->velocity.y;
+    tmp[5] = p->velocity.z;
+    tmp[6] = p->mass;
+    tmp[7] = soft;
+
+    cout << p->position.x << " "
+         << p->position.y << " "
+         << p->position.z << endl;
+
+    out.write((char*)tmp, REALS_PER_PARTICLE*sizeof(Real));
+
+    p++;
+  }
+
+  out.close();
+
+  return 0;
+}
+