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