00001
00002
00003
00004
00005
00006
00007 #include <admodel.h>
00008
00009 #ifdef ISZERO
00010 #undef ISZERO
00011 #endif
00012 #define ISZERO(d) ((d)==0.0)
00013
00017 param_init_bounded_matrix::param_init_bounded_matrix():
00018 param_init_matrix(), minb(0), maxb(0)
00019 {
00020 }
00021
00022 void param_init_bounded_matrix::set_value(const dvar_vector& x,
00023 const int& ii, const dvariable& pen)
00024 {
00025 if (allocated(*this))
00026 {
00027 if (ISZERO(scalefactor))
00028 ::set_value(*this,x,ii,minb,maxb,pen);
00029 else
00030 ::set_value(*this,x,ii,minb,maxb,pen,scalefactor);
00031 }
00032 }
00033
00034
00035 void param_init_bounded_matrix::set_value_inv(const dvector& x, const int& ii)
00036 {
00037 if (allocated(*this))
00038 {
00039 if (ISZERO(scalefactor))
00040 ::set_value_inv(*this,x,ii,minb,maxb);
00041 else
00042 ::set_value_inv(*this,x,ii,minb,maxb,scalefactor);
00043 }
00044 }
00045
00046 void param_init_bounded_matrix::allocate(int rmin,int rmax,
00047 int cmin,int cmax,
00048 double _minb,double _maxb,int _phase_start,const char * s)
00049 {
00050 minb=_minb;
00051 maxb=_maxb;
00052 dvar_matrix::allocate(rmin,rmax,cmin,cmax);
00053 model_name_tag::allocate(s);
00054 if (allocated(*this))
00055 {
00056 initial_params::allocate(_phase_start);
00057 for (int i=indexmin();i<=indexmax();i++)
00058 {
00059 if (allocated((*this)(i)))
00060 {
00061 if (ad_comm::global_bparfile)
00062 {
00063 *(ad_comm::global_bparfile) >> (*this)(i);
00064 }
00065 else if (ad_comm::global_parfile)
00066 {
00067 *(ad_comm::global_parfile) >> (*this)(i);
00068 }
00069 else
00070 {
00071 if ((!initial_value_flag) || initial_value <=minb
00072 || initial_value >= maxb)
00073 {
00074
00075 initial_value=(minb+maxb)/2.;
00076 }
00077 (*this)(i)=(initial_value);
00078 }
00079 }
00080 }
00081 }
00082 else
00083 {
00084 initial_params::allocate(-1);
00085 }
00086 }
00087
00088 void param_init_bounded_matrix::allocate(int rmin,int rmax,
00089 int cmin,int cmax,double _minb,double _maxb,const char * s)
00090 {
00091 minb=_minb;
00092 maxb=_maxb;
00093 dvar_matrix::allocate(rmin,rmax,cmin,cmax);
00094 model_name_tag::allocate(s);
00095 if (allocated(*this))
00096 {
00097 initial_params::allocate(1);
00098 for (int i=indexmin();i<=indexmax();i++)
00099 {
00100 if (allocated((*this)(i)))
00101 {
00102 if (ad_comm::global_bparfile)
00103 {
00104 *(ad_comm::global_bparfile) >> (*this)(i);
00105 }
00106 else if (ad_comm::global_parfile)
00107 {
00108 *(ad_comm::global_parfile) >> (*this)(i);
00109 }
00110 else
00111 {
00112 if ((!initial_value_flag) || initial_value <=minb
00113 || initial_value >= maxb)
00114 {
00115
00116 initial_value=(minb+maxb)/2.;
00117 }
00118 (*this)(i)=(initial_value);
00119 }
00120 }
00121 }
00122 }
00123 else
00124 {
00125 initial_params::allocate(-1);
00126 }
00127 }
00128
00129 void param_init_bounded_matrix::allocate(const ad_integer& rmin,
00130 const ad_integer& rmax, const index_type& cmin,
00131 const index_type& cmax, double _minb,double _maxb,
00132 int _phase_start,const char * s)
00133 {
00134 minb=_minb;
00135 maxb=_maxb;
00136 dvar_matrix::allocate(rmin,rmax,cmin,cmax);
00137 model_name_tag::allocate(s);
00138 if (allocated(*this))
00139 {
00140 initial_params::allocate(_phase_start);
00141 for (int i=indexmin();i<=indexmax();i++)
00142 {
00143 if (allocated((*this)(i)))
00144 {
00145 if (ad_comm::global_bparfile)
00146 {
00147 *(ad_comm::global_bparfile) >> (*this)(i);
00148 }
00149 else if (ad_comm::global_parfile)
00150 {
00151 *(ad_comm::global_parfile) >> (*this)(i);
00152 }
00153 else
00154 {
00155 if ((!initial_value_flag) || initial_value <=minb
00156 || initial_value >= maxb)
00157 {
00158
00159 initial_value=(minb+maxb)/2.;
00160 }
00161 (*this)(i)=(initial_value);
00162 }
00163 }
00164 }
00165 }
00166 else
00167 {
00168 initial_params::allocate(-1);
00169 }
00170 }
00171
00172
00173 void param_init_bounded_matrix::allocate(const ad_integer& rmin,
00174 const ad_integer& rmax, const index_type& cmin,
00175 const index_type& cmax, double _minb, double _maxb,
00176 const char* s)
00177 {
00178 minb=_minb;
00179 maxb=_maxb;
00180 dvar_matrix::allocate(rmin,rmax,cmin,cmax);
00181 model_name_tag::allocate(s);
00182 if (allocated(*this))
00183 {
00184 initial_params::allocate(1);
00185 for (int i=indexmin();i<=indexmax();i++)
00186 {
00187 if (allocated((*this)(i)))
00188 {
00189 if (ad_comm::global_bparfile)
00190 {
00191 *(ad_comm::global_bparfile) >> (*this)(i);
00192 }
00193 else if (ad_comm::global_parfile)
00194 {
00195 *(ad_comm::global_parfile) >> (*this)(i);
00196 }
00197 else
00198 {
00199 if ((!initial_value_flag) || initial_value <=minb
00200 || initial_value >= maxb)
00201 {
00202
00203 initial_value=(minb+maxb)/2.;
00204 }
00205 (*this)(i)=(initial_value);
00206 }
00207 }
00208 }
00209 }
00210 else
00211 {
00212 initial_params::allocate(-1);
00213 }
00214 }