Line data Source code
1 : ! ***********************************************************************
2 : !
3 : ! Copyright (C) 2022 The MESA Team
4 : !
5 : ! This program is free software: you can redistribute it and/or modify
6 : ! it under the terms of the GNU Lesser General Public License
7 : ! as published by the Free Software Foundation,
8 : ! either version 3 of the License, or (at your option) any later version.
9 : !
10 : ! This program is distributed in the hope that it will be useful,
11 : ! but WITHOUT ANY WARRANTY; without even the implied warranty of
12 : ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 : ! See the GNU Lesser General Public License for more details.
14 : !
15 : ! You should have received a copy of the GNU Lesser General Public License
16 : ! along with this program. If not, see <https://www.gnu.org/licenses/>.
17 : !
18 : ! ***********************************************************************
19 :
20 : module auto_diff_real_2var_order3_module
21 : use const_def, only: dp, ln10, pi
22 : use utils_lib
23 : use support_functions
24 : use math_lib
25 :
26 : implicit none
27 : private
28 : public :: auto_diff_real_2var_order3, &
29 : assignment(=), &
30 : operator(.eq.), &
31 : operator(.ne.), &
32 : operator(.gt.), &
33 : operator(.lt.), &
34 : operator(.le.), &
35 : operator(.ge.), &
36 : make_unop, &
37 : make_binop, &
38 : sign, &
39 : safe_sqrt, &
40 : operator(-), &
41 : exp, &
42 : expm1, &
43 : exp10, &
44 : powm1, &
45 : log, &
46 : log1p, &
47 : safe_log, &
48 : log10, &
49 : safe_log10, &
50 : log2, &
51 : sin, &
52 : cos, &
53 : tan, &
54 : sinpi, &
55 : cospi, &
56 : tanpi, &
57 : sinh, &
58 : cosh, &
59 : tanh, &
60 : asin, &
61 : acos, &
62 : atan, &
63 : asinpi, &
64 : acospi, &
65 : atanpi, &
66 : asinh, &
67 : acosh, &
68 : atanh, &
69 : sqrt, &
70 : pow2, &
71 : pow3, &
72 : pow4, &
73 : pow5, &
74 : pow6, &
75 : pow7, &
76 : pow8, &
77 : abs, &
78 : operator(+), &
79 : operator(*), &
80 : operator(/), &
81 : pow, &
82 : max, &
83 : min, &
84 : dim, &
85 : differentiate_1, &
86 : differentiate_2
87 : type :: auto_diff_real_2var_order3
88 : real(dp) :: val
89 : real(dp) :: d1val1
90 : real(dp) :: d1val2
91 : real(dp) :: d2val1
92 : real(dp) :: d1val1_d1val2
93 : real(dp) :: d2val2
94 : real(dp) :: d3val1
95 : real(dp) :: d2val1_d1val2
96 : real(dp) :: d1val1_d2val2
97 : real(dp) :: d3val2
98 : end type auto_diff_real_2var_order3
99 :
100 : interface assignment(=)
101 : module procedure assign_from_self
102 : module procedure assign_from_real_dp
103 : module procedure assign_from_int
104 : end interface assignment(=)
105 :
106 : interface operator(.eq.)
107 : module procedure equal_self
108 : module procedure equal_auto_diff_real_2var_order3_real_dp
109 : module procedure equal_real_dp_auto_diff_real_2var_order3
110 : module procedure equal_auto_diff_real_2var_order3_int
111 : module procedure equal_int_auto_diff_real_2var_order3
112 : end interface operator(.eq.)
113 :
114 : interface operator(.ne.)
115 : module procedure neq_self
116 : module procedure neq_auto_diff_real_2var_order3_real_dp
117 : module procedure neq_real_dp_auto_diff_real_2var_order3
118 : module procedure neq_auto_diff_real_2var_order3_int
119 : module procedure neq_int_auto_diff_real_2var_order3
120 : end interface operator(.ne.)
121 :
122 : interface operator(.gt.)
123 : module procedure greater_self
124 : module procedure greater_auto_diff_real_2var_order3_real_dp
125 : module procedure greater_real_dp_auto_diff_real_2var_order3
126 : module procedure greater_auto_diff_real_2var_order3_int
127 : module procedure greater_int_auto_diff_real_2var_order3
128 : end interface operator(.gt.)
129 :
130 : interface operator(.lt.)
131 : module procedure less_self
132 : module procedure less_auto_diff_real_2var_order3_real_dp
133 : module procedure less_real_dp_auto_diff_real_2var_order3
134 : module procedure less_auto_diff_real_2var_order3_int
135 : module procedure less_int_auto_diff_real_2var_order3
136 : end interface operator(.lt.)
137 :
138 : interface operator(.le.)
139 : module procedure leq_self
140 : module procedure leq_auto_diff_real_2var_order3_real_dp
141 : module procedure leq_real_dp_auto_diff_real_2var_order3
142 : module procedure leq_auto_diff_real_2var_order3_int
143 : module procedure leq_int_auto_diff_real_2var_order3
144 : end interface operator(.le.)
145 :
146 : interface operator(.ge.)
147 : module procedure geq_self
148 : module procedure geq_auto_diff_real_2var_order3_real_dp
149 : module procedure geq_real_dp_auto_diff_real_2var_order3
150 : module procedure geq_auto_diff_real_2var_order3_int
151 : module procedure geq_int_auto_diff_real_2var_order3
152 : end interface operator(.ge.)
153 :
154 : interface make_unop
155 : module procedure make_unary_operator
156 : end interface make_unop
157 :
158 : interface make_binop
159 : module procedure make_binary_operator
160 : end interface make_binop
161 :
162 : interface sign
163 : module procedure sign_self
164 : end interface sign
165 :
166 : interface safe_sqrt
167 : module procedure safe_sqrt_self
168 : end interface safe_sqrt
169 :
170 : interface operator(-)
171 : module procedure unary_minus_self
172 : end interface operator(-)
173 :
174 : interface exp
175 : module procedure exp_self
176 : end interface exp
177 :
178 : interface expm1
179 : module procedure expm1_self
180 : end interface expm1
181 :
182 : interface exp10
183 : module procedure exp10_self
184 : end interface exp10
185 :
186 : interface powm1
187 : module procedure powm1_self
188 : end interface powm1
189 :
190 : interface log
191 : module procedure log_self
192 : end interface log
193 :
194 : interface log1p
195 : module procedure log1p_self
196 : end interface log1p
197 :
198 : interface safe_log
199 : module procedure safe_log_self
200 : end interface safe_log
201 :
202 : interface log10
203 : module procedure log10_self
204 : end interface log10
205 :
206 : interface safe_log10
207 : module procedure safe_log10_self
208 : end interface safe_log10
209 :
210 : interface log2
211 : module procedure log2_self
212 : end interface log2
213 :
214 : interface sin
215 : module procedure sin_self
216 : end interface sin
217 :
218 : interface cos
219 : module procedure cos_self
220 : end interface cos
221 :
222 : interface tan
223 : module procedure tan_self
224 : end interface tan
225 :
226 : interface sinpi
227 : module procedure sinpi_self
228 : end interface sinpi
229 :
230 : interface cospi
231 : module procedure cospi_self
232 : end interface cospi
233 :
234 : interface tanpi
235 : module procedure tanpi_self
236 : end interface tanpi
237 :
238 : interface sinh
239 : module procedure sinh_self
240 : end interface sinh
241 :
242 : interface cosh
243 : module procedure cosh_self
244 : end interface cosh
245 :
246 : interface tanh
247 : module procedure tanh_self
248 : end interface tanh
249 :
250 : interface asin
251 : module procedure asin_self
252 : end interface asin
253 :
254 : interface acos
255 : module procedure acos_self
256 : end interface acos
257 :
258 : interface atan
259 : module procedure atan_self
260 : end interface atan
261 :
262 : interface asinpi
263 : module procedure asinpi_self
264 : end interface asinpi
265 :
266 : interface acospi
267 : module procedure acospi_self
268 : end interface acospi
269 :
270 : interface atanpi
271 : module procedure atanpi_self
272 : end interface atanpi
273 :
274 : interface asinh
275 : module procedure asinh_self
276 : end interface asinh
277 :
278 : interface acosh
279 : module procedure acosh_self
280 : end interface acosh
281 :
282 : interface atanh
283 : module procedure atanh_self
284 : end interface atanh
285 :
286 : interface sqrt
287 : module procedure sqrt_self
288 : end interface sqrt
289 :
290 : interface pow2
291 : module procedure pow2_self
292 : end interface pow2
293 :
294 : interface pow3
295 : module procedure pow3_self
296 : end interface pow3
297 :
298 : interface pow4
299 : module procedure pow4_self
300 : end interface pow4
301 :
302 : interface pow5
303 : module procedure pow5_self
304 : end interface pow5
305 :
306 : interface pow6
307 : module procedure pow6_self
308 : end interface pow6
309 :
310 : interface pow7
311 : module procedure pow7_self
312 : end interface pow7
313 :
314 : interface pow8
315 : module procedure pow8_self
316 : end interface pow8
317 :
318 : interface abs
319 : module procedure abs_self
320 : end interface abs
321 :
322 : interface operator(+)
323 : module procedure add_self
324 : module procedure add_self_real
325 : module procedure add_real_self
326 : module procedure add_self_int
327 : module procedure add_int_self
328 : end interface operator(+)
329 :
330 : interface operator(-)
331 : module procedure sub_self
332 : module procedure sub_self_real
333 : module procedure sub_real_self
334 : module procedure sub_self_int
335 : module procedure sub_int_self
336 : end interface operator(-)
337 :
338 : interface operator(*)
339 : module procedure mul_self
340 : module procedure mul_self_real
341 : module procedure mul_real_self
342 : module procedure mul_self_int
343 : module procedure mul_int_self
344 : end interface operator(*)
345 :
346 : interface operator(/)
347 : module procedure div_self
348 : module procedure div_self_real
349 : module procedure div_real_self
350 : module procedure div_self_int
351 : module procedure div_int_self
352 : end interface operator(/)
353 :
354 : interface pow
355 : module procedure pow_self
356 : module procedure pow_self_real
357 : module procedure pow_real_self
358 : module procedure pow_self_int
359 : module procedure pow_int_self
360 : end interface pow
361 :
362 : interface max
363 : module procedure max_self
364 : module procedure max_self_real
365 : module procedure max_real_self
366 : module procedure max_self_int
367 : module procedure max_int_self
368 : end interface max
369 :
370 : interface min
371 : module procedure min_self
372 : module procedure min_self_real
373 : module procedure min_real_self
374 : module procedure min_self_int
375 : module procedure min_int_self
376 : end interface min
377 :
378 : interface dim
379 : module procedure dim_self
380 : module procedure dim_self_real
381 : module procedure dim_real_self
382 : module procedure dim_self_int
383 : module procedure dim_int_self
384 : end interface dim
385 :
386 : interface differentiate_1
387 : module procedure differentiate_auto_diff_real_2var_order3_1
388 : end interface differentiate_1
389 :
390 : interface differentiate_2
391 : module procedure differentiate_auto_diff_real_2var_order3_2
392 : end interface differentiate_2
393 :
394 : contains
395 :
396 22002274 : subroutine assign_from_self(this, other)
397 : type(auto_diff_real_2var_order3), intent(out) :: this
398 : type(auto_diff_real_2var_order3), intent(in) :: other
399 22002274 : this%val = other%val
400 22002274 : this%d1val1 = other%d1val1
401 22002274 : this%d1val2 = other%d1val2
402 22002274 : this%d2val1 = other%d2val1
403 22002274 : this%d1val1_d1val2 = other%d1val1_d1val2
404 22002274 : this%d2val2 = other%d2val2
405 22002274 : this%d3val1 = other%d3val1
406 22002274 : this%d2val1_d1val2 = other%d2val1_d1val2
407 22002274 : this%d1val1_d2val2 = other%d1val1_d2val2
408 22002274 : this%d3val2 = other%d3val2
409 22002274 : end subroutine assign_from_self
410 :
411 1000074 : subroutine assign_from_real_dp(this, other)
412 : type(auto_diff_real_2var_order3), intent(out) :: this
413 : real(dp), intent(in) :: other
414 1000074 : this%val = other
415 : this%d1val1 = 0.0_dp
416 : this%d1val2 = 0.0_dp
417 : this%d2val1 = 0.0_dp
418 : this%d1val1_d1val2 = 0.0_dp
419 : this%d2val2 = 0.0_dp
420 : this%d3val1 = 0.0_dp
421 : this%d2val1_d1val2 = 0.0_dp
422 : this%d1val1_d2val2 = 0.0_dp
423 : this%d3val2 = 0.0_dp
424 1000074 : end subroutine assign_from_real_dp
425 :
426 0 : subroutine assign_from_int(this, other)
427 : type(auto_diff_real_2var_order3), intent(out) :: this
428 : integer, intent(in) :: other
429 0 : this%val = other
430 : this%d1val1 = 0.0_dp
431 : this%d1val2 = 0.0_dp
432 : this%d2val1 = 0.0_dp
433 : this%d1val1_d1val2 = 0.0_dp
434 : this%d2val2 = 0.0_dp
435 : this%d3val1 = 0.0_dp
436 : this%d2val1_d1val2 = 0.0_dp
437 : this%d1val1_d2val2 = 0.0_dp
438 : this%d3val2 = 0.0_dp
439 0 : end subroutine assign_from_int
440 :
441 0 : function equal_self(this, other) result(z)
442 : type(auto_diff_real_2var_order3), intent(in) :: this
443 : type(auto_diff_real_2var_order3), intent(in) :: other
444 : logical :: z
445 0 : z = (this%val == other%val)
446 0 : end function equal_self
447 :
448 0 : function equal_auto_diff_real_2var_order3_real_dp(this, other) result(z)
449 : type(auto_diff_real_2var_order3), intent(in) :: this
450 : real(dp), intent(in) :: other
451 : logical :: z
452 0 : z = (this%val == other)
453 0 : end function equal_auto_diff_real_2var_order3_real_dp
454 :
455 0 : function equal_real_dp_auto_diff_real_2var_order3(this, other) result(z)
456 : real(dp), intent(in) :: this
457 : type(auto_diff_real_2var_order3), intent(in) :: other
458 : logical :: z
459 0 : z = (this == other%val)
460 0 : end function equal_real_dp_auto_diff_real_2var_order3
461 :
462 0 : function equal_auto_diff_real_2var_order3_int(this, other) result(z)
463 : type(auto_diff_real_2var_order3), intent(in) :: this
464 : integer, intent(in) :: other
465 : logical :: z
466 0 : z = (this%val == other)
467 0 : end function equal_auto_diff_real_2var_order3_int
468 :
469 0 : function equal_int_auto_diff_real_2var_order3(this, other) result(z)
470 : integer, intent(in) :: this
471 : type(auto_diff_real_2var_order3), intent(in) :: other
472 : logical :: z
473 0 : z = (this == other%val)
474 0 : end function equal_int_auto_diff_real_2var_order3
475 :
476 0 : function neq_self(this, other) result(z)
477 : type(auto_diff_real_2var_order3), intent(in) :: this
478 : type(auto_diff_real_2var_order3), intent(in) :: other
479 : logical :: z
480 0 : z = (this%val /= other%val)
481 0 : end function neq_self
482 :
483 0 : function neq_auto_diff_real_2var_order3_real_dp(this, other) result(z)
484 : type(auto_diff_real_2var_order3), intent(in) :: this
485 : real(dp), intent(in) :: other
486 : logical :: z
487 0 : z = (this%val /= other)
488 0 : end function neq_auto_diff_real_2var_order3_real_dp
489 :
490 0 : function neq_real_dp_auto_diff_real_2var_order3(this, other) result(z)
491 : real(dp), intent(in) :: this
492 : type(auto_diff_real_2var_order3), intent(in) :: other
493 : logical :: z
494 0 : z = (this /= other%val)
495 0 : end function neq_real_dp_auto_diff_real_2var_order3
496 :
497 0 : function neq_auto_diff_real_2var_order3_int(this, other) result(z)
498 : type(auto_diff_real_2var_order3), intent(in) :: this
499 : integer, intent(in) :: other
500 : logical :: z
501 0 : z = (this%val /= other)
502 0 : end function neq_auto_diff_real_2var_order3_int
503 :
504 0 : function neq_int_auto_diff_real_2var_order3(this, other) result(z)
505 : integer, intent(in) :: this
506 : type(auto_diff_real_2var_order3), intent(in) :: other
507 : logical :: z
508 0 : z = (this /= other%val)
509 0 : end function neq_int_auto_diff_real_2var_order3
510 :
511 0 : function greater_self(this, other) result(z)
512 : type(auto_diff_real_2var_order3), intent(in) :: this
513 : type(auto_diff_real_2var_order3), intent(in) :: other
514 : logical :: z
515 0 : z = (this%val > other%val)
516 0 : end function greater_self
517 :
518 454594 : function greater_auto_diff_real_2var_order3_real_dp(this, other) result(z)
519 : type(auto_diff_real_2var_order3), intent(in) :: this
520 : real(dp), intent(in) :: other
521 : logical :: z
522 454594 : z = (this%val > other)
523 454594 : end function greater_auto_diff_real_2var_order3_real_dp
524 :
525 0 : function greater_real_dp_auto_diff_real_2var_order3(this, other) result(z)
526 : real(dp), intent(in) :: this
527 : type(auto_diff_real_2var_order3), intent(in) :: other
528 : logical :: z
529 0 : z = (this > other%val)
530 0 : end function greater_real_dp_auto_diff_real_2var_order3
531 :
532 0 : function greater_auto_diff_real_2var_order3_int(this, other) result(z)
533 : type(auto_diff_real_2var_order3), intent(in) :: this
534 : integer, intent(in) :: other
535 : logical :: z
536 0 : z = (this%val > other)
537 0 : end function greater_auto_diff_real_2var_order3_int
538 :
539 0 : function greater_int_auto_diff_real_2var_order3(this, other) result(z)
540 : integer, intent(in) :: this
541 : type(auto_diff_real_2var_order3), intent(in) :: other
542 : logical :: z
543 0 : z = (this > other%val)
544 0 : end function greater_int_auto_diff_real_2var_order3
545 :
546 32062 : function less_self(this, other) result(z)
547 : type(auto_diff_real_2var_order3), intent(in) :: this
548 : type(auto_diff_real_2var_order3), intent(in) :: other
549 : logical :: z
550 32062 : z = (this%val < other%val)
551 32062 : end function less_self
552 :
553 486656 : function less_auto_diff_real_2var_order3_real_dp(this, other) result(z)
554 : type(auto_diff_real_2var_order3), intent(in) :: this
555 : real(dp), intent(in) :: other
556 : logical :: z
557 486656 : z = (this%val < other)
558 486656 : end function less_auto_diff_real_2var_order3_real_dp
559 :
560 0 : function less_real_dp_auto_diff_real_2var_order3(this, other) result(z)
561 : real(dp), intent(in) :: this
562 : type(auto_diff_real_2var_order3), intent(in) :: other
563 : logical :: z
564 0 : z = (this < other%val)
565 0 : end function less_real_dp_auto_diff_real_2var_order3
566 :
567 96186 : function less_auto_diff_real_2var_order3_int(this, other) result(z)
568 : type(auto_diff_real_2var_order3), intent(in) :: this
569 : integer, intent(in) :: other
570 : logical :: z
571 96186 : z = (this%val < other)
572 96186 : end function less_auto_diff_real_2var_order3_int
573 :
574 0 : function less_int_auto_diff_real_2var_order3(this, other) result(z)
575 : integer, intent(in) :: this
576 : type(auto_diff_real_2var_order3), intent(in) :: other
577 : logical :: z
578 0 : z = (this < other%val)
579 0 : end function less_int_auto_diff_real_2var_order3
580 :
581 0 : function leq_self(this, other) result(z)
582 : type(auto_diff_real_2var_order3), intent(in) :: this
583 : type(auto_diff_real_2var_order3), intent(in) :: other
584 : logical :: z
585 0 : z = (this%val <= other%val)
586 0 : end function leq_self
587 :
588 0 : function leq_auto_diff_real_2var_order3_real_dp(this, other) result(z)
589 : type(auto_diff_real_2var_order3), intent(in) :: this
590 : real(dp), intent(in) :: other
591 : logical :: z
592 0 : z = (this%val <= other)
593 0 : end function leq_auto_diff_real_2var_order3_real_dp
594 :
595 0 : function leq_real_dp_auto_diff_real_2var_order3(this, other) result(z)
596 : real(dp), intent(in) :: this
597 : type(auto_diff_real_2var_order3), intent(in) :: other
598 : logical :: z
599 0 : z = (this <= other%val)
600 0 : end function leq_real_dp_auto_diff_real_2var_order3
601 :
602 0 : function leq_auto_diff_real_2var_order3_int(this, other) result(z)
603 : type(auto_diff_real_2var_order3), intent(in) :: this
604 : integer, intent(in) :: other
605 : logical :: z
606 0 : z = (this%val <= other)
607 0 : end function leq_auto_diff_real_2var_order3_int
608 :
609 0 : function leq_int_auto_diff_real_2var_order3(this, other) result(z)
610 : integer, intent(in) :: this
611 : type(auto_diff_real_2var_order3), intent(in) :: other
612 : logical :: z
613 0 : z = (this <= other%val)
614 0 : end function leq_int_auto_diff_real_2var_order3
615 :
616 0 : function geq_self(this, other) result(z)
617 : type(auto_diff_real_2var_order3), intent(in) :: this
618 : type(auto_diff_real_2var_order3), intent(in) :: other
619 : logical :: z
620 0 : z = (this%val >= other%val)
621 0 : end function geq_self
622 :
623 0 : function geq_auto_diff_real_2var_order3_real_dp(this, other) result(z)
624 : type(auto_diff_real_2var_order3), intent(in) :: this
625 : real(dp), intent(in) :: other
626 : logical :: z
627 0 : z = (this%val >= other)
628 0 : end function geq_auto_diff_real_2var_order3_real_dp
629 :
630 0 : function geq_real_dp_auto_diff_real_2var_order3(this, other) result(z)
631 : real(dp), intent(in) :: this
632 : type(auto_diff_real_2var_order3), intent(in) :: other
633 : logical :: z
634 0 : z = (this >= other%val)
635 0 : end function geq_real_dp_auto_diff_real_2var_order3
636 :
637 0 : function geq_auto_diff_real_2var_order3_int(this, other) result(z)
638 : type(auto_diff_real_2var_order3), intent(in) :: this
639 : integer, intent(in) :: other
640 : logical :: z
641 0 : z = (this%val >= other)
642 0 : end function geq_auto_diff_real_2var_order3_int
643 :
644 0 : function geq_int_auto_diff_real_2var_order3(this, other) result(z)
645 : integer, intent(in) :: this
646 : type(auto_diff_real_2var_order3), intent(in) :: other
647 : logical :: z
648 0 : z = (this >= other%val)
649 0 : end function geq_int_auto_diff_real_2var_order3
650 :
651 0 : function make_unary_operator(x, z_val, z_d1x, z_d2x, z_d3x) result(unary)
652 : type(auto_diff_real_2var_order3), intent(in) :: x
653 : real(dp), intent(in) :: z_val
654 : real(dp), intent(in) :: z_d1x
655 : real(dp), intent(in) :: z_d2x
656 : real(dp), intent(in) :: z_d3x
657 : type(auto_diff_real_2var_order3) :: unary
658 : real(dp) :: q4
659 : real(dp) :: q3
660 : real(dp) :: q2
661 : real(dp) :: q1
662 : real(dp) :: q0
663 0 : q0 = pow2(x%d1val1)
664 0 : q1 = x%d1val2*z_d2x
665 0 : q2 = pow2(x%d1val2)
666 0 : q3 = x%d1val1*z_d2x
667 0 : q4 = 2.0_dp*x%d1val1_d1val2
668 0 : unary%val = z_val
669 0 : unary%d1val1 = x%d1val1*z_d1x
670 0 : unary%d1val2 = x%d1val2*z_d1x
671 0 : unary%d2val1 = q0*z_d2x + x%d2val1*z_d1x
672 0 : unary%d1val1_d1val2 = q1*x%d1val1 + x%d1val1_d1val2*z_d1x
673 0 : unary%d2val2 = q2*z_d2x + x%d2val2*z_d1x
674 0 : unary%d3val1 = 3.0_dp*q3*x%d2val1 + x%d3val1*z_d1x + z_d3x*pow3(x%d1val1)
675 0 : unary%d2val1_d1val2 = q0*x%d1val2*z_d3x + q1*x%d2val1 + q3*q4 + x%d2val1_d1val2*z_d1x
676 0 : unary%d1val1_d2val2 = q1*q4 + q2*x%d1val1*z_d3x + q3*x%d2val2 + x%d1val1_d2val2*z_d1x
677 0 : unary%d3val2 = 3.0_dp*q1*x%d2val2 + x%d3val2*z_d1x + z_d3x*pow3(x%d1val2)
678 0 : end function make_unary_operator
679 :
680 422532 : function make_binary_operator(x, y, z_val, &
681 : z_d1x, z_d1y, z_d2x, z_d1x_d1y, z_d2y, z_d3x, z_d2x_d1y, z_d1x_d2y, z_d3y) &
682 : result(binary)
683 : type(auto_diff_real_2var_order3), intent(in) :: x
684 : type(auto_diff_real_2var_order3), intent(in) :: y
685 : real(dp), intent(in) :: z_val
686 : real(dp), intent(in) :: z_d1x
687 : real(dp), intent(in) :: z_d1y
688 : real(dp), intent(in) :: z_d2x
689 : real(dp), intent(in) :: z_d1x_d1y
690 : real(dp), intent(in) :: z_d2y
691 : real(dp), intent(in) :: z_d3x
692 : real(dp), intent(in) :: z_d2x_d1y
693 : real(dp), intent(in) :: z_d1x_d2y
694 : real(dp), intent(in) :: z_d3y
695 : type(auto_diff_real_2var_order3) :: binary
696 : real(dp) :: q26
697 : real(dp) :: q25
698 : real(dp) :: q24
699 : real(dp) :: q23
700 : real(dp) :: q22
701 : real(dp) :: q21
702 : real(dp) :: q20
703 : real(dp) :: q19
704 : real(dp) :: q18
705 : real(dp) :: q17
706 : real(dp) :: q16
707 : real(dp) :: q15
708 : real(dp) :: q14
709 : real(dp) :: q13
710 : real(dp) :: q12
711 : real(dp) :: q11
712 : real(dp) :: q10
713 : real(dp) :: q9
714 : real(dp) :: q8
715 : real(dp) :: q7
716 : real(dp) :: q6
717 : real(dp) :: q5
718 : real(dp) :: q4
719 : real(dp) :: q3
720 : real(dp) :: q2
721 : real(dp) :: q1
722 : real(dp) :: q0
723 422532 : q0 = pow2(x%d1val1)
724 422532 : q1 = pow2(y%d1val1)
725 422532 : q2 = x%d1val1*z_d1x_d1y
726 422532 : q3 = 2.0_dp*q2
727 422532 : q4 = x%d1val2*z_d2x
728 422532 : q5 = y%d1val2*z_d1x_d1y
729 422532 : q6 = x%d1val2*z_d1x_d1y
730 422532 : q7 = y%d1val2*z_d2y
731 422532 : q8 = pow2(x%d1val2)
732 422532 : q9 = pow2(y%d1val2)
733 422532 : q10 = 2.0_dp*q5
734 422532 : q11 = x%d1val1*z_d2x
735 422532 : q12 = 3.0_dp*x%d2val1
736 422532 : q13 = 3.0_dp*y%d2val1
737 422532 : q14 = y%d1val1*z_d1x_d1y
738 422532 : q15 = y%d1val1*z_d2y
739 422532 : q16 = q1*z_d1x_d2y
740 422532 : q17 = q0*z_d2x_d1y
741 422532 : q18 = 2.0_dp*x%d1val1_d1val2
742 422532 : q19 = 2.0_dp*y%d1val1_d1val2
743 422532 : q20 = 2.0_dp*x%d1val1*y%d1val1
744 422532 : q21 = x%d1val2*z_d2x_d1y
745 422532 : q22 = y%d1val2*z_d1x_d2y
746 422532 : q23 = q9*z_d1x_d2y
747 422532 : q24 = q8*z_d2x_d1y
748 422532 : q25 = 3.0_dp*x%d2val2
749 422532 : q26 = 3.0_dp*y%d2val2
750 422532 : binary%val = z_val
751 422532 : binary%d1val1 = x%d1val1*z_d1x + y%d1val1*z_d1y
752 422532 : binary%d1val2 = x%d1val2*z_d1x + y%d1val2*z_d1y
753 422532 : binary%d2val1 = q0*z_d2x + q1*z_d2y + q3*y%d1val1 + x%d2val1*z_d1x + y%d2val1*z_d1y
754 : binary%d1val1_d1val2 = q4*x%d1val1 + q5*x%d1val1 + q6*y%d1val1 + q7*y%d1val1 &
755 422532 : + x%d1val1_d1val2*z_d1x + y%d1val1_d1val2*z_d1y
756 422532 : binary%d2val2 = q10*x%d1val2 + q8*z_d2x + q9*z_d2y + x%d2val2*z_d1x + y%d2val2*z_d1y
757 : binary%d3val1 = 3.0_dp*q16*x%d1val1 + 3.0_dp*q17*y%d1val1 + q11*q12 + q12*q14 + q13*q15 &
758 : + q13*q2 + x%d3val1*z_d1x + y%d3val1*z_d1y + z_d3x*pow3(x%d1val1) &
759 422532 : + z_d3y*pow3(y%d1val1)
760 : binary%d2val1_d1val2 = q0*x%d1val2*z_d3x + q1*y%d1val2*z_d3y + q11*q18 + q14*q18 + q15*q19 &
761 : + q16*x%d1val2 + q17*y%d1val2 + q20*q21 + q20*q22 + q3*y%d1val1_d1val2 &
762 : + q4*x%d2val1 + q5*x%d2val1 + q6*y%d2val1 + q7*y%d2val1 &
763 422532 : + x%d2val1_d1val2*z_d1x + y%d2val1_d1val2*z_d1y
764 : binary%d1val1_d2val2 = 2.0_dp*q21*x%d1val1*y%d1val2 + 2.0_dp*q22*x%d1val2*y%d1val1 &
765 : + q10*x%d1val1_d1val2 + q11*x%d2val2 + q14*x%d2val2 + q15*y%d2val2 &
766 : + q18*q4 + q19*q6 + q19*q7 + q2*y%d2val2 + q23*x%d1val1 &
767 : + q24*y%d1val1 + q8*x%d1val1*z_d3x + q9*y%d1val1*z_d3y &
768 422532 : + x%d1val1_d2val2*z_d1x + y%d1val1_d2val2*z_d1y
769 : binary%d3val2 = 3.0_dp*q23*x%d1val2 + 3.0_dp*q24*y%d1val2 + q25*q4 + q25*q5 + q26*q6 &
770 : + q26*q7 + x%d3val2*z_d1x + y%d3val2*z_d1y + z_d3x*pow3(x%d1val2) &
771 422532 : + z_d3y*pow3(y%d1val2)
772 422532 : end function make_binary_operator
773 :
774 0 : function sign_self(x) result(unary)
775 : type(auto_diff_real_2var_order3), intent(in) :: x
776 : type(auto_diff_real_2var_order3) :: unary
777 0 : unary%val = sgn(x%val)
778 0 : unary%d1val1 = 0.0_dp
779 0 : unary%d1val2 = 0.0_dp
780 0 : unary%d2val1 = 0.0_dp
781 0 : unary%d1val1_d1val2 = 0.0_dp
782 0 : unary%d2val2 = 0.0_dp
783 0 : unary%d3val1 = 0.0_dp
784 0 : unary%d2val1_d1val2 = 0.0_dp
785 0 : unary%d1val1_d2val2 = 0.0_dp
786 0 : unary%d3val2 = 0.0_dp
787 0 : end function sign_self
788 :
789 0 : function safe_sqrt_self(x) result(unary)
790 : type(auto_diff_real_2var_order3), intent(in) :: x
791 : type(auto_diff_real_2var_order3) :: unary
792 : real(dp) :: q15
793 : real(dp) :: q14
794 : real(dp) :: q13
795 : real(dp) :: q12
796 : real(dp) :: q11
797 : real(dp) :: q10
798 : real(dp) :: q9
799 : real(dp) :: q8
800 : real(dp) :: q7
801 : real(dp) :: q6
802 : real(dp) :: q5
803 : real(dp) :: q4
804 : real(dp) :: q3
805 : real(dp) :: q2
806 : real(dp) :: q1
807 : real(dp) :: q0
808 0 : q0 = Heaviside(x%val)
809 0 : q1 = q0*x%val
810 0 : q2 = sqrt(q1)
811 0 : q3 = 0.5_dp*q2*powm1(x%val)
812 0 : q4 = 2.0_dp*x%val
813 0 : q5 = q4*x%d2val1
814 0 : q6 = pow2(x%d1val1)
815 0 : q7 = pow2(x%val)
816 0 : q8 = 0.25_dp*q2*powm1(q7)
817 0 : q9 = q4*x%d2val2
818 0 : q10 = pow2(x%d1val2)
819 0 : q11 = x%d1val1*x%val
820 0 : q12 = 4.0_dp*q7
821 0 : q13 = 0.125_dp*q2*powm1(pow3(x%val))
822 0 : q14 = 4.0_dp*x%d1val1_d1val2
823 0 : q15 = x%d1val2*x%val
824 0 : unary%val = q2
825 0 : unary%d1val1 = q3*x%d1val1
826 0 : unary%d1val2 = q3*x%d1val2
827 0 : unary%d2val1 = q8*(q5 - q6)
828 0 : unary%d1val1_d1val2 = q8*(q4*x%d1val1_d1val2 - x%d1val1*x%d1val2)
829 0 : unary%d2val2 = q8*(-q10 + q9)
830 0 : unary%d3val1 = q13*(-6.0_dp*q11*x%d2val1 + 3.0_dp*pow3(x%d1val1) + q12*x%d3val1)
831 : unary%d2val1_d1val2 = 0.125_dp*(3.0_dp*q6*x%d1val2 - q11*q14 + q12*x%d2val1_d1val2 - q5*x%d1val2) &
832 0 : * pow3(sqrt(q1))*powm1(q0)*powm1(pow4(x%val))
833 0 : unary%d1val1_d2val2 = q13*(3.0_dp*q10*x%d1val1 + q12*x%d1val1_d2val2 - q14*q15 - q9*x%d1val1)
834 0 : unary%d3val2 = q13*(-6.0_dp*q15*x%d2val2 + 3.0_dp*pow3(x%d1val2) + q12*x%d3val2)
835 0 : end function safe_sqrt_self
836 :
837 2305032 : function unary_minus_self(x) result(unary)
838 : type(auto_diff_real_2var_order3), intent(in) :: x
839 : type(auto_diff_real_2var_order3) :: unary
840 2305032 : unary%val = -x%val
841 2305032 : unary%d1val1 = -x%d1val1
842 2305032 : unary%d1val2 = -x%d1val2
843 2305032 : unary%d2val1 = -x%d2val1
844 2305032 : unary%d1val1_d1val2 = -x%d1val1_d1val2
845 2305032 : unary%d2val2 = -x%d2val2
846 2305032 : unary%d3val1 = -x%d3val1
847 2305032 : unary%d2val1_d1val2 = -x%d2val1_d1val2
848 2305032 : unary%d1val1_d2val2 = -x%d1val1_d2val2
849 2305032 : unary%d3val2 = -x%d3val2
850 2305032 : end function unary_minus_self
851 :
852 1088392 : function exp_self(x) result(unary)
853 : type(auto_diff_real_2var_order3), intent(in) :: x
854 : type(auto_diff_real_2var_order3) :: unary
855 : real(dp) :: q3
856 : real(dp) :: q2
857 : real(dp) :: q1
858 : real(dp) :: q0
859 1088392 : q0 = exp(x%val)
860 1088392 : q1 = x%d2val1 + pow2(x%d1val1)
861 1088392 : q2 = x%d2val2 + pow2(x%d1val2)
862 1088392 : q3 = 2.0_dp*x%d1val1_d1val2
863 1088392 : unary%val = q0
864 1088392 : unary%d1val1 = q0*x%d1val1
865 1088392 : unary%d1val2 = q0*x%d1val2
866 1088392 : unary%d2val1 = q0*q1
867 1088392 : unary%d1val1_d1val2 = q0*(x%d1val1*x%d1val2 + x%d1val1_d1val2)
868 1088392 : unary%d2val2 = q0*q2
869 1088392 : unary%d3val1 = q0*(3.0_dp*x%d1val1*x%d2val1 + x%d3val1 + pow3(x%d1val1))
870 1088392 : unary%d2val1_d1val2 = q0*(q1*x%d1val2 + q3*x%d1val1 + x%d2val1_d1val2)
871 1088392 : unary%d1val1_d2val2 = q0*(q2*x%d1val1 + q3*x%d1val2 + x%d1val1_d2val2)
872 1088392 : unary%d3val2 = q0*(3.0_dp*x%d1val2*x%d2val2 + x%d3val2 + pow3(x%d1val2))
873 1088392 : end function exp_self
874 :
875 0 : function expm1_self(x) result(unary)
876 : type(auto_diff_real_2var_order3), intent(in) :: x
877 : type(auto_diff_real_2var_order3) :: unary
878 : real(dp) :: q3
879 : real(dp) :: q2
880 : real(dp) :: q1
881 : real(dp) :: q0
882 0 : q0 = exp(x%val)
883 0 : q1 = x%d2val1 + pow2(x%d1val1)
884 0 : q2 = x%d2val2 + pow2(x%d1val2)
885 0 : q3 = 2.0_dp*x%d1val1_d1val2
886 0 : unary%val = expm1(x%val)
887 0 : unary%d1val1 = q0*x%d1val1
888 0 : unary%d1val2 = q0*x%d1val2
889 0 : unary%d2val1 = q0*q1
890 0 : unary%d1val1_d1val2 = q0*(x%d1val1*x%d1val2 + x%d1val1_d1val2)
891 0 : unary%d2val2 = q0*q2
892 0 : unary%d3val1 = q0*(3.0_dp*x%d1val1*x%d2val1 + x%d3val1 + pow3(x%d1val1))
893 0 : unary%d2val1_d1val2 = q0*(q1*x%d1val2 + q3*x%d1val1 + x%d2val1_d1val2)
894 0 : unary%d1val1_d2val2 = q0*(q2*x%d1val1 + q3*x%d1val2 + x%d1val1_d2val2)
895 0 : unary%d3val2 = q0*(3.0_dp*x%d1val2*x%d2val2 + x%d3val2 + pow3(x%d1val2))
896 0 : end function expm1_self
897 :
898 0 : function exp10_self(x) result(unary)
899 : type(auto_diff_real_2var_order3), intent(in) :: x
900 : type(auto_diff_real_2var_order3) :: unary
901 : real(dp) :: q8
902 : real(dp) :: q7
903 : real(dp) :: q6
904 : real(dp) :: q5
905 : real(dp) :: q4
906 : real(dp) :: q3
907 : real(dp) :: q2
908 : real(dp) :: q1
909 : real(dp) :: q0
910 0 : q0 = pow(10.0_dp, x%val)
911 0 : q1 = ln10
912 0 : q2 = q0*q1
913 0 : q3 = q1*pow2(x%d1val1) + x%d2val1
914 0 : q4 = q1*x%d1val2
915 0 : q5 = q1*pow2(x%d1val2) + x%d2val2
916 0 : q6 = q1*x%d1val1
917 0 : q7 = pow2(q1)
918 0 : q8 = 2.0_dp*x%d1val1_d1val2
919 0 : unary%val = q0
920 0 : unary%d1val1 = q2*x%d1val1
921 0 : unary%d1val2 = q2*x%d1val2
922 0 : unary%d2val1 = q2*q3
923 0 : unary%d1val1_d1val2 = q2*(q4*x%d1val1 + x%d1val1_d1val2)
924 0 : unary%d2val2 = q2*q5
925 0 : unary%d3val1 = q2*(3.0_dp*q6*x%d2val1 + q7*pow3(x%d1val1) + x%d3val1)
926 0 : unary%d2val1_d1val2 = q2*(q3*q4 + q6*q8 + x%d2val1_d1val2)
927 0 : unary%d1val1_d2val2 = q2*(q4*q8 + q5*q6 + x%d1val1_d2val2)
928 0 : unary%d3val2 = q2*(3.0_dp*q4*x%d2val2 + q7*pow3(x%d1val2) + x%d3val2)
929 0 : end function exp10_self
930 :
931 0 : function powm1_self(x) result(unary)
932 : type(auto_diff_real_2var_order3), intent(in) :: x
933 : type(auto_diff_real_2var_order3) :: unary
934 : real(dp) :: q12
935 : real(dp) :: q11
936 : real(dp) :: q10
937 : real(dp) :: q9
938 : real(dp) :: q8
939 : real(dp) :: q7
940 : real(dp) :: q6
941 : real(dp) :: q5
942 : real(dp) :: q4
943 : real(dp) :: q3
944 : real(dp) :: q2
945 : real(dp) :: q1
946 : real(dp) :: q0
947 0 : q0 = pow2(x%val)
948 0 : q1 = powm1(q0)
949 0 : q2 = powm1(pow3(x%val))
950 0 : q3 = x%d2val1*x%val
951 0 : q4 = pow2(x%d1val1)
952 0 : q5 = 2.0_dp*x%d1val1
953 0 : q6 = x%d1val1_d1val2*x%val
954 0 : q7 = x%d2val2*x%val
955 0 : q8 = -q7
956 0 : q9 = pow2(x%d1val2)
957 0 : q10 = powm1(pow4(x%val))
958 0 : q11 = 4.0_dp*q6
959 0 : q12 = 6.0_dp*x%d1val2
960 0 : unary%val = powm1(x%val)
961 0 : unary%d1val1 = -q1*x%d1val1
962 0 : unary%d1val2 = -q1*x%d1val2
963 0 : unary%d2val1 = q2*(2.0_dp*q4 - q3)
964 0 : unary%d1val1_d1val2 = q2*(q5*x%d1val2 - q6)
965 0 : unary%d2val2 = q2*(2.0_dp*q9 + q8)
966 0 : unary%d3val1 = q10*(-6.0_dp*pow3(x%d1val1) + 6.0_dp*q3*x%d1val1 - q0*x%d3val1)
967 0 : unary%d2val1_d1val2 = q10*(2.0_dp*q3*x%d1val2 - q0*x%d2val1_d1val2 + q11*x%d1val1 - q12*q4)
968 0 : unary%d1val1_d2val2 = q10*(-q0*x%d1val1_d2val2 + q11*x%d1val2 - q5*(3.0_dp*q9 + q8))
969 0 : unary%d3val2 = q10*(-6.0_dp*pow3(x%d1val2) - q0*x%d3val2 + q12*q7)
970 0 : end function powm1_self
971 :
972 2906768 : function log_self(x) result(unary)
973 : type(auto_diff_real_2var_order3), intent(in) :: x
974 : type(auto_diff_real_2var_order3) :: unary
975 : real(dp) :: q9
976 : real(dp) :: q8
977 : real(dp) :: q7
978 : real(dp) :: q6
979 : real(dp) :: q5
980 : real(dp) :: q4
981 : real(dp) :: q3
982 : real(dp) :: q2
983 : real(dp) :: q1
984 : real(dp) :: q0
985 2906768 : q0 = powm1(x%val)
986 2906768 : q1 = pow2(x%val)
987 2906768 : q2 = powm1(q1)
988 2906768 : q3 = x%d2val1*x%val
989 2906768 : q4 = pow2(x%d1val1)
990 2906768 : q5 = x%d1val1_d1val2*x%val
991 2906768 : q6 = x%d2val2*x%val
992 2906768 : q7 = pow2(x%d1val2)
993 2906768 : q8 = powm1(pow3(x%val))
994 2906768 : q9 = 2.0_dp*x%d1val2
995 2906768 : unary%val = log(x%val)
996 2906768 : unary%d1val1 = q0*x%d1val1
997 2906768 : unary%d1val2 = q0*x%d1val2
998 2906768 : unary%d2val1 = q2*(q3 - q4)
999 2906768 : unary%d1val1_d1val2 = q2*(q5 - x%d1val1*x%d1val2)
1000 2906768 : unary%d2val2 = q2*(q6 - q7)
1001 2906768 : unary%d3val1 = q8*(-3.0_dp*q3*x%d1val1 + 2.0_dp*pow3(x%d1val1) + q1*x%d3val1)
1002 2906768 : unary%d2val1_d1val2 = q8*(-2.0_dp*q5*x%d1val1 + q1*x%d2val1_d1val2 - q3*x%d1val2 + q4*q9)
1003 2906768 : unary%d1val1_d2val2 = q8*(q1*x%d1val1_d2val2 - q5*q9 + x%d1val1*(2.0_dp*q7 - q6))
1004 2906768 : unary%d3val2 = q8*(-3.0_dp*q6*x%d1val2 + 2.0_dp*pow3(x%d1val2) + q1*x%d3val2)
1005 2906768 : end function log_self
1006 :
1007 0 : function log1p_self(x) result(unary)
1008 : type(auto_diff_real_2var_order3), intent(in) :: x
1009 : type(auto_diff_real_2var_order3) :: unary
1010 : real(dp) :: q10
1011 : real(dp) :: q9
1012 : real(dp) :: q8
1013 : real(dp) :: q7
1014 : real(dp) :: q6
1015 : real(dp) :: q5
1016 : real(dp) :: q4
1017 : real(dp) :: q3
1018 : real(dp) :: q2
1019 : real(dp) :: q1
1020 : real(dp) :: q0
1021 0 : q0 = x%val + 1
1022 0 : q1 = powm1(q0)
1023 0 : q2 = pow2(q0)
1024 0 : q3 = powm1(q2)
1025 0 : q4 = pow2(x%d1val1)
1026 0 : q5 = q0*x%d2val1
1027 0 : q6 = q0*x%d1val1_d1val2
1028 0 : q7 = pow2(x%d1val2)
1029 0 : q8 = q0*x%d2val2
1030 0 : q9 = powm1(pow3(q0))
1031 0 : q10 = 2.0_dp*q6
1032 0 : unary%val = log1p(x%val)
1033 0 : unary%d1val1 = q1*x%d1val1
1034 0 : unary%d1val2 = q1*x%d1val2
1035 0 : unary%d2val1 = q3*(-q4 + q5)
1036 0 : unary%d1val1_d1val2 = q3*(q6 - x%d1val1*x%d1val2)
1037 0 : unary%d2val2 = q3*(-q7 + q8)
1038 0 : unary%d3val1 = q9*(-3.0_dp*q5*x%d1val1 + 2.0_dp*pow3(x%d1val1) + q2*x%d3val1)
1039 0 : unary%d2val1_d1val2 = q9*(-q10*x%d1val1 + q2*x%d2val1_d1val2 + q4*x%d1val2 + x%d1val2*(q4 - q5))
1040 0 : unary%d1val1_d2val2 = q9*(-q10*x%d1val2 + q2*x%d1val1_d2val2 + x%d1val1*(2.0_dp*q7 - q8))
1041 0 : unary%d3val2 = q9*(-3.0_dp*q8*x%d1val2 + 2.0_dp*pow3(x%d1val2) + q2*x%d3val2)
1042 0 : end function log1p_self
1043 :
1044 0 : function safe_log_self(x) result(unary)
1045 : type(auto_diff_real_2var_order3), intent(in) :: x
1046 : type(auto_diff_real_2var_order3) :: unary
1047 : real(dp) :: q9
1048 : real(dp) :: q8
1049 : real(dp) :: q7
1050 : real(dp) :: q6
1051 : real(dp) :: q5
1052 : real(dp) :: q4
1053 : real(dp) :: q3
1054 : real(dp) :: q2
1055 : real(dp) :: q1
1056 : real(dp) :: q0
1057 0 : q0 = powm1(x%val)
1058 0 : q1 = pow2(x%val)
1059 0 : q2 = powm1(q1)
1060 0 : q3 = x%d2val1*x%val
1061 0 : q4 = pow2(x%d1val1)
1062 0 : q5 = x%d1val1_d1val2*x%val
1063 0 : q6 = x%d2val2*x%val
1064 0 : q7 = pow2(x%d1val2)
1065 0 : q8 = powm1(pow3(x%val))
1066 0 : q9 = 2.0_dp*x%d1val2
1067 0 : unary%val = safe_log(x%val)
1068 0 : unary%d1val1 = q0*x%d1val1
1069 0 : unary%d1val2 = q0*x%d1val2
1070 0 : unary%d2val1 = q2*(q3 - q4)
1071 0 : unary%d1val1_d1val2 = q2*(q5 - x%d1val1*x%d1val2)
1072 0 : unary%d2val2 = q2*(q6 - q7)
1073 0 : unary%d3val1 = q8*(-3.0_dp*q3*x%d1val1 + 2.0_dp*pow3(x%d1val1) + q1*x%d3val1)
1074 0 : unary%d2val1_d1val2 = q8*(-2.0_dp*q5*x%d1val1 + q1*x%d2val1_d1val2 - q3*x%d1val2 + q4*q9)
1075 0 : unary%d1val1_d2val2 = q8*(q1*x%d1val1_d2val2 - q5*q9 + x%d1val1*(2.0_dp*q7 - q6))
1076 0 : unary%d3val2 = q8*(-3.0_dp*q6*x%d1val2 + 2.0_dp*pow3(x%d1val2) + q1*x%d3val2)
1077 0 : end function safe_log_self
1078 :
1079 64124 : function log10_self(x) result(unary)
1080 : type(auto_diff_real_2var_order3), intent(in) :: x
1081 : type(auto_diff_real_2var_order3) :: unary
1082 : real(dp) :: q10
1083 : real(dp) :: q9
1084 : real(dp) :: q8
1085 : real(dp) :: q7
1086 : real(dp) :: q6
1087 : real(dp) :: q5
1088 : real(dp) :: q4
1089 : real(dp) :: q3
1090 : real(dp) :: q2
1091 : real(dp) :: q1
1092 : real(dp) :: q0
1093 64124 : q0 = powm1(ln10)
1094 64124 : q1 = q0*powm1(x%val)
1095 64124 : q2 = x%d2val1*x%val
1096 64124 : q3 = pow2(x%d1val1)
1097 64124 : q4 = pow2(x%val)
1098 64124 : q5 = q0*powm1(q4)
1099 64124 : q6 = x%d1val1_d1val2*x%val
1100 64124 : q7 = x%d2val2*x%val
1101 64124 : q8 = pow2(x%d1val2)
1102 64124 : q9 = q0*powm1(pow3(x%val))
1103 64124 : q10 = 2.0_dp*x%d1val2
1104 64124 : unary%val = q0*log(x%val)
1105 64124 : unary%d1val1 = q1*x%d1val1
1106 64124 : unary%d1val2 = q1*x%d1val2
1107 64124 : unary%d2val1 = q5*(q2 - q3)
1108 64124 : unary%d1val1_d1val2 = q5*(q6 - x%d1val1*x%d1val2)
1109 64124 : unary%d2val2 = q5*(q7 - q8)
1110 64124 : unary%d3val1 = q9*(-3.0_dp*q2*x%d1val1 + 2.0_dp*pow3(x%d1val1) + q4*x%d3val1)
1111 64124 : unary%d2val1_d1val2 = q9*(-2.0_dp*q6*x%d1val1 + q10*q3 - q2*x%d1val2 + q4*x%d2val1_d1val2)
1112 64124 : unary%d1val1_d2val2 = q9*(-q10*q6 + q4*x%d1val1_d2val2 + x%d1val1*(2.0_dp*q8 - q7))
1113 64124 : unary%d3val2 = q9*(-3.0_dp*q7*x%d1val2 + 2.0_dp*pow3(x%d1val2) + q4*x%d3val2)
1114 64124 : end function log10_self
1115 :
1116 0 : function safe_log10_self(x) result(unary)
1117 : type(auto_diff_real_2var_order3), intent(in) :: x
1118 : type(auto_diff_real_2var_order3) :: unary
1119 : real(dp) :: q10
1120 : real(dp) :: q9
1121 : real(dp) :: q8
1122 : real(dp) :: q7
1123 : real(dp) :: q6
1124 : real(dp) :: q5
1125 : real(dp) :: q4
1126 : real(dp) :: q3
1127 : real(dp) :: q2
1128 : real(dp) :: q1
1129 : real(dp) :: q0
1130 0 : q0 = powm1(ln10)
1131 0 : q1 = q0*powm1(x%val)
1132 0 : q2 = x%d2val1*x%val
1133 0 : q3 = pow2(x%d1val1)
1134 0 : q4 = pow2(x%val)
1135 0 : q5 = q0*powm1(q4)
1136 0 : q6 = x%d1val1_d1val2*x%val
1137 0 : q7 = x%d2val2*x%val
1138 0 : q8 = pow2(x%d1val2)
1139 0 : q9 = q0*powm1(pow3(x%val))
1140 0 : q10 = 2.0_dp*x%d1val2
1141 0 : unary%val = q0*safe_log(x%val)
1142 0 : unary%d1val1 = q1*x%d1val1
1143 0 : unary%d1val2 = q1*x%d1val2
1144 0 : unary%d2val1 = q5*(q2 - q3)
1145 0 : unary%d1val1_d1val2 = q5*(q6 - x%d1val1*x%d1val2)
1146 0 : unary%d2val2 = q5*(q7 - q8)
1147 0 : unary%d3val1 = q9*(-3.0_dp*q2*x%d1val1 + 2.0_dp*pow3(x%d1val1) + q4*x%d3val1)
1148 0 : unary%d2val1_d1val2 = q9*(-2.0_dp*q6*x%d1val1 + q10*q3 - q2*x%d1val2 + q4*x%d2val1_d1val2)
1149 0 : unary%d1val1_d2val2 = q9*(-q10*q6 + q4*x%d1val1_d2val2 + x%d1val1*(2.0_dp*q8 - q7))
1150 0 : unary%d3val2 = q9*(-3.0_dp*q7*x%d1val2 + 2.0_dp*pow3(x%d1val2) + q4*x%d3val2)
1151 0 : end function safe_log10_self
1152 :
1153 0 : function log2_self(x) result(unary)
1154 : type(auto_diff_real_2var_order3), intent(in) :: x
1155 : type(auto_diff_real_2var_order3) :: unary
1156 : real(dp) :: q10
1157 : real(dp) :: q9
1158 : real(dp) :: q8
1159 : real(dp) :: q7
1160 : real(dp) :: q6
1161 : real(dp) :: q5
1162 : real(dp) :: q4
1163 : real(dp) :: q3
1164 : real(dp) :: q2
1165 : real(dp) :: q1
1166 : real(dp) :: q0
1167 0 : q0 = powm1(log(2.0_dp))
1168 0 : q1 = q0*powm1(x%val)
1169 0 : q2 = x%d2val1*x%val
1170 0 : q3 = pow2(x%d1val1)
1171 0 : q4 = pow2(x%val)
1172 0 : q5 = q0*powm1(q4)
1173 0 : q6 = x%d1val1_d1val2*x%val
1174 0 : q7 = x%d2val2*x%val
1175 0 : q8 = pow2(x%d1val2)
1176 0 : q9 = q0*powm1(pow3(x%val))
1177 0 : q10 = 2.0_dp*x%d1val2
1178 0 : unary%val = q0*log(x%val)
1179 0 : unary%d1val1 = q1*x%d1val1
1180 0 : unary%d1val2 = q1*x%d1val2
1181 0 : unary%d2val1 = q5*(q2 - q3)
1182 0 : unary%d1val1_d1val2 = q5*(q6 - x%d1val1*x%d1val2)
1183 0 : unary%d2val2 = q5*(q7 - q8)
1184 0 : unary%d3val1 = q9*(-3.0_dp*q2*x%d1val1 + 2.0_dp*pow3(x%d1val1) + q4*x%d3val1)
1185 0 : unary%d2val1_d1val2 = q9*(-2.0_dp*q6*x%d1val1 + q10*q3 - q2*x%d1val2 + q4*x%d2val1_d1val2)
1186 0 : unary%d1val1_d2val2 = q9*(-q10*q6 + q4*x%d1val1_d2val2 + x%d1val1*(2.0_dp*q8 - q7))
1187 0 : unary%d3val2 = q9*(-3.0_dp*q7*x%d1val2 + 2.0_dp*pow3(x%d1val2) + q4*x%d3val2)
1188 0 : end function log2_self
1189 :
1190 0 : function sin_self(x) result(unary)
1191 : type(auto_diff_real_2var_order3), intent(in) :: x
1192 : type(auto_diff_real_2var_order3) :: unary
1193 : real(dp) :: q8
1194 : real(dp) :: q7
1195 : real(dp) :: q6
1196 : real(dp) :: q5
1197 : real(dp) :: q4
1198 : real(dp) :: q3
1199 : real(dp) :: q2
1200 : real(dp) :: q1
1201 : real(dp) :: q0
1202 0 : q0 = sin(x%val)
1203 0 : q1 = cos(x%val)
1204 0 : q2 = q1*x%d1val2
1205 0 : q3 = pow2(x%d1val1)
1206 0 : q4 = q0*x%d1val2
1207 0 : q5 = pow2(x%d1val2)
1208 0 : q6 = q0*x%d1val1
1209 0 : q7 = 2.0_dp*x%d1val1_d1val2
1210 0 : q8 = q0*x%d2val2
1211 0 : unary%val = q0
1212 0 : unary%d1val1 = q1*x%d1val1
1213 0 : unary%d1val2 = q2
1214 0 : unary%d2val1 = -q0*q3 + q1*x%d2val1
1215 0 : unary%d1val1_d1val2 = q1*x%d1val1_d1val2 - q4*x%d1val1
1216 0 : unary%d2val2 = -q0*q5 + q1*x%d2val2
1217 0 : unary%d3val1 = -3.0_dp*q6*x%d2val1 + q1*x%d3val1 - q1*pow3(x%d1val1)
1218 0 : unary%d2val1_d1val2 = q1*x%d2val1_d1val2 - q2*q3 - q4*x%d2val1 - q6*q7
1219 0 : unary%d1val1_d2val2 = q1*x%d1val1_d2val2 - q4*q7 - x%d1val1*(q1*q5 + q8)
1220 0 : unary%d3val2 = -3.0_dp*q8*x%d1val2 + q1*x%d3val2 - q1*pow3(x%d1val2)
1221 0 : end function sin_self
1222 :
1223 0 : function cos_self(x) result(unary)
1224 : type(auto_diff_real_2var_order3), intent(in) :: x
1225 : type(auto_diff_real_2var_order3) :: unary
1226 : real(dp) :: q8
1227 : real(dp) :: q7
1228 : real(dp) :: q6
1229 : real(dp) :: q5
1230 : real(dp) :: q4
1231 : real(dp) :: q3
1232 : real(dp) :: q2
1233 : real(dp) :: q1
1234 : real(dp) :: q0
1235 0 : q0 = cos(x%val)
1236 0 : q1 = sin(x%val)
1237 0 : q2 = q1*x%d1val2
1238 0 : q3 = pow2(x%d1val1)
1239 0 : q4 = q0*x%d1val2
1240 0 : q5 = pow2(x%d1val2)
1241 0 : q6 = q0*x%d1val1
1242 0 : q7 = 2.0_dp*x%d1val1_d1val2
1243 0 : q8 = q0*x%d2val2
1244 0 : unary%val = q0
1245 0 : unary%d1val1 = -q1*x%d1val1
1246 0 : unary%d1val2 = -q2
1247 0 : unary%d2val1 = -q0*q3 - q1*x%d2val1
1248 0 : unary%d1val1_d1val2 = -q1*x%d1val1_d1val2 - q4*x%d1val1
1249 0 : unary%d2val2 = -q0*q5 - q1*x%d2val2
1250 0 : unary%d3val1 = -3.0_dp*q6*x%d2val1 - q1*x%d3val1 + q1*pow3(x%d1val1)
1251 0 : unary%d2val1_d1val2 = -q1*x%d2val1_d1val2 + q2*q3 - q4*x%d2val1 - q6*q7
1252 0 : unary%d1val1_d2val2 = -q1*x%d1val1_d2val2 - q4*q7 + x%d1val1*(q1*q5 - q8)
1253 0 : unary%d3val2 = -3.0_dp*q8*x%d1val2 - q1*x%d3val2 + q1*pow3(x%d1val2)
1254 0 : end function cos_self
1255 :
1256 0 : function tan_self(x) result(unary)
1257 : type(auto_diff_real_2var_order3), intent(in) :: x
1258 : type(auto_diff_real_2var_order3) :: unary
1259 : real(dp) :: q15
1260 : real(dp) :: q14
1261 : real(dp) :: q13
1262 : real(dp) :: q12
1263 : real(dp) :: q11
1264 : real(dp) :: q10
1265 : real(dp) :: q9
1266 : real(dp) :: q8
1267 : real(dp) :: q7
1268 : real(dp) :: q6
1269 : real(dp) :: q5
1270 : real(dp) :: q4
1271 : real(dp) :: q3
1272 : real(dp) :: q2
1273 : real(dp) :: q1
1274 : real(dp) :: q0
1275 0 : q0 = tan(x%val)
1276 0 : q1 = pow2(q0)
1277 0 : q2 = q1 + 1
1278 0 : q3 = powm1(pow2(cos(x%val)))
1279 0 : q4 = pow2(x%d1val1)
1280 0 : q5 = 2.0_dp*q0
1281 0 : q6 = q4*q5 + x%d2val1
1282 0 : q7 = q5*x%d1val2
1283 0 : q8 = pow2(x%d1val2)
1284 0 : q9 = q0*x%d1val1
1285 0 : q10 = pow3(x%d1val1)
1286 0 : q11 = 2.0_dp*q3
1287 0 : q12 = 4.0_dp*q1
1288 0 : q13 = 4.0_dp*x%d1val1_d1val2
1289 0 : q14 = q0*x%d2val2
1290 0 : q15 = pow3(x%d1val2)
1291 0 : unary%val = q0
1292 0 : unary%d1val1 = q2*x%d1val1
1293 0 : unary%d1val2 = q2*x%d1val2
1294 0 : unary%d2val1 = q3*q6
1295 0 : unary%d1val1_d1val2 = q3*(q7*x%d1val1 + x%d1val1_d1val2)
1296 0 : unary%d2val2 = q3*(q5*q8 + x%d2val2)
1297 0 : unary%d3val1 = q3*(6.0_dp*q9*x%d2val1 + q10*q11 + q10*q12 + x%d3val1)
1298 0 : unary%d2val1_d1val2 = q3*(q11*q4*x%d1val2 + q13*q9 + q6*q7 + x%d2val1_d1val2)
1299 0 : unary%d1val1_d2val2 = q3*(2.0_dp*x%d1val1*(2.0_dp*q1*q8 + q14 + q3*q8) + q0*q13*x%d1val2 + x%d1val1_d2val2)
1300 0 : unary%d3val2 = q3*(6.0_dp*q14*x%d1val2 + q11*q15 + q12*q15 + x%d3val2)
1301 0 : end function tan_self
1302 :
1303 0 : function sinpi_self(x) result(unary)
1304 : type(auto_diff_real_2var_order3), intent(in) :: x
1305 : type(auto_diff_real_2var_order3) :: unary
1306 : real(dp) :: q11
1307 : real(dp) :: q10
1308 : real(dp) :: q9
1309 : real(dp) :: q8
1310 : real(dp) :: q7
1311 : real(dp) :: q6
1312 : real(dp) :: q5
1313 : real(dp) :: q4
1314 : real(dp) :: q3
1315 : real(dp) :: q2
1316 : real(dp) :: q1
1317 : real(dp) :: q0
1318 0 : q0 = pi*x%val
1319 0 : q1 = sin(q0)
1320 0 : q2 = cos(q0)
1321 0 : q3 = pi*q2
1322 0 : q4 = pow2(x%d1val1)
1323 0 : q5 = pi*q1
1324 0 : q6 = q5*x%d1val2
1325 0 : q7 = pow2(x%d1val2)
1326 0 : q8 = q5*x%d1val1
1327 0 : q9 = q2*pow2(pi)
1328 0 : q10 = 2.0_dp*x%d1val1_d1val2
1329 0 : q11 = q1*x%d2val2
1330 0 : unary%val = q1
1331 0 : unary%d1val1 = q3*x%d1val1
1332 0 : unary%d1val2 = q3*x%d1val2
1333 0 : unary%d2val1 = pi*(q2*x%d2val1 - q4*q5)
1334 0 : unary%d1val1_d1val2 = pi*(q2*x%d1val1_d1val2 - q6*x%d1val1)
1335 0 : unary%d2val2 = pi*(q2*x%d2val2 - q5*q7)
1336 0 : unary%d3val1 = pi*(-3.0_dp*q8*x%d2val1 + q2*x%d3val1 - q9*pow3(x%d1val1))
1337 0 : unary%d2val1_d1val2 = pi*(-q10*q8 + q2*x%d2val1_d1val2 - q4*q9*x%d1val2 - q6*x%d2val1)
1338 0 : unary%d1val1_d2val2 = -pi*(pi*x%d1val1*(q11 + q3*q7) + q10*q6 - q2*x%d1val1_d2val2)
1339 0 : unary%d3val2 = pi*(-3.0_dp*pi*q11*x%d1val2 + q2*x%d3val2 - q9*pow3(x%d1val2))
1340 0 : end function sinpi_self
1341 :
1342 0 : function cospi_self(x) result(unary)
1343 : type(auto_diff_real_2var_order3), intent(in) :: x
1344 : type(auto_diff_real_2var_order3) :: unary
1345 : real(dp) :: q11
1346 : real(dp) :: q10
1347 : real(dp) :: q9
1348 : real(dp) :: q8
1349 : real(dp) :: q7
1350 : real(dp) :: q6
1351 : real(dp) :: q5
1352 : real(dp) :: q4
1353 : real(dp) :: q3
1354 : real(dp) :: q2
1355 : real(dp) :: q1
1356 : real(dp) :: q0
1357 0 : q0 = pi*x%val
1358 0 : q1 = cos(q0)
1359 0 : q2 = sin(q0)
1360 0 : q3 = pi*q2
1361 0 : q4 = pow2(x%d1val1)
1362 0 : q5 = pi*q1
1363 0 : q6 = q5*x%d1val2
1364 0 : q7 = pow2(x%d1val2)
1365 0 : q8 = q5*x%d1val1
1366 0 : q9 = q2*pow2(pi)
1367 0 : q10 = 2.0_dp*x%d1val1_d1val2
1368 0 : q11 = q1*x%d2val2
1369 0 : unary%val = q1
1370 0 : unary%d1val1 = -q3*x%d1val1
1371 0 : unary%d1val2 = -q3*x%d1val2
1372 0 : unary%d2val1 = -pi*(q2*x%d2val1 + q4*q5)
1373 0 : unary%d1val1_d1val2 = -pi*(q2*x%d1val1_d1val2 + q6*x%d1val1)
1374 0 : unary%d2val2 = -pi*(q2*x%d2val2 + q5*q7)
1375 0 : unary%d3val1 = pi*(-3.0_dp*q8*x%d2val1 - q2*x%d3val1 + q9*pow3(x%d1val1))
1376 0 : unary%d2val1_d1val2 = pi*(-q10*q8 - q2*x%d2val1_d1val2 + q4*q9*x%d1val2 - q6*x%d2val1)
1377 0 : unary%d1val1_d2val2 = -pi*(-pi*x%d1val1*(-q11 + q3*q7) + q10*q6 + q2*x%d1val1_d2val2)
1378 0 : unary%d3val2 = pi*(-3.0_dp*pi*q11*x%d1val2 - q2*x%d3val2 + q9*pow3(x%d1val2))
1379 0 : end function cospi_self
1380 :
1381 0 : function tanpi_self(x) result(unary)
1382 : type(auto_diff_real_2var_order3), intent(in) :: x
1383 : type(auto_diff_real_2var_order3) :: unary
1384 : real(dp) :: q21
1385 : real(dp) :: q20
1386 : real(dp) :: q19
1387 : real(dp) :: q18
1388 : real(dp) :: q17
1389 : real(dp) :: q16
1390 : real(dp) :: q15
1391 : real(dp) :: q14
1392 : real(dp) :: q13
1393 : real(dp) :: q12
1394 : real(dp) :: q11
1395 : real(dp) :: q10
1396 : real(dp) :: q9
1397 : real(dp) :: q8
1398 : real(dp) :: q7
1399 : real(dp) :: q6
1400 : real(dp) :: q5
1401 : real(dp) :: q4
1402 : real(dp) :: q3
1403 : real(dp) :: q2
1404 : real(dp) :: q1
1405 : real(dp) :: q0
1406 0 : q0 = pi*x%val
1407 0 : q1 = tan(q0)
1408 0 : q2 = pow2(q1)
1409 0 : q3 = q2 + 1
1410 0 : q4 = pi*q3
1411 0 : q5 = pi*q1
1412 0 : q6 = 2.0_dp*pow2(x%d1val1)
1413 0 : q7 = q5*q6 + x%d2val1
1414 0 : q8 = 2.0_dp*q5
1415 0 : q9 = q8*x%d1val2
1416 0 : q10 = powm1(pow2(cos(q0)))
1417 0 : q11 = pi*q10
1418 0 : q12 = pow2(x%d1val2)
1419 0 : q13 = 6.0_dp*q5
1420 0 : q14 = pow2(pi)
1421 0 : q15 = q14*pow3(x%d1val1)
1422 0 : q16 = 4.0_dp*q2
1423 0 : q17 = 2.0_dp*q3
1424 0 : q18 = pi*x%d1val1
1425 0 : q19 = 4.0_dp*q1
1426 0 : q20 = q19*x%d1val1_d1val2
1427 0 : q21 = q14*pow3(x%d1val2)
1428 0 : unary%val = q1
1429 0 : unary%d1val1 = q4*x%d1val1
1430 0 : unary%d1val2 = q4*x%d1val2
1431 0 : unary%d2val1 = q4*q7
1432 0 : unary%d1val1_d1val2 = q11*(q9*x%d1val1 + x%d1val1_d1val2)
1433 0 : unary%d2val2 = q4*(q12*q8 + x%d2val2)
1434 0 : unary%d3val1 = q4*(q13*x%d1val1*x%d2val1 + q15*q16 + q15*q17 + x%d3val1)
1435 0 : unary%d2val1_d1val2 = q11*(q10*q14*q6*x%d1val2 + q18*q20 + q7*q9 + x%d2val1_d1val2)
1436 0 : unary%d1val1_d2val2 = q4*(0.5_dp*q18*(4.0_dp*q12*q4 + 8.0_dp*pi*q12*q2 + q19*x%d2val2) + pi*q20*x%d1val2 + x%d1val1_d2val2)
1437 0 : unary%d3val2 = q4*(q13*x%d1val2*x%d2val2 + q16*q21 + q17*q21 + x%d3val2)
1438 0 : end function tanpi_self
1439 :
1440 63902 : function sinh_self(x) result(unary)
1441 : type(auto_diff_real_2var_order3), intent(in) :: x
1442 : type(auto_diff_real_2var_order3) :: unary
1443 : real(dp) :: q8
1444 : real(dp) :: q7
1445 : real(dp) :: q6
1446 : real(dp) :: q5
1447 : real(dp) :: q4
1448 : real(dp) :: q3
1449 : real(dp) :: q2
1450 : real(dp) :: q1
1451 : real(dp) :: q0
1452 63902 : q0 = sinh(x%val)
1453 63902 : q1 = cosh(x%val)
1454 63902 : q2 = q1*x%d1val2
1455 63902 : q3 = pow2(x%d1val1)
1456 63902 : q4 = q0*x%d1val2
1457 63902 : q5 = pow2(x%d1val2)
1458 63902 : q6 = q0*x%d1val1
1459 63902 : q7 = 2.0_dp*x%d1val1_d1val2
1460 63902 : q8 = q0*x%d2val2
1461 63902 : unary%val = q0
1462 63902 : unary%d1val1 = q1*x%d1val1
1463 63902 : unary%d1val2 = q2
1464 63902 : unary%d2val1 = q0*q3 + q1*x%d2val1
1465 63902 : unary%d1val1_d1val2 = q1*x%d1val1_d1val2 + q4*x%d1val1
1466 63902 : unary%d2val2 = q0*q5 + q1*x%d2val2
1467 63902 : unary%d3val1 = 3.0_dp*q6*x%d2val1 + q1*x%d3val1 + q1*pow3(x%d1val1)
1468 63902 : unary%d2val1_d1val2 = q1*x%d2val1_d1val2 + q2*q3 + q4*x%d2val1 + q6*q7
1469 63902 : unary%d1val1_d2val2 = q1*x%d1val1_d2val2 + q4*q7 + x%d1val1*(q1*q5 + q8)
1470 63902 : unary%d3val2 = 3.0_dp*q8*x%d1val2 + q1*x%d3val2 + q1*pow3(x%d1val2)
1471 63902 : end function sinh_self
1472 :
1473 63902 : function cosh_self(x) result(unary)
1474 : type(auto_diff_real_2var_order3), intent(in) :: x
1475 : type(auto_diff_real_2var_order3) :: unary
1476 : real(dp) :: q8
1477 : real(dp) :: q7
1478 : real(dp) :: q6
1479 : real(dp) :: q5
1480 : real(dp) :: q4
1481 : real(dp) :: q3
1482 : real(dp) :: q2
1483 : real(dp) :: q1
1484 : real(dp) :: q0
1485 63902 : q0 = cosh(x%val)
1486 63902 : q1 = sinh(x%val)
1487 63902 : q2 = q1*x%d1val2
1488 63902 : q3 = pow2(x%d1val1)
1489 63902 : q4 = q0*x%d1val2
1490 63902 : q5 = pow2(x%d1val2)
1491 63902 : q6 = q0*x%d1val1
1492 63902 : q7 = 2.0_dp*x%d1val1_d1val2
1493 63902 : q8 = q0*x%d2val2
1494 63902 : unary%val = q0
1495 63902 : unary%d1val1 = q1*x%d1val1
1496 63902 : unary%d1val2 = q2
1497 63902 : unary%d2val1 = q0*q3 + q1*x%d2val1
1498 63902 : unary%d1val1_d1val2 = q1*x%d1val1_d1val2 + q4*x%d1val1
1499 63902 : unary%d2val2 = q0*q5 + q1*x%d2val2
1500 63902 : unary%d3val1 = 3.0_dp*q6*x%d2val1 + q1*x%d3val1 + q1*pow3(x%d1val1)
1501 63902 : unary%d2val1_d1val2 = q1*x%d2val1_d1val2 + q2*q3 + q4*x%d2val1 + q6*q7
1502 63902 : unary%d1val1_d2val2 = q1*x%d1val1_d2val2 + q4*q7 + x%d1val1*(q1*q5 + q8)
1503 63902 : unary%d3val2 = 3.0_dp*q8*x%d1val2 + q1*x%d3val2 + q1*pow3(x%d1val2)
1504 63902 : end function cosh_self
1505 :
1506 211266 : function tanh_self(x) result(unary)
1507 : type(auto_diff_real_2var_order3), intent(in) :: x
1508 : type(auto_diff_real_2var_order3) :: unary
1509 : real(dp) :: q15
1510 : real(dp) :: q14
1511 : real(dp) :: q13
1512 : real(dp) :: q12
1513 : real(dp) :: q11
1514 : real(dp) :: q10
1515 : real(dp) :: q9
1516 : real(dp) :: q8
1517 : real(dp) :: q7
1518 : real(dp) :: q6
1519 : real(dp) :: q5
1520 : real(dp) :: q4
1521 : real(dp) :: q3
1522 : real(dp) :: q2
1523 : real(dp) :: q1
1524 : real(dp) :: q0
1525 211266 : q0 = tanh(x%val)
1526 211266 : q1 = pow2(q0)
1527 211266 : q2 = q1 - 1
1528 211266 : q3 = powm1(pow2(cosh(x%val)))
1529 211266 : q4 = pow2(x%d1val1)
1530 211266 : q5 = 2.0_dp*q0
1531 211266 : q6 = q4*q5 - x%d2val1
1532 211266 : q7 = q5*x%d1val2
1533 211266 : q8 = pow2(x%d1val2)
1534 211266 : q9 = pow3(x%d1val1)
1535 211266 : q10 = q0*x%d1val1
1536 211266 : q11 = 6.0_dp*q1
1537 211266 : q12 = 4.0_dp*x%d1val1_d1val2
1538 211266 : q13 = q8*x%d1val1
1539 211266 : q14 = q0*x%d1val2
1540 211266 : q15 = pow3(x%d1val2)
1541 211266 : unary%val = q0
1542 211266 : unary%d1val1 = -q2*x%d1val1
1543 211266 : unary%d1val2 = -q2*x%d1val2
1544 211266 : unary%d2val1 = -q3*q6
1545 211266 : unary%d1val1_d1val2 = -q3*(q7*x%d1val1 - x%d1val1_d1val2)
1546 211266 : unary%d2val2 = -q3*(q5*q8 - x%d2val2)
1547 211266 : unary%d3val1 = q3*(-2.0_dp*q9 - 6.0_dp*q10*x%d2val1 + q11*q9 + x%d3val1)
1548 211266 : unary%d2val1_d1val2 = -q3*(2.0_dp*q3*q4*x%d1val2 + q10*q12 - q6*q7 - x%d2val1_d1val2)
1549 211266 : unary%d1val1_d2val2 = -q3*(2.0_dp*q13 - q11*q13 + q12*q14 + q5*x%d1val1*x%d2val2 - x%d1val1_d2val2)
1550 211266 : unary%d3val2 = q3*(-2.0_dp*q15 - 6.0_dp*q14*x%d2val2 + q11*q15 + x%d3val2)
1551 211266 : end function tanh_self
1552 :
1553 0 : function asin_self(x) result(unary)
1554 : type(auto_diff_real_2var_order3), intent(in) :: x
1555 : type(auto_diff_real_2var_order3) :: unary
1556 : real(dp) :: q15
1557 : real(dp) :: q14
1558 : real(dp) :: q13
1559 : real(dp) :: q12
1560 : real(dp) :: q11
1561 : real(dp) :: q10
1562 : real(dp) :: q9
1563 : real(dp) :: q8
1564 : real(dp) :: q7
1565 : real(dp) :: q6
1566 : real(dp) :: q5
1567 : real(dp) :: q4
1568 : real(dp) :: q3
1569 : real(dp) :: q2
1570 : real(dp) :: q1
1571 : real(dp) :: q0
1572 0 : q0 = pow2(x%val)
1573 0 : q1 = 1 - q0
1574 0 : q2 = powm1(sqrt(q1))
1575 0 : q3 = powm1(pow3(sqrt(q1)))
1576 0 : q4 = pow2(x%d1val1)
1577 0 : q5 = q0 - 1
1578 0 : q6 = q4*x%val - q5*x%d2val1
1579 0 : q7 = x%d1val1*x%d1val2
1580 0 : q8 = pow2(x%d1val2)
1581 0 : q9 = powm1(pow5(sqrt(q1)))
1582 0 : q10 = 3.0_dp*q0
1583 0 : q11 = pow2(q5)
1584 0 : q12 = q5*x%d1val1
1585 0 : q13 = 2.0_dp*x%d1val1_d1val2*x%val
1586 0 : q14 = q5*x%d1val2
1587 0 : q15 = x%d2val2*x%val
1588 0 : unary%val = asin(x%val)
1589 0 : unary%d1val1 = q2*x%d1val1
1590 0 : unary%d1val2 = q2*x%d1val2
1591 0 : unary%d2val1 = q3*q6
1592 0 : unary%d1val1_d1val2 = q3*(q1*x%d1val1_d1val2 + q7*x%val)
1593 0 : unary%d2val2 = q3*(-q5*x%d2val2 + q8*x%val)
1594 0 : unary%d3val1 = q9*(q10*pow3(x%d1val1) + q11*x%d3val1 - q12*(3.0_dp*x%d2val1*x%val + q4))
1595 : unary%d2val1_d1val2 = (q1*q6*x%d1val2*x%val &
1596 0 : + q5*(-2.0_dp*q0*q4*x%d1val2 - q11*x%d2val1_d1val2 + q12*(q13 + q7)))*powm1(pow7(sqrt(q1)))
1597 0 : unary%d1val1_d2val2 = q9*(q11*x%d1val1_d2val2 - q13*q14 - x%d1val1*(-q10*q8 + q5*(q15 + q8)))
1598 0 : unary%d3val2 = q9*(q10*pow3(x%d1val2) + q11*x%d3val2 - q14*(3.0_dp*q15 + q8))
1599 0 : end function asin_self
1600 :
1601 0 : function acos_self(x) result(unary)
1602 : type(auto_diff_real_2var_order3), intent(in) :: x
1603 : type(auto_diff_real_2var_order3) :: unary
1604 : real(dp) :: q17
1605 : real(dp) :: q16
1606 : real(dp) :: q15
1607 : real(dp) :: q14
1608 : real(dp) :: q13
1609 : real(dp) :: q12
1610 : real(dp) :: q11
1611 : real(dp) :: q10
1612 : real(dp) :: q9
1613 : real(dp) :: q8
1614 : real(dp) :: q7
1615 : real(dp) :: q6
1616 : real(dp) :: q5
1617 : real(dp) :: q4
1618 : real(dp) :: q3
1619 : real(dp) :: q2
1620 : real(dp) :: q1
1621 : real(dp) :: q0
1622 0 : q0 = pow2(x%val)
1623 0 : q1 = 1 - q0
1624 0 : q2 = powm1(sqrt(q1))
1625 0 : q3 = powm1(pow3(sqrt(q1)))
1626 0 : q4 = pow2(x%d1val1)
1627 0 : q5 = q4*x%val
1628 0 : q6 = q0 - 1
1629 0 : q7 = q6*x%d2val1
1630 0 : q8 = x%d1val1*x%d1val2
1631 0 : q9 = q6*x%d1val1_d1val2
1632 0 : q10 = pow2(x%d1val2)
1633 0 : q11 = powm1(pow7(sqrt(q1)))
1634 0 : q12 = pow3(q6)
1635 0 : q13 = 3.0_dp*q0
1636 0 : q14 = q1*q13
1637 0 : q15 = pow2(q6)
1638 0 : q16 = 2.0_dp*x%val
1639 0 : q17 = x%d2val2*x%val
1640 0 : unary%val = acos(x%val)
1641 0 : unary%d1val1 = -q2*x%d1val1
1642 0 : unary%d1val2 = -q2*x%d1val2
1643 0 : unary%d2val1 = q3*(-q5 + q7)
1644 0 : unary%d1val1_d1val2 = -q3*(q8*x%val - q9)
1645 0 : unary%d2val2 = q3*(-q10*x%val + q6*x%d2val2)
1646 0 : unary%d3val1 = q11*(q12*x%d3val1 - q14*pow3(x%d1val1) - q15*x%d1val1*(3.0_dp*x%d2val1*x%val + q4))
1647 : unary%d2val1_d1val2 = q11*(-q1*x%d1val2*x%val*(q5 - q7) &
1648 0 : + q6*(2.0_dp*q0*q4*x%d1val2 + q15*x%d2val1_d1val2 - q6*x%d1val1*(q16*x%d1val1_d1val2 + q8)))
1649 0 : unary%d1val1_d2val2 = (-q15*x%d1val1_d2val2 + q16*q9*x%d1val2 + x%d1val1*(-q10*q13 + q6*(q10 + q17)))*powm1(pow5(sqrt(q1)))
1650 0 : unary%d3val2 = q11*(q12*x%d3val2 - q14*pow3(x%d1val2) - q15*x%d1val2*(3.0_dp*q17 + q10))
1651 0 : end function acos_self
1652 :
1653 275390 : function atan_self(x) result(unary)
1654 : type(auto_diff_real_2var_order3), intent(in) :: x
1655 : type(auto_diff_real_2var_order3) :: unary
1656 : real(dp) :: q17
1657 : real(dp) :: q16
1658 : real(dp) :: q15
1659 : real(dp) :: q14
1660 : real(dp) :: q13
1661 : real(dp) :: q12
1662 : real(dp) :: q11
1663 : real(dp) :: q10
1664 : real(dp) :: q9
1665 : real(dp) :: q8
1666 : real(dp) :: q7
1667 : real(dp) :: q6
1668 : real(dp) :: q5
1669 : real(dp) :: q4
1670 : real(dp) :: q3
1671 : real(dp) :: q2
1672 : real(dp) :: q1
1673 : real(dp) :: q0
1674 275390 : q0 = pow2(x%val)
1675 275390 : q1 = q0 + 1
1676 275390 : q2 = powm1(q1)
1677 275390 : q3 = pow2(q1)
1678 275390 : q4 = powm1(q3)
1679 275390 : q5 = pow2(x%d1val1)
1680 275390 : q6 = 2.0_dp*x%val
1681 275390 : q7 = q5*q6
1682 275390 : q8 = q1*x%d2val1
1683 275390 : q9 = x%d1val1*x%d1val2
1684 275390 : q10 = q1*x%d1val1_d1val2
1685 275390 : q11 = pow2(x%d1val2)
1686 275390 : q12 = powm1(pow3(q1))
1687 275390 : q13 = 8.0_dp*q0
1688 275390 : q14 = 2.0_dp*x%d1val1
1689 275390 : q15 = q1*q14
1690 275390 : q16 = 4.0_dp*q0
1691 275390 : q17 = x%d2val2*x%val
1692 275390 : unary%val = atan(x%val)
1693 275390 : unary%d1val1 = q2*x%d1val1
1694 275390 : unary%d1val2 = q2*x%d1val2
1695 275390 : unary%d2val1 = q4*(-q7 + q8)
1696 275390 : unary%d1val1_d1val2 = q4*(q10 - q6*q9)
1697 275390 : unary%d2val2 = q4*(q1*x%d2val2 - q11*q6)
1698 275390 : unary%d3val1 = q12*(q13*pow3(x%d1val1) - q15*(3.0_dp*x%d2val1*x%val + q5) + q3*x%d3val1)
1699 275390 : unary%d2val1_d1val2 = q12*(-q15*(q6*x%d1val1_d1val2 + q9) + q16*q5*x%d1val2 + q3*x%d2val1_d1val2 + q6*x%d1val2*(q7 - q8))
1700 275390 : unary%d1val1_d2val2 = q12*(-4.0_dp*q10*x%d1val2*x%val - q14*(q1*(q11 + q17) - q11*q16) + q3*x%d1val1_d2val2)
1701 275390 : unary%d3val2 = q12*(-2.0_dp*q1*x%d1val2*(3.0_dp*q17 + q11) + q13*pow3(x%d1val2) + q3*x%d3val2)
1702 275390 : end function atan_self
1703 :
1704 0 : function asinpi_self(x) result(unary)
1705 : type(auto_diff_real_2var_order3), intent(in) :: x
1706 : type(auto_diff_real_2var_order3) :: unary
1707 : real(dp) :: q18
1708 : real(dp) :: q17
1709 : real(dp) :: q16
1710 : real(dp) :: q15
1711 : real(dp) :: q14
1712 : real(dp) :: q13
1713 : real(dp) :: q12
1714 : real(dp) :: q11
1715 : real(dp) :: q10
1716 : real(dp) :: q9
1717 : real(dp) :: q8
1718 : real(dp) :: q7
1719 : real(dp) :: q6
1720 : real(dp) :: q5
1721 : real(dp) :: q4
1722 : real(dp) :: q3
1723 : real(dp) :: q2
1724 : real(dp) :: q1
1725 : real(dp) :: q0
1726 0 : q0 = powm1(pi)
1727 0 : q1 = pow2(x%val)
1728 0 : q2 = 1 - q1
1729 0 : q3 = q0*powm1(sqrt(q2))
1730 0 : q4 = pow2(x%d1val1)
1731 0 : q5 = q1 - 1
1732 0 : q6 = q0*powm1(pow3(sqrt(q2)))
1733 0 : q7 = x%d1val2*x%val
1734 0 : q8 = pow2(x%d1val2)
1735 0 : q9 = 3.0_dp*q1
1736 0 : q10 = pow2(q5)
1737 0 : q11 = q0*powm1(pow5(sqrt(q2)))
1738 0 : q12 = pow4(x%val)
1739 0 : q13 = 2.0_dp*q1
1740 0 : q14 = q4*x%d1val2
1741 0 : q15 = 2.0_dp*x%d1val1_d1val2
1742 0 : q16 = q15*x%d1val1
1743 0 : q17 = pow3(x%val)
1744 0 : q18 = x%d2val2*x%val
1745 0 : unary%val = q0*asin(x%val)
1746 0 : unary%d1val1 = q3*x%d1val1
1747 0 : unary%d1val2 = q3*x%d1val2
1748 0 : unary%d2val1 = q6*(q4*x%val - q5*x%d2val1)
1749 0 : unary%d1val1_d1val2 = q6*(q2*x%d1val1_d1val2 + q7*x%d1val1)
1750 0 : unary%d2val2 = q6*(-q5*x%d2val2 + q8*x%val)
1751 0 : unary%d3val1 = q11*(q10*x%d3val1 - q5*x%d1val1*(3.0_dp*x%d2val1*x%val + q4) + q9*pow3(x%d1val1))
1752 : unary%d2val1_d1val2 = q3*(q12*x%d2val1_d1val2 + q13*q14 - q13*x%d2val1_d1val2 + q14 &
1753 0 : - q16*q17 + q16*x%val - q17*x%d1val2*x%d2val1 + q7*x%d2val1 + x%d2val1_d1val2)*powm1(q12 - q13 + 1)
1754 0 : unary%d1val1_d2val2 = q11*(q10*x%d1val1_d2val2 - q15*q5*q7 - x%d1val1*(q5*(q18 + q8) - q8*q9))
1755 0 : unary%d3val2 = q11*(q10*x%d3val2 - q5*x%d1val2*(3.0_dp*q18 + q8) + q9*pow3(x%d1val2))
1756 0 : end function asinpi_self
1757 :
1758 0 : function acospi_self(x) result(unary)
1759 : type(auto_diff_real_2var_order3), intent(in) :: x
1760 : type(auto_diff_real_2var_order3) :: unary
1761 : real(dp) :: q20
1762 : real(dp) :: q19
1763 : real(dp) :: q18
1764 : real(dp) :: q17
1765 : real(dp) :: q16
1766 : real(dp) :: q15
1767 : real(dp) :: q14
1768 : real(dp) :: q13
1769 : real(dp) :: q12
1770 : real(dp) :: q11
1771 : real(dp) :: q10
1772 : real(dp) :: q9
1773 : real(dp) :: q8
1774 : real(dp) :: q7
1775 : real(dp) :: q6
1776 : real(dp) :: q5
1777 : real(dp) :: q4
1778 : real(dp) :: q3
1779 : real(dp) :: q2
1780 : real(dp) :: q1
1781 : real(dp) :: q0
1782 0 : q0 = powm1(pi)
1783 0 : q1 = pow2(x%val)
1784 0 : q2 = 1 - q1
1785 0 : q3 = q0*powm1(sqrt(q2))
1786 0 : q4 = pow2(x%d1val1)
1787 0 : q5 = q1 - 1
1788 0 : q6 = q0*powm1(pow3(sqrt(q2)))
1789 0 : q7 = x%d1val2*x%val
1790 0 : q8 = q5*x%d1val1_d1val2
1791 0 : q9 = pow2(x%d1val2)
1792 0 : q10 = pow3(q5)
1793 0 : q11 = 3.0_dp*q1
1794 0 : q12 = q1*(3.0_dp - q11)
1795 0 : q13 = pow2(q5)
1796 0 : q14 = q0*powm1(pow7(sqrt(q2)))
1797 0 : q15 = pow4(x%val)
1798 0 : q16 = 2.0_dp*q1
1799 0 : q17 = 2.0_dp*x%d1val1*x%d1val1_d1val2
1800 0 : q18 = q4*x%d1val2
1801 0 : q19 = pow3(x%val)
1802 0 : q20 = x%d2val2*x%val
1803 0 : unary%val = q0*acos(x%val)
1804 0 : unary%d1val1 = -q3*x%d1val1
1805 0 : unary%d1val2 = -q3*x%d1val2
1806 0 : unary%d2val1 = q6*(-q4*x%val + q5*x%d2val1)
1807 0 : unary%d1val1_d1val2 = -q6*(q7*x%d1val1 - q8)
1808 0 : unary%d2val2 = q6*(q5*x%d2val2 - q9*x%val)
1809 0 : unary%d3val1 = q14*(q10*x%d3val1 - q12*pow3(x%d1val1) - q13*x%d1val1*(3.0_dp*x%d2val1*x%val + q4))
1810 : unary%d2val1_d1val2 = q3*(-q15*x%d2val1_d1val2 - q16*q18 + q16*x%d2val1_d1val2 + q17*q19 - q17*x%val &
1811 0 : - q18 + q19*x%d1val2*x%d2val1 - q7*x%d2val1 - x%d2val1_d1val2)*powm1(q15 - q16 + 1)
1812 0 : unary%d1val1_d2val2 = q0*(2.0_dp*q7*q8 - q13*x%d1val1_d2val2 + x%d1val1*(-q11*q9 + q5*(q20 + q9)))*powm1(pow5(sqrt(q2)))
1813 0 : unary%d3val2 = q14*(q10*x%d3val2 - q12*pow3(x%d1val2) - q13*x%d1val2*(3.0_dp*q20 + q9))
1814 0 : end function acospi_self
1815 :
1816 0 : function atanpi_self(x) result(unary)
1817 : type(auto_diff_real_2var_order3), intent(in) :: x
1818 : type(auto_diff_real_2var_order3) :: unary
1819 : real(dp) :: q24
1820 : real(dp) :: q23
1821 : real(dp) :: q22
1822 : real(dp) :: q21
1823 : real(dp) :: q20
1824 : real(dp) :: q19
1825 : real(dp) :: q18
1826 : real(dp) :: q17
1827 : real(dp) :: q16
1828 : real(dp) :: q15
1829 : real(dp) :: q14
1830 : real(dp) :: q13
1831 : real(dp) :: q12
1832 : real(dp) :: q11
1833 : real(dp) :: q10
1834 : real(dp) :: q9
1835 : real(dp) :: q8
1836 : real(dp) :: q7
1837 : real(dp) :: q6
1838 : real(dp) :: q5
1839 : real(dp) :: q4
1840 : real(dp) :: q3
1841 : real(dp) :: q2
1842 : real(dp) :: q1
1843 : real(dp) :: q0
1844 0 : q0 = pow2(x%val)
1845 0 : q1 = pi*q0
1846 0 : q2 = powm1(pi + q1)
1847 0 : q3 = pow2(x%d1val1)
1848 0 : q4 = 2.0_dp*x%val
1849 0 : q5 = pow4(x%val)
1850 0 : q6 = pi*q5
1851 0 : q7 = powm1(2.0_dp*q1 + pi + q6)
1852 0 : q8 = q4*x%d1val2
1853 0 : q9 = pow2(x%d1val2)
1854 0 : q10 = powm1(3.0_dp*q1 + 3.0_dp*q6 + pi*pow6(x%val) + pi)
1855 0 : q11 = pow3(x%d1val1)
1856 0 : q12 = x%d1val1*x%val
1857 0 : q13 = 6.0_dp*x%d2val1
1858 0 : q14 = 2.0_dp*q0
1859 0 : q15 = pow3(x%val)
1860 0 : q16 = q15*x%d1val1
1861 0 : q17 = 6.0_dp*q0
1862 0 : q18 = 4.0_dp*x%d1val1_d1val2
1863 0 : q19 = 2.0_dp*x%d1val2
1864 0 : q20 = q18*x%d1val2
1865 0 : q21 = 2.0_dp*x%d1val1
1866 0 : q22 = q15*x%d2val2
1867 0 : q23 = pow3(x%d1val2)
1868 0 : q24 = 6.0_dp*x%d1val2
1869 0 : unary%val = powm1(pi)*atan(x%val)
1870 0 : unary%d1val1 = q2*x%d1val1
1871 0 : unary%d1val2 = q2*x%d1val2
1872 0 : unary%d2val1 = q7*(q0*x%d2val1 - q3*q4 + x%d2val1)
1873 0 : unary%d1val1_d1val2 = q7*(q0*x%d1val1_d1val2 - q8*x%d1val1 + x%d1val1_d1val2)
1874 0 : unary%d2val2 = q7*(q0*x%d2val2 - q4*q9 + x%d2val2)
1875 0 : unary%d3val1 = q10*(-2.0_dp*q11 + q11*q17 - q12*q13 - q13*q16 + q14*x%d3val1 + q5*x%d3val1 + x%d3val1)
1876 : unary%d2val1_d1val2 = q10 * &
1877 : (-q12*q18 + q14*x%d2val1_d1val2 - q15*q19*x%d2val1 - q16*q18 &
1878 0 : + q17*q3*x%d1val2 - q19*q3 + q5*x%d2val1_d1val2 - q8*x%d2val1 + x%d2val1_d1val2)
1879 : unary%d1val1_d2val2 = q10 * &
1880 : (q14*x%d1val1_d2val2 - q15*q20 + q17*q9*x%d1val1 - q20*x%val &
1881 0 : - q21*q22 - q21*q9 - q4*x%d1val1*x%d2val2 + q5*x%d1val1_d2val2 + x%d1val1_d2val2)
1882 0 : unary%d3val2 = q10*(-2.0_dp*q23 + q14*x%d3val2 + q17*q23 - q22*q24 - q24*x%d2val2*x%val + q5*x%d3val2 + x%d3val2)
1883 0 : end function atanpi_self
1884 :
1885 0 : function asinh_self(x) result(unary)
1886 : type(auto_diff_real_2var_order3), intent(in) :: x
1887 : type(auto_diff_real_2var_order3) :: unary
1888 : real(dp) :: q15
1889 : real(dp) :: q14
1890 : real(dp) :: q13
1891 : real(dp) :: q12
1892 : real(dp) :: q11
1893 : real(dp) :: q10
1894 : real(dp) :: q9
1895 : real(dp) :: q8
1896 : real(dp) :: q7
1897 : real(dp) :: q6
1898 : real(dp) :: q5
1899 : real(dp) :: q4
1900 : real(dp) :: q3
1901 : real(dp) :: q2
1902 : real(dp) :: q1
1903 : real(dp) :: q0
1904 0 : q0 = pow2(x%val)
1905 0 : q1 = q0 + 1
1906 0 : q2 = powm1(sqrt(q1))
1907 0 : q3 = powm1(pow3(sqrt(q1)))
1908 0 : q4 = pow2(x%d1val1)
1909 0 : q5 = q4*x%val
1910 0 : q6 = q1*x%d2val1
1911 0 : q7 = x%d1val1*x%d1val2
1912 0 : q8 = q1*x%d1val1_d1val2
1913 0 : q9 = pow2(x%d1val2)
1914 0 : q10 = powm1(pow5(sqrt(q1)))
1915 0 : q11 = 3.0_dp*q0
1916 0 : q12 = pow2(q1)
1917 0 : q13 = q1*x%d1val1
1918 0 : q14 = x%d1val2*x%val
1919 0 : q15 = x%d2val2*x%val
1920 0 : unary%val = asinh(x%val)
1921 0 : unary%d1val1 = q2*x%d1val1
1922 0 : unary%d1val2 = q2*x%d1val2
1923 0 : unary%d2val1 = q3*(-q5 + q6)
1924 0 : unary%d1val1_d1val2 = q3*(-q7*x%val + q8)
1925 0 : unary%d2val2 = q3*(q1*x%d2val2 - q9*x%val)
1926 0 : unary%d3val1 = q10*(q11*pow3(x%d1val1) + q12*x%d3val1 - q13*(3.0_dp*x%d2val1*x%val + q4))
1927 : unary%d2val1_d1val2 = q10*(2.0_dp*q0*q4*x%d1val2 &
1928 0 : + q12*x%d2val1_d1val2 - q13*(2.0_dp*x%d1val1_d1val2*x%val + q7) + q14*(q5 - q6))
1929 0 : unary%d1val1_d2val2 = q10*(-2.0_dp*q14*q8 + q12*x%d1val1_d2val2 - x%d1val1*(q1*(q15 + q9) - q11*q9))
1930 0 : unary%d3val2 = q10*(-q1*x%d1val2*(3.0_dp*q15 + q9) + q11*pow3(x%d1val2) + q12*x%d3val2)
1931 0 : end function asinh_self
1932 :
1933 0 : function acosh_self(x) result(unary)
1934 : type(auto_diff_real_2var_order3), intent(in) :: x
1935 : type(auto_diff_real_2var_order3) :: unary
1936 : real(dp) :: q15
1937 : real(dp) :: q14
1938 : real(dp) :: q13
1939 : real(dp) :: q12
1940 : real(dp) :: q11
1941 : real(dp) :: q10
1942 : real(dp) :: q9
1943 : real(dp) :: q8
1944 : real(dp) :: q7
1945 : real(dp) :: q6
1946 : real(dp) :: q5
1947 : real(dp) :: q4
1948 : real(dp) :: q3
1949 : real(dp) :: q2
1950 : real(dp) :: q1
1951 : real(dp) :: q0
1952 0 : q0 = pow2(x%val)
1953 0 : q1 = q0 - 1
1954 0 : q2 = powm1(sqrt(q1))
1955 0 : q3 = powm1(pow3(sqrt(q1)))
1956 0 : q4 = pow2(x%d1val1)
1957 0 : q5 = q4*x%val
1958 0 : q6 = q1*x%d2val1
1959 0 : q7 = x%d1val1*x%d1val2
1960 0 : q8 = q1*x%d1val1_d1val2
1961 0 : q9 = pow2(x%d1val2)
1962 0 : q10 = powm1(pow5(sqrt(q1)))
1963 0 : q11 = 3.0_dp*q0
1964 0 : q12 = pow2(q1)
1965 0 : q13 = q1*x%d1val1
1966 0 : q14 = x%d1val2*x%val
1967 0 : q15 = x%d2val2*x%val
1968 0 : unary%val = acosh(x%val)
1969 0 : unary%d1val1 = q2*x%d1val1
1970 0 : unary%d1val2 = q2*x%d1val2
1971 0 : unary%d2val1 = q3*(-q5 + q6)
1972 0 : unary%d1val1_d1val2 = q3*(-q7*x%val + q8)
1973 0 : unary%d2val2 = q3*(q1*x%d2val2 - q9*x%val)
1974 0 : unary%d3val1 = q10*(q11*pow3(x%d1val1) + q12*x%d3val1 - q13*(3.0_dp*x%d2val1*x%val + q4))
1975 : unary%d2val1_d1val2 = q10*(2.0_dp*q0*q4*x%d1val2 &
1976 0 : + q12*x%d2val1_d1val2 - q13*(2.0_dp*x%d1val1_d1val2*x%val + q7) + q14*(q5 - q6))
1977 0 : unary%d1val1_d2val2 = q10*(-2.0_dp*q14*q8 + q12*x%d1val1_d2val2 - x%d1val1*(q1*(q15 + q9) - q11*q9))
1978 0 : unary%d3val2 = q10*(-q1*x%d1val2*(3.0_dp*q15 + q9) + q11*pow3(x%d1val2) + q12*x%d3val2)
1979 0 : end function acosh_self
1980 :
1981 0 : function atanh_self(x) result(unary)
1982 : type(auto_diff_real_2var_order3), intent(in) :: x
1983 : type(auto_diff_real_2var_order3) :: unary
1984 : real(dp) :: q17
1985 : real(dp) :: q16
1986 : real(dp) :: q15
1987 : real(dp) :: q14
1988 : real(dp) :: q13
1989 : real(dp) :: q12
1990 : real(dp) :: q11
1991 : real(dp) :: q10
1992 : real(dp) :: q9
1993 : real(dp) :: q8
1994 : real(dp) :: q7
1995 : real(dp) :: q6
1996 : real(dp) :: q5
1997 : real(dp) :: q4
1998 : real(dp) :: q3
1999 : real(dp) :: q2
2000 : real(dp) :: q1
2001 : real(dp) :: q0
2002 0 : q0 = pow2(x%val)
2003 0 : q1 = q0 - 1
2004 0 : q2 = powm1(q1)
2005 0 : q3 = pow2(q1)
2006 0 : q4 = powm1(q3)
2007 0 : q5 = pow2(x%d1val1)
2008 0 : q6 = 2.0_dp*x%val
2009 0 : q7 = -q1*x%d2val1 + q5*q6
2010 0 : q8 = x%d1val1*x%d1val2
2011 0 : q9 = q1*x%d1val1_d1val2
2012 0 : q10 = pow2(x%d1val2)
2013 0 : q11 = powm1(pow4(q1))
2014 0 : q12 = pow3(q1)
2015 0 : q13 = 8.0_dp*q0*(1 - q0)
2016 0 : q14 = 2.0_dp*x%d1val1
2017 0 : q15 = powm1(q12)
2018 0 : q16 = 4.0_dp*q0
2019 0 : q17 = x%d2val2*x%val
2020 0 : unary%val = atanh(x%val)
2021 0 : unary%d1val1 = -q2*x%d1val1
2022 0 : unary%d1val2 = -q2*x%d1val2
2023 0 : unary%d2val1 = q4*q7
2024 0 : unary%d1val1_d1val2 = q4*(q6*q8 - q9)
2025 0 : unary%d2val2 = q4*(-q1*x%d2val2 + q10*q6)
2026 0 : unary%d3val1 = q11*(-q12*x%d3val1 + q13*pow3(x%d1val1) + q14*q3*(3.0_dp*x%d2val1*x%val + q5))
2027 0 : unary%d2val1_d1val2 = q15*(q1*q14*(q6*x%d1val1_d1val2 + q8) - q16*q5*x%d1val2 - q3*x%d2val1_d1val2 - q6*q7*x%d1val2)
2028 0 : unary%d1val1_d2val2 = q15*(4.0_dp*q9*x%d1val2*x%val + q14*(q1*(q10 + q17) - q10*q16) - q3*x%d1val1_d2val2)
2029 0 : unary%d3val2 = q11*(2.0_dp*q3*x%d1val2*(3.0_dp*q17 + q10) - q12*x%d3val2 + q13*pow3(x%d1val2))
2030 0 : end function atanh_self
2031 :
2032 4808162 : function sqrt_self(x) result(unary)
2033 : type(auto_diff_real_2var_order3), intent(in) :: x
2034 : type(auto_diff_real_2var_order3) :: unary
2035 : real(dp) :: q12
2036 : real(dp) :: q11
2037 : real(dp) :: q10
2038 : real(dp) :: q9
2039 : real(dp) :: q8
2040 : real(dp) :: q7
2041 : real(dp) :: q6
2042 : real(dp) :: q5
2043 : real(dp) :: q4
2044 : real(dp) :: q3
2045 : real(dp) :: q2
2046 : real(dp) :: q1
2047 : real(dp) :: q0
2048 4808162 : q0 = sqrt(x%val)
2049 4808162 : q1 = 0.5_dp*powm1(q0)
2050 4808162 : q2 = 2.0_dp*x%val
2051 4808162 : q3 = q2*x%d2val1
2052 4808162 : q4 = pow2(x%d1val1)
2053 4808162 : q5 = 0.25_dp*powm1(pow3(sqrt(x%val)))
2054 4808162 : q6 = q2*x%d2val2
2055 4808162 : q7 = pow2(x%d1val2)
2056 4808162 : q8 = x%d1val1*x%val
2057 4808162 : q9 = 4.0_dp*pow2(x%val)
2058 4808162 : q10 = 0.125_dp*powm1(pow5(sqrt(x%val)))
2059 4808162 : q11 = 4.0_dp*x%d1val1_d1val2
2060 4808162 : q12 = x%d1val2*x%val
2061 4808162 : unary%val = q0
2062 4808162 : unary%d1val1 = q1*x%d1val1
2063 4808162 : unary%d1val2 = q1*x%d1val2
2064 4808162 : unary%d2val1 = q5*(q3 - q4)
2065 4808162 : unary%d1val1_d1val2 = q5*(q2*x%d1val1_d1val2 - x%d1val1*x%d1val2)
2066 4808162 : unary%d2val2 = q5*(q6 - q7)
2067 4808162 : unary%d3val1 = q10*(-6.0_dp*q8*x%d2val1 + 3.0_dp*pow3(x%d1val1) + q9*x%d3val1)
2068 4808162 : unary%d2val1_d1val2 = q10*(3.0_dp*q4*x%d1val2 - q11*q8 - q3*x%d1val2 + q9*x%d2val1_d1val2)
2069 4808162 : unary%d1val1_d2val2 = q10*(-q11*q12 + q9*x%d1val1_d2val2 + x%d1val1*(3.0_dp*q7 - q6))
2070 4808162 : unary%d3val2 = q10*(-6.0_dp*q12*x%d2val2 + 3.0_dp*pow3(x%d1val2) + q9*x%d3val2)
2071 4808162 : end function sqrt_self
2072 :
2073 4078178 : function pow2_self(x) result(unary)
2074 : type(auto_diff_real_2var_order3), intent(in) :: x
2075 : type(auto_diff_real_2var_order3) :: unary
2076 : real(dp) :: q2
2077 : real(dp) :: q1
2078 : real(dp) :: q0
2079 4078178 : q0 = 2.0_dp*x%val
2080 4078178 : q1 = 2.0_dp*x%d1val2
2081 4078178 : q2 = 4.0_dp*x%d1val1_d1val2
2082 4078178 : unary%val = pow2(x%val)
2083 4078178 : unary%d1val1 = q0*x%d1val1
2084 4078178 : unary%d1val2 = q0*x%d1val2
2085 4078178 : unary%d2val1 = 2.0_dp*pow2(x%d1val1) + q0*x%d2val1
2086 4078178 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2 + q1*x%d1val1
2087 4078178 : unary%d2val2 = 2.0_dp*pow2(x%d1val2) + q0*x%d2val2
2088 4078178 : unary%d3val1 = 6.0_dp*x%d1val1*x%d2val1 + q0*x%d3val1
2089 4078178 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2 + q1*x%d2val1 + q2*x%d1val1
2090 4078178 : unary%d1val1_d2val2 = 2.0_dp*x%d1val1*x%d2val2 + q0*x%d1val1_d2val2 + q2*x%d1val2
2091 4078178 : unary%d3val2 = 6.0_dp*x%d1val2*x%d2val2 + q0*x%d3val2
2092 4078178 : end function pow2_self
2093 :
2094 1299658 : function pow3_self(x) result(unary)
2095 : type(auto_diff_real_2var_order3), intent(in) :: x
2096 : type(auto_diff_real_2var_order3) :: unary
2097 : real(dp) :: q6
2098 : real(dp) :: q5
2099 : real(dp) :: q4
2100 : real(dp) :: q3
2101 : real(dp) :: q2
2102 : real(dp) :: q1
2103 : real(dp) :: q0
2104 1299658 : q0 = 3.0_dp*pow2(x%val)
2105 1299658 : q1 = x%d2val1*x%val
2106 1299658 : q2 = 2.0_dp*pow2(x%d1val1) + q1
2107 1299658 : q3 = 3.0_dp*x%val
2108 1299658 : q4 = x%d1val1_d1val2*x%val
2109 1299658 : q5 = x%d2val2*x%val
2110 1299658 : q6 = pow2(x%d1val2)
2111 1299658 : unary%val = pow3(x%val)
2112 1299658 : unary%d1val1 = q0*x%d1val1
2113 1299658 : unary%d1val2 = q0*x%d1val2
2114 1299658 : unary%d2val1 = q2*q3
2115 1299658 : unary%d1val1_d1val2 = q3*(2.0_dp*x%d1val1*x%d1val2 + q4)
2116 1299658 : unary%d2val2 = q3*(2.0_dp*q6 + q5)
2117 1299658 : unary%d3val1 = 18.0_dp*q1*x%d1val1 + 6.0_dp*pow3(x%d1val1) + q0*x%d3val1
2118 : unary%d2val1_d1val2 = 3.0_dp*q2*x%d1val2 &
2119 1299658 : + q3*(4.0_dp*x%d1val1*x%d1val1_d1val2 + x%d1val2*x%d2val1 + x%d2val1_d1val2*x%val)
2120 1299658 : unary%d1val1_d2val2 = 12.0_dp*q4*x%d1val2 + 6.0_dp*x%d1val1*(q5 + q6) + q0*x%d1val1_d2val2
2121 1299658 : unary%d3val2 = 18.0_dp*q5*x%d1val2 + 6.0_dp*pow3(x%d1val2) + q0*x%d3val2
2122 1299658 : end function pow3_self
2123 :
2124 96186 : function pow4_self(x) result(unary)
2125 : type(auto_diff_real_2var_order3), intent(in) :: x
2126 : type(auto_diff_real_2var_order3) :: unary
2127 : real(dp) :: q9
2128 : real(dp) :: q8
2129 : real(dp) :: q7
2130 : real(dp) :: q6
2131 : real(dp) :: q5
2132 : real(dp) :: q4
2133 : real(dp) :: q3
2134 : real(dp) :: q2
2135 : real(dp) :: q1
2136 : real(dp) :: q0
2137 96186 : q0 = 4.0_dp*pow3(x%val)
2138 96186 : q1 = x%d2val1*x%val
2139 96186 : q2 = 3.0_dp*pow2(x%d1val1) + q1
2140 96186 : q3 = pow2(x%val)
2141 96186 : q4 = 4.0_dp*q3
2142 96186 : q5 = x%d1val1_d1val2*x%val
2143 96186 : q6 = 3.0_dp*x%d1val1
2144 96186 : q7 = x%d2val2*x%val
2145 96186 : q8 = pow2(x%d1val2)
2146 96186 : q9 = 4.0_dp*x%val
2147 96186 : unary%val = pow4(x%val)
2148 96186 : unary%d1val1 = q0*x%d1val1
2149 96186 : unary%d1val2 = q0*x%d1val2
2150 96186 : unary%d2val1 = q2*q4
2151 96186 : unary%d1val1_d1val2 = q4*(q5 + q6*x%d1val2)
2152 96186 : unary%d2val2 = q4*(3.0_dp*q8 + q7)
2153 96186 : unary%d3val1 = q9*(6.0_dp*pow3(x%d1val1) + 9.0_dp*q1*x%d1val1 + q3*x%d3val1)
2154 : unary%d2val1_d1val2 = q9*(2.0_dp*q2*x%d1val2 &
2155 96186 : + x%val*(6.0_dp*x%d1val1*x%d1val1_d1val2 + x%d1val2*x%d2val1 + x%d2val1_d1val2*x%val))
2156 96186 : unary%d1val1_d2val2 = q9*(6.0_dp*q5*x%d1val2 + q3*x%d1val1_d2val2 + q6*(2.0_dp*q8 + q7))
2157 96186 : unary%d3val2 = q9*(6.0_dp*pow3(x%d1val2) + 9.0_dp*q7*x%d1val2 + q3*x%d3val2)
2158 96186 : end function pow4_self
2159 :
2160 0 : function pow5_self(x) result(unary)
2161 : type(auto_diff_real_2var_order3), intent(in) :: x
2162 : type(auto_diff_real_2var_order3) :: unary
2163 : real(dp) :: q9
2164 : real(dp) :: q8
2165 : real(dp) :: q7
2166 : real(dp) :: q6
2167 : real(dp) :: q5
2168 : real(dp) :: q4
2169 : real(dp) :: q3
2170 : real(dp) :: q2
2171 : real(dp) :: q1
2172 : real(dp) :: q0
2173 0 : q0 = 5.0_dp*pow4(x%val)
2174 0 : q1 = x%d2val1*x%val
2175 0 : q2 = 4.0_dp*pow2(x%d1val1) + q1
2176 0 : q3 = 5.0_dp*pow3(x%val)
2177 0 : q4 = x%d1val1_d1val2*x%val
2178 0 : q5 = 4.0_dp*x%d1val1
2179 0 : q6 = x%d2val2*x%val
2180 0 : q7 = pow2(x%d1val2)
2181 0 : q8 = pow2(x%val)
2182 0 : q9 = 5.0_dp*q8
2183 0 : unary%val = pow5(x%val)
2184 0 : unary%d1val1 = q0*x%d1val1
2185 0 : unary%d1val2 = q0*x%d1val2
2186 0 : unary%d2val1 = q2*q3
2187 0 : unary%d1val1_d1val2 = q3*(q4 + q5*x%d1val2)
2188 0 : unary%d2val2 = q3*(4.0_dp*q7 + q6)
2189 0 : unary%d3val1 = q9*(12.0_dp*q1*x%d1val1 + 12.0_dp*pow3(x%d1val1) + q8*x%d3val1)
2190 : unary%d2val1_d1val2 = q9*(3.0_dp*q2*x%d1val2 &
2191 0 : + x%val*(8.0_dp*x%d1val1*x%d1val1_d1val2 + x%d1val2*x%d2val1 + x%d2val1_d1val2*x%val))
2192 0 : unary%d1val1_d2val2 = q9*(8.0_dp*q4*x%d1val2 + q5*(3.0_dp*q7 + q6) + q8*x%d1val1_d2val2)
2193 0 : unary%d3val2 = q9*(12.0_dp*q6*x%d1val2 + 12.0_dp*pow3(x%d1val2) + q8*x%d3val2)
2194 0 : end function pow5_self
2195 :
2196 0 : function pow6_self(x) result(unary)
2197 : type(auto_diff_real_2var_order3), intent(in) :: x
2198 : type(auto_diff_real_2var_order3) :: unary
2199 : real(dp) :: q9
2200 : real(dp) :: q8
2201 : real(dp) :: q7
2202 : real(dp) :: q6
2203 : real(dp) :: q5
2204 : real(dp) :: q4
2205 : real(dp) :: q3
2206 : real(dp) :: q2
2207 : real(dp) :: q1
2208 : real(dp) :: q0
2209 0 : q0 = 6.0_dp*pow5(x%val)
2210 0 : q1 = x%d2val1*x%val
2211 0 : q2 = 5.0_dp*pow2(x%d1val1) + q1
2212 0 : q3 = 6.0_dp*pow4(x%val)
2213 0 : q4 = x%d1val1_d1val2*x%val
2214 0 : q5 = 5.0_dp*x%d1val1
2215 0 : q6 = x%d2val2*x%val
2216 0 : q7 = pow2(x%d1val2)
2217 0 : q8 = pow2(x%val)
2218 0 : q9 = 6.0_dp*pow3(x%val)
2219 0 : unary%val = pow6(x%val)
2220 0 : unary%d1val1 = q0*x%d1val1
2221 0 : unary%d1val2 = q0*x%d1val2
2222 0 : unary%d2val1 = q2*q3
2223 0 : unary%d1val1_d1val2 = q3*(q4 + q5*x%d1val2)
2224 0 : unary%d2val2 = q3*(5.0_dp*q7 + q6)
2225 0 : unary%d3val1 = q9*(15.0_dp*q1*x%d1val1 + 20.0_dp*pow3(x%d1val1) + q8*x%d3val1)
2226 : unary%d2val1_d1val2 = q9*(4.0_dp*q2*x%d1val2 + &
2227 0 : x%val*(10.0_dp*x%d1val1*x%d1val1_d1val2 + x%d1val2*x%d2val1 + x%d2val1_d1val2*x%val))
2228 0 : unary%d1val1_d2val2 = q9*(10.0_dp*q4*x%d1val2 + q5*(4.0_dp*q7 + q6) + q8*x%d1val1_d2val2)
2229 0 : unary%d3val2 = q9*(15.0_dp*q6*x%d1val2 + 20.0_dp*pow3(x%d1val2) + q8*x%d3val2)
2230 0 : end function pow6_self
2231 :
2232 0 : function pow7_self(x) result(unary)
2233 : type(auto_diff_real_2var_order3), intent(in) :: x
2234 : type(auto_diff_real_2var_order3) :: unary
2235 : real(dp) :: q9
2236 : real(dp) :: q8
2237 : real(dp) :: q7
2238 : real(dp) :: q6
2239 : real(dp) :: q5
2240 : real(dp) :: q4
2241 : real(dp) :: q3
2242 : real(dp) :: q2
2243 : real(dp) :: q1
2244 : real(dp) :: q0
2245 0 : q0 = 7.0_dp*pow6(x%val)
2246 0 : q1 = x%d2val1*x%val
2247 0 : q2 = 6.0_dp*pow2(x%d1val1) + q1
2248 0 : q3 = 7.0_dp*pow5(x%val)
2249 0 : q4 = x%d1val1_d1val2*x%val
2250 0 : q5 = 6.0_dp*x%d1val1
2251 0 : q6 = x%d2val2*x%val
2252 0 : q7 = pow2(x%d1val2)
2253 0 : q8 = pow2(x%val)
2254 0 : q9 = 7.0_dp*pow4(x%val)
2255 0 : unary%val = pow7(x%val)
2256 0 : unary%d1val1 = q0*x%d1val1
2257 0 : unary%d1val2 = q0*x%d1val2
2258 0 : unary%d2val1 = q2*q3
2259 0 : unary%d1val1_d1val2 = q3*(q4 + q5*x%d1val2)
2260 0 : unary%d2val2 = q3*(6.0_dp*q7 + q6)
2261 0 : unary%d3val1 = q9*(18.0_dp*q1*x%d1val1 + 30.0_dp*pow3(x%d1val1) + q8*x%d3val1)
2262 : unary%d2val1_d1val2 = q9*(5.0_dp*q2*x%d1val2 &
2263 0 : + x%val*(12.0_dp*x%d1val1*x%d1val1_d1val2 + x%d1val2*x%d2val1 + x%d2val1_d1val2*x%val))
2264 0 : unary%d1val1_d2val2 = q9*(12.0_dp*q4*x%d1val2 + q5*(5.0_dp*q7 + q6) + q8*x%d1val1_d2val2)
2265 0 : unary%d3val2 = q9*(18.0_dp*q6*x%d1val2 + 30.0_dp*pow3(x%d1val2) + q8*x%d3val2)
2266 0 : end function pow7_self
2267 :
2268 0 : function pow8_self(x) result(unary)
2269 : type(auto_diff_real_2var_order3), intent(in) :: x
2270 : type(auto_diff_real_2var_order3) :: unary
2271 : real(dp) :: q9
2272 : real(dp) :: q8
2273 : real(dp) :: q7
2274 : real(dp) :: q6
2275 : real(dp) :: q5
2276 : real(dp) :: q4
2277 : real(dp) :: q3
2278 : real(dp) :: q2
2279 : real(dp) :: q1
2280 : real(dp) :: q0
2281 0 : q0 = 8.0_dp*pow7(x%val)
2282 0 : q1 = x%d2val1*x%val
2283 0 : q2 = 7.0_dp*pow2(x%d1val1) + q1
2284 0 : q3 = 8.0_dp*pow6(x%val)
2285 0 : q4 = x%d1val1_d1val2*x%val
2286 0 : q5 = 7.0_dp*x%d1val1
2287 0 : q6 = x%d2val2*x%val
2288 0 : q7 = pow2(x%d1val2)
2289 0 : q8 = pow2(x%val)
2290 0 : q9 = 8.0_dp*pow5(x%val)
2291 0 : unary%val = pow8(x%val)
2292 0 : unary%d1val1 = q0*x%d1val1
2293 0 : unary%d1val2 = q0*x%d1val2
2294 0 : unary%d2val1 = q2*q3
2295 0 : unary%d1val1_d1val2 = q3*(q4 + q5*x%d1val2)
2296 0 : unary%d2val2 = q3*(7.0_dp*q7 + q6)
2297 0 : unary%d3val1 = q9*(21.0_dp*q1*x%d1val1 + 42.0_dp*pow3(x%d1val1) + q8*x%d3val1)
2298 : unary%d2val1_d1val2 = q9*(6.0_dp*q2*x%d1val2 &
2299 0 : + x%val*(14.0_dp*x%d1val1*x%d1val1_d1val2 + x%d1val2*x%d2val1 + x%d2val1_d1val2*x%val))
2300 0 : unary%d1val1_d2val2 = q9*(14.0_dp*q4*x%d1val2 + q5*(6.0_dp*q7 + q6) + q8*x%d1val1_d2val2)
2301 0 : unary%d3val2 = q9*(21.0_dp*q6*x%d1val2 + 42.0_dp*pow3(x%d1val2) + q8*x%d3val2)
2302 0 : end function pow8_self
2303 :
2304 32062 : function abs_self(x) result(unary)
2305 : type(auto_diff_real_2var_order3), intent(in) :: x
2306 : type(auto_diff_real_2var_order3) :: unary
2307 : real(dp) :: q0
2308 32062 : q0 = sgn(x%val)
2309 32062 : unary%val = Abs(x%val)
2310 32062 : unary%d1val1 = q0*x%d1val1
2311 32062 : unary%d1val2 = q0*x%d1val2
2312 32062 : unary%d2val1 = q0*x%d2val1
2313 32062 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
2314 32062 : unary%d2val2 = q0*x%d2val2
2315 32062 : unary%d3val1 = q0*x%d3val1
2316 32062 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
2317 32062 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
2318 32062 : unary%d3val2 = q0*x%d3val2
2319 32062 : end function abs_self
2320 :
2321 8049226 : function add_self(x, y) result(binary)
2322 : type(auto_diff_real_2var_order3), intent(in) :: x
2323 : type(auto_diff_real_2var_order3), intent(in) :: y
2324 : type(auto_diff_real_2var_order3) :: binary
2325 8049226 : binary%val = x%val + y%val
2326 8049226 : binary%d1val1 = x%d1val1 + y%d1val1
2327 8049226 : binary%d1val2 = x%d1val2 + y%d1val2
2328 8049226 : binary%d2val1 = x%d2val1 + y%d2val1
2329 8049226 : binary%d1val1_d1val2 = x%d1val1_d1val2 + y%d1val1_d1val2
2330 8049226 : binary%d2val2 = x%d2val2 + y%d2val2
2331 8049226 : binary%d3val1 = x%d3val1 + y%d3val1
2332 8049226 : binary%d2val1_d1val2 = x%d2val1_d1val2 + y%d2val1_d1val2
2333 8049226 : binary%d1val1_d2val2 = x%d1val1_d2val2 + y%d1val1_d2val2
2334 8049226 : binary%d3val2 = x%d3val2 + y%d3val2
2335 8049226 : end function add_self
2336 :
2337 307452 : function add_self_real(x, y) result(unary)
2338 : type(auto_diff_real_2var_order3), intent(in) :: x
2339 : real(dp), intent(in) :: y
2340 : type(auto_diff_real_2var_order3) :: unary
2341 307452 : unary%val = x%val + y
2342 307452 : unary%d1val1 = x%d1val1
2343 307452 : unary%d1val2 = x%d1val2
2344 307452 : unary%d2val1 = x%d2val1
2345 307452 : unary%d1val1_d1val2 = x%d1val1_d1val2
2346 307452 : unary%d2val2 = x%d2val2
2347 307452 : unary%d3val1 = x%d3val1
2348 307452 : unary%d2val1_d1val2 = x%d2val1_d1val2
2349 307452 : unary%d1val1_d2val2 = x%d1val1_d2val2
2350 307452 : unary%d3val2 = x%d3val2
2351 307452 : end function add_self_real
2352 :
2353 9712102 : function add_real_self(z, x) result(unary)
2354 : real(dp), intent(in) :: z
2355 : type(auto_diff_real_2var_order3), intent(in) :: x
2356 : type(auto_diff_real_2var_order3) :: unary
2357 9712102 : unary%val = x%val + z
2358 9712102 : unary%d1val1 = x%d1val1
2359 9712102 : unary%d1val2 = x%d1val2
2360 9712102 : unary%d2val1 = x%d2val1
2361 9712102 : unary%d1val1_d1val2 = x%d1val1_d1val2
2362 9712102 : unary%d2val2 = x%d2val2
2363 9712102 : unary%d3val1 = x%d3val1
2364 9712102 : unary%d2val1_d1val2 = x%d2val1_d1val2
2365 9712102 : unary%d1val1_d2val2 = x%d1val1_d2val2
2366 9712102 : unary%d3val2 = x%d3val2
2367 9712102 : end function add_real_self
2368 :
2369 0 : function add_self_int(x, y) result(unary)
2370 : type(auto_diff_real_2var_order3), intent(in) :: x
2371 : integer, intent(in) :: y
2372 : type(auto_diff_real_2var_order3) :: unary
2373 : real(dp) :: y_dp
2374 0 : y_dp = y
2375 0 : unary%val = x%val + y_dp
2376 0 : unary%d1val1 = x%d1val1
2377 0 : unary%d1val2 = x%d1val2
2378 0 : unary%d2val1 = x%d2val1
2379 0 : unary%d1val1_d1val2 = x%d1val1_d1val2
2380 0 : unary%d2val2 = x%d2val2
2381 0 : unary%d3val1 = x%d3val1
2382 0 : unary%d2val1_d1val2 = x%d2val1_d1val2
2383 0 : unary%d1val1_d2val2 = x%d1val1_d2val2
2384 0 : unary%d3val2 = x%d3val2
2385 0 : end function add_self_int
2386 :
2387 211266 : function add_int_self(z, x) result(unary)
2388 : integer, intent(in) :: z
2389 : type(auto_diff_real_2var_order3), intent(in) :: x
2390 : type(auto_diff_real_2var_order3) :: unary
2391 : real(dp) :: y_dp
2392 211266 : y_dp = z
2393 211266 : unary%val = x%val + y_dp
2394 211266 : unary%d1val1 = x%d1val1
2395 211266 : unary%d1val2 = x%d1val2
2396 211266 : unary%d2val1 = x%d2val1
2397 211266 : unary%d1val1_d1val2 = x%d1val1_d1val2
2398 211266 : unary%d2val2 = x%d2val2
2399 211266 : unary%d3val1 = x%d3val1
2400 211266 : unary%d2val1_d1val2 = x%d2val1_d1val2
2401 211266 : unary%d1val1_d2val2 = x%d1val1_d2val2
2402 211266 : unary%d3val2 = x%d3val2
2403 211266 : end function add_int_self
2404 :
2405 1767420 : function sub_self(x, y) result(binary)
2406 : type(auto_diff_real_2var_order3), intent(in) :: x
2407 : type(auto_diff_real_2var_order3), intent(in) :: y
2408 : type(auto_diff_real_2var_order3) :: binary
2409 1767420 : binary%val = x%val - y%val
2410 1767420 : binary%d1val1 = x%d1val1 - y%d1val1
2411 1767420 : binary%d1val2 = x%d1val2 - y%d1val2
2412 1767420 : binary%d2val1 = x%d2val1 - y%d2val1
2413 1767420 : binary%d1val1_d1val2 = x%d1val1_d1val2 - y%d1val1_d1val2
2414 1767420 : binary%d2val2 = x%d2val2 - y%d2val2
2415 1767420 : binary%d3val1 = x%d3val1 - y%d3val1
2416 1767420 : binary%d2val1_d1val2 = x%d2val1_d1val2 - y%d2val1_d1val2
2417 1767420 : binary%d1val1_d2val2 = x%d1val1_d2val2 - y%d1val1_d2val2
2418 1767420 : binary%d3val2 = x%d3val2 - y%d3val2
2419 1767420 : end function sub_self
2420 :
2421 550576 : function sub_self_real(x, y) result(unary)
2422 : type(auto_diff_real_2var_order3), intent(in) :: x
2423 : real(dp), intent(in) :: y
2424 : type(auto_diff_real_2var_order3) :: unary
2425 550576 : unary%val = x%val - y
2426 550576 : unary%d1val1 = x%d1val1
2427 550576 : unary%d1val2 = x%d1val2
2428 550576 : unary%d2val1 = x%d2val1
2429 550576 : unary%d1val1_d1val2 = x%d1val1_d1val2
2430 550576 : unary%d2val2 = x%d2val2
2431 550576 : unary%d3val1 = x%d3val1
2432 550576 : unary%d2val1_d1val2 = x%d2val1_d1val2
2433 550576 : unary%d1val1_d2val2 = x%d1val1_d2val2
2434 550576 : unary%d3val2 = x%d3val2
2435 550576 : end function sub_self_real
2436 :
2437 1395640 : function sub_real_self(z, x) result(unary)
2438 : real(dp), intent(in) :: z
2439 : type(auto_diff_real_2var_order3), intent(in) :: x
2440 : type(auto_diff_real_2var_order3) :: unary
2441 1395640 : unary%val = -x%val + z
2442 1395640 : unary%d1val1 = -x%d1val1
2443 1395640 : unary%d1val2 = -x%d1val2
2444 1395640 : unary%d2val1 = -x%d2val1
2445 1395640 : unary%d1val1_d1val2 = -x%d1val1_d1val2
2446 1395640 : unary%d2val2 = -x%d2val2
2447 1395640 : unary%d3val1 = -x%d3val1
2448 1395640 : unary%d2val1_d1val2 = -x%d2val1_d1val2
2449 1395640 : unary%d1val1_d2val2 = -x%d1val1_d2val2
2450 1395640 : unary%d3val2 = -x%d3val2
2451 1395640 : end function sub_real_self
2452 :
2453 0 : function sub_self_int(x, y) result(unary)
2454 : type(auto_diff_real_2var_order3), intent(in) :: x
2455 : integer, intent(in) :: y
2456 : type(auto_diff_real_2var_order3) :: unary
2457 : real(dp) :: y_dp
2458 0 : y_dp = y
2459 0 : unary%val = x%val - y_dp
2460 0 : unary%d1val1 = x%d1val1
2461 0 : unary%d1val2 = x%d1val2
2462 0 : unary%d2val1 = x%d2val1
2463 0 : unary%d1val1_d1val2 = x%d1val1_d1val2
2464 0 : unary%d2val2 = x%d2val2
2465 0 : unary%d3val1 = x%d3val1
2466 0 : unary%d2val1_d1val2 = x%d2val1_d1val2
2467 0 : unary%d1val1_d2val2 = x%d1val1_d2val2
2468 0 : unary%d3val2 = x%d3val2
2469 0 : end function sub_self_int
2470 :
2471 0 : function sub_int_self(z, x) result(unary)
2472 : integer, intent(in) :: z
2473 : type(auto_diff_real_2var_order3), intent(in) :: x
2474 : type(auto_diff_real_2var_order3) :: unary
2475 : real(dp) :: y_dp
2476 0 : y_dp = z
2477 0 : unary%val = -x%val + y_dp
2478 0 : unary%d1val1 = -x%d1val1
2479 0 : unary%d1val2 = -x%d1val2
2480 0 : unary%d2val1 = -x%d2val1
2481 0 : unary%d1val1_d1val2 = -x%d1val1_d1val2
2482 0 : unary%d2val2 = -x%d2val2
2483 0 : unary%d3val1 = -x%d3val1
2484 0 : unary%d2val1_d1val2 = -x%d2val1_d1val2
2485 0 : unary%d1val1_d2val2 = -x%d1val1_d2val2
2486 0 : unary%d3val2 = -x%d3val2
2487 0 : end function sub_int_self
2488 :
2489 10296048 : function mul_self(x, y) result(binary)
2490 : type(auto_diff_real_2var_order3), intent(in) :: x
2491 : type(auto_diff_real_2var_order3), intent(in) :: y
2492 : type(auto_diff_real_2var_order3) :: binary
2493 : real(dp) :: q1
2494 : real(dp) :: q0
2495 10296048 : q0 = 2.0_dp*x%d1val1
2496 10296048 : q1 = 2.0_dp*y%d1val2
2497 10296048 : binary%val = x%val*y%val
2498 10296048 : binary%d1val1 = x%d1val1*y%val + x%val*y%d1val1
2499 10296048 : binary%d1val2 = x%d1val2*y%val + x%val*y%d1val2
2500 10296048 : binary%d2val1 = q0*y%d1val1 + x%d2val1*y%val + x%val*y%d2val1
2501 10296048 : binary%d1val1_d1val2 = x%d1val1*y%d1val2 + x%d1val1_d1val2*y%val + x%d1val2*y%d1val1 + x%val*y%d1val1_d1val2
2502 10296048 : binary%d2val2 = q1*x%d1val2 + x%d2val2*y%val + x%val*y%d2val2
2503 10296048 : binary%d3val1 = 3.0_dp*x%d1val1*y%d2val1 + 3.0_dp*x%d2val1*y%d1val1 + x%d3val1*y%val + x%val*y%d3val1
2504 : binary%d2val1_d1val2 = 2.0_dp*x%d1val1_d1val2*y%d1val1 + q0*y%d1val1_d1val2 &
2505 10296048 : + x%d1val2*y%d2val1 + x%d2val1*y%d1val2 + x%d2val1_d1val2*y%val + x%val*y%d2val1_d1val2
2506 : binary%d1val1_d2val2 = 2.0_dp*x%d1val2*y%d1val1_d1val2 + q1*x%d1val1_d1val2 &
2507 10296048 : + x%d1val1*y%d2val2 + x%d1val1_d2val2*y%val + x%d2val2*y%d1val1 + x%val*y%d1val1_d2val2
2508 10296048 : binary%d3val2 = 3.0_dp*x%d1val2*y%d2val2 + 3.0_dp*x%d2val2*y%d1val2 + x%d3val2*y%val + x%val*y%d3val2
2509 10296048 : end function mul_self
2510 :
2511 3963606 : function mul_self_real(x, y) result(unary)
2512 : type(auto_diff_real_2var_order3), intent(in) :: x
2513 : real(dp), intent(in) :: y
2514 : type(auto_diff_real_2var_order3) :: unary
2515 3963606 : unary%val = x%val*y
2516 3963606 : unary%d1val1 = x%d1val1*y
2517 3963606 : unary%d1val2 = x%d1val2*y
2518 3963606 : unary%d2val1 = x%d2val1*y
2519 3963606 : unary%d1val1_d1val2 = x%d1val1_d1val2*y
2520 3963606 : unary%d2val2 = x%d2val2*y
2521 3963606 : unary%d3val1 = x%d3val1*y
2522 3963606 : unary%d2val1_d1val2 = x%d2val1_d1val2*y
2523 3963606 : unary%d1val1_d2val2 = x%d1val1_d2val2*y
2524 3963606 : unary%d3val2 = x%d3val2*y
2525 3963606 : end function mul_self_real
2526 :
2527 14560480 : function mul_real_self(z, x) result(unary)
2528 : real(dp), intent(in) :: z
2529 : type(auto_diff_real_2var_order3), intent(in) :: x
2530 : type(auto_diff_real_2var_order3) :: unary
2531 14560480 : unary%val = x%val*z
2532 14560480 : unary%d1val1 = x%d1val1*z
2533 14560480 : unary%d1val2 = x%d1val2*z
2534 14560480 : unary%d2val1 = x%d2val1*z
2535 14560480 : unary%d1val1_d1val2 = x%d1val1_d1val2*z
2536 14560480 : unary%d2val2 = x%d2val2*z
2537 14560480 : unary%d3val1 = x%d3val1*z
2538 14560480 : unary%d2val1_d1val2 = x%d2val1_d1val2*z
2539 14560480 : unary%d1val1_d2val2 = x%d1val1_d2val2*z
2540 14560480 : unary%d3val2 = x%d3val2*z
2541 14560480 : end function mul_real_self
2542 :
2543 0 : function mul_self_int(x, y) result(unary)
2544 : type(auto_diff_real_2var_order3), intent(in) :: x
2545 : integer, intent(in) :: y
2546 : type(auto_diff_real_2var_order3) :: unary
2547 : real(dp) :: y_dp
2548 0 : y_dp = y
2549 0 : unary%val = x%val*y_dp
2550 0 : unary%d1val1 = x%d1val1*y_dp
2551 0 : unary%d1val2 = x%d1val2*y_dp
2552 0 : unary%d2val1 = x%d2val1*y_dp
2553 0 : unary%d1val1_d1val2 = x%d1val1_d1val2*y_dp
2554 0 : unary%d2val2 = x%d2val2*y_dp
2555 0 : unary%d3val1 = x%d3val1*y_dp
2556 0 : unary%d2val1_d1val2 = x%d2val1_d1val2*y_dp
2557 0 : unary%d1val1_d2val2 = x%d1val1_d2val2*y_dp
2558 0 : unary%d3val2 = x%d3val2*y_dp
2559 0 : end function mul_self_int
2560 :
2561 0 : function mul_int_self(z, x) result(unary)
2562 : integer, intent(in) :: z
2563 : type(auto_diff_real_2var_order3), intent(in) :: x
2564 : type(auto_diff_real_2var_order3) :: unary
2565 : real(dp) :: y_dp
2566 0 : y_dp = z
2567 0 : unary%val = x%val*y_dp
2568 0 : unary%d1val1 = x%d1val1*y_dp
2569 0 : unary%d1val2 = x%d1val2*y_dp
2570 0 : unary%d2val1 = x%d2val1*y_dp
2571 0 : unary%d1val1_d1val2 = x%d1val1_d1val2*y_dp
2572 0 : unary%d2val2 = x%d2val2*y_dp
2573 0 : unary%d3val1 = x%d3val1*y_dp
2574 0 : unary%d2val1_d1val2 = x%d2val1_d1val2*y_dp
2575 0 : unary%d1val1_d2val2 = x%d1val1_d2val2*y_dp
2576 0 : unary%d3val2 = x%d3val2*y_dp
2577 0 : end function mul_int_self
2578 :
2579 6486004 : function div_self(x, y) result(binary)
2580 : type(auto_diff_real_2var_order3), intent(in) :: x
2581 : type(auto_diff_real_2var_order3), intent(in) :: y
2582 : type(auto_diff_real_2var_order3) :: binary
2583 : real(dp) :: q22
2584 : real(dp) :: q21
2585 : real(dp) :: q20
2586 : real(dp) :: q19
2587 : real(dp) :: q18
2588 : real(dp) :: q17
2589 : real(dp) :: q16
2590 : real(dp) :: q15
2591 : real(dp) :: q14
2592 : real(dp) :: q13
2593 : real(dp) :: q12
2594 : real(dp) :: q11
2595 : real(dp) :: q10
2596 : real(dp) :: q9
2597 : real(dp) :: q8
2598 : real(dp) :: q7
2599 : real(dp) :: q6
2600 : real(dp) :: q5
2601 : real(dp) :: q4
2602 : real(dp) :: q3
2603 : real(dp) :: q2
2604 : real(dp) :: q1
2605 : real(dp) :: q0
2606 6486004 : q0 = pow2(y%val)
2607 6486004 : q1 = powm1(q0)
2608 6486004 : q2 = x%d1val1*y%val
2609 6486004 : q3 = x%val*y%d1val1
2610 6486004 : q4 = x%d1val2*y%val
2611 6486004 : q5 = x%val*y%d1val2
2612 6486004 : q6 = pow3(y%val)
2613 6486004 : q7 = powm1(q6)
2614 6486004 : q8 = q0*x%d2val1
2615 6486004 : q9 = 2.0_dp*y%d1val1
2616 6486004 : q10 = y%d2val1*y%val
2617 6486004 : q11 = pow2(y%d1val1)
2618 6486004 : q12 = 2.0_dp*q11
2619 6486004 : q13 = -q10 + q12
2620 6486004 : q14 = q0*x%d1val1_d1val2
2621 6486004 : q15 = 2.0_dp*y%d1val2
2622 6486004 : q16 = x%d1val2*y%d1val1
2623 6486004 : q17 = q0*x%d2val2
2624 6486004 : q18 = y%d2val2*y%val
2625 6486004 : q19 = pow2(y%d1val2)
2626 6486004 : q20 = 2.0_dp*q19 - q18
2627 6486004 : q21 = powm1(pow4(y%val))
2628 6486004 : q22 = 2.0_dp*y%d1val1_d1val2
2629 6486004 : binary%val = x%val*powm1(y%val)
2630 6486004 : binary%d1val1 = q1*(q2 - q3)
2631 6486004 : binary%d1val2 = q1*(q4 - q5)
2632 6486004 : binary%d2val1 = q7*(q13*x%val - q2*q9 + q8)
2633 6486004 : binary%d1val1_d1val2 = q7*(q14 + q15*q3 - y%val*(q16 + x%d1val1*y%d1val2 + x%val*y%d1val1_d1val2))
2634 6486004 : binary%d2val2 = q7*(-q15*q4 + q17 + q20*x%val)
2635 : binary%d3val1 = q21*(-3.0_dp*q8*y%d1val1 + 3.0_dp*q13*q2 + q6*x%d3val1 &
2636 6486004 : - x%val*(-6.0_dp*q10*y%d1val1 + 6.0_dp*pow3(y%d1val1) + q0*y%d3val1))
2637 : binary%d2val1_d1val2 = q21*(-6.0_dp*q11*q5 + 2.0_dp*q10*q5 + 4.0_dp*q2*y%d1val1*y%d1val2 &
2638 : + 4.0_dp*q3*y%d1val1_d1val2*y%val - q0*q22*x%d1val1 &
2639 6486004 : - q0*x%d1val2*y%d2val1 - q0*x%val*y%d2val1_d1val2 + q12*q4 - q14*q9 + q6*x%d2val1_d1val2 - q8*y%d1val2)
2640 : binary%d1val1_d2val2 = q21*(-6.0_dp*q19*q3 + 2.0_dp*y%val*(q15*q16 + q19*x%d1val1 + q22*q5 + q3*y%d2val2) &
2641 : - q0*(q15*x%d1val1_d1val2 + q22*x%d1val2 &
2642 : + x%d1val1*y%d2val2 + x%d2val2*y%d1val1 + x%val*y%d1val1_d2val2) &
2643 6486004 : + q6*x%d1val1_d2val2)
2644 : binary%d3val2 = q21*(-3.0_dp*q17*y%d1val2 + 3.0_dp*q20*q4 &
2645 6486004 : + q6*x%d3val2 - x%val*(-6.0_dp*q18*y%d1val2 + 6.0_dp*pow3(y%d1val2) + q0*y%d3val2))
2646 6486004 : end function div_self
2647 :
2648 2369156 : function div_self_real(x, y) result(unary)
2649 : type(auto_diff_real_2var_order3), intent(in) :: x
2650 : real(dp), intent(in) :: y
2651 : type(auto_diff_real_2var_order3) :: unary
2652 : real(dp) :: q0
2653 2369156 : q0 = powm1(y)
2654 2369156 : unary%val = q0*x%val
2655 2369156 : unary%d1val1 = q0*x%d1val1
2656 2369156 : unary%d1val2 = q0*x%d1val2
2657 2369156 : unary%d2val1 = q0*x%d2val1
2658 2369156 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
2659 2369156 : unary%d2val2 = q0*x%d2val2
2660 2369156 : unary%d3val1 = q0*x%d3val1
2661 2369156 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
2662 2369156 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
2663 2369156 : unary%d3val2 = q0*x%d3val2
2664 2369156 : end function div_self_real
2665 :
2666 3277696 : function div_real_self(z, x) result(unary)
2667 : real(dp), intent(in) :: z
2668 : type(auto_diff_real_2var_order3), intent(in) :: x
2669 : type(auto_diff_real_2var_order3) :: unary
2670 : real(dp) :: q12
2671 : real(dp) :: q11
2672 : real(dp) :: q10
2673 : real(dp) :: q9
2674 : real(dp) :: q8
2675 : real(dp) :: q7
2676 : real(dp) :: q6
2677 : real(dp) :: q5
2678 : real(dp) :: q4
2679 : real(dp) :: q3
2680 : real(dp) :: q2
2681 : real(dp) :: q1
2682 : real(dp) :: q0
2683 3277696 : q0 = pow2(x%val)
2684 3277696 : q1 = z*powm1(q0)
2685 3277696 : q2 = x%d2val1*x%val
2686 3277696 : q3 = pow2(x%d1val1)
2687 3277696 : q4 = z*powm1(pow3(x%val))
2688 3277696 : q5 = 2.0_dp*x%d1val1
2689 3277696 : q6 = x%d1val1_d1val2*x%val
2690 3277696 : q7 = x%d2val2*x%val
2691 3277696 : q8 = -q7
2692 3277696 : q9 = pow2(x%d1val2)
2693 3277696 : q10 = z*powm1(pow4(x%val))
2694 3277696 : q11 = 4.0_dp*q6
2695 3277696 : q12 = 6.0_dp*x%d1val2
2696 3277696 : unary%val = z*powm1(x%val)
2697 3277696 : unary%d1val1 = -q1*x%d1val1
2698 3277696 : unary%d1val2 = -q1*x%d1val2
2699 3277696 : unary%d2val1 = q4*(2.0_dp*q3 - q2)
2700 3277696 : unary%d1val1_d1val2 = q4*(q5*x%d1val2 - q6)
2701 3277696 : unary%d2val2 = q4*(2.0_dp*q9 + q8)
2702 3277696 : unary%d3val1 = q10*(-6.0_dp*pow3(x%d1val1) + 6.0_dp*q2*x%d1val1 - q0*x%d3val1)
2703 3277696 : unary%d2val1_d1val2 = q10*(2.0_dp*q2*x%d1val2 - q0*x%d2val1_d1val2 + q11*x%d1val1 - q12*q3)
2704 3277696 : unary%d1val1_d2val2 = -q10*(q0*x%d1val1_d2val2 - q11*x%d1val2 + q5*(3.0_dp*q9 + q8))
2705 3277696 : unary%d3val2 = q10*(-6.0_dp*pow3(x%d1val2) - q0*x%d3val2 + q12*q7)
2706 3277696 : end function div_real_self
2707 :
2708 0 : function div_self_int(x, y) result(unary)
2709 : type(auto_diff_real_2var_order3), intent(in) :: x
2710 : integer, intent(in) :: y
2711 : type(auto_diff_real_2var_order3) :: unary
2712 : real(dp) :: y_dp
2713 : real(dp) :: q0
2714 0 : y_dp = y
2715 0 : q0 = powm1(y_dp)
2716 0 : unary%val = q0*x%val
2717 0 : unary%d1val1 = q0*x%d1val1
2718 0 : unary%d1val2 = q0*x%d1val2
2719 0 : unary%d2val1 = q0*x%d2val1
2720 0 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
2721 0 : unary%d2val2 = q0*x%d2val2
2722 0 : unary%d3val1 = q0*x%d3val1
2723 0 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
2724 0 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
2725 0 : unary%d3val2 = q0*x%d3val2
2726 0 : end function div_self_int
2727 :
2728 0 : function div_int_self(z, x) result(unary)
2729 : integer, intent(in) :: z
2730 : type(auto_diff_real_2var_order3), intent(in) :: x
2731 : type(auto_diff_real_2var_order3) :: unary
2732 : real(dp) :: y_dp
2733 : real(dp) :: q12
2734 : real(dp) :: q11
2735 : real(dp) :: q10
2736 : real(dp) :: q9
2737 : real(dp) :: q8
2738 : real(dp) :: q7
2739 : real(dp) :: q6
2740 : real(dp) :: q5
2741 : real(dp) :: q4
2742 : real(dp) :: q3
2743 : real(dp) :: q2
2744 : real(dp) :: q1
2745 : real(dp) :: q0
2746 0 : y_dp = z
2747 0 : q0 = pow2(x%val)
2748 0 : q1 = y_dp*powm1(q0)
2749 0 : q2 = x%d2val1*x%val
2750 0 : q3 = pow2(x%d1val1)
2751 0 : q4 = y_dp*powm1(pow3(x%val))
2752 0 : q5 = 2.0_dp*x%d1val1
2753 0 : q6 = x%d1val1_d1val2*x%val
2754 0 : q7 = x%d2val2*x%val
2755 0 : q8 = -q7
2756 0 : q9 = pow2(x%d1val2)
2757 0 : q10 = y_dp*powm1(pow4(x%val))
2758 0 : q11 = 4.0_dp*q6
2759 0 : q12 = 6.0_dp*x%d1val2
2760 0 : unary%val = y_dp*powm1(x%val)
2761 0 : unary%d1val1 = -q1*x%d1val1
2762 0 : unary%d1val2 = -q1*x%d1val2
2763 0 : unary%d2val1 = q4*(2.0_dp*q3 - q2)
2764 0 : unary%d1val1_d1val2 = q4*(q5*x%d1val2 - q6)
2765 0 : unary%d2val2 = q4*(2.0_dp*q9 + q8)
2766 0 : unary%d3val1 = q10*(-6.0_dp*pow3(x%d1val1) + 6.0_dp*q2*x%d1val1 - q0*x%d3val1)
2767 0 : unary%d2val1_d1val2 = q10*(2.0_dp*q2*x%d1val2 - q0*x%d2val1_d1val2 + q11*x%d1val1 - q12*q3)
2768 0 : unary%d1val1_d2val2 = -q10*(q0*x%d1val1_d2val2 - q11*x%d1val2 + q5*(3.0_dp*q9 + q8))
2769 0 : unary%d3val2 = q10*(-6.0_dp*pow3(x%d1val2) - q0*x%d3val2 + q12*q7)
2770 0 : end function div_int_self
2771 :
2772 63716 : function pow_self(x, y) result(binary)
2773 : type(auto_diff_real_2var_order3), intent(in) :: x
2774 : type(auto_diff_real_2var_order3), intent(in) :: y
2775 : type(auto_diff_real_2var_order3) :: binary
2776 : real(dp) :: q30
2777 : real(dp) :: q29
2778 : real(dp) :: q28
2779 : real(dp) :: q27
2780 : real(dp) :: q26
2781 : real(dp) :: q25
2782 : real(dp) :: q24
2783 : real(dp) :: q23
2784 : real(dp) :: q22
2785 : real(dp) :: q21
2786 : real(dp) :: q20
2787 : real(dp) :: q19
2788 : real(dp) :: q18
2789 : real(dp) :: q17
2790 : real(dp) :: q16
2791 : real(dp) :: q15
2792 : real(dp) :: q14
2793 : real(dp) :: q13
2794 : real(dp) :: q12
2795 : real(dp) :: q11
2796 : real(dp) :: q10
2797 : real(dp) :: q9
2798 : real(dp) :: q8
2799 : real(dp) :: q7
2800 : real(dp) :: q6
2801 : real(dp) :: q5
2802 : real(dp) :: q4
2803 : real(dp) :: q3
2804 : real(dp) :: q2
2805 : real(dp) :: q1
2806 : real(dp) :: q0
2807 63716 : q0 = pow(x%val, y%val - 1)
2808 63716 : q1 = x%d1val1*y%val
2809 63716 : q2 = log(x%val)
2810 63716 : q3 = q2*x%val
2811 63716 : q4 = q1 + q3*y%d1val1
2812 63716 : q5 = x%d1val2*y%val
2813 63716 : q6 = q3*y%d1val2 + q5
2814 63716 : q7 = pow(x%val, -2.0_dp + y%val)
2815 63716 : q8 = pow2(x%d1val1)
2816 63716 : q9 = pow2(x%val)
2817 63716 : q10 = q2*q9
2818 63716 : q11 = x%d2val1*y%val
2819 63716 : q12 = x%d1val1*y%d1val1
2820 63716 : q13 = q10*y%d2val1 - q8*y%val + x%val*(2.0_dp*q12 + q11)
2821 63716 : q14 = q13 + pow2(q4)
2822 63716 : q15 = x%d1val1*y%d1val2
2823 63716 : q16 = x%d1val2*y%d1val1
2824 63716 : q17 = -q1*x%d1val2 + q10*y%d1val1_d1val2 + x%val*(q15 + q16 + x%d1val1_d1val2*y%val)
2825 63716 : q18 = pow2(x%d1val2)
2826 63716 : q19 = x%d2val2*y%val
2827 63716 : q20 = x%d1val2*y%d1val2
2828 63716 : q21 = q10*y%d2val2 - q18*y%val + x%val*(2.0_dp*q20 + q19)
2829 63716 : q22 = q21 + pow2(q6)
2830 63716 : q23 = pow(x%val, -3.0_dp + y%val)
2831 63716 : q24 = 2.0_dp*y%val
2832 63716 : q25 = q2*pow3(x%val)
2833 63716 : q26 = 3.0_dp*x%d1val1
2834 63716 : q27 = 2.0_dp*y%d1val1_d1val2
2835 63716 : q28 = 2.0_dp*x%d1val1_d1val2
2836 63716 : q29 = 2.0_dp*q17
2837 63716 : q30 = 3.0_dp*x%d1val2
2838 63716 : binary%val = pow(x%val, y%val)
2839 63716 : binary%d1val1 = q0*q4
2840 63716 : binary%d1val2 = q0*q6
2841 63716 : binary%d2val1 = q14*q7
2842 63716 : binary%d1val1_d1val2 = (q17 + q4*q6)*pow(x%val, 3.0_dp + y%val)*powm1(pow5(x%val))
2843 63716 : binary%d2val2 = q22*q7
2844 : binary%d3val1 = q23*(3.0_dp*q13*q4 + q24*pow3(x%d1val1) + q25*y%d3val1 &
2845 : - q26*x%val*(q11 + q12) + q9*(3.0_dp*x%d2val1*y%d1val1 &
2846 63716 : + q26*y%d2val1 + x%d3val1*y%val) + pow3(q4))
2847 : binary%d2val1_d1val2 = (2.0_dp*q5*q8 + q14*q6 + q25*y%d2val1_d1val2 + q29*q4 &
2848 : + q9*(q27*x%d1val1 + q28*y%d1val1 + x%d1val2*y%d2val1 &
2849 : + x%d2val1*y%d1val2 + x%d2val1_d1val2*y%val) &
2850 : - x%val*(2.0_dp*q16*x%d1val1 + q1*q28 + q5*x%d2val1 + q8*y%d1val2)) &
2851 63716 : * pow(x%val, 10.0_dp + y%val)*powm1(pow(x%val, 13.0_dp))
2852 : binary%d1val1_d2val2 = q23*(2.0_dp*q1*q18 + q22*q4 + q25*y%d1val1_d2val2 + q29*q6 &
2853 : + q9*(q27*x%d1val2 + q28*y%d1val2 + x%d1val1*y%d2val2 + x%d1val1_d2val2*y%val + x%d2val2*y%d1val1) &
2854 63716 : - x%val*(2.0_dp*q15*x%d1val2 + q1*x%d2val2 + q18*y%d1val1 + q28*q5))
2855 : binary%d3val2 = q23 * &
2856 : ( 3.0_dp*q21*q6 + q24*pow3(x%d1val2) + q25*y%d3val2 - q30*x%val*(q19 + q20) &
2857 63716 : + q9*(3.0_dp*x%d2val2*y%d1val2 + q30*y%d2val2 + x%d3val2*y%val) + pow3(q6))
2858 63716 : end function pow_self
2859 :
2860 1152312 : function pow_self_real(x, y) result(unary)
2861 : type(auto_diff_real_2var_order3), intent(in) :: x
2862 : real(dp), intent(in) :: y
2863 : type(auto_diff_real_2var_order3) :: unary
2864 : real(dp) :: q21
2865 : real(dp) :: q20
2866 : real(dp) :: q19
2867 : real(dp) :: q18
2868 : real(dp) :: q17
2869 : real(dp) :: q16
2870 : real(dp) :: q15
2871 : real(dp) :: q14
2872 : real(dp) :: q13
2873 : real(dp) :: q12
2874 : real(dp) :: q11
2875 : real(dp) :: q10
2876 : real(dp) :: q9
2877 : real(dp) :: q8
2878 : real(dp) :: q7
2879 : real(dp) :: q6
2880 : real(dp) :: q5
2881 : real(dp) :: q4
2882 : real(dp) :: q3
2883 : real(dp) :: q2
2884 : real(dp) :: q1
2885 : real(dp) :: q0
2886 1152312 : q0 = y - 1
2887 1152312 : q1 = y*pow(x%val, q0)
2888 1152312 : q2 = x%d2val1*x%val
2889 1152312 : q3 = pow2(x%d1val1)
2890 1152312 : q4 = q3*y
2891 1152312 : q5 = pow(x%val, -2.0_dp + y)
2892 1152312 : q6 = q5*y
2893 1152312 : q7 = x%d1val1_d1val2*x%val
2894 1152312 : q8 = x%d1val1*x%d1val2
2895 1152312 : q9 = x%d2val2*x%val
2896 1152312 : q10 = pow2(x%d1val2)
2897 1152312 : q11 = q10*y
2898 1152312 : q12 = y*(-q10 + q11 + q9)
2899 1152312 : q13 = pow2(x%val)
2900 1152312 : q14 = pow2(y)
2901 1152312 : q15 = -3.0_dp*y + 2.0_dp + q14
2902 1152312 : q16 = y*pow(x%val, -3.0_dp + y)
2903 1152312 : q17 = 2.0_dp*q7
2904 1152312 : q18 = q17*x%d1val1
2905 1152312 : q19 = q2*x%d1val2
2906 1152312 : q20 = q3*x%d1val2
2907 1152312 : q21 = 3.0_dp*x%d1val2
2908 1152312 : unary%val = pow(x%val, y)
2909 1152312 : unary%d1val1 = q1*x%d1val1
2910 1152312 : unary%d1val2 = q1*x%d1val2
2911 1152312 : unary%d2val1 = q6*(q2 - q3 + q4)
2912 1152312 : unary%d1val1_d1val2 = q6*(q7 + q8*y - q8)
2913 1152312 : unary%d2val2 = q12*q5
2914 1152312 : unary%d3val1 = q16*(3.0_dp*q0*q2*x%d1val1 + q13*x%d3val1 + q15*pow3(x%d1val1))
2915 1152312 : unary%d2val1_d1val2 = q16*(2.0_dp*q20 + q13*x%d2val1_d1val2 + q14*q20 + q18*y - q18 + q19*y - q19 - q21*q4)
2916 1152312 : unary%d1val1_d2val2 = q16*(q0*q17*x%d1val2 + q13*x%d1val1_d2val2 - x%d1val1*(-2.0_dp*q10 + 2.0_dp*q11 - q12 + q9))
2917 1152312 : unary%d3val2 = q16*(q0*q21*q9 + q13*x%d3val2 + q15*pow3(x%d1val2))
2918 1152312 : end function pow_self_real
2919 :
2920 0 : function pow_real_self(z, x) result(unary)
2921 : real(dp), intent(in) :: z
2922 : type(auto_diff_real_2var_order3), intent(in) :: x
2923 : type(auto_diff_real_2var_order3) :: unary
2924 : real(dp) :: q8
2925 : real(dp) :: q7
2926 : real(dp) :: q6
2927 : real(dp) :: q5
2928 : real(dp) :: q4
2929 : real(dp) :: q3
2930 : real(dp) :: q2
2931 : real(dp) :: q1
2932 : real(dp) :: q0
2933 0 : q0 = pow(z, x%val)
2934 0 : q1 = log(z)
2935 0 : q2 = q0*q1
2936 0 : q3 = q1*pow2(x%d1val1) + x%d2val1
2937 0 : q4 = q1*x%d1val2
2938 0 : q5 = q1*pow2(x%d1val2) + x%d2val2
2939 0 : q6 = q1*x%d1val1
2940 0 : q7 = pow2(q1)
2941 0 : q8 = 2.0_dp*x%d1val1_d1val2
2942 0 : unary%val = q0
2943 0 : unary%d1val1 = q2*x%d1val1
2944 0 : unary%d1val2 = q2*x%d1val2
2945 0 : unary%d2val1 = q2*q3
2946 0 : unary%d1val1_d1val2 = q2*(q4*x%d1val1 + x%d1val1_d1val2)
2947 0 : unary%d2val2 = q2*q5
2948 0 : unary%d3val1 = q2*(3.0_dp*q6*x%d2val1 + q7*pow3(x%d1val1) + x%d3val1)
2949 0 : unary%d2val1_d1val2 = q2*(q3*q4 + q6*q8 + x%d2val1_d1val2)
2950 0 : unary%d1val1_d2val2 = q2*(q4*q8 + q5*q6 + x%d1val1_d2val2)
2951 0 : unary%d3val2 = q2*(3.0_dp*q4*x%d2val2 + q7*pow3(x%d1val2) + x%d3val2)
2952 0 : end function pow_real_self
2953 :
2954 0 : function pow_self_int(x, y) result(unary)
2955 : type(auto_diff_real_2var_order3), intent(in) :: x
2956 : integer, intent(in) :: y
2957 : type(auto_diff_real_2var_order3) :: unary
2958 : real(dp) :: y_dp
2959 : real(dp) :: q21
2960 : real(dp) :: q20
2961 : real(dp) :: q19
2962 : real(dp) :: q18
2963 : real(dp) :: q17
2964 : real(dp) :: q16
2965 : real(dp) :: q15
2966 : real(dp) :: q14
2967 : real(dp) :: q13
2968 : real(dp) :: q12
2969 : real(dp) :: q11
2970 : real(dp) :: q10
2971 : real(dp) :: q9
2972 : real(dp) :: q8
2973 : real(dp) :: q7
2974 : real(dp) :: q6
2975 : real(dp) :: q5
2976 : real(dp) :: q4
2977 : real(dp) :: q3
2978 : real(dp) :: q2
2979 : real(dp) :: q1
2980 : real(dp) :: q0
2981 0 : y_dp = y
2982 0 : q0 = y_dp - 1
2983 0 : q1 = y_dp*pow(x%val, q0)
2984 0 : q2 = x%d2val1*x%val
2985 0 : q3 = pow2(x%d1val1)
2986 0 : q4 = q3*y_dp
2987 0 : q5 = pow(x%val, -2.0_dp + y_dp)
2988 0 : q6 = q5*y_dp
2989 0 : q7 = x%d1val1_d1val2*x%val
2990 0 : q8 = x%d1val1*x%d1val2
2991 0 : q9 = x%d2val2*x%val
2992 0 : q10 = pow2(x%d1val2)
2993 0 : q11 = q10*y_dp
2994 0 : q12 = y_dp*(-q10 + q11 + q9)
2995 0 : q13 = pow2(x%val)
2996 0 : q14 = pow2(y_dp)
2997 0 : q15 = -3.0_dp*y_dp + 2.0_dp + q14
2998 0 : q16 = y_dp*pow(x%val, -3.0_dp + y_dp)
2999 0 : q17 = 2.0_dp*q7
3000 0 : q18 = q17*x%d1val1
3001 0 : q19 = q2*x%d1val2
3002 0 : q20 = q3*x%d1val2
3003 0 : q21 = 3.0_dp*x%d1val2
3004 0 : unary%val = pow(x%val, y_dp)
3005 0 : unary%d1val1 = q1*x%d1val1
3006 0 : unary%d1val2 = q1*x%d1val2
3007 0 : unary%d2val1 = q6*(q2 - q3 + q4)
3008 0 : unary%d1val1_d1val2 = q6*(q7 + q8*y_dp - q8)
3009 0 : unary%d2val2 = q12*q5
3010 0 : unary%d3val1 = q16*(3.0_dp*q0*q2*x%d1val1 + q13*x%d3val1 + q15*pow3(x%d1val1))
3011 0 : unary%d2val1_d1val2 = q16*(2.0_dp*q20 + q13*x%d2val1_d1val2 + q14*q20 + q18*y_dp - q18 + q19*y_dp - q19 - q21*q4)
3012 0 : unary%d1val1_d2val2 = q16*(q0*q17*x%d1val2 + q13*x%d1val1_d2val2 - x%d1val1*(-2.0_dp*q10 + 2.0_dp*q11 - q12 + q9))
3013 0 : unary%d3val2 = q16*(q0*q21*q9 + q13*x%d3val2 + q15*pow3(x%d1val2))
3014 0 : end function pow_self_int
3015 :
3016 0 : function pow_int_self(z, x) result(unary)
3017 : integer, intent(in) :: z
3018 : type(auto_diff_real_2var_order3), intent(in) :: x
3019 : type(auto_diff_real_2var_order3) :: unary
3020 : real(dp) :: y_dp
3021 : real(dp) :: q8
3022 : real(dp) :: q7
3023 : real(dp) :: q6
3024 : real(dp) :: q5
3025 : real(dp) :: q4
3026 : real(dp) :: q3
3027 : real(dp) :: q2
3028 : real(dp) :: q1
3029 : real(dp) :: q0
3030 0 : y_dp = z
3031 0 : q0 = pow(y_dp, x%val)
3032 0 : q1 = log(y_dp)
3033 0 : q2 = q0*q1
3034 0 : q3 = q1*pow2(x%d1val1) + x%d2val1
3035 0 : q4 = q1*x%d1val2
3036 0 : q5 = q1*pow2(x%d1val2) + x%d2val2
3037 0 : q6 = q1*x%d1val1
3038 0 : q7 = pow2(q1)
3039 0 : q8 = 2.0_dp*x%d1val1_d1val2
3040 0 : unary%val = q0
3041 0 : unary%d1val1 = q2*x%d1val1
3042 0 : unary%d1val2 = q2*x%d1val2
3043 0 : unary%d2val1 = q2*q3
3044 0 : unary%d1val1_d1val2 = q2*(q4*x%d1val1 + x%d1val1_d1val2)
3045 0 : unary%d2val2 = q2*q5
3046 0 : unary%d3val1 = q2*(3.0_dp*q6*x%d2val1 + q7*pow3(x%d1val1) + x%d3val1)
3047 0 : unary%d2val1_d1val2 = q2*(q3*q4 + q6*q8 + x%d2val1_d1val2)
3048 0 : unary%d1val1_d2val2 = q2*(q4*q8 + q5*q6 + x%d1val1_d2val2)
3049 0 : unary%d3val2 = q2*(3.0_dp*q4*x%d2val2 + q7*pow3(x%d1val2) + x%d3val2)
3050 0 : end function pow_int_self
3051 :
3052 0 : function max_self(x, y) result(binary)
3053 : type(auto_diff_real_2var_order3), intent(in) :: x
3054 : type(auto_diff_real_2var_order3), intent(in) :: y
3055 : type(auto_diff_real_2var_order3) :: binary
3056 : real(dp) :: q1
3057 : real(dp) :: q0
3058 0 : q0 = Heaviside(x%val - y%val)
3059 0 : q1 = Heaviside(-x%val + y%val)
3060 0 : binary%val = Max(x%val, y%val)
3061 0 : binary%d1val1 = q0*x%d1val1 + q1*y%d1val1
3062 0 : binary%d1val2 = q0*x%d1val2 + q1*y%d1val2
3063 0 : binary%d2val1 = q0*x%d2val1 + q1*y%d2val1
3064 0 : binary%d1val1_d1val2 = q0*x%d1val1_d1val2 + q1*y%d1val1_d1val2
3065 0 : binary%d2val2 = q0*x%d2val2 + q1*y%d2val2
3066 0 : binary%d3val1 = q0*x%d3val1 + q1*y%d3val1
3067 0 : binary%d2val1_d1val2 = q0*x%d2val1_d1val2 + q1*y%d2val1_d1val2
3068 0 : binary%d1val1_d2val2 = q0*x%d1val1_d2val2 + q1*y%d1val1_d2val2
3069 0 : binary%d3val2 = q0*x%d3val2 + q1*y%d3val2
3070 0 : end function max_self
3071 :
3072 0 : function max_self_real(x, y) result(unary)
3073 : type(auto_diff_real_2var_order3), intent(in) :: x
3074 : real(dp), intent(in) :: y
3075 : type(auto_diff_real_2var_order3) :: unary
3076 : real(dp) :: q0
3077 0 : q0 = Heaviside(x%val - y)
3078 0 : unary%val = Max(x%val, y)
3079 0 : unary%d1val1 = q0*x%d1val1
3080 0 : unary%d1val2 = q0*x%d1val2
3081 0 : unary%d2val1 = q0*x%d2val1
3082 0 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
3083 0 : unary%d2val2 = q0*x%d2val2
3084 0 : unary%d3val1 = q0*x%d3val1
3085 0 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
3086 0 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
3087 0 : unary%d3val2 = q0*x%d3val2
3088 0 : end function max_self_real
3089 :
3090 454594 : function max_real_self(z, x) result(unary)
3091 : real(dp), intent(in) :: z
3092 : type(auto_diff_real_2var_order3), intent(in) :: x
3093 : type(auto_diff_real_2var_order3) :: unary
3094 : real(dp) :: q0
3095 454594 : q0 = Heaviside(x%val - z)
3096 454594 : unary%val = Max(x%val, z)
3097 454594 : unary%d1val1 = q0*x%d1val1
3098 454594 : unary%d1val2 = q0*x%d1val2
3099 454594 : unary%d2val1 = q0*x%d2val1
3100 454594 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
3101 454594 : unary%d2val2 = q0*x%d2val2
3102 454594 : unary%d3val1 = q0*x%d3val1
3103 454594 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
3104 454594 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
3105 454594 : unary%d3val2 = q0*x%d3val2
3106 454594 : end function max_real_self
3107 :
3108 0 : function max_self_int(x, y) result(unary)
3109 : type(auto_diff_real_2var_order3), intent(in) :: x
3110 : integer, intent(in) :: y
3111 : type(auto_diff_real_2var_order3) :: unary
3112 : real(dp) :: y_dp
3113 : real(dp) :: q0
3114 0 : y_dp = y
3115 0 : q0 = Heaviside(x%val - y_dp)
3116 0 : unary%val = Max(x%val, y_dp)
3117 0 : unary%d1val1 = q0*x%d1val1
3118 0 : unary%d1val2 = q0*x%d1val2
3119 0 : unary%d2val1 = q0*x%d2val1
3120 0 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
3121 0 : unary%d2val2 = q0*x%d2val2
3122 0 : unary%d3val1 = q0*x%d3val1
3123 0 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
3124 0 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
3125 0 : unary%d3val2 = q0*x%d3val2
3126 0 : end function max_self_int
3127 :
3128 0 : function max_int_self(z, x) result(unary)
3129 : integer, intent(in) :: z
3130 : type(auto_diff_real_2var_order3), intent(in) :: x
3131 : type(auto_diff_real_2var_order3) :: unary
3132 : real(dp) :: y_dp
3133 : real(dp) :: q0
3134 0 : y_dp = z
3135 0 : q0 = Heaviside(x%val - y_dp)
3136 0 : unary%val = Max(x%val, y_dp)
3137 0 : unary%d1val1 = q0*x%d1val1
3138 0 : unary%d1val2 = q0*x%d1val2
3139 0 : unary%d2val1 = q0*x%d2val1
3140 0 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
3141 0 : unary%d2val2 = q0*x%d2val2
3142 0 : unary%d3val1 = q0*x%d3val1
3143 0 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
3144 0 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
3145 0 : unary%d3val2 = q0*x%d3val2
3146 0 : end function max_int_self
3147 :
3148 32062 : function min_self(x, y) result(binary)
3149 : type(auto_diff_real_2var_order3), intent(in) :: x
3150 : type(auto_diff_real_2var_order3), intent(in) :: y
3151 : type(auto_diff_real_2var_order3) :: binary
3152 : real(dp) :: q1
3153 : real(dp) :: q0
3154 32062 : q0 = Heaviside(-x%val + y%val)
3155 32062 : q1 = Heaviside(x%val - y%val)
3156 32062 : binary%val = Min(x%val, y%val)
3157 32062 : binary%d1val1 = q0*x%d1val1 + q1*y%d1val1
3158 32062 : binary%d1val2 = q0*x%d1val2 + q1*y%d1val2
3159 32062 : binary%d2val1 = q0*x%d2val1 + q1*y%d2val1
3160 32062 : binary%d1val1_d1val2 = q0*x%d1val1_d1val2 + q1*y%d1val1_d1val2
3161 32062 : binary%d2val2 = q0*x%d2val2 + q1*y%d2val2
3162 32062 : binary%d3val1 = q0*x%d3val1 + q1*y%d3val1
3163 32062 : binary%d2val1_d1val2 = q0*x%d2val1_d1val2 + q1*y%d2val1_d1val2
3164 32062 : binary%d1val1_d2val2 = q0*x%d1val1_d2val2 + q1*y%d1val1_d2val2
3165 32062 : binary%d3val2 = q0*x%d3val2 + q1*y%d3val2
3166 32062 : end function min_self
3167 :
3168 0 : function min_self_real(x, y) result(unary)
3169 : type(auto_diff_real_2var_order3), intent(in) :: x
3170 : real(dp), intent(in) :: y
3171 : type(auto_diff_real_2var_order3) :: unary
3172 : real(dp) :: q0
3173 0 : q0 = Heaviside(-x%val + y)
3174 0 : unary%val = Min(x%val, y)
3175 0 : unary%d1val1 = q0*x%d1val1
3176 0 : unary%d1val2 = q0*x%d1val2
3177 0 : unary%d2val1 = q0*x%d2val1
3178 0 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
3179 0 : unary%d2val2 = q0*x%d2val2
3180 0 : unary%d3val1 = q0*x%d3val1
3181 0 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
3182 0 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
3183 0 : unary%d3val2 = q0*x%d3val2
3184 0 : end function min_self_real
3185 :
3186 422532 : function min_real_self(z, x) result(unary)
3187 : real(dp), intent(in) :: z
3188 : type(auto_diff_real_2var_order3), intent(in) :: x
3189 : type(auto_diff_real_2var_order3) :: unary
3190 : real(dp) :: q0
3191 422532 : q0 = Heaviside(-x%val + z)
3192 422532 : unary%val = Min(x%val, z)
3193 422532 : unary%d1val1 = q0*x%d1val1
3194 422532 : unary%d1val2 = q0*x%d1val2
3195 422532 : unary%d2val1 = q0*x%d2val1
3196 422532 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
3197 422532 : unary%d2val2 = q0*x%d2val2
3198 422532 : unary%d3val1 = q0*x%d3val1
3199 422532 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
3200 422532 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
3201 422532 : unary%d3val2 = q0*x%d3val2
3202 422532 : end function min_real_self
3203 :
3204 0 : function min_self_int(x, y) result(unary)
3205 : type(auto_diff_real_2var_order3), intent(in) :: x
3206 : integer, intent(in) :: y
3207 : type(auto_diff_real_2var_order3) :: unary
3208 : real(dp) :: y_dp
3209 : real(dp) :: q0
3210 0 : y_dp = y
3211 0 : q0 = Heaviside(-x%val + y_dp)
3212 0 : unary%val = Min(x%val, y_dp)
3213 0 : unary%d1val1 = q0*x%d1val1
3214 0 : unary%d1val2 = q0*x%d1val2
3215 0 : unary%d2val1 = q0*x%d2val1
3216 0 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
3217 0 : unary%d2val2 = q0*x%d2val2
3218 0 : unary%d3val1 = q0*x%d3val1
3219 0 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
3220 0 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
3221 0 : unary%d3val2 = q0*x%d3val2
3222 0 : end function min_self_int
3223 :
3224 0 : function min_int_self(z, x) result(unary)
3225 : integer, intent(in) :: z
3226 : type(auto_diff_real_2var_order3), intent(in) :: x
3227 : type(auto_diff_real_2var_order3) :: unary
3228 : real(dp) :: y_dp
3229 : real(dp) :: q0
3230 0 : y_dp = z
3231 0 : q0 = Heaviside(-x%val + y_dp)
3232 0 : unary%val = Min(x%val, y_dp)
3233 0 : unary%d1val1 = q0*x%d1val1
3234 0 : unary%d1val2 = q0*x%d1val2
3235 0 : unary%d2val1 = q0*x%d2val1
3236 0 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
3237 0 : unary%d2val2 = q0*x%d2val2
3238 0 : unary%d3val1 = q0*x%d3val1
3239 0 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
3240 0 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
3241 0 : unary%d3val2 = q0*x%d3val2
3242 0 : end function min_int_self
3243 :
3244 0 : function dim_self(x, y) result(binary)
3245 : type(auto_diff_real_2var_order3), intent(in) :: x
3246 : type(auto_diff_real_2var_order3), intent(in) :: y
3247 : type(auto_diff_real_2var_order3) :: binary
3248 : real(dp) :: q1
3249 : real(dp) :: q0
3250 0 : q0 = x%val - y%val
3251 0 : q1 = 0.5_dp*sgn(q0)
3252 0 : binary%val = -0.5_dp*y%val + 0.5_dp*x%val + 0.5_dp*Abs(q0)
3253 0 : binary%d1val1 = -0.5_dp*y%d1val1 + 0.5_dp*x%d1val1 + q1*(x%d1val1 - y%d1val1)
3254 0 : binary%d1val2 = -0.5_dp*y%d1val2 + 0.5_dp*x%d1val2 + q1*(x%d1val2 - y%d1val2)
3255 0 : binary%d2val1 = -0.5_dp*y%d2val1 + 0.5_dp*x%d2val1 + q1*(x%d2val1 - y%d2val1)
3256 0 : binary%d1val1_d1val2 = -0.5_dp*y%d1val1_d1val2 + 0.5_dp*x%d1val1_d1val2 + q1*(x%d1val1_d1val2 - y%d1val1_d1val2)
3257 0 : binary%d2val2 = -0.5_dp*y%d2val2 + 0.5_dp*x%d2val2 + q1*(x%d2val2 - y%d2val2)
3258 0 : binary%d3val1 = -0.5_dp*y%d3val1 + 0.5_dp*x%d3val1 + q1*(x%d3val1 - y%d3val1)
3259 0 : binary%d2val1_d1val2 = -0.5_dp*y%d2val1_d1val2 + 0.5_dp*x%d2val1_d1val2 + q1*(x%d2val1_d1val2 - y%d2val1_d1val2)
3260 0 : binary%d1val1_d2val2 = -0.5_dp*y%d1val1_d2val2 + 0.5_dp*x%d1val1_d2val2 + q1*(x%d1val1_d2val2 - y%d1val1_d2val2)
3261 0 : binary%d3val2 = -0.5_dp*y%d3val2 + 0.5_dp*x%d3val2 + q1*(x%d3val2 - y%d3val2)
3262 0 : end function dim_self
3263 :
3264 0 : function dim_self_real(x, y) result(unary)
3265 : type(auto_diff_real_2var_order3), intent(in) :: x
3266 : real(dp), intent(in) :: y
3267 : type(auto_diff_real_2var_order3) :: unary
3268 : real(dp) :: q5
3269 : real(dp) :: q4
3270 : real(dp) :: q3
3271 : real(dp) :: q2
3272 : real(dp) :: q1
3273 : real(dp) :: q0
3274 0 : q0 = x%val - y
3275 0 : q1 = sgn(q0)
3276 0 : q2 = 0.5_dp*q1 + 0.5_dp
3277 0 : q3 = 0.5_dp*x%d1val1_d1val2
3278 0 : q4 = 0.5_dp*x%d2val1_d1val2
3279 0 : q5 = 0.5_dp*x%d1val1_d2val2
3280 0 : unary%val = -0.5_dp*y + 0.5_dp*x%val + 0.5_dp*Abs(q0)
3281 0 : unary%d1val1 = q2*x%d1val1
3282 0 : unary%d1val2 = q2*x%d1val2
3283 0 : unary%d2val1 = q2*x%d2val1
3284 0 : unary%d1val1_d1val2 = q1*q3 + q3
3285 0 : unary%d2val2 = q2*x%d2val2
3286 0 : unary%d3val1 = q2*x%d3val1
3287 0 : unary%d2val1_d1val2 = q1*q4 + q4
3288 0 : unary%d1val1_d2val2 = q1*q5 + q5
3289 0 : unary%d3val2 = q2*x%d3val2
3290 0 : end function dim_self_real
3291 :
3292 0 : function dim_real_self(z, x) result(unary)
3293 : real(dp), intent(in) :: z
3294 : type(auto_diff_real_2var_order3), intent(in) :: x
3295 : type(auto_diff_real_2var_order3) :: unary
3296 : real(dp) :: q5
3297 : real(dp) :: q4
3298 : real(dp) :: q3
3299 : real(dp) :: q2
3300 : real(dp) :: q1
3301 : real(dp) :: q0
3302 0 : q0 = x%val - z
3303 0 : q1 = sgn(q0)
3304 0 : q2 = -0.5_dp + 0.5_dp*q1
3305 0 : q3 = 0.5_dp*x%d1val1_d1val2
3306 0 : q4 = 0.5_dp*x%d2val1_d1val2
3307 0 : q5 = 0.5_dp*x%d1val1_d2val2
3308 0 : unary%val = -0.5_dp*x%val + 0.5_dp*z + 0.5_dp*Abs(q0)
3309 0 : unary%d1val1 = q2*x%d1val1
3310 0 : unary%d1val2 = q2*x%d1val2
3311 0 : unary%d2val1 = q2*x%d2val1
3312 0 : unary%d1val1_d1val2 = q1*q3 - q3
3313 0 : unary%d2val2 = q2*x%d2val2
3314 0 : unary%d3val1 = q2*x%d3val1
3315 0 : unary%d2val1_d1val2 = q1*q4 - q4
3316 0 : unary%d1val1_d2val2 = q1*q5 - q5
3317 0 : unary%d3val2 = q2*x%d3val2
3318 0 : end function dim_real_self
3319 :
3320 0 : function dim_self_int(x, y) result(unary)
3321 : type(auto_diff_real_2var_order3), intent(in) :: x
3322 : integer, intent(in) :: y
3323 : type(auto_diff_real_2var_order3) :: unary
3324 : real(dp) :: y_dp
3325 : real(dp) :: q5
3326 : real(dp) :: q4
3327 : real(dp) :: q3
3328 : real(dp) :: q2
3329 : real(dp) :: q1
3330 : real(dp) :: q0
3331 0 : y_dp = y
3332 0 : q0 = x%val - y_dp
3333 0 : q1 = sgn(q0)
3334 0 : q2 = 0.5_dp*q1 + 0.5_dp
3335 0 : q3 = 0.5_dp*x%d1val1_d1val2
3336 0 : q4 = 0.5_dp*x%d2val1_d1val2
3337 0 : q5 = 0.5_dp*x%d1val1_d2val2
3338 0 : unary%val = -0.5_dp*y_dp + 0.5_dp*x%val + 0.5_dp*Abs(q0)
3339 0 : unary%d1val1 = q2*x%d1val1
3340 0 : unary%d1val2 = q2*x%d1val2
3341 0 : unary%d2val1 = q2*x%d2val1
3342 0 : unary%d1val1_d1val2 = q1*q3 + q3
3343 0 : unary%d2val2 = q2*x%d2val2
3344 0 : unary%d3val1 = q2*x%d3val1
3345 0 : unary%d2val1_d1val2 = q1*q4 + q4
3346 0 : unary%d1val1_d2val2 = q1*q5 + q5
3347 0 : unary%d3val2 = q2*x%d3val2
3348 0 : end function dim_self_int
3349 :
3350 0 : function dim_int_self(z, x) result(unary)
3351 : integer, intent(in) :: z
3352 : type(auto_diff_real_2var_order3), intent(in) :: x
3353 : type(auto_diff_real_2var_order3) :: unary
3354 : real(dp) :: y_dp
3355 : real(dp) :: q5
3356 : real(dp) :: q4
3357 : real(dp) :: q3
3358 : real(dp) :: q2
3359 : real(dp) :: q1
3360 : real(dp) :: q0
3361 0 : y_dp = z
3362 0 : q0 = x%val - y_dp
3363 0 : q1 = sgn(q0)
3364 0 : q2 = -0.5_dp + 0.5_dp*q1
3365 0 : q3 = 0.5_dp*x%d1val1_d1val2
3366 0 : q4 = 0.5_dp*x%d2val1_d1val2
3367 0 : q5 = 0.5_dp*x%d1val1_d2val2
3368 0 : unary%val = -0.5_dp*x%val + 0.5_dp*y_dp + 0.5_dp*Abs(q0)
3369 0 : unary%d1val1 = q2*x%d1val1
3370 0 : unary%d1val2 = q2*x%d1val2
3371 0 : unary%d2val1 = q2*x%d2val1
3372 0 : unary%d1val1_d1val2 = q1*q3 - q3
3373 0 : unary%d2val2 = q2*x%d2val2
3374 0 : unary%d3val1 = q2*x%d3val1
3375 0 : unary%d2val1_d1val2 = q1*q4 - q4
3376 0 : unary%d1val1_d2val2 = q1*q5 - q5
3377 0 : unary%d3val2 = q2*x%d3val2
3378 0 : end function dim_int_self
3379 :
3380 371576 : function differentiate_auto_diff_real_2var_order3_1(this) result(derivative)
3381 : type(auto_diff_real_2var_order3), intent(in) :: this
3382 : type(auto_diff_real_2var_order3) :: derivative
3383 371576 : derivative%val = this%d1val1
3384 371576 : derivative%d1val1 = this%d2val1
3385 371576 : derivative%d1val2 = this%d1val1_d1val2
3386 371576 : derivative%d2val1 = this%d3val1
3387 371576 : derivative%d1val1_d1val2 = this%d2val1_d1val2
3388 371576 : derivative%d2val2 = this%d1val1_d2val2
3389 371576 : derivative%d3val1 = 0.0_dp
3390 371576 : derivative%d2val1_d1val2 = 0.0_dp
3391 371576 : derivative%d1val1_d2val2 = 0.0_dp
3392 371576 : derivative%d3val2 = 0.0_dp
3393 371576 : end function differentiate_auto_diff_real_2var_order3_1
3394 :
3395 96186 : function differentiate_auto_diff_real_2var_order3_2(this) result(derivative)
3396 : type(auto_diff_real_2var_order3), intent(in) :: this
3397 : type(auto_diff_real_2var_order3) :: derivative
3398 96186 : derivative%val = this%d1val2
3399 96186 : derivative%d1val1 = this%d1val1_d1val2
3400 96186 : derivative%d1val2 = this%d2val2
3401 96186 : derivative%d2val1 = this%d2val1_d1val2
3402 96186 : derivative%d1val1_d1val2 = this%d1val1_d2val2
3403 96186 : derivative%d2val2 = this%d3val2
3404 96186 : derivative%d3val1 = 0.0_dp
3405 96186 : derivative%d2val1_d1val2 = 0.0_dp
3406 96186 : derivative%d1val1_d2val2 = 0.0_dp
3407 96186 : derivative%d3val2 = 0.0_dp
3408 96186 : end function differentiate_auto_diff_real_2var_order3_2
3409 :
3410 0 : end module auto_diff_real_2var_order3_module
|