Skip to content
Snippets Groups Projects
Select Git revision
  • 349abe7e0132111737153bf2d4b1692d091b5ea8
  • master default protected
  • github/fork/hrani/master
  • github/fork/dilawar/master
  • chamcham
  • chhennapoda
  • wheel
  • 3.2.0-pre0
  • v3.1.3
  • 3.1.2
  • 3.1.1
  • chamcham-3.1.1
  • 3.1.0
  • ghevar_3.0.2_pre2
  • ghevar_3.0.2
15 results

stochasticLotkaVolterra.py

Blame
  • Interpol.cpp 5.80 KiB
    // Interpol.cpp ---
    //
    // Filename: Interpol.cpp
    // Description:
    // Author: Subhasis Ray
    // Maintainer:
    // Created: Wed Jun 25 15:25:24 2014 (+0530)
    // Version:
    // Last-Updated:
    //           By:
    //     Update #: 0
    // URL:
    // Keywords:
    // Compatibility:
    //
    //
    
    // Commentary:
    //
    //
    //
    //
    
    // Change log:
    //
    //
    //
    //
    // This program is free software; you can redistribute it and/or
    // modify it under the terms of the GNU General Public License as
    // published by the Free Software Foundation; either version 3, or
    // (at your option) any later version.
    //
    // This program is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    // General Public License for more details.
    //
    // You should have received a copy of the GNU General Public License
    // along with this program; see the file COPYING.  If not, write to
    // the Free Software Foundation, Inc., 51 Franklin Street, Fifth
    // Floor, Boston, MA 02110-1301, USA.
    //
    //
    
    //
    
    #include "header.h"
    #include "../utility/numutil.h"
    #include "TableBase.h"
    #include "Interpol.h"
    
    
    static SrcFinfo1< double >* lookupOut()
    {
    	static SrcFinfo1< double > lookupOut( "lookupOut",
    		"respond to a request for a value lookup" );
    	return &lookupOut;
    }
    
    const Cinfo * Interpol::initCinfo()
    {
        //////////////////////////////////////////////////////////////
        // Field Definitions
        //////////////////////////////////////////////////////////////
        static ValueFinfo< Interpol, double > xmin(
            "xmin",
            "Minimum value of x. x below this will result in y[0] being returned.",
            &Interpol::setXmin,
            &Interpol::getXmin
                                                   );
        static ValueFinfo< Interpol, double > xmax(
            "xmax",
            "Maximum value of x. x above this will result in y[last] being"
            " returned.",
            &Interpol::setXmax,
            &Interpol::getXmax);
    
        static ReadOnlyValueFinfo< Interpol, double > y(
            "y",
            "Looked up value.",
            &Interpol::getY);
        //////////////////////////////////////////////////////////////
        // MsgDest Definitions
        //////////////////////////////////////////////////////////////
    
        static DestFinfo input( "input",
                                "Interpolates using the input as x value.",
                                new OpFunc1< Interpol, double >( &Interpol::handleInput ));
    
        static DestFinfo process( "process",
                                  "Handles process call, updates internal time stamp.",
                                  new ProcOpFunc< Interpol >( &Interpol::process ) );
        static DestFinfo reinit( "reinit",
                                 "Handles reinit call.",
                                 new ProcOpFunc< Interpol >( &Interpol::reinit ) );
        //////////////////////////////////////////////////////////////
        // SharedMsg Definitions
        //////////////////////////////////////////////////////////////
        static Finfo* procShared[] = {
            &process, &reinit
        };
        static SharedFinfo proc( "proc",
                                 "Shared message for process and reinit",
                                 procShared, sizeof( procShared ) / sizeof( const Finfo* )
                                 );
    
        //////////////////////////////////////////////////////////////
        // Field Element for the vector data
        // Use a limit of 2^20 entries for the tables, about 1 million.
        //////////////////////////////////////////////////////////////
    
        static Finfo* interpolFinfos[] = {
            &xmin,		// Value
            &xmax,		// Value
            &y,
            // &xdivs,		// Value
            lookupOut(),
            &input,		// DestFinfo
            &proc,			// SharedFinfo
        };
    
        static string doc[] =
                {
                    "Name", "Interpol",
                    "Author", "Upinder Bhalla, Subhasis Ray, 2014, NCBS",
                    "Description", "Interpol: Interpolation class. "
                    "Handles lookup from a 1-dimensional array of real-numbered values."
                    "Returns 'y' value based on given 'x' value. "
                    "Can either use interpolation or roundoff to the nearest index.",
                };
    
        static Dinfo< Interpol > dinfo;
        static Cinfo interpolCinfo (
            "Interpol",
            TableBase::initCinfo(),
            interpolFinfos,
            sizeof( interpolFinfos ) / sizeof ( Finfo* ),
            &dinfo,
            doc,
            sizeof(doc) / sizeof(string));
    
        return &interpolCinfo;
    }
    
    static const Cinfo * interpolCinfo = Interpol::initCinfo();
    
    Interpol::Interpol(): xmin_(0.0), xmax_(1.0)
    {
    }
    
    Interpol::Interpol(double xmin, double xmax)
            : xmin_(xmin),
              xmax_(xmax)
    {}
    
    void Interpol::setXmin(double value)
    {
        if (almostEqual(value, xmax_)){
            cerr << "Error: Interpol::setXmin: Xmin ~= Xmax : Assignment failed\n";
            return;
        }
        xmin_ = value;
    }
    
    double Interpol::getXmin() const
    {
        return xmin_;
    }
    
    void Interpol::setXmax(double value)
    {
        if (almostEqual(value, xmin_)){
            cerr << "Error: Interpol::setXmax: Xmin ~= Xmax : Assignment failed\n";
            return;
        }
        xmax_ = value;
    }
    
    double Interpol::getXmax() const
    {
        return xmax_;
    }
    
    double Interpol::getY() const
    {
        return y_;
    }
    
    //////////////////////////////////////////////////////////////
    // MsgDest Definitions
    //////////////////////////////////////////////////////////////
    
    void Interpol::process( const Eref& e, ProcPtr p )
    {
        y_ = interpolate(xmin_, xmax_, x_);
        lookupOut()->send( e, y_ );
    }
    
    void Interpol::reinit( const Eref& e, ProcPtr p )
    {
        x_ = 0.0;
    }
    
    //////////////////////////////////////////////////////////////
    // Used to handle direct messages into the interpol, or
    // returned plot data from queried objects.
    //////////////////////////////////////////////////////////////
    void Interpol::handleInput( double v )
    {
        x_ = v;
    }
    
    //
    // Interpol.cpp ends here