ADMB Documentation  11.5.3197
 All Classes Files Functions Variables Typedefs Friends Defines
model23.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  */
00007 #include <admodel.h>
00008 
00009 int adkdelta(int i,int j)
00010 {
00011   return i == j ? 1 : 0;
00012 }
00013 
00014 void param_init_number::dev_correction(const dmatrix& H, const int& _ii)
00015 {
00016   int& ii=(int&) _ii;
00017   ii++;
00018 }
00019 
00020 void param_init_matrix::dev_correction(const dmatrix& H, const int& _ii)
00021 {
00022   int& ii=(int&) _ii;
00023   ii+=size_count();
00024 }
00025 
00026 void param_init_d3array::dev_correction(const dmatrix& H, const int& _ii)
00027 {
00028   int& ii=(int&) _ii;
00029   ii+=size_count();
00030 }
00031 
00032 void param_init_vector::dev_correction(const dmatrix& H, const int& _ii)
00033 {
00034   int& ii=(int&) _ii;
00035   ii+=size_count();
00036 }
00037 
00038 void param_init_bounded_vector::dev_correction(const dmatrix& H, const int& _ii)
00039 {
00040   int& ii=(int&) _ii;
00041   ii+=size_count();
00042 }
00043 
00044 void param_init_bounded_dev_vector::dev_correction(const dmatrix& _H,
00045   const int& _ii)
00046 {
00047   dmatrix& H=(dmatrix&) _H;
00048   int& ii=(int&) _ii;
00049   int lmin=ii;
00050   int n=size();
00051   int lmax=lmin+n-1;
00052   dmatrix Htmp(lmin,lmax,lmin,lmax);
00053   double ninv=1.0/double(n);
00054   int i,j,k,l;
00055   for (i=lmin;i<=lmax;i++)
00056   {
00057     for (j=lmin;j<=lmax;j++)
00058     {
00059       double tmp=0.0;
00060       for (k=lmin;k<=lmax;k++)
00061       {
00062         for (l=lmin;l<=lmax;l++)
00063         {
00064           tmp+=(adkdelta(i,k)-ninv)*(adkdelta(j,l)-ninv)*H(k,l);
00065         }
00066       }
00067       Htmp(i,j)=tmp;
00068     }
00069   }
00070   for (i=lmin;i<=lmax;i++)
00071   {
00072     for (j=lmin;j<=lmax;j++)
00073     {
00074       H(i,j)=Htmp(i,j);
00075     }
00076   }
00077   ii+=n;
00078 }