rheolef  6.3
field_nonlinear_expr_ops.h
Go to the documentation of this file.
1 #ifndef _RHEOLEF_FIELD_NONLINEAR_EXPR_OPS_H
2 #define _RHEOLEF_FIELD_NONLINEAR_EXPR_OPS_H
3 // do not edit !
4 // ./field_nonlinear_expr_ops_make > field_nonlinear_expr_ops.h
5 // Rheolef is free software; you can redistribute it and/or modify
6 #include "rheolef/promote.h"
7 #include "rheolef/field_nonlinear_expr.h"
8 namespace rheolef {
9 namespace detail_nonlinear_expr {
10  struct unary_plus {
11  template <class T> T operator() (const T& a) const { return +a; }
12  };
13 } // namepace detail_nonlinear_expr
14 template<>
15 struct generic_unary_traits<detail_nonlinear_expr::unary_plus> {
16  template<class T>
17  struct with {
18  typedef T argument_type;
19  typedef T result_type;
21  };
22  template <class Arg>
23  struct result_hint {
24  typedef Arg type;
25  };
28  return tag;
29  }
30 };
31 template<class Expr>
32 inline
33 field_nonlinear_expr<
34  field_nonlinear_expr_uf<
35  detail_nonlinear_expr::unary_plus
36  ,field_nonlinear_expr<Expr>
37  >
38  >
40 {
41  typedef field_nonlinear_expr<Expr> arg_t;
44 }
45 template<class Function>
46 inline
47 field_nonlinear_expr<
48  field_nonlinear_expr_uf<
49  detail_nonlinear_expr::unary_plus
50  ,field_expr_terminal_function<Function>
51  >
52  >
54 {
58 }
59 namespace detail_nonlinear_expr {
60  struct negate {
61  template <class T> T operator() (const T& a) const { return -a; }
62  };
63 } // namepace detail_nonlinear_expr
64 template<>
65 struct generic_unary_traits<detail_nonlinear_expr::negate> {
66  template<class T>
67  struct with {
68  typedef T argument_type;
69  typedef T result_type;
71  };
72  template <class Arg>
73  struct result_hint {
74  typedef Arg type;
75  };
78  return tag;
79  }
80 };
81 template<class Expr>
82 inline
83 field_nonlinear_expr<
84  field_nonlinear_expr_uf<
85  detail_nonlinear_expr::negate
86  ,field_nonlinear_expr<Expr>
87  >
88  >
90 {
91  typedef field_nonlinear_expr<Expr> arg_t;
94 }
95 template<class Function>
96 inline
97 field_nonlinear_expr<
98  field_nonlinear_expr_uf<
99  detail_nonlinear_expr::negate
100  ,field_expr_terminal_function<Function>
101  >
102  >
104 {
108 }
109 namespace detail_nonlinear_expr {
110  struct plus {
111  template <class T> T operator() (const T& a, const T& b) const { return a+b; }
112  };
113 } // namepace detail_nonlinear_expr
114 template<>
115 struct generic_binary_traits<detail_nonlinear_expr::plus> {
116  template<class T>
117  struct with {
120  typedef T result_type;
122  };
123  template <class Arg1, class Arg2>
124  struct result_hint {
125  typedef typename promote<Arg1,Arg2>::type type;
126  };
129  return (tag2 == space_constant::last_valued) ? tag1 : tag2;
130  }
131 };
132 template<class Expr>
133 inline
134 field_nonlinear_expr<
135  field_nonlinear_expr_uf<
136  std::binder1st<std::plus<typename field_nonlinear_expr<Expr>::scalar_type> >
137  ,field_nonlinear_expr<Expr>
138  >
139 >
141 {
142  typedef typename field_nonlinear_expr<Expr>::scalar_type scalar_t;
143  typedef std::binder1st<std::plus<scalar_t> > fun_t;
144  typedef field_nonlinear_expr<Expr> arg_t;
146  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::plus<scalar_t>(), x), y));
147 }
148 template<class Function>
149 inline
150 field_nonlinear_expr<
151  field_nonlinear_expr_uf<
152  std::binder1st<std::plus<typename field_expr_terminal_function<Function>::scalar_type> >
153  ,field_expr_terminal_function<Function>
154  >
155 >
157 {
158  typedef typename field_expr_terminal_function<Function>::scalar_type scalar_t;
159  typedef std::binder1st<std::plus<scalar_t> > fun_t;
162  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::plus<scalar_t>(), x), y));
163 }
164 template<class Expr>
165 inline
166 field_nonlinear_expr<
167  field_nonlinear_expr_uf<
168  std::binder2nd<std::plus<typename field_nonlinear_expr<Expr>::scalar_type> >
169  ,field_nonlinear_expr<Expr>
170  >
171 >
173 {
174  typedef typename field_nonlinear_expr<Expr>::scalar_type scalar_t;
175  typedef std::binder2nd<std::plus<scalar_t> > fun_t;
176  typedef field_nonlinear_expr<Expr> arg_t;
178  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::plus<scalar_t>(), y), x));
179 }
180 template<class Function>
181 inline
182 field_nonlinear_expr<
183  field_nonlinear_expr_uf<
184  std::binder2nd<std::plus<typename field_expr_terminal_function<Function>::scalar_type> >
185  ,field_expr_terminal_function<Function>
186  >
187 >
189 {
190  typedef typename field_expr_terminal_function<Function>::scalar_type scalar_t;
191  typedef std::binder2nd<std::plus<scalar_t> > fun_t;
194  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::plus<scalar_t>(), y), x));
195 }
196 template<class Function, class T, class M>
197 inline
198 field_nonlinear_expr<
199  field_nonlinear_expr_bf<
200  detail_nonlinear_expr::plus
201  ,field_expr_terminal_field<T,M>
202  ,field_expr_terminal_function<Function>
203  >
204  >
206 {
207  typedef field_expr_terminal_field<T,M> arg1_t;
210  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), arg1_t(x), y));
211 }
212 template<class Function, class T, class M>
213 inline
214 field_nonlinear_expr<
215  field_nonlinear_expr_bf<
216  detail_nonlinear_expr::plus
217  ,field_expr_terminal_function<Function>
218  ,field_expr_terminal_field<T,M>
219  >
220  >
222 {
224  typedef field_expr_terminal_field<T,M> arg2_t;
226  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), x, arg2_t(y)));
227 }
228 template<class Expr, class T, class M>
229 inline
230 field_nonlinear_expr<
231  field_nonlinear_expr_bf<
232  detail_nonlinear_expr::plus
233  ,field_nonlinear_expr<Expr>
234  ,field_expr_terminal_field<T,M>
235  >
236  >
238 {
239  typedef field_nonlinear_expr<Expr> arg1_t;
240  typedef field_expr_terminal_field<T,M> arg2_t;
242  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), x, arg2_t(y)));
243 }
244 template<class Expr, class T, class M>
245 inline
246 field_nonlinear_expr<
247  field_nonlinear_expr_bf<
248  detail_nonlinear_expr::plus
249  ,field_expr_terminal_field<T,M>
250  ,field_nonlinear_expr<Expr>
251  >
252  >
254 {
255  typedef field_expr_terminal_field<T,M> arg1_t;
256  typedef field_nonlinear_expr<Expr> arg2_t;
258  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), arg1_t(x), y));
259 }
260 template<class Function, class T, class M>
261 inline
262 field_nonlinear_expr<
263  field_nonlinear_expr_bf<
264  detail_nonlinear_expr::plus
265  ,field_expr_terminal_field<T,M>
266  ,field_expr_terminal_function<Function>
267  >
268  >
270 {
271  typedef field_expr_terminal_field<T,M> arg1_t;
274  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), arg1_t(x), y));
275 }
276 template<class Function, class T, class M>
277 inline
278 field_nonlinear_expr<
279  field_nonlinear_expr_bf<
280  detail_nonlinear_expr::plus
281  ,field_expr_terminal_function<Function>
282  ,field_expr_terminal_field<T,M>
283  >
284  >
286 {
288  typedef field_expr_terminal_field<T,M> arg2_t;
290  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), x, arg2_t(y)));
291 }
292 template<class Expr, class T, class M>
293 inline
294 field_nonlinear_expr<
295  field_nonlinear_expr_bf<
296  detail_nonlinear_expr::plus
297  ,field_nonlinear_expr<Expr>
298  ,field_expr_terminal_field<T,M>
299  >
300  >
302 {
303  typedef field_nonlinear_expr<Expr> arg1_t;
304  typedef field_expr_terminal_field<T,M> arg2_t;
306  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), x, arg2_t(y)));
307 }
308 template<class Expr, class T, class M>
309 inline
310 field_nonlinear_expr<
311  field_nonlinear_expr_bf<
312  detail_nonlinear_expr::plus
313  ,field_expr_terminal_field<T,M>
314  ,field_nonlinear_expr<Expr>
315  >
316  >
318 {
319  typedef field_expr_terminal_field<T,M> arg1_t;
320  typedef field_nonlinear_expr<Expr> arg2_t;
322  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), arg1_t(x), y));
323 }
324 template<class Function, class T, class M>
325 inline
326 field_nonlinear_expr<
327  field_nonlinear_expr_bf<
328  detail_nonlinear_expr::plus
329  ,field_expr_terminal_field<T,M>
330  ,field_expr_terminal_function<Function>
331  >
332  >
334 {
335  typedef field_expr_terminal_field<T,M> arg1_t;
338  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), arg1_t(x), y));
339 }
340 template<class Function, class T, class M>
341 inline
342 field_nonlinear_expr<
343  field_nonlinear_expr_bf<
344  detail_nonlinear_expr::plus
345  ,field_expr_terminal_function<Function>
346  ,field_expr_terminal_field<T,M>
347  >
348  >
350 {
352  typedef field_expr_terminal_field<T,M> arg2_t;
354  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), x, arg2_t(y)));
355 }
356 template<class Expr, class T, class M>
357 inline
358 field_nonlinear_expr<
359  field_nonlinear_expr_bf<
360  detail_nonlinear_expr::plus
361  ,field_nonlinear_expr<Expr>
362  ,field_expr_terminal_field<T,M>
363  >
364  >
366 {
367  typedef field_nonlinear_expr<Expr> arg1_t;
368  typedef field_expr_terminal_field<T,M> arg2_t;
370  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), x, arg2_t(y)));
371 }
372 template<class Expr, class T, class M>
373 inline
374 field_nonlinear_expr<
375  field_nonlinear_expr_bf<
376  detail_nonlinear_expr::plus
377  ,field_expr_terminal_field<T,M>
378  ,field_nonlinear_expr<Expr>
379  >
380  >
382 {
383  typedef field_expr_terminal_field<T,M> arg1_t;
384  typedef field_nonlinear_expr<Expr> arg2_t;
386  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), arg1_t(x), y));
387 }
388 template<class Function, class T, class M>
389 inline
390 field_nonlinear_expr<
391  field_nonlinear_expr_bf<
392  detail_nonlinear_expr::plus
393  ,field_expr_terminal_field<T,M>
394  ,field_expr_terminal_function<Function>
395  >
396  >
398 {
399  typedef field_expr_terminal_field<T,M> arg1_t;
402  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), arg1_t(x), y));
403 }
404 template<class Function, class T, class M>
405 inline
406 field_nonlinear_expr<
407  field_nonlinear_expr_bf<
408  detail_nonlinear_expr::plus
409  ,field_expr_terminal_function<Function>
410  ,field_expr_terminal_field<T,M>
411  >
412  >
414 {
416  typedef field_expr_terminal_field<T,M> arg2_t;
418  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), x, arg2_t(y)));
419 }
420 template<class Expr, class T, class M>
421 inline
422 field_nonlinear_expr<
423  field_nonlinear_expr_bf<
424  detail_nonlinear_expr::plus
425  ,field_nonlinear_expr<Expr>
426  ,field_expr_terminal_field<T,M>
427  >
428  >
430 {
431  typedef field_nonlinear_expr<Expr> arg1_t;
432  typedef field_expr_terminal_field<T,M> arg2_t;
434  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), x, arg2_t(y)));
435 }
436 template<class Expr, class T, class M>
437 inline
438 field_nonlinear_expr<
439  field_nonlinear_expr_bf<
440  detail_nonlinear_expr::plus
441  ,field_expr_terminal_field<T,M>
442  ,field_nonlinear_expr<Expr>
443  >
444  >
446 {
447  typedef field_expr_terminal_field<T,M> arg1_t;
448  typedef field_nonlinear_expr<Expr> arg2_t;
450  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), arg1_t(x), y));
451 }
452 template<class Function, class T, class M>
453 inline
454 field_nonlinear_expr<
455  field_nonlinear_expr_bf<
456  detail_nonlinear_expr::plus
457  ,field_expr_terminal_field<T,M>
458  ,field_expr_terminal_function<Function>
459  >
460  >
462 {
463  typedef field_expr_terminal_field<T,M> arg1_t;
466  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), arg1_t(x), y));
467 }
468 template<class Function, class T, class M>
469 inline
470 field_nonlinear_expr<
471  field_nonlinear_expr_bf<
472  detail_nonlinear_expr::plus
473  ,field_expr_terminal_function<Function>
474  ,field_expr_terminal_field<T,M>
475  >
476  >
478 {
480  typedef field_expr_terminal_field<T,M> arg2_t;
482  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), x, arg2_t(y)));
483 }
484 template<class Expr, class T, class M>
485 inline
486 field_nonlinear_expr<
487  field_nonlinear_expr_bf<
488  detail_nonlinear_expr::plus
489  ,field_nonlinear_expr<Expr>
490  ,field_expr_terminal_field<T,M>
491  >
492  >
494 {
495  typedef field_nonlinear_expr<Expr> arg1_t;
496  typedef field_expr_terminal_field<T,M> arg2_t;
498  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), x, arg2_t(y)));
499 }
500 template<class Expr, class T, class M>
501 inline
502 field_nonlinear_expr<
503  field_nonlinear_expr_bf<
504  detail_nonlinear_expr::plus
505  ,field_expr_terminal_field<T,M>
506  ,field_nonlinear_expr<Expr>
507  >
508  >
510 {
511  typedef field_expr_terminal_field<T,M> arg1_t;
512  typedef field_nonlinear_expr<Expr> arg2_t;
514  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), arg1_t(x), y));
515 }
516 template<class Expr, class Function>
517 inline
518 field_nonlinear_expr<
519  field_nonlinear_expr_bf<
520  detail_nonlinear_expr::plus
521  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
522  ,field_expr_terminal_function<Function>
523  >
524  >
526 {
530  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), arg1_t(x), y));
531 }
532 template<class Expr, class Function>
533 inline
534 field_nonlinear_expr<
535  field_nonlinear_expr_bf<
536  detail_nonlinear_expr::plus
537  ,field_expr_terminal_function<Function>
538  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
539  >
540  >
542 {
546  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), x, arg2_t(y)));
547 }
548 template<class Expr, class Function>
549 inline
550 field_nonlinear_expr<
551  field_nonlinear_expr_bf<
552  detail_nonlinear_expr::plus
553  ,field_nonlinear_expr<Expr>
554  ,field_expr_terminal_function<Function>
555  >
556  >
558 {
559  typedef field_nonlinear_expr<Expr> arg1_t;
563 }
564 template<class Expr, class Function>
565 inline
566 field_nonlinear_expr<
567  field_nonlinear_expr_bf<
568  detail_nonlinear_expr::plus
569  ,field_expr_terminal_function<Function>
570  ,field_nonlinear_expr<Expr>
571  >
572  >
574 {
576  typedef field_nonlinear_expr<Expr> arg2_t;
579 }
580 template<class Expr1, class Expr2>
581 inline
582 field_nonlinear_expr<
583  field_nonlinear_expr_bf<
584  detail_nonlinear_expr::plus
585  ,field_expr_terminal_field<typename field_expr<Expr1>::scalar_type, typename field_expr<Expr1>::memory_type>
586  ,field_nonlinear_expr<Expr2>
587  >
588  >
590 {
592  typedef field_nonlinear_expr<Expr2> arg2_t;
594  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), arg1_t(x), y));
595 }
596 template<class Expr1, class Expr2>
597 inline
598 field_nonlinear_expr<
599  field_nonlinear_expr_bf<
600  detail_nonlinear_expr::plus
601  ,field_nonlinear_expr<Expr1>
602  ,field_expr_terminal_field<typename field_expr<Expr2>::scalar_type, typename field_expr<Expr2>::memory_type>
603  >
604  >
606 {
607  typedef field_nonlinear_expr<Expr1> arg1_t;
610  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::plus(), x, arg2_t(y)));
611 }
612 template<class Function1, class Function2>
613 inline
614 field_nonlinear_expr<
615  field_nonlinear_expr_bf<
616  detail_nonlinear_expr::plus
617  ,field_expr_terminal_function<Function1>
618  ,field_expr_terminal_function<Function2>
619  >
620  >
622 {
627 }
628 template<class Expr1, class Expr2>
629 inline
630 field_nonlinear_expr<
631  field_nonlinear_expr_bf<
632  detail_nonlinear_expr::plus
633  ,field_nonlinear_expr<Expr1>
634  ,field_nonlinear_expr<Expr2>
635  >
636  >
638 {
639  typedef field_nonlinear_expr<Expr1> arg1_t;
640  typedef field_nonlinear_expr<Expr2> arg2_t;
643 }
644 namespace detail_nonlinear_expr {
645  struct minus {
646  template <class T> T operator() (const T& a, const T& b) const { return a-b; }
647  };
648 } // namepace detail_nonlinear_expr
649 template<>
650 struct generic_binary_traits<detail_nonlinear_expr::minus> {
651  template<class T>
652  struct with {
655  typedef T result_type;
657  };
658  template <class Arg1, class Arg2>
659  struct result_hint {
660  typedef typename promote<Arg1,Arg2>::type type;
661  };
664  return (tag2 == space_constant::last_valued) ? tag1 : tag2;
665  }
666 };
667 template<class Expr>
668 inline
669 field_nonlinear_expr<
670  field_nonlinear_expr_uf<
671  std::binder1st<std::minus<typename field_nonlinear_expr<Expr>::scalar_type> >
672  ,field_nonlinear_expr<Expr>
673  >
674 >
676 {
677  typedef typename field_nonlinear_expr<Expr>::scalar_type scalar_t;
678  typedef std::binder1st<std::minus<scalar_t> > fun_t;
679  typedef field_nonlinear_expr<Expr> arg_t;
681  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::minus<scalar_t>(), x), y));
682 }
683 template<class Function>
684 inline
685 field_nonlinear_expr<
686  field_nonlinear_expr_uf<
687  std::binder1st<std::minus<typename field_expr_terminal_function<Function>::scalar_type> >
688  ,field_expr_terminal_function<Function>
689  >
690 >
692 {
693  typedef typename field_expr_terminal_function<Function>::scalar_type scalar_t;
694  typedef std::binder1st<std::minus<scalar_t> > fun_t;
697  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::minus<scalar_t>(), x), y));
698 }
699 template<class Expr>
700 inline
701 field_nonlinear_expr<
702  field_nonlinear_expr_uf<
703  std::binder2nd<std::minus<typename field_nonlinear_expr<Expr>::scalar_type> >
704  ,field_nonlinear_expr<Expr>
705  >
706 >
708 {
709  typedef typename field_nonlinear_expr<Expr>::scalar_type scalar_t;
710  typedef std::binder2nd<std::minus<scalar_t> > fun_t;
711  typedef field_nonlinear_expr<Expr> arg_t;
713  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::minus<scalar_t>(), y), x));
714 }
715 template<class Function>
716 inline
717 field_nonlinear_expr<
718  field_nonlinear_expr_uf<
719  std::binder2nd<std::minus<typename field_expr_terminal_function<Function>::scalar_type> >
720  ,field_expr_terminal_function<Function>
721  >
722 >
724 {
725  typedef typename field_expr_terminal_function<Function>::scalar_type scalar_t;
726  typedef std::binder2nd<std::minus<scalar_t> > fun_t;
729  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::minus<scalar_t>(), y), x));
730 }
731 template<class Function, class T, class M>
732 inline
733 field_nonlinear_expr<
734  field_nonlinear_expr_bf<
735  detail_nonlinear_expr::minus
736  ,field_expr_terminal_field<T,M>
737  ,field_expr_terminal_function<Function>
738  >
739  >
741 {
742  typedef field_expr_terminal_field<T,M> arg1_t;
745  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), arg1_t(x), y));
746 }
747 template<class Function, class T, class M>
748 inline
749 field_nonlinear_expr<
750  field_nonlinear_expr_bf<
751  detail_nonlinear_expr::minus
752  ,field_expr_terminal_function<Function>
753  ,field_expr_terminal_field<T,M>
754  >
755  >
757 {
759  typedef field_expr_terminal_field<T,M> arg2_t;
761  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), x, arg2_t(y)));
762 }
763 template<class Expr, class T, class M>
764 inline
765 field_nonlinear_expr<
766  field_nonlinear_expr_bf<
767  detail_nonlinear_expr::minus
768  ,field_nonlinear_expr<Expr>
769  ,field_expr_terminal_field<T,M>
770  >
771  >
773 {
774  typedef field_nonlinear_expr<Expr> arg1_t;
775  typedef field_expr_terminal_field<T,M> arg2_t;
777  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), x, arg2_t(y)));
778 }
779 template<class Expr, class T, class M>
780 inline
781 field_nonlinear_expr<
782  field_nonlinear_expr_bf<
783  detail_nonlinear_expr::minus
784  ,field_expr_terminal_field<T,M>
785  ,field_nonlinear_expr<Expr>
786  >
787  >
789 {
790  typedef field_expr_terminal_field<T,M> arg1_t;
791  typedef field_nonlinear_expr<Expr> arg2_t;
793  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), arg1_t(x), y));
794 }
795 template<class Function, class T, class M>
796 inline
797 field_nonlinear_expr<
798  field_nonlinear_expr_bf<
799  detail_nonlinear_expr::minus
800  ,field_expr_terminal_field<T,M>
801  ,field_expr_terminal_function<Function>
802  >
803  >
805 {
806  typedef field_expr_terminal_field<T,M> arg1_t;
809  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), arg1_t(x), y));
810 }
811 template<class Function, class T, class M>
812 inline
813 field_nonlinear_expr<
814  field_nonlinear_expr_bf<
815  detail_nonlinear_expr::minus
816  ,field_expr_terminal_function<Function>
817  ,field_expr_terminal_field<T,M>
818  >
819  >
821 {
823  typedef field_expr_terminal_field<T,M> arg2_t;
825  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), x, arg2_t(y)));
826 }
827 template<class Expr, class T, class M>
828 inline
829 field_nonlinear_expr<
830  field_nonlinear_expr_bf<
831  detail_nonlinear_expr::minus
832  ,field_nonlinear_expr<Expr>
833  ,field_expr_terminal_field<T,M>
834  >
835  >
837 {
838  typedef field_nonlinear_expr<Expr> arg1_t;
839  typedef field_expr_terminal_field<T,M> arg2_t;
841  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), x, arg2_t(y)));
842 }
843 template<class Expr, class T, class M>
844 inline
845 field_nonlinear_expr<
846  field_nonlinear_expr_bf<
847  detail_nonlinear_expr::minus
848  ,field_expr_terminal_field<T,M>
849  ,field_nonlinear_expr<Expr>
850  >
851  >
853 {
854  typedef field_expr_terminal_field<T,M> arg1_t;
855  typedef field_nonlinear_expr<Expr> arg2_t;
857  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), arg1_t(x), y));
858 }
859 template<class Function, class T, class M>
860 inline
861 field_nonlinear_expr<
862  field_nonlinear_expr_bf<
863  detail_nonlinear_expr::minus
864  ,field_expr_terminal_field<T,M>
865  ,field_expr_terminal_function<Function>
866  >
867  >
869 {
870  typedef field_expr_terminal_field<T,M> arg1_t;
873  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), arg1_t(x), y));
874 }
875 template<class Function, class T, class M>
876 inline
877 field_nonlinear_expr<
878  field_nonlinear_expr_bf<
879  detail_nonlinear_expr::minus
880  ,field_expr_terminal_function<Function>
881  ,field_expr_terminal_field<T,M>
882  >
883  >
885 {
887  typedef field_expr_terminal_field<T,M> arg2_t;
889  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), x, arg2_t(y)));
890 }
891 template<class Expr, class T, class M>
892 inline
893 field_nonlinear_expr<
894  field_nonlinear_expr_bf<
895  detail_nonlinear_expr::minus
896  ,field_nonlinear_expr<Expr>
897  ,field_expr_terminal_field<T,M>
898  >
899  >
901 {
902  typedef field_nonlinear_expr<Expr> arg1_t;
903  typedef field_expr_terminal_field<T,M> arg2_t;
905  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), x, arg2_t(y)));
906 }
907 template<class Expr, class T, class M>
908 inline
909 field_nonlinear_expr<
910  field_nonlinear_expr_bf<
911  detail_nonlinear_expr::minus
912  ,field_expr_terminal_field<T,M>
913  ,field_nonlinear_expr<Expr>
914  >
915  >
917 {
918  typedef field_expr_terminal_field<T,M> arg1_t;
919  typedef field_nonlinear_expr<Expr> arg2_t;
921  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), arg1_t(x), y));
922 }
923 template<class Function, class T, class M>
924 inline
925 field_nonlinear_expr<
926  field_nonlinear_expr_bf<
927  detail_nonlinear_expr::minus
928  ,field_expr_terminal_field<T,M>
929  ,field_expr_terminal_function<Function>
930  >
931  >
933 {
934  typedef field_expr_terminal_field<T,M> arg1_t;
937  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), arg1_t(x), y));
938 }
939 template<class Function, class T, class M>
940 inline
941 field_nonlinear_expr<
942  field_nonlinear_expr_bf<
943  detail_nonlinear_expr::minus
944  ,field_expr_terminal_function<Function>
945  ,field_expr_terminal_field<T,M>
946  >
947  >
949 {
951  typedef field_expr_terminal_field<T,M> arg2_t;
953  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), x, arg2_t(y)));
954 }
955 template<class Expr, class T, class M>
956 inline
957 field_nonlinear_expr<
958  field_nonlinear_expr_bf<
959  detail_nonlinear_expr::minus
960  ,field_nonlinear_expr<Expr>
961  ,field_expr_terminal_field<T,M>
962  >
963  >
965 {
966  typedef field_nonlinear_expr<Expr> arg1_t;
967  typedef field_expr_terminal_field<T,M> arg2_t;
969  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), x, arg2_t(y)));
970 }
971 template<class Expr, class T, class M>
972 inline
973 field_nonlinear_expr<
974  field_nonlinear_expr_bf<
975  detail_nonlinear_expr::minus
976  ,field_expr_terminal_field<T,M>
977  ,field_nonlinear_expr<Expr>
978  >
979  >
981 {
982  typedef field_expr_terminal_field<T,M> arg1_t;
983  typedef field_nonlinear_expr<Expr> arg2_t;
985  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), arg1_t(x), y));
986 }
987 template<class Function, class T, class M>
988 inline
989 field_nonlinear_expr<
990  field_nonlinear_expr_bf<
991  detail_nonlinear_expr::minus
992  ,field_expr_terminal_field<T,M>
993  ,field_expr_terminal_function<Function>
994  >
995  >
997 {
998  typedef field_expr_terminal_field<T,M> arg1_t;
1001  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), arg1_t(x), y));
1002 }
1003 template<class Function, class T, class M>
1004 inline
1005 field_nonlinear_expr<
1006  field_nonlinear_expr_bf<
1007  detail_nonlinear_expr::minus
1008  ,field_expr_terminal_function<Function>
1009  ,field_expr_terminal_field<T,M>
1010  >
1011  >
1013 {
1015  typedef field_expr_terminal_field<T,M> arg2_t;
1017  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), x, arg2_t(y)));
1018 }
1019 template<class Expr, class T, class M>
1020 inline
1021 field_nonlinear_expr<
1022  field_nonlinear_expr_bf<
1023  detail_nonlinear_expr::minus
1024  ,field_nonlinear_expr<Expr>
1025  ,field_expr_terminal_field<T,M>
1026  >
1027  >
1029 {
1030  typedef field_nonlinear_expr<Expr> arg1_t;
1031  typedef field_expr_terminal_field<T,M> arg2_t;
1033  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), x, arg2_t(y)));
1034 }
1035 template<class Expr, class T, class M>
1036 inline
1037 field_nonlinear_expr<
1038  field_nonlinear_expr_bf<
1039  detail_nonlinear_expr::minus
1040  ,field_expr_terminal_field<T,M>
1041  ,field_nonlinear_expr<Expr>
1042  >
1043  >
1045 {
1046  typedef field_expr_terminal_field<T,M> arg1_t;
1047  typedef field_nonlinear_expr<Expr> arg2_t;
1049  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), arg1_t(x), y));
1050 }
1051 template<class Expr, class Function>
1052 inline
1053 field_nonlinear_expr<
1054  field_nonlinear_expr_bf<
1055  detail_nonlinear_expr::minus
1056  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
1057  ,field_expr_terminal_function<Function>
1058  >
1059  >
1061 {
1065  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), arg1_t(x), y));
1066 }
1067 template<class Expr, class Function>
1068 inline
1069 field_nonlinear_expr<
1070  field_nonlinear_expr_bf<
1071  detail_nonlinear_expr::minus
1072  ,field_expr_terminal_function<Function>
1073  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
1074  >
1075  >
1077 {
1081  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), x, arg2_t(y)));
1082 }
1083 template<class Expr, class Function>
1084 inline
1085 field_nonlinear_expr<
1086  field_nonlinear_expr_bf<
1087  detail_nonlinear_expr::minus
1088  ,field_nonlinear_expr<Expr>
1089  ,field_expr_terminal_function<Function>
1090  >
1091  >
1093 {
1094  typedef field_nonlinear_expr<Expr> arg1_t;
1098 }
1099 template<class Expr, class Function>
1100 inline
1101 field_nonlinear_expr<
1102  field_nonlinear_expr_bf<
1103  detail_nonlinear_expr::minus
1104  ,field_expr_terminal_function<Function>
1105  ,field_nonlinear_expr<Expr>
1106  >
1107  >
1109 {
1111  typedef field_nonlinear_expr<Expr> arg2_t;
1114 }
1115 template<class Expr1, class Expr2>
1116 inline
1117 field_nonlinear_expr<
1118  field_nonlinear_expr_bf<
1119  detail_nonlinear_expr::minus
1120  ,field_expr_terminal_field<typename field_expr<Expr1>::scalar_type, typename field_expr<Expr1>::memory_type>
1121  ,field_nonlinear_expr<Expr2>
1122  >
1123  >
1125 {
1127  typedef field_nonlinear_expr<Expr2> arg2_t;
1129  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), arg1_t(x), y));
1130 }
1131 template<class Expr1, class Expr2>
1132 inline
1133 field_nonlinear_expr<
1134  field_nonlinear_expr_bf<
1135  detail_nonlinear_expr::minus
1136  ,field_nonlinear_expr<Expr1>
1137  ,field_expr_terminal_field<typename field_expr<Expr2>::scalar_type, typename field_expr<Expr2>::memory_type>
1138  >
1139  >
1141 {
1142  typedef field_nonlinear_expr<Expr1> arg1_t;
1145  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::minus(), x, arg2_t(y)));
1146 }
1147 template<class Function1, class Function2>
1148 inline
1149 field_nonlinear_expr<
1150  field_nonlinear_expr_bf<
1151  detail_nonlinear_expr::minus
1152  ,field_expr_terminal_function<Function1>
1153  ,field_expr_terminal_function<Function2>
1154  >
1155  >
1157 {
1162 }
1163 template<class Expr1, class Expr2>
1164 inline
1165 field_nonlinear_expr<
1166  field_nonlinear_expr_bf<
1167  detail_nonlinear_expr::minus
1168  ,field_nonlinear_expr<Expr1>
1169  ,field_nonlinear_expr<Expr2>
1170  >
1171  >
1173 {
1174  typedef field_nonlinear_expr<Expr1> arg1_t;
1175  typedef field_nonlinear_expr<Expr2> arg2_t;
1178 }
1179 namespace detail_nonlinear_expr {
1180  template <class T1, class T2>
1183  };
1184  template <class T>
1185  struct multiplies_result<T,T> {
1186  typedef T type;
1187  };
1188  template <class T>
1191  };
1192  template <class T>
1195  };
1196  template <class T>
1199  };
1200  template <class T>
1203  };
1204  template <class T>
1207  };
1208  template <class T>
1211  };
1212  template <class T>
1215  };
1216  struct multiplies {
1217  template <class T1, class T2>
1219  operator() (const T1& a, const T2& b) const { return a*b; }
1220  };
1221 } // namepace detail_nonlinear_expr
1222 template<>
1223 struct generic_binary_traits<detail_nonlinear_expr::multiplies> {
1224  template<class Result>
1225  struct with {
1226  typedef Result result_type;
1231  };
1232  template <class Arg1, class Arg2>
1233  struct result_hint {
1235  };
1238  return space_constant::multiplies_result_tag(tag1,tag2);
1239  }
1240 };
1241 template<class Expr>
1242 inline
1243 field_nonlinear_expr<
1244  field_nonlinear_expr_uf<
1245  std::binder1st<std::multiplies<typename field_nonlinear_expr<Expr>::scalar_type> >
1246  ,field_nonlinear_expr<Expr>
1247  >
1248 >
1250 {
1251  typedef typename field_nonlinear_expr<Expr>::scalar_type scalar_t;
1252  typedef std::binder1st<std::multiplies<scalar_t> > fun_t;
1253  typedef field_nonlinear_expr<Expr> arg_t;
1255  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::multiplies<scalar_t>(), x), y));
1256 }
1257 template<class Function>
1258 inline
1259 field_nonlinear_expr<
1260  field_nonlinear_expr_uf<
1261  std::binder1st<std::multiplies<typename field_expr_terminal_function<Function>::scalar_type> >
1262  ,field_expr_terminal_function<Function>
1263  >
1264 >
1266 {
1267  typedef typename field_expr_terminal_function<Function>::scalar_type scalar_t;
1268  typedef std::binder1st<std::multiplies<scalar_t> > fun_t;
1271  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::multiplies<scalar_t>(), x), y));
1272 }
1273 template<class Expr>
1274 inline
1275 field_nonlinear_expr<
1276  field_nonlinear_expr_uf<
1277  std::binder2nd<std::multiplies<typename field_nonlinear_expr<Expr>::scalar_type> >
1278  ,field_nonlinear_expr<Expr>
1279  >
1280 >
1282 {
1283  typedef typename field_nonlinear_expr<Expr>::scalar_type scalar_t;
1284  typedef std::binder2nd<std::multiplies<scalar_t> > fun_t;
1285  typedef field_nonlinear_expr<Expr> arg_t;
1287  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::multiplies<scalar_t>(), y), x));
1288 }
1289 template<class Function>
1290 inline
1291 field_nonlinear_expr<
1292  field_nonlinear_expr_uf<
1293  std::binder2nd<std::multiplies<typename field_expr_terminal_function<Function>::scalar_type> >
1294  ,field_expr_terminal_function<Function>
1295  >
1296 >
1298 {
1299  typedef typename field_expr_terminal_function<Function>::scalar_type scalar_t;
1300  typedef std::binder2nd<std::multiplies<scalar_t> > fun_t;
1303  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::multiplies<scalar_t>(), y), x));
1304 }
1305 template<class T, class M>
1306 inline
1307 field_nonlinear_expr<
1308  field_nonlinear_expr_bf<
1309  detail_nonlinear_expr::multiplies
1310  ,field_expr_terminal_field<T,M>
1311  ,field_expr_terminal_field<T,M>
1312  >
1313  >
1315 {
1316  typedef field_expr_terminal_field<T,M> arg1_t;
1317  typedef field_expr_terminal_field<T,M> arg2_t;
1319  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1320 }
1321 template<class T, class M>
1322 inline
1323 field_nonlinear_expr<
1324  field_nonlinear_expr_bf<
1325  detail_nonlinear_expr::multiplies
1326  ,field_expr_terminal_field<T,M>
1327  ,field_expr_terminal_field<T,M>
1328  >
1329  >
1331 {
1332  typedef field_expr_terminal_field<T,M> arg1_t;
1333  typedef field_expr_terminal_field<T,M> arg2_t;
1335  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1336 }
1337 template<class T, class M>
1338 inline
1339 field_nonlinear_expr<
1340  field_nonlinear_expr_bf<
1341  detail_nonlinear_expr::multiplies
1342  ,field_expr_terminal_field<T,M>
1343  ,field_expr_terminal_field<T,M>
1344  >
1345  >
1347 {
1348  typedef field_expr_terminal_field<T,M> arg1_t;
1349  typedef field_expr_terminal_field<T,M> arg2_t;
1351  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1352 }
1353 template<class T, class M>
1354 inline
1355 field_nonlinear_expr<
1356  field_nonlinear_expr_bf<
1357  detail_nonlinear_expr::multiplies
1358  ,field_expr_terminal_field<T,M>
1359  ,field_expr_terminal_field<T,M>
1360  >
1361  >
1363 {
1364  typedef field_expr_terminal_field<T,M> arg1_t;
1365  typedef field_expr_terminal_field<T,M> arg2_t;
1367  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1368 }
1369 template<class T, class M>
1370 inline
1371 field_nonlinear_expr<
1372  field_nonlinear_expr_bf<
1373  detail_nonlinear_expr::multiplies
1374  ,field_expr_terminal_field<T,M>
1375  ,field_expr_terminal_field<T,M>
1376  >
1377  >
1379 {
1380  typedef field_expr_terminal_field<T,M> arg1_t;
1381  typedef field_expr_terminal_field<T,M> arg2_t;
1383  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1384 }
1385 template<class T, class M>
1386 inline
1387 field_nonlinear_expr<
1388  field_nonlinear_expr_bf<
1389  detail_nonlinear_expr::multiplies
1390  ,field_expr_terminal_field<T,M>
1391  ,field_expr_terminal_field<T,M>
1392  >
1393  >
1395 {
1396  typedef field_expr_terminal_field<T,M> arg1_t;
1397  typedef field_expr_terminal_field<T,M> arg2_t;
1399  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1400 }
1401 template<class T, class M>
1402 inline
1403 field_nonlinear_expr<
1404  field_nonlinear_expr_bf<
1405  detail_nonlinear_expr::multiplies
1406  ,field_expr_terminal_field<T,M>
1407  ,field_expr_terminal_field<T,M>
1408  >
1409  >
1411 {
1412  typedef field_expr_terminal_field<T,M> arg1_t;
1413  typedef field_expr_terminal_field<T,M> arg2_t;
1415  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1416 }
1417 template<class T, class M>
1418 inline
1419 field_nonlinear_expr<
1420  field_nonlinear_expr_bf<
1421  detail_nonlinear_expr::multiplies
1422  ,field_expr_terminal_field<T,M>
1423  ,field_expr_terminal_field<T,M>
1424  >
1425  >
1427 {
1428  typedef field_expr_terminal_field<T,M> arg1_t;
1429  typedef field_expr_terminal_field<T,M> arg2_t;
1431  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1432 }
1433 template<class T, class M>
1434 inline
1435 field_nonlinear_expr<
1436  field_nonlinear_expr_bf<
1437  detail_nonlinear_expr::multiplies
1438  ,field_expr_terminal_field<T,M>
1439  ,field_expr_terminal_field<T,M>
1440  >
1441  >
1443 {
1444  typedef field_expr_terminal_field<T,M> arg1_t;
1445  typedef field_expr_terminal_field<T,M> arg2_t;
1447  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1448 }
1449 template<class T, class M>
1450 inline
1451 field_nonlinear_expr<
1452  field_nonlinear_expr_bf<
1453  detail_nonlinear_expr::multiplies
1454  ,field_expr_terminal_field<T,M>
1455  ,field_expr_terminal_field<T,M>
1456  >
1457  >
1459 {
1460  typedef field_expr_terminal_field<T,M> arg1_t;
1461  typedef field_expr_terminal_field<T,M> arg2_t;
1463  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1464 }
1465 template<class T, class M>
1466 inline
1467 field_nonlinear_expr<
1468  field_nonlinear_expr_bf<
1469  detail_nonlinear_expr::multiplies
1470  ,field_expr_terminal_field<T,M>
1471  ,field_expr_terminal_field<T,M>
1472  >
1473  >
1475 {
1476  typedef field_expr_terminal_field<T,M> arg1_t;
1477  typedef field_expr_terminal_field<T,M> arg2_t;
1479  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1480 }
1481 template<class T, class M>
1482 inline
1483 field_nonlinear_expr<
1484  field_nonlinear_expr_bf<
1485  detail_nonlinear_expr::multiplies
1486  ,field_expr_terminal_field<T,M>
1487  ,field_expr_terminal_field<T,M>
1488  >
1489  >
1491 {
1492  typedef field_expr_terminal_field<T,M> arg1_t;
1493  typedef field_expr_terminal_field<T,M> arg2_t;
1495  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1496 }
1497 template<class T, class M>
1498 inline
1499 field_nonlinear_expr<
1500  field_nonlinear_expr_bf<
1501  detail_nonlinear_expr::multiplies
1502  ,field_expr_terminal_field<T,M>
1503  ,field_expr_terminal_field<T,M>
1504  >
1505  >
1507 {
1508  typedef field_expr_terminal_field<T,M> arg1_t;
1509  typedef field_expr_terminal_field<T,M> arg2_t;
1511  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1512 }
1513 template<class T, class M>
1514 inline
1515 field_nonlinear_expr<
1516  field_nonlinear_expr_bf<
1517  detail_nonlinear_expr::multiplies
1518  ,field_expr_terminal_field<T,M>
1519  ,field_expr_terminal_field<T,M>
1520  >
1521  >
1523 {
1524  typedef field_expr_terminal_field<T,M> arg1_t;
1525  typedef field_expr_terminal_field<T,M> arg2_t;
1527  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1528 }
1529 template<class T, class M>
1530 inline
1531 field_nonlinear_expr<
1532  field_nonlinear_expr_bf<
1533  detail_nonlinear_expr::multiplies
1534  ,field_expr_terminal_field<T,M>
1535  ,field_expr_terminal_field<T,M>
1536  >
1537  >
1539 {
1540  typedef field_expr_terminal_field<T,M> arg1_t;
1541  typedef field_expr_terminal_field<T,M> arg2_t;
1543  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1544 }
1545 template<class T, class M>
1546 inline
1547 field_nonlinear_expr<
1548  field_nonlinear_expr_bf<
1549  detail_nonlinear_expr::multiplies
1550  ,field_expr_terminal_field<T,M>
1551  ,field_expr_terminal_field<T,M>
1552  >
1553  >
1555 {
1556  typedef field_expr_terminal_field<T,M> arg1_t;
1557  typedef field_expr_terminal_field<T,M> arg2_t;
1559  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1560 }
1561 template<class T, class M>
1562 inline
1563 field_nonlinear_expr<
1564  field_nonlinear_expr_bf<
1565  detail_nonlinear_expr::multiplies
1566  ,field_expr_terminal_field<T,M>
1567  ,field_expr_terminal_field<T,M>
1568  >
1569  >
1571 {
1572  typedef field_expr_terminal_field<T,M> arg1_t;
1573  typedef field_expr_terminal_field<T,M> arg2_t;
1575  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1576 }
1577 template<class T, class M>
1578 inline
1579 field_nonlinear_expr<
1580  field_nonlinear_expr_bf<
1581  detail_nonlinear_expr::multiplies
1582  ,field_expr_terminal_field<T,M>
1583  ,field_expr_terminal_field<T,M>
1584  >
1585  >
1587 {
1588  typedef field_expr_terminal_field<T,M> arg1_t;
1589  typedef field_expr_terminal_field<T,M> arg2_t;
1591  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1592 }
1593 template<class T, class M>
1594 inline
1595 field_nonlinear_expr<
1596  field_nonlinear_expr_bf<
1597  detail_nonlinear_expr::multiplies
1598  ,field_expr_terminal_field<T,M>
1599  ,field_expr_terminal_field<T,M>
1600  >
1601  >
1603 {
1604  typedef field_expr_terminal_field<T,M> arg1_t;
1605  typedef field_expr_terminal_field<T,M> arg2_t;
1607  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1608 }
1609 template<class T, class M>
1610 inline
1611 field_nonlinear_expr<
1612  field_nonlinear_expr_bf<
1613  detail_nonlinear_expr::multiplies
1614  ,field_expr_terminal_field<T,M>
1615  ,field_expr_terminal_field<T,M>
1616  >
1617  >
1619 {
1620  typedef field_expr_terminal_field<T,M> arg1_t;
1621  typedef field_expr_terminal_field<T,M> arg2_t;
1623  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1624 }
1625 template<class T, class M>
1626 inline
1627 field_nonlinear_expr<
1628  field_nonlinear_expr_bf<
1629  detail_nonlinear_expr::multiplies
1630  ,field_expr_terminal_field<T,M>
1631  ,field_expr_terminal_field<T,M>
1632  >
1633  >
1635 {
1636  typedef field_expr_terminal_field<T,M> arg1_t;
1637  typedef field_expr_terminal_field<T,M> arg2_t;
1639  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1640 }
1641 template<class T, class M>
1642 inline
1643 field_nonlinear_expr<
1644  field_nonlinear_expr_bf<
1645  detail_nonlinear_expr::multiplies
1646  ,field_expr_terminal_field<T,M>
1647  ,field_expr_terminal_field<T,M>
1648  >
1649  >
1651 {
1652  typedef field_expr_terminal_field<T,M> arg1_t;
1653  typedef field_expr_terminal_field<T,M> arg2_t;
1655  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1656 }
1657 template<class T, class M>
1658 inline
1659 field_nonlinear_expr<
1660  field_nonlinear_expr_bf<
1661  detail_nonlinear_expr::multiplies
1662  ,field_expr_terminal_field<T,M>
1663  ,field_expr_terminal_field<T,M>
1664  >
1665  >
1667 {
1668  typedef field_expr_terminal_field<T,M> arg1_t;
1669  typedef field_expr_terminal_field<T,M> arg2_t;
1671  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1672 }
1673 template<class T, class M>
1674 inline
1675 field_nonlinear_expr<
1676  field_nonlinear_expr_bf<
1677  detail_nonlinear_expr::multiplies
1678  ,field_expr_terminal_field<T,M>
1679  ,field_expr_terminal_field<T,M>
1680  >
1681  >
1683 {
1684  typedef field_expr_terminal_field<T,M> arg1_t;
1685  typedef field_expr_terminal_field<T,M> arg2_t;
1687  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1688 }
1689 template<class T, class M>
1690 inline
1691 field_nonlinear_expr<
1692  field_nonlinear_expr_bf<
1693  detail_nonlinear_expr::multiplies
1694  ,field_expr_terminal_field<T,M>
1695  ,field_expr_terminal_field<T,M>
1696  >
1697  >
1699 {
1700  typedef field_expr_terminal_field<T,M> arg1_t;
1701  typedef field_expr_terminal_field<T,M> arg2_t;
1703  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1704 }
1705 template<class Expr, class T, class M>
1706 inline
1707 field_nonlinear_expr<
1708  field_nonlinear_expr_bf<
1709  detail_nonlinear_expr::multiplies
1710  ,field_expr_terminal_field<T,M>
1711  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
1712  >
1713  >
1715 {
1716  typedef field_expr_terminal_field<T,M> arg1_t;
1719  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1720 }
1721 template<class Expr, class T, class M>
1722 inline
1723 field_nonlinear_expr<
1724  field_nonlinear_expr_bf<
1725  detail_nonlinear_expr::multiplies
1726  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
1727  ,field_expr_terminal_field<T,M>
1728  >
1729  >
1731 {
1733  typedef field_expr_terminal_field<T,M> arg2_t;
1735  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1736 }
1737 template<class Function, class T, class M>
1738 inline
1739 field_nonlinear_expr<
1740  field_nonlinear_expr_bf<
1741  detail_nonlinear_expr::multiplies
1742  ,field_expr_terminal_field<T,M>
1743  ,field_expr_terminal_function<Function>
1744  >
1745  >
1747 {
1748  typedef field_expr_terminal_field<T,M> arg1_t;
1751  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), y));
1752 }
1753 template<class Function, class T, class M>
1754 inline
1755 field_nonlinear_expr<
1756  field_nonlinear_expr_bf<
1757  detail_nonlinear_expr::multiplies
1758  ,field_expr_terminal_function<Function>
1759  ,field_expr_terminal_field<T,M>
1760  >
1761  >
1763 {
1765  typedef field_expr_terminal_field<T,M> arg2_t;
1767  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), x, arg2_t(y)));
1768 }
1769 template<class Expr, class T, class M>
1770 inline
1771 field_nonlinear_expr<
1772  field_nonlinear_expr_bf<
1773  detail_nonlinear_expr::multiplies
1774  ,field_nonlinear_expr<Expr>
1775  ,field_expr_terminal_field<T,M>
1776  >
1777  >
1779 {
1780  typedef field_nonlinear_expr<Expr> arg1_t;
1781  typedef field_expr_terminal_field<T,M> arg2_t;
1783  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), x, arg2_t(y)));
1784 }
1785 template<class Expr, class T, class M>
1786 inline
1787 field_nonlinear_expr<
1788  field_nonlinear_expr_bf<
1789  detail_nonlinear_expr::multiplies
1790  ,field_expr_terminal_field<T,M>
1791  ,field_nonlinear_expr<Expr>
1792  >
1793  >
1795 {
1796  typedef field_expr_terminal_field<T,M> arg1_t;
1797  typedef field_nonlinear_expr<Expr> arg2_t;
1799  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), y));
1800 }
1801 template<class Expr, class T, class M>
1802 inline
1803 field_nonlinear_expr<
1804  field_nonlinear_expr_bf<
1805  detail_nonlinear_expr::multiplies
1806  ,field_expr_terminal_field<T,M>
1807  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
1808  >
1809  >
1811 {
1812  typedef field_expr_terminal_field<T,M> arg1_t;
1815  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1816 }
1817 template<class Expr, class T, class M>
1818 inline
1819 field_nonlinear_expr<
1820  field_nonlinear_expr_bf<
1821  detail_nonlinear_expr::multiplies
1822  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
1823  ,field_expr_terminal_field<T,M>
1824  >
1825  >
1827 {
1829  typedef field_expr_terminal_field<T,M> arg2_t;
1831  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1832 }
1833 template<class Function, class T, class M>
1834 inline
1835 field_nonlinear_expr<
1836  field_nonlinear_expr_bf<
1837  detail_nonlinear_expr::multiplies
1838  ,field_expr_terminal_field<T,M>
1839  ,field_expr_terminal_function<Function>
1840  >
1841  >
1843 {
1844  typedef field_expr_terminal_field<T,M> arg1_t;
1847  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), y));
1848 }
1849 template<class Function, class T, class M>
1850 inline
1851 field_nonlinear_expr<
1852  field_nonlinear_expr_bf<
1853  detail_nonlinear_expr::multiplies
1854  ,field_expr_terminal_function<Function>
1855  ,field_expr_terminal_field<T,M>
1856  >
1857  >
1859 {
1861  typedef field_expr_terminal_field<T,M> arg2_t;
1863  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), x, arg2_t(y)));
1864 }
1865 template<class Expr, class T, class M>
1866 inline
1867 field_nonlinear_expr<
1868  field_nonlinear_expr_bf<
1869  detail_nonlinear_expr::multiplies
1870  ,field_nonlinear_expr<Expr>
1871  ,field_expr_terminal_field<T,M>
1872  >
1873  >
1875 {
1876  typedef field_nonlinear_expr<Expr> arg1_t;
1877  typedef field_expr_terminal_field<T,M> arg2_t;
1879  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), x, arg2_t(y)));
1880 }
1881 template<class Expr, class T, class M>
1882 inline
1883 field_nonlinear_expr<
1884  field_nonlinear_expr_bf<
1885  detail_nonlinear_expr::multiplies
1886  ,field_expr_terminal_field<T,M>
1887  ,field_nonlinear_expr<Expr>
1888  >
1889  >
1891 {
1892  typedef field_expr_terminal_field<T,M> arg1_t;
1893  typedef field_nonlinear_expr<Expr> arg2_t;
1895  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), y));
1896 }
1897 template<class Expr, class T, class M>
1898 inline
1899 field_nonlinear_expr<
1900  field_nonlinear_expr_bf<
1901  detail_nonlinear_expr::multiplies
1902  ,field_expr_terminal_field<T,M>
1903  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
1904  >
1905  >
1907 {
1908  typedef field_expr_terminal_field<T,M> arg1_t;
1911  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1912 }
1913 template<class Expr, class T, class M>
1914 inline
1915 field_nonlinear_expr<
1916  field_nonlinear_expr_bf<
1917  detail_nonlinear_expr::multiplies
1918  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
1919  ,field_expr_terminal_field<T,M>
1920  >
1921  >
1923 {
1925  typedef field_expr_terminal_field<T,M> arg2_t;
1927  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
1928 }
1929 template<class Function, class T, class M>
1930 inline
1931 field_nonlinear_expr<
1932  field_nonlinear_expr_bf<
1933  detail_nonlinear_expr::multiplies
1934  ,field_expr_terminal_field<T,M>
1935  ,field_expr_terminal_function<Function>
1936  >
1937  >
1939 {
1940  typedef field_expr_terminal_field<T,M> arg1_t;
1943  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), y));
1944 }
1945 template<class Function, class T, class M>
1946 inline
1947 field_nonlinear_expr<
1948  field_nonlinear_expr_bf<
1949  detail_nonlinear_expr::multiplies
1950  ,field_expr_terminal_function<Function>
1951  ,field_expr_terminal_field<T,M>
1952  >
1953  >
1955 {
1957  typedef field_expr_terminal_field<T,M> arg2_t;
1959  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), x, arg2_t(y)));
1960 }
1961 template<class Expr, class T, class M>
1962 inline
1963 field_nonlinear_expr<
1964  field_nonlinear_expr_bf<
1965  detail_nonlinear_expr::multiplies
1966  ,field_nonlinear_expr<Expr>
1967  ,field_expr_terminal_field<T,M>
1968  >
1969  >
1971 {
1972  typedef field_nonlinear_expr<Expr> arg1_t;
1973  typedef field_expr_terminal_field<T,M> arg2_t;
1975  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), x, arg2_t(y)));
1976 }
1977 template<class Expr, class T, class M>
1978 inline
1979 field_nonlinear_expr<
1980  field_nonlinear_expr_bf<
1981  detail_nonlinear_expr::multiplies
1982  ,field_expr_terminal_field<T,M>
1983  ,field_nonlinear_expr<Expr>
1984  >
1985  >
1987 {
1988  typedef field_expr_terminal_field<T,M> arg1_t;
1989  typedef field_nonlinear_expr<Expr> arg2_t;
1991  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), y));
1992 }
1993 template<class Expr, class T, class M>
1994 inline
1995 field_nonlinear_expr<
1996  field_nonlinear_expr_bf<
1997  detail_nonlinear_expr::multiplies
1998  ,field_expr_terminal_field<T,M>
1999  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
2000  >
2001  >
2003 {
2004  typedef field_expr_terminal_field<T,M> arg1_t;
2007  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
2008 }
2009 template<class Expr, class T, class M>
2010 inline
2011 field_nonlinear_expr<
2012  field_nonlinear_expr_bf<
2013  detail_nonlinear_expr::multiplies
2014  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
2015  ,field_expr_terminal_field<T,M>
2016  >
2017  >
2019 {
2021  typedef field_expr_terminal_field<T,M> arg2_t;
2023  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
2024 }
2025 template<class Function, class T, class M>
2026 inline
2027 field_nonlinear_expr<
2028  field_nonlinear_expr_bf<
2029  detail_nonlinear_expr::multiplies
2030  ,field_expr_terminal_field<T,M>
2031  ,field_expr_terminal_function<Function>
2032  >
2033  >
2035 {
2036  typedef field_expr_terminal_field<T,M> arg1_t;
2039  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), y));
2040 }
2041 template<class Function, class T, class M>
2042 inline
2043 field_nonlinear_expr<
2044  field_nonlinear_expr_bf<
2045  detail_nonlinear_expr::multiplies
2046  ,field_expr_terminal_function<Function>
2047  ,field_expr_terminal_field<T,M>
2048  >
2049  >
2051 {
2053  typedef field_expr_terminal_field<T,M> arg2_t;
2055  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), x, arg2_t(y)));
2056 }
2057 template<class Expr, class T, class M>
2058 inline
2059 field_nonlinear_expr<
2060  field_nonlinear_expr_bf<
2061  detail_nonlinear_expr::multiplies
2062  ,field_nonlinear_expr<Expr>
2063  ,field_expr_terminal_field<T,M>
2064  >
2065  >
2067 {
2068  typedef field_nonlinear_expr<Expr> arg1_t;
2069  typedef field_expr_terminal_field<T,M> arg2_t;
2071  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), x, arg2_t(y)));
2072 }
2073 template<class Expr, class T, class M>
2074 inline
2075 field_nonlinear_expr<
2076  field_nonlinear_expr_bf<
2077  detail_nonlinear_expr::multiplies
2078  ,field_expr_terminal_field<T,M>
2079  ,field_nonlinear_expr<Expr>
2080  >
2081  >
2083 {
2084  typedef field_expr_terminal_field<T,M> arg1_t;
2085  typedef field_nonlinear_expr<Expr> arg2_t;
2087  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), y));
2088 }
2089 template<class Expr, class T, class M>
2090 inline
2091 field_nonlinear_expr<
2092  field_nonlinear_expr_bf<
2093  detail_nonlinear_expr::multiplies
2094  ,field_expr_terminal_field<T,M>
2095  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
2096  >
2097  >
2099 {
2100  typedef field_expr_terminal_field<T,M> arg1_t;
2103  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
2104 }
2105 template<class Expr, class T, class M>
2106 inline
2107 field_nonlinear_expr<
2108  field_nonlinear_expr_bf<
2109  detail_nonlinear_expr::multiplies
2110  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
2111  ,field_expr_terminal_field<T,M>
2112  >
2113  >
2115 {
2117  typedef field_expr_terminal_field<T,M> arg2_t;
2119  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
2120 }
2121 template<class Function, class T, class M>
2122 inline
2123 field_nonlinear_expr<
2124  field_nonlinear_expr_bf<
2125  detail_nonlinear_expr::multiplies
2126  ,field_expr_terminal_field<T,M>
2127  ,field_expr_terminal_function<Function>
2128  >
2129  >
2131 {
2132  typedef field_expr_terminal_field<T,M> arg1_t;
2135  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), y));
2136 }
2137 template<class Function, class T, class M>
2138 inline
2139 field_nonlinear_expr<
2140  field_nonlinear_expr_bf<
2141  detail_nonlinear_expr::multiplies
2142  ,field_expr_terminal_function<Function>
2143  ,field_expr_terminal_field<T,M>
2144  >
2145  >
2147 {
2149  typedef field_expr_terminal_field<T,M> arg2_t;
2151  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), x, arg2_t(y)));
2152 }
2153 template<class Expr, class T, class M>
2154 inline
2155 field_nonlinear_expr<
2156  field_nonlinear_expr_bf<
2157  detail_nonlinear_expr::multiplies
2158  ,field_nonlinear_expr<Expr>
2159  ,field_expr_terminal_field<T,M>
2160  >
2161  >
2163 {
2164  typedef field_nonlinear_expr<Expr> arg1_t;
2165  typedef field_expr_terminal_field<T,M> arg2_t;
2167  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), x, arg2_t(y)));
2168 }
2169 template<class Expr, class T, class M>
2170 inline
2171 field_nonlinear_expr<
2172  field_nonlinear_expr_bf<
2173  detail_nonlinear_expr::multiplies
2174  ,field_expr_terminal_field<T,M>
2175  ,field_nonlinear_expr<Expr>
2176  >
2177  >
2179 {
2180  typedef field_expr_terminal_field<T,M> arg1_t;
2181  typedef field_nonlinear_expr<Expr> arg2_t;
2183  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), y));
2184 }
2185 template<class Expr1, class Expr2>
2186 inline
2187 field_nonlinear_expr<
2188  field_nonlinear_expr_bf<
2189  detail_nonlinear_expr::multiplies
2190  ,field_expr_terminal_field<typename field_expr<Expr1>::scalar_type, typename field_expr<Expr1>::memory_type>
2191  ,field_expr_terminal_field<typename field_expr<Expr2>::scalar_type, typename field_expr<Expr2>::memory_type>
2192  >
2193  >
2195 {
2199  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), arg2_t(y)));
2200 }
2201 template<class Expr, class Function>
2202 inline
2203 field_nonlinear_expr<
2204  field_nonlinear_expr_bf<
2205  detail_nonlinear_expr::multiplies
2206  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
2207  ,field_expr_terminal_function<Function>
2208  >
2209  >
2211 {
2215  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), y));
2216 }
2217 template<class Expr, class Function>
2218 inline
2219 field_nonlinear_expr<
2220  field_nonlinear_expr_bf<
2221  detail_nonlinear_expr::multiplies
2222  ,field_expr_terminal_function<Function>
2223  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
2224  >
2225  >
2227 {
2231  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), x, arg2_t(y)));
2232 }
2233 template<class Expr, class Function>
2234 inline
2235 field_nonlinear_expr<
2236  field_nonlinear_expr_bf<
2237  detail_nonlinear_expr::multiplies
2238  ,field_nonlinear_expr<Expr>
2239  ,field_expr_terminal_function<Function>
2240  >
2241  >
2243 {
2244  typedef field_nonlinear_expr<Expr> arg1_t;
2248 }
2249 template<class Expr, class Function>
2250 inline
2251 field_nonlinear_expr<
2252  field_nonlinear_expr_bf<
2253  detail_nonlinear_expr::multiplies
2254  ,field_expr_terminal_function<Function>
2255  ,field_nonlinear_expr<Expr>
2256  >
2257  >
2259 {
2261  typedef field_nonlinear_expr<Expr> arg2_t;
2264 }
2265 template<class Expr1, class Expr2>
2266 inline
2267 field_nonlinear_expr<
2268  field_nonlinear_expr_bf<
2269  detail_nonlinear_expr::multiplies
2270  ,field_expr_terminal_field<typename field_expr<Expr1>::scalar_type, typename field_expr<Expr1>::memory_type>
2271  ,field_nonlinear_expr<Expr2>
2272  >
2273  >
2275 {
2277  typedef field_nonlinear_expr<Expr2> arg2_t;
2279  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), arg1_t(x), y));
2280 }
2281 template<class Expr1, class Expr2>
2282 inline
2283 field_nonlinear_expr<
2284  field_nonlinear_expr_bf<
2285  detail_nonlinear_expr::multiplies
2286  ,field_nonlinear_expr<Expr1>
2287  ,field_expr_terminal_field<typename field_expr<Expr2>::scalar_type, typename field_expr<Expr2>::memory_type>
2288  >
2289  >
2291 {
2292  typedef field_nonlinear_expr<Expr1> arg1_t;
2295  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::multiplies(), x, arg2_t(y)));
2296 }
2297 template<class Function1, class Function2>
2298 inline
2299 field_nonlinear_expr<
2300  field_nonlinear_expr_bf<
2301  detail_nonlinear_expr::multiplies
2302  ,field_expr_terminal_function<Function1>
2303  ,field_expr_terminal_function<Function2>
2304  >
2305  >
2307 {
2312 }
2313 template<class Expr1, class Expr2>
2314 inline
2315 field_nonlinear_expr<
2316  field_nonlinear_expr_bf<
2317  detail_nonlinear_expr::multiplies
2318  ,field_nonlinear_expr<Expr1>
2319  ,field_nonlinear_expr<Expr2>
2320  >
2321  >
2323 {
2324  typedef field_nonlinear_expr<Expr1> arg1_t;
2325  typedef field_nonlinear_expr<Expr2> arg2_t;
2328 }
2329 namespace detail_nonlinear_expr {
2330  template <class T1, class T2>
2333  };
2334  template <class T>
2335  struct divides_result<T,T> {
2336  typedef T type;
2337  };
2338  template <class T>
2341  };
2342  template <class T>
2345  };
2346  struct divides {
2347  template <class T1, class T2>
2349  operator() (const T1& a, const T2& b) const { return a/b; }
2350  };
2351 } // namepace detail_nonlinear_expr
2352 template<>
2353 struct generic_binary_traits<detail_nonlinear_expr::divides> {
2354  template<class Result>
2355  struct with {
2356  typedef Result result_type;
2361  };
2362  template <class Arg1, class Arg2>
2363  struct result_hint {
2365  };
2368  return space_constant::divides_result_tag(tag1,tag2);
2369  }
2370 };
2371 template<class T, class M>
2372 inline
2373 field_nonlinear_expr<
2374  field_nonlinear_expr_uf<
2375  std::binder1st<std::divides<typename field_basic<T,M>::scalar_type> >
2376  ,field_expr_terminal_field<T,M>
2377  >
2378 >
2380 {
2381  typedef typename field_basic<T,M>::scalar_type scalar_t;
2382  typedef std::binder1st<std::divides<scalar_t> > fun_t;
2383  typedef field_expr_terminal_field<T,M> arg_t;
2385  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::divides<scalar_t>(), x), arg_t(y)));
2386 }
2387 template<class T, class M>
2388 inline
2389 field_nonlinear_expr<
2390  field_nonlinear_expr_uf<
2391  std::binder1st<std::divides<typename field_indirect<T,M>::scalar_type> >
2392  ,field_expr_terminal_field<T,M>
2393  >
2394 >
2396 {
2397  typedef typename field_indirect<T,M>::scalar_type scalar_t;
2398  typedef std::binder1st<std::divides<scalar_t> > fun_t;
2399  typedef field_expr_terminal_field<T,M> arg_t;
2401  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::divides<scalar_t>(), x), arg_t(y)));
2402 }
2403 template<class T, class M>
2404 inline
2405 field_nonlinear_expr<
2406  field_nonlinear_expr_uf<
2407  std::binder1st<std::divides<typename field_indirect_const<T,M>::scalar_type> >
2408  ,field_expr_terminal_field<T,M>
2409  >
2410 >
2412 {
2413  typedef typename field_indirect_const<T,M>::scalar_type scalar_t;
2414  typedef std::binder1st<std::divides<scalar_t> > fun_t;
2415  typedef field_expr_terminal_field<T,M> arg_t;
2417  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::divides<scalar_t>(), x), arg_t(y)));
2418 }
2419 template<class T, class M>
2420 inline
2421 field_nonlinear_expr<
2422  field_nonlinear_expr_uf<
2423  std::binder1st<std::divides<typename field_component<T,M>::scalar_type> >
2424  ,field_expr_terminal_field<T,M>
2425  >
2426 >
2428 {
2429  typedef typename field_component<T,M>::scalar_type scalar_t;
2430  typedef std::binder1st<std::divides<scalar_t> > fun_t;
2431  typedef field_expr_terminal_field<T,M> arg_t;
2433  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::divides<scalar_t>(), x), arg_t(y)));
2434 }
2435 template<class T, class M>
2436 inline
2437 field_nonlinear_expr<
2438  field_nonlinear_expr_uf<
2439  std::binder1st<std::divides<typename field_component_const<T,M>::scalar_type> >
2440  ,field_expr_terminal_field<T,M>
2441  >
2442 >
2444 {
2445  typedef typename field_component_const<T,M>::scalar_type scalar_t;
2446  typedef std::binder1st<std::divides<scalar_t> > fun_t;
2447  typedef field_expr_terminal_field<T,M> arg_t;
2449  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::divides<scalar_t>(), x), arg_t(y)));
2450 }
2451 template<class Expr>
2452 inline
2453 field_nonlinear_expr<
2454  field_nonlinear_expr_uf<
2455  std::binder1st<std::divides<typename field_expr<Expr>::scalar_type> >
2456  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
2457  >
2458 >
2460 {
2461  typedef typename field_expr<Expr>::scalar_type scalar_t;
2462  typedef std::binder1st<std::divides<scalar_t> > fun_t;
2465  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::divides<scalar_t>(), x), arg_t(y)));
2466 }
2467 template<class Expr>
2468 inline
2469 field_nonlinear_expr<
2470  field_nonlinear_expr_uf<
2471  std::binder1st<std::divides<typename field_nonlinear_expr<Expr>::scalar_type> >
2472  ,field_nonlinear_expr<Expr>
2473  >
2474 >
2476 {
2477  typedef typename field_nonlinear_expr<Expr>::scalar_type scalar_t;
2478  typedef std::binder1st<std::divides<scalar_t> > fun_t;
2479  typedef field_nonlinear_expr<Expr> arg_t;
2481  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::divides<scalar_t>(), x), y));
2482 }
2483 template<class Function>
2484 inline
2485 field_nonlinear_expr<
2486  field_nonlinear_expr_uf<
2487  std::binder1st<std::divides<typename field_expr_terminal_function<Function>::scalar_type> >
2488  ,field_expr_terminal_function<Function>
2489  >
2490 >
2492 {
2493  typedef typename field_expr_terminal_function<Function>::scalar_type scalar_t;
2494  typedef std::binder1st<std::divides<scalar_t> > fun_t;
2497  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::divides<scalar_t>(), x), y));
2498 }
2499 template<class Expr>
2500 inline
2501 field_nonlinear_expr<
2502  field_nonlinear_expr_uf<
2503  std::binder2nd<std::divides<typename field_nonlinear_expr<Expr>::scalar_type> >
2504  ,field_nonlinear_expr<Expr>
2505  >
2506 >
2508 {
2509  typedef typename field_nonlinear_expr<Expr>::scalar_type scalar_t;
2510  typedef std::binder2nd<std::divides<scalar_t> > fun_t;
2511  typedef field_nonlinear_expr<Expr> arg_t;
2513  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::divides<scalar_t>(), y), x));
2514 }
2515 template<class Function>
2516 inline
2517 field_nonlinear_expr<
2518  field_nonlinear_expr_uf<
2519  std::binder2nd<std::divides<typename field_expr_terminal_function<Function>::scalar_type> >
2520  ,field_expr_terminal_function<Function>
2521  >
2522 >
2524 {
2525  typedef typename field_expr_terminal_function<Function>::scalar_type scalar_t;
2526  typedef std::binder2nd<std::divides<scalar_t> > fun_t;
2529  return field_nonlinear_expr<expr_t>(expr_t(fun_t(std::divides<scalar_t>(), y), x));
2530 }
2531 template<class T, class M>
2532 inline
2533 field_nonlinear_expr<
2534  field_nonlinear_expr_bf<
2535  detail_nonlinear_expr::divides
2536  ,field_expr_terminal_field<T,M>
2537  ,field_expr_terminal_field<T,M>
2538  >
2539  >
2541 {
2542  typedef field_expr_terminal_field<T,M> arg1_t;
2543  typedef field_expr_terminal_field<T,M> arg2_t;
2545  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2546 }
2547 template<class T, class M>
2548 inline
2549 field_nonlinear_expr<
2550  field_nonlinear_expr_bf<
2551  detail_nonlinear_expr::divides
2552  ,field_expr_terminal_field<T,M>
2553  ,field_expr_terminal_field<T,M>
2554  >
2555  >
2557 {
2558  typedef field_expr_terminal_field<T,M> arg1_t;
2559  typedef field_expr_terminal_field<T,M> arg2_t;
2561  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2562 }
2563 template<class T, class M>
2564 inline
2565 field_nonlinear_expr<
2566  field_nonlinear_expr_bf<
2567  detail_nonlinear_expr::divides
2568  ,field_expr_terminal_field<T,M>
2569  ,field_expr_terminal_field<T,M>
2570  >
2571  >
2573 {
2574  typedef field_expr_terminal_field<T,M> arg1_t;
2575  typedef field_expr_terminal_field<T,M> arg2_t;
2577  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2578 }
2579 template<class T, class M>
2580 inline
2581 field_nonlinear_expr<
2582  field_nonlinear_expr_bf<
2583  detail_nonlinear_expr::divides
2584  ,field_expr_terminal_field<T,M>
2585  ,field_expr_terminal_field<T,M>
2586  >
2587  >
2589 {
2590  typedef field_expr_terminal_field<T,M> arg1_t;
2591  typedef field_expr_terminal_field<T,M> arg2_t;
2593  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2594 }
2595 template<class T, class M>
2596 inline
2597 field_nonlinear_expr<
2598  field_nonlinear_expr_bf<
2599  detail_nonlinear_expr::divides
2600  ,field_expr_terminal_field<T,M>
2601  ,field_expr_terminal_field<T,M>
2602  >
2603  >
2605 {
2606  typedef field_expr_terminal_field<T,M> arg1_t;
2607  typedef field_expr_terminal_field<T,M> arg2_t;
2609  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2610 }
2611 template<class T, class M>
2612 inline
2613 field_nonlinear_expr<
2614  field_nonlinear_expr_bf<
2615  detail_nonlinear_expr::divides
2616  ,field_expr_terminal_field<T,M>
2617  ,field_expr_terminal_field<T,M>
2618  >
2619  >
2621 {
2622  typedef field_expr_terminal_field<T,M> arg1_t;
2623  typedef field_expr_terminal_field<T,M> arg2_t;
2625  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2626 }
2627 template<class T, class M>
2628 inline
2629 field_nonlinear_expr<
2630  field_nonlinear_expr_bf<
2631  detail_nonlinear_expr::divides
2632  ,field_expr_terminal_field<T,M>
2633  ,field_expr_terminal_field<T,M>
2634  >
2635  >
2637 {
2638  typedef field_expr_terminal_field<T,M> arg1_t;
2639  typedef field_expr_terminal_field<T,M> arg2_t;
2641  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2642 }
2643 template<class T, class M>
2644 inline
2645 field_nonlinear_expr<
2646  field_nonlinear_expr_bf<
2647  detail_nonlinear_expr::divides
2648  ,field_expr_terminal_field<T,M>
2649  ,field_expr_terminal_field<T,M>
2650  >
2651  >
2653 {
2654  typedef field_expr_terminal_field<T,M> arg1_t;
2655  typedef field_expr_terminal_field<T,M> arg2_t;
2657  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2658 }
2659 template<class T, class M>
2660 inline
2661 field_nonlinear_expr<
2662  field_nonlinear_expr_bf<
2663  detail_nonlinear_expr::divides
2664  ,field_expr_terminal_field<T,M>
2665  ,field_expr_terminal_field<T,M>
2666  >
2667  >
2669 {
2670  typedef field_expr_terminal_field<T,M> arg1_t;
2671  typedef field_expr_terminal_field<T,M> arg2_t;
2673  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2674 }
2675 template<class T, class M>
2676 inline
2677 field_nonlinear_expr<
2678  field_nonlinear_expr_bf<
2679  detail_nonlinear_expr::divides
2680  ,field_expr_terminal_field<T,M>
2681  ,field_expr_terminal_field<T,M>
2682  >
2683  >
2685 {
2686  typedef field_expr_terminal_field<T,M> arg1_t;
2687  typedef field_expr_terminal_field<T,M> arg2_t;
2689  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2690 }
2691 template<class T, class M>
2692 inline
2693 field_nonlinear_expr<
2694  field_nonlinear_expr_bf<
2695  detail_nonlinear_expr::divides
2696  ,field_expr_terminal_field<T,M>
2697  ,field_expr_terminal_field<T,M>
2698  >
2699  >
2701 {
2702  typedef field_expr_terminal_field<T,M> arg1_t;
2703  typedef field_expr_terminal_field<T,M> arg2_t;
2705  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2706 }
2707 template<class T, class M>
2708 inline
2709 field_nonlinear_expr<
2710  field_nonlinear_expr_bf<
2711  detail_nonlinear_expr::divides
2712  ,field_expr_terminal_field<T,M>
2713  ,field_expr_terminal_field<T,M>
2714  >
2715  >
2717 {
2718  typedef field_expr_terminal_field<T,M> arg1_t;
2719  typedef field_expr_terminal_field<T,M> arg2_t;
2721  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2722 }
2723 template<class T, class M>
2724 inline
2725 field_nonlinear_expr<
2726  field_nonlinear_expr_bf<
2727  detail_nonlinear_expr::divides
2728  ,field_expr_terminal_field<T,M>
2729  ,field_expr_terminal_field<T,M>
2730  >
2731  >
2733 {
2734  typedef field_expr_terminal_field<T,M> arg1_t;
2735  typedef field_expr_terminal_field<T,M> arg2_t;
2737  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2738 }
2739 template<class T, class M>
2740 inline
2741 field_nonlinear_expr<
2742  field_nonlinear_expr_bf<
2743  detail_nonlinear_expr::divides
2744  ,field_expr_terminal_field<T,M>
2745  ,field_expr_terminal_field<T,M>
2746  >
2747  >
2749 {
2750  typedef field_expr_terminal_field<T,M> arg1_t;
2751  typedef field_expr_terminal_field<T,M> arg2_t;
2753  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2754 }
2755 template<class T, class M>
2756 inline
2757 field_nonlinear_expr<
2758  field_nonlinear_expr_bf<
2759  detail_nonlinear_expr::divides
2760  ,field_expr_terminal_field<T,M>
2761  ,field_expr_terminal_field<T,M>
2762  >
2763  >
2765 {
2766  typedef field_expr_terminal_field<T,M> arg1_t;
2767  typedef field_expr_terminal_field<T,M> arg2_t;
2769  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2770 }
2771 template<class T, class M>
2772 inline
2773 field_nonlinear_expr<
2774  field_nonlinear_expr_bf<
2775  detail_nonlinear_expr::divides
2776  ,field_expr_terminal_field<T,M>
2777  ,field_expr_terminal_field<T,M>
2778  >
2779  >
2781 {
2782  typedef field_expr_terminal_field<T,M> arg1_t;
2783  typedef field_expr_terminal_field<T,M> arg2_t;
2785  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2786 }
2787 template<class T, class M>
2788 inline
2789 field_nonlinear_expr<
2790  field_nonlinear_expr_bf<
2791  detail_nonlinear_expr::divides
2792  ,field_expr_terminal_field<T,M>
2793  ,field_expr_terminal_field<T,M>
2794  >
2795  >
2797 {
2798  typedef field_expr_terminal_field<T,M> arg1_t;
2799  typedef field_expr_terminal_field<T,M> arg2_t;
2801  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2802 }
2803 template<class T, class M>
2804 inline
2805 field_nonlinear_expr<
2806  field_nonlinear_expr_bf<
2807  detail_nonlinear_expr::divides
2808  ,field_expr_terminal_field<T,M>
2809  ,field_expr_terminal_field<T,M>
2810  >
2811  >
2813 {
2814  typedef field_expr_terminal_field<T,M> arg1_t;
2815  typedef field_expr_terminal_field<T,M> arg2_t;
2817  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2818 }
2819 template<class T, class M>
2820 inline
2821 field_nonlinear_expr<
2822  field_nonlinear_expr_bf<
2823  detail_nonlinear_expr::divides
2824  ,field_expr_terminal_field<T,M>
2825  ,field_expr_terminal_field<T,M>
2826  >
2827  >
2829 {
2830  typedef field_expr_terminal_field<T,M> arg1_t;
2831  typedef field_expr_terminal_field<T,M> arg2_t;
2833  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2834 }
2835 template<class T, class M>
2836 inline
2837 field_nonlinear_expr<
2838  field_nonlinear_expr_bf<
2839  detail_nonlinear_expr::divides
2840  ,field_expr_terminal_field<T,M>
2841  ,field_expr_terminal_field<T,M>
2842  >
2843  >
2845 {
2846  typedef field_expr_terminal_field<T,M> arg1_t;
2847  typedef field_expr_terminal_field<T,M> arg2_t;
2849  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2850 }
2851 template<class T, class M>
2852 inline
2853 field_nonlinear_expr<
2854  field_nonlinear_expr_bf<
2855  detail_nonlinear_expr::divides
2856  ,field_expr_terminal_field<T,M>
2857  ,field_expr_terminal_field<T,M>
2858  >
2859  >
2861 {
2862  typedef field_expr_terminal_field<T,M> arg1_t;
2863  typedef field_expr_terminal_field<T,M> arg2_t;
2865  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2866 }
2867 template<class T, class M>
2868 inline
2869 field_nonlinear_expr<
2870  field_nonlinear_expr_bf<
2871  detail_nonlinear_expr::divides
2872  ,field_expr_terminal_field<T,M>
2873  ,field_expr_terminal_field<T,M>
2874  >
2875  >
2877 {
2878  typedef field_expr_terminal_field<T,M> arg1_t;
2879  typedef field_expr_terminal_field<T,M> arg2_t;
2881  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2882 }
2883 template<class T, class M>
2884 inline
2885 field_nonlinear_expr<
2886  field_nonlinear_expr_bf<
2887  detail_nonlinear_expr::divides
2888  ,field_expr_terminal_field<T,M>
2889  ,field_expr_terminal_field<T,M>
2890  >
2891  >
2893 {
2894  typedef field_expr_terminal_field<T,M> arg1_t;
2895  typedef field_expr_terminal_field<T,M> arg2_t;
2897  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2898 }
2899 template<class T, class M>
2900 inline
2901 field_nonlinear_expr<
2902  field_nonlinear_expr_bf<
2903  detail_nonlinear_expr::divides
2904  ,field_expr_terminal_field<T,M>
2905  ,field_expr_terminal_field<T,M>
2906  >
2907  >
2909 {
2910  typedef field_expr_terminal_field<T,M> arg1_t;
2911  typedef field_expr_terminal_field<T,M> arg2_t;
2913  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2914 }
2915 template<class T, class M>
2916 inline
2917 field_nonlinear_expr<
2918  field_nonlinear_expr_bf<
2919  detail_nonlinear_expr::divides
2920  ,field_expr_terminal_field<T,M>
2921  ,field_expr_terminal_field<T,M>
2922  >
2923  >
2925 {
2926  typedef field_expr_terminal_field<T,M> arg1_t;
2927  typedef field_expr_terminal_field<T,M> arg2_t;
2929  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2930 }
2931 template<class Expr, class T, class M>
2932 inline
2933 field_nonlinear_expr<
2934  field_nonlinear_expr_bf<
2935  detail_nonlinear_expr::divides
2936  ,field_expr_terminal_field<T,M>
2937  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
2938  >
2939  >
2941 {
2942  typedef field_expr_terminal_field<T,M> arg1_t;
2945  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2946 }
2947 template<class Expr, class T, class M>
2948 inline
2949 field_nonlinear_expr<
2950  field_nonlinear_expr_bf<
2951  detail_nonlinear_expr::divides
2952  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
2953  ,field_expr_terminal_field<T,M>
2954  >
2955  >
2957 {
2959  typedef field_expr_terminal_field<T,M> arg2_t;
2961  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
2962 }
2963 template<class Function, class T, class M>
2964 inline
2965 field_nonlinear_expr<
2966  field_nonlinear_expr_bf<
2967  detail_nonlinear_expr::divides
2968  ,field_expr_terminal_field<T,M>
2969  ,field_expr_terminal_function<Function>
2970  >
2971  >
2973 {
2974  typedef field_expr_terminal_field<T,M> arg1_t;
2977  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), y));
2978 }
2979 template<class Function, class T, class M>
2980 inline
2981 field_nonlinear_expr<
2982  field_nonlinear_expr_bf<
2983  detail_nonlinear_expr::divides
2984  ,field_expr_terminal_function<Function>
2985  ,field_expr_terminal_field<T,M>
2986  >
2987  >
2989 {
2991  typedef field_expr_terminal_field<T,M> arg2_t;
2993  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), x, arg2_t(y)));
2994 }
2995 template<class Expr, class T, class M>
2996 inline
2997 field_nonlinear_expr<
2998  field_nonlinear_expr_bf<
2999  detail_nonlinear_expr::divides
3000  ,field_nonlinear_expr<Expr>
3001  ,field_expr_terminal_field<T,M>
3002  >
3003  >
3005 {
3006  typedef field_nonlinear_expr<Expr> arg1_t;
3007  typedef field_expr_terminal_field<T,M> arg2_t;
3009  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), x, arg2_t(y)));
3010 }
3011 template<class Expr, class T, class M>
3012 inline
3013 field_nonlinear_expr<
3014  field_nonlinear_expr_bf<
3015  detail_nonlinear_expr::divides
3016  ,field_expr_terminal_field<T,M>
3017  ,field_nonlinear_expr<Expr>
3018  >
3019  >
3021 {
3022  typedef field_expr_terminal_field<T,M> arg1_t;
3023  typedef field_nonlinear_expr<Expr> arg2_t;
3025  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), y));
3026 }
3027 template<class Expr, class T, class M>
3028 inline
3029 field_nonlinear_expr<
3030  field_nonlinear_expr_bf<
3031  detail_nonlinear_expr::divides
3032  ,field_expr_terminal_field<T,M>
3033  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3034  >
3035  >
3037 {
3038  typedef field_expr_terminal_field<T,M> arg1_t;
3041  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
3042 }
3043 template<class Expr, class T, class M>
3044 inline
3045 field_nonlinear_expr<
3046  field_nonlinear_expr_bf<
3047  detail_nonlinear_expr::divides
3048  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3049  ,field_expr_terminal_field<T,M>
3050  >
3051  >
3053 {
3055  typedef field_expr_terminal_field<T,M> arg2_t;
3057  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
3058 }
3059 template<class Function, class T, class M>
3060 inline
3061 field_nonlinear_expr<
3062  field_nonlinear_expr_bf<
3063  detail_nonlinear_expr::divides
3064  ,field_expr_terminal_field<T,M>
3065  ,field_expr_terminal_function<Function>
3066  >
3067  >
3069 {
3070  typedef field_expr_terminal_field<T,M> arg1_t;
3073  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), y));
3074 }
3075 template<class Function, class T, class M>
3076 inline
3077 field_nonlinear_expr<
3078  field_nonlinear_expr_bf<
3079  detail_nonlinear_expr::divides
3080  ,field_expr_terminal_function<Function>
3081  ,field_expr_terminal_field<T,M>
3082  >
3083  >
3085 {
3087  typedef field_expr_terminal_field<T,M> arg2_t;
3089  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), x, arg2_t(y)));
3090 }
3091 template<class Expr, class T, class M>
3092 inline
3093 field_nonlinear_expr<
3094  field_nonlinear_expr_bf<
3095  detail_nonlinear_expr::divides
3096  ,field_nonlinear_expr<Expr>
3097  ,field_expr_terminal_field<T,M>
3098  >
3099  >
3101 {
3102  typedef field_nonlinear_expr<Expr> arg1_t;
3103  typedef field_expr_terminal_field<T,M> arg2_t;
3105  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), x, arg2_t(y)));
3106 }
3107 template<class Expr, class T, class M>
3108 inline
3109 field_nonlinear_expr<
3110  field_nonlinear_expr_bf<
3111  detail_nonlinear_expr::divides
3112  ,field_expr_terminal_field<T,M>
3113  ,field_nonlinear_expr<Expr>
3114  >
3115  >
3117 {
3118  typedef field_expr_terminal_field<T,M> arg1_t;
3119  typedef field_nonlinear_expr<Expr> arg2_t;
3121  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), y));
3122 }
3123 template<class Expr, class T, class M>
3124 inline
3125 field_nonlinear_expr<
3126  field_nonlinear_expr_bf<
3127  detail_nonlinear_expr::divides
3128  ,field_expr_terminal_field<T,M>
3129  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3130  >
3131  >
3133 {
3134  typedef field_expr_terminal_field<T,M> arg1_t;
3137  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
3138 }
3139 template<class Expr, class T, class M>
3140 inline
3141 field_nonlinear_expr<
3142  field_nonlinear_expr_bf<
3143  detail_nonlinear_expr::divides
3144  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3145  ,field_expr_terminal_field<T,M>
3146  >
3147  >
3149 {
3151  typedef field_expr_terminal_field<T,M> arg2_t;
3153  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
3154 }
3155 template<class Function, class T, class M>
3156 inline
3157 field_nonlinear_expr<
3158  field_nonlinear_expr_bf<
3159  detail_nonlinear_expr::divides
3160  ,field_expr_terminal_field<T,M>
3161  ,field_expr_terminal_function<Function>
3162  >
3163  >
3165 {
3166  typedef field_expr_terminal_field<T,M> arg1_t;
3169  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), y));
3170 }
3171 template<class Function, class T, class M>
3172 inline
3173 field_nonlinear_expr<
3174  field_nonlinear_expr_bf<
3175  detail_nonlinear_expr::divides
3176  ,field_expr_terminal_function<Function>
3177  ,field_expr_terminal_field<T,M>
3178  >
3179  >
3181 {
3183  typedef field_expr_terminal_field<T,M> arg2_t;
3185  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), x, arg2_t(y)));
3186 }
3187 template<class Expr, class T, class M>
3188 inline
3189 field_nonlinear_expr<
3190  field_nonlinear_expr_bf<
3191  detail_nonlinear_expr::divides
3192  ,field_nonlinear_expr<Expr>
3193  ,field_expr_terminal_field<T,M>
3194  >
3195  >
3197 {
3198  typedef field_nonlinear_expr<Expr> arg1_t;
3199  typedef field_expr_terminal_field<T,M> arg2_t;
3201  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), x, arg2_t(y)));
3202 }
3203 template<class Expr, class T, class M>
3204 inline
3205 field_nonlinear_expr<
3206  field_nonlinear_expr_bf<
3207  detail_nonlinear_expr::divides
3208  ,field_expr_terminal_field<T,M>
3209  ,field_nonlinear_expr<Expr>
3210  >
3211  >
3213 {
3214  typedef field_expr_terminal_field<T,M> arg1_t;
3215  typedef field_nonlinear_expr<Expr> arg2_t;
3217  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), y));
3218 }
3219 template<class Expr, class T, class M>
3220 inline
3221 field_nonlinear_expr<
3222  field_nonlinear_expr_bf<
3223  detail_nonlinear_expr::divides
3224  ,field_expr_terminal_field<T,M>
3225  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3226  >
3227  >
3229 {
3230  typedef field_expr_terminal_field<T,M> arg1_t;
3233  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
3234 }
3235 template<class Expr, class T, class M>
3236 inline
3237 field_nonlinear_expr<
3238  field_nonlinear_expr_bf<
3239  detail_nonlinear_expr::divides
3240  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3241  ,field_expr_terminal_field<T,M>
3242  >
3243  >
3245 {
3247  typedef field_expr_terminal_field<T,M> arg2_t;
3249  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
3250 }
3251 template<class Function, class T, class M>
3252 inline
3253 field_nonlinear_expr<
3254  field_nonlinear_expr_bf<
3255  detail_nonlinear_expr::divides
3256  ,field_expr_terminal_field<T,M>
3257  ,field_expr_terminal_function<Function>
3258  >
3259  >
3261 {
3262  typedef field_expr_terminal_field<T,M> arg1_t;
3265  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), y));
3266 }
3267 template<class Function, class T, class M>
3268 inline
3269 field_nonlinear_expr<
3270  field_nonlinear_expr_bf<
3271  detail_nonlinear_expr::divides
3272  ,field_expr_terminal_function<Function>
3273  ,field_expr_terminal_field<T,M>
3274  >
3275  >
3277 {
3279  typedef field_expr_terminal_field<T,M> arg2_t;
3281  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), x, arg2_t(y)));
3282 }
3283 template<class Expr, class T, class M>
3284 inline
3285 field_nonlinear_expr<
3286  field_nonlinear_expr_bf<
3287  detail_nonlinear_expr::divides
3288  ,field_nonlinear_expr<Expr>
3289  ,field_expr_terminal_field<T,M>
3290  >
3291  >
3293 {
3294  typedef field_nonlinear_expr<Expr> arg1_t;
3295  typedef field_expr_terminal_field<T,M> arg2_t;
3297  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), x, arg2_t(y)));
3298 }
3299 template<class Expr, class T, class M>
3300 inline
3301 field_nonlinear_expr<
3302  field_nonlinear_expr_bf<
3303  detail_nonlinear_expr::divides
3304  ,field_expr_terminal_field<T,M>
3305  ,field_nonlinear_expr<Expr>
3306  >
3307  >
3309 {
3310  typedef field_expr_terminal_field<T,M> arg1_t;
3311  typedef field_nonlinear_expr<Expr> arg2_t;
3313  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), y));
3314 }
3315 template<class Expr, class T, class M>
3316 inline
3317 field_nonlinear_expr<
3318  field_nonlinear_expr_bf<
3319  detail_nonlinear_expr::divides
3320  ,field_expr_terminal_field<T,M>
3321  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3322  >
3323  >
3325 {
3326  typedef field_expr_terminal_field<T,M> arg1_t;
3329  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
3330 }
3331 template<class Expr, class T, class M>
3332 inline
3333 field_nonlinear_expr<
3334  field_nonlinear_expr_bf<
3335  detail_nonlinear_expr::divides
3336  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3337  ,field_expr_terminal_field<T,M>
3338  >
3339  >
3341 {
3343  typedef field_expr_terminal_field<T,M> arg2_t;
3345  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
3346 }
3347 template<class Function, class T, class M>
3348 inline
3349 field_nonlinear_expr<
3350  field_nonlinear_expr_bf<
3351  detail_nonlinear_expr::divides
3352  ,field_expr_terminal_field<T,M>
3353  ,field_expr_terminal_function<Function>
3354  >
3355  >
3357 {
3358  typedef field_expr_terminal_field<T,M> arg1_t;
3361  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), y));
3362 }
3363 template<class Function, class T, class M>
3364 inline
3365 field_nonlinear_expr<
3366  field_nonlinear_expr_bf<
3367  detail_nonlinear_expr::divides
3368  ,field_expr_terminal_function<Function>
3369  ,field_expr_terminal_field<T,M>
3370  >
3371  >
3373 {
3375  typedef field_expr_terminal_field<T,M> arg2_t;
3377  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), x, arg2_t(y)));
3378 }
3379 template<class Expr, class T, class M>
3380 inline
3381 field_nonlinear_expr<
3382  field_nonlinear_expr_bf<
3383  detail_nonlinear_expr::divides
3384  ,field_nonlinear_expr<Expr>
3385  ,field_expr_terminal_field<T,M>
3386  >
3387  >
3389 {
3390  typedef field_nonlinear_expr<Expr> arg1_t;
3391  typedef field_expr_terminal_field<T,M> arg2_t;
3393  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), x, arg2_t(y)));
3394 }
3395 template<class Expr, class T, class M>
3396 inline
3397 field_nonlinear_expr<
3398  field_nonlinear_expr_bf<
3399  detail_nonlinear_expr::divides
3400  ,field_expr_terminal_field<T,M>
3401  ,field_nonlinear_expr<Expr>
3402  >
3403  >
3405 {
3406  typedef field_expr_terminal_field<T,M> arg1_t;
3407  typedef field_nonlinear_expr<Expr> arg2_t;
3409  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), y));
3410 }
3411 template<class Expr1, class Expr2>
3412 inline
3413 field_nonlinear_expr<
3414  field_nonlinear_expr_bf<
3415  detail_nonlinear_expr::divides
3416  ,field_expr_terminal_field<typename field_expr<Expr1>::scalar_type, typename field_expr<Expr1>::memory_type>
3417  ,field_expr_terminal_field<typename field_expr<Expr2>::scalar_type, typename field_expr<Expr2>::memory_type>
3418  >
3419  >
3421 {
3425  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), arg2_t(y)));
3426 }
3427 template<class Expr, class Function>
3428 inline
3429 field_nonlinear_expr<
3430  field_nonlinear_expr_bf<
3431  detail_nonlinear_expr::divides
3432  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3433  ,field_expr_terminal_function<Function>
3434  >
3435  >
3437 {
3441  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), y));
3442 }
3443 template<class Expr, class Function>
3444 inline
3445 field_nonlinear_expr<
3446  field_nonlinear_expr_bf<
3447  detail_nonlinear_expr::divides
3448  ,field_expr_terminal_function<Function>
3449  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3450  >
3451  >
3453 {
3457  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), x, arg2_t(y)));
3458 }
3459 template<class Expr, class Function>
3460 inline
3461 field_nonlinear_expr<
3462  field_nonlinear_expr_bf<
3463  detail_nonlinear_expr::divides
3464  ,field_nonlinear_expr<Expr>
3465  ,field_expr_terminal_function<Function>
3466  >
3467  >
3469 {
3470  typedef field_nonlinear_expr<Expr> arg1_t;
3474 }
3475 template<class Expr, class Function>
3476 inline
3477 field_nonlinear_expr<
3478  field_nonlinear_expr_bf<
3479  detail_nonlinear_expr::divides
3480  ,field_expr_terminal_function<Function>
3481  ,field_nonlinear_expr<Expr>
3482  >
3483  >
3485 {
3487  typedef field_nonlinear_expr<Expr> arg2_t;
3490 }
3491 template<class Expr1, class Expr2>
3492 inline
3493 field_nonlinear_expr<
3494  field_nonlinear_expr_bf<
3495  detail_nonlinear_expr::divides
3496  ,field_expr_terminal_field<typename field_expr<Expr1>::scalar_type, typename field_expr<Expr1>::memory_type>
3497  ,field_nonlinear_expr<Expr2>
3498  >
3499  >
3501 {
3503  typedef field_nonlinear_expr<Expr2> arg2_t;
3505  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), arg1_t(x), y));
3506 }
3507 template<class Expr1, class Expr2>
3508 inline
3509 field_nonlinear_expr<
3510  field_nonlinear_expr_bf<
3511  detail_nonlinear_expr::divides
3512  ,field_nonlinear_expr<Expr1>
3513  ,field_expr_terminal_field<typename field_expr<Expr2>::scalar_type, typename field_expr<Expr2>::memory_type>
3514  >
3515  >
3517 {
3518  typedef field_nonlinear_expr<Expr1> arg1_t;
3521  return field_nonlinear_expr<expr_t>(expr_t(detail_nonlinear_expr::divides(), x, arg2_t(y)));
3522 }
3523 template<class Function1, class Function2>
3524 inline
3525 field_nonlinear_expr<
3526  field_nonlinear_expr_bf<
3527  detail_nonlinear_expr::divides
3528  ,field_expr_terminal_function<Function1>
3529  ,field_expr_terminal_function<Function2>
3530  >
3531  >
3533 {
3538 }
3539 template<class Expr1, class Expr2>
3540 inline
3541 field_nonlinear_expr<
3542  field_nonlinear_expr_bf<
3543  detail_nonlinear_expr::divides
3544  ,field_nonlinear_expr<Expr1>
3545  ,field_nonlinear_expr<Expr2>
3546  >
3547  >
3549 {
3550  typedef field_nonlinear_expr<Expr1> arg1_t;
3551  typedef field_nonlinear_expr<Expr2> arg2_t;
3554 }
3555 namespace detail_nonlinear_expr {
3556  template<class T>
3557  struct cos_ : std::unary_function<T,T> {
3558  T operator() (const T& x) const { return cos(x); }
3559  };
3560 } // namespace detail_nonlinear_expr
3561 template<class T, class M>
3562 inline
3563 field_nonlinear_expr<
3564  field_nonlinear_expr_uf<
3565  detail_nonlinear_expr::cos_<typename field_basic<T,M>::scalar_type>
3566  ,field_expr_terminal_field<T,M>
3567  >
3568 >
3569 cos (const field_basic<T,M>& x) {
3571  typedef field_expr_terminal_field<T,M> arg_t;
3572  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3573  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3574 }
3575 template<class T, class M>
3576 inline
3577 field_nonlinear_expr<
3578  field_nonlinear_expr_uf<
3579  detail_nonlinear_expr::cos_<typename field_indirect<T,M>::scalar_type>
3580  ,field_expr_terminal_field<T,M>
3581  >
3582 >
3585  typedef field_expr_terminal_field<T,M> arg_t;
3586  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3587  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3588 }
3589 template<class T, class M>
3590 inline
3591 field_nonlinear_expr<
3592  field_nonlinear_expr_uf<
3593  detail_nonlinear_expr::cos_<typename field_indirect_const<T,M>::scalar_type>
3594  ,field_expr_terminal_field<T,M>
3595  >
3596 >
3599  typedef field_expr_terminal_field<T,M> arg_t;
3600  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3601  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3602 }
3603 template<class T, class M>
3604 inline
3605 field_nonlinear_expr<
3606  field_nonlinear_expr_uf<
3607  detail_nonlinear_expr::cos_<typename field_component<T,M>::scalar_type>
3608  ,field_expr_terminal_field<T,M>
3609  >
3610 >
3613  typedef field_expr_terminal_field<T,M> arg_t;
3614  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3615  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3616 }
3617 template<class T, class M>
3618 inline
3619 field_nonlinear_expr<
3620  field_nonlinear_expr_uf<
3621  detail_nonlinear_expr::cos_<typename field_component_const<T,M>::scalar_type>
3622  ,field_expr_terminal_field<T,M>
3623  >
3624 >
3627  typedef field_expr_terminal_field<T,M> arg_t;
3628  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3629  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3630 }
3631 template<class Expr>
3632 inline
3633 field_nonlinear_expr<
3634  field_nonlinear_expr_uf<
3635  detail_nonlinear_expr::cos_<typename field_expr<Expr>::scalar_type>
3636  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3637  >
3638 >
3639 cos (const field_expr<Expr>& x) {
3642  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3643  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3644 }
3645 template<class Expr>
3646 inline
3647 field_nonlinear_expr<
3648  field_nonlinear_expr_uf<
3649  detail_nonlinear_expr::cos_<typename field_nonlinear_expr<Expr>::scalar_type>
3650  ,field_nonlinear_expr<Expr>
3651  >
3652 >
3655  typedef field_nonlinear_expr<Expr> arg_t;
3656  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3657  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
3658 }
3659 namespace detail_nonlinear_expr {
3660  template<class T>
3661  struct sin_ : std::unary_function<T,T> {
3662  T operator() (const T& x) const { return sin(x); }
3663  };
3664 } // namespace detail_nonlinear_expr
3665 template<class T, class M>
3666 inline
3667 field_nonlinear_expr<
3668  field_nonlinear_expr_uf<
3669  detail_nonlinear_expr::sin_<typename field_basic<T,M>::scalar_type>
3670  ,field_expr_terminal_field<T,M>
3671  >
3672 >
3673 sin (const field_basic<T,M>& x) {
3675  typedef field_expr_terminal_field<T,M> arg_t;
3676  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3677  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3678 }
3679 template<class T, class M>
3680 inline
3681 field_nonlinear_expr<
3682  field_nonlinear_expr_uf<
3683  detail_nonlinear_expr::sin_<typename field_indirect<T,M>::scalar_type>
3684  ,field_expr_terminal_field<T,M>
3685  >
3686 >
3689  typedef field_expr_terminal_field<T,M> arg_t;
3690  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3691  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3692 }
3693 template<class T, class M>
3694 inline
3695 field_nonlinear_expr<
3696  field_nonlinear_expr_uf<
3697  detail_nonlinear_expr::sin_<typename field_indirect_const<T,M>::scalar_type>
3698  ,field_expr_terminal_field<T,M>
3699  >
3700 >
3703  typedef field_expr_terminal_field<T,M> arg_t;
3704  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3705  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3706 }
3707 template<class T, class M>
3708 inline
3709 field_nonlinear_expr<
3710  field_nonlinear_expr_uf<
3711  detail_nonlinear_expr::sin_<typename field_component<T,M>::scalar_type>
3712  ,field_expr_terminal_field<T,M>
3713  >
3714 >
3717  typedef field_expr_terminal_field<T,M> arg_t;
3718  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3719  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3720 }
3721 template<class T, class M>
3722 inline
3723 field_nonlinear_expr<
3724  field_nonlinear_expr_uf<
3725  detail_nonlinear_expr::sin_<typename field_component_const<T,M>::scalar_type>
3726  ,field_expr_terminal_field<T,M>
3727  >
3728 >
3731  typedef field_expr_terminal_field<T,M> arg_t;
3732  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3733  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3734 }
3735 template<class Expr>
3736 inline
3737 field_nonlinear_expr<
3738  field_nonlinear_expr_uf<
3739  detail_nonlinear_expr::sin_<typename field_expr<Expr>::scalar_type>
3740  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3741  >
3742 >
3743 sin (const field_expr<Expr>& x) {
3746  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3747  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3748 }
3749 template<class Expr>
3750 inline
3751 field_nonlinear_expr<
3752  field_nonlinear_expr_uf<
3753  detail_nonlinear_expr::sin_<typename field_nonlinear_expr<Expr>::scalar_type>
3754  ,field_nonlinear_expr<Expr>
3755  >
3756 >
3759  typedef field_nonlinear_expr<Expr> arg_t;
3760  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3761  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
3762 }
3763 namespace detail_nonlinear_expr {
3764  template<class T>
3765  struct tan_ : std::unary_function<T,T> {
3766  T operator() (const T& x) const { return tan(x); }
3767  };
3768 } // namespace detail_nonlinear_expr
3769 template<class T, class M>
3770 inline
3771 field_nonlinear_expr<
3772  field_nonlinear_expr_uf<
3773  detail_nonlinear_expr::tan_<typename field_basic<T,M>::scalar_type>
3774  ,field_expr_terminal_field<T,M>
3775  >
3776 >
3777 tan (const field_basic<T,M>& x) {
3779  typedef field_expr_terminal_field<T,M> arg_t;
3780  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3781  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3782 }
3783 template<class T, class M>
3784 inline
3785 field_nonlinear_expr<
3786  field_nonlinear_expr_uf<
3787  detail_nonlinear_expr::tan_<typename field_indirect<T,M>::scalar_type>
3788  ,field_expr_terminal_field<T,M>
3789  >
3790 >
3793  typedef field_expr_terminal_field<T,M> arg_t;
3794  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3795  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3796 }
3797 template<class T, class M>
3798 inline
3799 field_nonlinear_expr<
3800  field_nonlinear_expr_uf<
3801  detail_nonlinear_expr::tan_<typename field_indirect_const<T,M>::scalar_type>
3802  ,field_expr_terminal_field<T,M>
3803  >
3804 >
3807  typedef field_expr_terminal_field<T,M> arg_t;
3808  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3809  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3810 }
3811 template<class T, class M>
3812 inline
3813 field_nonlinear_expr<
3814  field_nonlinear_expr_uf<
3815  detail_nonlinear_expr::tan_<typename field_component<T,M>::scalar_type>
3816  ,field_expr_terminal_field<T,M>
3817  >
3818 >
3821  typedef field_expr_terminal_field<T,M> arg_t;
3822  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3823  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3824 }
3825 template<class T, class M>
3826 inline
3827 field_nonlinear_expr<
3828  field_nonlinear_expr_uf<
3829  detail_nonlinear_expr::tan_<typename field_component_const<T,M>::scalar_type>
3830  ,field_expr_terminal_field<T,M>
3831  >
3832 >
3835  typedef field_expr_terminal_field<T,M> arg_t;
3836  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3837  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3838 }
3839 template<class Expr>
3840 inline
3841 field_nonlinear_expr<
3842  field_nonlinear_expr_uf<
3843  detail_nonlinear_expr::tan_<typename field_expr<Expr>::scalar_type>
3844  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3845  >
3846 >
3847 tan (const field_expr<Expr>& x) {
3850  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3851  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3852 }
3853 template<class Expr>
3854 inline
3855 field_nonlinear_expr<
3856  field_nonlinear_expr_uf<
3857  detail_nonlinear_expr::tan_<typename field_nonlinear_expr<Expr>::scalar_type>
3858  ,field_nonlinear_expr<Expr>
3859  >
3860 >
3863  typedef field_nonlinear_expr<Expr> arg_t;
3864  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3865  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
3866 }
3867 namespace detail_nonlinear_expr {
3868  template<class T>
3869  struct acos_ : std::unary_function<T,T> {
3870  T operator() (const T& x) const { return acos(x); }
3871  };
3872 } // namespace detail_nonlinear_expr
3873 template<class T, class M>
3874 inline
3875 field_nonlinear_expr<
3876  field_nonlinear_expr_uf<
3877  detail_nonlinear_expr::acos_<typename field_basic<T,M>::scalar_type>
3878  ,field_expr_terminal_field<T,M>
3879  >
3880 >
3883  typedef field_expr_terminal_field<T,M> arg_t;
3884  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3885  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3886 }
3887 template<class T, class M>
3888 inline
3889 field_nonlinear_expr<
3890  field_nonlinear_expr_uf<
3891  detail_nonlinear_expr::acos_<typename field_indirect<T,M>::scalar_type>
3892  ,field_expr_terminal_field<T,M>
3893  >
3894 >
3897  typedef field_expr_terminal_field<T,M> arg_t;
3898  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3899  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3900 }
3901 template<class T, class M>
3902 inline
3903 field_nonlinear_expr<
3904  field_nonlinear_expr_uf<
3905  detail_nonlinear_expr::acos_<typename field_indirect_const<T,M>::scalar_type>
3906  ,field_expr_terminal_field<T,M>
3907  >
3908 >
3911  typedef field_expr_terminal_field<T,M> arg_t;
3912  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3913  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3914 }
3915 template<class T, class M>
3916 inline
3917 field_nonlinear_expr<
3918  field_nonlinear_expr_uf<
3919  detail_nonlinear_expr::acos_<typename field_component<T,M>::scalar_type>
3920  ,field_expr_terminal_field<T,M>
3921  >
3922 >
3925  typedef field_expr_terminal_field<T,M> arg_t;
3926  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3927  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3928 }
3929 template<class T, class M>
3930 inline
3931 field_nonlinear_expr<
3932  field_nonlinear_expr_uf<
3933  detail_nonlinear_expr::acos_<typename field_component_const<T,M>::scalar_type>
3934  ,field_expr_terminal_field<T,M>
3935  >
3936 >
3939  typedef field_expr_terminal_field<T,M> arg_t;
3940  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3941  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3942 }
3943 template<class Expr>
3944 inline
3945 field_nonlinear_expr<
3946  field_nonlinear_expr_uf<
3947  detail_nonlinear_expr::acos_<typename field_expr<Expr>::scalar_type>
3948  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
3949  >
3950 >
3954  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3955  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3956 }
3957 template<class Expr>
3958 inline
3959 field_nonlinear_expr<
3960  field_nonlinear_expr_uf<
3961  detail_nonlinear_expr::acos_<typename field_nonlinear_expr<Expr>::scalar_type>
3962  ,field_nonlinear_expr<Expr>
3963  >
3964 >
3967  typedef field_nonlinear_expr<Expr> arg_t;
3968  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3969  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
3970 }
3971 namespace detail_nonlinear_expr {
3972  template<class T>
3973  struct asin_ : std::unary_function<T,T> {
3974  T operator() (const T& x) const { return asin(x); }
3975  };
3976 } // namespace detail_nonlinear_expr
3977 template<class T, class M>
3978 inline
3979 field_nonlinear_expr<
3980  field_nonlinear_expr_uf<
3981  detail_nonlinear_expr::asin_<typename field_basic<T,M>::scalar_type>
3982  ,field_expr_terminal_field<T,M>
3983  >
3984 >
3987  typedef field_expr_terminal_field<T,M> arg_t;
3988  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
3989  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
3990 }
3991 template<class T, class M>
3992 inline
3993 field_nonlinear_expr<
3994  field_nonlinear_expr_uf<
3995  detail_nonlinear_expr::asin_<typename field_indirect<T,M>::scalar_type>
3996  ,field_expr_terminal_field<T,M>
3997  >
3998 >
4001  typedef field_expr_terminal_field<T,M> arg_t;
4002  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4003  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4004 }
4005 template<class T, class M>
4006 inline
4007 field_nonlinear_expr<
4008  field_nonlinear_expr_uf<
4009  detail_nonlinear_expr::asin_<typename field_indirect_const<T,M>::scalar_type>
4010  ,field_expr_terminal_field<T,M>
4011  >
4012 >
4015  typedef field_expr_terminal_field<T,M> arg_t;
4016  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4017  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4018 }
4019 template<class T, class M>
4020 inline
4021 field_nonlinear_expr<
4022  field_nonlinear_expr_uf<
4023  detail_nonlinear_expr::asin_<typename field_component<T,M>::scalar_type>
4024  ,field_expr_terminal_field<T,M>
4025  >
4026 >
4029  typedef field_expr_terminal_field<T,M> arg_t;
4030  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4031  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4032 }
4033 template<class T, class M>
4034 inline
4035 field_nonlinear_expr<
4036  field_nonlinear_expr_uf<
4037  detail_nonlinear_expr::asin_<typename field_component_const<T,M>::scalar_type>
4038  ,field_expr_terminal_field<T,M>
4039  >
4040 >
4043  typedef field_expr_terminal_field<T,M> arg_t;
4044  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4045  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4046 }
4047 template<class Expr>
4048 inline
4049 field_nonlinear_expr<
4050  field_nonlinear_expr_uf<
4051  detail_nonlinear_expr::asin_<typename field_expr<Expr>::scalar_type>
4052  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
4053  >
4054 >
4058  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4059  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4060 }
4061 template<class Expr>
4062 inline
4063 field_nonlinear_expr<
4064  field_nonlinear_expr_uf<
4065  detail_nonlinear_expr::asin_<typename field_nonlinear_expr<Expr>::scalar_type>
4066  ,field_nonlinear_expr<Expr>
4067  >
4068 >
4071  typedef field_nonlinear_expr<Expr> arg_t;
4072  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4073  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
4074 }
4075 namespace detail_nonlinear_expr {
4076  template<class T>
4077  struct atan_ : std::unary_function<T,T> {
4078  T operator() (const T& x) const { return atan(x); }
4079  };
4080 } // namespace detail_nonlinear_expr
4081 template<class T, class M>
4082 inline
4083 field_nonlinear_expr<
4084  field_nonlinear_expr_uf<
4085  detail_nonlinear_expr::atan_<typename field_basic<T,M>::scalar_type>
4086  ,field_expr_terminal_field<T,M>
4087  >
4088 >
4091  typedef field_expr_terminal_field<T,M> arg_t;
4092  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4093  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4094 }
4095 template<class T, class M>
4096 inline
4097 field_nonlinear_expr<
4098  field_nonlinear_expr_uf<
4099  detail_nonlinear_expr::atan_<typename field_indirect<T,M>::scalar_type>
4100  ,field_expr_terminal_field<T,M>
4101  >
4102 >
4105  typedef field_expr_terminal_field<T,M> arg_t;
4106  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4107  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4108 }
4109 template<class T, class M>
4110 inline
4111 field_nonlinear_expr<
4112  field_nonlinear_expr_uf<
4113  detail_nonlinear_expr::atan_<typename field_indirect_const<T,M>::scalar_type>
4114  ,field_expr_terminal_field<T,M>
4115  >
4116 >
4119  typedef field_expr_terminal_field<T,M> arg_t;
4120  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4121  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4122 }
4123 template<class T, class M>
4124 inline
4125 field_nonlinear_expr<
4126  field_nonlinear_expr_uf<
4127  detail_nonlinear_expr::atan_<typename field_component<T,M>::scalar_type>
4128  ,field_expr_terminal_field<T,M>
4129  >
4130 >
4133  typedef field_expr_terminal_field<T,M> arg_t;
4134  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4135  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4136 }
4137 template<class T, class M>
4138 inline
4139 field_nonlinear_expr<
4140  field_nonlinear_expr_uf<
4141  detail_nonlinear_expr::atan_<typename field_component_const<T,M>::scalar_type>
4142  ,field_expr_terminal_field<T,M>
4143  >
4144 >
4147  typedef field_expr_terminal_field<T,M> arg_t;
4148  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4149  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4150 }
4151 template<class Expr>
4152 inline
4153 field_nonlinear_expr<
4154  field_nonlinear_expr_uf<
4155  detail_nonlinear_expr::atan_<typename field_expr<Expr>::scalar_type>
4156  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
4157  >
4158 >
4162  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4163  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4164 }
4165 template<class Expr>
4166 inline
4167 field_nonlinear_expr<
4168  field_nonlinear_expr_uf<
4169  detail_nonlinear_expr::atan_<typename field_nonlinear_expr<Expr>::scalar_type>
4170  ,field_nonlinear_expr<Expr>
4171  >
4172 >
4175  typedef field_nonlinear_expr<Expr> arg_t;
4176  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4177  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
4178 }
4179 namespace detail_nonlinear_expr {
4180  template<class T>
4181  struct cosh_ : std::unary_function<T,T> {
4182  T operator() (const T& x) const { return cosh(x); }
4183  };
4184 } // namespace detail_nonlinear_expr
4185 template<class T, class M>
4186 inline
4187 field_nonlinear_expr<
4188  field_nonlinear_expr_uf<
4189  detail_nonlinear_expr::cosh_<typename field_basic<T,M>::scalar_type>
4190  ,field_expr_terminal_field<T,M>
4191  >
4192 >
4195  typedef field_expr_terminal_field<T,M> arg_t;
4196  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4197  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4198 }
4199 template<class T, class M>
4200 inline
4201 field_nonlinear_expr<
4202  field_nonlinear_expr_uf<
4203  detail_nonlinear_expr::cosh_<typename field_indirect<T,M>::scalar_type>
4204  ,field_expr_terminal_field<T,M>
4205  >
4206 >
4209  typedef field_expr_terminal_field<T,M> arg_t;
4210  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4211  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4212 }
4213 template<class T, class M>
4214 inline
4215 field_nonlinear_expr<
4216  field_nonlinear_expr_uf<
4217  detail_nonlinear_expr::cosh_<typename field_indirect_const<T,M>::scalar_type>
4218  ,field_expr_terminal_field<T,M>
4219  >
4220 >
4223  typedef field_expr_terminal_field<T,M> arg_t;
4224  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4225  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4226 }
4227 template<class T, class M>
4228 inline
4229 field_nonlinear_expr<
4230  field_nonlinear_expr_uf<
4231  detail_nonlinear_expr::cosh_<typename field_component<T,M>::scalar_type>
4232  ,field_expr_terminal_field<T,M>
4233  >
4234 >
4237  typedef field_expr_terminal_field<T,M> arg_t;
4238  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4239  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4240 }
4241 template<class T, class M>
4242 inline
4243 field_nonlinear_expr<
4244  field_nonlinear_expr_uf<
4245  detail_nonlinear_expr::cosh_<typename field_component_const<T,M>::scalar_type>
4246  ,field_expr_terminal_field<T,M>
4247  >
4248 >
4251  typedef field_expr_terminal_field<T,M> arg_t;
4252  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4253  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4254 }
4255 template<class Expr>
4256 inline
4257 field_nonlinear_expr<
4258  field_nonlinear_expr_uf<
4259  detail_nonlinear_expr::cosh_<typename field_expr<Expr>::scalar_type>
4260  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
4261  >
4262 >
4266  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4267  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4268 }
4269 template<class Expr>
4270 inline
4271 field_nonlinear_expr<
4272  field_nonlinear_expr_uf<
4273  detail_nonlinear_expr::cosh_<typename field_nonlinear_expr<Expr>::scalar_type>
4274  ,field_nonlinear_expr<Expr>
4275  >
4276 >
4279  typedef field_nonlinear_expr<Expr> arg_t;
4280  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4281  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
4282 }
4283 namespace detail_nonlinear_expr {
4284  template<class T>
4285  struct sinh_ : std::unary_function<T,T> {
4286  T operator() (const T& x) const { return sinh(x); }
4287  };
4288 } // namespace detail_nonlinear_expr
4289 template<class T, class M>
4290 inline
4291 field_nonlinear_expr<
4292  field_nonlinear_expr_uf<
4293  detail_nonlinear_expr::sinh_<typename field_basic<T,M>::scalar_type>
4294  ,field_expr_terminal_field<T,M>
4295  >
4296 >
4299  typedef field_expr_terminal_field<T,M> arg_t;
4300  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4301  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4302 }
4303 template<class T, class M>
4304 inline
4305 field_nonlinear_expr<
4306  field_nonlinear_expr_uf<
4307  detail_nonlinear_expr::sinh_<typename field_indirect<T,M>::scalar_type>
4308  ,field_expr_terminal_field<T,M>
4309  >
4310 >
4313  typedef field_expr_terminal_field<T,M> arg_t;
4314  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4315  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4316 }
4317 template<class T, class M>
4318 inline
4319 field_nonlinear_expr<
4320  field_nonlinear_expr_uf<
4321  detail_nonlinear_expr::sinh_<typename field_indirect_const<T,M>::scalar_type>
4322  ,field_expr_terminal_field<T,M>
4323  >
4324 >
4327  typedef field_expr_terminal_field<T,M> arg_t;
4328  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4329  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4330 }
4331 template<class T, class M>
4332 inline
4333 field_nonlinear_expr<
4334  field_nonlinear_expr_uf<
4335  detail_nonlinear_expr::sinh_<typename field_component<T,M>::scalar_type>
4336  ,field_expr_terminal_field<T,M>
4337  >
4338 >
4341  typedef field_expr_terminal_field<T,M> arg_t;
4342  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4343  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4344 }
4345 template<class T, class M>
4346 inline
4347 field_nonlinear_expr<
4348  field_nonlinear_expr_uf<
4349  detail_nonlinear_expr::sinh_<typename field_component_const<T,M>::scalar_type>
4350  ,field_expr_terminal_field<T,M>
4351  >
4352 >
4355  typedef field_expr_terminal_field<T,M> arg_t;
4356  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4357  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4358 }
4359 template<class Expr>
4360 inline
4361 field_nonlinear_expr<
4362  field_nonlinear_expr_uf<
4363  detail_nonlinear_expr::sinh_<typename field_expr<Expr>::scalar_type>
4364  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
4365  >
4366 >
4370  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4371  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4372 }
4373 template<class Expr>
4374 inline
4375 field_nonlinear_expr<
4376  field_nonlinear_expr_uf<
4377  detail_nonlinear_expr::sinh_<typename field_nonlinear_expr<Expr>::scalar_type>
4378  ,field_nonlinear_expr<Expr>
4379  >
4380 >
4383  typedef field_nonlinear_expr<Expr> arg_t;
4384  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4385  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
4386 }
4387 namespace detail_nonlinear_expr {
4388  template<class T>
4389  struct tanh_ : std::unary_function<T,T> {
4390  T operator() (const T& x) const { return tanh(x); }
4391  };
4392 } // namespace detail_nonlinear_expr
4393 template<class T, class M>
4394 inline
4395 field_nonlinear_expr<
4396  field_nonlinear_expr_uf<
4397  detail_nonlinear_expr::tanh_<typename field_basic<T,M>::scalar_type>
4398  ,field_expr_terminal_field<T,M>
4399  >
4400 >
4403  typedef field_expr_terminal_field<T,M> arg_t;
4404  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4405  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4406 }
4407 template<class T, class M>
4408 inline
4409 field_nonlinear_expr<
4410  field_nonlinear_expr_uf<
4411  detail_nonlinear_expr::tanh_<typename field_indirect<T,M>::scalar_type>
4412  ,field_expr_terminal_field<T,M>
4413  >
4414 >
4417  typedef field_expr_terminal_field<T,M> arg_t;
4418  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4419  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4420 }
4421 template<class T, class M>
4422 inline
4423 field_nonlinear_expr<
4424  field_nonlinear_expr_uf<
4425  detail_nonlinear_expr::tanh_<typename field_indirect_const<T,M>::scalar_type>
4426  ,field_expr_terminal_field<T,M>
4427  >
4428 >
4431  typedef field_expr_terminal_field<T,M> arg_t;
4432  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4433  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4434 }
4435 template<class T, class M>
4436 inline
4437 field_nonlinear_expr<
4438  field_nonlinear_expr_uf<
4439  detail_nonlinear_expr::tanh_<typename field_component<T,M>::scalar_type>
4440  ,field_expr_terminal_field<T,M>
4441  >
4442 >
4445  typedef field_expr_terminal_field<T,M> arg_t;
4446  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4447  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4448 }
4449 template<class T, class M>
4450 inline
4451 field_nonlinear_expr<
4452  field_nonlinear_expr_uf<
4453  detail_nonlinear_expr::tanh_<typename field_component_const<T,M>::scalar_type>
4454  ,field_expr_terminal_field<T,M>
4455  >
4456 >
4459  typedef field_expr_terminal_field<T,M> arg_t;
4460  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4461  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4462 }
4463 template<class Expr>
4464 inline
4465 field_nonlinear_expr<
4466  field_nonlinear_expr_uf<
4467  detail_nonlinear_expr::tanh_<typename field_expr<Expr>::scalar_type>
4468  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
4469  >
4470 >
4474  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4475  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4476 }
4477 template<class Expr>
4478 inline
4479 field_nonlinear_expr<
4480  field_nonlinear_expr_uf<
4481  detail_nonlinear_expr::tanh_<typename field_nonlinear_expr<Expr>::scalar_type>
4482  ,field_nonlinear_expr<Expr>
4483  >
4484 >
4487  typedef field_nonlinear_expr<Expr> arg_t;
4488  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4489  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
4490 }
4491 namespace detail_nonlinear_expr {
4492  template<class T>
4493  struct exp_ : std::unary_function<T,T> {
4494  T operator() (const T& x) const { return exp(x); }
4495  };
4496 } // namespace detail_nonlinear_expr
4497 template<class T, class M>
4498 inline
4499 field_nonlinear_expr<
4500  field_nonlinear_expr_uf<
4501  detail_nonlinear_expr::exp_<typename field_basic<T,M>::scalar_type>
4502  ,field_expr_terminal_field<T,M>
4503  >
4504 >
4505 exp (const field_basic<T,M>& x) {
4507  typedef field_expr_terminal_field<T,M> arg_t;
4508  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4509  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4510 }
4511 template<class T, class M>
4512 inline
4513 field_nonlinear_expr<
4514  field_nonlinear_expr_uf<
4515  detail_nonlinear_expr::exp_<typename field_indirect<T,M>::scalar_type>
4516  ,field_expr_terminal_field<T,M>
4517  >
4518 >
4521  typedef field_expr_terminal_field<T,M> arg_t;
4522  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4523  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4524 }
4525 template<class T, class M>
4526 inline
4527 field_nonlinear_expr<
4528  field_nonlinear_expr_uf<
4529  detail_nonlinear_expr::exp_<typename field_indirect_const<T,M>::scalar_type>
4530  ,field_expr_terminal_field<T,M>
4531  >
4532 >
4535  typedef field_expr_terminal_field<T,M> arg_t;
4536  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4537  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4538 }
4539 template<class T, class M>
4540 inline
4541 field_nonlinear_expr<
4542  field_nonlinear_expr_uf<
4543  detail_nonlinear_expr::exp_<typename field_component<T,M>::scalar_type>
4544  ,field_expr_terminal_field<T,M>
4545  >
4546 >
4549  typedef field_expr_terminal_field<T,M> arg_t;
4550  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4551  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4552 }
4553 template<class T, class M>
4554 inline
4555 field_nonlinear_expr<
4556  field_nonlinear_expr_uf<
4557  detail_nonlinear_expr::exp_<typename field_component_const<T,M>::scalar_type>
4558  ,field_expr_terminal_field<T,M>
4559  >
4560 >
4563  typedef field_expr_terminal_field<T,M> arg_t;
4564  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4565  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4566 }
4567 template<class Expr>
4568 inline
4569 field_nonlinear_expr<
4570  field_nonlinear_expr_uf<
4571  detail_nonlinear_expr::exp_<typename field_expr<Expr>::scalar_type>
4572  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
4573  >
4574 >
4575 exp (const field_expr<Expr>& x) {
4578  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4579  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4580 }
4581 template<class Expr>
4582 inline
4583 field_nonlinear_expr<
4584  field_nonlinear_expr_uf<
4585  detail_nonlinear_expr::exp_<typename field_nonlinear_expr<Expr>::scalar_type>
4586  ,field_nonlinear_expr<Expr>
4587  >
4588 >
4591  typedef field_nonlinear_expr<Expr> arg_t;
4592  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4593  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
4594 }
4595 namespace detail_nonlinear_expr {
4596  template<class T>
4597  struct log_ : std::unary_function<T,T> {
4598  T operator() (const T& x) const { return log(x); }
4599  };
4600 } // namespace detail_nonlinear_expr
4601 template<class T, class M>
4602 inline
4603 field_nonlinear_expr<
4604  field_nonlinear_expr_uf<
4605  detail_nonlinear_expr::log_<typename field_basic<T,M>::scalar_type>
4606  ,field_expr_terminal_field<T,M>
4607  >
4608 >
4609 log (const field_basic<T,M>& x) {
4611  typedef field_expr_terminal_field<T,M> arg_t;
4612  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4613  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4614 }
4615 template<class T, class M>
4616 inline
4617 field_nonlinear_expr<
4618  field_nonlinear_expr_uf<
4619  detail_nonlinear_expr::log_<typename field_indirect<T,M>::scalar_type>
4620  ,field_expr_terminal_field<T,M>
4621  >
4622 >
4625  typedef field_expr_terminal_field<T,M> arg_t;
4626  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4627  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4628 }
4629 template<class T, class M>
4630 inline
4631 field_nonlinear_expr<
4632  field_nonlinear_expr_uf<
4633  detail_nonlinear_expr::log_<typename field_indirect_const<T,M>::scalar_type>
4634  ,field_expr_terminal_field<T,M>
4635  >
4636 >
4639  typedef field_expr_terminal_field<T,M> arg_t;
4640  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4641  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4642 }
4643 template<class T, class M>
4644 inline
4645 field_nonlinear_expr<
4646  field_nonlinear_expr_uf<
4647  detail_nonlinear_expr::log_<typename field_component<T,M>::scalar_type>
4648  ,field_expr_terminal_field<T,M>
4649  >
4650 >
4653  typedef field_expr_terminal_field<T,M> arg_t;
4654  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4655  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4656 }
4657 template<class T, class M>
4658 inline
4659 field_nonlinear_expr<
4660  field_nonlinear_expr_uf<
4661  detail_nonlinear_expr::log_<typename field_component_const<T,M>::scalar_type>
4662  ,field_expr_terminal_field<T,M>
4663  >
4664 >
4667  typedef field_expr_terminal_field<T,M> arg_t;
4668  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4669  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4670 }
4671 template<class Expr>
4672 inline
4673 field_nonlinear_expr<
4674  field_nonlinear_expr_uf<
4675  detail_nonlinear_expr::log_<typename field_expr<Expr>::scalar_type>
4676  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
4677  >
4678 >
4679 log (const field_expr<Expr>& x) {
4682  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4683  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4684 }
4685 template<class Expr>
4686 inline
4687 field_nonlinear_expr<
4688  field_nonlinear_expr_uf<
4689  detail_nonlinear_expr::log_<typename field_nonlinear_expr<Expr>::scalar_type>
4690  ,field_nonlinear_expr<Expr>
4691  >
4692 >
4695  typedef field_nonlinear_expr<Expr> arg_t;
4696  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4697  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
4698 }
4699 namespace detail_nonlinear_expr {
4700  template<class T>
4701  struct log10_ : std::unary_function<T,T> {
4702  T operator() (const T& x) const { return log10(x); }
4703  };
4704 } // namespace detail_nonlinear_expr
4705 template<class T, class M>
4706 inline
4707 field_nonlinear_expr<
4708  field_nonlinear_expr_uf<
4709  detail_nonlinear_expr::log10_<typename field_basic<T,M>::scalar_type>
4710  ,field_expr_terminal_field<T,M>
4711  >
4712 >
4715  typedef field_expr_terminal_field<T,M> arg_t;
4716  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4717  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4718 }
4719 template<class T, class M>
4720 inline
4721 field_nonlinear_expr<
4722  field_nonlinear_expr_uf<
4723  detail_nonlinear_expr::log10_<typename field_indirect<T,M>::scalar_type>
4724  ,field_expr_terminal_field<T,M>
4725  >
4726 >
4729  typedef field_expr_terminal_field<T,M> arg_t;
4730  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4731  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4732 }
4733 template<class T, class M>
4734 inline
4735 field_nonlinear_expr<
4736  field_nonlinear_expr_uf<
4737  detail_nonlinear_expr::log10_<typename field_indirect_const<T,M>::scalar_type>
4738  ,field_expr_terminal_field<T,M>
4739  >
4740 >
4743  typedef field_expr_terminal_field<T,M> arg_t;
4744  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4745  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4746 }
4747 template<class T, class M>
4748 inline
4749 field_nonlinear_expr<
4750  field_nonlinear_expr_uf<
4751  detail_nonlinear_expr::log10_<typename field_component<T,M>::scalar_type>
4752  ,field_expr_terminal_field<T,M>
4753  >
4754 >
4757  typedef field_expr_terminal_field<T,M> arg_t;
4758  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4759  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4760 }
4761 template<class T, class M>
4762 inline
4763 field_nonlinear_expr<
4764  field_nonlinear_expr_uf<
4765  detail_nonlinear_expr::log10_<typename field_component_const<T,M>::scalar_type>
4766  ,field_expr_terminal_field<T,M>
4767  >
4768 >
4771  typedef field_expr_terminal_field<T,M> arg_t;
4772  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4773  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4774 }
4775 template<class Expr>
4776 inline
4777 field_nonlinear_expr<
4778  field_nonlinear_expr_uf<
4779  detail_nonlinear_expr::log10_<typename field_expr<Expr>::scalar_type>
4780  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
4781  >
4782 >
4786  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4787  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4788 }
4789 template<class Expr>
4790 inline
4791 field_nonlinear_expr<
4792  field_nonlinear_expr_uf<
4793  detail_nonlinear_expr::log10_<typename field_nonlinear_expr<Expr>::scalar_type>
4794  ,field_nonlinear_expr<Expr>
4795  >
4796 >
4799  typedef field_nonlinear_expr<Expr> arg_t;
4800  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4801  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
4802 }
4803 namespace detail_nonlinear_expr {
4804  template<class T>
4805  struct sqrt_ : std::unary_function<T,T> {
4806  T operator() (const T& x) const { return sqrt(x); }
4807  };
4808 } // namespace detail_nonlinear_expr
4809 template<class T, class M>
4810 inline
4811 field_nonlinear_expr<
4812  field_nonlinear_expr_uf<
4813  detail_nonlinear_expr::sqrt_<typename field_basic<T,M>::scalar_type>
4814  ,field_expr_terminal_field<T,M>
4815  >
4816 >
4819  typedef field_expr_terminal_field<T,M> arg_t;
4820  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4821  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4822 }
4823 template<class T, class M>
4824 inline
4825 field_nonlinear_expr<
4826  field_nonlinear_expr_uf<
4827  detail_nonlinear_expr::sqrt_<typename field_indirect<T,M>::scalar_type>
4828  ,field_expr_terminal_field<T,M>
4829  >
4830 >
4833  typedef field_expr_terminal_field<T,M> arg_t;
4834  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4835  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4836 }
4837 template<class T, class M>
4838 inline
4839 field_nonlinear_expr<
4840  field_nonlinear_expr_uf<
4841  detail_nonlinear_expr::sqrt_<typename field_indirect_const<T,M>::scalar_type>
4842  ,field_expr_terminal_field<T,M>
4843  >
4844 >
4847  typedef field_expr_terminal_field<T,M> arg_t;
4848  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4849  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4850 }
4851 template<class T, class M>
4852 inline
4853 field_nonlinear_expr<
4854  field_nonlinear_expr_uf<
4855  detail_nonlinear_expr::sqrt_<typename field_component<T,M>::scalar_type>
4856  ,field_expr_terminal_field<T,M>
4857  >
4858 >
4861  typedef field_expr_terminal_field<T,M> arg_t;
4862  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4863  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4864 }
4865 template<class T, class M>
4866 inline
4867 field_nonlinear_expr<
4868  field_nonlinear_expr_uf<
4869  detail_nonlinear_expr::sqrt_<typename field_component_const<T,M>::scalar_type>
4870  ,field_expr_terminal_field<T,M>
4871  >
4872 >
4875  typedef field_expr_terminal_field<T,M> arg_t;
4876  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4877  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4878 }
4879 template<class Expr>
4880 inline
4881 field_nonlinear_expr<
4882  field_nonlinear_expr_uf<
4883  detail_nonlinear_expr::sqrt_<typename field_expr<Expr>::scalar_type>
4884  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
4885  >
4886 >
4890  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4891  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4892 }
4893 template<class Expr>
4894 inline
4895 field_nonlinear_expr<
4896  field_nonlinear_expr_uf<
4897  detail_nonlinear_expr::sqrt_<typename field_nonlinear_expr<Expr>::scalar_type>
4898  ,field_nonlinear_expr<Expr>
4899  >
4900 >
4903  typedef field_nonlinear_expr<Expr> arg_t;
4904  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4905  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
4906 }
4907 namespace detail_nonlinear_expr {
4908  template<class T>
4909  struct abs_ : std::unary_function<T,T> {
4910  T operator() (const T& x) const { return abs(x); }
4911  };
4912 } // namespace detail_nonlinear_expr
4913 template<class T, class M>
4914 inline
4915 field_nonlinear_expr<
4916  field_nonlinear_expr_uf<
4917  detail_nonlinear_expr::abs_<typename field_basic<T,M>::scalar_type>
4918  ,field_expr_terminal_field<T,M>
4919  >
4920 >
4921 abs (const field_basic<T,M>& x) {
4923  typedef field_expr_terminal_field<T,M> arg_t;
4924  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4925  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4926 }
4927 template<class T, class M>
4928 inline
4929 field_nonlinear_expr<
4930  field_nonlinear_expr_uf<
4931  detail_nonlinear_expr::abs_<typename field_indirect<T,M>::scalar_type>
4932  ,field_expr_terminal_field<T,M>
4933  >
4934 >
4937  typedef field_expr_terminal_field<T,M> arg_t;
4938  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4939  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4940 }
4941 template<class T, class M>
4942 inline
4943 field_nonlinear_expr<
4944  field_nonlinear_expr_uf<
4945  detail_nonlinear_expr::abs_<typename field_indirect_const<T,M>::scalar_type>
4946  ,field_expr_terminal_field<T,M>
4947  >
4948 >
4951  typedef field_expr_terminal_field<T,M> arg_t;
4952  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4953  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4954 }
4955 template<class T, class M>
4956 inline
4957 field_nonlinear_expr<
4958  field_nonlinear_expr_uf<
4959  detail_nonlinear_expr::abs_<typename field_component<T,M>::scalar_type>
4960  ,field_expr_terminal_field<T,M>
4961  >
4962 >
4965  typedef field_expr_terminal_field<T,M> arg_t;
4966  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4967  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4968 }
4969 template<class T, class M>
4970 inline
4971 field_nonlinear_expr<
4972  field_nonlinear_expr_uf<
4973  detail_nonlinear_expr::abs_<typename field_component_const<T,M>::scalar_type>
4974  ,field_expr_terminal_field<T,M>
4975  >
4976 >
4979  typedef field_expr_terminal_field<T,M> arg_t;
4980  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4981  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4982 }
4983 template<class Expr>
4984 inline
4985 field_nonlinear_expr<
4986  field_nonlinear_expr_uf<
4987  detail_nonlinear_expr::abs_<typename field_expr<Expr>::scalar_type>
4988  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
4989  >
4990 >
4991 abs (const field_expr<Expr>& x) {
4994  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
4995  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
4996 }
4997 template<class Expr>
4998 inline
4999 field_nonlinear_expr<
5000  field_nonlinear_expr_uf<
5001  detail_nonlinear_expr::abs_<typename field_nonlinear_expr<Expr>::scalar_type>
5002  ,field_nonlinear_expr<Expr>
5003  >
5004 >
5007  typedef field_nonlinear_expr<Expr> arg_t;
5008  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5009  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
5010 }
5011 namespace detail_nonlinear_expr {
5012  template<class T>
5013  struct fabs_ : std::unary_function<T,T> {
5014  T operator() (const T& x) const { return fabs(x); }
5015  };
5016 } // namespace detail_nonlinear_expr
5017 template<class T, class M>
5018 inline
5019 field_nonlinear_expr<
5020  field_nonlinear_expr_uf<
5021  detail_nonlinear_expr::fabs_<typename field_basic<T,M>::scalar_type>
5022  ,field_expr_terminal_field<T,M>
5023  >
5024 >
5027  typedef field_expr_terminal_field<T,M> arg_t;
5028  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5029  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5030 }
5031 template<class T, class M>
5032 inline
5033 field_nonlinear_expr<
5034  field_nonlinear_expr_uf<
5035  detail_nonlinear_expr::fabs_<typename field_indirect<T,M>::scalar_type>
5036  ,field_expr_terminal_field<T,M>
5037  >
5038 >
5041  typedef field_expr_terminal_field<T,M> arg_t;
5042  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5043  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5044 }
5045 template<class T, class M>
5046 inline
5047 field_nonlinear_expr<
5048  field_nonlinear_expr_uf<
5049  detail_nonlinear_expr::fabs_<typename field_indirect_const<T,M>::scalar_type>
5050  ,field_expr_terminal_field<T,M>
5051  >
5052 >
5055  typedef field_expr_terminal_field<T,M> arg_t;
5056  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5057  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5058 }
5059 template<class T, class M>
5060 inline
5061 field_nonlinear_expr<
5062  field_nonlinear_expr_uf<
5063  detail_nonlinear_expr::fabs_<typename field_component<T,M>::scalar_type>
5064  ,field_expr_terminal_field<T,M>
5065  >
5066 >
5069  typedef field_expr_terminal_field<T,M> arg_t;
5070  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5071  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5072 }
5073 template<class T, class M>
5074 inline
5075 field_nonlinear_expr<
5076  field_nonlinear_expr_uf<
5077  detail_nonlinear_expr::fabs_<typename field_component_const<T,M>::scalar_type>
5078  ,field_expr_terminal_field<T,M>
5079  >
5080 >
5083  typedef field_expr_terminal_field<T,M> arg_t;
5084  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5085  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5086 }
5087 template<class Expr>
5088 inline
5089 field_nonlinear_expr<
5090  field_nonlinear_expr_uf<
5091  detail_nonlinear_expr::fabs_<typename field_expr<Expr>::scalar_type>
5092  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
5093  >
5094 >
5098  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5099  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5100 }
5101 template<class Expr>
5102 inline
5103 field_nonlinear_expr<
5104  field_nonlinear_expr_uf<
5105  detail_nonlinear_expr::fabs_<typename field_nonlinear_expr<Expr>::scalar_type>
5106  ,field_nonlinear_expr<Expr>
5107  >
5108 >
5111  typedef field_nonlinear_expr<Expr> arg_t;
5112  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5113  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
5114 }
5115 namespace detail_nonlinear_expr {
5116  template<class T>
5117  struct floor_ : std::unary_function<T,T> {
5118  T operator() (const T& x) const { return floor(x); }
5119  };
5120 } // namespace detail_nonlinear_expr
5121 template<class T, class M>
5122 inline
5123 field_nonlinear_expr<
5124  field_nonlinear_expr_uf<
5125  detail_nonlinear_expr::floor_<typename field_basic<T,M>::scalar_type>
5126  ,field_expr_terminal_field<T,M>
5127  >
5128 >
5131  typedef field_expr_terminal_field<T,M> arg_t;
5132  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5133  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5134 }
5135 template<class T, class M>
5136 inline
5137 field_nonlinear_expr<
5138  field_nonlinear_expr_uf<
5139  detail_nonlinear_expr::floor_<typename field_indirect<T,M>::scalar_type>
5140  ,field_expr_terminal_field<T,M>
5141  >
5142 >
5145  typedef field_expr_terminal_field<T,M> arg_t;
5146  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5147  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5148 }
5149 template<class T, class M>
5150 inline
5151 field_nonlinear_expr<
5152  field_nonlinear_expr_uf<
5153  detail_nonlinear_expr::floor_<typename field_indirect_const<T,M>::scalar_type>
5154  ,field_expr_terminal_field<T,M>
5155  >
5156 >
5159  typedef field_expr_terminal_field<T,M> arg_t;
5160  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5161  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5162 }
5163 template<class T, class M>
5164 inline
5165 field_nonlinear_expr<
5166  field_nonlinear_expr_uf<
5167  detail_nonlinear_expr::floor_<typename field_component<T,M>::scalar_type>
5168  ,field_expr_terminal_field<T,M>
5169  >
5170 >
5173  typedef field_expr_terminal_field<T,M> arg_t;
5174  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5175  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5176 }
5177 template<class T, class M>
5178 inline
5179 field_nonlinear_expr<
5180  field_nonlinear_expr_uf<
5181  detail_nonlinear_expr::floor_<typename field_component_const<T,M>::scalar_type>
5182  ,field_expr_terminal_field<T,M>
5183  >
5184 >
5187  typedef field_expr_terminal_field<T,M> arg_t;
5188  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5189  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5190 }
5191 template<class Expr>
5192 inline
5193 field_nonlinear_expr<
5194  field_nonlinear_expr_uf<
5195  detail_nonlinear_expr::floor_<typename field_expr<Expr>::scalar_type>
5196  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
5197  >
5198 >
5202  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5203  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5204 }
5205 template<class Expr>
5206 inline
5207 field_nonlinear_expr<
5208  field_nonlinear_expr_uf<
5209  detail_nonlinear_expr::floor_<typename field_nonlinear_expr<Expr>::scalar_type>
5210  ,field_nonlinear_expr<Expr>
5211  >
5212 >
5215  typedef field_nonlinear_expr<Expr> arg_t;
5216  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5217  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), x));
5218 }
5219 namespace detail_nonlinear_expr {
5220  template<class T>
5221  struct ceil_ : std::unary_function<T,T> {
5222  T operator() (const T& x) const { return ceil(x); }
5223  };
5224 } // namespace detail_nonlinear_expr
5225 template<class T, class M>
5226 inline
5227 field_nonlinear_expr<
5228  field_nonlinear_expr_uf<
5229  detail_nonlinear_expr::ceil_<typename field_basic<T,M>::scalar_type>
5230  ,field_expr_terminal_field<T,M>
5231  >
5232 >
5235  typedef field_expr_terminal_field<T,M> arg_t;
5236  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5237  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5238 }
5239 template<class T, class M>
5240 inline
5241 field_nonlinear_expr<
5242  field_nonlinear_expr_uf<
5243  detail_nonlinear_expr::ceil_<typename field_indirect<T,M>::scalar_type>
5244  ,field_expr_terminal_field<T,M>
5245  >
5246 >
5249  typedef field_expr_terminal_field<T,M> arg_t;
5250  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5251  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5252 }
5253 template<class T, class M>
5254 inline
5255 field_nonlinear_expr<
5256  field_nonlinear_expr_uf<
5257  detail_nonlinear_expr::ceil_<typename field_indirect_const<T,M>::scalar_type>
5258  ,field_expr_terminal_field<T,M>
5259  >
5260 >
5263  typedef field_expr_terminal_field<T,M> arg_t;
5264  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5265  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5266 }
5267 template<class T, class M>
5268 inline
5269 field_nonlinear_expr<
5270  field_nonlinear_expr_uf<
5271  detail_nonlinear_expr::ceil_<typename field_component<T,M>::scalar_type>
5272  ,field_expr_terminal_field<T,M>
5273  >
5274 >
5277  typedef field_expr_terminal_field<T,M> arg_t;
5278  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5279  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5280 }
5281 template<class T, class M>
5282 inline
5283 field_nonlinear_expr<
5284  field_nonlinear_expr_uf<
5285  detail_nonlinear_expr::ceil_<typename field_component_const<T,M>::scalar_type>
5286  ,field_expr_terminal_field<T,M>
5287  >
5288 >
5291  typedef field_expr_terminal_field<T,M> arg_t;
5292  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5293  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5294 }
5295 template<class Expr>
5296 inline
5297 field_nonlinear_expr<
5298  field_nonlinear_expr_uf<
5299  detail_nonlinear_expr::ceil_<typename field_expr<Expr>::scalar_type>
5300  ,field_expr_terminal_field<typename field_expr<Expr>::scalar_type, typename field_expr<Expr>::memory_type>
5301  >
5302 >
5306  typedef field_nonlinear_expr_uf<fun_t,arg_t> expr_t;
5307  return field_nonlinear_expr<expr_t>(expr_t(fun_t(), arg_t(x)));
5308 }
5309 template<class Expr>
5310 inline
5311 field_nonlinear_expr<
5312  field_nonlinear_expr_uf<
5313  detail_nonlinear_expr::ceil_<typename field_nonlinear_expr<Expr>::scalar_type>
5314  ,field_nonlinear_expr<Expr>
5315  >
5316 >
5318  typedef