00001
00002
00003
00004
00005
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 }
00086 void param_init_bounded_matrix::allocate(
00087 const ad_integer& imin, const ad_integer& imax,
00088 const ad_integer& imin2, const ad_integer& imax2,
00089 const ad_double& _bmin, const ad_double& _bmax,
00090 const ad_integer& _phase_start, const char* s)
00091 {
00092 minb = _bmin;
00093 maxb = _bmax;
00094 named_dvar_matrix::allocate(imin,imax,imin2,imax2,s);
00095 if (!(!(*this)))
00096 {
00097 initial_params::allocate(_phase_start);
00098 if (ad_comm::global_bparfile)
00099 {
00100 *(ad_comm::global_bparfile) >> dvar_matrix(*this);
00101 }
00102 else if (ad_comm::global_parfile)
00103 {
00104 *(ad_comm::global_parfile) >> dvar_matrix(*this);
00105 }
00106 else
00107 {
00108 if ((!initial_value_flag)
00109 || initial_value <=minb || initial_value >= maxb)
00110 {
00111
00112 initial_value=(minb+maxb)/2.;
00113 }
00114 dvar_matrix::operator=(initial_value);
00115 }
00116 }
00117 else
00118 {
00119 initial_params::allocate(-1);
00120 }
00121 }
00122
00126 param_init_bounded_matrix_vector::~param_init_bounded_matrix_vector()
00127 {
00128 deallocate();
00129 }
00133 void param_init_bounded_matrix_vector::deallocate(void)
00134 {
00135 if (it)
00136 {
00137 delete it;
00138 it = NULL;
00139 }
00140 if (v)
00141 {
00142 v += indexmin();
00143 delete [] v;
00144 v = NULL;
00145 }
00146 }