Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00011 #include "fvar.hpp"
00012 #include "admb_messages.h"
00013
00014 #ifndef OPT_LIB
00015
00020 prevariable dvar3_array::operator () (int k, int i, int j)
00021 {
00022 if (!allocated(*this))
00023 {
00024 cerr << "trying to access an unallocated object" << endl;
00025 ad_exit(21);
00026 }
00027 if (k < slicemin())
00028 {
00029 ADMB_ARRAY_BOUNDS_ERROR("array bound exceeded -- slice index too low",
00030 "prevariable dvar3_array::operator () (int k, int i, int j)",
00031 slicemin(), slicemax(), k);
00032 }
00033 if (k > slicemax())
00034 {
00035 ADMB_ARRAY_BOUNDS_ERROR("array bound exceeded -- slice index too high",
00036 "prevariable dvar3_array::operator () (int k, int i, int j)",
00037 slicemin(), slicemax(), k);
00038 }
00039 return (elem(k))(i,j);
00040 }
00041
00046 dvar_vector& dvar3_array::operator () (int k, int i)
00047 {
00048 if (k < slicemin())
00049 {
00050 ADMB_ARRAY_BOUNDS_ERROR("array bound exceeded -- slice index too low",
00051 "dvar_vector& dvar3_array::operator () (int k, int i)",
00052 slicemin(), slicemax(), k);
00053 }
00054 if (k > slicemax())
00055 {
00056 ADMB_ARRAY_BOUNDS_ERROR("array bound exceeded -- slice index too high",
00057 "dvar_vector& dvar3_array::operator () (int k, int i)",
00058 slicemin(), slicemax(), k);
00059 }
00060 return (elem(k))(i);
00061 }
00062
00067 dvar_matrix& dvar3_array::operator[] (int i)
00068 {
00069 if (i < slicemin())
00070 {
00071 ADMB_ARRAY_BOUNDS_ERROR("array bound exceeded -- slice index too low",
00072 "dvar_matrix& dvar3_array::operator [] (int i)",
00073 slicemin(), slicemax(), i);
00074 }
00075 if (i > slicemax())
00076 {
00077 ADMB_ARRAY_BOUNDS_ERROR("array bound exceeded -- slice index too high",
00078 "dvar_matrix& dvar3_array::operator [] (int i)",
00079 slicemin(), slicemax(), i);
00080 }
00081 return t[i];
00082 }
00083
00088 dvar_matrix& dvar3_array::operator() (int i)
00089 {
00090 if (!allocated(*this))
00091 {
00092 cerr << "trying to access an unallocated object" << endl;
00093 ad_exit(21);
00094 }
00095 if (i < slicemin())
00096 {
00097 ADMB_ARRAY_BOUNDS_ERROR("array bound exceeded -- slice index too low",
00098 "dvar_matrix& dvar3_array::operator () (int i)",
00099 slicemin(), slicemax(), i);
00100 }
00101 if (i > slicemax())
00102 {
00103 ADMB_ARRAY_BOUNDS_ERROR("array bound exceeded -- slice index too high",
00104 "dvar_matrix& dvar3_array::operator () (int i)",
00105 slicemin(), slicemax(), i);
00106 }
00107 return t[i];
00108 }
00109 #endif
00110
00115 dvariable sum(const dvar3_array& m)
00116 {
00117 RETURN_ARRAYS_INCREMENT();
00118 dvariable tmp=0.;
00119 for (int i=m.indexmin();i<=m.indexmax();i++)
00120 {
00121 tmp+=sum(m.elem(i));
00122 }
00123 RETURN_ARRAYS_DECREMENT();
00124 return tmp;
00125 }