00001
00002
00003
00004
00005
00006
00007 #include <admodel.h>
00008
00009 void initial_params::copy_all_values(const dvector& x, const int& ii)
00010 {
00011 for (int i=0;i<num_initial_params;i++)
00012 {
00013
00014 if (withinbound(0,(varsptr[i])->phase_start,current_phase))
00015 {
00016 (varsptr[i])->copy_value_to_vector(x,ii);
00017 }
00018 }
00019 }
00020
00021 void param_init_number::copy_value_to_vector(const dvector& x, const int& ii)
00022 {
00023 ::copy_value_to_vector(*this,x,ii);
00024 }
00025 void param_init_bounded_number::copy_value_to_vector(const dvector& x,
00026 const int& ii)
00027 {
00028 ::copy_value_to_vector(*this,x,ii);
00029 }
00030
00031 void param_init_vector::copy_value_to_vector(const dvector& x, const int& ii)
00032 {
00033 ::copy_value_to_vector(*this,x,ii);
00034 }
00035
00036 void param_init_bounded_vector::copy_value_to_vector(const dvector& x,
00037 const int& ii)
00038 {
00039 ::copy_value_to_vector(*this,x,ii);
00040 }
00041
00042 void param_init_matrix::copy_value_to_vector(const dvector& x, const int& ii)
00043 {
00044 ::copy_value_to_vector(*this,x,ii);
00045 }
00046
00047 void copy_value_to_vector(const prevariable& x, const dvector& _v,
00048 const int& _ii)
00049 {
00050 dvector& v=(dvector&) _v;
00051 int& ii=(int&) _ii;
00052 v(ii++)=value(x);
00053 }
00054
00055 void copy_value_to_vector(const dvar_vector& x, const dvector& _v,
00056 const int& _ii)
00057 {
00058 dvector& v=(dvector&) _v;
00059 int& ii=(int&) _ii;
00060 if (!(!(x)))
00061 {
00062 int mmin=x.indexmin();
00063 int mmax=x.indexmax();
00064 for (int i=mmin;i<=mmax;i++)
00065 {
00066 v(ii++)=value(x(i));
00067 }
00068 }
00069 }
00070
00071 void copy_value_to_vector(const dvar_matrix& x, const dvector& v, const int& ii)
00072 {
00073 if (!(!(x)))
00074 {
00075 int mmin=x.rowmin();
00076 int mmax=x.rowmax();
00077 for (int i=mmin;i<=mmax;i++)
00078 {
00079 copy_value_to_vector(x(i),v,ii);
00080 }
00081 }
00082 }
00083 void copy_value_to_vector(const dvar3_array& x, const dvector& v, const int& ii)
00084 {
00085 if (!(!(x)))
00086 {
00087 int mmin=x.slicemin();
00088 int mmax=x.slicemax();
00089 for (int i=mmin;i<=mmax;i++)
00090 {
00091 copy_value_to_vector(x(i),v,ii);
00092 }
00093 }
00094 }
00095 void initial_params::restore_all_values(const dvector& x, const int& ii)
00096 {
00097 for (int i=0;i<num_initial_params;i++)
00098 {
00099
00100 if (withinbound(0,(varsptr[i])->phase_start,current_phase))
00101 {
00102 (varsptr[i])->restore_value_from_vector(x,ii);
00103 }
00104 }
00105 }
00106
00107 void param_init_number::restore_value_from_vector(const dvector& x,
00108 const int& ii)
00109 {
00110 ::restore_value_from_vector(*this,x,ii);
00111 }
00112
00113 void param_init_bounded_number::restore_value_from_vector(const dvector& x,
00114 const int& ii)
00115 {
00116 ::restore_value_from_vector(*this,x,ii);
00117 }
00118
00119 void param_init_vector::restore_value_from_vector(const dvector& x,
00120 const int& ii)
00121 {
00122 ::restore_value_from_vector(*this,x,ii);
00123 }
00124
00125 void param_init_bounded_vector::restore_value_from_vector(const dvector& x,
00126 const int& ii)
00127 {
00128 ::restore_value_from_vector(*this,x,ii);
00129 }
00130
00131 void param_init_matrix::restore_value_from_vector(const dvector& x,
00132 const int& ii)
00133 {
00134 ::restore_value_from_vector(*this,x,ii);
00135 }
00136
00137 void restore_value_from_vector(const prevariable& _x, const dvector& v,
00138 const int& _ii)
00139 {
00140 ADUNCONST(prevariable,x)
00141 int& ii=(int&) _ii;
00142
00143 x=v(ii++);
00144 }
00145
00146 void restore_value_from_vector(const dvar_vector& _x, const dvector& v,
00147 const int& _ii)
00148 {
00149 ADUNCONST(dvar_vector,x)
00150 int& ii=(int&) _ii;
00151 if (!(!(x)))
00152 {
00153 int mmin=x.indexmin();
00154 int mmax=x.indexmax();
00155 for (int i=mmin;i<=mmax;i++)
00156 {
00157
00158 x(i)=v(ii++);
00159 }
00160 }
00161 }
00162
00163 void restore_value_from_vector(const dvar_matrix& x, const dvector& v,
00164 const int& ii)
00165 {
00166 if (!(!(x)))
00167 {
00168 int mmin=x.rowmin();
00169 int mmax=x.rowmax();
00170 for (int i=mmin;i<=mmax;i++)
00171 {
00172 restore_value_from_vector(x(i),v,ii);
00173 }
00174 }
00175 }
00176
00177 void restore_value_from_vector(dvar3_array& x, const dvector& v, const int& ii)
00178 {
00179 if (!(!(x)))
00180 {
00181 int mmin=x.slicemin();
00182 int mmax=x.slicemax();
00183 for (int i=mmin;i<=mmax;i++)
00184 {
00185 restore_value_from_vector(x(i),v,ii);
00186 }
00187 }
00188 }