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 32303190 : 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 32303190 : this%val = other%val
400 32303190 : this%d1val1 = other%d1val1
401 32303190 : this%d1val2 = other%d1val2
402 32303190 : this%d2val1 = other%d2val1
403 32303190 : this%d1val1_d1val2 = other%d1val1_d1val2
404 32303190 : this%d2val2 = other%d2val2
405 32303190 : this%d3val1 = other%d3val1
406 32303190 : this%d2val1_d1val2 = other%d2val1_d1val2
407 32303190 : this%d1val1_d2val2 = other%d1val1_d2val2
408 32303190 : this%d3val2 = other%d3val2
409 32303190 : end subroutine assign_from_self
410 :
411 1442040 : subroutine assign_from_real_dp(this, other)
412 : type(auto_diff_real_2var_order3), intent(out) :: this
413 : real(dp), intent(in) :: other
414 1442040 : this%val = other
415 1442040 : this%d1val1 = 0.0_dp
416 1442040 : this%d1val2 = 0.0_dp
417 1442040 : this%d2val1 = 0.0_dp
418 1442040 : this%d1val1_d1val2 = 0.0_dp
419 1442040 : this%d2val2 = 0.0_dp
420 1442040 : this%d3val1 = 0.0_dp
421 1442040 : this%d2val1_d1val2 = 0.0_dp
422 1442040 : this%d1val1_d2val2 = 0.0_dp
423 1442040 : this%d3val2 = 0.0_dp
424 1442040 : 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 0 : this%d1val1 = 0.0_dp
431 0 : this%d1val2 = 0.0_dp
432 0 : this%d2val1 = 0.0_dp
433 0 : this%d1val1_d1val2 = 0.0_dp
434 0 : this%d2val2 = 0.0_dp
435 0 : this%d3val1 = 0.0_dp
436 0 : this%d2val1_d1val2 = 0.0_dp
437 0 : this%d1val1_d2val2 = 0.0_dp
438 0 : 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 667348 : 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 667348 : z = (this%val > other)
523 667348 : 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 45520 : 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 45520 : z = (this%val < other%val)
551 45520 : end function less_self
552 :
553 712868 : 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 712868 : z = (this%val < other)
558 712868 : 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 136560 : 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 136560 : z = (this%val < other)
572 136560 : 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 0 : real(dp) :: q4
659 0 : real(dp) :: q3
660 0 : real(dp) :: q2
661 0 : real(dp) :: q1
662 0 : 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 621828 : 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 621828 : real(dp) :: q26
697 621828 : real(dp) :: q25
698 621828 : real(dp) :: q24
699 621828 : real(dp) :: q23
700 621828 : real(dp) :: q22
701 621828 : real(dp) :: q21
702 621828 : real(dp) :: q20
703 621828 : real(dp) :: q19
704 621828 : real(dp) :: q18
705 621828 : real(dp) :: q17
706 621828 : real(dp) :: q16
707 621828 : real(dp) :: q15
708 621828 : real(dp) :: q14
709 621828 : real(dp) :: q13
710 621828 : real(dp) :: q12
711 621828 : real(dp) :: q11
712 621828 : real(dp) :: q10
713 621828 : real(dp) :: q9
714 621828 : real(dp) :: q8
715 621828 : real(dp) :: q7
716 621828 : real(dp) :: q6
717 621828 : real(dp) :: q5
718 621828 : real(dp) :: q4
719 621828 : real(dp) :: q3
720 621828 : real(dp) :: q2
721 621828 : real(dp) :: q1
722 621828 : real(dp) :: q0
723 621828 : q0 = pow2(x%d1val1)
724 621828 : q1 = pow2(y%d1val1)
725 621828 : q2 = x%d1val1*z_d1x_d1y
726 621828 : q3 = 2.0_dp*q2
727 621828 : q4 = x%d1val2*z_d2x
728 621828 : q5 = y%d1val2*z_d1x_d1y
729 621828 : q6 = x%d1val2*z_d1x_d1y
730 621828 : q7 = y%d1val2*z_d2y
731 621828 : q8 = pow2(x%d1val2)
732 621828 : q9 = pow2(y%d1val2)
733 621828 : q10 = 2.0_dp*q5
734 621828 : q11 = x%d1val1*z_d2x
735 621828 : q12 = 3.0_dp*x%d2val1
736 621828 : q13 = 3.0_dp*y%d2val1
737 621828 : q14 = y%d1val1*z_d1x_d1y
738 621828 : q15 = y%d1val1*z_d2y
739 621828 : q16 = q1*z_d1x_d2y
740 621828 : q17 = q0*z_d2x_d1y
741 621828 : q18 = 2.0_dp*x%d1val1_d1val2
742 621828 : q19 = 2.0_dp*y%d1val1_d1val2
743 621828 : q20 = 2.0_dp*x%d1val1*y%d1val1
744 621828 : q21 = x%d1val2*z_d2x_d1y
745 621828 : q22 = y%d1val2*z_d1x_d2y
746 621828 : q23 = q9*z_d1x_d2y
747 621828 : q24 = q8*z_d2x_d1y
748 621828 : q25 = 3.0_dp*x%d2val2
749 621828 : q26 = 3.0_dp*y%d2val2
750 621828 : binary%val = z_val
751 621828 : binary%d1val1 = x%d1val1*z_d1x + y%d1val1*z_d1y
752 621828 : binary%d1val2 = x%d1val2*z_d1x + y%d1val2*z_d1y
753 621828 : 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 621828 : + x%d1val1_d1val2*z_d1x + y%d1val1_d1val2*z_d1y
756 621828 : 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 621828 : + 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 621828 : + 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 621828 : + 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 621828 : + z_d3y*pow3(y%d1val2)
772 621828 : 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 0 : real(dp) :: q15
793 0 : real(dp) :: q14
794 0 : real(dp) :: q13
795 0 : real(dp) :: q12
796 0 : real(dp) :: q11
797 0 : real(dp) :: q10
798 0 : real(dp) :: q9
799 0 : real(dp) :: q8
800 : real(dp) :: q7
801 0 : real(dp) :: q6
802 0 : real(dp) :: q5
803 0 : real(dp) :: q4
804 0 : real(dp) :: q3
805 0 : real(dp) :: q2
806 0 : 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 3382260 : 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 3382260 : unary%val = -x%val
841 3382260 : unary%d1val1 = -x%d1val1
842 3382260 : unary%d1val2 = -x%d1val2
843 3382260 : unary%d2val1 = -x%d2val1
844 3382260 : unary%d1val1_d1val2 = -x%d1val1_d1val2
845 3382260 : unary%d2val2 = -x%d2val2
846 3382260 : unary%d3val1 = -x%d3val1
847 3382260 : unary%d2val1_d1val2 = -x%d2val1_d1val2
848 3382260 : unary%d1val1_d2val2 = -x%d1val1_d2val2
849 3382260 : unary%d3val2 = -x%d3val2
850 3382260 : end function unary_minus_self
851 :
852 1600090 : 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 1600090 : real(dp) :: q3
856 1600090 : real(dp) :: q2
857 1600090 : real(dp) :: q1
858 1600090 : real(dp) :: q0
859 1600090 : q0 = exp(x%val)
860 1600090 : q1 = x%d2val1 + pow2(x%d1val1)
861 1600090 : q2 = x%d2val2 + pow2(x%d1val2)
862 1600090 : q3 = 2.0_dp*x%d1val1_d1val2
863 1600090 : unary%val = q0
864 1600090 : unary%d1val1 = q0*x%d1val1
865 1600090 : unary%d1val2 = q0*x%d1val2
866 1600090 : unary%d2val1 = q0*q1
867 1600090 : unary%d1val1_d1val2 = q0*(x%d1val1*x%d1val2 + x%d1val1_d1val2)
868 1600090 : unary%d2val2 = q0*q2
869 1600090 : unary%d3val1 = q0*(3.0_dp*x%d1val1*x%d2val1 + x%d3val1 + pow3(x%d1val1))
870 1600090 : unary%d2val1_d1val2 = q0*(q1*x%d1val2 + q3*x%d1val1 + x%d2val1_d1val2)
871 1600090 : unary%d1val1_d2val2 = q0*(q2*x%d1val1 + q3*x%d1val2 + x%d1val1_d2val2)
872 1600090 : unary%d3val2 = q0*(3.0_dp*x%d1val2*x%d2val2 + x%d3val2 + pow3(x%d1val2))
873 1600090 : 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 0 : real(dp) :: q3
879 0 : real(dp) :: q2
880 0 : real(dp) :: q1
881 0 : 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 0 : real(dp) :: q8
902 0 : real(dp) :: q7
903 0 : real(dp) :: q6
904 0 : real(dp) :: q5
905 0 : real(dp) :: q4
906 0 : real(dp) :: q3
907 0 : real(dp) :: q2
908 : real(dp) :: q1
909 0 : 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 0 : real(dp) :: q12
935 0 : real(dp) :: q11
936 0 : real(dp) :: q10
937 0 : real(dp) :: q9
938 0 : real(dp) :: q8
939 0 : real(dp) :: q7
940 0 : real(dp) :: q6
941 0 : real(dp) :: q5
942 0 : real(dp) :: q4
943 0 : real(dp) :: q3
944 0 : real(dp) :: q2
945 0 : 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 4269482 : 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 4269482 : real(dp) :: q9
976 4269482 : real(dp) :: q8
977 4269482 : real(dp) :: q7
978 4269482 : real(dp) :: q6
979 4269482 : real(dp) :: q5
980 4269482 : real(dp) :: q4
981 4269482 : real(dp) :: q3
982 4269482 : real(dp) :: q2
983 : real(dp) :: q1
984 4269482 : real(dp) :: q0
985 4269482 : q0 = powm1(x%val)
986 4269482 : q1 = pow2(x%val)
987 4269482 : q2 = powm1(q1)
988 4269482 : q3 = x%d2val1*x%val
989 4269482 : q4 = pow2(x%d1val1)
990 4269482 : q5 = x%d1val1_d1val2*x%val
991 4269482 : q6 = x%d2val2*x%val
992 4269482 : q7 = pow2(x%d1val2)
993 4269482 : q8 = powm1(pow3(x%val))
994 4269482 : q9 = 2.0_dp*x%d1val2
995 4269482 : unary%val = log(x%val)
996 4269482 : unary%d1val1 = q0*x%d1val1
997 4269482 : unary%d1val2 = q0*x%d1val2
998 4269482 : unary%d2val1 = q2*(q3 - q4)
999 4269482 : unary%d1val1_d1val2 = q2*(q5 - x%d1val1*x%d1val2)
1000 4269482 : unary%d2val2 = q2*(q6 - q7)
1001 4269482 : unary%d3val1 = q8*(-3.0_dp*q3*x%d1val1 + 2.0_dp*pow3(x%d1val1) + q1*x%d3val1)
1002 4269482 : unary%d2val1_d1val2 = q8*(-2.0_dp*q5*x%d1val1 + q1*x%d2val1_d1val2 - q3*x%d1val2 + q4*q9)
1003 4269482 : unary%d1val1_d2val2 = q8*(q1*x%d1val1_d2val2 - q5*q9 + x%d1val1*(2.0_dp*q7 - q6))
1004 4269482 : unary%d3val2 = q8*(-3.0_dp*q6*x%d1val2 + 2.0_dp*pow3(x%d1val2) + q1*x%d3val2)
1005 4269482 : 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 0 : real(dp) :: q10
1011 0 : real(dp) :: q9
1012 0 : real(dp) :: q8
1013 0 : real(dp) :: q7
1014 0 : real(dp) :: q6
1015 0 : real(dp) :: q5
1016 0 : real(dp) :: q4
1017 0 : real(dp) :: q3
1018 : real(dp) :: q2
1019 0 : 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 0 : real(dp) :: q9
1048 0 : real(dp) :: q8
1049 0 : real(dp) :: q7
1050 0 : real(dp) :: q6
1051 0 : real(dp) :: q5
1052 0 : real(dp) :: q4
1053 0 : real(dp) :: q3
1054 0 : real(dp) :: q2
1055 : real(dp) :: q1
1056 0 : 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 91040 : 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 91040 : real(dp) :: q10
1083 91040 : real(dp) :: q9
1084 91040 : real(dp) :: q8
1085 91040 : real(dp) :: q7
1086 91040 : real(dp) :: q6
1087 91040 : real(dp) :: q5
1088 : real(dp) :: q4
1089 91040 : real(dp) :: q3
1090 91040 : real(dp) :: q2
1091 91040 : real(dp) :: q1
1092 91040 : real(dp) :: q0
1093 91040 : q0 = powm1(ln10)
1094 91040 : q1 = q0*powm1(x%val)
1095 91040 : q2 = x%d2val1*x%val
1096 91040 : q3 = pow2(x%d1val1)
1097 91040 : q4 = pow2(x%val)
1098 91040 : q5 = q0*powm1(q4)
1099 91040 : q6 = x%d1val1_d1val2*x%val
1100 91040 : q7 = x%d2val2*x%val
1101 91040 : q8 = pow2(x%d1val2)
1102 91040 : q9 = q0*powm1(pow3(x%val))
1103 91040 : q10 = 2.0_dp*x%d1val2
1104 91040 : unary%val = q0*log(x%val)
1105 91040 : unary%d1val1 = q1*x%d1val1
1106 91040 : unary%d1val2 = q1*x%d1val2
1107 91040 : unary%d2val1 = q5*(q2 - q3)
1108 91040 : unary%d1val1_d1val2 = q5*(q6 - x%d1val1*x%d1val2)
1109 91040 : unary%d2val2 = q5*(q7 - q8)
1110 91040 : unary%d3val1 = q9*(-3.0_dp*q2*x%d1val1 + 2.0_dp*pow3(x%d1val1) + q4*x%d3val1)
1111 91040 : unary%d2val1_d1val2 = q9*(-2.0_dp*q6*x%d1val1 + q10*q3 - q2*x%d1val2 + q4*x%d2val1_d1val2)
1112 91040 : unary%d1val1_d2val2 = q9*(-q10*q6 + q4*x%d1val1_d2val2 + x%d1val1*(2.0_dp*q8 - q7))
1113 91040 : unary%d3val2 = q9*(-3.0_dp*q7*x%d1val2 + 2.0_dp*pow3(x%d1val2) + q4*x%d3val2)
1114 91040 : 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 0 : real(dp) :: q10
1120 0 : real(dp) :: q9
1121 0 : real(dp) :: q8
1122 0 : real(dp) :: q7
1123 0 : real(dp) :: q6
1124 0 : real(dp) :: q5
1125 : real(dp) :: q4
1126 0 : real(dp) :: q3
1127 0 : real(dp) :: q2
1128 0 : real(dp) :: q1
1129 0 : 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 0 : real(dp) :: q10
1157 0 : real(dp) :: q9
1158 0 : real(dp) :: q8
1159 0 : real(dp) :: q7
1160 0 : real(dp) :: q6
1161 0 : real(dp) :: q5
1162 : real(dp) :: q4
1163 0 : real(dp) :: q3
1164 0 : real(dp) :: q2
1165 0 : real(dp) :: q1
1166 0 : 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 0 : real(dp) :: q8
1194 0 : real(dp) :: q7
1195 0 : real(dp) :: q6
1196 0 : real(dp) :: q5
1197 0 : real(dp) :: q4
1198 0 : real(dp) :: q3
1199 0 : real(dp) :: q2
1200 0 : real(dp) :: q1
1201 0 : 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 0 : real(dp) :: q8
1227 0 : real(dp) :: q7
1228 0 : real(dp) :: q6
1229 0 : real(dp) :: q5
1230 0 : real(dp) :: q4
1231 0 : real(dp) :: q3
1232 0 : real(dp) :: q2
1233 0 : real(dp) :: q1
1234 0 : 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 0 : real(dp) :: q15
1260 0 : real(dp) :: q14
1261 0 : real(dp) :: q13
1262 0 : real(dp) :: q12
1263 0 : real(dp) :: q11
1264 0 : real(dp) :: q10
1265 0 : real(dp) :: q9
1266 0 : real(dp) :: q8
1267 0 : real(dp) :: q7
1268 0 : real(dp) :: q6
1269 0 : real(dp) :: q5
1270 0 : real(dp) :: q4
1271 0 : real(dp) :: q3
1272 0 : real(dp) :: q2
1273 0 : 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 0 : real(dp) :: q11
1307 0 : real(dp) :: q10
1308 0 : real(dp) :: q9
1309 0 : real(dp) :: q8
1310 0 : real(dp) :: q7
1311 0 : real(dp) :: q6
1312 0 : real(dp) :: q5
1313 0 : real(dp) :: q4
1314 0 : real(dp) :: q3
1315 0 : real(dp) :: q2
1316 0 : 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 0 : real(dp) :: q11
1346 0 : real(dp) :: q10
1347 0 : real(dp) :: q9
1348 0 : real(dp) :: q8
1349 0 : real(dp) :: q7
1350 0 : real(dp) :: q6
1351 0 : real(dp) :: q5
1352 0 : real(dp) :: q4
1353 0 : real(dp) :: q3
1354 0 : real(dp) :: q2
1355 0 : 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 0 : real(dp) :: q21
1385 0 : real(dp) :: q20
1386 0 : real(dp) :: q19
1387 0 : real(dp) :: q18
1388 0 : real(dp) :: q17
1389 0 : real(dp) :: q16
1390 0 : real(dp) :: q15
1391 0 : real(dp) :: q14
1392 0 : real(dp) :: q13
1393 0 : real(dp) :: q12
1394 0 : real(dp) :: q11
1395 0 : real(dp) :: q10
1396 0 : real(dp) :: q9
1397 0 : real(dp) :: q8
1398 0 : real(dp) :: q7
1399 0 : real(dp) :: q6
1400 0 : real(dp) :: q5
1401 0 : real(dp) :: q4
1402 0 : real(dp) :: q3
1403 0 : 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 90596 : 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 90596 : real(dp) :: q8
1444 90596 : real(dp) :: q7
1445 90596 : real(dp) :: q6
1446 90596 : real(dp) :: q5
1447 90596 : real(dp) :: q4
1448 90596 : real(dp) :: q3
1449 90596 : real(dp) :: q2
1450 90596 : real(dp) :: q1
1451 90596 : real(dp) :: q0
1452 90596 : q0 = sinh(x%val)
1453 90596 : q1 = cosh(x%val)
1454 90596 : q2 = q1*x%d1val2
1455 90596 : q3 = pow2(x%d1val1)
1456 90596 : q4 = q0*x%d1val2
1457 90596 : q5 = pow2(x%d1val2)
1458 90596 : q6 = q0*x%d1val1
1459 90596 : q7 = 2.0_dp*x%d1val1_d1val2
1460 90596 : q8 = q0*x%d2val2
1461 90596 : unary%val = q0
1462 90596 : unary%d1val1 = q1*x%d1val1
1463 90596 : unary%d1val2 = q2
1464 90596 : unary%d2val1 = q0*q3 + q1*x%d2val1
1465 90596 : unary%d1val1_d1val2 = q1*x%d1val1_d1val2 + q4*x%d1val1
1466 90596 : unary%d2val2 = q0*q5 + q1*x%d2val2
1467 90596 : unary%d3val1 = 3.0_dp*q6*x%d2val1 + q1*x%d3val1 + q1*pow3(x%d1val1)
1468 90596 : unary%d2val1_d1val2 = q1*x%d2val1_d1val2 + q2*q3 + q4*x%d2val1 + q6*q7
1469 90596 : unary%d1val1_d2val2 = q1*x%d1val1_d2val2 + q4*q7 + x%d1val1*(q1*q5 + q8)
1470 90596 : unary%d3val2 = 3.0_dp*q8*x%d1val2 + q1*x%d3val2 + q1*pow3(x%d1val2)
1471 90596 : end function sinh_self
1472 :
1473 90596 : 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 90596 : real(dp) :: q8
1477 90596 : real(dp) :: q7
1478 90596 : real(dp) :: q6
1479 90596 : real(dp) :: q5
1480 90596 : real(dp) :: q4
1481 90596 : real(dp) :: q3
1482 90596 : real(dp) :: q2
1483 90596 : real(dp) :: q1
1484 90596 : real(dp) :: q0
1485 90596 : q0 = cosh(x%val)
1486 90596 : q1 = sinh(x%val)
1487 90596 : q2 = q1*x%d1val2
1488 90596 : q3 = pow2(x%d1val1)
1489 90596 : q4 = q0*x%d1val2
1490 90596 : q5 = pow2(x%d1val2)
1491 90596 : q6 = q0*x%d1val1
1492 90596 : q7 = 2.0_dp*x%d1val1_d1val2
1493 90596 : q8 = q0*x%d2val2
1494 90596 : unary%val = q0
1495 90596 : unary%d1val1 = q1*x%d1val1
1496 90596 : unary%d1val2 = q2
1497 90596 : unary%d2val1 = q0*q3 + q1*x%d2val1
1498 90596 : unary%d1val1_d1val2 = q1*x%d1val1_d1val2 + q4*x%d1val1
1499 90596 : unary%d2val2 = q0*q5 + q1*x%d2val2
1500 90596 : unary%d3val1 = 3.0_dp*q6*x%d2val1 + q1*x%d3val1 + q1*pow3(x%d1val1)
1501 90596 : unary%d2val1_d1val2 = q1*x%d2val1_d1val2 + q2*q3 + q4*x%d2val1 + q6*q7
1502 90596 : unary%d1val1_d2val2 = q1*x%d1val1_d2val2 + q4*q7 + x%d1val1*(q1*q5 + q8)
1503 90596 : unary%d3val2 = 3.0_dp*q8*x%d1val2 + q1*x%d3val2 + q1*pow3(x%d1val2)
1504 90596 : end function cosh_self
1505 :
1506 310914 : 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 310914 : real(dp) :: q15
1510 310914 : real(dp) :: q14
1511 310914 : real(dp) :: q13
1512 310914 : real(dp) :: q12
1513 310914 : real(dp) :: q11
1514 310914 : real(dp) :: q10
1515 310914 : real(dp) :: q9
1516 310914 : real(dp) :: q8
1517 310914 : real(dp) :: q7
1518 310914 : real(dp) :: q6
1519 310914 : real(dp) :: q5
1520 310914 : real(dp) :: q4
1521 310914 : real(dp) :: q3
1522 310914 : real(dp) :: q2
1523 310914 : real(dp) :: q1
1524 : real(dp) :: q0
1525 310914 : q0 = tanh(x%val)
1526 310914 : q1 = pow2(q0)
1527 310914 : q2 = q1 - 1
1528 310914 : q3 = powm1(pow2(cosh(x%val)))
1529 310914 : q4 = pow2(x%d1val1)
1530 310914 : q5 = 2.0_dp*q0
1531 310914 : q6 = q4*q5 - x%d2val1
1532 310914 : q7 = q5*x%d1val2
1533 310914 : q8 = pow2(x%d1val2)
1534 310914 : q9 = pow3(x%d1val1)
1535 310914 : q10 = q0*x%d1val1
1536 310914 : q11 = 6.0_dp*q1
1537 310914 : q12 = 4.0_dp*x%d1val1_d1val2
1538 310914 : q13 = q8*x%d1val1
1539 310914 : q14 = q0*x%d1val2
1540 310914 : q15 = pow3(x%d1val2)
1541 310914 : unary%val = q0
1542 310914 : unary%d1val1 = -q2*x%d1val1
1543 310914 : unary%d1val2 = -q2*x%d1val2
1544 310914 : unary%d2val1 = -q3*q6
1545 310914 : unary%d1val1_d1val2 = -q3*(q7*x%d1val1 - x%d1val1_d1val2)
1546 310914 : unary%d2val2 = -q3*(q5*q8 - x%d2val2)
1547 310914 : unary%d3val1 = q3*(-2.0_dp*q9 - 6.0_dp*q10*x%d2val1 + q11*q9 + x%d3val1)
1548 310914 : unary%d2val1_d1val2 = -q3*(2.0_dp*q3*q4*x%d1val2 + q10*q12 - q6*q7 - x%d2val1_d1val2)
1549 310914 : unary%d1val1_d2val2 = -q3*(2.0_dp*q13 - q11*q13 + q12*q14 + q5*x%d1val1*x%d2val2 - x%d1val1_d2val2)
1550 310914 : unary%d3val2 = q3*(-2.0_dp*q15 - 6.0_dp*q14*x%d2val2 + q11*q15 + x%d3val2)
1551 310914 : 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 0 : real(dp) :: q15
1557 0 : real(dp) :: q14
1558 0 : real(dp) :: q13
1559 0 : real(dp) :: q12
1560 0 : real(dp) :: q11
1561 0 : real(dp) :: q10
1562 0 : real(dp) :: q9
1563 0 : real(dp) :: q8
1564 0 : real(dp) :: q7
1565 0 : real(dp) :: q6
1566 : real(dp) :: q5
1567 0 : real(dp) :: q4
1568 0 : real(dp) :: q3
1569 0 : real(dp) :: q2
1570 0 : real(dp) :: q1
1571 0 : 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 0 : real(dp) :: q17
1605 0 : real(dp) :: q16
1606 0 : real(dp) :: q15
1607 0 : real(dp) :: q14
1608 0 : real(dp) :: q13
1609 0 : real(dp) :: q12
1610 0 : real(dp) :: q11
1611 0 : real(dp) :: q10
1612 0 : real(dp) :: q9
1613 0 : real(dp) :: q8
1614 0 : real(dp) :: q7
1615 : real(dp) :: q6
1616 0 : real(dp) :: q5
1617 0 : real(dp) :: q4
1618 0 : real(dp) :: q3
1619 0 : real(dp) :: q2
1620 0 : real(dp) :: q1
1621 0 : 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 401954 : 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 401954 : real(dp) :: q17
1657 401954 : real(dp) :: q16
1658 401954 : real(dp) :: q15
1659 401954 : real(dp) :: q14
1660 401954 : real(dp) :: q13
1661 401954 : real(dp) :: q12
1662 401954 : real(dp) :: q11
1663 401954 : real(dp) :: q10
1664 401954 : real(dp) :: q9
1665 401954 : real(dp) :: q8
1666 401954 : real(dp) :: q7
1667 401954 : real(dp) :: q6
1668 401954 : real(dp) :: q5
1669 401954 : real(dp) :: q4
1670 : real(dp) :: q3
1671 401954 : real(dp) :: q2
1672 : real(dp) :: q1
1673 401954 : real(dp) :: q0
1674 401954 : q0 = pow2(x%val)
1675 401954 : q1 = q0 + 1
1676 401954 : q2 = powm1(q1)
1677 401954 : q3 = pow2(q1)
1678 401954 : q4 = powm1(q3)
1679 401954 : q5 = pow2(x%d1val1)
1680 401954 : q6 = 2.0_dp*x%val
1681 401954 : q7 = q5*q6
1682 401954 : q8 = q1*x%d2val1
1683 401954 : q9 = x%d1val1*x%d1val2
1684 401954 : q10 = q1*x%d1val1_d1val2
1685 401954 : q11 = pow2(x%d1val2)
1686 401954 : q12 = powm1(pow3(q1))
1687 401954 : q13 = 8.0_dp*q0
1688 401954 : q14 = 2.0_dp*x%d1val1
1689 401954 : q15 = q1*q14
1690 401954 : q16 = 4.0_dp*q0
1691 401954 : q17 = x%d2val2*x%val
1692 401954 : unary%val = atan(x%val)
1693 401954 : unary%d1val1 = q2*x%d1val1
1694 401954 : unary%d1val2 = q2*x%d1val2
1695 401954 : unary%d2val1 = q4*(-q7 + q8)
1696 401954 : unary%d1val1_d1val2 = q4*(q10 - q6*q9)
1697 401954 : unary%d2val2 = q4*(q1*x%d2val2 - q11*q6)
1698 401954 : unary%d3val1 = q12*(q13*pow3(x%d1val1) - q15*(3.0_dp*x%d2val1*x%val + q5) + q3*x%d3val1)
1699 401954 : unary%d2val1_d1val2 = q12*(-q15*(q6*x%d1val1_d1val2 + q9) + q16*q5*x%d1val2 + q3*x%d2val1_d1val2 + q6*x%d1val2*(q7 - q8))
1700 401954 : unary%d1val1_d2val2 = q12*(-4.0_dp*q10*x%d1val2*x%val - q14*(q1*(q11 + q17) - q11*q16) + q3*x%d1val1_d2val2)
1701 401954 : unary%d3val2 = q12*(-2.0_dp*q1*x%d1val2*(3.0_dp*q17 + q11) + q13*pow3(x%d1val2) + q3*x%d3val2)
1702 401954 : 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 0 : real(dp) :: q18
1708 0 : real(dp) :: q17
1709 0 : real(dp) :: q16
1710 0 : real(dp) :: q15
1711 0 : real(dp) :: q14
1712 0 : real(dp) :: q13
1713 0 : real(dp) :: q12
1714 0 : real(dp) :: q11
1715 0 : real(dp) :: q10
1716 0 : real(dp) :: q9
1717 0 : real(dp) :: q8
1718 0 : real(dp) :: q7
1719 0 : real(dp) :: q6
1720 : real(dp) :: q5
1721 0 : real(dp) :: q4
1722 0 : real(dp) :: q3
1723 0 : real(dp) :: q2
1724 0 : real(dp) :: q1
1725 0 : 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 0 : real(dp) :: q20
1762 0 : real(dp) :: q19
1763 0 : real(dp) :: q18
1764 0 : real(dp) :: q17
1765 0 : real(dp) :: q16
1766 0 : real(dp) :: q15
1767 0 : real(dp) :: q14
1768 0 : real(dp) :: q13
1769 0 : real(dp) :: q12
1770 0 : real(dp) :: q11
1771 0 : real(dp) :: q10
1772 0 : real(dp) :: q9
1773 0 : real(dp) :: q8
1774 0 : real(dp) :: q7
1775 0 : real(dp) :: q6
1776 : real(dp) :: q5
1777 0 : real(dp) :: q4
1778 0 : real(dp) :: q3
1779 0 : real(dp) :: q2
1780 0 : real(dp) :: q1
1781 0 : 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 0 : real(dp) :: q24
1820 0 : real(dp) :: q23
1821 0 : real(dp) :: q22
1822 0 : real(dp) :: q21
1823 0 : real(dp) :: q20
1824 0 : real(dp) :: q19
1825 0 : real(dp) :: q18
1826 0 : real(dp) :: q17
1827 0 : real(dp) :: q16
1828 0 : real(dp) :: q15
1829 0 : real(dp) :: q14
1830 0 : real(dp) :: q13
1831 0 : real(dp) :: q12
1832 0 : real(dp) :: q11
1833 0 : real(dp) :: q10
1834 0 : real(dp) :: q9
1835 0 : real(dp) :: q8
1836 0 : real(dp) :: q7
1837 0 : real(dp) :: q6
1838 0 : real(dp) :: q5
1839 0 : real(dp) :: q4
1840 0 : real(dp) :: q3
1841 0 : real(dp) :: q2
1842 0 : real(dp) :: q1
1843 0 : 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 0 : real(dp) :: q15
1889 0 : real(dp) :: q14
1890 0 : real(dp) :: q13
1891 0 : real(dp) :: q12
1892 0 : real(dp) :: q11
1893 0 : real(dp) :: q10
1894 0 : real(dp) :: q9
1895 0 : real(dp) :: q8
1896 0 : real(dp) :: q7
1897 0 : real(dp) :: q6
1898 0 : real(dp) :: q5
1899 0 : real(dp) :: q4
1900 0 : real(dp) :: q3
1901 0 : real(dp) :: q2
1902 : real(dp) :: q1
1903 0 : 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 0 : real(dp) :: q15
1937 0 : real(dp) :: q14
1938 0 : real(dp) :: q13
1939 0 : real(dp) :: q12
1940 0 : real(dp) :: q11
1941 0 : real(dp) :: q10
1942 0 : real(dp) :: q9
1943 0 : real(dp) :: q8
1944 0 : real(dp) :: q7
1945 0 : real(dp) :: q6
1946 0 : real(dp) :: q5
1947 0 : real(dp) :: q4
1948 0 : real(dp) :: q3
1949 0 : real(dp) :: q2
1950 : real(dp) :: q1
1951 0 : 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 0 : real(dp) :: q17
1985 0 : real(dp) :: q16
1986 0 : real(dp) :: q15
1987 0 : real(dp) :: q14
1988 0 : real(dp) :: q13
1989 : real(dp) :: q12
1990 0 : real(dp) :: q11
1991 0 : real(dp) :: q10
1992 0 : real(dp) :: q9
1993 0 : real(dp) :: q8
1994 0 : real(dp) :: q7
1995 0 : real(dp) :: q6
1996 0 : real(dp) :: q5
1997 0 : real(dp) :: q4
1998 : real(dp) :: q3
1999 0 : real(dp) :: q2
2000 : real(dp) :: q1
2001 0 : 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 7067708 : 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 7067708 : real(dp) :: q12
2036 7067708 : real(dp) :: q11
2037 7067708 : real(dp) :: q10
2038 7067708 : real(dp) :: q9
2039 7067708 : real(dp) :: q8
2040 7067708 : real(dp) :: q7
2041 7067708 : real(dp) :: q6
2042 7067708 : real(dp) :: q5
2043 7067708 : real(dp) :: q4
2044 7067708 : real(dp) :: q3
2045 7067708 : real(dp) :: q2
2046 7067708 : real(dp) :: q1
2047 : real(dp) :: q0
2048 7067708 : q0 = sqrt(x%val)
2049 7067708 : q1 = 0.5_dp*powm1(q0)
2050 7067708 : q2 = 2.0_dp*x%val
2051 7067708 : q3 = q2*x%d2val1
2052 7067708 : q4 = pow2(x%d1val1)
2053 7067708 : q5 = 0.25_dp*powm1(pow3(sqrt(x%val)))
2054 7067708 : q6 = q2*x%d2val2
2055 7067708 : q7 = pow2(x%d1val2)
2056 7067708 : q8 = x%d1val1*x%val
2057 7067708 : q9 = 4.0_dp*pow2(x%val)
2058 7067708 : q10 = 0.125_dp*powm1(pow5(sqrt(x%val)))
2059 7067708 : q11 = 4.0_dp*x%d1val1_d1val2
2060 7067708 : q12 = x%d1val2*x%val
2061 7067708 : unary%val = q0
2062 7067708 : unary%d1val1 = q1*x%d1val1
2063 7067708 : unary%d1val2 = q1*x%d1val2
2064 7067708 : unary%d2val1 = q5*(q3 - q4)
2065 7067708 : unary%d1val1_d1val2 = q5*(q2*x%d1val1_d1val2 - x%d1val1*x%d1val2)
2066 7067708 : unary%d2val2 = q5*(q6 - q7)
2067 7067708 : unary%d3val1 = q10*(-6.0_dp*q8*x%d2val1 + 3.0_dp*pow3(x%d1val1) + q9*x%d3val1)
2068 7067708 : unary%d2val1_d1val2 = q10*(3.0_dp*q4*x%d1val2 - q11*q8 - q3*x%d1val2 + q9*x%d2val1_d1val2)
2069 7067708 : unary%d1val1_d2val2 = q10*(-q11*q12 + q9*x%d1val1_d2val2 + x%d1val1*(3.0_dp*q7 - q6))
2070 7067708 : unary%d3val2 = q10*(-6.0_dp*q12*x%d2val2 + 3.0_dp*pow3(x%d1val2) + q9*x%d3val2)
2071 7067708 : end function sqrt_self
2072 :
2073 5998406 : 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 5998406 : real(dp) :: q2
2077 5998406 : real(dp) :: q1
2078 5998406 : real(dp) :: q0
2079 5998406 : q0 = 2.0_dp*x%val
2080 5998406 : q1 = 2.0_dp*x%d1val2
2081 5998406 : q2 = 4.0_dp*x%d1val1_d1val2
2082 5998406 : unary%val = pow2(x%val)
2083 5998406 : unary%d1val1 = q0*x%d1val1
2084 5998406 : unary%d1val2 = q0*x%d1val2
2085 5998406 : unary%d2val1 = 2.0_dp*pow2(x%d1val1) + q0*x%d2val1
2086 5998406 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2 + q1*x%d1val1
2087 5998406 : unary%d2val2 = 2.0_dp*pow2(x%d1val2) + q0*x%d2val2
2088 5998406 : unary%d3val1 = 6.0_dp*x%d1val1*x%d2val1 + q0*x%d3val1
2089 5998406 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2 + q1*x%d2val1 + q2*x%d1val1
2090 5998406 : unary%d1val1_d2val2 = 2.0_dp*x%d1val1*x%d2val2 + q0*x%d1val1_d2val2 + q2*x%d1val2
2091 5998406 : unary%d3val2 = 6.0_dp*x%d1val2*x%d2val2 + q0*x%d3val2
2092 5998406 : end function pow2_self
2093 :
2094 1911004 : 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 1911004 : real(dp) :: q6
2098 1911004 : real(dp) :: q5
2099 1911004 : real(dp) :: q4
2100 1911004 : real(dp) :: q3
2101 1911004 : real(dp) :: q2
2102 1911004 : real(dp) :: q1
2103 1911004 : real(dp) :: q0
2104 1911004 : q0 = 3.0_dp*pow2(x%val)
2105 1911004 : q1 = x%d2val1*x%val
2106 1911004 : q2 = 2.0_dp*pow2(x%d1val1) + q1
2107 1911004 : q3 = 3.0_dp*x%val
2108 1911004 : q4 = x%d1val1_d1val2*x%val
2109 1911004 : q5 = x%d2val2*x%val
2110 1911004 : q6 = pow2(x%d1val2)
2111 1911004 : unary%val = pow3(x%val)
2112 1911004 : unary%d1val1 = q0*x%d1val1
2113 1911004 : unary%d1val2 = q0*x%d1val2
2114 1911004 : unary%d2val1 = q2*q3
2115 1911004 : unary%d1val1_d1val2 = q3*(2.0_dp*x%d1val1*x%d1val2 + q4)
2116 1911004 : unary%d2val2 = q3*(2.0_dp*q6 + q5)
2117 1911004 : 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 1911004 : + q3*(4.0_dp*x%d1val1*x%d1val1_d1val2 + x%d1val2*x%d2val1 + x%d2val1_d1val2*x%val)
2120 1911004 : unary%d1val1_d2val2 = 12.0_dp*q4*x%d1val2 + 6.0_dp*x%d1val1*(q5 + q6) + q0*x%d1val1_d2val2
2121 1911004 : unary%d3val2 = 18.0_dp*q5*x%d1val2 + 6.0_dp*pow3(x%d1val2) + q0*x%d3val2
2122 1911004 : end function pow3_self
2123 :
2124 136560 : 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 136560 : real(dp) :: q9
2128 136560 : real(dp) :: q8
2129 136560 : real(dp) :: q7
2130 136560 : real(dp) :: q6
2131 136560 : real(dp) :: q5
2132 136560 : real(dp) :: q4
2133 136560 : real(dp) :: q3
2134 136560 : real(dp) :: q2
2135 136560 : real(dp) :: q1
2136 136560 : real(dp) :: q0
2137 136560 : q0 = 4.0_dp*pow3(x%val)
2138 136560 : q1 = x%d2val1*x%val
2139 136560 : q2 = 3.0_dp*pow2(x%d1val1) + q1
2140 136560 : q3 = pow2(x%val)
2141 136560 : q4 = 4.0_dp*q3
2142 136560 : q5 = x%d1val1_d1val2*x%val
2143 136560 : q6 = 3.0_dp*x%d1val1
2144 136560 : q7 = x%d2val2*x%val
2145 136560 : q8 = pow2(x%d1val2)
2146 136560 : q9 = 4.0_dp*x%val
2147 136560 : unary%val = pow4(x%val)
2148 136560 : unary%d1val1 = q0*x%d1val1
2149 136560 : unary%d1val2 = q0*x%d1val2
2150 136560 : unary%d2val1 = q2*q4
2151 136560 : unary%d1val1_d1val2 = q4*(q5 + q6*x%d1val2)
2152 136560 : unary%d2val2 = q4*(3.0_dp*q8 + q7)
2153 136560 : 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 136560 : + x%val*(6.0_dp*x%d1val1*x%d1val1_d1val2 + x%d1val2*x%d2val1 + x%d2val1_d1val2*x%val))
2156 136560 : unary%d1val1_d2val2 = q9*(6.0_dp*q5*x%d1val2 + q3*x%d1val1_d2val2 + q6*(2.0_dp*q8 + q7))
2157 136560 : unary%d3val2 = q9*(6.0_dp*pow3(x%d1val2) + 9.0_dp*q7*x%d1val2 + q3*x%d3val2)
2158 136560 : 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 0 : real(dp) :: q9
2164 0 : real(dp) :: q8
2165 0 : real(dp) :: q7
2166 0 : real(dp) :: q6
2167 0 : real(dp) :: q5
2168 0 : real(dp) :: q4
2169 0 : real(dp) :: q3
2170 0 : real(dp) :: q2
2171 0 : real(dp) :: q1
2172 0 : 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 0 : real(dp) :: q9
2200 0 : real(dp) :: q8
2201 0 : real(dp) :: q7
2202 0 : real(dp) :: q6
2203 0 : real(dp) :: q5
2204 0 : real(dp) :: q4
2205 0 : real(dp) :: q3
2206 0 : real(dp) :: q2
2207 0 : real(dp) :: q1
2208 0 : 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 0 : real(dp) :: q9
2236 0 : real(dp) :: q8
2237 0 : real(dp) :: q7
2238 0 : real(dp) :: q6
2239 0 : real(dp) :: q5
2240 0 : real(dp) :: q4
2241 0 : real(dp) :: q3
2242 0 : real(dp) :: q2
2243 0 : real(dp) :: q1
2244 0 : 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 0 : real(dp) :: q9
2272 0 : real(dp) :: q8
2273 0 : real(dp) :: q7
2274 0 : real(dp) :: q6
2275 0 : real(dp) :: q5
2276 0 : real(dp) :: q4
2277 0 : real(dp) :: q3
2278 0 : real(dp) :: q2
2279 0 : real(dp) :: q1
2280 0 : 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 45520 : 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 45520 : real(dp) :: q0
2308 45520 : q0 = sgn(x%val)
2309 45520 : unary%val = Abs(x%val)
2310 45520 : unary%d1val1 = q0*x%d1val1
2311 45520 : unary%d1val2 = q0*x%d1val2
2312 45520 : unary%d2val1 = q0*x%d2val1
2313 45520 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
2314 45520 : unary%d2val2 = q0*x%d2val2
2315 45520 : unary%d3val1 = q0*x%d3val1
2316 45520 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
2317 45520 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
2318 45520 : unary%d3val2 = q0*x%d3val2
2319 45520 : end function abs_self
2320 :
2321 11856962 : 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 11856962 : binary%val = x%val + y%val
2326 11856962 : binary%d1val1 = x%d1val1 + y%d1val1
2327 11856962 : binary%d1val2 = x%d1val2 + y%d1val2
2328 11856962 : binary%d2val1 = x%d2val1 + y%d2val1
2329 11856962 : binary%d1val1_d1val2 = x%d1val1_d1val2 + y%d1val1_d1val2
2330 11856962 : binary%d2val2 = x%d2val2 + y%d2val2
2331 11856962 : binary%d3val1 = x%d3val1 + y%d3val1
2332 11856962 : binary%d2val1_d1val2 = x%d2val1_d1val2 + y%d2val1_d1val2
2333 11856962 : binary%d1val1_d2val2 = x%d1val1_d2val2 + y%d1val1_d2val2
2334 11856962 : binary%d3val2 = x%d3val2 + y%d3val2
2335 11856962 : end function add_self
2336 :
2337 447474 : 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 447474 : unary%val = x%val + y
2342 447474 : unary%d1val1 = x%d1val1
2343 447474 : unary%d1val2 = x%d1val2
2344 447474 : unary%d2val1 = x%d2val1
2345 447474 : unary%d1val1_d1val2 = x%d1val1_d1val2
2346 447474 : unary%d2val2 = x%d2val2
2347 447474 : unary%d3val1 = x%d3val1
2348 447474 : unary%d2val1_d1val2 = x%d2val1_d1val2
2349 447474 : unary%d1val1_d2val2 = x%d1val1_d2val2
2350 447474 : unary%d3val2 = x%d3val2
2351 447474 : end function add_self_real
2352 :
2353 14271160 : 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 14271160 : unary%val = x%val + z
2358 14271160 : unary%d1val1 = x%d1val1
2359 14271160 : unary%d1val2 = x%d1val2
2360 14271160 : unary%d2val1 = x%d2val1
2361 14271160 : unary%d1val1_d1val2 = x%d1val1_d1val2
2362 14271160 : unary%d2val2 = x%d2val2
2363 14271160 : unary%d3val1 = x%d3val1
2364 14271160 : unary%d2val1_d1val2 = x%d2val1_d1val2
2365 14271160 : unary%d1val1_d2val2 = x%d1val1_d2val2
2366 14271160 : unary%d3val2 = x%d3val2
2367 14271160 : 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 0 : 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 310914 : 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 310914 : real(dp) :: y_dp
2392 310914 : y_dp = z
2393 310914 : unary%val = x%val + y_dp
2394 310914 : unary%d1val1 = x%d1val1
2395 310914 : unary%d1val2 = x%d1val2
2396 310914 : unary%d2val1 = x%d2val1
2397 310914 : unary%d1val1_d1val2 = x%d1val1_d1val2
2398 310914 : unary%d2val2 = x%d2val2
2399 310914 : unary%d3val1 = x%d3val1
2400 310914 : unary%d2val1_d1val2 = x%d2val1_d1val2
2401 310914 : unary%d1val1_d2val2 = x%d1val1_d2val2
2402 310914 : unary%d3val2 = x%d3val2
2403 310914 : end function add_int_self
2404 :
2405 2586078 : 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 2586078 : binary%val = x%val - y%val
2410 2586078 : binary%d1val1 = x%d1val1 - y%d1val1
2411 2586078 : binary%d1val2 = x%d1val2 - y%d1val2
2412 2586078 : binary%d2val1 = x%d2val1 - y%d2val1
2413 2586078 : binary%d1val1_d1val2 = x%d1val1_d1val2 - y%d1val1_d1val2
2414 2586078 : binary%d2val2 = x%d2val2 - y%d2val2
2415 2586078 : binary%d3val1 = x%d3val1 - y%d3val1
2416 2586078 : binary%d2val1_d1val2 = x%d2val1_d1val2 - y%d2val1_d1val2
2417 2586078 : binary%d1val1_d2val2 = x%d1val1_d2val2 - y%d1val1_d2val2
2418 2586078 : binary%d3val2 = x%d3val2 - y%d3val2
2419 2586078 : end function sub_self
2420 :
2421 803500 : 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 803500 : unary%val = x%val - y
2426 803500 : unary%d1val1 = x%d1val1
2427 803500 : unary%d1val2 = x%d1val2
2428 803500 : unary%d2val1 = x%d2val1
2429 803500 : unary%d1val1_d1val2 = x%d1val1_d1val2
2430 803500 : unary%d2val2 = x%d2val2
2431 803500 : unary%d3val1 = x%d3val1
2432 803500 : unary%d2val1_d1val2 = x%d2val1_d1val2
2433 803500 : unary%d1val1_d2val2 = x%d1val1_d2val2
2434 803500 : unary%d3val2 = x%d3val2
2435 803500 : end function sub_self_real
2436 :
2437 2047156 : 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 2047156 : unary%val = -x%val + z
2442 2047156 : unary%d1val1 = -x%d1val1
2443 2047156 : unary%d1val2 = -x%d1val2
2444 2047156 : unary%d2val1 = -x%d2val1
2445 2047156 : unary%d1val1_d1val2 = -x%d1val1_d1val2
2446 2047156 : unary%d2val2 = -x%d2val2
2447 2047156 : unary%d3val1 = -x%d3val1
2448 2047156 : unary%d2val1_d1val2 = -x%d2val1_d1val2
2449 2047156 : unary%d1val1_d2val2 = -x%d1val1_d2val2
2450 2047156 : unary%d3val2 = -x%d3val2
2451 2047156 : 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 0 : 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 0 : 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 15066954 : 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 15066954 : real(dp) :: q1
2494 15066954 : real(dp) :: q0
2495 15066954 : q0 = 2.0_dp*x%d1val1
2496 15066954 : q1 = 2.0_dp*y%d1val2
2497 15066954 : binary%val = x%val*y%val
2498 15066954 : binary%d1val1 = x%d1val1*y%val + x%val*y%d1val1
2499 15066954 : binary%d1val2 = x%d1val2*y%val + x%val*y%d1val2
2500 15066954 : binary%d2val1 = q0*y%d1val1 + x%d2val1*y%val + x%val*y%d2val1
2501 15066954 : binary%d1val1_d1val2 = x%d1val1*y%d1val2 + x%d1val1_d1val2*y%val + x%d1val2*y%d1val1 + x%val*y%d1val1_d1val2
2502 15066954 : binary%d2val2 = q1*x%d1val2 + x%d2val2*y%val + x%val*y%d2val2
2503 15066954 : 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 15066954 : + 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 15066954 : + x%d1val1*y%d2val2 + x%d1val1_d2val2*y%val + x%d2val2*y%d1val1 + x%val*y%d1val1_d2val2
2508 15066954 : 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 15066954 : end function mul_self
2510 :
2511 5880898 : 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 5880898 : unary%val = x%val*y
2516 5880898 : unary%d1val1 = x%d1val1*y
2517 5880898 : unary%d1val2 = x%d1val2*y
2518 5880898 : unary%d2val1 = x%d2val1*y
2519 5880898 : unary%d1val1_d1val2 = x%d1val1_d1val2*y
2520 5880898 : unary%d2val2 = x%d2val2*y
2521 5880898 : unary%d3val1 = x%d3val1*y
2522 5880898 : unary%d2val1_d1val2 = x%d2val1_d1val2*y
2523 5880898 : unary%d1val1_d2val2 = x%d1val1_d2val2*y
2524 5880898 : unary%d3val2 = x%d3val2*y
2525 5880898 : end function mul_self_real
2526 :
2527 21419300 : 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 21419300 : unary%val = x%val*z
2532 21419300 : unary%d1val1 = x%d1val1*z
2533 21419300 : unary%d1val2 = x%d1val2*z
2534 21419300 : unary%d2val1 = x%d2val1*z
2535 21419300 : unary%d1val1_d1val2 = x%d1val1_d1val2*z
2536 21419300 : unary%d2val2 = x%d2val2*z
2537 21419300 : unary%d3val1 = x%d3val1*z
2538 21419300 : unary%d2val1_d1val2 = x%d2val1_d1val2*z
2539 21419300 : unary%d1val1_d2val2 = x%d1val1_d2val2*z
2540 21419300 : unary%d3val2 = x%d3val2*z
2541 21419300 : 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 0 : 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 0 : 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 9493216 : 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 9493216 : real(dp) :: q22
2584 9493216 : real(dp) :: q21
2585 9493216 : real(dp) :: q20
2586 9493216 : real(dp) :: q19
2587 9493216 : real(dp) :: q18
2588 9493216 : real(dp) :: q17
2589 9493216 : real(dp) :: q16
2590 9493216 : real(dp) :: q15
2591 9493216 : real(dp) :: q14
2592 9493216 : real(dp) :: q13
2593 9493216 : real(dp) :: q12
2594 9493216 : real(dp) :: q11
2595 9493216 : real(dp) :: q10
2596 9493216 : real(dp) :: q9
2597 9493216 : real(dp) :: q8
2598 9493216 : real(dp) :: q7
2599 : real(dp) :: q6
2600 9493216 : real(dp) :: q5
2601 9493216 : real(dp) :: q4
2602 9493216 : real(dp) :: q3
2603 9493216 : real(dp) :: q2
2604 9493216 : real(dp) :: q1
2605 : real(dp) :: q0
2606 9493216 : q0 = pow2(y%val)
2607 9493216 : q1 = powm1(q0)
2608 9493216 : q2 = x%d1val1*y%val
2609 9493216 : q3 = x%val*y%d1val1
2610 9493216 : q4 = x%d1val2*y%val
2611 9493216 : q5 = x%val*y%d1val2
2612 9493216 : q6 = pow3(y%val)
2613 9493216 : q7 = powm1(q6)
2614 9493216 : q8 = q0*x%d2val1
2615 9493216 : q9 = 2.0_dp*y%d1val1
2616 9493216 : q10 = y%d2val1*y%val
2617 9493216 : q11 = pow2(y%d1val1)
2618 9493216 : q12 = 2.0_dp*q11
2619 9493216 : q13 = -q10 + q12
2620 9493216 : q14 = q0*x%d1val1_d1val2
2621 9493216 : q15 = 2.0_dp*y%d1val2
2622 9493216 : q16 = x%d1val2*y%d1val1
2623 9493216 : q17 = q0*x%d2val2
2624 9493216 : q18 = y%d2val2*y%val
2625 9493216 : q19 = pow2(y%d1val2)
2626 9493216 : q20 = 2.0_dp*q19 - q18
2627 9493216 : q21 = powm1(pow4(y%val))
2628 9493216 : q22 = 2.0_dp*y%d1val1_d1val2
2629 9493216 : binary%val = x%val*powm1(y%val)
2630 9493216 : binary%d1val1 = q1*(q2 - q3)
2631 9493216 : binary%d1val2 = q1*(q4 - q5)
2632 9493216 : binary%d2val1 = q7*(q13*x%val - q2*q9 + q8)
2633 9493216 : binary%d1val1_d1val2 = q7*(q14 + q15*q3 - y%val*(q16 + x%d1val1*y%d1val2 + x%val*y%d1val1_d1val2))
2634 9493216 : 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 9493216 : - 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 9493216 : - 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 9493216 : + q6*x%d1val1_d2val2)
2644 : binary%d3val2 = q21*(-3.0_dp*q17*y%d1val2 + 3.0_dp*q20*q4 &
2645 9493216 : + q6*x%d3val2 - x%val*(-6.0_dp*q18*y%d1val2 + 6.0_dp*pow3(y%d1val2) + q0*y%d3val2))
2646 9493216 : end function div_self
2647 :
2648 3473300 : 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 3473300 : real(dp) :: q0
2653 3473300 : q0 = powm1(y)
2654 3473300 : unary%val = q0*x%val
2655 3473300 : unary%d1val1 = q0*x%d1val1
2656 3473300 : unary%d1val2 = q0*x%d1val2
2657 3473300 : unary%d2val1 = q0*x%d2val1
2658 3473300 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
2659 3473300 : unary%d2val2 = q0*x%d2val2
2660 3473300 : unary%d3val1 = q0*x%d3val1
2661 3473300 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
2662 3473300 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
2663 3473300 : unary%d3val2 = q0*x%d3val2
2664 3473300 : end function div_self_real
2665 :
2666 4806700 : 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 4806700 : real(dp) :: q12
2671 4806700 : real(dp) :: q11
2672 4806700 : real(dp) :: q10
2673 4806700 : real(dp) :: q9
2674 4806700 : real(dp) :: q8
2675 4806700 : real(dp) :: q7
2676 4806700 : real(dp) :: q6
2677 4806700 : real(dp) :: q5
2678 4806700 : real(dp) :: q4
2679 4806700 : real(dp) :: q3
2680 4806700 : real(dp) :: q2
2681 4806700 : real(dp) :: q1
2682 : real(dp) :: q0
2683 4806700 : q0 = pow2(x%val)
2684 4806700 : q1 = z*powm1(q0)
2685 4806700 : q2 = x%d2val1*x%val
2686 4806700 : q3 = pow2(x%d1val1)
2687 4806700 : q4 = z*powm1(pow3(x%val))
2688 4806700 : q5 = 2.0_dp*x%d1val1
2689 4806700 : q6 = x%d1val1_d1val2*x%val
2690 4806700 : q7 = x%d2val2*x%val
2691 4806700 : q8 = -q7
2692 4806700 : q9 = pow2(x%d1val2)
2693 4806700 : q10 = z*powm1(pow4(x%val))
2694 4806700 : q11 = 4.0_dp*q6
2695 4806700 : q12 = 6.0_dp*x%d1val2
2696 4806700 : unary%val = z*powm1(x%val)
2697 4806700 : unary%d1val1 = -q1*x%d1val1
2698 4806700 : unary%d1val2 = -q1*x%d1val2
2699 4806700 : unary%d2val1 = q4*(2.0_dp*q3 - q2)
2700 4806700 : unary%d1val1_d1val2 = q4*(q5*x%d1val2 - q6)
2701 4806700 : unary%d2val2 = q4*(2.0_dp*q9 + q8)
2702 4806700 : unary%d3val1 = q10*(-6.0_dp*pow3(x%d1val1) + 6.0_dp*q2*x%d1val1 - q0*x%d3val1)
2703 4806700 : unary%d2val1_d1val2 = q10*(2.0_dp*q2*x%d1val2 - q0*x%d2val1_d1val2 + q11*x%d1val1 - q12*q3)
2704 4806700 : unary%d1val1_d2val2 = -q10*(q0*x%d1val1_d2val2 - q11*x%d1val2 + q5*(3.0_dp*q9 + q8))
2705 4806700 : unary%d3val2 = q10*(-6.0_dp*pow3(x%d1val2) - q0*x%d3val2 + q12*q7)
2706 4806700 : 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 0 : 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 0 : real(dp) :: y_dp
2733 0 : real(dp) :: q12
2734 0 : real(dp) :: q11
2735 0 : real(dp) :: q10
2736 0 : real(dp) :: q9
2737 0 : real(dp) :: q8
2738 0 : real(dp) :: q7
2739 0 : real(dp) :: q6
2740 0 : real(dp) :: q5
2741 0 : real(dp) :: q4
2742 0 : real(dp) :: q3
2743 0 : real(dp) :: q2
2744 0 : 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 90224 : 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 90224 : real(dp) :: q30
2777 90224 : real(dp) :: q29
2778 90224 : real(dp) :: q28
2779 90224 : real(dp) :: q27
2780 90224 : real(dp) :: q26
2781 90224 : real(dp) :: q25
2782 90224 : real(dp) :: q24
2783 90224 : real(dp) :: q23
2784 90224 : real(dp) :: q22
2785 90224 : real(dp) :: q21
2786 90224 : real(dp) :: q20
2787 90224 : real(dp) :: q19
2788 90224 : real(dp) :: q18
2789 90224 : real(dp) :: q17
2790 90224 : real(dp) :: q16
2791 90224 : real(dp) :: q15
2792 90224 : real(dp) :: q14
2793 90224 : real(dp) :: q13
2794 90224 : real(dp) :: q12
2795 90224 : real(dp) :: q11
2796 90224 : real(dp) :: q10
2797 90224 : real(dp) :: q9
2798 90224 : real(dp) :: q8
2799 90224 : real(dp) :: q7
2800 : real(dp) :: q6
2801 90224 : real(dp) :: q5
2802 : real(dp) :: q4
2803 90224 : real(dp) :: q3
2804 90224 : real(dp) :: q2
2805 90224 : real(dp) :: q1
2806 90224 : real(dp) :: q0
2807 90224 : q0 = pow(x%val, y%val - 1)
2808 90224 : q1 = x%d1val1*y%val
2809 90224 : q2 = log(x%val)
2810 90224 : q3 = q2*x%val
2811 90224 : q4 = q1 + q3*y%d1val1
2812 90224 : q5 = x%d1val2*y%val
2813 90224 : q6 = q3*y%d1val2 + q5
2814 90224 : q7 = pow(x%val, -2.0_dp + y%val)
2815 90224 : q8 = pow2(x%d1val1)
2816 90224 : q9 = pow2(x%val)
2817 90224 : q10 = q2*q9
2818 90224 : q11 = x%d2val1*y%val
2819 90224 : q12 = x%d1val1*y%d1val1
2820 90224 : q13 = q10*y%d2val1 - q8*y%val + x%val*(2.0_dp*q12 + q11)
2821 90224 : q14 = q13 + pow2(q4)
2822 90224 : q15 = x%d1val1*y%d1val2
2823 90224 : q16 = x%d1val2*y%d1val1
2824 90224 : q17 = -q1*x%d1val2 + q10*y%d1val1_d1val2 + x%val*(q15 + q16 + x%d1val1_d1val2*y%val)
2825 90224 : q18 = pow2(x%d1val2)
2826 90224 : q19 = x%d2val2*y%val
2827 90224 : q20 = x%d1val2*y%d1val2
2828 90224 : q21 = q10*y%d2val2 - q18*y%val + x%val*(2.0_dp*q20 + q19)
2829 90224 : q22 = q21 + pow2(q6)
2830 90224 : q23 = pow(x%val, -3.0_dp + y%val)
2831 90224 : q24 = 2.0_dp*y%val
2832 90224 : q25 = q2*pow3(x%val)
2833 90224 : q26 = 3.0_dp*x%d1val1
2834 90224 : q27 = 2.0_dp*y%d1val1_d1val2
2835 90224 : q28 = 2.0_dp*x%d1val1_d1val2
2836 90224 : q29 = 2.0_dp*q17
2837 90224 : q30 = 3.0_dp*x%d1val2
2838 90224 : binary%val = pow(x%val, y%val)
2839 90224 : binary%d1val1 = q0*q4
2840 90224 : binary%d1val2 = q0*q6
2841 90224 : binary%d2val1 = q14*q7
2842 90224 : binary%d1val1_d1val2 = (q17 + q4*q6)*pow(x%val, 3.0_dp + y%val)*powm1(pow5(x%val))
2843 90224 : 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 90224 : + 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 90224 : * 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 90224 : - 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 90224 : + q9*(3.0_dp*x%d2val2*y%d1val2 + q30*y%d2val2 + x%d3val2*y%val) + pow3(q6))
2858 90224 : end function pow_self
2859 :
2860 1690722 : 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 1690722 : real(dp) :: q21
2865 1690722 : real(dp) :: q20
2866 1690722 : real(dp) :: q19
2867 1690722 : real(dp) :: q18
2868 1690722 : real(dp) :: q17
2869 1690722 : real(dp) :: q16
2870 1690722 : real(dp) :: q15
2871 1690722 : real(dp) :: q14
2872 1690722 : real(dp) :: q13
2873 1690722 : real(dp) :: q12
2874 1690722 : real(dp) :: q11
2875 1690722 : real(dp) :: q10
2876 1690722 : real(dp) :: q9
2877 1690722 : real(dp) :: q8
2878 1690722 : real(dp) :: q7
2879 1690722 : real(dp) :: q6
2880 1690722 : real(dp) :: q5
2881 1690722 : real(dp) :: q4
2882 1690722 : real(dp) :: q3
2883 1690722 : real(dp) :: q2
2884 1690722 : real(dp) :: q1
2885 : real(dp) :: q0
2886 1690722 : q0 = y - 1
2887 1690722 : q1 = y*pow(x%val, q0)
2888 1690722 : q2 = x%d2val1*x%val
2889 1690722 : q3 = pow2(x%d1val1)
2890 1690722 : q4 = q3*y
2891 1690722 : q5 = pow(x%val, -2.0_dp + y)
2892 1690722 : q6 = q5*y
2893 1690722 : q7 = x%d1val1_d1val2*x%val
2894 1690722 : q8 = x%d1val1*x%d1val2
2895 1690722 : q9 = x%d2val2*x%val
2896 1690722 : q10 = pow2(x%d1val2)
2897 1690722 : q11 = q10*y
2898 1690722 : q12 = y*(-q10 + q11 + q9)
2899 1690722 : q13 = pow2(x%val)
2900 1690722 : q14 = pow2(y)
2901 1690722 : q15 = -3.0_dp*y + 2.0_dp + q14
2902 1690722 : q16 = y*pow(x%val, -3.0_dp + y)
2903 1690722 : q17 = 2.0_dp*q7
2904 1690722 : q18 = q17*x%d1val1
2905 1690722 : q19 = q2*x%d1val2
2906 1690722 : q20 = q3*x%d1val2
2907 1690722 : q21 = 3.0_dp*x%d1val2
2908 1690722 : unary%val = pow(x%val, y)
2909 1690722 : unary%d1val1 = q1*x%d1val1
2910 1690722 : unary%d1val2 = q1*x%d1val2
2911 1690722 : unary%d2val1 = q6*(q2 - q3 + q4)
2912 1690722 : unary%d1val1_d1val2 = q6*(q7 + q8*y - q8)
2913 1690722 : unary%d2val2 = q12*q5
2914 1690722 : unary%d3val1 = q16*(3.0_dp*q0*q2*x%d1val1 + q13*x%d3val1 + q15*pow3(x%d1val1))
2915 1690722 : unary%d2val1_d1val2 = q16*(2.0_dp*q20 + q13*x%d2val1_d1val2 + q14*q20 + q18*y - q18 + q19*y - q19 - q21*q4)
2916 1690722 : 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 1690722 : unary%d3val2 = q16*(q0*q21*q9 + q13*x%d3val2 + q15*pow3(x%d1val2))
2918 1690722 : 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 0 : real(dp) :: q8
2925 0 : real(dp) :: q7
2926 0 : real(dp) :: q6
2927 0 : real(dp) :: q5
2928 0 : real(dp) :: q4
2929 0 : real(dp) :: q3
2930 0 : real(dp) :: q2
2931 : real(dp) :: q1
2932 0 : 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 0 : real(dp) :: q21
2960 0 : real(dp) :: q20
2961 0 : real(dp) :: q19
2962 0 : real(dp) :: q18
2963 0 : real(dp) :: q17
2964 0 : real(dp) :: q16
2965 0 : real(dp) :: q15
2966 0 : real(dp) :: q14
2967 0 : real(dp) :: q13
2968 0 : real(dp) :: q12
2969 0 : real(dp) :: q11
2970 0 : real(dp) :: q10
2971 0 : real(dp) :: q9
2972 0 : real(dp) :: q8
2973 0 : real(dp) :: q7
2974 0 : real(dp) :: q6
2975 0 : real(dp) :: q5
2976 0 : real(dp) :: q4
2977 0 : real(dp) :: q3
2978 0 : real(dp) :: q2
2979 0 : 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 0 : real(dp) :: q8
3022 0 : real(dp) :: q7
3023 0 : real(dp) :: q6
3024 0 : real(dp) :: q5
3025 0 : real(dp) :: q4
3026 0 : real(dp) :: q3
3027 0 : real(dp) :: q2
3028 : real(dp) :: q1
3029 0 : 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 0 : real(dp) :: q1
3057 0 : 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 0 : 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 667348 : 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 667348 : real(dp) :: q0
3095 667348 : q0 = Heaviside(x%val - z)
3096 667348 : unary%val = Max(x%val, z)
3097 667348 : unary%d1val1 = q0*x%d1val1
3098 667348 : unary%d1val2 = q0*x%d1val2
3099 667348 : unary%d2val1 = q0*x%d2val1
3100 667348 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
3101 667348 : unary%d2val2 = q0*x%d2val2
3102 667348 : unary%d3val1 = q0*x%d3val1
3103 667348 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
3104 667348 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
3105 667348 : unary%d3val2 = q0*x%d3val2
3106 667348 : 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 0 : real(dp) :: y_dp
3113 0 : 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 0 : real(dp) :: y_dp
3133 0 : 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 45520 : 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 45520 : real(dp) :: q1
3153 45520 : real(dp) :: q0
3154 45520 : q0 = Heaviside(-x%val + y%val)
3155 45520 : q1 = Heaviside(x%val - y%val)
3156 45520 : binary%val = Min(x%val, y%val)
3157 45520 : binary%d1val1 = q0*x%d1val1 + q1*y%d1val1
3158 45520 : binary%d1val2 = q0*x%d1val2 + q1*y%d1val2
3159 45520 : binary%d2val1 = q0*x%d2val1 + q1*y%d2val1
3160 45520 : binary%d1val1_d1val2 = q0*x%d1val1_d1val2 + q1*y%d1val1_d1val2
3161 45520 : binary%d2val2 = q0*x%d2val2 + q1*y%d2val2
3162 45520 : binary%d3val1 = q0*x%d3val1 + q1*y%d3val1
3163 45520 : binary%d2val1_d1val2 = q0*x%d2val1_d1val2 + q1*y%d2val1_d1val2
3164 45520 : binary%d1val1_d2val2 = q0*x%d1val1_d2val2 + q1*y%d1val1_d2val2
3165 45520 : binary%d3val2 = q0*x%d3val2 + q1*y%d3val2
3166 45520 : 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 0 : 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 621828 : 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 621828 : real(dp) :: q0
3191 621828 : q0 = Heaviside(-x%val + z)
3192 621828 : unary%val = Min(x%val, z)
3193 621828 : unary%d1val1 = q0*x%d1val1
3194 621828 : unary%d1val2 = q0*x%d1val2
3195 621828 : unary%d2val1 = q0*x%d2val1
3196 621828 : unary%d1val1_d1val2 = q0*x%d1val1_d1val2
3197 621828 : unary%d2val2 = q0*x%d2val2
3198 621828 : unary%d3val1 = q0*x%d3val1
3199 621828 : unary%d2val1_d1val2 = q0*x%d2val1_d1val2
3200 621828 : unary%d1val1_d2val2 = q0*x%d1val1_d2val2
3201 621828 : unary%d3val2 = q0*x%d3val2
3202 621828 : 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 0 : real(dp) :: y_dp
3209 0 : 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 0 : real(dp) :: y_dp
3229 0 : 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 0 : 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 0 : real(dp) :: q5
3269 0 : real(dp) :: q4
3270 0 : real(dp) :: q3
3271 0 : real(dp) :: q2
3272 0 : 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 0 : real(dp) :: q5
3297 0 : real(dp) :: q4
3298 0 : real(dp) :: q3
3299 0 : real(dp) :: q2
3300 0 : 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 0 : real(dp) :: y_dp
3325 0 : real(dp) :: q5
3326 0 : real(dp) :: q4
3327 0 : real(dp) :: q3
3328 0 : real(dp) :: q2
3329 0 : 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 0 : real(dp) :: y_dp
3355 0 : real(dp) :: q5
3356 0 : real(dp) :: q4
3357 0 : real(dp) :: q3
3358 0 : real(dp) :: q2
3359 0 : 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 538514 : 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 538514 : derivative%val = this%d1val1
3384 538514 : derivative%d1val1 = this%d2val1
3385 538514 : derivative%d1val2 = this%d1val1_d1val2
3386 538514 : derivative%d2val1 = this%d3val1
3387 538514 : derivative%d1val1_d1val2 = this%d2val1_d1val2
3388 538514 : derivative%d2val2 = this%d1val1_d2val2
3389 538514 : derivative%d3val1 = 0.0_dp
3390 538514 : derivative%d2val1_d1val2 = 0.0_dp
3391 538514 : derivative%d1val1_d2val2 = 0.0_dp
3392 538514 : derivative%d3val2 = 0.0_dp
3393 538514 : end function differentiate_auto_diff_real_2var_order3_1
3394 :
3395 136560 : 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 136560 : derivative%val = this%d1val2
3399 136560 : derivative%d1val1 = this%d1val1_d1val2
3400 136560 : derivative%d1val2 = this%d2val2
3401 136560 : derivative%d2val1 = this%d2val1_d1val2
3402 136560 : derivative%d1val1_d1val2 = this%d1val1_d2val2
3403 136560 : derivative%d2val2 = this%d3val2
3404 136560 : derivative%d3val1 = 0.0_dp
3405 136560 : derivative%d2val1_d1val2 = 0.0_dp
3406 136560 : derivative%d1val1_d2val2 = 0.0_dp
3407 136560 : derivative%d3val2 = 0.0_dp
3408 136560 : end function differentiate_auto_diff_real_2var_order3_2
3409 :
3410 0 : end module auto_diff_real_2var_order3_module
|