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