ADMB Documentation  11.1.2535
 All Classes Files Functions Variables Typedefs Friends Defines
model44.cpp
Go to the documentation of this file.
00001 /*
00002  * $Id: model44.cpp 2384 2014-09-19 20:43:07Z 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_matrix_vector::set_initial_value(const double_index_type& _it)
00010  {
00011     it=new double_index_type(_it);
00012  }
00013 
00017 param_init_matrix_vector::param_init_matrix_vector():
00018   v(NULL),
00019   index_min(0),
00020   index_max(0),
00021   it(NULL)
00022 {
00023 }
00024 
00025 void param_init_matrix_vector::allocate(
00026   int min1,
00027   int max1,
00028   const index_type& min,
00029   const index_type& max,
00030   const index_type& min2,
00031   const index_type& max2,
00032   const char* s)
00033 {
00034   allocate(min1,max1,min,max,min2,max2,1,s);
00035 }
00036 
00037 void param_init_matrix_vector::allocate(
00038   int min1,
00039   int max1,
00040   const index_type& min,
00041   const index_type& max,
00042   const index_type& min2,
00043   const index_type& max2,
00044   const index_type& phase_start,
00045   const char * s)
00046 {
00047   int size = max1 - min1 + 1;
00048   if (size > 0)
00049   {
00050     v = new param_init_matrix[size];
00051     if (!v)
00052     {
00053         cerr << " error trying to allocate memory in "
00054           "param_init_vector_vector " << endl;
00055         exit(1);
00056     }
00057     index_min=min1;
00058     index_max=max1;
00059     v-=indexmin();
00060     for (int i=indexmin();i<=indexmax();i++)
00061     {
00062       if (it) v[i].set_initial_value(ad_double((*it)[i]));
00063       adstring ss=s + adstring("[") + str(i) + adstring("]");
00064       v[i].allocate(min[i],max[i],min2[i],max2[i], phase_start[i],
00065         (char*)(ss));
00066     }
00067   }
00068 }
00069 
00070  void param_init_matrix::allocate(
00071    const ad_integer& imin,
00072    const ad_integer&imax,
00073    const index_type& imin2,
00074    const index_type& imax2,
00075    const ad_integer& phase_start,
00076    const char * s)
00077  {
00078    named_dvar_matrix::allocate(imin,imax,imin2,imax2,s);
00079    if (!(!(*this)))
00080    {
00081      initial_params::allocate(phase_start);
00082      if (ad_comm::global_bparfile)
00083      {
00084        *(ad_comm::global_bparfile) >> dvar_matrix(*this);
00085      }
00086      else if (ad_comm::global_parfile)
00087      {
00088        *(ad_comm::global_parfile) >> dvar_matrix(*this);
00089      }
00090      else
00091      {
00092        dvar_matrix::operator=(initial_value);
00093      }
00094    }
00095    else
00096    {
00097      initial_params::allocate(-1);
00098    }
00099  }
00103 param_init_matrix_vector::~param_init_matrix_vector()
00104 {
00105   deallocate();
00106 }
00110 void param_init_matrix_vector::deallocate(void)
00111 {
00112   if (it)
00113   {
00114     delete it;
00115     it = NULL;
00116   }
00117   if (v)
00118   {
00119     v += indexmin();
00120     delete [] v;
00121     v = NULL;
00122   }
00123 }