ADMB Documentation  11.5.3346
 All Classes Files Functions Variables Typedefs Friends Defines
model44.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_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 }
00073 void param_init_matrix::allocate(
00074   const ad_integer& imin,
00075   const ad_integer& imax,
00076   const index_type& imin2,
00077   const index_type& imax2,
00078   const ad_integer& _phase_start,
00079   const char* s)
00080 {
00081   named_dvar_matrix::allocate(imin,imax,imin2,imax2,s);
00082   if (!(!(*this)))
00083   {
00084     initial_params::allocate(_phase_start);
00085     if (ad_comm::global_bparfile)
00086     {
00087       *(ad_comm::global_bparfile) >> dvar_matrix(*this);
00088     }
00089     else if (ad_comm::global_parfile)
00090     {
00091       *(ad_comm::global_parfile) >> dvar_matrix(*this);
00092     }
00093     else
00094     {
00095       dvar_matrix::operator=(initial_value);
00096     }
00097   }
00098   else
00099   {
00100     initial_params::allocate(-1);
00101   }
00102 }
00106 param_init_matrix_vector::~param_init_matrix_vector()
00107 {
00108   deallocate();
00109 }
00113 void param_init_matrix_vector::deallocate(void)
00114 {
00115   if (it)
00116   {
00117     delete it;
00118     it = NULL;
00119   }
00120   if (v)
00121   {
00122     v += indexmin();
00123     delete [] v;
00124     v = NULL;
00125   }
00126 }