ADMB Documentation  11.1.2504
 All Classes Files Functions Variables Typedefs Friends Defines
model46.cpp
Go to the documentation of this file.
00001 /*
00002  * $Id: model46.cpp 2386 2014-09-19 21:32:54Z 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_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 }
00082 
00083  void param_init_bounded_matrix::allocate(const ad_integer& imin,
00084    const ad_integer& imax, const ad_integer& imin2,
00085    const ad_integer& imax2, const ad_double& _bmin,
00086    const ad_double& _bmax, const ad_integer& phase_start,
00087    const char * s)
00088  {
00089    minb=_bmin;
00090    maxb=_bmax;
00091    named_dvar_matrix::allocate(imin,imax,imin2,imax2,s);
00092    if (!(!(*this)))
00093    {
00094      initial_params::allocate(phase_start);
00095      if (ad_comm::global_bparfile)
00096      {
00097        *(ad_comm::global_bparfile) >> dvar_matrix(*this);
00098      }
00099      else if (ad_comm::global_parfile)
00100      {
00101        *(ad_comm::global_parfile) >> dvar_matrix(*this);
00102      }
00103      else
00104      {
00105        if ((!initial_value_flag) || initial_value <=minb
00106             || initial_value >= maxb)
00107        {
00108          //cerr << "Initial value out of bounds -- using halfway value" << endl;
00109          initial_value=(minb+maxb)/2.;
00110        }
00111        dvar_matrix::operator=(initial_value);
00112      }
00113    }
00114    else
00115    {
00116      initial_params::allocate(-1);
00117    }
00118  }
00119 
00123 param_init_bounded_matrix_vector::~param_init_bounded_matrix_vector()
00124 {
00125   deallocate();
00126 }
00130 void param_init_bounded_matrix_vector::deallocate(void)
00131 {
00132   if (it)
00133   {
00134     delete it;
00135     it = NULL;
00136   }
00137   if (v)
00138   {
00139     v += indexmin();
00140     delete [] v;
00141     v = NULL;
00142   }
00143 }