ADMB Documentation  11.1.2490
 All Classes Files Functions Variables Typedefs Friends Defines
model43.cpp
Go to the documentation of this file.
00001 /*
00002  * $Id: model43.cpp 2383 2014-09-19 19:51:30Z 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_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 
00066  void param_init_vector::allocate(const ad_integer& imin,
00067    const ad_integer&imax,const ad_integer& phase_start,
00068     const char * s)
00069  {
00070    named_dvar_vector::allocate(imin,imax,s);
00071    if (!(!(*this)))
00072    {
00073      initial_params::allocate(phase_start);
00074      if (ad_comm::global_bparfile)
00075      {
00076        *(ad_comm::global_bparfile) >> dvar_vector(*this);
00077      }
00078      else if (ad_comm::global_parfile)
00079      {
00080        *(ad_comm::global_parfile) >> dvar_vector(*this);
00081      }
00082      else
00083      {
00084        dvar_vector::operator=(initial_value);
00085      }
00086    }
00087    else
00088    {
00089      initial_params::allocate(-1);
00090    }
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 }