ADMB Documentation  11.1.2448
 All Classes Files Functions Variables Typedefs Friends Defines
model3.cpp
Go to the documentation of this file.
00001 /*
00002  * $Id: model3.cpp 1919 2014-04-22 22:02:01Z johnoel $
00003  *
00004  * Author: David Fournier
00005  * Copyright (c) 2008-2012 Regents of the University of California
00006  */
00007 #include <admodel.h>
00008 
00009 void initial_params::copy_all_values(const dvector& x, const int& ii)
00010   {
00011     for (int i=0;i<num_initial_params;i++)
00012     {
00013       //if ((varsptr[i])->phase_start <= current_phase)
00014       if (withinbound(0,(varsptr[i])->phase_start,current_phase))
00015       {
00016         (varsptr[i])->copy_value_to_vector(x,ii);
00017       }
00018     }
00019   }
00020 
00021 void param_init_number::copy_value_to_vector(const dvector& x, const int& ii)
00022   {
00023     ::copy_value_to_vector(*this,x,ii);
00024   }
00025 void param_init_bounded_number::copy_value_to_vector(const dvector& x,
00026   const int& ii)
00027   {
00028     ::copy_value_to_vector(*this,x,ii);
00029   }
00030 
00031 void param_init_vector::copy_value_to_vector(const dvector& x, const int& ii)
00032   {
00033     ::copy_value_to_vector(*this,x,ii);
00034   }
00035 
00036 void param_init_bounded_vector::copy_value_to_vector(const dvector& x,
00037   const int& ii)
00038   {
00039     ::copy_value_to_vector(*this,x,ii);
00040   }
00041 
00042 void param_init_matrix::copy_value_to_vector(const dvector& x, const int& ii)
00043   {
00044     ::copy_value_to_vector(*this,x,ii);
00045   }
00046 
00047 void copy_value_to_vector(const prevariable& x, const dvector& _v,
00048   const int& _ii)
00049   {
00050     dvector& v=(dvector&) _v;
00051     int& ii=(int&) _ii;
00052     v(ii++)=value(x);
00053   }
00054 
00055 void copy_value_to_vector(const dvar_vector& x, const dvector& _v,
00056   const int& _ii)
00057   {
00058     dvector& v=(dvector&) _v;
00059     int& ii=(int&) _ii;
00060     if (!(!(x)))
00061     {
00062       int mmin=x.indexmin();
00063       int mmax=x.indexmax();
00064       for (int i=mmin;i<=mmax;i++)
00065       {
00066         v(ii++)=value(x(i));
00067       }
00068     }
00069   }
00070 
00071 void copy_value_to_vector(const dvar_matrix& x, const dvector& v, const int& ii)
00072   {
00073     if (!(!(x)))
00074     {
00075       int mmin=x.rowmin();
00076       int mmax=x.rowmax();
00077       for (int i=mmin;i<=mmax;i++)
00078       {
00079         copy_value_to_vector(x(i),v,ii);
00080       }
00081     }
00082   }
00083 void copy_value_to_vector(const dvar3_array& x, const dvector& v, const int& ii)
00084   {
00085     if (!(!(x)))
00086     {
00087       int mmin=x.slicemin();
00088       int mmax=x.slicemax();
00089       for (int i=mmin;i<=mmax;i++)
00090       {
00091         copy_value_to_vector(x(i),v,ii);
00092       }
00093     }
00094   }
00095 void initial_params::restore_all_values(const dvector& x, const int& ii)
00096   {
00097     for (int i=0;i<num_initial_params;i++)
00098     {
00099       //if ((varsptr[i])->phase_start <= current_phase)
00100       if (withinbound(0,(varsptr[i])->phase_start,current_phase))
00101       {
00102         (varsptr[i])->restore_value_from_vector(x,ii);
00103       }
00104     }
00105   }
00106 
00107 void param_init_number::restore_value_from_vector(const dvector& x,
00108   const int& ii)
00109   {
00110     ::restore_value_from_vector(*this,x,ii);
00111   }
00112 
00113 void param_init_bounded_number::restore_value_from_vector(const dvector& x,
00114   const int& ii)
00115   {
00116     ::restore_value_from_vector(*this,x,ii);
00117   }
00118 
00119 void param_init_vector::restore_value_from_vector(const dvector& x,
00120   const int& ii)
00121   {
00122     ::restore_value_from_vector(*this,x,ii);
00123   }
00124 
00125 void param_init_bounded_vector::restore_value_from_vector(const dvector& x,
00126   const int& ii)
00127   {
00128     ::restore_value_from_vector(*this,x,ii);
00129   }
00130 
00131 void param_init_matrix::restore_value_from_vector(const dvector& x,
00132   const int& ii)
00133   {
00134     ::restore_value_from_vector(*this,x,ii);
00135   }
00136 
00137 void restore_value_from_vector(const prevariable& _x, const dvector& v,
00138   const int& _ii)
00139   {
00140     ADUNCONST(prevariable,x)
00141     int& ii=(int&) _ii;
00142     //v(ii++)=value(x);
00143     x=v(ii++);
00144   }
00145 
00146 void restore_value_from_vector(const dvar_vector& _x, const dvector& v,
00147   const int& _ii)
00148   {
00149     ADUNCONST(dvar_vector,x)
00150     int& ii=(int&) _ii;
00151     if (!(!(x)))
00152     {
00153       int mmin=x.indexmin();
00154       int mmax=x.indexmax();
00155       for (int i=mmin;i<=mmax;i++)
00156       {
00157         //v(ii++)=value(x(i));
00158         x(i)=v(ii++);
00159       }
00160     }
00161   }
00162 
00163 void restore_value_from_vector(const dvar_matrix& x, const dvector& v,
00164   const int& ii)
00165   {
00166     if (!(!(x)))
00167     {
00168       int mmin=x.rowmin();
00169       int mmax=x.rowmax();
00170       for (int i=mmin;i<=mmax;i++)
00171       {
00172         restore_value_from_vector(x(i),v,ii);
00173       }
00174     }
00175   }
00176 
00177 void restore_value_from_vector(dvar3_array& x, const dvector& v, const int& ii)
00178   {
00179     if (!(!(x)))
00180     {
00181       int mmin=x.slicemin();
00182       int mmax=x.slicemax();
00183       for (int i=mmin;i<=mmax;i++)
00184       {
00185         restore_value_from_vector(x(i),v,ii);
00186       }
00187     }
00188   }