[Developers] d4_array

John Sibert sibert at hawaii.edu
Sun Jul 27 18:35:08 PDT 2014


It works for me in my diffusion model.
Mahalos to everyone

John Sibert
Emeritus Researcher, SOEST
University of Hawaii at Manoa
Honolulu HI (GMT-10)
808-294-3842 (mobile)

Visit the ADMB project http://admb-project.org/

On 07/25/2014 01:37 PM, Johnoel Ancheta wrote:
> Hi all,
>
> Added in Revision 2216 
> <http://www.admb-project.org/redmine/projects/issues/repository/revisions/2216>.
>
> Check the 4darray test 
> <http://www.admb-project.org/redmine/projects/issues/repository/revisions/2216/show/trunk/tests/4darray>.
>
> Thanks Jim and Dave for contributing.
>
> Johnoel
>
>
> On Thu, Jul 24, 2014 at 8:37 AM, dave fournier <davef at otter-rsch.com 
> <mailto:davef at otter-rsch.com>> wrote:
>
>     On 07/24/2014 11:06 AM, Jim Ianelli - NOAA Federal wrote:
>
>     You are starting at the wrong place.  Here is what I would do.
>
>     1.) put it into a tpl and run tpl2cpp (or tpl2rem if that is
>     appropriate)
>     Here I use simple.tpl and add a 3darray as well to compare
>
>     DATA_SECTION
>       init_int nobs
>       init_vector Y(1,nobs)
>       init_vector x(1,nobs)
>       // add 4d array and 3darray
>       3darray yyy
>       4darray  xxxx
>     PARAMETER_SECTION
>       init_number a
>       init_number b
>       vector pred_Y(1,nobs)
>       objective_function_value f
>     PROCEDURE_SECTION
>       pred_Y=a*x+b;
>       f=(norm2(pred_Y-Y));
>       f=nobs/2.*log(f);    // make it a likelihood function so that
>                            // covariance matrix is correct
>
>     what I get is
>
>
>     warning -- creating unallocated 3darray() at line 38
>     Error in line 39 while reading
>     x
>
>     so tpl2cpp knows about 3darrays but not 4darrays.
>
>     So check out the lex code for tpl2cpp to see what neds to be added.
>
>     code for 3darray is
>
>     <DEFINE_DATA>3darray {
>         likelihood_found=1;
>         BEGIN IN_NAMED_THREE_ARRAY_DEF;
>         fprintf(fdat,"%s","  d3_array ");
>                          }
>
>     What this does is to switch the state of the lexer to
>     IN_NAMED_THREE_ARRAY_DEF stuff.
>     so in there will be a case when there are no arguments. Here it is.
>
>     <IN_NAMED_THREE_ARRAY_DEF>{name} {
>         if (warn_unallocated) write_unallocated("3darray()");
>
>         strcpy(tmp_string,yytext);  // get x in x(1,4)
>         fprintf(fdat,"%s",tmp_string);
>         fprintf(fall,"  %s",tmp_string);
>         fprintf(fall,"%s",".allocate()");
>         //fprintf(fall,"%s",".allocate");
>         //after_part(tmp_string1,yytext,'(');  // get x in x(1,4)
>         //before_part(tmp_string2,tmp_string1,')');
>         //fprintf(fall,"%s)",tmp_string2);
>         fprintf(fdat,"%s",";\n");
>         fprintf(fall,"%s",";\n");
>         if (!params_defined)
>         {
>           if(likelihood_found) {
>             if(likelihood_counter<MAX_LIKE_CHECK)
>     sprintf(likelihood_checker[likelihood_counter++],"%s",tmp_string);
>             likelihood_found=0;
>           }
>           BEGIN DEFINE_DATA;
>         }
>         else
>         {
>           BEGIN DEFINE_PARAMETERS;
>         }
>                                 }
>
>     So we need a corresponding entry for 4darrays.
>     So dup the above and change THREE to FOUR and 3darray to 4darray
>
>     <IN_NAMED_FOUR_ARRAY_DEF>{name} {
>         if (warn_unallocated) write_unallocated("4darray()");
>
>         strcpy(tmp_string,yytext);  // get x in x(1,4)
>         fprintf(fdat,"%s",tmp_string);
>         fprintf(fall,"  %s",tmp_string);
>         fprintf(fall,"%s",".allocate()");
>         //fprintf(fall,"%s",".allocate");
>         //after_part(tmp_string1,yytext,'(');  // get x in x(1,4)
>         //before_part(tmp_string2,tmp_string1,')');
>         //fprintf(fall,"%s)",tmp_string2);
>         fprintf(fdat,"%s",";\n");
>         fprintf(fall,"%s",";\n");
>         if (!params_defined)
>         {
>           if(likelihood_found) {
>             if(likelihood_counter<MAX_LIKE_CHECK)
>     sprintf(likelihood_checker[likelihood_counter++],"%s",tmp_string);
>             likelihood_found=0;
>           }
>           BEGIN DEFINE_DATA;
>         }
>         else
>         {
>           BEGIN DEFINE_PARAMETERS;
>         }
>                                 }
>
>
>     and remake tpl2cpp and run again on the modified simple.tpl
>     and you will get
>
>>     t/bin/tpl2cpp simple
>>     warning -- creating unallocated 3darray() at line 38
>>     warning -- creating unallocated 4darray() at line 39
>     check the code simple.htp for xxxx and yyyy
>
>     class model_data : public ad_comm{
>       data_int nobs;
>       data_vector Y;
>       data_vector x;
>       d3_array yyyy;
>       d4_array xxxx;
>       ~model_data();
>       model_data(int argc,char * argv[]);
>       friend class model_parameters;
>     };
>
>     so they are there.  and in simple.cpp
>
>     model_data::model_data(int argc,char * argv[]) : ad_comm(argc,argv)
>     {
>       nobs.allocate("nobs");
>       Y.allocate(1,nobs,"Y");
>       x.allocate(1,nobs,"x");
>       yyyy.allocate();
>       xxxx.allocate();
>     }
>
>     So now it is a question of whether admb knows about unallocated 
>     d4_arrays.
>     So compile simple.cpp.
>
>     I think you will find that it compiles so you are done.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>     f I grep d3_array in nh99 I get 104 lines of code
>>
>>     grepping d4_array gets 34 lines...
>>
>>     below are the hits (they keep coming...).
>>
>>     Question is how to identify where the code didn't write itself.
>>     Ignore if this is stupid, as always.
>>     admodel.h:  named_dvar3_array& operator=(const d3_array& m);
>>     admodel.h:class named_d3_array : public d3_array, public
>>     model_name_tag
>>     admodel.h:  named_d3_array(void) : d3_array(), model_name_tag() {;}
>>     admodel.h:  named_d3_array& operator=(const d3_array& m);
>>     admodel.h:class data_3array : public named_d3_array
>>     admodel.h:  data_3array(void) : named_d3_array() {;}
>>     admodel.h:  dll_data_3array& operator=(const d3_array &);
>>     admodel.h:    const d3_array& eigenvals,d3_array& curvcor);
>>     admodel.h:  dll_param_init_d3array& operator=(const d3_array&);
>>     admodel.h:  dll_param_d3array& operator=(const d3_array&);
>>     getbigs.cpp:      d3_array & H=*(lapprox->block_diagonal_hessian);
>>     getbigs.cpp:      d3_array & Dux=*(lapprox->block_diagonal_Dux);
>>     getbigs.cpp:      d3_array & H=*(lapprox->block_diagonal_hessian);
>>     lex.yy.c:    fprintf(fdat,"%s","  d3_array ");
>>     mod_pmin.cpp:    //d3_array hesses(-num_pp,num_pp,1,nvar,1,nvar);
>>     mod_pmin.cpp:    d3_array eigenvals(0,nlp-1,-num_pp,num_pp,1,nvar-1);
>>     mod_pmin.cpp:    d3_array curvcor(0,nlp-1,-num_pp,num_pp,1,nvar-1);
>>     model.cpp:  named_d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax,s);
>>     model.cpp:  *(ad_comm::global_datafile) >> d3_array(*this);
>>     model.cpp:  named_d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax,s);
>>     model.cpp:  *(ad_comm::global_datafile) >> d3_array(*this);
>>     model.cpp:  named_d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax,s);
>>     model.cpp:  *(ad_comm::global_datafile) >> d3_array(*this);
>>     model.cpp:  named_d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax,s);
>>     model.cpp:  *(ad_comm::global_datafile) >> d3_array(*this);
>>     model.cpp:  named_d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax,s);
>>     model.cpp:  *(ad_comm::global_datafile) >> d3_array(*this);
>>     model.cpp:  named_d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax,s);
>>     model.cpp:  *(ad_comm::global_datafile) >> d3_array(*this);
>>     model.cpp:  named_d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax,s);
>>     model.cpp:  *(ad_comm::global_datafile) >> d3_array(*this);
>>     model.cpp:  named_d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax,s);
>>     model.cpp:  *(ad_comm::global_datafile) >> d3_array(*this);
>>     model11.cpp:named_dvar3_array& named_dvar3_array::operator=(const
>>     d3_array& m)
>>     model11.cpp:void named_d3_array::allocate(int hsl,int hsu,int
>>     rmin,int rmax,
>>     model11.cpp:  d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax);
>>     model11.cpp:void named_d3_array::allocate(int hsl,int hsu,int
>>     rmin,int rmax,
>>     model11.cpp:  d3_array::allocate(hsl,hsu,rmin,rmax);
>>     model11.cpp:void named_d3_array::allocate(int hsl,int hsu,
>>     model11.cpp:  d3_array::allocate(hsl,hsu,rmin,rmax);
>>     model11.cpp:void named_d3_array::allocate(int hsl,int hsu,const
>>     char * s)
>>     model11.cpp:  d3_array::allocate(hsl,hsu);
>>     model11.cpp:void named_d3_array::allocate(const char * s)
>>     model11.cpp:  d3_array::allocate();
>>     model11.cpp:void named_d3_array::allocate(int hsl, int hsu, const
>>     index_type& rmin,
>>     model11.cpp:  d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax);
>>     model11.cpp:void named_d3_array::allocate(int hsl, int hsu, const
>>     ivector& rmin,
>>     model11.cpp:  d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax);
>>     model11.cpp:void named_d3_array::allocate(int hsl,int hsu,int rmin,
>>     model11.cpp:  d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax);
>>     model11.cpp:void named_d3_array::allocate(int hsl, int hsu, const
>>     ivector& rmin,
>>     model11.cpp:  d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax);
>>     model11.cpp:void named_d3_array::allocate(int hsl, int hsu, int
>>     rmin, int rmax,
>>     model11.cpp:  d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax);
>>     model11.cpp:void named_d3_array::allocate(int hsl, int hsu, int
>>     rmin, int rmax,
>>     model11.cpp:  d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax);
>>     model11.cpp:void named_d3_array::allocate(int hsl, int hsu, int
>>     rmin, int rmax,
>>     model11.cpp:  d3_array::allocate(hsl,hsu,rmin,rmax,cmin,cmax);
>>     model11.cpp:named_d3_array& named_d3_array::operator=(const
>>     d3_array& m)
>>     model11.cpp:  d3_array::operator=(m);
>>     model35.cpp:
>>      named_d3_array::allocate(hmin,hmax,rmin,rmax,cmin,cmax,_s);
>>     model35.cpp:dll_data_3array& dll_data_3array::operator=(const
>>     d3_array &m)
>>     model35.cpp:  d3_array::operator = (m);
>>     model35.cpp:dll_param_d3array& dll_param_d3array::operator=(const
>>     d3_array &m)
>>     model35.cpp:dll_param_init_d3array&
>>     dll_param_init_d3array::operator=(const d3_array &m)
>>     newmodmn.cpp:    const d3_array& eigenvals,d3_array& curvcor)
>>     newmodmn.cpp:    const d3_array& eigenvals,d3_array& curvcor)
>>     tpl2cpp.c:    fprintf(fdat,"%s","  d3_array ");
>>     tpl2cpp.lex:    fprintf(fdat,"%s","  d3_array ");
>>
>>     admodel.h:  named_dvar4_array& operator=(const d4_array& m);
>>     admodel.h:class named_d4_array : public d4_array, public
>>     model_name_tag
>>     admodel.h:  named_d4_array(void) : d4_array(), model_name_tag() {;}
>>     admodel.h:  named_d4_array& operator=(const d4_array& m);
>>     admodel.h:class data_4array : public named_d4_array
>>     admodel.h:  data_4array(void) : named_d4_array() {;}
>>     lex.yy.c:    fprintf(fdat,"%s","  d4_array ");
>>     model15.cpp:void named_d4_array::allocate(int hhsl,int hhsu,int
>>     hsl,int hsu,
>>     model15.cpp:
>>      d4_array::allocate(hhsl,hhsu,hsl,hsu,rmin,rmax,cmin,cmax);
>>     model15.cpp:void named_d4_array::allocate(int hhsl,int hhsu,int
>>     hsl,int hsu,
>>     model15.cpp:  d4_array::allocate(hhsl,hhsu,hsl,hsu,rmin,rmax);
>>     model15.cpp:void named_d4_array::allocate(int hhsl,int hhsu,int
>>     hsl,int hsu, const char* s)
>>     model15.cpp:  d4_array::allocate(hhsl,hhsu,hsl,hsu);
>>     model15.cpp:void named_d4_array::allocate(int hhsl,int hhsu,const
>>     char* s)
>>     model15.cpp:  d4_array::allocate(hhsl,hhsu);
>>     model15.cpp:void named_d4_array::allocate(const char* s)
>>     model15.cpp:  d4_array::allocate();
>>     model15.cpp:void named_d4_array::allocate(ad_integer hhsl,
>>     ad_integer hhsu,
>>     model15.cpp:
>>      d4_array::allocate(hhsl,hhsu,hsl,hsu,rmin,rmax,cmin,cmax);
>>     model15.cpp:void named_d4_array::allocate(ad_integer
>>     hhsl,ad_integer hhsu,
>>     model15.cpp:  d4_array::allocate(hhsl,hhsu,hsl,hsu);
>>     model15.cpp:void named_d4_array::allocate(ad_integer
>>     hhsl,ad_integer hhsu,const char* s)
>>     model15.cpp:  d4_array::allocate(hhsl,hhsu);
>>     model15.cpp:void named_d4_array::allocate(ad_integer
>>     hhsl,ad_integer hhsu,
>>     model15.cpp:  d4_array::allocate(hhsl,hhsu,hsl,hsu,rmin,rmax);
>>     model15.cpp:named_d4_array& named_d4_array::operator=(const
>>     d4_array& m)
>>     model15.cpp:  this->d4_array::operator=(m);
>>     model15.cpp:named_dvar4_array& named_dvar4_array::operator=(const
>>     d4_array& m)
>>     model16.cpp:
>>      named_d4_array::allocate(hhsl,hhsu,hsl,hsu,rmin,rmax,cmin,cmax,s);
>>     model16.cpp:  *(ad_comm::global_datafile) >> d4_array(*this);
>>     model16.cpp:
>>      named_d4_array::allocate(hhsl,hhsu,hsl,hsu,rmin,rmax,cmin,cmax,s);
>>     model16.cpp:  *(ad_comm::global_datafile) >> d4_array(*this);
>>     tpl2cpp.c:    fprintf(fdat,"%s","  d4_array ");
>>     tpl2cpp.lex:    fprintf(fdat,"%s","  d4_array ");
>>
>>
>>
>>     On Thu, Jul 24, 2014 at 10:51 AM, dave fournier
>>     <davef at otter-rsch.com <mailto:davef at otter-rsch.com>> wrote:
>>
>>         On 07/24/2014 10:41 AM, John Sibert wrote:
>>
>>         Probably never wrote itself.  Unallocated objects were a
>>         later development.
>>         Wouldn't be much work to implement, but getting it into the
>>         code base ...
>>
>>
>>             I was looking for a null constructor to use in the
>>             DATA_SECTION
>>               4darray effort_proxy;
>>
>>             and then allocate later
>>               effort_proxy.allocate(int,int, int,int,
>>             ivector&,ivector&, ivector&,ivector&)
>>
>>             I do this routinely with d3_arrays:
>>                3darray effort;
>>
>>                effort.allocate(0, nfleet, ilbv, iubv, jlbm, jubm);
>>
>>             John Sibert
>>             Emeritus Researcher, SOEST
>>             University of Hawaii at Manoa
>>             Honolulu HI (GMT-10)
>>             808-294-3842 <tel:808-294-3842> (mobile)
>>
>>             Visit the ADMB project http://admb-project.org/
>>
>>             On 07/23/2014 04:22 PM, dave fournier wrote:
>>
>>                 On 07/23/2014 06:54 PM, John Sibert wrote:
>>
>>                     How does one declare a d4_array in a tpl file?
>>
>>                 init_4darray
>>
>>                 for initial one but maybe that is not what you want?
>>                 _______________________________________________
>>                 Developers mailing list
>>                 Developers at admb-project.org
>>                 <mailto:Developers at admb-project.org>
>>                 http://lists.admb-project.org/mailman/listinfo/developers
>>
>>
>>
>>
>>         _______________________________________________
>>         Developers mailing list
>>         Developers at admb-project.org <mailto:Developers at admb-project.org>
>>         http://lists.admb-project.org/mailman/listinfo/developers
>>
>>
>>
>>
>>     -- 
>>
>>     James Ianelli
>>     NMFS/NOAA Building 4
>>     7600 Sand Pt Way NE
>>     Seattle WA 98115
>>
>>     206 526 6510 <tel:206%20526%206510>
>>
>>     Visit the ADMB project http://admb-project.org/
>>
>
>
>     _______________________________________________
>     Developers mailing list
>     Developers at admb-project.org <mailto:Developers at admb-project.org>
>     http://lists.admb-project.org/mailman/listinfo/developers
>
>
>
>
> _______________________________________________
> Developers mailing list
> Developers at admb-project.org
> http://lists.admb-project.org/mailman/listinfo/developers



More information about the Developers mailing list