ADMB Documentation  -a65f1c97
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
df33fun.cpp
Go to the documentation of this file.
1 /*
2  * $Id$
3  *
4  * Author: David Fournier
5  * Copyright (c) 2009-2012 ADMB Foundation
6  */
7 #include <df1b2fun.h>
8 #include "df33fun.h"
12 
17 {
18  for (int i = 0; i < 20; ++i)
19  {
20  v[i] = 0;
21  }
22 }
27 {
28  memcpy(&(v[0]),&(x.v[0]),20*sizeof(double));
29 }
34 {
37  shape=m2.shape;
38  if (shape)
39  {
40  (shape->ncopies)++;
41  }
42  v = m2.v;
43 }
44 
50 {
51  df1b2variable * px=df3_three_variable::ind_var[0];
52  df1b2variable * py=df3_three_variable::ind_var[1];
53  df1b2variable * pv=df3_three_variable::ind_var[2];
55  df3_three_variable::ind_var[0]=0;
56  df3_three_variable::ind_var[1]=0;
57  df3_three_variable::ind_var[2]=0;
58  //df1b2variable * px=0;
59  double dfx= *v.get_u_x();
60  double dfy= *v.get_u_y();
61  double dfz= *v.get_u_z();
62  double * xd=px->get_u_dot();
63  double * yd=py->get_u_dot();
64  double * vd=pv->get_u_dot();
65  double * zd=get_u_dot();
66  *get_u()=*v.get_u();
67  for (unsigned int i=0;i<df1b2variable::nvar;i++)
68  {
69  *zd++ = dfx * *xd++ + dfy * *yd++ + dfz * *vd++;
70  }
71 
72  /*
73  cout << *v.get_u() << " ";
74  cout << *v.get_udot() << " ";
75  cout << *v.get_udot2() << " ";
76  cout << *v.get_udot3() << endl;
77  */
79  py,
80  pv,
81  this,
82  *v.get_u_x(),
83  *v.get_u_y(),
84  *v.get_u_z(),
85  *v.get_u_xx(),
86  *v.get_u_xy(),
87  *v.get_u_xz(),
88  *v.get_u_yy(),
89  *v.get_u_yz(),
90  *v.get_u_zz(),
91  *v.get_u_xxx(),
92  *v.get_u_xxy(),
93  *v.get_u_xxz(),
94  *v.get_u_xyy(),
95  *v.get_u_xyz(),
96  *v.get_u_xzz(),
97  *v.get_u_yyy(),
98  *v.get_u_yyz(),
99  *v.get_u_yzz(),
100  *v.get_u_zzz());
101  return *this;
102 }
107 {
108  for (int i = 0; i < 20; ++i)
109  {
110  v[i] = 0.0;
111  }
112 }
117 {
118  deallocate();
119 }
124 {
125  if (shape)
126  {
127  if (shape->ncopies)
128  {
129  (shape->ncopies)--;
130  }
131  else
132  {
134  delete [] v;
135  v = NULL;
136 
137  delete shape;
138  shape=0;
139  }
140  index_max = -1;
141  index_min = 0;
142  }
143 }
144 
150  {
151  int mmin=v.indexmin();
152  int mmax=v.indexmax();
153  dvector cv(mmin,mmax);
154  for (int i=mmin;i<=mmax;i++)
155  {
156  cv(i)=value(v(i));
157  }
158  return cv;
159  }
160 
166  {
167  int mmin=indexmin();
168  int mmax=indexmax();
169  for (int i=mmin;i<=mmax;i++)
170  {
171  (*this)(i)=0.0;
172  }
173  }
178 {
179  allocate();
180 }
185 {
186  allocate(min, max);
187 }
196 {
197  index_min = min;
198  index_max = max;
199  v = new df3_three_variable[
200  static_cast<unsigned int>(max < min ? 0 : max - min + 1)];
201  if (v == 0)
202  {
203  cerr << "error allocating memory in df3_three_vector\n";
204  ad_exit(1);
205  }
206  if ((shape = new vector_shapex(min, max, v)) == NULL)
207  {
208  cerr << "Error trying to allocate memory for df3_three_vector\n";
209  ad_exit(1);
210  }
211  v -= min;
212 }
217 {
218  index_min = 0;
219  index_max = -1;
220  v = NULL;
221  shape = NULL;
222 }
223 
229  {
230  int rmin=v.indexmin();
231  int rmax=v.indexmax();
232  dmatrix cm(rmin,rmax);
233  for (int i=rmin;i<=rmax;i++)
234  {
235  int cmin=v(i).indexmin();
236  int cmax=v(i).indexmax();
237  cm(i).allocate(cmin,cmax);
238  for (int j=cmin;j<=cmax;j++)
239  {
240  cm(i,j)=value(v(i,j));
241  }
242  }
243  return cm;
244  }
245 
251  {
252  index_min=m2.index_min;
253  index_max=m2.index_max;
254  shape=m2.shape;
255  if (shape)
256  {
257  (shape->ncopies)++;
258  }
259  v = m2.v;
260  }
261 
264 {
265  deallocate();
266 }
269 {
270  if (shape)
271  {
272  if (shape->ncopies)
273  {
274  (shape->ncopies)--;
275  }
276  else
277  {
279  delete [] v;
280  v=0;
281  delete shape;
282  shape=0;
283  index_min = 0;
284  index_max = -1;
285  }
286  }
287 }
288 
293 {
294  int mmin = indexmin();
295  int mmax = indexmax();
296  for (int i = mmin; i <= mmax; ++i)
297  {
298  (*this)(i).initialize();
299  }
300 }
310 df3_three_matrix::df3_three_matrix(int rmin, int rmax, int cmin, int cmax)
311 {
312  index_min = rmin;
313  index_max = rmax;
314  v = new df3_three_vector[
315  static_cast<unsigned int>(rmax < rmin ? 0 : rmax - rmin + 1)];
316  if (v == 0)
317  {
318  cerr << "error allocating memory in df3_three_matrix\n";
319  ad_exit(1);
320  }
321  if ((shape = new mat_shapex(v)) == NULL)
322  {
323  cerr << "Error trying to allocate memory for df3_three_vector\n";
324  ad_exit(1);
325  }
326  v -= rmin;
327  for (int i = rmin;i <= rmax; ++i)
328  {
329  v[i].allocate(cmin, cmax);
330  }
331 }
336 {
337  *get_u() -= *_v.get_u();
338  *get_u_x() -= *_v.get_u_x();
339  *get_u_y() -= *_v.get_u_y();
340  *get_u_z() -= *_v.get_u_z();
341  *get_u_xx() -= *_v.get_u_xx();
342  *get_u_xy() -= *_v.get_u_xy();
343  *get_u_xz() -= *_v.get_u_xz();
344  *get_u_yy() -= *_v.get_u_yy();
345  *get_u_yz() -= *_v.get_u_yz();
346  *get_u_zz() -= *_v.get_u_zz();
347  *get_u_xxx() -= *_v.get_u_xxx();
348  *get_u_xxy() -= *_v.get_u_xxy();
349  *get_u_xxz() -= *_v.get_u_xxz();
350  *get_u_xyy() -= *_v.get_u_xyy();
351  *get_u_xyz() -= *_v.get_u_xyz();
352  *get_u_xzz() -= *_v.get_u_xzz();
353  *get_u_yyy() -= *_v.get_u_yyy();
354  *get_u_yyz() -= *_v.get_u_yyz();
355  *get_u_yzz() -= *_v.get_u_yzz();
356  *get_u_zzz() -= *_v.get_u_zzz();
357  return *this;
358 }
363 {
364  *get_u() -= _v;
365  return *this;
366 }
367 
373 {
375 
376  *z.get_u() = -(*v.get_u());
377  *z.get_u_x() = -(*v.get_u_x());
378  *z.get_u_y() = -(*v.get_u_y());
379  *z.get_u_z() = -(*v.get_u_z());
380  *z.get_u_xx() = -(*v.get_u_xx());
381  *z.get_u_xy() = -(*v.get_u_xy());
382  *z.get_u_xz() = -(*v.get_u_xz());
383  *z.get_u_yy() = -(*v.get_u_yy());
384  *z.get_u_yz() = -(*v.get_u_yz());
385  *z.get_u_zz() = -(*v.get_u_zz());
386  *z.get_u_xxx() = -(*v.get_u_xxx());
387  *z.get_u_xxy() = -(*v.get_u_xxy());
388  *z.get_u_xxz() = -(*v.get_u_xxz());
389  *z.get_u_xyy() = -(*v.get_u_xyy());
390  *z.get_u_xyz() = -(*v.get_u_xyz());
391  *z.get_u_xzz() = -(*v.get_u_xzz());
392  *z.get_u_yyy() = -(*v.get_u_yyy());
393  *z.get_u_yyz() = -(*v.get_u_yyz());
394  *z.get_u_yzz() = -(*v.get_u_yzz());
395  *z.get_u_zzz() = -(*v.get_u_zzz());
396 
397  return z;
398 }
404 {
405  *get_u() += *var.get_u();
406  *get_u_x() += *var.get_u_x();
407  *get_u_y() += *var.get_u_y();
408  *get_u_z() += *var.get_u_z();
409  *get_u_xx() += *var.get_u_xx();
410  *get_u_xy() += *var.get_u_xy();
411  *get_u_xz() += *var.get_u_xz();
412  *get_u_yy() += *var.get_u_yy();
413  *get_u_yz() += *var.get_u_yz();
414  *get_u_zz() += *var.get_u_zz();
415  *get_u_xxx() += *var.get_u_xxx();
416  *get_u_xxy() += *var.get_u_xxy();
417  *get_u_xxz() += *var.get_u_xxz();
418  *get_u_xyy() += *var.get_u_xyy();
419  *get_u_xyz() += *var.get_u_xyz();
420  *get_u_xzz() += *var.get_u_xzz();
421  *get_u_yyy() += *var.get_u_yyy();
422  *get_u_yyz() += *var.get_u_yyz();
423  *get_u_yzz() += *var.get_u_yzz();
424  *get_u_zzz() += *var.get_u_zzz();
425  return *this;
426 }
432 {
433  *get_u() *= value;
434  *get_u_x() *= value;
435  *get_u_y() *= value;
436  *get_u_z() *= value;
437  *get_u_xx() *= value;
438  *get_u_xy() *= value;
439  *get_u_xz() *= value;
440  *get_u_yy() *= value;
441  *get_u_yz() *= value;
442  *get_u_zz() *= value;
443  *get_u_xxx() *= value;
444  *get_u_xxy() *= value;
445  *get_u_xxz() *= value;
446  *get_u_xyy() *= value;
447  *get_u_xyz() *= value;
448  *get_u_xzz() *= value;
449  *get_u_yyy() *= value;
450  *get_u_yyz() *= value;
451  *get_u_yzz() *= value;
452  *get_u_zzz() *= value;
453  return *this;
454 }
460 {
461  df3_three_variable x = *this * var;
462  *this = x;
463  return *this;
464 }
470 {
471  df3_three_variable x = *this / var;
472  *this = x;
473  return *this;
474 }
480 {
481  *get_u() += value;
482  return *this;
483 }
484 
490  double u, double zp,double zp2,double zp3)
491 {
492  //*z.get_u() = u;
493 
494  *z.get_u_x() = zp* *x.get_u_x();
495 
496  *z.get_u_y() = zp* *x.get_u_y();
497 
498  *z.get_u_z() = zp* *x.get_u_z();
499 
500  *z.get_u_xx() = zp2 * square(*x.get_u_x())
501  + zp * *x.get_u_xx();
502 
503  *z.get_u_xy() = zp2 * *x.get_u_x() * *x.get_u_y()
504  + zp * *x.get_u_xy();
505 
506  *z.get_u_xz() = zp2 * *x.get_u_x() * *x.get_u_z()
507  + zp * *x.get_u_xz();
508 
509  *z.get_u_yy() = zp2 * square(*x.get_u_y())
510  + zp * *x.get_u_yy();
511 
512  *z.get_u_yz() = zp2 * *x.get_u_y()* *x.get_u_z()
513  + zp * *x.get_u_yz();
514 
515  *z.get_u_zz() = zp2 * square(*x.get_u_z())
516  + zp * *x.get_u_zz();
517 
518  *z.get_u_xxx() = zp3 * cube(*x.get_u_x())
519  + 3.0 * zp2 * *x.get_u_x() * *x.get_u_xx()
520  + zp * *x.get_u_xxx();
521 
522  *z.get_u_xxy() = zp3 * square(*x.get_u_x())* *x.get_u_y()
523  + 2.0* zp2 * *x.get_u_x() * *x.get_u_xy()
524  + zp2 * *x.get_u_y() * *x.get_u_xx()
525  + zp * *x.get_u_xxy();
526 
527  *z.get_u_xxz() = zp3 * square(*x.get_u_x())* *x.get_u_z()
528  + 2.0* zp2 * *x.get_u_x() * *x.get_u_xz()
529  + zp2 * *x.get_u_z() * *x.get_u_xx()
530  + zp * *x.get_u_xxz();
531 
532  *z.get_u_xyy() = zp3 * square(*x.get_u_y())* *x.get_u_x()
533  + 2.0* zp2 * *x.get_u_y() * *x.get_u_xy()
534  + zp2 * *x.get_u_x() * *x.get_u_yy()
535  + zp * *x.get_u_xyy();
536 
537  *z.get_u_xyz() = zp3 * *x.get_u_y()* *x.get_u_x()* *x.get_u_z()
538  + zp2 * *x.get_u_z() * *x.get_u_xy()
539  + zp2 * *x.get_u_y() * *x.get_u_xz()
540  + zp2 * *x.get_u_x() * *x.get_u_yz()
541  + zp * *x.get_u_xyz();
542 
543  *z.get_u_xzz() = zp3 * square(*x.get_u_z())* *x.get_u_x()
544  + 2.0* zp2 * *x.get_u_z() * *x.get_u_xz()
545  + zp2 * *x.get_u_x() * *x.get_u_zz()
546  + zp * *x.get_u_xzz();
547 
548 
549  *z.get_u_yyy() = zp3 * cube(*x.get_u_y())
550  + 3.0 * zp2 * *x.get_u_y() * *x.get_u_yy()
551  + zp * *x.get_u_yyy();
552  *z.get_u_yyz() = zp3 * square(*x.get_u_y())* *x.get_u_z()
553  + 2.0* zp2 * *x.get_u_y() * *x.get_u_yz()
554  + zp2 * *x.get_u_z() * *x.get_u_yy()
555  + zp * *x.get_u_yyz();
556 
557  *z.get_u_yzz() = zp3 * square(*x.get_u_z())* *x.get_u_y()
558  + 2.0* zp2 * *x.get_u_z() * *x.get_u_yz()
559  + zp2 * *x.get_u_y() * *x.get_u_zz()
560  + zp * *x.get_u_yzz();
561 
562  *z.get_u_zzz() = zp3 * cube(*x.get_u_z())
563  + 3.0 * zp2 * *x.get_u_z() * *x.get_u_zz()
564  + zp * *x.get_u_zzz();
565 }
566 
572  const df3_three_variable& y, double u,
573  double f_u,double f_v,double f_uu,double f_uv,double f_vv,double f_uuu,
574  double f_uuv,double f_uvv,double f_vvv)
575 {
576  *z.get_u() = u;
577 
578  *z.get_u_x() = f_u* *x.get_u_x()
579  + f_v* *y.get_u_x();
580 
581  *z.get_u_y() = f_u* *x.get_u_y()
582  + f_v* *y.get_u_y();
583 
584  *z.get_u_z() = f_u* *x.get_u_z()
585  + f_v* *y.get_u_z();
586 
587  *z.get_u_xx() = f_uu * square(*x.get_u_x())
588  + f_u * *x.get_u_xx()
589  + f_vv * square(*y.get_u_x())
590  + f_v * *y.get_u_xx()
591  + 2.0 * f_uv * *x.get_u_x() * *y.get_u_x();
592 
593  *z.get_u_xy() = f_uu * *x.get_u_x() * *x.get_u_y()
594  + f_u * *x.get_u_xy()
595  + f_vv * *y.get_u_x() * *y.get_u_y()
596  + f_v * *y.get_u_xy()
597  + f_uv * (*x.get_u_x() * *y.get_u_y()
598  + *x.get_u_y() * *y.get_u_x());
599 
600  *z.get_u_xz() = f_uu * *x.get_u_x() * *x.get_u_z()
601  + f_u * *x.get_u_xz()
602  + f_vv * *y.get_u_x() * *y.get_u_z()
603  + f_v * *y.get_u_xz()
604  + f_uv * (*x.get_u_x() * *y.get_u_z()
605  + *x.get_u_z() * *y.get_u_x());
606 
607  *z.get_u_yy() = f_uu * square(*x.get_u_y())
608  + f_u * *x.get_u_yy()
609  + f_vv * square(*y.get_u_y())
610  + f_v * *y.get_u_yy()
611  + 2.0 * f_uv * *x.get_u_y() * *y.get_u_y();
612 
613  *z.get_u_yz() = f_uu * *x.get_u_y() * *x.get_u_z()
614  + f_u * *x.get_u_yz()
615  + f_vv * *y.get_u_y() * *y.get_u_z()
616  + f_v * *y.get_u_yz()
617  + f_uv * (*x.get_u_y() * *y.get_u_z()
618  + *x.get_u_z() * *y.get_u_y());
619 
620  *z.get_u_zz() = f_uu * *x.get_u_z() * *x.get_u_z()
621  + f_u * *x.get_u_zz()
622  + f_vv * *y.get_u_z() * *y.get_u_z()
623  + f_v * *y.get_u_zz()
624  + f_uv * (*x.get_u_z() * *y.get_u_z()
625  + *x.get_u_z() * *y.get_u_z());
626 
627 
628  *z.get_u_xxx() = f_uuu * cube(*x.get_u_x())
629  + 3.0 * f_uu * *x.get_u_x() * *x.get_u_xx()
630  + f_u * *x.get_u_xxx()
631  + f_vvv * cube(*y.get_u_x())
632  + 3.0 * f_vv * *y.get_u_x() * *y.get_u_xx()
633  + f_v * *y.get_u_xxx()
634  + 3.0 * f_uuv * square(*x.get_u_x()) * *y.get_u_x()
635  + 3.0 * f_uvv * *x.get_u_x()* square(*y.get_u_x())
636  + 3.0* f_uv * *x.get_u_xx() * *y.get_u_x()
637  + 3.0* f_uv * *x.get_u_x() * *y.get_u_xx();
638 
639  *z.get_u_xxy() = f_uuu * square(*x.get_u_x())* *x.get_u_y()
640  + 2.0 * f_uu * *x.get_u_x() * *x.get_u_xy()
641  + f_uu * *x.get_u_y() * *x.get_u_xx()
642  + f_u * *x.get_u_xxy()
643  + f_vvv * square(*y.get_u_x())* *y.get_u_y()
644  + 2.0 * f_vv * *y.get_u_x() * *y.get_u_xy()
645  + f_vv * *y.get_u_xx() * *y.get_u_y()
646  + f_v * *y.get_u_xxy()
647  + f_uuv * square(*x.get_u_x()) * *y.get_u_y()
648  + 2.0* f_uuv * *x.get_u_x() * *x.get_u_y() * *y.get_u_x()
649  + f_uvv * *x.get_u_y()* square(*y.get_u_x())
650  + 2.0 * f_uvv * *x.get_u_x()* *y.get_u_x() * *y.get_u_y()
651  + f_uv * *x.get_u_xx() * *y.get_u_y()
652  + f_uv * *x.get_u_y() * *y.get_u_xx()
653  + 2.0* f_uv * *x.get_u_xy() * *y.get_u_x()
654  + 2.0* f_uv * *x.get_u_x() * *y.get_u_xy();
655 
656  *z.get_u_xxz() = f_uuu * square(*x.get_u_x())* *x.get_u_z()
657  + 2.0 * f_uu * *x.get_u_x() * *x.get_u_xz()
658  + f_uu * *x.get_u_z() * *x.get_u_xx()
659  + f_u * *x.get_u_xxz()
660  + f_vvv * square(*y.get_u_x())* *y.get_u_z()
661  + 2.0 * f_vv * *y.get_u_x() * *y.get_u_xz()
662  + f_vv * *y.get_u_xx() * *y.get_u_z()
663  + f_v * *y.get_u_xxz()
664  + f_uuv * square(*x.get_u_x()) * *y.get_u_z()
665  + 2.0* f_uuv * *x.get_u_x() * *x.get_u_z() * *y.get_u_x()
666  + f_uvv * *x.get_u_z()* square(*y.get_u_x())
667  + 2.0 * f_uvv * *x.get_u_x()* *y.get_u_x() * *y.get_u_z()
668  + f_uv * *x.get_u_xx() * *y.get_u_z()
669  + f_uv * *x.get_u_z() * *y.get_u_xx()
670  + 2.0* f_uv * *x.get_u_xz() * *y.get_u_x()
671  + 2.0* f_uv * *x.get_u_x() * *y.get_u_xz();
672 
673  *z.get_u_xyy() = f_uuu * square(*x.get_u_y())* *x.get_u_x()
674  + 2.0 * f_uu * *x.get_u_y() * *x.get_u_xy()
675  + f_uu * *x.get_u_x() * *x.get_u_yy()
676  + f_u * *x.get_u_xyy()
677  + f_vvv * square(*y.get_u_y())* *y.get_u_x()
678  + 2.0 * f_vv * *y.get_u_y() * *y.get_u_xy()
679  + f_vv * *y.get_u_yy() * *y.get_u_x()
680  + f_v * *y.get_u_xyy()
681  + f_uuv * square(*x.get_u_y()) * *y.get_u_x()
682  + 2.0* f_uuv * *x.get_u_y() * *x.get_u_x() * *y.get_u_y()
683  + f_uvv * *x.get_u_x()* square(*y.get_u_y())
684  + 2.0 * f_uvv * *x.get_u_y()* *y.get_u_y() * *y.get_u_x()
685  + f_uv * *x.get_u_yy() * *y.get_u_x()
686  + f_uv * *x.get_u_x() * *y.get_u_yy()
687  + 2.0* f_uv * *x.get_u_xy() * *y.get_u_y()
688  + 2.0* f_uv * *x.get_u_y() * *y.get_u_xy();
689 
690  *z.get_u_xyz() = f_uuu * *x.get_u_y()* *x.get_u_x()* *x.get_u_z()
691  + f_uuv * *x.get_u_y() * *x.get_u_x()* *y.get_u_z()
692  + f_uu * *x.get_u_y() * *x.get_u_xz()
693  + f_uu * *x.get_u_x() * *x.get_u_yz()
694 
695  + f_uuv * *y.get_u_y() * *x.get_u_x()* *x.get_u_z()
696  + f_uvv * *y.get_u_y() * *x.get_u_x()* *y.get_u_z()
697  + f_uv * *x.get_u_xz() * *y.get_u_y()
698  + f_uv * *y.get_u_yz() * *x.get_u_x()
699 
700  + f_uu * *x.get_u_xy() * *x.get_u_z()
701  + f_uv * *x.get_u_xy() * *y.get_u_z()
702  + f_u * *x.get_u_xyz()
703 
704  + f_uuv * *x.get_u_y() * *y.get_u_x()* *x.get_u_z()
705  + f_uvv * *x.get_u_y() * *y.get_u_x()* *y.get_u_z()
706  + f_uv * *y.get_u_x() * *x.get_u_yz()
707  + f_uv * *x.get_u_y() * *y.get_u_xz()
708 
709  + f_uvv * *y.get_u_y() * *y.get_u_x()* *x.get_u_z()
710  + f_vvv * *y.get_u_y() * *y.get_u_x()* *y.get_u_z()
711 
712  + f_vv * *y.get_u_xz() * *y.get_u_y()
713  + f_vv * *y.get_u_yz() * *y.get_u_x()
714  + f_vv * *y.get_u_xy() * *y.get_u_z()
715  + f_uv * *y.get_u_xy() * *x.get_u_z()
716  + f_v * *y.get_u_xyz();
717 
718  *z.get_u_xzz() = f_uuu * square(*x.get_u_z())* *x.get_u_x()
719  + 2.0 * f_uu * *x.get_u_z() * *x.get_u_xz()
720  + f_uu * *x.get_u_x() * *x.get_u_zz()
721  + f_u * *x.get_u_xzz()
722  + f_vvv * square(*y.get_u_z())* *y.get_u_x()
723  + 2.0 * f_vv * *y.get_u_z() * *y.get_u_xz()
724  + f_vv * *y.get_u_zz() * *y.get_u_x()
725  + f_v * *y.get_u_xzz()
726  + f_uuv * square(*x.get_u_z()) * *y.get_u_x()
727  + 2.0* f_uuv * *x.get_u_z() * *x.get_u_x() * *y.get_u_z()
728  + f_uvv * *x.get_u_x()* square(*y.get_u_z())
729  + 2.0 * f_uvv * *x.get_u_z()* *y.get_u_z() * *y.get_u_x()
730  + f_uv * *x.get_u_zz() * *y.get_u_x()
731  + f_uv * *x.get_u_x() * *y.get_u_zz()
732  + 2.0* f_uv * *x.get_u_xz() * *y.get_u_z()
733  + 2.0* f_uv * *x.get_u_z() * *y.get_u_xz();
734 
735  *z.get_u_yyy() = f_uuu * cube(*x.get_u_y())
736  + 3.0 * f_uu * *x.get_u_y() * *x.get_u_yy()
737  + f_u * *x.get_u_yyy()
738  + f_vvv * cube(*y.get_u_y())
739  + 3.0 * f_vv * *y.get_u_y() * *y.get_u_yy()
740  + f_v * *y.get_u_yyy()
741  + 3.0 * f_uuv * square(*x.get_u_y()) * *y.get_u_y()
742  + 3.0 * f_uvv * *x.get_u_y()* square(*y.get_u_y())
743  + 3.0 * f_uv * *x.get_u_yy() * *y.get_u_y()
744  + 3.0 * f_uv * *x.get_u_y() * *y.get_u_yy();
745 
746  *z.get_u_yyz() = f_uuu * square(*x.get_u_y())* *x.get_u_z()
747  + 2.0 * f_uu * *x.get_u_y() * *x.get_u_yz()
748  + f_uu * *x.get_u_z() * *x.get_u_yy()
749  + f_u * *x.get_u_yyz()
750  + f_vvv * square(*y.get_u_y())* *y.get_u_z()
751  + 2.0 * f_vv * *y.get_u_y() * *y.get_u_yz()
752  + f_vv * *y.get_u_yy() * *y.get_u_z()
753  + f_v * *y.get_u_yyz()
754  + f_uuv * square(*x.get_u_y()) * *y.get_u_z()
755  + 2.0* f_uuv * *x.get_u_y() * *x.get_u_z() * *y.get_u_y()
756  + f_uvv * *x.get_u_z()* square(*y.get_u_y())
757  + 2.0 * f_uvv * *x.get_u_y()* *y.get_u_y() * *y.get_u_z()
758  + f_uv * *x.get_u_yy() * *y.get_u_z()
759  + f_uv * *x.get_u_z() * *y.get_u_yy()
760  + 2.0* f_uv * *x.get_u_yz() * *y.get_u_y()
761  + 2.0* f_uv * *x.get_u_y() * *y.get_u_yz();
762 
763  *z.get_u_yyz() = f_uuu * square(*x.get_u_y())* *x.get_u_z()
764  + 2.0 * f_uu * *x.get_u_y() * *x.get_u_yz()
765  + f_uu * *x.get_u_z() * *x.get_u_yy()
766  + f_u * *x.get_u_yyz()
767  + f_vvv * square(*y.get_u_y())* *y.get_u_z()
768  + 2.0 * f_vv * *y.get_u_y() * *y.get_u_yz()
769  + f_vv * *y.get_u_yy() * *y.get_u_z()
770  + f_v * *y.get_u_yyz()
771  + f_uuv * square(*x.get_u_y()) * *y.get_u_z()
772  + 2.0* f_uuv * *x.get_u_y() * *x.get_u_z() * *y.get_u_y()
773  + f_uvv * *x.get_u_z()* square(*y.get_u_y())
774  + 2.0 * f_uvv * *x.get_u_y()* *y.get_u_y() * *y.get_u_z()
775  + f_uv * *x.get_u_yy() * *y.get_u_z()
776  + f_uv * *x.get_u_z() * *y.get_u_yy()
777  + 2.0* f_uv * *x.get_u_yz() * *y.get_u_y()
778  + 2.0* f_uv * *x.get_u_y() * *y.get_u_yz();
779 
780  *z.get_u_yzz() = f_uuu * square(*x.get_u_z())* *x.get_u_y()
781  + 2.0 * f_uu * *x.get_u_z() * *x.get_u_yz()
782  + f_uu * *x.get_u_y() * *x.get_u_zz()
783  + f_u * *x.get_u_yzz()
784  + f_vvv * square(*y.get_u_z())* *y.get_u_y()
785  + 2.0 * f_vv * *y.get_u_z() * *y.get_u_yz()
786  + f_vv * *y.get_u_zz() * *y.get_u_y()
787  + f_v * *y.get_u_yzz()
788  + f_uuv * square(*x.get_u_z()) * *y.get_u_y()
789  + 2.0* f_uuv * *x.get_u_z() * *x.get_u_y() * *y.get_u_z()
790  + f_uvv * *x.get_u_y()* square(*y.get_u_z())
791  + 2.0 * f_uvv * *x.get_u_z()* *y.get_u_z() * *y.get_u_y()
792  + f_uv * *x.get_u_zz() * *y.get_u_y()
793  + f_uv * *x.get_u_y() * *y.get_u_zz()
794  + 2.0* f_uv * *x.get_u_yz() * *y.get_u_z()
795  + 2.0* f_uv * *x.get_u_z() * *y.get_u_yz();
796 
797  *z.get_u_zzz() = f_uuu * cube(*x.get_u_z())
798  + 3.0 * f_uu * *x.get_u_z() * *x.get_u_zz()
799  + f_u * *x.get_u_zzz()
800  + f_vvv * cube(*y.get_u_z())
801  + 3.0 * f_vv * *y.get_u_z() * *y.get_u_zz()
802  + f_v * *y.get_u_zzz()
803  + 3.0 * f_uuv * square(*x.get_u_z()) * *y.get_u_z()
804  + 3.0 * f_uvv * *x.get_u_z()* square(*y.get_u_z())
805  + 3.0 * f_uv * *x.get_u_zz() * *y.get_u_z()
806  + 3.0 * f_uv * *x.get_u_z() * *y.get_u_zz();
807 }
808 
814  {
816  double u=::sqrt(*x.get_u());
817  *z.get_u()=u;
818  double xinv=1.0/(*x.get_u());
819  double zp=0.5/u;
820  double zp2=-0.5*zp*xinv;
821  double zp3=-1.5*zp2*xinv;
822 
823 
824  set_derivatives(z,x,u,zp,zp2,zp3);
825 
826  return z;
827  }
828 
834  {
836  double cx=value(x);
837  double d=1.0/(1+square(cx));
838  double d2=square(d);
839  double u=::atan(cx);
840  *z.get_u()=u;
841  double zp=d;
842  double zp2=-2.0*cx*d2;
843  double zp3=-2.0*d2+8*cx*cx*d*d2;
844 
845  set_derivatives(z,x,u,zp,zp2,zp3);
846  return z;
847  }
848 
854  const df3_three_variable& y)
855  {
857  z=exp(y*log(x));
858  return z;
859  }
860 
866  {
868  double u=value(x);
869  *z.get_u()=u*u;
870  double zp=2.0*u;
871  double zp2=2.0;
872  double zp3=0.0;
873 
874  set_derivatives(z,x,u,zp,zp2,zp3);
875  return z;
876  }
877 
883  {
885  double u=::tan(*x.get_u());
886  *z.get_u()=u;
887  double v=1.0/::cos(*x.get_u());
888  double w=::sin(*x.get_u());
889  double v2=v*v;
890  double zp=v2;
891  double zp2=2.0*w*v2*v;
892  double zp3=(4.0*w*w+2.0)*v2*v2;
893 
894  set_derivatives(z,x,u,zp,zp2,zp3);
895  return z;
896  }
897 
903  {
905  double u=::sin(*x.get_u());
906  *z.get_u()=u;
907  double zp=::cos(*x.get_u());
908  double zp2=-u;
909  double zp3=-zp;
910 
911  set_derivatives(z,x,u,zp,zp2,zp3);
912  return z;
913  }
914 
920  {
922  double u=::log(*x.get_u());
923  *z.get_u()=u;
924  double zp=1/(*x.get_u());
925  double zp2=-zp*zp;
926  double zp3=-2.0*zp*zp2;
927 
928  set_derivatives(z,x,u,zp,zp2,zp3);
929  return z;
930  }
931 
937  {
939  double u=::exp(*x.get_u());
940  *z.get_u()=u;
941  double zp=u;
942  double zp2=u;
943  double zp3=u;
944 
945  set_derivatives(z,x,u,zp,zp2,zp3);
946  return z;
947  }
948 
954  {
956  double xinv=1.0/(*x.get_u());
957  *z.get_u()=xinv;
958  double zp=-xinv*xinv;
959  double zp2=-2.0*zp*xinv;
960  double zp3=-3.0*zp2*xinv;
961 
962  set_derivatives(z,x,xinv,zp,zp2,zp3);
963 
964  return z;
965  }
970 {
971  *get_u() = *_v.get_u();
972  *get_u_x() = *_v.get_u_x();
973  *get_u_y() = *_v.get_u_y();
974  *get_u_z() = *_v.get_u_z();
975  *get_u_xx() = *_v.get_u_xx();
976  *get_u_xy() = *_v.get_u_xy();
977  *get_u_xz() = *_v.get_u_xz();
978  *get_u_yy() = *_v.get_u_yy();
979  *get_u_yz() = *_v.get_u_yz();
980  *get_u_zz() = *_v.get_u_zz();
981  *get_u_xxx() = *_v.get_u_xxx();
982  *get_u_xxy() = *_v.get_u_xxy();
983  *get_u_xxz() = *_v.get_u_xxz();
984  *get_u_xyy() = *_v.get_u_xyy();
985  *get_u_xyz() = *_v.get_u_xyz();
986  *get_u_xzz() = *_v.get_u_xzz();
987  *get_u_yyy() = *_v.get_u_yyy();
988  *get_u_yyz() = *_v.get_u_yyz();
989  *get_u_yzz() = *_v.get_u_yzz();
990  *get_u_zzz() = *_v.get_u_zzz();
991 
992  return *this;
993 }
998 {
999  *get_u() = x;
1000  *get_u_x() = 0.0;
1001  *get_u_y() = 0.0;
1002  *get_u_z() = 0.0;
1003  *get_u_xx() = 0.0;
1004  *get_u_xy() = 0.0;
1005  *get_u_xz() = 0.0;
1006  *get_u_yy() = 0.0;
1007  *get_u_yz() = 0.0;
1008  *get_u_zz() = 0.0;
1009  *get_u_xxx() = 0.0;
1010  *get_u_xxy() = 0.0;
1011  *get_u_xxz() = 0.0;
1012  *get_u_xyy() = 0.0;
1013  *get_u_xyz() = 0.0;
1014  *get_u_xzz() = 0.0;
1015  *get_u_yyy() = 0.0;
1016  *get_u_yyz() = 0.0;
1017  *get_u_yzz() = 0.0;
1018  *get_u_zzz() = 0.0;
1019 
1020  return *this;
1021 }
1026  const df3_three_variable& x,
1027  const df3_three_variable& y)
1028 {
1030  double u = *x.get_u() * *y.get_u();
1031  *z.get_u() = u;
1032  double f_u = *y.get_u();
1033  double f_v = *x.get_u();
1034  double f_uu = 0.0;
1035  double f_uv = 1.0;
1036  double f_vv = 0.0;
1037  double f_uuu = 0.0;
1038  double f_uuv = 0.0;
1039  double f_uvv = 0.0;
1040  double f_vvv = 0.0;
1041  set_derivatives(z,x,y,u,
1042  f_u, f_v,
1043  f_uu, f_uv, f_vv,
1044  f_uuu, f_uuv, f_uvv, f_vvv);
1045  return z;
1046 }
1047 
1053  const df3_three_variable& v)
1054  {
1056 
1057  *z.get_u() = x * *v.get_u();
1058  *z.get_u_x() = x * *v.get_u_x();
1059  *z.get_u_y() = x * *v.get_u_y();
1060  *z.get_u_z() = x * *v.get_u_z();
1061  *z.get_u_xx() = x * *v.get_u_xx();
1062  *z.get_u_xy() = x * *v.get_u_xy();
1063  *z.get_u_xz() = x * *v.get_u_xz();
1064  *z.get_u_yy() = x * *v.get_u_yy();
1065  *z.get_u_yz() = x * *v.get_u_yz();
1066  *z.get_u_zz() = x * *v.get_u_zz();
1067  *z.get_u_xxx() = x * *v.get_u_xxx();
1068  *z.get_u_xxy() = x * *v.get_u_xxy();
1069  *z.get_u_xxz() = x * *v.get_u_xxz();
1070  *z.get_u_xyy() = x * *v.get_u_xyy();
1071  *z.get_u_xyz() = x * *v.get_u_xyz();
1072  *z.get_u_xzz() = x * *v.get_u_xzz();
1073  *z.get_u_yyy() = x * *v.get_u_yyy();
1074  *z.get_u_yyz() = x * *v.get_u_yyz();
1075  *z.get_u_yzz() = x * *v.get_u_yzz();
1076  *z.get_u_zzz() = x * *v.get_u_zzz();
1077 
1078  return z;
1079  }
1080 
1086  {
1088  if (value(v)>=0)
1089  {
1090  *z.get_u() = *v.get_u();
1091  *z.get_u_x() = *v.get_u_x();
1092  *z.get_u_y() = *v.get_u_y();
1093  *z.get_u_z() = *v.get_u_z();
1094  *z.get_u_xx() = *v.get_u_xx();
1095  *z.get_u_xy() = *v.get_u_xy();
1096  *z.get_u_xz() = *v.get_u_xz();
1097  *z.get_u_yy() = *v.get_u_yy();
1098  *z.get_u_yz() = *v.get_u_yz();
1099  *z.get_u_zz() = *v.get_u_zz();
1100  *z.get_u_xxx() = *v.get_u_xxx();
1101  *z.get_u_xxy() = *v.get_u_xxy();
1102  *z.get_u_xxz() = *v.get_u_xxz();
1103  *z.get_u_xyy() = *v.get_u_xyy();
1104  *z.get_u_xyz() = *v.get_u_xyz();
1105  *z.get_u_xzz() = *v.get_u_xzz();
1106  *z.get_u_yyy() = *v.get_u_yyy();
1107  *z.get_u_yyz() = *v.get_u_yyz();
1108  *z.get_u_yzz() = *v.get_u_yzz();
1109  *z.get_u_zzz() = *v.get_u_zzz();
1110  }
1111  else
1112  {
1113  *z.get_u() = -*v.get_u();
1114  *z.get_u_x() = -*v.get_u_x();
1115  *z.get_u_y() = -*v.get_u_y();
1116  *z.get_u_z() = -*v.get_u_z();
1117  *z.get_u_xx() = -*v.get_u_xx();
1118  *z.get_u_xy() = -*v.get_u_xy();
1119  *z.get_u_xz() = -*v.get_u_xz();
1120  *z.get_u_yy() = -*v.get_u_yy();
1121  *z.get_u_yz() = -*v.get_u_yz();
1122  *z.get_u_zz() = -*v.get_u_zz();
1123  *z.get_u_xxx() = -*v.get_u_xxx();
1124  *z.get_u_xxy() = -*v.get_u_xxy();
1125  *z.get_u_xxz() = -*v.get_u_xxz();
1126  *z.get_u_xyy() = -*v.get_u_xyy();
1127  *z.get_u_xyz() = -*v.get_u_xyz();
1128  *z.get_u_xzz() = -*v.get_u_xzz();
1129  *z.get_u_yyy() = -*v.get_u_yyy();
1130  *z.get_u_yyz() = -*v.get_u_yyz();
1131  *z.get_u_yzz() = -*v.get_u_yzz();
1132  *z.get_u_zzz() = -*v.get_u_zzz();
1133  }
1134 
1135  return z;
1136  }
1137 
1143  double x)
1144  {
1146 
1147  *z.get_u() = x * *v.get_u();
1148  *z.get_u_x() = x * *v.get_u_x();
1149  *z.get_u_y() = x * *v.get_u_y();
1150  *z.get_u_z() = x * *v.get_u_z();
1151  *z.get_u_xx() = x * *v.get_u_xx();
1152  *z.get_u_xy() = x * *v.get_u_xy();
1153  *z.get_u_xz() = x * *v.get_u_xz();
1154  *z.get_u_yy() = x * *v.get_u_yy();
1155  *z.get_u_yz() = x * *v.get_u_yz();
1156  *z.get_u_zz() = x * *v.get_u_zz();
1157  *z.get_u_xxx() = x * *v.get_u_xxx();
1158  *z.get_u_xxy() = x * *v.get_u_xxy();
1159  *z.get_u_xxz() = x * *v.get_u_xxz();
1160  *z.get_u_xyy() = x * *v.get_u_xyy();
1161  *z.get_u_xyz() = x * *v.get_u_xyz();
1162  *z.get_u_xzz() = x * *v.get_u_xzz();
1163  *z.get_u_yyy() = x * *v.get_u_yyy();
1164  *z.get_u_yyz() = x * *v.get_u_yyz();
1165  *z.get_u_yzz() = x * *v.get_u_yzz();
1166  *z.get_u_zzz() = x * *v.get_u_zzz();
1167 
1168  return z;
1169  }
1170 
1176  double y)
1177  {
1178  double u=1/y;
1179  return x*u;
1180  }
1181 
1187  const df3_three_variable& y)
1188  {
1189  df3_three_variable u=inv(y);
1190  return x*u;
1191  }
1192 
1198  const df3_three_variable& y)
1199  {
1200  df3_three_variable u=inv(y);
1201  return x*u;
1202  }
1203 
1204  /*
1205  df3_three_variable operator / (const df3_three_variable& x,
1206  const df3_three_variable& y)
1207  {
1208  df3_three_variable z;
1209  double yinv = 1.0 / (*y.get_u());
1210  double yinv2 = yinv * yinv;
1211  double yinv3 = yinv * yinv2;
1212  doubl yd = *y.get_udot();
1213 
1214  // *z.get_u() = *x.get_u() / *y.get_u();
1215  *z.get_u() = *x.get_u() * yinv;
1216 
1217  *z.get_udot() = - (*x.get_u()) * yinv2 * yd
1218  + *x.get_udot() * yinv;
1219 
1220  *z.get_udot2() = *x.get_udot2() * yinv
1221  - 2.0 * *x.get_udot() * yd * yinv2
1222  + 2.0 * *x.get_u() * yinv3 * yd *yd
1223  - *x.get_u() * yinv2 * y.get_udot2();
1224 
1225  *z.get_udot3() = *x.get_udot3() * yinv
1226  + 3.0 * *x.get_udot2() * *y.get_udot()
1227  + 3.0 * *x.get_udot() * *y.get_udot2()
1228  + *x.get_u() * *y.get_udot3();
1229  }
1230  */
1231 
1237  {
1239  *z.get_u() = x + *v.get_u();
1240  *z.get_u_x() = *v.get_u_x();
1241  *z.get_u_y() = *v.get_u_y();
1242  *z.get_u_z() = *v.get_u_z();
1243  *z.get_u_xx() = *v.get_u_xx();
1244  *z.get_u_xy() = *v.get_u_xy();
1245  *z.get_u_xz() = *v.get_u_xz();
1246  *z.get_u_yy() = *v.get_u_yy();
1247  *z.get_u_yz() = *v.get_u_yz();
1248  *z.get_u_zz() = *v.get_u_zz();
1249  *z.get_u_xxx() = *v.get_u_xxx();
1250  *z.get_u_xxy() = *v.get_u_xxy();
1251  *z.get_u_xxz() = *v.get_u_xxz();
1252  *z.get_u_xyy() = *v.get_u_xyy();
1253  *z.get_u_xyz() = *v.get_u_xyz();
1254  *z.get_u_xzz() = *v.get_u_xzz();
1255  *z.get_u_yyy() = *v.get_u_yyy();
1256  *z.get_u_yyz() = *v.get_u_yyz();
1257  *z.get_u_yzz() = *v.get_u_yzz();
1258  *z.get_u_zzz() = *v.get_u_zzz();
1259 
1260  return z;
1261  }
1262 
1268  {
1270 
1271  *z.get_u() = x + *v.get_u();
1272  *z.get_u_x() = *v.get_u_x();
1273  *z.get_u_y() = *v.get_u_y();
1274  *z.get_u_z() = *v.get_u_z();
1275  *z.get_u_xx() = *v.get_u_xx();
1276  *z.get_u_xy() = *v.get_u_xy();
1277  *z.get_u_xz() = *v.get_u_xz();
1278  *z.get_u_yy() = *v.get_u_yy();
1279  *z.get_u_yz() = *v.get_u_yz();
1280  *z.get_u_zz() = *v.get_u_zz();
1281  *z.get_u_xxx() = *v.get_u_xxx();
1282  *z.get_u_xxy() = *v.get_u_xxy();
1283  *z.get_u_xxz() = *v.get_u_xxz();
1284  *z.get_u_xyy() = *v.get_u_xyy();
1285  *z.get_u_xyz() = *v.get_u_xyz();
1286  *z.get_u_xzz() = *v.get_u_xzz();
1287  *z.get_u_yyy() = *v.get_u_yyy();
1288  *z.get_u_yyz() = *v.get_u_yyz();
1289  *z.get_u_yzz() = *v.get_u_yzz();
1290  *z.get_u_zzz() = *v.get_u_zzz();
1291 
1292 
1293 
1294  return z;
1295  }
1296 
1302  const df3_three_variable& y)
1303  {
1305  *z.get_u() = *x.get_u() + *y.get_u();
1306  *z.get_u_x() = *x.get_u_x() + *y.get_u_x();
1307  *z.get_u_z() = *x.get_u_z() + *y.get_u_z();
1308  *z.get_u_y() = *x.get_u_y()+*y.get_u_y();
1309  *z.get_u_xx() = *x.get_u_xx()+ *y.get_u_xx();
1310  *z.get_u_xy() = *x.get_u_xy()+ *y.get_u_xy();
1311  *z.get_u_xz() = *x.get_u_xz()+ *y.get_u_xz();
1312  *z.get_u_yy() = *x.get_u_yy()+ *y.get_u_yy();
1313  *z.get_u_yz() = *x.get_u_yz()+ *y.get_u_yz();
1314  *z.get_u_zz() = *x.get_u_zz()+ *y.get_u_zz();
1315  *z.get_u_xxx() = *x.get_u_xxx()+ *y.get_u_xxx();
1316  *z.get_u_xxy() = *x.get_u_xxy()+ *y.get_u_xxy();
1317  *z.get_u_xxz() = *x.get_u_xxz()+ *y.get_u_xxz();
1318  *z.get_u_xyy() = *x.get_u_xyy()+ *y.get_u_xyy();
1319  *z.get_u_xyz() = *x.get_u_xyz()+ *y.get_u_xyz();
1320  *z.get_u_xzz() = *x.get_u_xzz()+ *y.get_u_xzz();
1321  *z.get_u_yyy() = *x.get_u_yyy()+ *y.get_u_yyy();
1322  *z.get_u_yyz() = *x.get_u_yyz()+ *y.get_u_yyz();
1323  *z.get_u_yzz() = *x.get_u_yzz()+ *y.get_u_yzz();
1324  *z.get_u_zzz() = *x.get_u_zzz()+ *y.get_u_zzz();
1325  return z;
1326  }
1327 
1333  const df3_three_variable& y)
1334  {
1336  *z.get_u() = *x.get_u() - *y.get_u();
1337  *z.get_u_x() = *x.get_u_x() - *y.get_u_x();
1338  *z.get_u_z() = *x.get_u_z() - *y.get_u_z();
1339  *z.get_u_y() = *x.get_u_y() - *y.get_u_y();
1340  *z.get_u_xx() = *x.get_u_xx() - *y.get_u_xx();
1341  *z.get_u_xy() = *x.get_u_xy() - *y.get_u_xy();
1342  *z.get_u_xz() = *x.get_u_xz() - *y.get_u_xz();
1343  *z.get_u_yy() = *x.get_u_yy() - *y.get_u_yy();
1344  *z.get_u_yz() = *x.get_u_yz() - *y.get_u_yz();
1345  *z.get_u_zz() = *x.get_u_zz() - *y.get_u_zz();
1346  *z.get_u_xxx() = *x.get_u_xxx() - *y.get_u_xxx();
1347  *z.get_u_xxy() = *x.get_u_xxy() - *y.get_u_xxy();
1348  *z.get_u_xxz() = *x.get_u_xxz() - *y.get_u_xxz();
1349  *z.get_u_xyy() = *x.get_u_xyy() - *y.get_u_xyy();
1350  *z.get_u_xyz() = *x.get_u_xyz() - *y.get_u_xyz();
1351  *z.get_u_xzz() = *x.get_u_xzz() - *y.get_u_xzz();
1352  *z.get_u_yyy() = *x.get_u_yyy() - *y.get_u_yyy();
1353  *z.get_u_yyz() = *x.get_u_yyz() - *y.get_u_yyz();
1354  *z.get_u_yzz() = *x.get_u_yzz() - *y.get_u_yzz();
1355  *z.get_u_zzz() = *x.get_u_zzz() - *y.get_u_zzz();
1356  return z;
1357  }
1358 
1364  const df3_three_variable& v)
1365  {
1367 
1368  *z.get_u() = x - *v.get_u();
1369  *z.get_u_x() = -*v.get_u_x();
1370  *z.get_u_y() = -*v.get_u_y();
1371  *z.get_u_z() = -*v.get_u_z();
1372  *z.get_u_xx() = -*v.get_u_xx();
1373  *z.get_u_xy() = -*v.get_u_xy();
1374  *z.get_u_xz() = -*v.get_u_xz();
1375  *z.get_u_yy() = -*v.get_u_yy();
1376  *z.get_u_yz() = -*v.get_u_yz();
1377  *z.get_u_zz() = -*v.get_u_zz();
1378  *z.get_u_xxx() = -*v.get_u_xxx();
1379  *z.get_u_xxy() = -*v.get_u_xxy();
1380  *z.get_u_xxz() = -*v.get_u_xxz();
1381  *z.get_u_xyy() = -*v.get_u_xyy();
1382  *z.get_u_xyz() = -*v.get_u_xyz();
1383  *z.get_u_xzz() = -*v.get_u_xzz();
1384  *z.get_u_yyy() = -*v.get_u_yyy();
1385  *z.get_u_yyz() = -*v.get_u_yyz();
1386  *z.get_u_yzz() = -*v.get_u_yzz();
1387  *z.get_u_zzz() = -*v.get_u_zzz();
1388 
1389  return z;
1390  }
1391 
1397  double y)
1398  {
1400 
1401  *z.get_u() = *v.get_u()-y;
1402  *z.get_u_x() = *v.get_u_x();
1403  *z.get_u_y() = *v.get_u_y();
1404  *z.get_u_z() = *v.get_u_z();
1405  *z.get_u_xx() = *v.get_u_xx();
1406  *z.get_u_xy() = *v.get_u_xy();
1407  *z.get_u_xz() = *v.get_u_xz();
1408  *z.get_u_yy() = *v.get_u_yy();
1409  *z.get_u_yz() = *v.get_u_yz();
1410  *z.get_u_zz() = *v.get_u_zz();
1411  *z.get_u_xxx() = *v.get_u_xxx();
1412  *z.get_u_xxy() = *v.get_u_xxy();
1413  *z.get_u_xxz() = *v.get_u_xxz();
1414  *z.get_u_xyy() = *v.get_u_xyy();
1415  *z.get_u_xyz() = *v.get_u_xyz();
1416  *z.get_u_xzz() = *v.get_u_xzz();
1417  *z.get_u_yyy() = *v.get_u_yyy();
1418  *z.get_u_yyz() = *v.get_u_yyz();
1419  *z.get_u_yzz() = *v.get_u_yzz();
1420  *z.get_u_zzz() = *v.get_u_zzz();
1421 
1422  return z;
1423  }
1426 {
1428  if (num_local_ind_var<0)
1429  {
1430  cerr << "This can't happen" << endl;
1431  ad_exit(1);
1432  }
1433  if (num_local_ind_var==0)
1434  {
1435  num_ind_var=0;
1436  }
1437 }
1444 {
1446  if (num_local_ind_var > 2)
1447  {
1448  cerr << "can only have 3 independent_variables in df3_three_variable"
1449  " function" << endl;
1450  ad_exit(1);
1451  }
1452  ind_var[num_ind_var++] = &var;
1454  *get_u() = *var.get_u();
1455  *get_u_x() = 0.0;
1456  *get_u_y() = 0.0;
1457  *get_u_z() = 0.0;
1458  switch(num_local_ind_var)
1459  {
1460  case 1:
1461  *get_u_x() = 1.0;
1462  break;
1463  case 2:
1464  *get_u_y() = 1.0;
1465  break;
1466  case 3:
1467  *get_u_z() = 1.0;
1468  break;
1469  default:
1470  cerr << "illegal num_ind_var value of " << num_ind_var
1471  << " in df3_three_variable function" << endl;
1472  ad_exit(1);
1473  }
1474  *get_u_xx() = 0.0;
1475  *get_u_xy() = 0.0;
1476  *get_u_xz() = 0.0;
1477  *get_u_yy() = 0.0;
1478  *get_u_yz() = 0.0;
1479  *get_u_zz() = 0.0;
1480  *get_u_xxx() = 0.0;
1481  *get_u_xxy() = 0.0;
1482  *get_u_xxz() = 0.0;
1483  *get_u_xyy() = 0.0;
1484  *get_u_xyz() = 0.0;
1485  *get_u_xzz() = 0.0;
1486  *get_u_yyy() = 0.0;
1487  *get_u_yyz() = 0.0;
1488  *get_u_yzz() = 0.0;
1489  *get_u_zzz() = 0.0;
1490 }
1491 
1497  {
1498  if (num_local_ind_var>2)
1499  {
1500  cerr << "can only have 3 independent_variables in df3_three_variable"
1501  " function" << endl;
1502  ad_exit(1);
1503  }
1505  *get_u() = v;
1506  *get_u_x() = 0.0;
1507  *get_u_y() = 0.0;
1508  *get_u_z() = 0.0;
1509  switch(num_local_ind_var)
1510  {
1511  case 1:
1512  *get_u_x() = 1.0;
1513  break;
1514  case 2:
1515  *get_u_y() = 1.0;
1516  break;
1517  case 3:
1518  *get_u_z() = 1.0;
1519  break;
1520  default:
1521  cerr << "illegal num_ind_var value of " << num_ind_var
1522  << " in df3_three_variable function" << endl;
1523  ad_exit(1);
1524  }
1525  *get_u_xx() = 0.0;
1526  *get_u_xy() = 0.0;
1527  *get_u_xz() = 0.0;
1528  *get_u_yy() = 0.0;
1529  *get_u_yz() = 0.0;
1530  *get_u_zz() = 0.0;
1531  *get_u_xxx() = 0.0;
1532  *get_u_xxy() = 0.0;
1533  *get_u_xxz() = 0.0;
1534  *get_u_xyy() = 0.0;
1535  *get_u_xyz() = 0.0;
1536  *get_u_xzz() = 0.0;
1537  *get_u_yyy() = 0.0;
1538  *get_u_yyz() = 0.0;
1539  *get_u_yzz() = 0.0;
1540  *get_u_zzz() = 0.0;
1541  }
1547 {
1548  // kludge to deal with constantness
1550  int rmin=M.indexmin();
1551  int cmin=M(rmin).indexmin();
1552  int rmax=M.indexmax();
1553  int cmax=M(rmin).indexmax();
1554  if (rmin !=1 || cmin !=1)
1555  {
1556  cerr << "minimum row and column inidices must equal 1 in "
1557  "df1b2matrix choleski_decomp(const df3_three_atrix& MM)"
1558  << endl;
1559  ad_exit(1);
1560  }
1561  if (rmax !=cmax)
1562  {
1563  cerr << "Error in df1b2matrix choleski_decomp(const df3_three_matrix& MM)"
1564  " Matrix not square" << endl;
1565  ad_exit(1);
1566  }
1567 
1568  int n=rmax-rmin+1;
1569  df3_three_matrix L(1,n,1,n);
1570 #ifndef SAFE_INITIALIZE
1571  L.initialize();
1572 #endif
1573 
1574  int i,j,k;
1575  df3_three_variable tmp;
1576 
1577  if (value(M(1,1))<=0)
1578  {
1579  cerr << "Error matrix not positive definite in choleski_decomp"
1580  <<endl;
1581  ad_exit(1);
1582  }
1583 
1584  L(1,1)=sqrt(M(1,1));
1585  for (i=2;i<=n;i++)
1586  {
1587  L(i,1)=M(i,1)/L(1,1);
1588  }
1589 
1590  for (i=2;i<=n;i++)
1591  {
1592  for (j=2;j<=i-1;j++)
1593  {
1594  tmp=M(i,j);
1595  for (k=1;k<=j-1;k++)
1596  {
1597  tmp-=L(i,k)*L(j,k);
1598  }
1599  L(i,j)=tmp/L(j,j);
1600  }
1601  tmp=M(i,i);
1602  for (k=1;k<=i-1;k++)
1603  {
1604  tmp-=L(i,k)*L(i,k);
1605  }
1606 
1607  if (value(tmp)<=0)
1608  {
1609  cerr << "Error matrix not positive definite in choleski_decomp"
1610  <<endl;
1611  ad_exit(1);
1612  }
1613 
1614  L(i,i)=sqrt(tmp);
1615  }
1616 
1617  return L;
1618 }
void initialize()
Description not yet available.
Definition: df33fun.cpp:165
df3_three_variable & operator+=(const df3_three_variable &v)
Add values of v to df3_three_variable.
Definition: df33fun.cpp:403
d3_array tan(const d3_array &arr3)
Returns d3_array results with computed tan from elements in arr3.
Definition: d3arr2a.cpp:73
double * get_u_x() const
Definition: df33fun.h:65
df1b2_gradlist * f1b2gradlist
Definition: df1b2glo.cpp:49
void * trueptr
Address of first element in the vector.
Definition: vector_shapex.h:82
void memcpy(test_smartlist &dest, void *source, const size_t nsize)
memcpy for test_smartlist
Definition: df1b2f10.cpp:367
mat_shapex * shape
Definition: df33fun.h:166
int indexmax() const
Definition: df33fun.h:135
Description not yet available.
Definition: fvar.hpp:2030
df3_three_variable & operator-=(const df3_three_variable &v)
Subtract values from _v in df3_three_variable.
Definition: df33fun.cpp:335
void allocate(void)
Author: David Fournier Copyright (c) 2008-2012 Regents of the University of California.
Definition: dmat0.cpp:8
df1b2variable & operator=(const df3_one_variable &v)
Definition: df3fun.cpp:779
Description not yet available.
double * get_u() const
Definition: df1b2fun.h:228
d3_array operator-(const d3_array &a, const d3_array &b)
Returns d3_array results with computed elements addition of a(i, j, k) + b(i, j, k).
Definition: d3arr2a.cpp:152
#define x
#define ADUNCONST(type, obj)
Creates a shallow copy of obj that is not CONST.
Definition: fvar.hpp:140
Vector of double precision numbers.
Definition: dvector.h:50
double * get_u_xxy() const
Definition: df33fun.h:75
df3_three_vector()
Default constructor.
Definition: df33fun.cpp:177
df3_three_variable & operator*=(const df3_three_variable &v)
Multiply df3_three_variable by var, then call set_derivatives.
Definition: df33fun.cpp:459
Description not yet available.
Definition: df33fun.h:121
double * get_u_zz() const
Definition: df33fun.h:73
int indexmin() const
Definition: df33fun.h:134
double * get_u_yzz() const
Definition: df33fun.h:82
d3_array operator+(const d3_array &a, const d3_array &b)
Returns d3_array results with computed elements addition of a(i, j, k) + b(i, j, k).
Definition: d3arr2a.cpp:132
df1_one_variable atan(const df1_one_variable &x)
Definition: df11fun.cpp:312
df3_three_variable * v
Definition: df33fun.h:126
d3_array sin(const d3_array &arr3)
Returns d3_array results with computed sin from elements in arr3.
Definition: d3arr2a.cpp:43
Description not yet available.
Definition: df33fun.h:162
double * get_u_xyy() const
Definition: df33fun.h:77
df1_two_variable fabs(const df1_two_variable &x)
Definition: df12fun.cpp:891
exitptr ad_exit
Definition: gradstrc.cpp:53
void set_derivatives(df1_one_variable &z, const df1_one_variable &x, double u, double zp)
Definition: df11fun.cpp:280
double * get_u_xz() const
Definition: df33fun.h:70
d3_array cube(const d3_array &m)
Description not yet available.
Definition: d3arr5.cpp:17
void deallocate(void)
Deallocate df3_three_matrix, then set to empty.
Definition: df33fun.cpp:268
void deallocate()
Free allocated memory.
Definition: df33fun.cpp:123
Description not yet available.
Definition: df1b2fun.h:266
df1_one_matrix choleski_decomp(const df1_one_matrix &MM)
Definition: df11fun.cpp:606
dmatrix operator*(const d3_array &t, const dvector &v)
Description not yet available.
Definition: d3arr12.cpp:17
df3_three_variable & operator=(const df3_three_variable &v)
Assignment operator sets values from _v to df3_three_variable.
Definition: df33fun.cpp:969
void allocate()
Does not allocate, but initializes member variables and pointers to NULL.
Definition: df33fun.cpp:216
void initialize()
Intialize values in v to zero.
Definition: df33fun.cpp:106
double * get_u_dot() const
Definition: df1b2fun.h:229
void * get_pointer(void)
Definition: fvar.hpp:2046
init_df3_three_variable(const df1b2variable &)
Construct init_df3_three_variable from df1b2variable.
Definition: df33fun.cpp:1443
df3_three_variable()
Default constructor.
Definition: df33fun.cpp:16
prnstream & endl(prnstream &)
d3_array sqrt(const d3_array &arr3)
Author: David Fournier Copyright (c) 2008-2012 Regents of the University of California.
Definition: d3arr2c.cpp:11
double var(const dvector &vec)
Author: David Fournier Copyright (c) 2008-2012 Regents of the University of California.
Definition: cranfill.cpp:23
double * get_u_yz() const
Definition: df33fun.h:72
#define min(a, b)
Definition: cbivnorm.cpp:188
double v[20]
Definition: df33fun.h:55
Description not yet available.
Definition: df33fun.h:53
double * get_u_xx() const
Definition: df33fun.h:68
d3_array exp(const d3_array &arr3)
Returns d3_array results with computed exp from elements in arr3.
Definition: d3arr2a.cpp:28
static df1b2variable * ind_var[]
Definition: df33fun.h:57
void initialize(void)
Initialize values.
Definition: df33fun.cpp:292
#define M
Definition: rngen.cpp:57
Description not yet available.
Definition: fvar.hpp:2819
double * get_u_xy() const
Definition: df33fun.h:69
df3_three_variable & operator/=(const df3_three_variable &v)
Divide df3_three_variable by var, then call set_derivatives.
Definition: df33fun.cpp:469
unsigned int ncopies
Copy counter to enable shallow copies.
Definition: vector_shapex.h:79
unsigned int ncopies
Definition: fvar.hpp:2034
double * get_u_z() const
Definition: df33fun.h:67
int indexmin(void) const
Definition: df33fun.h:169
int write_pass1(const df1b2variable *px, const df1b2variable *py, df1b2variable *pz, df1b2function2 *pf)
Description not yet available.
Definition: df1b2f12.cpp:17
int indexmax(void) const
Definition: df33fun.h:170
Holds &quot;shape&quot; information for vector objects.
Definition: vector_shapex.h:46
d3_array cos(const d3_array &arr3)
Returns d3_array results with computed cos from elements in arr3.
Definition: d3arr2a.cpp:58
~df3_three_vector()
Destructor.
Definition: df33fun.cpp:116
static unsigned int nvar
Definition: df1b2fun.h:290
#define w
double * get_u_yy() const
Definition: df33fun.h:71
double * get_u_yyy() const
Definition: df33fun.h:80
double * get_u_y() const
Definition: df33fun.h:66
double * get_u() const
Definition: df33fun.h:64
Description not yet available.
double * get_u_xzz() const
Definition: df33fun.h:79
vector_shapex * shape
Definition: df33fun.h:125
static int num_local_ind_var
Definition: df33fun.h:59
double * get_u_zzz() const
Definition: df33fun.h:83
df3_three_matrix(int rmin, int rmax, int cmin, int cmax)
Construct matrix of df3_three_variable with dimensions [rmin to rmax] x [cmin to cmax].
Definition: df33fun.cpp:310
d3_array operator/(const d3_array &m, const double d)
Author: David Fournier.
Definition: d3arr2b.cpp:14
double * get_u_xyz() const
Definition: df33fun.h:78
double * get_u_xxz() const
Definition: df33fun.h:76
~init_df3_three_variable()
Destructor.
Definition: df33fun.cpp:1425
dvector value(const df1_one_vector &v)
Definition: df11fun.cpp:69
double * get_u_xxx() const
Definition: df33fun.h:74
df3_three_vector * v
Definition: df33fun.h:167
static int num_ind_var
Definition: df33fun.h:58
#define max(a, b)
Definition: cbivnorm.cpp:189
double * get_u_yyz() const
Definition: df33fun.h:81
~df3_three_matrix()
Destructor.
Definition: df33fun.cpp:263
double square(const double value)
Return square of value; constant object.
Definition: d3arr4.cpp:16
df1_one_variable inv(const df1_one_variable &x)
Definition: df11fun.cpp:384
d3_array log(const d3_array &arr3)
Author: David Fournier Copyright (c) 2008-2012 Regents of the University of California.
Definition: d3arr2a.cpp:13
d3_array pow(const d3_array &m, int e)
Description not yet available.
Definition: d3arr6.cpp:17