00001 /***************************************************************************
00002 modulator.h - description
00003 -------------------
00004 begin : Mon Aug 11 2000
00005 copyright : (C) 2000 by Michael Peeters
00006 email : Michael.Peeters@vub.ac.be
00007 ***************************************************************************/
00008
00009 /***************************************************************************
00010 * *
00011 * This program is free software; you can redistribute it and/or modify *
00012 * it under the terms of the GNU General Public License as published by *
00013 * the Free Software Foundation; either version 2 of the License, or *
00014 * (at your option) any later version. *
00015 * *
00016 ***************************************************************************/
00017
00018 #ifndef MODULATOR_H
00019 #define MODULATOR_H
00020
00021 #include "numerictypes.h"
00022 #include "numerictraits.h"
00023 #include "vectorfunction.h"
00024 #include "timeframe.h"
00025 #include "parameter.h"
00026 #include "cycler.h"
00027 #include "ticktock.h"
00028 #include <string>
00029
00030 namespace MODEL {
00031
00032 class TimeFrame;
00033
00045 class Modulator : public TickTock {
00046 public:
00047 template<integer dims, typename nelem, class NT >
00048 Modulator(TimeFrame&
00049 T,VectorFunction<dims,nelem,NT> & v, string param)
00050 : TickTock(T,T.get_dt()) // a modulator has the same resolution !
00051 {
00052 Parameter p=v.get_parameter(param);
00053 _p=&p;
00054 }
00055
00057 virtual void tick() {(*_p)=modulate();}
00058
00060 virtual number modulate(void)=0;
00061
00062 private:
00063 number* _p;
00064
00065 };
00066
00067 //--------------------------------------------------------------------------------
00068
00070 class LinearMod : public Modulator{
00071 public:
00072 template<integer dims, typename nelem, class NT >
00073 LinearMod( TimeFrame& T,
00074 VectorFunction<dims,nelem,NT>& v,
00075 string param,
00076 number start,number end,
00077 time from, time until ) :
00078 Modulator(T,v,param),
00079 st(start),
00080 en(end), d(en-st), f (from), u(until/2.),du(u-f) {}
00081
00082 virtual number modulate();
00083
00084 private:
00085 number st;
00086 number en;
00087 number d;
00088 time f;
00089 time u;
00090 time du;
00091 };
00092
00093 //--------------------------------------------------------------------------------
00096 class BlockMod : public Modulator{
00097 public:
00098 template<integer dims, typename nelem, class NT >
00099 BlockMod( TimeFrame& T,
00100 VectorFunction<dims,nelem,NT>& v,
00101 string param,
00102 number low,number high,
00103 time period) :
00104 Modulator(T,v,param),
00105 l(low), h(high), p(period){}
00106
00107 virtual number modulate(void);
00108
00109 private:
00110 number l;
00111 number h;
00112 time p;
00113 };
00114
00115 //-------------------------------------------------------------------------------
00118 class StepMod : public Modulator {
00119 public:
00120 template<integer dims, typename nelem, class NT >
00121 StepMod( TimeFrame& T,
00122 VectorFunction<dims,nelem,NT>& v,
00123 string param,
00124 number start,number end,
00125 time at)
00126 : Modulator(T,v,param), st(start), en(end), a (at) {}
00127
00128 virtual number modulate();
00129
00130 private:
00131 number st;
00132 number en;
00133 time a;
00134 };
00135
00136 // ------------------------------------------------------------
00137
00142 class TriangleFadeMod : public Modulator{
00143 public:
00144 template<integer dims, typename nelem, class NT >
00145 TriangleFadeMod( TimeFrame& T,
00146 VectorFunction<dims,nelem,NT>& v,
00147 string param,
00148 number start,number end,
00149 time period, number deltapar, integer stay) :
00150 Modulator(T,v,param),
00151 st(start),
00152 en(end), d(en-st), p(period), dp (deltapar), s(stay),cs(1)
00153 { last_t=get_time(); in_t=0; }
00154
00155 virtual number modulate();
00156
00157 private:
00158 number st;
00159 number en;
00160 number d;
00161 time p ;
00162 number dp ;
00163 integer s;
00164
00165 integer cs;
00166 time last_t;
00167 time in_t;
00168
00169 };
00170
00171
00172 } // end namespace
00173 #endif
00174
00175 /*********************************************************************
00176 $Id: modulator.h,v 1.1 2001/05/22 10:54:55 mpeeters Exp $
00177 **********************************************************************
00178
00179 $Log: modulator.h,v $
00180 Revision 1.1 2001/05/22 10:54:55 mpeeters
00181 Moved sources and headers for libModel to model/ subdirectory, in an attempt to rationalize the source tree. This should make things "netter".
00182
00183 Revision 1.2 2000/09/15 10:26:31 mpeeters
00184 Cleaned out header and added CVS tails to files, removed superfuous
00185 @author comments, inserted dates
00186
00187 *********************************************************************/
More Info? Michael Peeters. Also, check our research website: www.alna.vub.ac.be
Last update: June 2002.