ADMB Documentation  11.1.1020
 All Classes Files Functions Variables Typedefs Friends Defines
f1b2locl.h
Go to the documentation of this file.
00001 /*
00002  * $Id: f1b2locl.h 542 2012-07-10 21:04:06Z johnoel $
00003  *
00004  * Author: David Fournier
00005  * Copyright (c) 2008-2012 Regents of the University of California
00006  * 
00007  * ADModelbuilder and associated libraries and documentations are
00008  * provided under the general terms of the "BSD" license.
00009  *
00010  * License:
00011  * 
00012  * Redistribution and use in source and binary forms, with or without
00013  * modification, are permitted provided that the following conditions are
00014  * met:
00015  * 
00016  * 1. Redistributions of source code must retain the above copyright
00017  * notice, this list of conditions and the following disclaimer.
00018  * 
00019  * 2.  Redistributions in binary form must reproduce the above copyright
00020  * notice, this list of conditions and the following disclaimer in the
00021  * documentation and/or other materials provided with the distribution.
00022  * 
00023  * 3.  Neither the name of the  University of California, Otter Research,
00024  * nor the ADMB Foundation nor the names of its contributors may be used
00025  * to endorse or promote products derived from this software without
00026  * specific prior written permission.
00027  * 
00028  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00029  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00030  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00031  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00032  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00033  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00034  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00035  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00036  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00037  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00038  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00039  *
00040  */
00045 #if !defined(__F1B2LOCL__)
00046 # define __F1B2LOCL__
00047 #include <df1b2fun.h>
00048 #include <adrndeff.h>
00049 
00050 class local_dep_df1b2variable;
00051 
00056 class local_init_var
00057 {
00058 public:
00059   static df1b2variable * funnel_constraints_penalty;
00060   static void reset_counters(void) { num_vars=0; /*num_all_vars=0;*/}
00061   static void end_local_calculations(void);
00062   static int num_vars;
00063   //static int num_all_vars;
00064   static int num_inactive_vars;
00065   static int num_active_parameters;
00066   static init_df1b2vector * py;
00067   static imatrix * plist;
00068   int index;
00069   static   local_init_var ** list;
00070   //static   local_init_var ** all_list;
00071   static   local_init_var ** inactive_list;
00072   local_init_var(void) { add_to_list(); }
00073   void add_to_list(void);
00074   void delete_from_list(void);
00075   void add_to_inactive_list(void);
00076   virtual void allocate(void);
00077   //virtual void xinit(void);
00078   static void dot_calcs_all(local_dep_df1b2variable&);
00079   virtual void dot_calcs(local_dep_df1b2variable&,int j)=0;
00080   virtual void set_dot(int)=0;
00081   static void set_dot_all(void);
00082   virtual void xinit(init_df1b2vector&,int& ii)=0;
00083   virtual void xinit(dvector&,int& ii)=0;
00084   virtual void set_value(const init_df1b2vector&,const int& ii,
00085     const df1b2variable&)=0;
00086   virtual void set_value(const init_df1b2vector&,const int& ii)=0;
00087   virtual void set_index(imatrix&,int& ii)=0;
00088   virtual int nvar_calc(void)=0;
00089 
00090   static void reset(init_df1b2vector& x);
00091     
00092   static void allocate_all(void);
00093   static int nvarcalc_all(void);
00094 };
00095 
00100 class local_init_df1b2variable : public local_init_var, public df1b2variable 
00101 {
00102 public:
00103   const df1b2variable * p;
00104   const double * xdot;
00105   int type;
00106   void * pointer;
00107   double xu;
00108   int ind_index;
00109   int nvar_calc(void){return 1;}
00110   virtual void set_dot(int ii){*(get_u_dot()+ii)=1;ii++;}
00111   local_init_df1b2variable(const df1b2_init_number & x); 
00112   local_init_df1b2variable(const df1b2variable & x); 
00113   local_init_df1b2variable(double xu,double * xdot); 
00114   local_init_df1b2variable(void); 
00115   local_init_df1b2variable(const random_effects_bounded_vector_info&); 
00116   virtual void allocate(void);
00117   virtual void allocate(const df1b2variable&);
00118   virtual void preallocate(const df1b2variable&);
00119   virtual void xinit(init_df1b2vector&,int& ii);
00120   virtual void xinit(dvector&,int& ii);
00121   virtual void set_value(const init_df1b2vector&,const int& ii);
00122   virtual void set_value(const init_df1b2vector&,const int& ii,
00123     const df1b2variable&);
00124   virtual void set_index(imatrix&,int& ii);
00125   virtual void dot_calcs(local_dep_df1b2variable&,int j);
00126 };
00127 
00132 class local_init_bounded_df1b2vector : public local_init_var, 
00133   public df1b2vector 
00134 {
00135   const df1b2vector * p;
00136 public:
00137   int nvar_calc(void);
00138   virtual void set_dot(int offset){cout << "HERE" << endl; ad_exit(1);}
00139   local_init_bounded_df1b2vector(const df1b2_init_bounded_vector & x);
00140   virtual void xinit(init_df1b2vector&,int& ii);
00141   virtual void xinit(dvector&,int& ii){ cout << "here"<< endl;}
00142   virtual void set_value(const init_df1b2vector&,const int& ii,
00143     const df1b2variable&);
00144   virtual void set_value(const init_df1b2vector&,const int& ii){ cout << "here"<< endl;}
00145   virtual void set_index(imatrix&,int& ii);
00146 };
00147 
00152 class local_init_df1b2vector : public local_init_var, public df1b2vector 
00153 {
00154   const df1b2vector * p;
00155 public:
00156   int nvar_calc(void);
00157   local_init_df1b2vector(const df1b2vector & x);
00158   virtual void xinit(init_df1b2vector&,int& ii);
00159   virtual void xinit(dvector&,int& ii){ cout << "here"<< endl;}
00160   virtual void set_value(const init_df1b2vector&,const int& ii,
00161     const df1b2variable&);
00162   virtual void set_value(const init_df1b2vector&,const int& ii);
00163   virtual void set_index(imatrix&,int& ii);
00164   virtual void dot_calcs(local_dep_df1b2variable&,int ){ cout << "Here" << endl;}
00165 };
00166 // ************************************************************
00167 // ************************************************************
00168 // ************************************************************
00169 
00174 class local_dep_var
00175 {
00176 public:
00177   static df1b2variable * funnel_constraints_penalty;
00178   static void reset_counters(void) { num_vars=0; /*num_all_vars=0;*/}
00179   static int num_vars;
00180   //static int num_all_vars;
00181   static int num_inactive_vars;
00182   static int num_active_parameters;
00183   //static dep_df1b2vector * py;
00184   static imatrix * plist;
00185   int index;
00186   static   local_dep_var ** list;
00187   //static   local_dep_var ** all_list;
00188   static   local_dep_var ** inactive_list;
00189   local_dep_var(void) { add_to_list(); }
00190   void add_to_list(void);
00191   void delete_from_list(void);
00192   void add_to_inactive_list(void);
00193   virtual void allocate(void)=0;
00194   virtual void deallocate(void)=0;
00195   //virtual void xdep(void);
00196   //virtual void xinit(dep_df1b2vector&,int& ii)=0;
00197   //virtual void xdep(dvector&,int& ii)=0;
00198   //virtual void set_value(const dep_df1b2vector&,const int& ii,
00199    // const df1b2variable&)=0;
00200   //virtual void set_value(const dep_df1b2vector&,const int& ii)=0;
00201   virtual void set_index(imatrix&,int& ii)=0;
00202   virtual int nvar_calc(void)=0;
00203 
00204   //static void reset(dep_df1b2vector& x);
00205     
00206   static void deallocate_all(void);
00207   static void allocate_all(void);
00208   static int nvarcalc_all(void);
00209 };
00210 
00215 class local_dep_df1b2variable : public local_dep_var, public df1b2variable 
00216 {
00217 public:
00218   const df1b2variable * p;
00219   ~local_dep_df1b2variable();
00220   int type;
00221   void * pointer;
00222   const double * xdot;
00223   const double * pxdot;
00224   double xu;
00225   int ind_index;
00226   int nvar_calc(void){return 1;}
00227   //local_dep_df1b2variable(const df1b2_dep_number & x); 
00228   local_dep_df1b2variable(const df1b2variable & x); 
00229   local_dep_df1b2variable(void);
00230   local_dep_df1b2variable(double * xdot,double * pxdot);
00231   //local_dep_df1b2variable(const random_effects_bounded_vector_info&); 
00232   local_dep_df1b2variable&  operator = (const df1b2variable&);  
00233   virtual void allocate(void);
00234   virtual void deallocate(void);
00235   //virtual void allocate(const df1b2variable&);
00236   //virtual void preallocate(const df1b2variable&);
00237   //virtual void xdep(dep_df1b2vector&,int& ii);
00238   //virtual void xdep(dvector&,int& ii);
00239   //virtual void set_value(const dep_df1b2vector&,const int& ii);
00240   //virtual void set_value(const dep_df1b2vector&,const int& ii,
00241    // const df1b2variable&);
00242   virtual void set_index(imatrix&,int& ii);
00243 };
00244 
00249 class local_dep_df1b2vector : public local_dep_var, public df1b2vector 
00250 {
00251   const df1b2vector * p;
00252 public:
00253   int nvar_calc(void);
00254   local_dep_df1b2vector(const df1b2vector & x);
00255   //virtual void xdep(dep_df1b2vector&,int& ii);
00256   //virtual void xdep(dvector&,int& ii){ cout << "here"<< endl;}
00257   //virtual void set_value(const dep_df1b2vector&,const int& ii,
00258   //  const df1b2variable&);
00259   //virtual void set_value(const dep_df1b2vector&,const int& ii);
00260   virtual void set_index(imatrix&,int& ii);
00261 };
00262 
00263 
00264 df1b2variable plocal_tester(int i,const df1b2variable& x,
00265   const df1b2variable& y);
00266 df1b2variable local_tester(int i,local_init_df1b2variable x,
00267   local_init_df1b2variable y);
00268 
00273 class local_init_pass1_var
00274 {
00275 public:
00276   static void reset_counters(void) { num_vars=0; /*num_all_vars=0;*/}
00277   static void end_local_calculations(void);
00278   static int num_vars;
00279   static int num_active_parameters;
00280   static   local_init_pass1_var ** list;
00281   local_init_pass1_var(void) { add_to_list(); }
00282   void add_to_list(void);
00283   virtual void allocate(void)=0;
00284   static void dot_calcs_all(local_dep_df1b2variable&);
00285   virtual void dot_calcs(local_dep_df1b2variable&,int j)=0;
00286   virtual void set_dot(int)=0;
00287   static void set_dot_all(void);
00288   virtual int nvar_calc(void)=0;
00289   static void allocate_all(void);
00290   static int nvarcalc_all(void);
00291 };
00292 
00297 class local_init_pass1_df1b2variable : public local_init_pass1_var, 
00298   public df1b2variable 
00299 {
00300   double xu;
00301   double * xudot;
00302 public:
00303   virtual void set_dot(int ii){*(get_u_dot()+ii)=1;ii++;}
00304   virtual void dot_calcs(local_dep_df1b2variable&,int j);
00305   void allocate(void);
00306   int nvar_calc(void){return 1;}
00307   local_init_pass1_df1b2variable(double _xu,double* _xudot);
00308  
00309 };
00310 
00311 #endif  //  #if !defined(__DF1B2FNL__)