ADMB Documentation  11.1.2490
 All Classes Files Functions Variables Typedefs Friends Defines
model21.cpp
Go to the documentation of this file.
00001 /*
00002  * $Id: model21.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 param_init_d3array::set_simulation_bounds(const dmatrix& symbds,
00010   const int& ii)
00011 {
00012  cerr << " Error -- void param_init_d3array::set_simulation_bounds"
00013    " (const dmatrix& symbds, const int& ii) has not yet been defined" << endl;
00014  exit(1);
00015 }
00016 */
00017 
00018 void param_init_d3array::get_jacobian(const dvector& y, const dvector& ndev,
00019   const int& ii)
00020 {
00021  cerr << " Error -- "
00022    " void param_init_number::add_value(const dvector& ndev, const int& ii)"
00023    " has not yet been defined" << endl;
00024  exit(1);
00025 }
00026 
00027 const char * param_init_d3array::label(void)
00028 {
00029   return model_name_tag::label().mychar();
00030 }
00031 
00032 param_init_d3array::param_init_d3array() : named_dvar3_array() ,
00033   initial_params()
00034 {
00035   //add_to_list();
00036 }
00037 
00038 int param_init_d3array::size_count(void)
00039 {
00040   return ::size_count(*this);
00041 }
00042 
00043 void param_init_d3array::save_value(void)
00044 {
00045   if (!(!(*this)))
00046     *(ad_comm::global_savefile) << label_class(this->label())
00047       << dvar3_array(*this) << endl;
00048 }
00049 
00050 void param_init_d3array::bsave_value(void)
00051 {
00052   if (!(!(*this)))
00053   {
00054     dvar3_array& tmp=*this;
00055     *(ad_comm::global_bsavefile) << tmp;
00056   }
00057 }
00058 
00059 void param_init_d3array::set_value(const dvar_vector& x,
00060   const int& ii, const dvariable& pen)
00061   {
00062     ::set_value(*this,x,ii);
00063   }
00064 
00065 void param_init_d3array::set_value_inv(const dvector& x, const int& ii)
00066   {
00067     ::set_value_inv(*this,x,ii);
00068   }
00069 
00070 void param_init_d3array::copy_value_to_vector(const dvector& x, const int& ii)
00071   {
00072     ::copy_value_to_vector(*this,x,ii);
00073   }
00074 
00075 void param_init_d3array::restore_value_from_vector(const dvector& x,
00076   const int& ii)
00077   {
00078     ::restore_value_from_vector(*this,x,ii);
00079   }
00080 
00081 void param_init_d3array::save_value(const ofstream& _ofs,int prec)
00082   {
00083     ofstream& ofs=(ofstream&) _ofs;
00084     ofs << setw(prec+6) << setprecision(prec) << dvar3_array(*this) << endl;
00085   }
00086 
00087   void param_init_d3array::allocate(int smin,int smax,int rmin,int rmax,
00088     int cmin,int cmax,const char * s)
00089   {
00090     allocate(smin,smax,rmin,rmax,cmin,cmax,1,s);
00091   }
00092 
00093   void param_init_d3array::allocate(const ad_integer& sl,
00094     const ad_integer& sh,const index_type& nrl,const index_type& nrh,
00095     const index_type& ncl,const index_type& nch,const char * s)
00096   {
00097     allocate(sl,sh,nrl,nrh,ncl,nch,1,s);
00098   }
00099 
00100   void param_init_d3array::allocate(const ad_integer& sl,
00101     const ad_integer& sh,const index_type& nrl,const index_type& nrh,
00102     const index_type& ncl,const index_type& nch,int phase_start,
00103     const char * s)
00104   {
00105     named_dvar3_array::allocate(sl,sh,nrl,nrh,ncl,nch,s);
00106     initial_params::allocate(phase_start);
00107     if (!(!(*this)))
00108     {
00109       for (int i=indexmin();i<=indexmax();i++)
00110       {
00111         if (allocated((*this)(i)))
00112         {
00113           for (int j=(*this)(i).indexmin();j<=(*this)(i).indexmax();j++)
00114           {
00115             if (allocated((*this)(i,j)))
00116             {
00117               if (ad_comm::global_bparfile)
00118               {
00119                 *(ad_comm::global_bparfile) >> (*this)(i,j);
00120               }
00121               else if (ad_comm::global_parfile)
00122               {
00123                 *(ad_comm::global_parfile) >> (*this)(i,j);
00124               }
00125               else
00126               {
00127                 (*this)(i,j)=(initial_value);
00128               }
00129             }
00130           }
00131         }
00132       }
00133     }
00134   }
00135 
00136   void param_init_d3array::allocate(int smin,int smax,int rmin,int rmax,
00137     int cmin,int cmax,int phase_start, const char * s)
00138   {
00139     named_dvar3_array::allocate(smin,smax,rmin,rmax,cmin,cmax,s);
00140     initial_params::allocate(phase_start);
00141     if (!(!(*this)))
00142     {
00143       for (int i=indexmin();i<=indexmax();i++)
00144       {
00145         if (allocated((*this)(i)))
00146         {
00147           if (ad_comm::global_bparfile)
00148           {
00149             *(ad_comm::global_bparfile) >> (*this)(i);
00150           }
00151           else if (ad_comm::global_parfile)
00152           {
00153             *(ad_comm::global_parfile) >> (*this)(i);
00154           }
00155           else
00156           {
00157             (*this)(i)=(initial_value);
00158           }
00159         }
00160       }
00161     }
00162   }
00163 
00164 void param_init_d3array::curv_scale(const dvector& _v, const dvector& x,
00165   const int& _ii)
00166   {
00167     int& ii=(int&) _ii;
00168     dvector& v=(dvector&) _v;
00169     int smin=slicemin();
00170     int smax=slicemax();
00171     for (int k=smin;k<=smax;k++)
00172     {
00173       int mmin=(*this)(k).rowmin();
00174       int mmax=(*this)(k).rowmax();
00175       for (int i=mmin;i<=mmax;i++)
00176       {
00177         int cmin=((*this)(k,i)).indexmin();
00178         int cmax=((*this)(k,i)).indexmax();
00179         for (int j=cmin;j<=cmax;j++)
00180         {
00181           v(ii++)=0.;
00182         }
00183       }
00184     }
00185   }
00186 
00187 void param_init_d3array::hess_scale(const dvector& _v, const dvector& x,
00188   const int& _ii)
00189   {
00190     int& ii=(int&) _ii;
00191     dvector& v=(dvector&) _v;
00192     int smin=slicemin();
00193     int smax=slicemax();
00194     for (int k=smin;k<=smax;k++)
00195     {
00196       int mmin=(*this)(k).rowmin();
00197       int mmax=(*this)(k).rowmax();
00198       for (int i=mmin;i<=mmax;i++)
00199       {
00200         int cmin=((*this)(k,i)).indexmin();
00201         int cmax=((*this)(k,i)).indexmax();
00202         for (int j=cmin;j<=cmax;j++)
00203         {
00204           v(ii++)=0.;
00205         }
00206       }
00207     }
00208   }
00209 
00210 void param_init_d3array::sd_scale(const dvector& _v, const dvector& x,
00211   const int& _ii)
00212   {
00213     int& ii=(int&) _ii;
00214     dvector& v=(dvector&) _v;
00215     if (allocated(*this))
00216     {
00217       int smin=slicemin();
00218       int smax=slicemax();
00219       for (int k=smin;k<=smax;k++)
00220       {
00221         if (allocated((*this)(k)))
00222         {
00223           int mmin=(*this)(k).rowmin();
00224           int mmax=(*this)(k).rowmax();
00225           for (int i=mmin;i<=mmax;i++)
00226           {
00227             if (allocated((*this)(k,i)))
00228             {
00229               int cmin=((*this)(k,i)).indexmin();
00230               int cmax=((*this)(k,i)).indexmax();
00231               for (int j=cmin;j<=cmax;j++)
00232               {
00233                 v(ii++)=1.;
00234               }
00235             }
00236           }
00237         }
00238       }
00239     }
00240   }
00241 
00242 cifstream& operator>>(const cifstream& _s, param_init_d3array& m)
00243 {
00244   cifstream&  s=(cifstream&) _s;
00245   s >> dvar3_array(m);
00246   return s;
00247 }
00248 
00249 void param_init_d3array::restore_value(const ifstream& ofs)
00250 {
00251   ofs  >> dvar3_array(*this);
00252 }