tadded ndem parameter, debugging fluid tests - sphere - GPU-based 3D discrete element method algorithm with optional fluid coupling
 (HTM) git clone git://src.adamsgaard.dk/sphere
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 57d9c42669af9eb387f3053f3176a5ea9c3e4db4
 (DIR) parent deafb0326af3ed38a97ea58293ef1bdced577fd1
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Wed, 30 Apr 2014 08:47:07 +0200
       
       added ndem parameter, debugging fluid tests
       
       Diffstat:
         M python/sphere.py                    |      42 ++++++++++++++++++++++++++-----
         M src/constants.h                     |       3 +--
         M src/datatypes.h                     |       1 +
         M src/file_io.cpp                     |       7 ++++---
       
       4 files changed, 42 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/python/sphere.py b/python/sphere.py
       t@@ -12,7 +12,7 @@ numpy.seterr(all='warn', over='raise')
        
        # Sphere version number. This field should correspond to the value in
        # `../src/constants.h`.
       -VERSION=1.0
       +VERSION=1.01
        
        class sim:
            '''
       t@@ -321,6 +321,9 @@ class sim:
                    # The maximum number of iterations to perform per time step
                    self.maxiter = numpy.array(1e4)
        
       +            # The number of DEM time steps to perform between CFD updates
       +            self.ndem = numpy.array(1)
       +
        
            def __cmp__(self, other):
                '''
       t@@ -573,6 +576,9 @@ class sim:
                    elif (self.maxiter != other.maxiter):
                        print(82)
                        return 82
       +            elif (self.ndem != other.ndem):
       +                print(83)
       +                return 83
        
                # All equal
                return 0
       t@@ -899,6 +905,8 @@ class sim:
                        self.tolerance =\
                                numpy.fromfile(fh, dtype=numpy.float64, count=1)
                        self.maxiter = numpy.fromfile(fh, dtype=numpy.uint32, count=1)
       +                if (self.version >= 1.01):
       +                    self.ndem = numpy.fromfile(fh, dtype=numpy.uint32, count=1)
        
                finally:
                    if fh is not None:
       t@@ -1044,6 +1052,7 @@ class sim:
                        fh.write(self.beta.astype(numpy.float64))
                        fh.write(self.tolerance.astype(numpy.float64))
                        fh.write(self.maxiter.astype(numpy.uint32))
       +                fh.write(self.ndem.astype(numpy.uint32))
        
                finally:
                    if fh is not None:
       t@@ -2363,6 +2372,7 @@ class sim:
                self.beta = numpy.array(0.0)
                self.tolerance = numpy.array(1.0e-8)
                self.maxiter = numpy.array(1e4)
       +        self.ndem = numpy.array(1)
        
            def defaultParams(self,
                    mu_s = 0.4,
       t@@ -3832,7 +3842,8 @@ class sim:
                :type theta: float
        
                Other solver parameter setting functions: :func:`setTheta()`,
       -        :func:`setBeta()`, :func:`setTolerance()` and :func:`setMaxIterations()`
       +        :func:`setBeta()`, :func:`setTolerance()`,
       +        :func:`setDEMstepsPerCFDstep()` and :func:`setMaxIterations()`
                '''
                self.gamma = numpy.asarray(gamma)
        
       t@@ -3851,7 +3862,8 @@ class sim:
                :type theta: float
        
                Other solver parameter setting functions: :func:`setGamma()`,
       -        :func:`setBeta()`, :func:`setTolerance()` and :func:`setMaxIterations()`
       +        :func:`setBeta()`, :func:`setTolerance()`,
       +        :func:`setDEMstepsPerCFDstep()` and :func:`setMaxIterations()`
                '''
                self.theta = numpy.asarray(theta)
        
       t@@ -3869,7 +3881,8 @@ class sim:
                The default and recommended value is 0.0.
        
                Other solver parameter setting functions: :func:`setGamma()`,
       -        :func:`setTheta()`, :func:`setTolerance()` and
       +        :func:`setTheta()`, :func:`setTolerance()`,
       +        :func:`setDEMstepsPerCFDstep()` and
                :func:`setMaxIterations()`
                '''
                self.beta = numpy.asarray(beta)
       t@@ -3887,7 +3900,7 @@ class sim:
                :type tolerance: float
        
                Other solver parameter setting functions: :func:`setGamma()`,
       -        :func:`setTheta()`, :func:`setBeta()` and
       +        :func:`setTheta()`, :func:`setBeta()`, :func:`setDEMstepsPerCFDstep()` and
                :func:`setMaxIterations()`
                '''
                self.tolerance = numpy.asarray(tolerance)
       t@@ -3907,10 +3920,27 @@ class sim:
                :type maxiter: int
        
                Other solver parameter setting functions: :func:`setGamma()`,
       -        :func:`setTheta()`, :func:`setBeta()` and :func:`setTolerance()`
       +        :func:`setTheta()`, :func:`setBeta()`, :func:`setDEMstepsPerCFDstep()`
       +        and :func:`setTolerance()`
                '''
                self.maxiter = numpy.asarray(maxiter)
        
       +    def setDEMstepsPerCFDstep(self, ndem):
       +        '''
       +        A fluid solver parameter, the value of the maxiter parameter denotes the
       +        number of DEM time steps to be performed per CFD time step.
       +
       +        The default value is 1.
       +
       +        :param ndem: The DEM/CFD time step ratio
       +        :type ndem: int
       +
       +        Other solver parameter setting functions: :func:`setGamma()`,
       +        :func:`setTheta()`, :func:`setBeta()`, :func:`setTolerance()` and
       +        :func:`setMaxIterations()`.
       +        '''
       +        self.ndem = numpy.asarray(ndem)
       +
            def visualize(self, method = 'energy', savefig = True, outformat = 'png'):
                '''
                Visualize output from the simulation, where the temporal progress is
 (DIR) diff --git a/src/constants.h b/src/constants.h
       t@@ -10,14 +10,13 @@
        // Define the max. number of walls
        #define MAXWALLS 6
        
       -
        const Float PI = 3.14159265358979;
        
        // Number of dimensions (1 and 2 NOT functional)
        const unsigned int ND = 3;
        
        // Define source code version
       -const double VERSION = 1.00;
       +const double VERSION = 1.01;
        
        // Max. number of contacts per particle
        //const int NC = 16;
 (DIR) diff --git a/src/datatypes.h b/src/datatypes.h
       t@@ -137,6 +137,7 @@ struct NavierStokes {
            Float   beta;           // Solver parameter: Solution method
            Float   tolerance;      // Solver parameter: Max residual tolerance
            unsigned int maxiter;   // Solver parameter: Max iterations to perform
       +    unsigned int ndem;      // Solver parameter: DEM time steps per CFD step
        };
        
        // Image structure
 (DIR) diff --git a/src/file_io.cpp b/src/file_io.cpp
       t@@ -84,7 +84,7 @@ void DEM::readbin(const char *target)
            if (verbose == 1)
                cout << "  Allocating host memory:                         ";
            // Allocate more host arrays
       -    k.x             = new Float4[np];
       +    k.x      = new Float4[np];
            k.xysum  = new Float2[np];
            k.vel    = new Float4[np];
            k.force  = new Float4[np];
       t@@ -96,7 +96,7 @@ void DEM::readbin(const char *target)
            e.es     = new Float[np];
            e.ev_dot = new Float[np];
            e.ev     = new Float[np];
       -    e.p             = new Float[np];
       +    e.p      = new Float[np];
        
            if (verbose == 1)
                cout << "Done\n";
       t@@ -289,6 +289,7 @@ void DEM::readbin(const char *target)
                ifs.read(as_bytes(ns.beta), sizeof(Float));
                ifs.read(as_bytes(ns.tolerance), sizeof(Float));
                ifs.read(as_bytes(ns.maxiter), sizeof(unsigned int));
       +        ifs.read(as_bytes(ns.ndem), sizeof(unsigned int));
        
                if (verbose == 1)
                    cout << "Done" << std::endl;
       t@@ -487,9 +488,9 @@ void DEM::writebin(const char *target)
                    ofs.write(as_bytes(ns.beta), sizeof(Float));
                    ofs.write(as_bytes(ns.tolerance), sizeof(Float));
                    ofs.write(as_bytes(ns.maxiter), sizeof(unsigned int));
       +            ofs.write(as_bytes(ns.ndem), sizeof(unsigned int));
                }
        
       -
                // Close file if it is still open
                if (ofs.is_open())
                    ofs.close();