NeoPZ
tinyfadeleven.h
Go to the documentation of this file.
1 #ifndef _tinyfadeleven_h_
2 #define _tinyfadeleven_h_
3 
4 //*********************************************************
5 // This file is generated by generate.cc.
6 // Use this file for any modification
7 //*********************************************************
8 
9 template <class T> class TinyFad<11,T> {
10 public:
11  typedef T value_type;
12  typedef T grad_type;
13 protected:
14 
15  int n;
16  T val_;
17 
18  T dx0_;
19  T dx1_;
20  T dx2_;
21  T dx3_;
22  T dx4_;
23  T dx5_;
24  T dx6_;
25  T dx7_;
26  T dx8_;
27  T dx9_;
28  T dx10_;
29 
30 
31 public:
32  void diff(const size_t ith, const size_t sz){
33  n = ith+1;
34  dx0_ = T(0.);
35  dx1_ = T(0.);
36  dx2_ = T(0.);
37  dx3_ = T(0.);
38  dx4_ = T(0.);
39  dx5_ = T(0.);
40  dx6_ = T(0.);
41  dx7_ = T(0.);
42  dx8_ = T(0.);
43  dx9_ = T(0.);
44  dx10_ = T(0.);
45 
46  switch(ith){
47  case 0 : dx0_ = T(1.);break;
48  case 1 : dx1_ = T(1.);break;
49  case 2 : dx2_ = T(1.);break;
50  case 3 : dx3_ = T(1.);break;
51  case 4 : dx4_ = T(1.);break;
52  case 5 : dx5_ = T(1.);break;
53  case 6 : dx6_ = T(1.);break;
54  case 7 : dx7_ = T(1.);break;
55  case 8 : dx8_ = T(1.);break;
56  case 9 : dx9_ = T(1.);break;
57  case 10 : dx10_ = T(1.);break;
58  default : cout << "ith = " << ith << " out of definition set" << endl;exit(1);
59  }
60  }
61 
62  TinyFad(const T& ind, const int ini) : n(ini+1), val_(ind) {
63  dx0_ = T(0.);
64  dx1_ = T(0.);
65  dx2_ = T(0.);
66  dx3_ = T(0.);
67  dx4_ = T(0.);
68  dx5_ = T(0.);
69  dx6_ = T(0.);
70  dx7_ = T(0.);
71  dx8_ = T(0.);
72  dx9_ = T(0.);
73  dx10_ = T(0.);
74 
75  switch(ini){
76  case 0 : dx0_ = T(1.);break;
77  case 1 : dx1_ = T(1.);break;
78  case 2 : dx2_ = T(1.);break;
79  case 3 : dx3_ = T(1.);break;
80  case 4 : dx4_ = T(1.);break;
81  case 5 : dx5_ = T(1.);break;
82  case 6 : dx6_ = T(1.);break;
83  case 7 : dx7_ = T(1.);break;
84  case 8 : dx8_ = T(1.);break;
85  case 9 : dx9_ = T(1.);break;
86  case 10 : dx10_ = T(1.);break;
87  default : cout << "ini = " << ini << " out of definition set" << endl;exit(1);
88  }
89  }
90  TinyFad() : n(0), val_(0.) {
91  dx0_ = T(0.);
92  dx1_ = T(0.);
93  dx2_ = T(0.);
94  dx3_ = T(0.);
95  dx4_ = T(0.);
96  dx5_ = T(0.);
97  dx6_ = T(0.);
98  dx7_ = T(0.);
99  dx8_ = T(0.);
100  dx9_ = T(0.);
101  dx10_ = T(0.);
102  }
103  TinyFad(const No_Initialization &): n(0) {}
104  TinyFad(const T& in) : n(0), val_(in) {
105  dx0_ = T(0.);
106  dx1_ = T(0.);
107  dx2_ = T(0.);
108  dx3_ = T(0.);
109  dx4_ = T(0.);
110  dx5_ = T(0.);
111  dx6_ = T(0.);
112  dx7_ = T(0.);
113  dx8_ = T(0.);
114  dx9_ = T(0.);
115  dx10_ = T(0.);
116  }
117  TinyFad(const TinyFad<11,T> & in) : n(0), val_(in.val_) {
118  dx0_ = in.dx0_;
119  dx1_ = in.dx1_;
120  dx2_ = in.dx2_;
121  dx3_ = in.dx3_;
122  dx4_ = in.dx4_;
123  dx5_ = in.dx5_;
124  dx6_ = in.dx6_;
125  dx7_ = in.dx7_;
126  dx8_ = in.dx8_;
127  dx9_ = in.dx9_;
128  dx10_ = in.dx10_;
129  }
130 
131  ~TinyFad() {}
132 
133  int N() const {return n-1;}
134 
135  const T& val() const { return val_;}
136  T& val() { return val_;}
137 
138  const T& d0() const { return dx0_;}
139  T& d0() { return dx0_;}
140 
141  const T& d1() const { return dx1_;}
142  T& d1() { return dx1_;}
143 
144  const T& d2() const { return dx2_;}
145  T& d2() { return dx2_;}
146 
147  const T& d3() const { return dx3_;}
148  T& d3() { return dx3_;}
149 
150  const T& d4() const { return dx4_;}
151  T& d4() { return dx4_;}
152 
153  const T& d5() const { return dx5_;}
154  T& d5() { return dx5_;}
155 
156  const T& d6() const { return dx6_;}
157  T& d6() { return dx6_;}
158 
159  const T& d7() const { return dx7_;}
160  T& d7() { return dx7_;}
161 
162  const T& d8() const { return dx8_;}
163  T& d8() { return dx8_;}
164 
165  const T& d9() const { return dx9_;}
166  T& d9() { return dx9_;}
167 
168  const T& d10() const { return dx10_;}
169  T& d10() { return dx10_;}
170 
171  T& dx(int i){
172  switch(i){
173  case 0 : return dx0_;
174  case 1 : return dx1_;
175  case 2 : return dx2_;
176  case 3 : return dx3_;
177  case 4 : return dx4_;
178  case 5 : return dx5_;
179  case 6 : return dx6_;
180  case 7 : return dx7_;
181  case 8 : return dx8_;
182  case 9 : return dx9_;
183  case 10 : return dx10_;
184  default : cout << "i out of bounds" << endl;exit(1);
185  }
186  }
187  const T& dx(int i) const {
188  switch(i){
189  case 0 : return dx0_;
190  case 1 : return dx1_;
191  case 2 : return dx2_;
192  case 3 : return dx3_;
193  case 4 : return dx4_;
194  case 5 : return dx5_;
195  case 6 : return dx6_;
196  case 7 : return dx7_;
197  case 8 : return dx8_;
198  case 9 : return dx9_;
199  case 10 : return dx10_;
200  default : cout << "i out of bounds" << endl;exit(1);
201  }
202  }
203  T& d(int i){
204  switch(i){
205  case 0 : return dx0_;
206  case 1 : return dx1_;
207  case 2 : return dx2_;
208  case 3 : return dx3_;
209  case 4 : return dx4_;
210  case 5 : return dx5_;
211  case 6 : return dx6_;
212  case 7 : return dx7_;
213  case 8 : return dx8_;
214  case 9 : return dx9_;
215  case 10 : return dx10_;
216  default : cout << "i out of bounds" << endl;exit(1);
217  }
218  }
219  const T& d(int i) const {
220  switch(i){
221  case 0 : return dx0_;
222  case 1 : return dx1_;
223  case 2 : return dx2_;
224  case 3 : return dx3_;
225  case 4 : return dx4_;
226  case 5 : return dx5_;
227  case 6 : return dx6_;
228  case 7 : return dx7_;
229  case 8 : return dx8_;
230  case 9 : return dx9_;
231  case 10 : return dx10_;
232  default : cout << "i out of bounds" << endl;exit(1);
233  }
234  }
235 
237  val_ = in.val_;
238 
239  dx0_ = in.dx0_;
240  dx1_ = in.dx1_;
241  dx2_ = in.dx2_;
242  dx3_ = in.dx3_;
243  dx4_ = in.dx4_;
244  dx5_ = in.dx5_;
245  dx6_ = in.dx6_;
246  dx7_ = in.dx7_;
247  dx8_ = in.dx8_;
248  dx9_ = in.dx9_;
249  dx10_ = in.dx10_;
250 
251  return *this;
252  }
253 
254  TinyFad<11,T> & operator = (const T & in){
255  val_ = in;
256 
257  dx0_ = T(0.);
258  dx1_ = T(0.);
259  dx2_ = T(0.);
260  dx3_ = T(0.);
261  dx4_ = T(0.);
262  dx5_ = T(0.);
263  dx6_ = T(0.);
264  dx7_ = T(0.);
265  dx8_ = T(0.);
266  dx9_ = T(0.);
267  dx10_ = T(0.);
268 
269  return *this;
270  }
271 
273  dx0_ += in.dx0_;
274  dx1_ += in.dx1_;
275  dx2_ += in.dx2_;
276  dx3_ += in.dx3_;
277  dx4_ += in.dx4_;
278  dx5_ += in.dx5_;
279  dx6_ += in.dx6_;
280  dx7_ += in.dx7_;
281  dx8_ += in.dx8_;
282  dx9_ += in.dx9_;
283  dx10_ += in.dx10_;
284  val_ += in.val_;
285 
286 
287  return *this;
288  }
290  dx0_ -= in.dx0_;
291  dx1_ -= in.dx1_;
292  dx2_ -= in.dx2_;
293  dx3_ -= in.dx3_;
294  dx4_ -= in.dx4_;
295  dx5_ -= in.dx5_;
296  dx6_ -= in.dx6_;
297  dx7_ -= in.dx7_;
298  dx8_ -= in.dx8_;
299  dx9_ -= in.dx9_;
300  dx10_ -= in.dx10_;
301  val_ -= in.val_;
302 
303  return *this;
304  }
306  dx0_ = dx0_ * in.val_ + val_ * in.dx0_;
307  dx1_ = dx1_ * in.val_ + val_ * in.dx1_;
308  dx2_ = dx2_ * in.val_ + val_ * in.dx2_;
309  dx3_ = dx3_ * in.val_ + val_ * in.dx3_;
310  dx4_ = dx4_ * in.val_ + val_ * in.dx4_;
311  dx5_ = dx5_ * in.val_ + val_ * in.dx5_;
312  dx6_ = dx6_ * in.val_ + val_ * in.dx6_;
313  dx7_ = dx7_ * in.val_ + val_ * in.dx7_;
314  dx8_ = dx8_ * in.val_ + val_ * in.dx8_;
315  dx9_ = dx9_ * in.val_ + val_ * in.dx9_;
316  dx10_ = dx10_ * in.val_ + val_ * in.dx10_;
317  val_ *= in.val_;
318 
319  return *this;
320  }
322  if (in.val_ == 0.) error("TinyFad & TinyFad::operator /= (const TinyFad & in), dividing by 0");
323  dx0_ = ( dx0_ * in.val_ - val_ * in.dx0_ ) / in.val_ / in.val_ ;
324  dx1_ = ( dx1_ * in.val_ - val_ * in.dx1_ ) / in.val_ / in.val_ ;
325  dx2_ = ( dx2_ * in.val_ - val_ * in.dx2_ ) / in.val_ / in.val_ ;
326  dx3_ = ( dx3_ * in.val_ - val_ * in.dx3_ ) / in.val_ / in.val_ ;
327  dx4_ = ( dx4_ * in.val_ - val_ * in.dx4_ ) / in.val_ / in.val_ ;
328  dx5_ = ( dx5_ * in.val_ - val_ * in.dx5_ ) / in.val_ / in.val_ ;
329  dx6_ = ( dx6_ * in.val_ - val_ * in.dx6_ ) / in.val_ / in.val_ ;
330  dx7_ = ( dx7_ * in.val_ - val_ * in.dx7_ ) / in.val_ / in.val_ ;
331  dx8_ = ( dx8_ * in.val_ - val_ * in.dx8_ ) / in.val_ / in.val_ ;
332  dx9_ = ( dx9_ * in.val_ - val_ * in.dx9_ ) / in.val_ / in.val_ ;
333  dx10_ = ( dx10_ * in.val_ - val_ * in.dx10_ ) / in.val_ / in.val_ ;
334  val_ /= in.val_;
335 
336  return *this;
337  }
338 
339  TinyFad<11,T> & operator += (const T & in){ val_ += in;
340 
341  return *this;
342  }
343  TinyFad<11,T> & operator -= (const T & in){ val_ -= in;
344 
345  return *this;
346  }
347  TinyFad<11,T> & operator *= (const T & in){
348  val_ *= in;
349 
350  dx0_ *= in;
351  dx1_ *= in;
352  dx2_ *= in;
353  dx3_ *= in;
354  dx4_ *= in;
355  dx5_ *= in;
356  dx6_ *= in;
357  dx7_ *= in;
358  dx8_ *= in;
359  dx9_ *= in;
360  dx10_ *= in;
361 
362  return *this;
363  }
364  TinyFad<11,T> & operator /= (const T & in){
365  if ( in == T(0.) ) error("TinyFad & TinyFad::operator /= (const T & in), dividing by 0");
366  val_ /= in;
367 
368  dx0_ /= in;
369  dx1_ /= in;
370  dx2_ /= in;
371  dx3_ /= in;
372  dx4_ /= in;
373  dx5_ /= in;
374  dx6_ /= in;
375  dx7_ /= in;
376  dx8_ /= in;
377  dx9_ /= in;
378  dx10_ /= in;
379 
380  return *this;
381  }
382 
384  TinyFad<11,T> tmp(*this);
385  tmp.val_++;
386  return tmp;
387  };
389  TinyFad<11,T> tmp(*this);
390  tmp.val_--;
391  return tmp;
392  };
394  return *this;
395  }
397  return *this;
398  }
399 };
400 
401 
402 template <class T> inline TinyFad<11,T> operator + (const TinyFad<11,T>& in)
403 {
404  return TinyFad<11,T>(in);
405 }
406 
407 template <class T> inline TinyFad<11,T> operator - (const TinyFad<11,T>& in)
408 {
410  tmp -= in;
411  return tmp;
412 }
413 
414 template <class L, class R> inline
416 operator +(const TinyFad<11,L>& un, const TinyFad<11,R>& deux) {
417 
418  typedef typename NumericalTraits<L,R>::promote value_type;
419 
420  No_Initialization nothing;
421  TinyFad<11,value_type> tmp( nothing );
422 
423  tmp.d0() = un.d0() + deux.d0();
424 
425  tmp.d1() = un.d1() + deux.d1();
426 
427  tmp.d2() = un.d2() + deux.d2();
428 
429  tmp.d3() = un.d3() + deux.d3();
430 
431  tmp.d4() = un.d4() + deux.d4();
432 
433  tmp.d5() = un.d5() + deux.d5();
434 
435  tmp.d6() = un.d6() + deux.d6();
436 
437  tmp.d7() = un.d7() + deux.d7();
438 
439  tmp.d8() = un.d8() + deux.d8();
440 
441  tmp.d9() = un.d9() + deux.d9();
442 
443  tmp.d10() = un.d10() + deux.d10();
444 
445  tmp.val() = un.val() + deux.val();
446 
447  return tmp;
448 }
449 
450 template <class L, class R> inline
452 operator +(const TinyFad<11,L>& un, const R& deux) {
453 
454  typedef typename NumericalTraits<L,R>::promote value_type;
455 
456  No_Initialization nothing;
457  TinyFad<11,value_type> tmp( nothing );
458 
459  tmp.d0() = un.d0();
460 
461  tmp.d1() = un.d1();
462 
463  tmp.d2() = un.d2();
464 
465  tmp.d3() = un.d3();
466 
467  tmp.d4() = un.d4();
468 
469  tmp.d5() = un.d5();
470 
471  tmp.d6() = un.d6();
472 
473  tmp.d7() = un.d7();
474 
475  tmp.d8() = un.d8();
476 
477  tmp.d9() = un.d9();
478 
479  tmp.d10() = un.d10();
480 
481  tmp.val() = un.val() + deux;
482 
483  return tmp;
484 }
485 
486 template <class L, class R> inline
488 operator +(const L& un, const TinyFad<11,R>& deux) {
489  return operator +(deux,un);
490 }
491 
492 template <class L, class R> inline
494 operator *(const TinyFad<11,L>& un, const TinyFad<11,R>& deux) {
495 
496  typedef typename NumericalTraits<L,R>::promote value_type;
497 
498  No_Initialization nothing;
499  TinyFad<11,value_type> tmp( nothing );
500 
501  tmp.d0() = un.d0()*deux.val() + un.val() * deux.d0();
502 
503  tmp.d1() = un.d1()*deux.val() + un.val() * deux.d1();
504 
505  tmp.d2() = un.d2()*deux.val() + un.val() * deux.d2();
506 
507  tmp.d3() = un.d3()*deux.val() + un.val() * deux.d3();
508 
509  tmp.d4() = un.d4()*deux.val() + un.val() * deux.d4();
510 
511  tmp.d5() = un.d5()*deux.val() + un.val() * deux.d5();
512 
513  tmp.d6() = un.d6()*deux.val() + un.val() * deux.d6();
514 
515  tmp.d7() = un.d7()*deux.val() + un.val() * deux.d7();
516 
517  tmp.d8() = un.d8()*deux.val() + un.val() * deux.d8();
518 
519  tmp.d9() = un.d9()*deux.val() + un.val() * deux.d9();
520 
521  tmp.d10() = un.d10()*deux.val() + un.val() * deux.d10();
522 
523  tmp.val() = un.val() * deux.val();
524 
525  return tmp;
526 }
527 
528 template <class L, class R> inline
530 operator *(const TinyFad<11,L>& un, const R& deux) {
531 
532  typedef typename NumericalTraits<L,R>::promote value_type;
533 
534  No_Initialization nothing;
535  TinyFad<11,value_type> tmp( nothing );
536 
537  tmp.d0() = un.d0()*deux;
538 
539  tmp.d1() = un.d1()*deux;
540 
541  tmp.d2() = un.d2()*deux;
542 
543  tmp.d3() = un.d3()*deux;
544 
545  tmp.d4() = un.d4()*deux;
546 
547  tmp.d5() = un.d5()*deux;
548 
549  tmp.d6() = un.d6()*deux;
550 
551  tmp.d7() = un.d7()*deux;
552 
553  tmp.d8() = un.d8()*deux;
554 
555  tmp.d9() = un.d9()*deux;
556 
557  tmp.d10() = un.d10()*deux;
558 
559  tmp.val() = un.val() * deux;
560 
561  return tmp;
562 }
563 
564 template <class L, class R> inline
566 operator *(const L& un, const TinyFad<11,R>& deux) {
567 
568  return operator *(deux,un);
569 }
570 
571 
572 template <class L, class R> inline
574 operator -(const TinyFad<11,L> & un, const TinyFad<11,R> & deux) {
575 
576  typedef typename NumericalTraits<L,R>::promote value_type;
577 
578  No_Initialization nothing;
579  TinyFad<11,value_type> tmp( nothing );
580 
581  tmp.d0() = un.d0() - deux.d0();
582 
583  tmp.d1() = un.d1() - deux.d1();
584 
585  tmp.d2() = un.d2() - deux.d2();
586 
587  tmp.d3() = un.d3() - deux.d3();
588 
589  tmp.d4() = un.d4() - deux.d4();
590 
591  tmp.d5() = un.d5() - deux.d5();
592 
593  tmp.d6() = un.d6() - deux.d6();
594 
595  tmp.d7() = un.d7() - deux.d7();
596 
597  tmp.d8() = un.d8() - deux.d8();
598 
599  tmp.d9() = un.d9() - deux.d9();
600 
601  tmp.d10() = un.d10() - deux.d10();
602 
603  tmp.val() = un.val() - deux.val();
604 
605  return tmp;
606 }
607 
608 template <class L, class R> inline
610 operator -(const L & un, const TinyFad<11,R> & deux) {
611 
612  typedef typename NumericalTraits<L,R>::promote value_type;
613 
614  No_Initialization nothing;
615  TinyFad<11,value_type> tmp( nothing );
616 
617  tmp.d0() -= deux.d0();
618 
619  tmp.d1() -= deux.d1();
620 
621  tmp.d2() -= deux.d2();
622 
623  tmp.d3() -= deux.d3();
624 
625  tmp.d4() -= deux.d4();
626 
627  tmp.d5() -= deux.d5();
628 
629  tmp.d6() -= deux.d6();
630 
631  tmp.d7() -= deux.d7();
632 
633  tmp.d8() -= deux.d8();
634 
635  tmp.d9() -= deux.d9();
636 
637  tmp.d10() -= deux.d10();
638 
639  tmp.val() = un - deux.val();
640 
641  return tmp;
642 }
643 
644 template <class L, class R> inline
646 operator -(const TinyFad<11,L> & un, const R & deux) {
647  typedef typename NumericalTraits<L,R>::promote value_type;
648 
649  No_Initialization nothing;
650  TinyFad<11,value_type> tmp( nothing );
651 
652  tmp.d0() = un.d0();
653 
654  tmp.d1() = un.d1();
655 
656  tmp.d2() = un.d2();
657 
658  tmp.d3() = un.d3();
659 
660  tmp.d4() = un.d4();
661 
662  tmp.d5() = un.d5();
663 
664  tmp.d6() = un.d6();
665 
666  tmp.d7() = un.d7();
667 
668  tmp.d8() = un.d8();
669 
670  tmp.d9() = un.d9();
671 
672  tmp.d10() = un.d10();
673 
674  tmp.val() = un.val() - deux;
675 
676  return tmp;
677 }
678 
679 template <class L, class R> inline
681 operator /(const TinyFad<11,L> & un, const TinyFad<11,R> & deux) {
682 
683  typedef typename NumericalTraits<L,R>::promote value_type;
684 
685  if (deux.val() == 0.) error("TinyFad & TinyFad::operator /(const TinyFad<11,L> & un, const TinyFad<11,R> & deux), dividing by 0");
686 
687  No_Initialization nothing;
688  TinyFad<11,value_type> tmp( nothing );
689  value_type dval = deux.val();
690 
691  tmp.d0() = ( un.d0()* deux.val() - un.val() * deux.d0() ) / dval / dval ;
692 
693  tmp.d1() = ( un.d1()* deux.val() - un.val() * deux.d1() ) / dval / dval ;
694 
695  tmp.d2() = ( un.d2()* deux.val() - un.val() * deux.d2() ) / dval / dval ;
696 
697  tmp.d3() = ( un.d3()* deux.val() - un.val() * deux.d3() ) / dval / dval ;
698 
699  tmp.d4() = ( un.d4()* deux.val() - un.val() * deux.d4() ) / dval / dval ;
700 
701  tmp.d5() = ( un.d5()* deux.val() - un.val() * deux.d5() ) / dval / dval ;
702 
703  tmp.d6() = ( un.d6()* deux.val() - un.val() * deux.d6() ) / dval / dval ;
704 
705  tmp.d7() = ( un.d7()* deux.val() - un.val() * deux.d7() ) / dval / dval ;
706 
707  tmp.d8() = ( un.d8()* deux.val() - un.val() * deux.d8() ) / dval / dval ;
708 
709  tmp.d9() = ( un.d9()* deux.val() - un.val() * deux.d9() ) / dval / dval ;
710 
711  tmp.d10() = ( un.d10()* deux.val() - un.val() * deux.d10() ) / dval / dval ;
712 
713  tmp.val() = un.val() / dval;
714 
715  return tmp;
716 }
717 
718 template <class L, class R> inline
720 operator /(const L & un, const TinyFad<11,R> & deux) {
721 
722  typedef typename NumericalTraits<L,R>::promote value_type;
723 
724  if (deux.val() == 0.) error("TinyFad & TinyFad::operator /(const L & un, const TinyFad<11,R> & deux), dividing by 0");
725 
726  No_Initialization nothing;
727  TinyFad<11,value_type> tmp( nothing );
728  value_type dval = deux.val();
729 
730  tmp.d0() = - un * deux.d0() / dval / dval ;
731 
732  tmp.d1() = - un * deux.d1() / dval / dval ;
733 
734  tmp.d2() = - un * deux.d2() / dval / dval ;
735 
736  tmp.d3() = - un * deux.d3() / dval / dval ;
737 
738  tmp.d4() = - un * deux.d4() / dval / dval ;
739 
740  tmp.d5() = - un * deux.d5() / dval / dval ;
741 
742  tmp.d6() = - un * deux.d6() / dval / dval ;
743 
744  tmp.d7() = - un * deux.d7() / dval / dval ;
745 
746  tmp.d8() = - un * deux.d8() / dval / dval ;
747 
748  tmp.d9() = - un * deux.d9() / dval / dval ;
749 
750  tmp.d10() = - un * deux.d10() / dval / dval ;
751 
752  tmp.val() = un / dval;
753 
754  return tmp;
755 }
756 
757 template <class L, class R> inline
759 operator /(const TinyFad<11,L> & un, const R & deux) {
760 
761  typedef typename NumericalTraits<L,R>::promote value_type;
762 
763  if (deux == 0.) error("TinyFad & TinyFad::operator /(const TinyFad<11,L> & un, const R & deux), dividing by 0");
764 
765  No_Initialization nothing;
766  TinyFad<11,value_type> tmp( nothing );
767 
768  tmp.d0() = un.d0() / deux;
769 
770  tmp.d1() = un.d1() / deux;
771 
772  tmp.d2() = un.d2() / deux;
773 
774  tmp.d3() = un.d3() / deux;
775 
776  tmp.d4() = un.d4() / deux;
777 
778  tmp.d5() = un.d5() / deux;
779 
780  tmp.d6() = un.d6() / deux;
781 
782  tmp.d7() = un.d7() / deux;
783 
784  tmp.d8() = un.d8() / deux;
785 
786  tmp.d9() = un.d9() / deux;
787 
788  tmp.d10() = un.d10() / deux;
789 
790  tmp.val() = un.val() / deux;
791 
792  return tmp;
793 }
794 
795 template <class T> TinyFad<11,T> exp (const TinyFad<11,T>& in)
796 {
797  TinyFad<11,T> tmp(exp(in.val()));
798 
799  tmp.d0() = in.d0()*exp(in.val());
800  tmp.d1() = in.d1()*exp(in.val());
801  tmp.d2() = in.d2()*exp(in.val());
802  tmp.d3() = in.d3()*exp(in.val());
803  tmp.d4() = in.d4()*exp(in.val());
804  tmp.d5() = in.d5()*exp(in.val());
805  tmp.d6() = in.d6()*exp(in.val());
806  tmp.d7() = in.d7()*exp(in.val());
807  tmp.d8() = in.d8()*exp(in.val());
808  tmp.d9() = in.d9()*exp(in.val());
809  tmp.d10() = in.d10()*exp(in.val());
810 
811  return tmp;
812 }
813 
814 template <class T> TinyFad<11,T> log (const TinyFad<11,T>& in)
815 {
816  if ( in.val() <= 0) error("TinyFad log (const TinyFad& in) : zero or negative value");
817  TinyFad<11,T> tmp(log(in.val()));
818 
819  tmp.d0() = in.d0() / in.val();
820  tmp.d1() = in.d1() / in.val();
821  tmp.d2() = in.d2() / in.val();
822  tmp.d3() = in.d3() / in.val();
823  tmp.d4() = in.d4() / in.val();
824  tmp.d5() = in.d5() / in.val();
825  tmp.d6() = in.d6() / in.val();
826  tmp.d7() = in.d7() / in.val();
827  tmp.d8() = in.d8() / in.val();
828  tmp.d9() = in.d9() / in.val();
829  tmp.d10() = in.d10() / in.val();
830 
831  return tmp;
832 }
833 
834 template <class T> TinyFad<11,T> sqrt (const TinyFad<11,T>& in)
835 {
836  if ( in.val() < 0. ) error("TinyFad<11,T> sqrt (const TinyFad& in) : negative value");
837  TinyFad<11,T> tmp(sqrt(in.val()));
838 
839  bool test=true;
840  if ( in.val() == T(0.) ){
841  if ( in.d0() != T(0.) ) test = false;
842 
843  if ( in.d1() != T(0.) ) test = false;
844 
845  if ( in.d2() != T(0.) ) test = false;
846 
847  if ( in.d3() != T(0.) ) test = false;
848 
849  if ( in.d4() != T(0.) ) test = false;
850 
851  if ( in.d5() != T(0.) ) test = false;
852 
853  if ( in.d6() != T(0.) ) test = false;
854 
855  if ( in.d7() != T(0.) ) test = false;
856 
857  if ( in.d8() != T(0.) ) test = false;
858 
859  if ( in.d9() != T(0.) ) test = false;
860 
861  if ( in.d10() != T(0.) ) test = false;
862 
863  if ( !test )
864  error("TinyFad<11,T> sqrt (const TinyFad& in) : null value");
865  }
866  else {
867  tmp.d0() = in.d0() / sqrt(in.val()) / 2.;
868  tmp.d1() = in.d1() / sqrt(in.val()) / 2.;
869  tmp.d2() = in.d2() / sqrt(in.val()) / 2.;
870  tmp.d3() = in.d3() / sqrt(in.val()) / 2.;
871  tmp.d4() = in.d4() / sqrt(in.val()) / 2.;
872  tmp.d5() = in.d5() / sqrt(in.val()) / 2.;
873  tmp.d6() = in.d6() / sqrt(in.val()) / 2.;
874  tmp.d7() = in.d7() / sqrt(in.val()) / 2.;
875  tmp.d8() = in.d8() / sqrt(in.val()) / 2.;
876  tmp.d9() = in.d9() / sqrt(in.val()) / 2.;
877  tmp.d10() = in.d10() / sqrt(in.val()) / 2.;
878  }
879 
880  return tmp;
881 }
882 
883 template <class T> TinyFad<11,T> sin (const TinyFad<11,T>& in)
884 {
885  TinyFad<11,T> tmp( sin(in.val()) );
886 
887  tmp.d0() = in.d0() * cos( in.val() );
888  tmp.d1() = in.d1() * cos( in.val() );
889  tmp.d2() = in.d2() * cos( in.val() );
890  tmp.d3() = in.d3() * cos( in.val() );
891  tmp.d4() = in.d4() * cos( in.val() );
892  tmp.d5() = in.d5() * cos( in.val() );
893  tmp.d6() = in.d6() * cos( in.val() );
894  tmp.d7() = in.d7() * cos( in.val() );
895  tmp.d8() = in.d8() * cos( in.val() );
896  tmp.d9() = in.d9() * cos( in.val() );
897  tmp.d10() = in.d10() * cos( in.val() );
898 
899  return tmp;
900 }
901 
902 template <class T> TinyFad<11,T> cos (const TinyFad<11,T>& in)
903 {
904  TinyFad<11,T> tmp(cos(in.val()));
905 
906  tmp.d0() = - in.d0() * sin( in.val() );
907  tmp.d1() = - in.d1() * sin( in.val() );
908  tmp.d2() = - in.d2() * sin( in.val() );
909  tmp.d3() = - in.d3() * sin( in.val() );
910  tmp.d4() = - in.d4() * sin( in.val() );
911  tmp.d5() = - in.d5() * sin( in.val() );
912  tmp.d6() = - in.d6() * sin( in.val() );
913  tmp.d7() = - in.d7() * sin( in.val() );
914  tmp.d8() = - in.d8() * sin( in.val() );
915  tmp.d9() = - in.d9() * sin( in.val() );
916  tmp.d10() = - in.d10() * sin( in.val() );
917 
918  return tmp;
919 }
920 
921 template <class T> TinyFad<11,T> tan (const TinyFad<11,T>& in)
922 {
923  if ( in.val() == 0) error("TinyFad tan (const TinyFad& in) undiefined in 0.");
924  TinyFad<11,T> tmp(tan(in.val()));
925 
926  T cosinus = cos(in.val());
927  tmp.d0() = in.d0() / cosinus / cosinus;
928  tmp.d1() = in.d1() / cosinus / cosinus;
929  tmp.d2() = in.d2() / cosinus / cosinus;
930  tmp.d3() = in.d3() / cosinus / cosinus;
931  tmp.d4() = in.d4() / cosinus / cosinus;
932  tmp.d5() = in.d5() / cosinus / cosinus;
933  tmp.d6() = in.d6() / cosinus / cosinus;
934  tmp.d7() = in.d7() / cosinus / cosinus;
935  tmp.d8() = in.d8() / cosinus / cosinus;
936  tmp.d9() = in.d9() / cosinus / cosinus;
937  tmp.d10() = in.d10() / cosinus / cosinus;
938 
939  return tmp;
940 }
941 
942 template <class T> TinyFad<11,T> pow (const TinyFad<11,T>& in, double e)
943 {
944  TinyFad<11,T> tmp(pow(in.val(), e));
945 
946  tmp.d0() = e*in.d0()*pow(in.val(), e-1);
947  tmp.d1() = e*in.d1()*pow(in.val(), e-1);
948  tmp.d2() = e*in.d2()*pow(in.val(), e-1);
949  tmp.d3() = e*in.d3()*pow(in.val(), e-1);
950  tmp.d4() = e*in.d4()*pow(in.val(), e-1);
951  tmp.d5() = e*in.d5()*pow(in.val(), e-1);
952  tmp.d6() = e*in.d6()*pow(in.val(), e-1);
953  tmp.d7() = e*in.d7()*pow(in.val(), e-1);
954  tmp.d8() = e*in.d8()*pow(in.val(), e-1);
955  tmp.d9() = e*in.d9()*pow(in.val(), e-1);
956  tmp.d10() = e*in.d10()*pow(in.val(), e-1);
957 
958  return tmp;
959 }
960 
961 template <class T> TinyFad<11,T> pow (const TinyFad<11,T>& un, const TinyFad<11,T>& deux)
962 {
963  if (un.val() == 0) error("TinyFad pow (const TinyFad& un, const TinyFad& deux), un = 0. ");
964  TinyFad<11,T> tmp(pow(un.val(), deux.val()));
965 
966  tmp.d0() = deux.d0() * log(un.val()) * pow(un.val(), deux.val())
967  + deux.val() * un.d0() * pow(un.val(), deux.val()-1);
968  tmp.d1() = deux.d1() * log(un.val()) * pow(un.val(), deux.val())
969  + deux.val() * un.d1() * pow(un.val(), deux.val()-1);
970  tmp.d2() = deux.d2() * log(un.val()) * pow(un.val(), deux.val())
971  + deux.val() * un.d2() * pow(un.val(), deux.val()-1);
972  tmp.d3() = deux.d3() * log(un.val()) * pow(un.val(), deux.val())
973  + deux.val() * un.d3() * pow(un.val(), deux.val()-1);
974  tmp.d4() = deux.d4() * log(un.val()) * pow(un.val(), deux.val())
975  + deux.val() * un.d4() * pow(un.val(), deux.val()-1);
976  tmp.d5() = deux.d5() * log(un.val()) * pow(un.val(), deux.val())
977  + deux.val() * un.d5() * pow(un.val(), deux.val()-1);
978  tmp.d6() = deux.d6() * log(un.val()) * pow(un.val(), deux.val())
979  + deux.val() * un.d6() * pow(un.val(), deux.val()-1);
980  tmp.d7() = deux.d7() * log(un.val()) * pow(un.val(), deux.val())
981  + deux.val() * un.d7() * pow(un.val(), deux.val()-1);
982  tmp.d8() = deux.d8() * log(un.val()) * pow(un.val(), deux.val())
983  + deux.val() * un.d8() * pow(un.val(), deux.val()-1);
984  tmp.d9() = deux.d9() * log(un.val()) * pow(un.val(), deux.val())
985  + deux.val() * un.d9() * pow(un.val(), deux.val()-1);
986  tmp.d10() = deux.d10() * log(un.val()) * pow(un.val(), deux.val())
987  + deux.val() * un.d10() * pow(un.val(), deux.val()-1);
988 
989  return tmp;
990 }
991 
992 template <class T> TinyFad<11,T> pow (const TinyFad<11,T>& in, const int e)
993 {
994  TinyFad<11,T> tmp( pow((double)in.val(), (double)e) );
995 
996  tmp.d0() = e*in.d0()*pow((double)in.val(), (double)e-1);
997  tmp.d1() = e*in.d1()*pow((double)in.val(), (double)e-1);
998  tmp.d2() = e*in.d2()*pow((double)in.val(), (double)e-1);
999  tmp.d3() = e*in.d3()*pow((double)in.val(), (double)e-1);
1000  tmp.d4() = e*in.d4()*pow((double)in.val(), (double)e-1);
1001  tmp.d5() = e*in.d5()*pow((double)in.val(), (double)e-1);
1002  tmp.d6() = e*in.d6()*pow((double)in.val(), (double)e-1);
1003  tmp.d7() = e*in.d7()*pow((double)in.val(), (double)e-1);
1004  tmp.d8() = e*in.d8()*pow((double)in.val(), (double)e-1);
1005  tmp.d9() = e*in.d9()*pow((double)in.val(), (double)e-1);
1006  tmp.d10() = e*in.d10()*pow((double)in.val(), (double)e-1);
1007 
1008  return tmp;
1009 }
1010 
1011 template <class T> TinyFad<11,T> abs (const TinyFad<11,T>& in)
1012 {
1013  int sign = in.val() > 0? 1:0;
1014 
1015  if (sign) return in;
1016  else return (-in);
1017 }
1018 
1019 template <class T> std::ostream& operator << (std::ostream& os, const TinyFad<11,T>& a)
1020 {
1021  os.setf(std::ios::fixed,std::ios::scientific);
1022  os.width(12);
1023  os << a.val() << " [";
1024 
1025  os.width(12);
1026  os << a.d0();
1027  os.width(12);
1028  os << a.d1();
1029  os.width(12);
1030  os << a.d2();
1031  os.width(12);
1032  os << a.d3();
1033  os.width(12);
1034  os << a.d4();
1035  os.width(12);
1036  os << a.d5();
1037  os.width(12);
1038  os << a.d6();
1039  os.width(12);
1040  os << a.d7();
1041  os.width(12);
1042  os << a.d8();
1043  os.width(12);
1044  os << a.d9();
1045  os.width(12);
1046  os << a.d10();
1047 
1048  os << "]";
1049 
1050  return os;
1051 }
1052 
1053 
1054 #endif
TinyFad< 11, T > & operator++()
TinyFad< 11, T > exp(const TinyFad< 11, T > &in)
void diff(const size_t ith, const size_t sz)
Definition: tinyfadeleven.h:32
const T & d4() const
TinyFad< 11, typename NumericalTraits< L, R >::promote > operator/(const TinyFad< 11, L > &un, const TinyFad< 11, R > &deux)
TinyFad< Num, T > & operator-=(const TinyFad< Num, T > &in)
Definition: tinyfad.h:233
const T & val() const
const T & d8() const
const T & d3() const
Definition: test.py:1
TinyFad(const T &ind, const int ini)
Definition: tinyfadeleven.h:62
TinyFad< 11, T > & operator--()
TinyFad(const T &in)
AutoPointerMutexArrayInit tmp
const T & dx(int i) const
T val_
Definition: tinyfad.h:47
TinyFad< 11, T > tan(const TinyFad< 11, T > &in)
TinyFad< 11, T > log(const TinyFad< 11, T > &in)
const T & d10() const
const T & d6() const
void error(char *string)
Definition: testShape.cc:7
TinyFad< 11, T > operator--(int)
TinyFad(const TinyFad< 11, T > &in)
TinyFad< 11, typename NumericalTraits< L, R >::promote > operator*(const TinyFad< 11, L > &un, const TinyFad< 11, R > &deux)
const T & d7() const
const T & d(int i) const
TinyFad< 11, T > operator+(const TinyFad< 11, T > &in)
TinyFad< Num, T > & operator=(const TinyFad< Num, T > &in)
Definition: tinyfad.h:189
TinyFad(const No_Initialization &)
const T & d0() const
TinyFad< Num, T > & operator+=(const TinyFad< Num, T > &in)
Definition: tinyfad.h:219
TinyFad< 11, T > operator++(int)
T value_type
Definition: tinyfad.h:53
const T & d1() const
TinyFad< 11, T > abs(const TinyFad< 11, T > &in)
TinyFad< Num, T > & operator*=(const TinyFad< Num, T > &in)
Definition: tinyfad.h:247
TinyFad< 11, T > pow(const TinyFad< 11, T > &in, double e)
TinyFad< Num, T > & operator/=(const TinyFad< Num, T > &in)
Definition: tinyfad.h:261
TinyFad< 11, T > sqrt(const TinyFad< 11, T > &in)
const T & d2() const
TinyFad< 11, T > sin(const TinyFad< 11, T > &in)
const T & d5() const
TinyFad< 11, T > cos(const TinyFad< 11, T > &in)
const T & val() const
Definition: tinyfad.h:72
const T & d9() const
TinyFad< 11, T > operator-(const TinyFad< 11, T > &in)