ADMB Documentation  11.5.3152
 All Classes Files Functions Variables Typedefs Friends Defines
model46.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_bounded_matrix_vector::set_initial_value(
00010   const double_index_type& _it)
00011  {
00012     it=new double_index_type(_it);
00013  }
00014 
00018 param_init_bounded_matrix_vector::param_init_bounded_matrix_vector():
00019   v(NULL),
00020   index_min(0),
00021   index_max(0),
00022   it(NULL)
00023 {
00024 }
00025 
00026 void param_init_bounded_matrix_vector::allocate(
00027   int min1,
00028   int max1,
00029   const index_type& min,
00030   const index_type& max,
00031   const index_type& min2,
00032   const index_type& max2,
00033   const double_index_type& dmin,
00034   const double_index_type& dmax,
00035   const char* s)
00036 {
00037   allocate(min1,max1,min,max,min2,max2,dmin,dmax,1,s);
00038 }
00039 
00040 void param_init_bounded_matrix_vector::allocate(
00041   int min1,
00042   int max1,
00043   const index_type& min,
00044   const index_type& max,
00045   const index_type& min2,
00046   const index_type& max2,
00047   const double_index_type& dmin,
00048   const double_index_type& dmax,
00049   const index_type& phase_start,
00050   const char* s)
00051 {
00052   int size = max1 - min1 + 1;
00053   if (size > 0)
00054   {
00055     v = new param_init_bounded_matrix[size];
00056     if (!v)
00057     {
00058         cerr << " error trying to allocate memory in "
00059           "param_init_vector_vector " << endl;
00060         exit(1);
00061     }
00062 
00063     index_min=min1;
00064     index_max=max1;
00065     v-=indexmin();
00066     for (int i=indexmin();i<=indexmax();i++)
00067     {
00068        if (it) v[i].set_initial_value(ad_double((*it)[i]));
00069        adstring ss=s + adstring("[") + str(i) + adstring("]");
00070        v[i].allocate(
00071           min[i],
00072           max[i],
00073           min2[i],
00074           max2[i],
00075           dmin[i],
00076           dmax[i],
00077           phase_start[i],
00078           (char*)(ss) );
00079     }
00080   }
00081 }
00086 void param_init_bounded_matrix::allocate(
00087   const ad_integer& imin, const ad_integer& imax,
00088   const ad_integer& imin2, const ad_integer& imax2,
00089   const ad_double& _bmin, const ad_double& _bmax,
00090   const ad_integer& _phase_start, const char* s)
00091 {
00092   minb = _bmin;
00093   maxb = _bmax;
00094   named_dvar_matrix::allocate(imin,imax,imin2,imax2,s);
00095   if (!(!(*this)))
00096   {
00097     initial_params::allocate(_phase_start);
00098     if (ad_comm::global_bparfile)
00099     {
00100       *(ad_comm::global_bparfile) >> dvar_matrix(*this);
00101     }
00102     else if (ad_comm::global_parfile)
00103     {
00104       *(ad_comm::global_parfile) >> dvar_matrix(*this);
00105     }
00106     else
00107     {
00108       if ((!initial_value_flag)
00109         || initial_value <=minb || initial_value >= maxb)
00110       {
00111         //cerr << "Initial value out of bounds -- using halfway value" << endl;
00112         initial_value=(minb+maxb)/2.;
00113       }
00114       dvar_matrix::operator=(initial_value);
00115     }
00116   }
00117   else
00118   {
00119     initial_params::allocate(-1);
00120   }
00121 }
00122 
00126 param_init_bounded_matrix_vector::~param_init_bounded_matrix_vector()
00127 {
00128   deallocate();
00129 }
00133 void param_init_bounded_matrix_vector::deallocate(void)
00134 {
00135   if (it)
00136   {
00137     delete it;
00138     it = NULL;
00139   }
00140   if (v)
00141   {
00142     v += indexmin();
00143     delete [] v;
00144     v = NULL;
00145   }
00146 }