ADMB Documentation  11.5.3197
 All Classes Files Functions Variables Typedefs Friends Defines
f3arr1.cpp
Go to the documentation of this file.
00001 /*
00002  * $Id$
00003  *
00004  * Author: David Fournier
00005  * Copyright (c) 2008-2012 Regents of the University of California
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 }