ADMB Documentation  11.5.3287
 All Classes Files Functions Variables Typedefs Friends Defines
model43.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_vector_vector::set_initial_value(const double_index_type& _it)
00010  {
00011     it=new double_index_type(_it);
00012  }
00013 
00017 param_init_vector_vector::param_init_vector_vector():
00018   v(NULL),
00019   index_min(0),
00020   index_max(0),
00021   it(NULL)
00022 {
00023 }
00024 
00025 void param_init_vector_vector::allocate(
00026   int min1,
00027   int max1,
00028   const index_type& min,
00029   const index_type& max,
00030   const char * s)
00031 {
00032   allocate(min1,max1,min,max,1,s);
00033 }
00034 
00035 void param_init_vector_vector::allocate(
00036   int min1,
00037   int max1,
00038   const index_type& min,
00039   const index_type& max,
00040   const index_type& phase_start,
00041   const char * s)
00042 {
00043   int size = max1 - min1 + 1;
00044   if (size > 0)
00045   {
00046     v = new param_init_vector[size];
00047     if (!v)
00048     {
00049       cerr << " error trying to allocate memory in "
00050           "param_init_vector_vector " << endl;
00051       exit(1);
00052     }
00053 
00054     index_min = min1;
00055     index_max = max1;
00056     v-=indexmin();
00057     for (int i=indexmin();i<=indexmax();i++)
00058     {
00059       if (it) v[i].set_initial_value(ad_double((*it)[i]));
00060       adstring ss=s + adstring("[") + str(i) + adstring("]");
00061       v[i].allocate(min[i],max[i],phase_start[i],(char*)(ss) );
00062     }
00063   }
00064 }
00065 void param_init_vector::allocate(
00066   const ad_integer& imin,
00067   const ad_integer& imax,
00068   const ad_integer& _phase_start,
00069   const char* s)
00070 {
00071   named_dvar_vector::allocate(imin, imax, s);
00072   if (!(!(*this)))
00073   {
00074     initial_params::allocate(_phase_start);
00075     if (ad_comm::global_bparfile)
00076     {
00077       *(ad_comm::global_bparfile) >> dvar_vector(*this);
00078     }
00079     else if (ad_comm::global_parfile)
00080     {
00081       *(ad_comm::global_parfile) >> dvar_vector(*this);
00082     }
00083     else
00084     {
00085       dvar_vector::operator=(initial_value);
00086     }
00087   }
00088   else
00089   {
00090     initial_params::allocate(-1);
00091   }
00092 }
00096 param_init_vector_vector::~param_init_vector_vector()
00097 {
00098   deallocate();
00099 }
00103 void param_init_vector_vector::deallocate(void)
00104 {
00105   if (it)
00106   {
00107     delete it;
00108     it = NULL;
00109   }
00110   if (v)
00111   {
00112     v += indexmin();
00113     delete [] v;
00114     v = NULL;
00115   }
00116 }