LCOV - code coverage report
Current view: top level - auto_diff/private - auto_diff_real_2var_order1_module.f90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 58.2 % 716 417
Test Date: 2025-05-08 18:23:42 Functions: 59.3 % 118 70

            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_order1_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_order1, &
      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_order1
      88              :       real(dp) :: val
      89              :       real(dp) :: d1val1
      90              :       real(dp) :: d1val2
      91              :    end type auto_diff_real_2var_order1
      92              : 
      93              :    interface assignment(=)
      94              :       module procedure assign_from_self
      95              :       module procedure assign_from_real_dp
      96              :       module procedure assign_from_int
      97              :    end interface assignment(=)
      98              : 
      99              :    interface operator(.eq.)
     100              :       module procedure equal_self
     101              :       module procedure equal_auto_diff_real_2var_order1_real_dp
     102              :       module procedure equal_real_dp_auto_diff_real_2var_order1
     103              :       module procedure equal_auto_diff_real_2var_order1_int
     104              :       module procedure equal_int_auto_diff_real_2var_order1
     105              :    end interface operator(.eq.)
     106              : 
     107              :    interface operator(.ne.)
     108              :       module procedure neq_self
     109              :       module procedure neq_auto_diff_real_2var_order1_real_dp
     110              :       module procedure neq_real_dp_auto_diff_real_2var_order1
     111              :       module procedure neq_auto_diff_real_2var_order1_int
     112              :       module procedure neq_int_auto_diff_real_2var_order1
     113              :    end interface operator(.ne.)
     114              : 
     115              :    interface operator(.gt.)
     116              :       module procedure greater_self
     117              :       module procedure greater_auto_diff_real_2var_order1_real_dp
     118              :       module procedure greater_real_dp_auto_diff_real_2var_order1
     119              :       module procedure greater_auto_diff_real_2var_order1_int
     120              :       module procedure greater_int_auto_diff_real_2var_order1
     121              :    end interface operator(.gt.)
     122              : 
     123              :    interface operator(.lt.)
     124              :       module procedure less_self
     125              :       module procedure less_auto_diff_real_2var_order1_real_dp
     126              :       module procedure less_real_dp_auto_diff_real_2var_order1
     127              :       module procedure less_auto_diff_real_2var_order1_int
     128              :       module procedure less_int_auto_diff_real_2var_order1
     129              :    end interface operator(.lt.)
     130              : 
     131              :    interface operator(.le.)
     132              :       module procedure leq_self
     133              :       module procedure leq_auto_diff_real_2var_order1_real_dp
     134              :       module procedure leq_real_dp_auto_diff_real_2var_order1
     135              :       module procedure leq_auto_diff_real_2var_order1_int
     136              :       module procedure leq_int_auto_diff_real_2var_order1
     137              :    end interface operator(.le.)
     138              : 
     139              :    interface operator(.ge.)
     140              :       module procedure geq_self
     141              :       module procedure geq_auto_diff_real_2var_order1_real_dp
     142              :       module procedure geq_real_dp_auto_diff_real_2var_order1
     143              :       module procedure geq_auto_diff_real_2var_order1_int
     144              :       module procedure geq_int_auto_diff_real_2var_order1
     145              :    end interface operator(.ge.)
     146              : 
     147              :    interface make_unop
     148              :       module procedure make_unary_operator
     149              :    end interface make_unop
     150              : 
     151              :    interface make_binop
     152              :       module procedure make_binary_operator
     153              :    end interface make_binop
     154              : 
     155              :    interface sign
     156              :       module procedure sign_self
     157              :    end interface sign
     158              : 
     159              :    interface safe_sqrt
     160              :       module procedure safe_sqrt_self
     161              :    end interface safe_sqrt
     162              : 
     163              :    interface operator(-)
     164              :       module procedure unary_minus_self
     165              :    end interface operator(-)
     166              : 
     167              :    interface exp
     168              :       module procedure exp_self
     169              :    end interface exp
     170              : 
     171              :    interface expm1
     172              :       module procedure expm1_self
     173              :    end interface expm1
     174              : 
     175              :    interface exp10
     176              :       module procedure exp10_self
     177              :    end interface exp10
     178              : 
     179              :    interface powm1
     180              :       module procedure powm1_self
     181              :    end interface powm1
     182              : 
     183              :    interface log
     184              :       module procedure log_self
     185              :    end interface log
     186              : 
     187              :    interface log1p
     188              :       module procedure log1p_self
     189              :    end interface log1p
     190              : 
     191              :    interface safe_log
     192              :       module procedure safe_log_self
     193              :    end interface safe_log
     194              : 
     195              :    interface log10
     196              :       module procedure log10_self
     197              :    end interface log10
     198              : 
     199              :    interface safe_log10
     200              :       module procedure safe_log10_self
     201              :    end interface safe_log10
     202              : 
     203              :    interface log2
     204              :       module procedure log2_self
     205              :    end interface log2
     206              : 
     207              :    interface sin
     208              :       module procedure sin_self
     209              :    end interface sin
     210              : 
     211              :    interface cos
     212              :       module procedure cos_self
     213              :    end interface cos
     214              : 
     215              :    interface tan
     216              :       module procedure tan_self
     217              :    end interface tan
     218              : 
     219              :    interface sinpi
     220              :       module procedure sinpi_self
     221              :    end interface sinpi
     222              : 
     223              :    interface cospi
     224              :       module procedure cospi_self
     225              :    end interface cospi
     226              : 
     227              :    interface tanpi
     228              :       module procedure tanpi_self
     229              :    end interface tanpi
     230              : 
     231              :    interface sinh
     232              :       module procedure sinh_self
     233              :    end interface sinh
     234              : 
     235              :    interface cosh
     236              :       module procedure cosh_self
     237              :    end interface cosh
     238              : 
     239              :    interface tanh
     240              :       module procedure tanh_self
     241              :    end interface tanh
     242              : 
     243              :    interface asin
     244              :       module procedure asin_self
     245              :    end interface asin
     246              : 
     247              :    interface acos
     248              :       module procedure acos_self
     249              :    end interface acos
     250              : 
     251              :    interface atan
     252              :       module procedure atan_self
     253              :    end interface atan
     254              : 
     255              :    interface asinpi
     256              :       module procedure asinpi_self
     257              :    end interface asinpi
     258              : 
     259              :    interface acospi
     260              :       module procedure acospi_self
     261              :    end interface acospi
     262              : 
     263              :    interface atanpi
     264              :       module procedure atanpi_self
     265              :    end interface atanpi
     266              : 
     267              :    interface asinh
     268              :       module procedure asinh_self
     269              :    end interface asinh
     270              : 
     271              :    interface acosh
     272              :       module procedure acosh_self
     273              :    end interface acosh
     274              : 
     275              :    interface atanh
     276              :       module procedure atanh_self
     277              :    end interface atanh
     278              : 
     279              :    interface sqrt
     280              :       module procedure sqrt_self
     281              :    end interface sqrt
     282              : 
     283              :    interface pow2
     284              :       module procedure pow2_self
     285              :    end interface pow2
     286              : 
     287              :    interface pow3
     288              :       module procedure pow3_self
     289              :    end interface pow3
     290              : 
     291              :    interface pow4
     292              :       module procedure pow4_self
     293              :    end interface pow4
     294              : 
     295              :    interface pow5
     296              :       module procedure pow5_self
     297              :    end interface pow5
     298              : 
     299              :    interface pow6
     300              :       module procedure pow6_self
     301              :    end interface pow6
     302              : 
     303              :    interface pow7
     304              :       module procedure pow7_self
     305              :    end interface pow7
     306              : 
     307              :    interface pow8
     308              :       module procedure pow8_self
     309              :    end interface pow8
     310              : 
     311              :    interface abs
     312              :       module procedure abs_self
     313              :    end interface abs
     314              : 
     315              :    interface operator(+)
     316              :       module procedure add_self
     317              :       module procedure add_self_real
     318              :       module procedure add_real_self
     319              :       module procedure add_self_int
     320              :       module procedure add_int_self
     321              :    end interface operator(+)
     322              : 
     323              :    interface operator(-)
     324              :       module procedure sub_self
     325              :       module procedure sub_self_real
     326              :       module procedure sub_real_self
     327              :       module procedure sub_self_int
     328              :       module procedure sub_int_self
     329              :    end interface operator(-)
     330              : 
     331              :    interface operator(*)
     332              :       module procedure mul_self
     333              :       module procedure mul_self_real
     334              :       module procedure mul_real_self
     335              :       module procedure mul_self_int
     336              :       module procedure mul_int_self
     337              :    end interface operator(*)
     338              : 
     339              :    interface operator(/)
     340              :       module procedure div_self
     341              :       module procedure div_self_real
     342              :       module procedure div_real_self
     343              :       module procedure div_self_int
     344              :       module procedure div_int_self
     345              :    end interface operator(/)
     346              : 
     347              :    interface pow
     348              :       module procedure pow_self
     349              :       module procedure pow_self_real
     350              :       module procedure pow_real_self
     351              :       module procedure pow_self_int
     352              :       module procedure pow_int_self
     353              :    end interface pow
     354              : 
     355              :    interface max
     356              :       module procedure max_self
     357              :       module procedure max_self_real
     358              :       module procedure max_real_self
     359              :       module procedure max_self_int
     360              :       module procedure max_int_self
     361              :    end interface max
     362              : 
     363              :    interface min
     364              :       module procedure min_self
     365              :       module procedure min_self_real
     366              :       module procedure min_real_self
     367              :       module procedure min_self_int
     368              :       module procedure min_int_self
     369              :    end interface min
     370              : 
     371              :    interface dim
     372              :       module procedure dim_self
     373              :       module procedure dim_self_real
     374              :       module procedure dim_real_self
     375              :       module procedure dim_self_int
     376              :       module procedure dim_int_self
     377              :    end interface dim
     378              : 
     379              :    interface differentiate_1
     380              :       module procedure differentiate_auto_diff_real_2var_order1_1
     381              :    end interface differentiate_1
     382              : 
     383              :    interface differentiate_2
     384              :       module procedure differentiate_auto_diff_real_2var_order1_2
     385              :    end interface differentiate_2
     386              : 
     387              :    contains
     388              : 
     389     24158128 :    subroutine assign_from_self(this, other)
     390              :       type(auto_diff_real_2var_order1), intent(out) :: this
     391              :       type(auto_diff_real_2var_order1), intent(in) :: other
     392     24158128 :       this%val = other%val
     393     24158128 :       this%d1val1 = other%d1val1
     394     24158128 :       this%d1val2 = other%d1val2
     395     24158128 :    end subroutine assign_from_self
     396              : 
     397      6816498 :    subroutine assign_from_real_dp(this, other)
     398              :       type(auto_diff_real_2var_order1), intent(out) :: this
     399              :       real(dp), intent(in) :: other
     400      6816498 :       this%val = other
     401      6816498 :       this%d1val1 = 0.0_dp
     402      6816498 :       this%d1val2 = 0.0_dp
     403      6816498 :    end subroutine assign_from_real_dp
     404              : 
     405       290685 :    subroutine assign_from_int(this, other)
     406              :       type(auto_diff_real_2var_order1), intent(out) :: this
     407              :       integer, intent(in) :: other
     408       290685 :       this%val = other
     409       290685 :       this%d1val1 = 0.0_dp
     410       290685 :       this%d1val2 = 0.0_dp
     411       290685 :    end subroutine assign_from_int
     412              : 
     413            1 :    function equal_self(this, other) result(z)
     414              :       type(auto_diff_real_2var_order1), intent(in) :: this
     415              :       type(auto_diff_real_2var_order1), intent(in) :: other
     416              :       logical :: z
     417            1 :       z = (this%val == other%val)
     418            1 :    end function equal_self
     419              : 
     420        79995 :    function equal_auto_diff_real_2var_order1_real_dp(this, other) result(z)
     421              :       type(auto_diff_real_2var_order1), intent(in) :: this
     422              :       real(dp), intent(in) :: other
     423              :       logical :: z
     424        79995 :       z = (this%val == other)
     425        79995 :    end function equal_auto_diff_real_2var_order1_real_dp
     426              : 
     427            0 :    function equal_real_dp_auto_diff_real_2var_order1(this, other) result(z)
     428              :       real(dp), intent(in) :: this
     429              :       type(auto_diff_real_2var_order1), intent(in) :: other
     430              :       logical :: z
     431            0 :       z = (this == other%val)
     432            0 :    end function equal_real_dp_auto_diff_real_2var_order1
     433              : 
     434       538965 :    function equal_auto_diff_real_2var_order1_int(this, other) result(z)
     435              :       type(auto_diff_real_2var_order1), intent(in) :: this
     436              :       integer, intent(in) :: other
     437              :       logical :: z
     438       538965 :       z = (this%val == other)
     439       538965 :    end function equal_auto_diff_real_2var_order1_int
     440              : 
     441            0 :    function equal_int_auto_diff_real_2var_order1(this, other) result(z)
     442              :       integer, intent(in) :: this
     443              :       type(auto_diff_real_2var_order1), intent(in) :: other
     444              :       logical :: z
     445            0 :       z = (this == other%val)
     446            0 :    end function equal_int_auto_diff_real_2var_order1
     447              : 
     448            0 :    function neq_self(this, other) result(z)
     449              :       type(auto_diff_real_2var_order1), intent(in) :: this
     450              :       type(auto_diff_real_2var_order1), intent(in) :: other
     451              :       logical :: z
     452            0 :       z = (this%val /= other%val)
     453            0 :    end function neq_self
     454              : 
     455            0 :    function neq_auto_diff_real_2var_order1_real_dp(this, other) result(z)
     456              :       type(auto_diff_real_2var_order1), intent(in) :: this
     457              :       real(dp), intent(in) :: other
     458              :       logical :: z
     459            0 :       z = (this%val /= other)
     460            0 :    end function neq_auto_diff_real_2var_order1_real_dp
     461              : 
     462            0 :    function neq_real_dp_auto_diff_real_2var_order1(this, other) result(z)
     463              :       real(dp), intent(in) :: this
     464              :       type(auto_diff_real_2var_order1), intent(in) :: other
     465              :       logical :: z
     466            0 :       z = (this /= other%val)
     467            0 :    end function neq_real_dp_auto_diff_real_2var_order1
     468              : 
     469           12 :    function neq_auto_diff_real_2var_order1_int(this, other) result(z)
     470              :       type(auto_diff_real_2var_order1), intent(in) :: this
     471              :       integer, intent(in) :: other
     472              :       logical :: z
     473           12 :       z = (this%val /= other)
     474           12 :    end function neq_auto_diff_real_2var_order1_int
     475              : 
     476            0 :    function neq_int_auto_diff_real_2var_order1(this, other) result(z)
     477              :       integer, intent(in) :: this
     478              :       type(auto_diff_real_2var_order1), intent(in) :: other
     479              :       logical :: z
     480            0 :       z = (this /= other%val)
     481            0 :    end function neq_int_auto_diff_real_2var_order1
     482              : 
     483            9 :    function greater_self(this, other) result(z)
     484              :       type(auto_diff_real_2var_order1), intent(in) :: this
     485              :       type(auto_diff_real_2var_order1), intent(in) :: other
     486              :       logical :: z
     487            9 :       z = (this%val > other%val)
     488            9 :    end function greater_self
     489              : 
     490      1755439 :    function greater_auto_diff_real_2var_order1_real_dp(this, other) result(z)
     491              :       type(auto_diff_real_2var_order1), intent(in) :: this
     492              :       real(dp), intent(in) :: other
     493              :       logical :: z
     494      1755439 :       z = (this%val > other)
     495      1755439 :    end function greater_auto_diff_real_2var_order1_real_dp
     496              : 
     497            0 :    function greater_real_dp_auto_diff_real_2var_order1(this, other) result(z)
     498              :       real(dp), intent(in) :: this
     499              :       type(auto_diff_real_2var_order1), intent(in) :: other
     500              :       logical :: z
     501            0 :       z = (this > other%val)
     502            0 :    end function greater_real_dp_auto_diff_real_2var_order1
     503              : 
     504        86249 :    function greater_auto_diff_real_2var_order1_int(this, other) result(z)
     505              :       type(auto_diff_real_2var_order1), intent(in) :: this
     506              :       integer, intent(in) :: other
     507              :       logical :: z
     508        86249 :       z = (this%val > other)
     509        86249 :    end function greater_auto_diff_real_2var_order1_int
     510              : 
     511            0 :    function greater_int_auto_diff_real_2var_order1(this, other) result(z)
     512              :       integer, intent(in) :: this
     513              :       type(auto_diff_real_2var_order1), intent(in) :: other
     514              :       logical :: z
     515            0 :       z = (this > other%val)
     516            0 :    end function greater_int_auto_diff_real_2var_order1
     517              : 
     518           13 :    function less_self(this, other) result(z)
     519              :       type(auto_diff_real_2var_order1), intent(in) :: this
     520              :       type(auto_diff_real_2var_order1), intent(in) :: other
     521              :       logical :: z
     522           13 :       z = (this%val < other%val)
     523           13 :    end function less_self
     524              : 
     525      4506916 :    function less_auto_diff_real_2var_order1_real_dp(this, other) result(z)
     526              :       type(auto_diff_real_2var_order1), intent(in) :: this
     527              :       real(dp), intent(in) :: other
     528              :       logical :: z
     529      4506916 :       z = (this%val < other)
     530      4506916 :    end function less_auto_diff_real_2var_order1_real_dp
     531              : 
     532            0 :    function less_real_dp_auto_diff_real_2var_order1(this, other) result(z)
     533              :       real(dp), intent(in) :: this
     534              :       type(auto_diff_real_2var_order1), intent(in) :: other
     535              :       logical :: z
     536            0 :       z = (this < other%val)
     537            0 :    end function less_real_dp_auto_diff_real_2var_order1
     538              : 
     539        86217 :    function less_auto_diff_real_2var_order1_int(this, other) result(z)
     540              :       type(auto_diff_real_2var_order1), intent(in) :: this
     541              :       integer, intent(in) :: other
     542              :       logical :: z
     543        86217 :       z = (this%val < other)
     544        86217 :    end function less_auto_diff_real_2var_order1_int
     545              : 
     546            0 :    function less_int_auto_diff_real_2var_order1(this, other) result(z)
     547              :       integer, intent(in) :: this
     548              :       type(auto_diff_real_2var_order1), intent(in) :: other
     549              :       logical :: z
     550            0 :       z = (this < other%val)
     551            0 :    end function less_int_auto_diff_real_2var_order1
     552              : 
     553            2 :    function leq_self(this, other) result(z)
     554              :       type(auto_diff_real_2var_order1), intent(in) :: this
     555              :       type(auto_diff_real_2var_order1), intent(in) :: other
     556              :       logical :: z
     557            2 :       z = (this%val <= other%val)
     558            2 :    end function leq_self
     559              : 
     560       172434 :    function leq_auto_diff_real_2var_order1_real_dp(this, other) result(z)
     561              :       type(auto_diff_real_2var_order1), intent(in) :: this
     562              :       real(dp), intent(in) :: other
     563              :       logical :: z
     564       172434 :       z = (this%val <= other)
     565       172434 :    end function leq_auto_diff_real_2var_order1_real_dp
     566              : 
     567            0 :    function leq_real_dp_auto_diff_real_2var_order1(this, other) result(z)
     568              :       real(dp), intent(in) :: this
     569              :       type(auto_diff_real_2var_order1), intent(in) :: other
     570              :       logical :: z
     571            0 :       z = (this <= other%val)
     572            0 :    end function leq_real_dp_auto_diff_real_2var_order1
     573              : 
     574            2 :    function leq_auto_diff_real_2var_order1_int(this, other) result(z)
     575              :       type(auto_diff_real_2var_order1), intent(in) :: this
     576              :       integer, intent(in) :: other
     577              :       logical :: z
     578            2 :       z = (this%val <= other)
     579            2 :    end function leq_auto_diff_real_2var_order1_int
     580              : 
     581            0 :    function leq_int_auto_diff_real_2var_order1(this, other) result(z)
     582              :       integer, intent(in) :: this
     583              :       type(auto_diff_real_2var_order1), intent(in) :: other
     584              :       logical :: z
     585            0 :       z = (this <= other%val)
     586            0 :    end function leq_int_auto_diff_real_2var_order1
     587              : 
     588            2 :    function geq_self(this, other) result(z)
     589              :       type(auto_diff_real_2var_order1), intent(in) :: this
     590              :       type(auto_diff_real_2var_order1), intent(in) :: other
     591              :       logical :: z
     592            2 :       z = (this%val >= other%val)
     593            2 :    end function geq_self
     594              : 
     595        86218 :    function geq_auto_diff_real_2var_order1_real_dp(this, other) result(z)
     596              :       type(auto_diff_real_2var_order1), intent(in) :: this
     597              :       real(dp), intent(in) :: other
     598              :       logical :: z
     599        86218 :       z = (this%val >= other)
     600        86218 :    end function geq_auto_diff_real_2var_order1_real_dp
     601              : 
     602            0 :    function geq_real_dp_auto_diff_real_2var_order1(this, other) result(z)
     603              :       real(dp), intent(in) :: this
     604              :       type(auto_diff_real_2var_order1), intent(in) :: other
     605              :       logical :: z
     606            0 :       z = (this >= other%val)
     607            0 :    end function geq_real_dp_auto_diff_real_2var_order1
     608              : 
     609            2 :    function geq_auto_diff_real_2var_order1_int(this, other) result(z)
     610              :       type(auto_diff_real_2var_order1), intent(in) :: this
     611              :       integer, intent(in) :: other
     612              :       logical :: z
     613            2 :       z = (this%val >= other)
     614            2 :    end function geq_auto_diff_real_2var_order1_int
     615              : 
     616            0 :    function geq_int_auto_diff_real_2var_order1(this, other) result(z)
     617              :       integer, intent(in) :: this
     618              :       type(auto_diff_real_2var_order1), intent(in) :: other
     619              :       logical :: z
     620            0 :       z = (this >= other%val)
     621            0 :    end function geq_int_auto_diff_real_2var_order1
     622              : 
     623            0 :    function make_unary_operator(x, z_val, z_d1x) result(unary)
     624              :       type(auto_diff_real_2var_order1), intent(in) :: x
     625              :       real(dp), intent(in) :: z_val
     626              :       real(dp), intent(in) :: z_d1x
     627              :       type(auto_diff_real_2var_order1) :: unary
     628            0 :       unary%val = z_val
     629            0 :       unary%d1val1 = x%d1val1*z_d1x
     630            0 :       unary%d1val2 = x%d1val2*z_d1x
     631            0 :    end function make_unary_operator
     632              : 
     633            0 :    function make_binary_operator(x, y, z_val, z_d1x, z_d1y) result(binary)
     634              :       type(auto_diff_real_2var_order1), intent(in) :: x
     635              :       type(auto_diff_real_2var_order1), intent(in) :: y
     636              :       real(dp), intent(in) :: z_val
     637              :       real(dp), intent(in) :: z_d1x
     638              :       real(dp), intent(in) :: z_d1y
     639              :       type(auto_diff_real_2var_order1) :: binary
     640            0 :       binary%val = z_val
     641            0 :       binary%d1val1 = x%d1val1*z_d1x + y%d1val1*z_d1y
     642            0 :       binary%d1val2 = x%d1val2*z_d1x + y%d1val2*z_d1y
     643            0 :    end function make_binary_operator
     644              : 
     645            0 :    function sign_self(x) result(unary)
     646              :       type(auto_diff_real_2var_order1), intent(in) :: x
     647              :       type(auto_diff_real_2var_order1) :: unary
     648            0 :       unary%val = sgn(x%val)
     649            0 :       unary%d1val1 = 0.0_dp
     650            0 :       unary%d1val2 = 0.0_dp
     651            0 :    end function sign_self
     652              : 
     653            0 :    function safe_sqrt_self(x) result(unary)
     654              :       type(auto_diff_real_2var_order1), intent(in) :: x
     655              :       type(auto_diff_real_2var_order1) :: unary
     656            0 :       real(dp) :: q1
     657            0 :       real(dp) :: q0
     658            0 :       q0 = sqrt(x%val*Heaviside(x%val))
     659            0 :       q1 = 0.5_dp*q0*powm1(x%val)
     660            0 :       unary%val = q0
     661            0 :       unary%d1val1 = q1*x%d1val1
     662            0 :       unary%d1val2 = q1*x%d1val2
     663            0 :    end function safe_sqrt_self
     664              : 
     665       547964 :    function unary_minus_self(x) result(unary)
     666              :       type(auto_diff_real_2var_order1), intent(in) :: x
     667              :       type(auto_diff_real_2var_order1) :: unary
     668       547964 :       unary%val = -x%val
     669       547964 :       unary%d1val1 = -x%d1val1
     670       547964 :       unary%d1val2 = -x%d1val2
     671       547964 :    end function unary_minus_self
     672              : 
     673       172465 :    function exp_self(x) result(unary)
     674              :       type(auto_diff_real_2var_order1), intent(in) :: x
     675              :       type(auto_diff_real_2var_order1) :: unary
     676       172465 :       real(dp) :: q0
     677       172465 :       q0 = exp(x%val)
     678       172465 :       unary%val = q0
     679       172465 :       unary%d1val1 = q0*x%d1val1
     680       172465 :       unary%d1val2 = q0*x%d1val2
     681       172465 :    end function exp_self
     682              : 
     683            0 :    function expm1_self(x) result(unary)
     684              :       type(auto_diff_real_2var_order1), intent(in) :: x
     685              :       type(auto_diff_real_2var_order1) :: unary
     686            0 :       real(dp) :: q0
     687            0 :       q0 = exp(x%val)
     688            0 :       unary%val = expm1(x%val)
     689            0 :       unary%d1val1 = q0*x%d1val1
     690            0 :       unary%d1val2 = q0*x%d1val2
     691            0 :    end function expm1_self
     692              : 
     693            0 :    function exp10_self(x) result(unary)
     694              :       type(auto_diff_real_2var_order1), intent(in) :: x
     695              :       type(auto_diff_real_2var_order1) :: unary
     696            0 :       real(dp) :: q1
     697            0 :       real(dp) :: q0
     698            0 :       q0 = pow(10.0_dp, x%val)
     699            0 :       q1 = q0*ln10
     700            0 :       unary%val = q0
     701            0 :       unary%d1val1 = q1*x%d1val1
     702            0 :       unary%d1val2 = q1*x%d1val2
     703            0 :    end function exp10_self
     704              : 
     705            0 :    function powm1_self(x) result(unary)
     706              :       type(auto_diff_real_2var_order1), intent(in) :: x
     707              :       type(auto_diff_real_2var_order1) :: unary
     708            0 :       real(dp) :: q0
     709            0 :       q0 = powm1(pow2(x%val))
     710            0 :       unary%val = powm1(x%val)
     711            0 :       unary%d1val1 = -q0*x%d1val1
     712            0 :       unary%d1val2 = -q0*x%d1val2
     713            0 :    end function powm1_self
     714              : 
     715       172446 :    function log_self(x) result(unary)
     716              :       type(auto_diff_real_2var_order1), intent(in) :: x
     717              :       type(auto_diff_real_2var_order1) :: unary
     718       172446 :       real(dp) :: q0
     719       172446 :       q0 = powm1(x%val)
     720       172446 :       unary%val = log(x%val)
     721       172446 :       unary%d1val1 = q0*x%d1val1
     722       172446 :       unary%d1val2 = q0*x%d1val2
     723       172446 :    end function log_self
     724              : 
     725            0 :    function log1p_self(x) result(unary)
     726              :       type(auto_diff_real_2var_order1), intent(in) :: x
     727              :       type(auto_diff_real_2var_order1) :: unary
     728            0 :       real(dp) :: q0
     729            0 :       q0 = powm1(x%val + 1)
     730            0 :       unary%val = log1p(x%val)
     731            0 :       unary%d1val1 = q0*x%d1val1
     732            0 :       unary%d1val2 = q0*x%d1val2
     733            0 :    end function log1p_self
     734              : 
     735            0 :    function safe_log_self(x) result(unary)
     736              :       type(auto_diff_real_2var_order1), intent(in) :: x
     737              :       type(auto_diff_real_2var_order1) :: unary
     738            0 :       real(dp) :: q0
     739            0 :       q0 = powm1(x%val)
     740            0 :       unary%val = safe_log(x%val)
     741            0 :       unary%d1val1 = q0*x%d1val1
     742            0 :       unary%d1val2 = q0*x%d1val2
     743            0 :    end function safe_log_self
     744              : 
     745            9 :    function log10_self(x) result(unary)
     746              :       type(auto_diff_real_2var_order1), intent(in) :: x
     747              :       type(auto_diff_real_2var_order1) :: unary
     748            9 :       real(dp) :: q1
     749            9 :       real(dp) :: q0
     750            9 :       q0 = powm1(ln10)
     751            9 :       q1 = q0*powm1(x%val)
     752            9 :       unary%val = q0*log(x%val)
     753            9 :       unary%d1val1 = q1*x%d1val1
     754            9 :       unary%d1val2 = q1*x%d1val2
     755            9 :    end function log10_self
     756              : 
     757            1 :    function safe_log10_self(x) result(unary)
     758              :       type(auto_diff_real_2var_order1), intent(in) :: x
     759              :       type(auto_diff_real_2var_order1) :: unary
     760            1 :       real(dp) :: q1
     761            1 :       real(dp) :: q0
     762            1 :       q0 = powm1(ln10)
     763            1 :       q1 = q0*powm1(x%val)
     764            1 :       unary%val = q0*safe_log(x%val)
     765            1 :       unary%d1val1 = q1*x%d1val1
     766            1 :       unary%d1val2 = q1*x%d1val2
     767            1 :    end function safe_log10_self
     768              : 
     769            0 :    function log2_self(x) result(unary)
     770              :       type(auto_diff_real_2var_order1), intent(in) :: x
     771              :       type(auto_diff_real_2var_order1) :: unary
     772            0 :       real(dp) :: q1
     773            0 :       real(dp) :: q0
     774            0 :       q0 = powm1(log(2.0_dp))
     775            0 :       q1 = q0*powm1(x%val)
     776            0 :       unary%val = q0*log(x%val)
     777            0 :       unary%d1val1 = q1*x%d1val1
     778            0 :       unary%d1val2 = q1*x%d1val2
     779            0 :    end function log2_self
     780              : 
     781            1 :    function sin_self(x) result(unary)
     782              :       type(auto_diff_real_2var_order1), intent(in) :: x
     783              :       type(auto_diff_real_2var_order1) :: unary
     784            1 :       real(dp) :: q0
     785            1 :       q0 = cos(x%val)
     786            1 :       unary%val = sin(x%val)
     787            1 :       unary%d1val1 = q0*x%d1val1
     788            1 :       unary%d1val2 = q0*x%d1val2
     789            1 :    end function sin_self
     790              : 
     791            1 :    function cos_self(x) result(unary)
     792              :       type(auto_diff_real_2var_order1), intent(in) :: x
     793              :       type(auto_diff_real_2var_order1) :: unary
     794            1 :       real(dp) :: q0
     795            1 :       q0 = sin(x%val)
     796            1 :       unary%val = cos(x%val)
     797            1 :       unary%d1val1 = -q0*x%d1val1
     798            1 :       unary%d1val2 = -q0*x%d1val2
     799            1 :    end function cos_self
     800              : 
     801            1 :    function tan_self(x) result(unary)
     802              :       type(auto_diff_real_2var_order1), intent(in) :: x
     803              :       type(auto_diff_real_2var_order1) :: unary
     804            1 :       real(dp) :: q1
     805              :       real(dp) :: q0
     806            1 :       q0 = tan(x%val)
     807            1 :       q1 = pow2(q0) + 1
     808            1 :       unary%val = q0
     809            1 :       unary%d1val1 = q1*x%d1val1
     810            1 :       unary%d1val2 = q1*x%d1val2
     811            1 :    end function tan_self
     812              : 
     813            0 :    function sinpi_self(x) result(unary)
     814              :       type(auto_diff_real_2var_order1), intent(in) :: x
     815              :       type(auto_diff_real_2var_order1) :: unary
     816            0 :       real(dp) :: q1
     817              :       real(dp) :: q0
     818            0 :       q0 = pi*x%val
     819            0 :       q1 = pi*cos(q0)
     820            0 :       unary%val = sin(q0)
     821            0 :       unary%d1val1 = q1*x%d1val1
     822            0 :       unary%d1val2 = q1*x%d1val2
     823            0 :    end function sinpi_self
     824              : 
     825            0 :    function cospi_self(x) result(unary)
     826              :       type(auto_diff_real_2var_order1), intent(in) :: x
     827              :       type(auto_diff_real_2var_order1) :: unary
     828            0 :       real(dp) :: q1
     829              :       real(dp) :: q0
     830            0 :       q0 = pi*x%val
     831            0 :       q1 = pi*sin(q0)
     832            0 :       unary%val = cos(q0)
     833            0 :       unary%d1val1 = -q1*x%d1val1
     834            0 :       unary%d1val2 = -q1*x%d1val2
     835            0 :    end function cospi_self
     836              : 
     837            0 :    function tanpi_self(x) result(unary)
     838              :       type(auto_diff_real_2var_order1), intent(in) :: x
     839              :       type(auto_diff_real_2var_order1) :: unary
     840            0 :       real(dp) :: q1
     841              :       real(dp) :: q0
     842            0 :       q0 = tan(pi*x%val)
     843            0 :       q1 = pi*(pow2(q0) + 1)
     844            0 :       unary%val = q0
     845            0 :       unary%d1val1 = q1*x%d1val1
     846            0 :       unary%d1val2 = q1*x%d1val2
     847            0 :    end function tanpi_self
     848              : 
     849            1 :    function sinh_self(x) result(unary)
     850              :       type(auto_diff_real_2var_order1), intent(in) :: x
     851              :       type(auto_diff_real_2var_order1) :: unary
     852            1 :       real(dp) :: q0
     853            1 :       q0 = cosh(x%val)
     854            1 :       unary%val = sinh(x%val)
     855            1 :       unary%d1val1 = q0*x%d1val1
     856            1 :       unary%d1val2 = q0*x%d1val2
     857            1 :    end function sinh_self
     858              : 
     859            1 :    function cosh_self(x) result(unary)
     860              :       type(auto_diff_real_2var_order1), intent(in) :: x
     861              :       type(auto_diff_real_2var_order1) :: unary
     862            1 :       real(dp) :: q0
     863            1 :       q0 = sinh(x%val)
     864            1 :       unary%val = cosh(x%val)
     865            1 :       unary%d1val1 = q0*x%d1val1
     866            1 :       unary%d1val2 = q0*x%d1val2
     867            1 :    end function cosh_self
     868              : 
     869       172431 :    function tanh_self(x) result(unary)
     870              :       type(auto_diff_real_2var_order1), intent(in) :: x
     871              :       type(auto_diff_real_2var_order1) :: unary
     872       172431 :       real(dp) :: q1
     873              :       real(dp) :: q0
     874       172431 :       q0 = tanh(x%val)
     875       172431 :       q1 = pow2(q0) - 1
     876       172431 :       unary%val = q0
     877       172431 :       unary%d1val1 = -q1*x%d1val1
     878       172431 :       unary%d1val2 = -q1*x%d1val2
     879       172431 :    end function tanh_self
     880              : 
     881            1 :    function asin_self(x) result(unary)
     882              :       type(auto_diff_real_2var_order1), intent(in) :: x
     883              :       type(auto_diff_real_2var_order1) :: unary
     884            1 :       real(dp) :: q0
     885            1 :       q0 = powm1(sqrt(1 - pow2(x%val)))
     886            1 :       unary%val = asin(x%val)
     887            1 :       unary%d1val1 = q0*x%d1val1
     888            1 :       unary%d1val2 = q0*x%d1val2
     889            1 :    end function asin_self
     890              : 
     891            1 :    function acos_self(x) result(unary)
     892              :       type(auto_diff_real_2var_order1), intent(in) :: x
     893              :       type(auto_diff_real_2var_order1) :: unary
     894            1 :       real(dp) :: q0
     895            1 :       q0 = powm1(sqrt(1 - pow2(x%val)))
     896            1 :       unary%val = acos(x%val)
     897            1 :       unary%d1val1 = -q0*x%d1val1
     898            1 :       unary%d1val2 = -q0*x%d1val2
     899            1 :    end function acos_self
     900              : 
     901           13 :    function atan_self(x) result(unary)
     902              :       type(auto_diff_real_2var_order1), intent(in) :: x
     903              :       type(auto_diff_real_2var_order1) :: unary
     904           13 :       real(dp) :: q0
     905           13 :       q0 = powm1(pow2(x%val) + 1)
     906           13 :       unary%val = atan(x%val)
     907           13 :       unary%d1val1 = q0*x%d1val1
     908           13 :       unary%d1val2 = q0*x%d1val2
     909           13 :    end function atan_self
     910              : 
     911            0 :    function asinpi_self(x) result(unary)
     912              :       type(auto_diff_real_2var_order1), intent(in) :: x
     913              :       type(auto_diff_real_2var_order1) :: unary
     914            0 :       real(dp) :: q1
     915            0 :       real(dp) :: q0
     916            0 :       q0 = powm1(pi)
     917            0 :       q1 = q0*powm1(sqrt(1 - pow2(x%val)))
     918            0 :       unary%val = q0*asin(x%val)
     919            0 :       unary%d1val1 = q1*x%d1val1
     920            0 :       unary%d1val2 = q1*x%d1val2
     921            0 :    end function asinpi_self
     922              : 
     923            0 :    function acospi_self(x) result(unary)
     924              :       type(auto_diff_real_2var_order1), intent(in) :: x
     925              :       type(auto_diff_real_2var_order1) :: unary
     926            0 :       real(dp) :: q1
     927            0 :       real(dp) :: q0
     928            0 :       q0 = powm1(pi)
     929            0 :       q1 = q0*powm1(sqrt(1 - pow2(x%val)))
     930            0 :       unary%val = q0*acos(x%val)
     931            0 :       unary%d1val1 = -q1*x%d1val1
     932            0 :       unary%d1val2 = -q1*x%d1val2
     933            0 :    end function acospi_self
     934              : 
     935            0 :    function atanpi_self(x) result(unary)
     936              :       type(auto_diff_real_2var_order1), intent(in) :: x
     937              :       type(auto_diff_real_2var_order1) :: unary
     938            0 :       real(dp) :: q0
     939            0 :       q0 = powm1(pi*pow2(x%val) + pi)
     940            0 :       unary%val = powm1(pi)*atan(x%val)
     941            0 :       unary%d1val1 = q0*x%d1val1
     942            0 :       unary%d1val2 = q0*x%d1val2
     943            0 :    end function atanpi_self
     944              : 
     945            1 :    function asinh_self(x) result(unary)
     946              :       type(auto_diff_real_2var_order1), intent(in) :: x
     947              :       type(auto_diff_real_2var_order1) :: unary
     948            1 :       real(dp) :: q0
     949            1 :       q0 = powm1(sqrt(pow2(x%val) + 1))
     950            1 :       unary%val = asinh(x%val)
     951            1 :       unary%d1val1 = q0*x%d1val1
     952            1 :       unary%d1val2 = q0*x%d1val2
     953            1 :    end function asinh_self
     954              : 
     955            1 :    function acosh_self(x) result(unary)
     956              :       type(auto_diff_real_2var_order1), intent(in) :: x
     957              :       type(auto_diff_real_2var_order1) :: unary
     958            1 :       real(dp) :: q0
     959            1 :       q0 = powm1(sqrt(pow2(x%val) - 1))
     960            1 :       unary%val = acosh(x%val)
     961            1 :       unary%d1val1 = q0*x%d1val1
     962            1 :       unary%d1val2 = q0*x%d1val2
     963            1 :    end function acosh_self
     964              : 
     965            1 :    function atanh_self(x) result(unary)
     966              :       type(auto_diff_real_2var_order1), intent(in) :: x
     967              :       type(auto_diff_real_2var_order1) :: unary
     968            1 :       real(dp) :: q0
     969            1 :       q0 = powm1(pow2(x%val) - 1)
     970            1 :       unary%val = atanh(x%val)
     971            1 :       unary%d1val1 = -q0*x%d1val1
     972            1 :       unary%d1val2 = -q0*x%d1val2
     973            1 :    end function atanh_self
     974              : 
     975      1930156 :    function sqrt_self(x) result(unary)
     976              :       type(auto_diff_real_2var_order1), intent(in) :: x
     977              :       type(auto_diff_real_2var_order1) :: unary
     978      1930156 :       real(dp) :: q1
     979              :       real(dp) :: q0
     980      1930156 :       q0 = sqrt(x%val)
     981      1930156 :       q1 = 0.5_dp*powm1(q0)
     982      1930156 :       unary%val = q0
     983      1930156 :       unary%d1val1 = q1*x%d1val1
     984      1930156 :       unary%d1val2 = q1*x%d1val2
     985      1930156 :    end function sqrt_self
     986              : 
     987      8065005 :    function pow2_self(x) result(unary)
     988              :       type(auto_diff_real_2var_order1), intent(in) :: x
     989              :       type(auto_diff_real_2var_order1) :: unary
     990      8065005 :       real(dp) :: q0
     991      8065005 :       q0 = 2.0_dp*x%val
     992      8065005 :       unary%val = pow2(x%val)
     993      8065005 :       unary%d1val1 = q0*x%d1val1
     994      8065005 :       unary%d1val2 = q0*x%d1val2
     995      8065005 :    end function pow2_self
     996              : 
     997            9 :    function pow3_self(x) result(unary)
     998              :       type(auto_diff_real_2var_order1), intent(in) :: x
     999              :       type(auto_diff_real_2var_order1) :: unary
    1000            9 :       real(dp) :: q0
    1001            9 :       q0 = 3.0_dp*pow2(x%val)
    1002            9 :       unary%val = pow3(x%val)
    1003            9 :       unary%d1val1 = q0*x%d1val1
    1004            9 :       unary%d1val2 = q0*x%d1val2
    1005            9 :    end function pow3_self
    1006              : 
    1007            1 :    function pow4_self(x) result(unary)
    1008              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1009              :       type(auto_diff_real_2var_order1) :: unary
    1010            1 :       real(dp) :: q0
    1011            1 :       q0 = 4.0_dp*pow3(x%val)
    1012            1 :       unary%val = pow4(x%val)
    1013            1 :       unary%d1val1 = q0*x%d1val1
    1014            1 :       unary%d1val2 = q0*x%d1val2
    1015            1 :    end function pow4_self
    1016              : 
    1017           17 :    function pow5_self(x) result(unary)
    1018              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1019              :       type(auto_diff_real_2var_order1) :: unary
    1020           17 :       real(dp) :: q0
    1021           17 :       q0 = 5.0_dp*pow4(x%val)
    1022           17 :       unary%val = pow5(x%val)
    1023           17 :       unary%d1val1 = q0*x%d1val1
    1024           17 :       unary%d1val2 = q0*x%d1val2
    1025           17 :    end function pow5_self
    1026              : 
    1027           17 :    function pow6_self(x) result(unary)
    1028              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1029              :       type(auto_diff_real_2var_order1) :: unary
    1030           17 :       real(dp) :: q0
    1031           17 :       q0 = 6.0_dp*pow5(x%val)
    1032           17 :       unary%val = pow6(x%val)
    1033           17 :       unary%d1val1 = q0*x%d1val1
    1034           17 :       unary%d1val2 = q0*x%d1val2
    1035           17 :    end function pow6_self
    1036              : 
    1037            1 :    function pow7_self(x) result(unary)
    1038              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1039              :       type(auto_diff_real_2var_order1) :: unary
    1040            1 :       real(dp) :: q0
    1041            1 :       q0 = 7.0_dp*pow6(x%val)
    1042            1 :       unary%val = pow7(x%val)
    1043            1 :       unary%d1val1 = q0*x%d1val1
    1044            1 :       unary%d1val2 = q0*x%d1val2
    1045            1 :    end function pow7_self
    1046              : 
    1047            0 :    function pow8_self(x) result(unary)
    1048              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1049              :       type(auto_diff_real_2var_order1) :: unary
    1050            0 :       real(dp) :: q0
    1051            0 :       q0 = 8.0_dp*pow7(x%val)
    1052            0 :       unary%val = pow8(x%val)
    1053            0 :       unary%d1val1 = q0*x%d1val1
    1054            0 :       unary%d1val2 = q0*x%d1val2
    1055            0 :    end function pow8_self
    1056              : 
    1057            2 :    function abs_self(x) result(unary)
    1058              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1059              :       type(auto_diff_real_2var_order1) :: unary
    1060            2 :       real(dp) :: q0
    1061            2 :       q0 = sgn(x%val)
    1062            2 :       unary%val = Abs(x%val)
    1063            2 :       unary%d1val1 = q0*x%d1val1
    1064            2 :       unary%d1val2 = q0*x%d1val2
    1065            2 :    end function abs_self
    1066              : 
    1067      6135369 :    function add_self(x, y) result(binary)
    1068              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1069              :       type(auto_diff_real_2var_order1), intent(in) :: y
    1070              :       type(auto_diff_real_2var_order1) :: binary
    1071      6135369 :       binary%val = x%val + y%val
    1072      6135369 :       binary%d1val1 = x%d1val1 + y%d1val1
    1073      6135369 :       binary%d1val2 = x%d1val2 + y%d1val2
    1074      6135369 :    end function add_self
    1075              : 
    1076      1398000 :    function add_self_real(x, y) result(unary)
    1077              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1078              :       real(dp), intent(in) :: y
    1079              :       type(auto_diff_real_2var_order1) :: unary
    1080      1398000 :       unary%val = x%val + y
    1081      1398000 :       unary%d1val1 = x%d1val1
    1082      1398000 :       unary%d1val2 = x%d1val2
    1083      1398000 :    end function add_self_real
    1084              : 
    1085      2202293 :    function add_real_self(z, x) result(unary)
    1086              :       real(dp), intent(in) :: z
    1087              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1088              :       type(auto_diff_real_2var_order1) :: unary
    1089      2202293 :       unary%val = x%val + z
    1090      2202293 :       unary%d1val1 = x%d1val1
    1091      2202293 :       unary%d1val2 = x%d1val2
    1092      2202293 :    end function add_real_self
    1093              : 
    1094            1 :    function add_self_int(x, y) result(unary)
    1095              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1096              :       integer, intent(in) :: y
    1097              :       type(auto_diff_real_2var_order1) :: unary
    1098            1 :       real(dp) :: y_dp
    1099            1 :       y_dp = y
    1100            1 :       unary%val = x%val + y_dp
    1101            1 :       unary%d1val1 = x%d1val1
    1102            1 :       unary%d1val2 = x%d1val2
    1103            1 :    end function add_self_int
    1104              : 
    1105           61 :    function add_int_self(z, x) result(unary)
    1106              :       integer, intent(in) :: z
    1107              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1108              :       type(auto_diff_real_2var_order1) :: unary
    1109           61 :       real(dp) :: y_dp
    1110           61 :       y_dp = z
    1111           61 :       unary%val = x%val + y_dp
    1112           61 :       unary%d1val1 = x%d1val1
    1113           61 :       unary%d1val2 = x%d1val2
    1114           61 :    end function add_int_self
    1115              : 
    1116      2499226 :    function sub_self(x, y) result(binary)
    1117              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1118              :       type(auto_diff_real_2var_order1), intent(in) :: y
    1119              :       type(auto_diff_real_2var_order1) :: binary
    1120      2499226 :       binary%val = x%val - y%val
    1121      2499226 :       binary%d1val1 = x%d1val1 - y%d1val1
    1122      2499226 :       binary%d1val2 = x%d1val2 - y%d1val2
    1123      2499226 :    end function sub_self
    1124              : 
    1125      8255144 :    function sub_self_real(x, y) result(unary)
    1126              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1127              :       real(dp), intent(in) :: y
    1128              :       type(auto_diff_real_2var_order1) :: unary
    1129      8255144 :       unary%val = x%val - y
    1130      8255144 :       unary%d1val1 = x%d1val1
    1131      8255144 :       unary%d1val2 = x%d1val2
    1132      8255144 :    end function sub_self_real
    1133              : 
    1134       517304 :    function sub_real_self(z, x) result(unary)
    1135              :       real(dp), intent(in) :: z
    1136              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1137              :       type(auto_diff_real_2var_order1) :: unary
    1138       517304 :       unary%val = -x%val + z
    1139       517304 :       unary%d1val1 = -x%d1val1
    1140       517304 :       unary%d1val2 = -x%d1val2
    1141       517304 :    end function sub_real_self
    1142              : 
    1143            0 :    function sub_self_int(x, y) result(unary)
    1144              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1145              :       integer, intent(in) :: y
    1146              :       type(auto_diff_real_2var_order1) :: unary
    1147            0 :       real(dp) :: y_dp
    1148            0 :       y_dp = y
    1149            0 :       unary%val = x%val - y_dp
    1150            0 :       unary%d1val1 = x%d1val1
    1151            0 :       unary%d1val2 = x%d1val2
    1152            0 :    end function sub_self_int
    1153              : 
    1154            0 :    function sub_int_self(z, x) result(unary)
    1155              :       integer, intent(in) :: z
    1156              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1157              :       type(auto_diff_real_2var_order1) :: unary
    1158            0 :       real(dp) :: y_dp
    1159            0 :       y_dp = z
    1160            0 :       unary%val = -x%val + y_dp
    1161            0 :       unary%d1val1 = -x%d1val1
    1162            0 :       unary%d1val2 = -x%d1val2
    1163            0 :    end function sub_int_self
    1164              : 
    1165      7470771 :    function mul_self(x, y) result(binary)
    1166              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1167              :       type(auto_diff_real_2var_order1), intent(in) :: y
    1168              :       type(auto_diff_real_2var_order1) :: binary
    1169      7470771 :       binary%val = x%val*y%val
    1170      7470771 :       binary%d1val1 = x%d1val1*y%val + x%val*y%d1val1
    1171      7470771 :       binary%d1val2 = x%d1val2*y%val + x%val*y%d1val2
    1172      7470771 :    end function mul_self
    1173              : 
    1174       689809 :    function mul_self_real(x, y) result(unary)
    1175              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1176              :       real(dp), intent(in) :: y
    1177              :       type(auto_diff_real_2var_order1) :: unary
    1178       689809 :       unary%val = x%val*y
    1179       689809 :       unary%d1val1 = x%d1val1*y
    1180       689809 :       unary%d1val2 = x%d1val2*y
    1181       689809 :    end function mul_self_real
    1182              : 
    1183      1515897 :    function mul_real_self(z, x) result(unary)
    1184              :       real(dp), intent(in) :: z
    1185              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1186              :       type(auto_diff_real_2var_order1) :: unary
    1187      1515897 :       unary%val = x%val*z
    1188      1515897 :       unary%d1val1 = x%d1val1*z
    1189      1515897 :       unary%d1val2 = x%d1val2*z
    1190      1515897 :    end function mul_real_self
    1191              : 
    1192            0 :    function mul_self_int(x, y) result(unary)
    1193              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1194              :       integer, intent(in) :: y
    1195              :       type(auto_diff_real_2var_order1) :: unary
    1196            0 :       real(dp) :: y_dp
    1197            0 :       y_dp = y
    1198            0 :       unary%val = x%val*y_dp
    1199            0 :       unary%d1val1 = x%d1val1*y_dp
    1200            0 :       unary%d1val2 = x%d1val2*y_dp
    1201            0 :    end function mul_self_int
    1202              : 
    1203           16 :    function mul_int_self(z, x) result(unary)
    1204              :       integer, intent(in) :: z
    1205              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1206              :       type(auto_diff_real_2var_order1) :: unary
    1207           16 :       real(dp) :: y_dp
    1208           16 :       y_dp = z
    1209           16 :       unary%val = x%val*y_dp
    1210           16 :       unary%d1val1 = x%d1val1*y_dp
    1211           16 :       unary%d1val2 = x%d1val2*y_dp
    1212           16 :    end function mul_int_self
    1213              : 
    1214      2019293 :    function div_self(x, y) result(binary)
    1215              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1216              :       type(auto_diff_real_2var_order1), intent(in) :: y
    1217              :       type(auto_diff_real_2var_order1) :: binary
    1218      2019293 :       real(dp) :: q0
    1219      2019293 :       q0 = powm1(pow2(y%val))
    1220      2019293 :       binary%val = x%val*powm1(y%val)
    1221      2019293 :       binary%d1val1 = q0*(x%d1val1*y%val - x%val*y%d1val1)
    1222      2019293 :       binary%d1val2 = q0*(x%d1val2*y%val - x%val*y%d1val2)
    1223      2019293 :    end function div_self
    1224              : 
    1225       603848 :    function div_self_real(x, y) result(unary)
    1226              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1227              :       real(dp), intent(in) :: y
    1228              :       type(auto_diff_real_2var_order1) :: unary
    1229       603848 :       real(dp) :: q0
    1230       603848 :       q0 = powm1(y)
    1231       603848 :       unary%val = q0*x%val
    1232       603848 :       unary%d1val1 = q0*x%d1val1
    1233       603848 :       unary%d1val2 = q0*x%d1val2
    1234       603848 :    end function div_self_real
    1235              : 
    1236          108 :    function div_real_self(z, x) result(unary)
    1237              :       real(dp), intent(in) :: z
    1238              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1239              :       type(auto_diff_real_2var_order1) :: unary
    1240          108 :       real(dp) :: q0
    1241          108 :       q0 = z*powm1(pow2(x%val))
    1242          108 :       unary%val = z*powm1(x%val)
    1243          108 :       unary%d1val1 = -q0*x%d1val1
    1244          108 :       unary%d1val2 = -q0*x%d1val2
    1245          108 :    end function div_real_self
    1246              : 
    1247            0 :    function div_self_int(x, y) result(unary)
    1248              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1249              :       integer, intent(in) :: y
    1250              :       type(auto_diff_real_2var_order1) :: unary
    1251              :       real(dp) :: y_dp
    1252            0 :       real(dp) :: q0
    1253            0 :       y_dp = y
    1254            0 :       q0 = powm1(y_dp)
    1255            0 :       unary%val = q0*x%val
    1256            0 :       unary%d1val1 = q0*x%d1val1
    1257            0 :       unary%d1val2 = q0*x%d1val2
    1258            0 :    end function div_self_int
    1259              : 
    1260            0 :    function div_int_self(z, x) result(unary)
    1261              :       integer, intent(in) :: z
    1262              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1263              :       type(auto_diff_real_2var_order1) :: unary
    1264            0 :       real(dp) :: y_dp
    1265            0 :       real(dp) :: q0
    1266            0 :       y_dp = z
    1267            0 :       q0 = y_dp*powm1(pow2(x%val))
    1268            0 :       unary%val = y_dp*powm1(x%val)
    1269            0 :       unary%d1val1 = -q0*x%d1val1
    1270            0 :       unary%d1val2 = -q0*x%d1val2
    1271            0 :    end function div_int_self
    1272              : 
    1273            1 :    function pow_self(x, y) result(binary)
    1274              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1275              :       type(auto_diff_real_2var_order1), intent(in) :: y
    1276              :       type(auto_diff_real_2var_order1) :: binary
    1277            1 :       real(dp) :: q1
    1278            1 :       real(dp) :: q0
    1279            1 :       q0 = pow(x%val, y%val - 1)
    1280            1 :       q1 = x%val*log(x%val)
    1281            1 :       binary%val = pow(x%val, y%val)
    1282            1 :       binary%d1val1 = q0*(q1*y%d1val1 + x%d1val1*y%val)
    1283            1 :       binary%d1val2 = q0*(q1*y%d1val2 + x%d1val2*y%val)
    1284            1 :    end function pow_self
    1285              : 
    1286       178360 :    function pow_self_real(x, y) result(unary)
    1287              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1288              :       real(dp), intent(in) :: y
    1289              :       type(auto_diff_real_2var_order1) :: unary
    1290       178360 :       real(dp) :: q0
    1291       178360 :       q0 = y*pow(x%val, y - 1)
    1292       178360 :       unary%val = pow(x%val, y)
    1293       178360 :       unary%d1val1 = q0*x%d1val1
    1294       178360 :       unary%d1val2 = q0*x%d1val2
    1295       178360 :    end function pow_self_real
    1296              : 
    1297            2 :    function pow_real_self(z, x) result(unary)
    1298              :       real(dp), intent(in) :: z
    1299              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1300              :       type(auto_diff_real_2var_order1) :: unary
    1301            2 :       real(dp) :: q1
    1302            2 :       real(dp) :: q0
    1303            2 :       q0 = pow(z, x%val)
    1304            2 :       q1 = q0*log(z)
    1305            2 :       unary%val = q0
    1306            2 :       unary%d1val1 = q1*x%d1val1
    1307            2 :       unary%d1val2 = q1*x%d1val2
    1308            2 :    end function pow_real_self
    1309              : 
    1310            0 :    function pow_self_int(x, y) result(unary)
    1311              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1312              :       integer, intent(in) :: y
    1313              :       type(auto_diff_real_2var_order1) :: unary
    1314              :       real(dp) :: y_dp
    1315            0 :       real(dp) :: q0
    1316            0 :       y_dp = y
    1317            0 :       q0 = y_dp*pow(x%val, y_dp - 1)
    1318            0 :       unary%val = pow(x%val, y_dp)
    1319            0 :       unary%d1val1 = q0*x%d1val1
    1320            0 :       unary%d1val2 = q0*x%d1val2
    1321            0 :    end function pow_self_int
    1322              : 
    1323            0 :    function pow_int_self(z, x) result(unary)
    1324              :       integer, intent(in) :: z
    1325              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1326              :       type(auto_diff_real_2var_order1) :: unary
    1327              :       real(dp) :: y_dp
    1328            0 :       real(dp) :: q1
    1329            0 :       real(dp) :: q0
    1330            0 :       y_dp = z
    1331            0 :       q0 = pow(y_dp, x%val)
    1332            0 :       q1 = q0*log(y_dp)
    1333            0 :       unary%val = q0
    1334            0 :       unary%d1val1 = q1*x%d1val1
    1335            0 :       unary%d1val2 = q1*x%d1val2
    1336            0 :    end function pow_int_self
    1337              : 
    1338           11 :    function max_self(x, y) result(binary)
    1339              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1340              :       type(auto_diff_real_2var_order1), intent(in) :: y
    1341              :       type(auto_diff_real_2var_order1) :: binary
    1342           11 :       real(dp) :: q1
    1343           11 :       real(dp) :: q0
    1344           11 :       q0 = Heaviside(x%val - y%val)
    1345           11 :       q1 = Heaviside(-x%val + y%val)
    1346           11 :       binary%val = Max(x%val, y%val)
    1347           11 :       binary%d1val1 = q0*x%d1val1 + q1*y%d1val1
    1348           11 :       binary%d1val2 = q0*x%d1val2 + q1*y%d1val2
    1349           11 :    end function max_self
    1350              : 
    1351       241254 :    function max_self_real(x, y) result(unary)
    1352              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1353              :       real(dp), intent(in) :: y
    1354              :       type(auto_diff_real_2var_order1) :: unary
    1355       241254 :       real(dp) :: q0
    1356       241254 :       q0 = Heaviside(x%val - y)
    1357       241254 :       unary%val = Max(x%val, y)
    1358       241254 :       unary%d1val1 = q0*x%d1val1
    1359       241254 :       unary%d1val2 = q0*x%d1val2
    1360       241254 :    end function max_self_real
    1361              : 
    1362            2 :    function max_real_self(z, x) result(unary)
    1363              :       real(dp), intent(in) :: z
    1364              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1365              :       type(auto_diff_real_2var_order1) :: unary
    1366            2 :       real(dp) :: q0
    1367            2 :       q0 = Heaviside(x%val - z)
    1368            2 :       unary%val = Max(x%val, z)
    1369            2 :       unary%d1val1 = q0*x%d1val1
    1370            2 :       unary%d1val2 = q0*x%d1val2
    1371            2 :    end function max_real_self
    1372              : 
    1373            0 :    function max_self_int(x, y) result(unary)
    1374              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1375              :       integer, intent(in) :: y
    1376              :       type(auto_diff_real_2var_order1) :: unary
    1377            0 :       real(dp) :: y_dp
    1378            0 :       real(dp) :: q0
    1379            0 :       y_dp = y
    1380            0 :       q0 = Heaviside(x%val - y_dp)
    1381            0 :       unary%val = Max(x%val, y_dp)
    1382            0 :       unary%d1val1 = q0*x%d1val1
    1383            0 :       unary%d1val2 = q0*x%d1val2
    1384            0 :    end function max_self_int
    1385              : 
    1386            0 :    function max_int_self(z, x) result(unary)
    1387              :       integer, intent(in) :: z
    1388              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1389              :       type(auto_diff_real_2var_order1) :: unary
    1390            0 :       real(dp) :: y_dp
    1391            0 :       real(dp) :: q0
    1392            0 :       y_dp = z
    1393            0 :       q0 = Heaviside(x%val - y_dp)
    1394            0 :       unary%val = Max(x%val, y_dp)
    1395            0 :       unary%d1val1 = q0*x%d1val1
    1396            0 :       unary%d1val2 = q0*x%d1val2
    1397            0 :    end function max_int_self
    1398              : 
    1399      1930037 :    function min_self(x, y) result(binary)
    1400              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1401              :       type(auto_diff_real_2var_order1), intent(in) :: y
    1402              :       type(auto_diff_real_2var_order1) :: binary
    1403      1930037 :       real(dp) :: q1
    1404      1930037 :       real(dp) :: q0
    1405      1930037 :       q0 = Heaviside(-x%val + y%val)
    1406      1930037 :       q1 = Heaviside(x%val - y%val)
    1407      1930037 :       binary%val = Min(x%val, y%val)
    1408      1930037 :       binary%d1val1 = q0*x%d1val1 + q1*y%d1val1
    1409      1930037 :       binary%d1val2 = q0*x%d1val2 + q1*y%d1val2
    1410      1930037 :    end function min_self
    1411              : 
    1412       241254 :    function min_self_real(x, y) result(unary)
    1413              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1414              :       real(dp), intent(in) :: y
    1415              :       type(auto_diff_real_2var_order1) :: unary
    1416       241254 :       real(dp) :: q0
    1417       241254 :       q0 = Heaviside(-x%val + y)
    1418       241254 :       unary%val = Min(x%val, y)
    1419       241254 :       unary%d1val1 = q0*x%d1val1
    1420       241254 :       unary%d1val2 = q0*x%d1val2
    1421       241254 :    end function min_self_real
    1422              : 
    1423            2 :    function min_real_self(z, x) result(unary)
    1424              :       real(dp), intent(in) :: z
    1425              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1426              :       type(auto_diff_real_2var_order1) :: unary
    1427            2 :       real(dp) :: q0
    1428            2 :       q0 = Heaviside(-x%val + z)
    1429            2 :       unary%val = Min(x%val, z)
    1430            2 :       unary%d1val1 = q0*x%d1val1
    1431            2 :       unary%d1val2 = q0*x%d1val2
    1432            2 :    end function min_real_self
    1433              : 
    1434            0 :    function min_self_int(x, y) result(unary)
    1435              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1436              :       integer, intent(in) :: y
    1437              :       type(auto_diff_real_2var_order1) :: unary
    1438            0 :       real(dp) :: y_dp
    1439            0 :       real(dp) :: q0
    1440            0 :       y_dp = y
    1441            0 :       q0 = Heaviside(-x%val + y_dp)
    1442            0 :       unary%val = Min(x%val, y_dp)
    1443            0 :       unary%d1val1 = q0*x%d1val1
    1444            0 :       unary%d1val2 = q0*x%d1val2
    1445            0 :    end function min_self_int
    1446              : 
    1447            0 :    function min_int_self(z, x) result(unary)
    1448              :       integer, intent(in) :: z
    1449              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1450              :       type(auto_diff_real_2var_order1) :: unary
    1451            0 :       real(dp) :: y_dp
    1452            0 :       real(dp) :: q0
    1453            0 :       y_dp = z
    1454            0 :       q0 = Heaviside(-x%val + y_dp)
    1455            0 :       unary%val = Min(x%val, y_dp)
    1456            0 :       unary%d1val1 = q0*x%d1val1
    1457            0 :       unary%d1val2 = q0*x%d1val2
    1458            0 :    end function min_int_self
    1459              : 
    1460            2 :    function dim_self(x, y) result(binary)
    1461              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1462              :       type(auto_diff_real_2var_order1), intent(in) :: y
    1463              :       type(auto_diff_real_2var_order1) :: binary
    1464            2 :       real(dp) :: q1
    1465              :       real(dp) :: q0
    1466            2 :       q0 = x%val - y%val
    1467            2 :       q1 = 0.5_dp*sgn(q0)
    1468            2 :       binary%val = -0.5_dp*y%val + 0.5_dp*x%val + 0.5_dp*Abs(q0)
    1469            2 :       binary%d1val1 = -0.5_dp*y%d1val1 + 0.5_dp*x%d1val1 + q1*(x%d1val1 - y%d1val1)
    1470            2 :       binary%d1val2 = -0.5_dp*y%d1val2 + 0.5_dp*x%d1val2 + q1*(x%d1val2 - y%d1val2)
    1471            2 :    end function dim_self
    1472              : 
    1473            1 :    function dim_self_real(x, y) result(unary)
    1474              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1475              :       real(dp), intent(in) :: y
    1476              :       type(auto_diff_real_2var_order1) :: unary
    1477            1 :       real(dp) :: q1
    1478              :       real(dp) :: q0
    1479            1 :       q0 = x%val - y
    1480            1 :       q1 = 0.5_dp*sgn(q0) + 0.5_dp
    1481            1 :       unary%val = -0.5_dp*y + 0.5_dp*x%val + 0.5_dp*Abs(q0)
    1482            1 :       unary%d1val1 = q1*x%d1val1
    1483            1 :       unary%d1val2 = q1*x%d1val2
    1484            1 :    end function dim_self_real
    1485              : 
    1486            0 :    function dim_real_self(z, x) result(unary)
    1487              :       real(dp), intent(in) :: z
    1488              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1489              :       type(auto_diff_real_2var_order1) :: unary
    1490            0 :       real(dp) :: q1
    1491              :       real(dp) :: q0
    1492            0 :       q0 = x%val - z
    1493            0 :       q1 = -0.5_dp + 0.5_dp*sgn(q0)
    1494            0 :       unary%val = -0.5_dp*x%val + 0.5_dp*z + 0.5_dp*Abs(q0)
    1495            0 :       unary%d1val1 = q1*x%d1val1
    1496            0 :       unary%d1val2 = q1*x%d1val2
    1497            0 :    end function dim_real_self
    1498              : 
    1499            0 :    function dim_self_int(x, y) result(unary)
    1500              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1501              :       integer, intent(in) :: y
    1502              :       type(auto_diff_real_2var_order1) :: unary
    1503            0 :       real(dp) :: y_dp
    1504            0 :       real(dp) :: q1
    1505              :       real(dp) :: q0
    1506            0 :       y_dp = y
    1507            0 :       q0 = x%val - y_dp
    1508            0 :       q1 = 0.5_dp*sgn(q0) + 0.5_dp
    1509            0 :       unary%val = -0.5_dp*y_dp + 0.5_dp*x%val + 0.5_dp*Abs(q0)
    1510            0 :       unary%d1val1 = q1*x%d1val1
    1511            0 :       unary%d1val2 = q1*x%d1val2
    1512            0 :    end function dim_self_int
    1513              : 
    1514            0 :    function dim_int_self(z, x) result(unary)
    1515              :       integer, intent(in) :: z
    1516              :       type(auto_diff_real_2var_order1), intent(in) :: x
    1517              :       type(auto_diff_real_2var_order1) :: unary
    1518            0 :       real(dp) :: y_dp
    1519            0 :       real(dp) :: q1
    1520              :       real(dp) :: q0
    1521            0 :       y_dp = z
    1522            0 :       q0 = x%val - y_dp
    1523            0 :       q1 = -0.5_dp + 0.5_dp*sgn(q0)
    1524            0 :       unary%val = -0.5_dp*x%val + 0.5_dp*y_dp + 0.5_dp*Abs(q0)
    1525            0 :       unary%d1val1 = q1*x%d1val1
    1526            0 :       unary%d1val2 = q1*x%d1val2
    1527            0 :    end function dim_int_self
    1528              : 
    1529            0 :    function differentiate_auto_diff_real_2var_order1_1(this) result(derivative)
    1530              :       type(auto_diff_real_2var_order1), intent(in) :: this
    1531              :       type(auto_diff_real_2var_order1) :: derivative
    1532            0 :       derivative%val = this%d1val1
    1533            0 :       derivative%d1val1 = 0.0_dp
    1534            0 :       derivative%d1val2 = 0.0_dp
    1535            0 :    end function differentiate_auto_diff_real_2var_order1_1
    1536              : 
    1537            0 :    function differentiate_auto_diff_real_2var_order1_2(this) result(derivative)
    1538              :       type(auto_diff_real_2var_order1), intent(in) :: this
    1539              :       type(auto_diff_real_2var_order1) :: derivative
    1540            0 :       derivative%val = this%d1val2
    1541            0 :       derivative%d1val1 = 0.0_dp
    1542            0 :       derivative%d1val2 = 0.0_dp
    1543            0 :    end function differentiate_auto_diff_real_2var_order1_2
    1544              : 
    1545            0 : end module auto_diff_real_2var_order1_module
        

Generated by: LCOV version 2.0-1