ADMB Documentation  11.5.3197
 All Classes Files Functions Variables Typedefs Friends Defines
fvar_a42.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 
00013  void DF_dble_dv_div(void);
00014 
00019 dvar_vector operator/(const prevariable& x, const dvar_vector& t1)
00020   {
00021     RETURN_ARRAYS_INCREMENT();
00022     dvar_vector tmp(t1.indexmin(),t1.indexmax());
00023     save_identifier_string("ceeb");
00024     x.save_prevariable_value();
00025     x.save_prevariable_position();
00026     for (int i=t1.indexmin(); i<=t1.indexmax(); i++)
00027     {
00028       tmp.elem_value(i)=value(x)/t1.elem_value(i);
00029     }
00030     t1.save_dvar_vector_value();
00031     tmp.save_dvar_vector_position();
00032     t1.save_dvar_vector_position();
00033     save_identifier_string("deea");
00034     RETURN_ARRAYS_DECREMENT();
00035     gradient_structure::GRAD_STACK1->set_gradient_stack(DF_dble_dv_div);
00036     return(tmp);
00037   }
00038 
00043  void DF_dble_dv_div(void)
00044  {
00045     verify_identifier_string("deea");
00046     dvar_vector_position t1_pos=restore_dvar_vector_position();
00047     dvar_vector_position tmp_pos=restore_dvar_vector_position();
00048     dvector t1=restore_dvar_vector_value(t1_pos);
00049     prevariable_position xpos=restore_prevariable_position();
00050     double x=restore_prevariable_value();
00051     dvector dftmp=restore_dvar_vector_derivatives(tmp_pos);
00052     dvector dft1(t1_pos.indexmin(),t1_pos.indexmax());
00053     verify_identifier_string("ceeb");
00054     double dfx=0.;
00055     for (int i=t1_pos.indexmax(); i>=t1_pos.indexmin(); i--)
00056     {
00057       //tmp.elem_value(i)=value(x)/t1.elem_value(i);
00058       double t1inv=1./t1.elem(i);
00059       dfx+=dftmp(i)*t1inv;
00060       dft1(i)=-dftmp(i)*x*t1inv*t1inv;
00061     }
00062     save_double_derivative(dfx,xpos);
00063     dft1.save_dvector_derivatives(t1_pos);
00064  }