LCOV - code coverage report
Current view: top level - star/private - auto_diff_support.f90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 31.8 % 737 234
Test Date: 2025-05-08 18:23:42 Functions: 25.0 % 108 27

            Line data    Source code
       1              : ! ***********************************************************************
       2              : !
       3              : !   Copyright (C) 2020  Adam Jermyn & 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_support
      21              : 
      22              :       use star_private_def
      23              :       use const_def, only: dp, sqrt_2_div_3
      24              :       use auto_diff
      25              : 
      26              :       implicit none
      27              : 
      28              :       ! current use of xtra's
      29              :       ! xtra1 is w_div_wc
      30              : 
      31              :       public
      32              : 
      33              :       contains
      34              : 
      35        52348 :       type(auto_diff_real_star_order1) function shift_p1(val_00) result(val_p1)
      36              :          type(auto_diff_real_star_order1), intent(in) :: val_00
      37              :          integer :: j
      38        52348 :          val_p1%val = val_00%val
      39        52348 :          do j=auto_diff_star_num_vars-2,1,-3  ! p1 gets 00, 00 gets m1, m1 gets 0d0
      40       575828 :             val_p1%d1Array(j+2) = val_00%d1Array(j+1)
      41       575828 :             val_p1%d1Array(j+1) = val_00%d1Array(j)
      42       575828 :             val_p1%d1Array(j) = 0d0
      43              :          end do
      44        52348 :       end function shift_p1
      45              : 
      46        52304 :       type(auto_diff_real_star_order1) function shift_m1(val_00) result(val_m1)
      47              :          type(auto_diff_real_star_order1), intent(in) :: val_00
      48              :          integer :: j
      49        52304 :          val_m1%val = val_00%val
      50        52304 :          do j=1,auto_diff_star_num_vars,3  ! m1 gets 00, 00 gets p1, p1 gets 0d0
      51       575344 :             val_m1%d1Array(j) = val_00%d1Array(j+1)
      52       575344 :             val_m1%d1Array(j+1) = val_00%d1Array(j+2)
      53       575344 :             val_m1%d1Array(j+2) = 0d0
      54              :          end do
      55        52304 :       end function shift_m1
      56              : 
      57       209392 :       subroutine unwrap(var, val, &
      58              :             dlnd_m1, dlnd_00, dlnd_p1, &
      59              :             dlnT_m1, dlnT_00, dlnT_p1, &
      60              :             dw_m1, dw_00, dw_p1, &
      61              :             dlnR_m1, dlnR_00, dlnR_p1, &
      62              :             dv_m1, dv_00, dv_p1, &
      63              :             dL_m1, dL_00, dL_p1, &
      64              :             dHp_m1, dHp_00, dHp_p1, &
      65              :             dw_div_wc_m1, dw_div_wc_00, dw_div_wc_p1, &
      66              :             djrot_m1, djrot_00, djrot_p1, &
      67              :             dxtra1_m1, dxtra1_00, dxtra1_p1, &
      68              :             dxtra2_m1, dxtra2_00, dxtra2_p1)
      69              :          type(auto_diff_real_star_order1), intent(in) :: var
      70              :          real(dp), intent(out) :: &
      71              :             val, dlnd_m1, dlnd_00, dlnd_p1, dlnT_m1, dlnT_00, dlnT_p1, &
      72              :             dw_m1, dw_00, dw_p1, dlnR_m1, dlnR_00, dlnR_p1, &
      73              :             dv_m1, dv_00, dv_p1, dL_m1, dL_00, dL_p1, &
      74              :             dHp_m1, dHp_00, dHp_p1, &
      75              :             dw_div_wc_m1, dw_div_wc_00, dw_div_wc_p1, &
      76              :             djrot_m1, djrot_00, djrot_p1, &
      77              :             dxtra1_m1, dxtra1_00, dxtra1_p1, &
      78              :             dxtra2_m1, dxtra2_00, dxtra2_p1
      79       209392 :          val = var%val
      80       209392 :          dlnd_m1 = var%d1Array(i_lnd_m1)
      81       209392 :          dlnd_00 = var%d1Array(i_lnd_00)
      82       209392 :          dlnd_p1 = var%d1Array(i_lnd_p1)
      83       209392 :          dlnT_m1 = var%d1Array(i_lnT_m1)
      84       209392 :          dlnT_00 = var%d1Array(i_lnT_00)
      85       209392 :          dlnT_p1 = var%d1Array(i_lnT_p1)
      86       209392 :          dw_m1 = var%d1Array(i_w_m1)
      87       209392 :          dw_00 = var%d1Array(i_w_00)
      88       209392 :          dw_p1 = var%d1Array(i_w_p1)
      89       209392 :          dlnR_m1 = var%d1Array(i_lnR_m1)
      90       209392 :          dlnR_00 = var%d1Array(i_lnR_00)
      91       209392 :          dlnR_p1 = var%d1Array(i_lnR_p1)
      92       209392 :          dv_m1 = var%d1Array(i_v_m1)
      93       209392 :          dv_00 = var%d1Array(i_v_00)
      94       209392 :          dv_p1 = var%d1Array(i_v_p1)
      95       209392 :          dL_m1 = var%d1Array(i_L_m1)
      96       209392 :          dL_00 = var%d1Array(i_L_00)
      97       209392 :          dL_p1 = var%d1Array(i_L_p1)
      98       209392 :          dHp_m1 = var%d1Array(i_Hp_m1)
      99       209392 :          dHp_00 = var%d1Array(i_Hp_00)
     100       209392 :          dHp_p1 = var%d1Array(i_Hp_p1)
     101       209392 :          dw_div_wc_m1 = var%d1Array(i_w_div_wc_m1)
     102       209392 :          dw_div_wc_00 = var%d1Array(i_w_div_wc_00)
     103       209392 :          dw_div_wc_p1 = var%d1Array(i_w_div_wc_p1)
     104       209392 :          djrot_m1 = var%d1Array(i_jrot_m1)
     105       209392 :          djrot_00 = var%d1Array(i_jrot_00)
     106       209392 :          djrot_p1 = var%d1Array(i_jrot_p1)
     107       209392 :          dxtra1_m1 = var%d1Array(i_xtra1_m1)
     108       209392 :          dxtra1_00 = var%d1Array(i_xtra1_00)
     109       209392 :          dxtra1_p1 = var%d1Array(i_xtra1_p1)
     110       209392 :          dxtra2_m1 = var%d1Array(i_xtra2_m1)
     111       209392 :          dxtra2_00 = var%d1Array(i_xtra2_00)
     112       209392 :          dxtra2_p1 = var%d1Array(i_xtra2_p1)
     113       209392 :       end subroutine unwrap
     114              : 
     115          176 :       subroutine wrap(var, val, &
     116              :             dlnd_m1, dlnd_00, dlnd_p1, &
     117              :             dlnT_m1, dlnT_00, dlnT_p1, &
     118              :             dw_m1, dw_00, dw_p1, &
     119              :             dlnR_m1, dlnR_00, dlnR_p1, &
     120              :             dv_m1, dv_00, dv_p1, &
     121              :             dL_m1, dL_00, dL_p1, &
     122              :             dHp_m1, dHp_00, dHp_p1, &
     123              :             dw_div_wc_m1, dw_div_wc_00, dw_div_wc_p1, &
     124              :             djrot_m1, djrot_00, djrot_p1, &
     125              :             dxtra1_m1, dxtra1_00, dxtra1_p1, &
     126              :             dxtra2_m1, dxtra2_00, dxtra2_p1)
     127              :          type(auto_diff_real_star_order1), intent(out) :: var
     128              :          real(dp), intent(in) :: &
     129              :             val, dlnd_m1, dlnd_00, dlnd_p1, dlnT_m1, dlnT_00, dlnT_p1, &
     130              :             dw_m1, dw_00, dw_p1, dlnR_m1, dlnR_00, dlnR_p1, &
     131              :             dv_m1, dv_00, dv_p1, dL_m1, dL_00, dL_p1, &
     132              :             dHp_m1, dHp_00, dHp_p1, &
     133              :             dw_div_wc_m1, dw_div_wc_00, dw_div_wc_p1, &
     134              :             djrot_m1, djrot_00, djrot_p1, &
     135              :             dxtra1_m1, dxtra1_00, dxtra1_p1, &
     136              :             dxtra2_m1, dxtra2_00, dxtra2_p1
     137          176 :          var%val = val
     138          176 :          var%d1Array(i_lnd_m1) = dlnd_m1
     139          176 :          var%d1Array(i_lnd_00) = dlnd_00
     140          176 :          var%d1Array(i_lnd_p1) = dlnd_p1
     141          176 :          var%d1Array(i_lnT_m1) = dlnT_m1
     142          176 :          var%d1Array(i_lnT_00) = dlnT_00
     143          176 :          var%d1Array(i_lnT_p1) = dlnT_p1
     144          176 :          var%d1Array(i_w_m1) = dw_m1
     145          176 :          var%d1Array(i_w_00) = dw_00
     146          176 :          var%d1Array(i_w_p1) = dw_p1
     147          176 :          var%d1Array(i_lnR_m1) = dlnR_m1
     148          176 :          var%d1Array(i_lnR_00) = dlnR_00
     149          176 :          var%d1Array(i_lnR_p1) = dlnR_p1
     150          176 :          var%d1Array(i_v_m1) = dv_m1
     151          176 :          var%d1Array(i_v_00) = dv_00
     152          176 :          var%d1Array(i_v_p1) = dv_p1
     153          176 :          var%d1Array(i_L_m1) = dL_m1
     154          176 :          var%d1Array(i_L_00) = dL_00
     155          176 :          var%d1Array(i_L_p1) = dL_p1
     156          176 :          var%d1Array(i_Hp_m1) = dHp_m1
     157          176 :          var%d1Array(i_Hp_00) = dHp_00
     158          176 :          var%d1Array(i_Hp_p1) = dHp_p1
     159          176 :          var%d1Array(i_w_div_wc_m1) = dw_div_wc_m1
     160          176 :          var%d1Array(i_w_div_wc_00) = dw_div_wc_00
     161          176 :          var%d1Array(i_w_div_wc_p1) = dw_div_wc_p1
     162          176 :          var%d1Array(i_jrot_m1) = djrot_m1
     163          176 :          var%d1Array(i_jrot_00) = djrot_00
     164          176 :          var%d1Array(i_jrot_p1) = djrot_p1
     165          176 :          var%d1Array(i_xtra1_m1) = dxtra1_m1
     166          176 :          var%d1Array(i_xtra1_00) = dxtra1_00
     167          176 :          var%d1Array(i_xtra1_p1) = dxtra1_p1
     168          176 :          var%d1Array(i_xtra2_m1) = dxtra2_m1
     169          176 :          var%d1Array(i_xtra2_00) = dxtra2_00
     170          176 :          var%d1Array(i_xtra2_p1) = dxtra2_p1
     171          176 :       end subroutine wrap
     172              : 
     173              : 
     174              :       ! The following routines turn regular star variables into auto_diff_real_star_order1 variables.
     175              :       ! For independent variables this is a straightforward wrapping. For dependent variables like eos and kap
     176              :       ! outputs we also pull in information about their partials from the relevant module.
     177              : 
     178              :       !----------------------------------------------------------------------------------------------------
     179              :       !
     180              :       ! We begin with quantities defined on cells (T, rho, e_turb, kap, pressure, energy, entropy).
     181              :       ! We need these on cells k-1, k and k+1.
     182              :       !
     183              :       !----------------------------------------------------------------------------------------------------
     184              : 
     185              : 
     186       212160 :       function wrap_T_m1(s, k) result(T_m1)
     187              :          type (star_info), pointer :: s
     188              :          type(auto_diff_real_star_order1) :: T_m1
     189              :          integer, intent(in) :: k
     190       212160 :          T_m1 = 0d0
     191       212160 :          if (k > 1) then
     192       212160 :             T_m1 % val = s%T(k-1)
     193       212160 :             T_m1 % d1Array(i_lnT_m1) = s%T(k-1)
     194              :          end if
     195       212160 :       end function wrap_T_m1
     196              : 
     197       212292 :       function wrap_T_00(s, k) result(T_00)
     198              :          type (star_info), pointer :: s
     199              :          type(auto_diff_real_star_order1) :: T_00
     200              :          integer, intent(in) :: k
     201       212292 :          T_00 = 0d0
     202       212292 :          T_00 % val = s%T(k)
     203       212292 :          T_00 % d1Array(i_lnT_00) = s%T(k)
     204       212292 :       end function wrap_T_00
     205              : 
     206            0 :       function wrap_T_p1(s, k) result(T_p1)
     207              :          type (star_info), pointer :: s
     208              :          type(auto_diff_real_star_order1) :: T_p1
     209              :          integer, intent(in) :: k
     210            0 :          T_p1 = 0d0
     211            0 :          if (k < s%nz) then
     212            0 :             T_p1 % val = s%T(k+1)
     213            0 :             T_p1 % d1Array(i_lnT_p1) = s%T(k+1)
     214              :          end if
     215            0 :       end function wrap_T_p1
     216              : 
     217            0 :       function wrap_lnT_m1(s, k) result(lnT_m1)
     218              :          type (star_info), pointer :: s
     219              :          type(auto_diff_real_star_order1) :: lnT_m1
     220              :          integer, intent(in) :: k
     221            0 :          lnT_m1 = 0d0
     222            0 :          if (k > 1) then
     223            0 :             lnT_m1 % val = s%lnT(k-1)
     224            0 :             lnT_m1 % d1Array(i_lnT_m1) = 1d0
     225              :          end if
     226            0 :       end function wrap_lnT_m1
     227              : 
     228           44 :       function wrap_lnT_00(s, k) result(lnT_00)
     229              :          type (star_info), pointer :: s
     230              :          type(auto_diff_real_star_order1) :: lnT_00
     231              :          integer, intent(in) :: k
     232           44 :          lnT_00 = 0d0
     233           44 :          lnT_00 % val = s%lnT(k)
     234           44 :          lnT_00 % d1Array(i_lnT_00) = 1d0
     235           44 :       end function wrap_lnT_00
     236              : 
     237            0 :       function wrap_lnT_p1(s, k) result(lnT_p1)
     238              :          type (star_info), pointer :: s
     239              :          type(auto_diff_real_star_order1) :: lnT_p1
     240              :          integer, intent(in) :: k
     241            0 :          lnT_p1 = 0d0
     242            0 :          if (k < s%nz) then
     243            0 :             lnT_p1 % val = s%lnT(k+1)
     244            0 :             lnT_p1 % d1Array(i_lnT_p1) = 1d0
     245              :          end if
     246            0 :       end function wrap_lnT_p1
     247              : 
     248            0 :       function wrap_dxh_lnT(s, k) result(dxh_lnT)
     249              :          type (star_info), pointer :: s
     250              :          type(auto_diff_real_star_order1) :: dxh_lnT
     251              :          integer, intent(in) :: k
     252            0 :          dxh_lnT = 0d0
     253            0 :          dxh_lnT % val = s%dxh_lnT(k)
     254            0 :          dxh_lnT % d1Array(i_lnT_00) = 1d0
     255            0 :       end function wrap_dxh_lnT
     256              : 
     257       239784 :       function wrap_d_m1(s, k) result(d_m1)
     258              :          type (star_info), pointer :: s
     259              :          type(auto_diff_real_star_order1) :: d_m1
     260              :          integer, intent(in) :: k
     261       239784 :          d_m1 = 0d0
     262       239784 :          if (k > 1) then
     263       239784 :             d_m1 % val = s%rho(k-1)
     264       239784 :             d_m1 % d1Array(i_lnd_m1) = s%rho(k-1)
     265              :          end if
     266       239784 :       end function wrap_d_m1
     267              : 
     268       292330 :       function wrap_d_00(s, k) result(d_00)
     269              :          type (star_info), pointer :: s
     270              :          type(auto_diff_real_star_order1) :: d_00
     271              :          integer, intent(in) :: k
     272       292330 :          d_00 = 0d0
     273       292330 :          d_00 % val = s%rho(k)
     274       292330 :          d_00 % d1Array(i_lnd_00) = s%rho(k)
     275       292330 :       end function wrap_d_00
     276              : 
     277            0 :       function wrap_d_p1(s, k) result(d_p1)
     278              :          type (star_info), pointer :: s
     279              :          type(auto_diff_real_star_order1) :: d_p1
     280              :          integer, intent(in) :: k
     281            0 :          d_p1 = 0d0
     282            0 :          if (k < s%nz) then
     283            0 :             d_p1 % val = s%rho(k+1)
     284            0 :             d_p1 % d1Array(i_lnd_p1) = s%rho(k+1)
     285              :          end if
     286            0 :       end function wrap_d_p1
     287              : 
     288            0 :       function wrap_lnd_m1(s, k) result(lnd_m1)
     289              :          type (star_info), pointer :: s
     290              :          type(auto_diff_real_star_order1) :: lnd_m1
     291              :          integer, intent(in) :: k
     292            0 :          lnd_m1 = 0d0
     293            0 :          if (k > 1) then
     294            0 :             lnd_m1 % val = s%lnd(k-1)
     295            0 :             lnd_m1 % d1Array(i_lnd_m1) = 1d0
     296              :          end if
     297            0 :       end function wrap_lnd_m1
     298              : 
     299            0 :       function wrap_lnd_00(s, k) result(lnd_00)
     300              :          type (star_info), pointer :: s
     301              :          type(auto_diff_real_star_order1) :: lnd_00
     302              :          integer, intent(in) :: k
     303            0 :          lnd_00 = 0d0
     304            0 :          lnd_00 % val = s%lnd(k)
     305            0 :          lnd_00 % d1Array(i_lnd_00) = 1d0
     306            0 :       end function wrap_lnd_00
     307              : 
     308            0 :       function wrap_lnd_p1(s, k) result(lnd_p1)
     309              :          type (star_info), pointer :: s
     310              :          type(auto_diff_real_star_order1) :: lnd_p1
     311              :          integer, intent(in) :: k
     312            0 :          lnd_p1 = 0d0
     313            0 :          if (k < s%nz) then
     314            0 :             lnd_p1 % val = s%lnd(k+1)
     315            0 :             lnd_p1 % d1Array(i_lnd_p1) = 1d0
     316              :          end if
     317            0 :       end function wrap_lnd_p1
     318              : 
     319            0 :       function wrap_dxh_lnd(s, k) result(dxh_lnd)
     320              :          type (star_info), pointer :: s
     321              :          type(auto_diff_real_star_order1) :: dxh_lnd
     322              :          integer, intent(in) :: k
     323            0 :          dxh_lnd = 0d0
     324            0 :          dxh_lnd % val = s%dxh_lnd(k)
     325            0 :          dxh_lnd % d1Array(i_lnd_00) = 1d0
     326            0 :       end function wrap_dxh_lnd
     327              : 
     328            0 :       function wrap_w_m1(s, k) result(w_m1)
     329              :          type (star_info), pointer :: s
     330              :          type(auto_diff_real_star_order1) :: w_m1
     331              :          integer, intent(in) :: k
     332            0 :          w_m1 = 0d0
     333            0 :          if (k > 1) then
     334            0 :             w_m1 % val = s%w(k-1)
     335            0 :             w_m1 % d1Array(i_w_m1) = 1d0
     336              :          end if
     337            0 :       end function wrap_w_m1
     338              : 
     339            0 :       function wrap_w_00(s, k) result(w_00)
     340              :          type (star_info), pointer :: s
     341              :          type(auto_diff_real_star_order1) :: w_00
     342              :          integer, intent(in) :: k
     343            0 :          w_00 = 0d0
     344            0 :          w_00 % val = s%w(k)
     345            0 :          w_00 % d1Array(i_w_00) = 1d0
     346            0 :       end function wrap_w_00
     347              : 
     348            0 :       function wrap_w_p1(s, k) result(w_p1)
     349              :          type (star_info), pointer :: s
     350              :          type(auto_diff_real_star_order1) :: w_p1
     351              :          integer, intent(in) :: k
     352            0 :          w_p1 = 0d0
     353            0 :          if (k < s%nz) then
     354            0 :             w_p1 % val = s%w(k+1)
     355            0 :             w_p1 % d1Array(i_w_p1) = 1d0
     356              :          end if
     357            0 :       end function wrap_w_p1
     358              : 
     359            0 :       real(dp) function get_etrb(s,k)
     360              :          type (star_info), pointer :: s
     361              :          integer, intent(in) :: k
     362            0 :          get_etrb = pow2(s% w(k))
     363            0 :       end function get_etrb
     364              : 
     365            0 :       real(dp) function get_etrb_start(s,k)
     366              :          type (star_info), pointer :: s
     367              :          integer, intent(in) :: k
     368            0 :          get_etrb_start = pow2(s% w_start(k))
     369            0 :       end function get_etrb_start
     370              : 
     371            0 :       real(dp) function get_RSP2_conv_velocity(s,k) result (cv)  ! at face k
     372              :          type (star_info), pointer :: s
     373              :          integer, intent(in) :: k
     374            0 :          real(dp) :: alfa, beta
     375            0 :          if (k == 1) then
     376              :             cv = 0d0
     377              :          else
     378            0 :             alfa = s% dq(k-1)/(s% dq(k-1) + s% dq(k))
     379            0 :             beta = 1d0 - alfa
     380            0 :             cv = sqrt_2_div_3*(alfa*s% w(k) + beta*s% w(k-1))
     381              :          end if
     382            0 :       end function get_RSP2_conv_velocity
     383              : 
     384            0 :       real(dp) function get_w(s,k)
     385              :          type (star_info), pointer :: s
     386              :          integer, intent(in) :: k
     387            0 :          get_w = s% w(k)
     388            0 :       end function get_w
     389              : 
     390            0 :       real(dp) function get_w_start(s,k)
     391              :          type (star_info), pointer :: s
     392              :          integer, intent(in) :: k
     393            0 :          get_w_start = s% w_start(k)
     394            0 :       end function get_w_start
     395              : 
     396            0 :       function wrap_etrb_m1(s, k) result(etrb_m1)
     397              :          type (star_info), pointer :: s
     398              :          type(auto_diff_real_star_order1) :: etrb_m1
     399              :          integer, intent(in) :: k
     400            0 :          etrb_m1 = pow2(wrap_w_m1(s,k))
     401            0 :       end function wrap_etrb_m1
     402              : 
     403            0 :       function wrap_etrb_00(s, k) result(etrb_00)
     404              :          type (star_info), pointer :: s
     405              :          type(auto_diff_real_star_order1) :: etrb_00
     406              :          integer, intent(in) :: k
     407            0 :          etrb_00 = pow2(wrap_w_00(s,k))
     408            0 :       end function wrap_etrb_00
     409              : 
     410            0 :       function wrap_etrb_p1(s, k) result(etrb_p1)
     411              :          type (star_info), pointer :: s
     412              :          type(auto_diff_real_star_order1) :: etrb_p1
     413              :          integer, intent(in) :: k
     414            0 :          etrb_p1 = pow2(wrap_w_p1(s,k))
     415            0 :       end function wrap_etrb_p1
     416              : 
     417       159856 :       function wrap_kap_m1(s, k) result(kap_m1)
     418              :          type (star_info), pointer :: s
     419              :          type(auto_diff_real_star_order1) :: kap_m1
     420              :          integer, intent(in) :: k
     421       159856 :          kap_m1 = 0d0
     422       159856 :          if (k > 1) then
     423       159856 :             kap_m1 % val = s%opacity(k-1)
     424       159856 :             kap_m1 % d1Array(i_lnd_m1) = s%d_opacity_dlnd(k-1)
     425       159856 :             kap_m1 % d1Array(i_lnT_m1) = s%d_opacity_dlnT(k-1)
     426              :          end if
     427       159856 :       end function wrap_kap_m1
     428              : 
     429       159988 :       function wrap_kap_00(s, k) result(kap_00)
     430              :          type (star_info), pointer :: s
     431              :          type(auto_diff_real_star_order1) :: kap_00
     432              :          integer, intent(in) :: k
     433       159988 :          kap_00 = 0d0
     434       159988 :          kap_00 % val = s%opacity(k)
     435       159988 :          kap_00 % d1Array(i_lnd_00) = s%d_opacity_dlnd(k)
     436       159988 :          kap_00 % d1Array(i_lnT_00) = s%d_opacity_dlnT(k)
     437       159988 :       end function wrap_kap_00
     438              : 
     439            0 :       function wrap_kap_p1(s, k) result(kap_p1)
     440              :          type (star_info), pointer :: s
     441              :          type(auto_diff_real_star_order1) :: kap_p1
     442              :          integer, intent(in) :: k
     443            0 :          kap_p1 = 0d0
     444            0 :          if (k < s%nz) then
     445            0 :             kap_p1 % val = s%opacity(k+1)
     446            0 :             kap_p1 % d1Array(i_lnd_p1) = s%d_opacity_dlnd(k+1)/s% rho(k+1)
     447            0 :             kap_p1 % d1Array(i_lnT_p1) = s%d_opacity_dlnT(k+1)
     448              :          end if
     449            0 :       end function wrap_kap_p1
     450              : 
     451            0 :       function wrap_s_m1(s, k) result(s_m1)
     452              :          type (star_info), pointer :: s
     453              :          type(auto_diff_real_star_order1) :: s_m1
     454              :          integer, intent(in) :: k
     455            0 :          s_m1 = 0d0
     456            0 :          if (k > 1) then
     457            0 :             s_m1%val = s% entropy(k-1)
     458            0 :             s_m1%d1Array(i_lnd_m1) = s% dS_dRho_for_partials(k-1)*s% rho(k-1)
     459            0 :             s_m1%d1Array(i_lnT_m1) = s% dS_dT_for_partials(k-1)*s% T(k-1)
     460              :          end if
     461            0 :       end function wrap_s_m1
     462              : 
     463            0 :       function wrap_s_00(s, k) result(s_00)
     464              :          type (star_info), pointer :: s
     465              :          type(auto_diff_real_star_order1) :: s_00
     466              :          integer, intent(in) :: k
     467            0 :          s_00 = 0d0
     468            0 :          s_00%val = s% entropy(k)
     469            0 :          s_00%d1Array(i_lnd_00) = s% dS_dRho_for_partials(k)*s% rho(k)
     470            0 :          s_00%d1Array(i_lnT_00) = s% dS_dT_for_partials(k)*s% T(k)
     471            0 :       end function wrap_s_00
     472              : 
     473            0 :       function wrap_s_p1(s, k) result(s_p1)
     474              :          type (star_info), pointer :: s
     475              :          type(auto_diff_real_star_order1) :: s_p1
     476              :          integer, intent(in) :: k
     477            0 :          s_p1 = 0d0
     478            0 :          if (k < s%nz) then
     479            0 :             s_p1%val = s% entropy(k+1)
     480            0 :             s_p1%d1Array(i_lnd_p1) = s% dS_dRho_for_partials(k+1)*s% rho(k+1)
     481            0 :             s_p1%d1Array(i_lnT_p1) = s% dS_dT_for_partials(k+1)*s% T(k+1)
     482              :          end if
     483            0 :       end function wrap_s_p1
     484              : 
     485            0 :       function wrap_e_m1(s, k) result(e_m1)
     486              :          type (star_info), pointer :: s
     487              :          type(auto_diff_real_star_order1) :: e_m1
     488              :          integer, intent(in) :: k
     489            0 :          e_m1 = 0d0
     490            0 :          if (k > 1) then
     491            0 :             e_m1%val = s% energy(k-1)
     492            0 :             e_m1%d1Array(i_lnd_m1) = s% dE_dRho_for_partials(k-1)*s% rho(k-1)
     493            0 :             e_m1%d1Array(i_lnT_m1) = s% Cv_for_partials(k-1)*s% T(k-1)
     494              :          end if
     495            0 :       end function wrap_e_m1
     496              : 
     497            0 :       function wrap_e_00(s, k) result(e_00)
     498              :          type (star_info), pointer :: s
     499              :          type(auto_diff_real_star_order1) :: e_00
     500              :          integer, intent(in) :: k
     501            0 :          e_00 = 0d0
     502            0 :          e_00%val = s% energy(k)
     503            0 :          e_00%d1Array(i_lnd_00) = s% dE_dRho_for_partials(k)*s% rho(k)
     504            0 :          e_00%d1Array(i_lnT_00) = s% Cv_for_partials(k)*s% T(k)
     505            0 :       end function wrap_e_00
     506              : 
     507            0 :       function wrap_e_p1(s, k) result(e_p1)
     508              :          type (star_info), pointer :: s
     509              :          type(auto_diff_real_star_order1) :: e_p1
     510              :          integer, intent(in) :: k
     511            0 :          e_p1 = 0d0
     512            0 :          if (k < s%nz) then
     513            0 :             e_p1%val = s% energy(k+1)
     514            0 :             e_p1%d1Array(i_lnd_p1) = s% dE_dRho_for_partials(k+1)*s% rho(k+1)
     515            0 :             e_p1%d1Array(i_lnT_p1) = s% Cv_for_partials(k+1)*s% T(k+1)
     516              :          end if
     517            0 :       end function wrap_e_p1
     518              : 
     519       396696 :       function wrap_Peos_m1(s, k) result(Peos_m1)
     520              :          type (star_info), pointer :: s
     521              :          type(auto_diff_real_star_order1) :: Peos_m1
     522              :          integer, intent(in) :: k
     523       396696 :          Peos_m1 = 0d0
     524       396696 :          if (k > 1) then
     525       396696 :             Peos_m1%val = s% Peos(k-1)
     526       396696 :             Peos_m1%d1Array(i_lnd_m1) = s%Peos(k-1) * s% chiRho_for_partials(k-1)
     527       396696 :             Peos_m1%d1Array(i_lnT_m1) = s%Peos(k-1) * s% chiT_for_partials(k-1)
     528              :          end if
     529       396696 :       end function wrap_Peos_m1
     530              : 
     531       501546 :       function wrap_Peos_00(s, k) result(Peos_00)
     532              :          type (star_info), pointer :: s
     533              :          type(auto_diff_real_star_order1) :: Peos_00
     534              :          integer, intent(in) :: k
     535       501546 :          Peos_00 = 0d0
     536       501546 :          Peos_00%val = s% Peos(k)
     537       501546 :          Peos_00%d1Array(i_lnd_00) = s%Peos(k) * s% chiRho_for_partials(k)
     538       501546 :          Peos_00%d1Array(i_lnT_00) = s%Peos(k) * s% chiT_for_partials(k)
     539       501546 :       end function wrap_Peos_00
     540              : 
     541            0 :       function wrap_Peos_p1(s, k) result(Peos_p1)
     542              :          type (star_info), pointer :: s
     543              :          type(auto_diff_real_star_order1) :: Peos_p1
     544              :          integer, intent(in) :: k
     545            0 :          Peos_p1 = 0d0
     546            0 :          if (k < s%nz) then
     547            0 :             Peos_p1%val = s% Peos(k+1)
     548            0 :             Peos_p1%d1Array(i_lnd_p1) = s%Peos(k+1) * s% chiRho_for_partials(k+1)
     549            0 :             Peos_p1%d1Array(i_lnT_p1) = s%Peos(k+1) * s% chiT_for_partials(k+1)
     550              :          end if
     551            0 :       end function wrap_Peos_p1
     552              : 
     553            0 :       function wrap_lnPeos_m1(s, k) result(lnPeos_m1)
     554              :          type (star_info), pointer :: s
     555              :          type(auto_diff_real_star_order1) :: lnPeos_m1
     556              :          integer, intent(in) :: k
     557            0 :          lnPeos_m1 = 0d0
     558            0 :          if (k > 1) then
     559            0 :             lnPeos_m1%val = s% lnPeos(k-1)
     560            0 :             lnPeos_m1%d1Array(i_lnd_m1) = s% chiRho_for_partials(k-1)
     561            0 :             lnPeos_m1%d1Array(i_lnT_m1) = s% chiT_for_partials(k-1)
     562              :          end if
     563            0 :       end function wrap_lnPeos_m1
     564              : 
     565           44 :       function wrap_lnPeos_00(s, k) result(lnPeos_00)
     566              :          type (star_info), pointer :: s
     567              :          type(auto_diff_real_star_order1) :: lnPeos_00
     568              :          integer, intent(in) :: k
     569           44 :          lnPeos_00 = 0d0
     570           44 :          lnPeos_00%val = s% lnPeos(k)
     571           44 :          lnPeos_00%d1Array(i_lnd_00) = s% chiRho_for_partials(k)
     572           44 :          lnPeos_00%d1Array(i_lnT_00) = s% chiT_for_partials(k)
     573           44 :       end function wrap_lnPeos_00
     574              : 
     575            0 :       function wrap_lnPeos_p1(s, k) result(lnPeos_p1)
     576              :          type (star_info), pointer :: s
     577              :          type(auto_diff_real_star_order1) :: lnPeos_p1
     578              :          integer, intent(in) :: k
     579            0 :          lnPeos_p1 = 0d0
     580            0 :          if (k < s%nz) then
     581            0 :             lnPeos_p1%val = s% lnPeos(k+1)
     582            0 :             lnPeos_p1%d1Array(i_lnd_p1) = s% chiRho_for_partials(k+1)
     583            0 :             lnPeos_p1%d1Array(i_lnT_p1) = s% chiT_for_partials(k+1)
     584              :          end if
     585            0 :       end function wrap_lnPeos_p1
     586              : 
     587        79928 :       function wrap_ChiRho_m1(s, k) result(ChiRho_m1)
     588              :          use eos_def, only: i_ChiRho
     589              :          type (star_info), pointer :: s
     590              :          type(auto_diff_real_star_order1) :: ChiRho_m1
     591              :          integer, intent(in) :: k
     592        79928 :          ChiRho_m1 = 0d0
     593        79928 :          if (k > 1) then
     594        79928 :             ChiRho_m1%val = s% ChiRho(k-1)
     595        79928 :             ChiRho_m1%d1Array(i_lnd_m1) = s% d_eos_dlnd(i_ChiRho,k-1)
     596        79928 :             ChiRho_m1%d1Array(i_lnT_m1) = s% d_eos_dlnT(i_ChiRho,k-1)
     597              :          end if
     598        79928 :       end function wrap_ChiRho_m1
     599              : 
     600        79994 :       function wrap_ChiRho_00(s, k) result(ChiRho_00)
     601        79928 :          use eos_def, only: i_ChiRho
     602              :          type (star_info), pointer :: s
     603              :          type(auto_diff_real_star_order1) :: ChiRho_00
     604              :          integer, intent(in) :: k
     605        79994 :          ChiRho_00 = 0d0
     606        79994 :          ChiRho_00%val = s% ChiRho(k)
     607        79994 :          ChiRho_00%d1Array(i_lnd_00) = s% d_eos_dlnd(i_ChiRho,k)
     608        79994 :          ChiRho_00%d1Array(i_lnT_00) = s% d_eos_dlnT(i_ChiRho,k)
     609        79994 :       end function wrap_ChiRho_00
     610              : 
     611            0 :       function wrap_ChiRho_p1(s, k) result(ChiRho_p1)
     612        79994 :          use eos_def, only: i_ChiRho
     613              :          type (star_info), pointer :: s
     614              :          type(auto_diff_real_star_order1) :: ChiRho_p1
     615              :          integer, intent(in) :: k
     616            0 :          ChiRho_p1 = 0d0
     617            0 :          if (k < s% nz) then
     618            0 :             ChiRho_p1%val = s% ChiRho(k+1)
     619            0 :             ChiRho_p1%d1Array(i_lnd_p1) = s% d_eos_dlnd(i_ChiRho,k+1)
     620            0 :             ChiRho_p1%d1Array(i_lnT_p1) = s% d_eos_dlnT(i_ChiRho,k+1)
     621              :          end if
     622            0 :       end function wrap_ChiRho_p1
     623              : 
     624        79928 :       function wrap_ChiT_m1(s, k) result(ChiT_m1)
     625            0 :          use eos_def, only: i_ChiT
     626              :          type (star_info), pointer :: s
     627              :          type(auto_diff_real_star_order1) :: ChiT_m1
     628              :          integer, intent(in) :: k
     629        79928 :          ChiT_m1 = 0d0
     630        79928 :          if (k > 1) then
     631        79928 :             ChiT_m1%val = s% ChiT(k-1)
     632        79928 :             ChiT_m1%d1Array(i_lnd_m1) = s% d_eos_dlnd(i_ChiT,k-1)
     633        79928 :             ChiT_m1%d1Array(i_lnT_m1) = s% d_eos_dlnT(i_ChiT,k-1)
     634              :          end if
     635        79928 :       end function wrap_ChiT_m1
     636              : 
     637        79994 :       function wrap_ChiT_00(s, k) result(ChiT_00)
     638        79928 :          use eos_def, only: i_ChiT
     639              :          type (star_info), pointer :: s
     640              :          type(auto_diff_real_star_order1) :: ChiT_00
     641              :          integer, intent(in) :: k
     642        79994 :          ChiT_00 = 0d0
     643        79994 :          ChiT_00%val = s% ChiT(k)
     644        79994 :          ChiT_00%d1Array(i_lnd_00) = s% d_eos_dlnd(i_ChiT,k)
     645        79994 :          ChiT_00%d1Array(i_lnT_00) = s% d_eos_dlnT(i_ChiT,k)
     646        79994 :       end function wrap_ChiT_00
     647              : 
     648            0 :       function wrap_ChiT_p1(s, k) result(ChiT_p1)
     649        79994 :          use eos_def, only: i_ChiT
     650              :          type (star_info), pointer :: s
     651              :          type(auto_diff_real_star_order1) :: ChiT_p1
     652              :          integer, intent(in) :: k
     653            0 :          ChiT_p1 = 0d0
     654            0 :          if (k < s% nz) then
     655            0 :             ChiT_p1%val = s% ChiT(k+1)
     656            0 :             ChiT_p1%d1Array(i_lnd_p1) = s% d_eos_dlnd(i_ChiT,k+1)
     657            0 :             ChiT_p1%d1Array(i_lnT_p1) = s% d_eos_dlnT(i_ChiT,k+1)
     658              :          end if
     659            0 :       end function wrap_ChiT_p1
     660              : 
     661        79928 :       function wrap_Cp_m1(s, k) result(Cp_m1)
     662            0 :          use eos_def, only: i_Cp
     663              :          type (star_info), pointer :: s
     664              :          type(auto_diff_real_star_order1) :: Cp_m1
     665              :          integer, intent(in) :: k
     666        79928 :          Cp_m1 = 0d0
     667        79928 :          if (k > 1) then
     668        79928 :             Cp_m1%val = s% Cp(k-1)
     669        79928 :             Cp_m1%d1Array(i_lnd_m1) = s% d_eos_dlnd(i_Cp,k-1)
     670        79928 :             Cp_m1%d1Array(i_lnT_m1) = s% d_eos_dlnT(i_Cp,k-1)
     671              :          end if
     672        79928 :       end function wrap_Cp_m1
     673              : 
     674        79994 :       function wrap_Cp_00(s, k) result(Cp_00)
     675        79928 :          use eos_def, only: i_Cp
     676              :          type (star_info), pointer :: s
     677              :          type(auto_diff_real_star_order1) :: Cp_00
     678              :          integer, intent(in) :: k
     679        79994 :          Cp_00 = 0d0
     680        79994 :          Cp_00%val = s% Cp(k)
     681        79994 :          Cp_00%d1Array(i_lnd_00) = s% d_eos_dlnd(i_Cp,k)
     682        79994 :          Cp_00%d1Array(i_lnT_00) = s% d_eos_dlnT(i_Cp,k)
     683        79994 :       end function wrap_Cp_00
     684              : 
     685            0 :       function wrap_Cp_p1(s, k) result(Cp_p1)
     686        79994 :          use eos_def, only: i_Cp
     687              :          type (star_info), pointer :: s
     688              :          type(auto_diff_real_star_order1) :: Cp_p1
     689              :          integer, intent(in) :: k
     690            0 :          Cp_p1 = 0d0
     691            0 :          if (k < s% nz) then
     692            0 :             Cp_p1%val = s% Cp(k+1)
     693            0 :             Cp_p1%d1Array(i_lnd_p1) = s% d_eos_dlnd(i_Cp,k+1)
     694            0 :             Cp_p1%d1Array(i_lnT_p1) = s% d_eos_dlnT(i_Cp,k+1)
     695              :          end if
     696            0 :       end function wrap_Cp_p1
     697              : 
     698        79928 :       function wrap_grad_ad_m1(s, k) result(grad_ad_m1)
     699            0 :          use eos_def, only: i_grad_ad
     700              :          type (star_info), pointer :: s
     701              :          type(auto_diff_real_star_order1) :: grad_ad_m1
     702              :          integer, intent(in) :: k
     703        79928 :          grad_ad_m1 = 0d0
     704        79928 :          if (k > 1) then
     705        79928 :             grad_ad_m1%val = s% grada(k-1)
     706        79928 :             grad_ad_m1%d1Array(i_lnd_m1) = s% d_eos_dlnd(i_grad_ad,k-1)
     707        79928 :             grad_ad_m1%d1Array(i_lnT_m1) = s% d_eos_dlnT(i_grad_ad,k-1)
     708              :          end if
     709        79928 :       end function wrap_grad_ad_m1
     710              : 
     711        79994 :       function wrap_grad_ad_00(s, k) result(grad_ad_00)
     712        79928 :          use eos_def, only: i_grad_ad
     713              :          type (star_info), pointer :: s
     714              :          type(auto_diff_real_star_order1) :: grad_ad_00
     715              :          integer, intent(in) :: k
     716        79994 :          grad_ad_00 = 0d0
     717        79994 :          grad_ad_00%val = s% grada(k)
     718        79994 :          grad_ad_00%d1Array(i_lnd_00) = s% d_eos_dlnd(i_grad_ad,k)
     719        79994 :          grad_ad_00%d1Array(i_lnT_00) = s% d_eos_dlnT(i_grad_ad,k)
     720        79994 :       end function wrap_grad_ad_00
     721              : 
     722            0 :       function wrap_grad_ad_p1(s, k) result(grad_ad_p1)
     723        79994 :          use eos_def, only: i_grad_ad
     724              :          type (star_info), pointer :: s
     725              :          type(auto_diff_real_star_order1) :: grad_ad_p1
     726              :          integer, intent(in) :: k
     727            0 :          grad_ad_p1 = 0d0
     728            0 :          if (k < s% nz) then
     729            0 :             grad_ad_p1%val = s% grada(k+1)
     730            0 :             grad_ad_p1%d1Array(i_lnd_p1) = s% d_eos_dlnd(i_grad_ad,k+1)
     731            0 :             grad_ad_p1%d1Array(i_lnT_p1) = s% d_eos_dlnT(i_grad_ad,k+1)
     732              :          end if
     733            0 :       end function wrap_grad_ad_p1
     734              : 
     735            0 :       function wrap_gamma1_m1(s, k) result(gamma1_m1)
     736            0 :          use eos_def, only: i_gamma1
     737              :          type (star_info), pointer :: s
     738              :          type(auto_diff_real_star_order1) :: gamma1_m1
     739              :          integer, intent(in) :: k
     740            0 :          gamma1_m1 = 0d0
     741            0 :          if (k > 1) then
     742            0 :             gamma1_m1%val = s% gamma1(k-1)
     743            0 :             gamma1_m1%d1Array(i_lnd_m1) = s% d_eos_dlnd(i_gamma1,k-1)
     744            0 :             gamma1_m1%d1Array(i_lnT_m1) = s% d_eos_dlnT(i_gamma1,k-1)
     745              :          end if
     746            0 :       end function wrap_gamma1_m1
     747              : 
     748            0 :       function wrap_gamma1_00(s, k) result(gamma1_00)
     749            0 :          use eos_def, only: i_gamma1
     750              :          type (star_info), pointer :: s
     751              :          type(auto_diff_real_star_order1) :: gamma1_00
     752              :          integer, intent(in) :: k
     753            0 :          gamma1_00 = 0d0
     754            0 :          gamma1_00%val = s% gamma1(k)
     755            0 :          gamma1_00%d1Array(i_lnd_00) = s% d_eos_dlnd(i_gamma1,k)
     756            0 :          gamma1_00%d1Array(i_lnT_00) = s% d_eos_dlnT(i_gamma1,k)
     757            0 :       end function wrap_gamma1_00
     758              : 
     759            0 :       function wrap_gamma1_p1(s, k) result(gamma1_p1)
     760            0 :          use eos_def, only: i_gamma1
     761              :          type (star_info), pointer :: s
     762              :          type(auto_diff_real_star_order1) :: gamma1_p1
     763              :          integer, intent(in) :: k
     764            0 :          gamma1_p1 = 0d0
     765            0 :          if (k < s% nz) then
     766            0 :             gamma1_p1%val = s% gamma1(k+1)
     767            0 :             gamma1_p1%d1Array(i_lnd_p1) = s% d_eos_dlnd(i_gamma1,k+1)
     768            0 :             gamma1_p1%d1Array(i_lnT_p1) = s% d_eos_dlnT(i_gamma1,k+1)
     769              :          end if
     770            0 :       end function wrap_gamma1_p1
     771              : 
     772            0 :       function wrap_latent_ddlnT_m1(s, k) result(latent_ddlnT_m1)
     773            0 :          use eos_def, only: i_latent_ddlnT
     774              :          type (star_info), pointer :: s
     775              :          type(auto_diff_real_star_order1) :: latent_ddlnT_m1
     776              :          integer, intent(in) :: k
     777            0 :          latent_ddlnT_m1 = 0d0
     778            0 :          if (k > 1) then
     779            0 :             latent_ddlnT_m1%val = s% latent_ddlnT(k-1)
     780            0 :             latent_ddlnT_m1%d1Array(i_lnd_m1) = s% d_eos_dlnd(i_latent_ddlnT,k-1)
     781            0 :             latent_ddlnT_m1%d1Array(i_lnT_m1) = s% d_eos_dlnT(i_latent_ddlnT,k-1)
     782              :          end if
     783            0 :       end function wrap_latent_ddlnT_m1
     784              : 
     785            0 :       function wrap_latent_ddlnT_00(s, k) result(latent_ddlnT_00)
     786            0 :          use eos_def, only: i_latent_ddlnT
     787              :          type (star_info), pointer :: s
     788              :          type(auto_diff_real_star_order1) :: latent_ddlnT_00
     789              :          integer, intent(in) :: k
     790            0 :          latent_ddlnT_00 = 0d0
     791            0 :          latent_ddlnT_00%val = s% latent_ddlnT(k)
     792            0 :          latent_ddlnT_00%d1Array(i_lnd_00) = s% d_eos_dlnd(i_latent_ddlnT,k)
     793            0 :          latent_ddlnT_00%d1Array(i_lnT_00) = s% d_eos_dlnT(i_latent_ddlnT,k)
     794            0 :       end function wrap_latent_ddlnT_00
     795              : 
     796            0 :       function wrap_latent_ddlnT_p1(s, k) result(latent_ddlnT_p1)
     797            0 :          use eos_def, only: i_latent_ddlnT
     798              :          type (star_info), pointer :: s
     799              :          type(auto_diff_real_star_order1) :: latent_ddlnT_p1
     800              :          integer, intent(in) :: k
     801            0 :          latent_ddlnT_p1 = 0d0
     802            0 :          if (k < s% nz) then
     803            0 :             latent_ddlnT_p1%val = s% latent_ddlnT(k+1)
     804            0 :             latent_ddlnT_p1%d1Array(i_lnd_p1) = s% d_eos_dlnd(i_latent_ddlnT,k+1)
     805            0 :             latent_ddlnT_p1%d1Array(i_lnT_p1) = s% d_eos_dlnT(i_latent_ddlnT,k+1)
     806              :          end if
     807            0 :       end function wrap_latent_ddlnT_p1
     808              : 
     809            0 :       function wrap_latent_ddlnRho_m1(s, k) result(latent_ddlnRho_m1)
     810            0 :          use eos_def, only: i_latent_ddlnRho
     811              :          type (star_info), pointer :: s
     812              :          type(auto_diff_real_star_order1) :: latent_ddlnRho_m1
     813              :          integer, intent(in) :: k
     814            0 :          latent_ddlnRho_m1 = 0d0
     815            0 :          if (k > 1) then
     816            0 :             latent_ddlnRho_m1%val = s% latent_ddlnRho(k-1)
     817            0 :             latent_ddlnRho_m1%d1Array(i_lnd_m1) = s% d_eos_dlnd(i_latent_ddlnRho,k-1)
     818            0 :             latent_ddlnRho_m1%d1Array(i_lnT_m1) = s% d_eos_dlnT(i_latent_ddlnRho,k-1)
     819              :          end if
     820            0 :       end function wrap_latent_ddlnRho_m1
     821              : 
     822            0 :       function wrap_latent_ddlnRho_00(s, k) result(latent_ddlnRho_00)
     823            0 :          use eos_def, only: i_latent_ddlnRho
     824              :          type (star_info), pointer :: s
     825              :          type(auto_diff_real_star_order1) :: latent_ddlnRho_00
     826              :          integer, intent(in) :: k
     827            0 :          latent_ddlnRho_00 = 0d0
     828            0 :          latent_ddlnRho_00%val = s% latent_ddlnRho(k)
     829            0 :          latent_ddlnRho_00%d1Array(i_lnd_00) = s% d_eos_dlnd(i_latent_ddlnRho,k)
     830            0 :          latent_ddlnRho_00%d1Array(i_lnT_00) = s% d_eos_dlnT(i_latent_ddlnRho,k)
     831            0 :       end function wrap_latent_ddlnRho_00
     832              : 
     833            0 :       function wrap_latent_ddlnRho_p1(s, k) result(latent_ddlnRho_p1)
     834            0 :          use eos_def, only: i_latent_ddlnRho
     835              :          type (star_info), pointer :: s
     836              :          type(auto_diff_real_star_order1) :: latent_ddlnRho_p1
     837              :          integer, intent(in) :: k
     838            0 :          latent_ddlnRho_p1 = 0d0
     839            0 :          if (k < s% nz) then
     840            0 :             latent_ddlnRho_p1%val = s% latent_ddlnRho(k+1)
     841            0 :             latent_ddlnRho_p1%d1Array(i_lnd_p1) = s% d_eos_dlnd(i_latent_ddlnRho,k+1)
     842            0 :             latent_ddlnRho_p1%d1Array(i_lnT_p1) = s% d_eos_dlnT(i_latent_ddlnRho,k+1)
     843              :          end if
     844            0 :       end function wrap_latent_ddlnRho_p1
     845              : 
     846            0 :       function wrap_L_m1(s, k) result(L_m1)
     847              :          type (star_info), pointer :: s
     848              :          type(auto_diff_real_star_order1) :: L_m1
     849              :          integer, intent(in) :: k
     850            0 :          L_m1 = 0d0
     851            0 :          if (k > 1) then
     852            0 :             L_m1 % val = s%L(k-1)
     853            0 :             L_m1 % d1Array(i_L_m1) = 1d0
     854              :          end if
     855            0 :       end function wrap_L_m1
     856              : 
     857       212336 :       function wrap_L_00(s, k) result(L_00)
     858              :          type (star_info), pointer :: s
     859              :          type(auto_diff_real_star_order1) :: L_00
     860              :          integer, intent(in) :: k
     861       212336 :          L_00 = 0d0
     862       212336 :          L_00 % val = s%L(k)
     863       212336 :          L_00 % d1Array(i_L_00) = 1d0
     864       212336 :       end function wrap_L_00
     865              : 
     866        52348 :       function wrap_L_p1(s, k) result(L_p1)
     867              :          type (star_info), pointer :: s
     868              :          type(auto_diff_real_star_order1) :: L_p1
     869              :          integer, intent(in) :: k
     870        52348 :          L_p1 = 0d0
     871        52348 :          if (k < s%nz) then
     872        52304 :             L_p1 % val = s%L(k+1)
     873        52304 :             L_p1 % d1Array(i_L_p1) = 1d0
     874              :          else
     875           44 :             L_p1 %val = s%L_center
     876              :             ! L_center is a constant
     877              :          end if
     878        52348 :       end function wrap_L_p1
     879              : 
     880            0 :       function wrap_r_m1(s, k) result(r_m1)
     881              :          type (star_info), pointer :: s
     882              :          type(auto_diff_real_star_order1) :: r_m1
     883              :          integer, intent(in) :: k
     884            0 :          r_m1 = 0d0
     885            0 :          if (k > 1) then
     886            0 :             r_m1 % val = s%r(k-1)
     887            0 :             r_m1 % d1Array(i_lnR_m1) = s%r(k-1)
     888              :          end if
     889            0 :       end function wrap_r_m1
     890              : 
     891       369248 :       function wrap_r_00(s, k) result(r_00)
     892              :          type (star_info), pointer :: s
     893              :          type(auto_diff_real_star_order1) :: r_00
     894              :          integer, intent(in) :: k
     895       369248 :          r_00 = 0d0
     896       369248 :          r_00 % val = s%r(k)
     897       369248 :          r_00 % d1Array(i_lnR_00) = s%r(k)
     898       369248 :       end function wrap_r_00
     899              : 
     900        52348 :       function wrap_r_p1(s, k) result(r_p1)
     901              :          type (star_info), pointer :: s
     902              :          type(auto_diff_real_star_order1) :: r_p1
     903              :          integer, intent(in) :: k
     904        52348 :          r_p1 = 0d0
     905        52348 :          if (k < s%nz) then
     906        52304 :             r_p1 % val = s%r(k+1)
     907        52304 :             r_p1 % d1Array(i_lnR_p1) = s%r(k+1)
     908              :          else
     909           44 :             r_p1 % val = s%r_center
     910              :          end if
     911        52348 :       end function wrap_r_p1
     912              : 
     913            0 :       function wrap_lnR_m1(s, k) result(lnR_m1)
     914              :          type (star_info), pointer :: s
     915              :          type(auto_diff_real_star_order1) :: lnR_m1
     916              :          integer, intent(in) :: k
     917            0 :          lnR_m1 = 0d0
     918            0 :          if (k > 1) then
     919            0 :             lnR_m1 % val = s%lnR(k-1)
     920            0 :             lnR_m1 % d1Array(i_lnR_m1) = 1d0
     921              :          end if
     922            0 :       end function wrap_lnR_m1
     923              : 
     924        52348 :       function wrap_lnR_00(s, k) result(lnR_00)
     925              :          type (star_info), pointer :: s
     926              :          type(auto_diff_real_star_order1) :: lnR_00
     927              :          integer, intent(in) :: k
     928        52348 :          lnR_00 = 0d0
     929        52348 :          lnR_00 % val = s%lnR(k)
     930        52348 :          lnR_00 % d1Array(i_lnR_00) = 1d0
     931        52348 :       end function wrap_lnR_00
     932              : 
     933            0 :       function wrap_lnR_p1(s, k) result(lnR_p1)
     934              :          type (star_info), pointer :: s
     935              :          type(auto_diff_real_star_order1) :: lnR_p1
     936              :          integer, intent(in) :: k
     937            0 :          lnR_p1 = 0d0
     938            0 :          if (k < s%nz) then
     939            0 :             lnR_p1 % val = s%lnR(k+1)
     940            0 :             lnR_p1 % d1Array(i_lnR_p1) = 1d0
     941              :          else
     942            0 :             lnR_p1 % val = log(max(1d0,s%r_center))
     943              :          end if
     944            0 :       end function wrap_lnR_p1
     945              : 
     946            0 :       function wrap_dxh_lnR(s, k) result(dxh_lnR)
     947              :          type (star_info), pointer :: s
     948              :          type(auto_diff_real_star_order1) :: dxh_lnR
     949              :          integer, intent(in) :: k
     950            0 :          dxh_lnR = 0d0
     951            0 :          dxh_lnR % val = s%dxh_lnR(k)
     952            0 :          dxh_lnR % d1Array(i_lnR_00) = 1d0
     953            0 :       end function wrap_dxh_lnR
     954              : 
     955            0 :       function wrap_u_face_m1(s, k) result(v_m1)
     956              :          type (star_info), pointer :: s
     957              :          type(auto_diff_real_star_order1) :: v_m1
     958              :          integer, intent(in) :: k
     959            0 :          v_m1 = 0
     960            0 :          if (k > 1) v_m1 = shift_m1(s% u_face_ad(k-1))
     961            0 :       end function wrap_u_face_m1
     962              : 
     963            0 :       function wrap_u_face_00(s, k) result(v_00)
     964              :          type (star_info), pointer :: s
     965              :          type(auto_diff_real_star_order1) :: v_00
     966              :          integer, intent(in) :: k
     967            0 :          v_00 = s% u_face_ad(k)
     968            0 :       end function wrap_u_face_00
     969              : 
     970            0 :       function wrap_u_face_p1(s, k) result(v_p1)
     971              :          type (star_info), pointer :: s
     972              :          type(auto_diff_real_star_order1) :: v_p1
     973              :          integer, intent(in) :: k
     974            0 :          v_p1 = 0
     975            0 :          if (k < s% nz) v_p1 = shift_p1(s% u_face_ad(k+1))
     976            0 :       end function wrap_u_face_p1
     977              : 
     978            0 :       function wrap_v_m1(s, k) result(v_m1)
     979              :          type (star_info), pointer :: s
     980              :          type(auto_diff_real_star_order1) :: v_m1
     981              :          integer, intent(in) :: k
     982            0 :          if (s% u_flag) then
     983            0 :             v_m1 = wrap_u_face_m1(s,k)
     984            0 :             return
     985              :          end if
     986            0 :          v_m1 = 0d0
     987            0 :          if (k > 1) then
     988            0 :             v_m1 % val = s%v(k-1)
     989            0 :             v_m1 % d1Array(i_v_m1) = 1d0
     990              :          end if
     991            0 :       end function wrap_v_m1
     992              : 
     993            0 :       function wrap_v_00(s, k) result(v_00)
     994              :          type (star_info), pointer :: s
     995              :          type(auto_diff_real_star_order1) :: v_00
     996              :          integer, intent(in) :: k
     997            0 :          if (s% u_flag) then
     998            0 :             v_00 = wrap_u_face_00(s,k)
     999            0 :             return
    1000              :          end if
    1001            0 :          v_00 = 0d0
    1002            0 :          v_00 % val = s%v(k)
    1003            0 :          v_00 % d1Array(i_v_00) = 1d0
    1004            0 :       end function wrap_v_00
    1005              : 
    1006            0 :       function wrap_v_p1(s, k) result(v_p1)
    1007              :          type (star_info), pointer :: s
    1008              :          type(auto_diff_real_star_order1) :: v_p1
    1009              :          integer, intent(in) :: k
    1010            0 :          if (s% u_flag) then
    1011            0 :             v_p1 = wrap_u_face_p1(s,k)
    1012            0 :             return
    1013              :          end if
    1014            0 :          v_p1 = 0d0
    1015            0 :          if (k < s%nz) then
    1016            0 :             v_p1 % val = s%v(k+1)
    1017            0 :             v_p1 % d1Array(i_v_p1) = 1d0
    1018              :          else
    1019            0 :             v_p1 % val = s%v_center
    1020              :             ! v_center is a constant
    1021              :          end if
    1022            0 :       end function wrap_v_p1
    1023              : 
    1024            0 :       function wrap_opt_time_center_r_m1(s, k) result(r_tc)
    1025              :          type (star_info), pointer :: s
    1026              :          integer, intent(in) :: k
    1027              :          type(auto_diff_real_star_order1) :: r_tc
    1028            0 :          r_tc = wrap_r_m1(s,k)
    1029            0 :          if (s% using_velocity_time_centering) then
    1030            0 :             if (k > 1) r_tc = 0.5d0*(r_tc + s% r_start(k-1))
    1031              :          end if
    1032            0 :       end function wrap_opt_time_center_r_m1
    1033              : 
    1034            0 :       function wrap_opt_time_center_r_00(s, k) result(r_tc)
    1035              :          type (star_info), pointer :: s
    1036              :          integer, intent(in) :: k
    1037              :          type(auto_diff_real_star_order1) :: r_tc
    1038            0 :          r_tc = wrap_r_00(s,k)
    1039            0 :          if (s% using_velocity_time_centering) &
    1040            0 :             r_tc = 0.5d0*(r_tc + s% r_start(k))
    1041            0 :       end function wrap_opt_time_center_r_00
    1042              : 
    1043            0 :       function wrap_opt_time_center_r_p1(s, k) result(r_tc)
    1044              :          type (star_info), pointer :: s
    1045              :          integer, intent(in) :: k
    1046              :          type(auto_diff_real_star_order1) :: r_tc
    1047            0 :          r_tc = wrap_r_p1(s,k)
    1048            0 :          if (s% using_velocity_time_centering) then
    1049            0 :             if (k < s% nz) then
    1050            0 :                r_tc = 0.5d0*(r_tc + s% r_start(k+1))
    1051              :             else
    1052            0 :                r_tc = 0.5d0*(r_tc + s% r_center)
    1053              :             end if
    1054              :          end if
    1055            0 :       end function wrap_opt_time_center_r_p1
    1056              : 
    1057            0 :       function wrap_opt_time_center_v_m1(s, k) result(v_tc)
    1058              :          type (star_info), pointer :: s
    1059              :          integer, intent(in) :: k
    1060              :          type(auto_diff_real_star_order1) :: v_tc
    1061            0 :          v_tc = 0
    1062            0 :          if (k == 1) return
    1063            0 :          if (s% v_flag) then
    1064            0 :             v_tc = wrap_v_m1(s,k)
    1065            0 :             if (s% using_velocity_time_centering) &
    1066            0 :                v_tc = 0.5d0*(v_tc + s% v_start(k-1))
    1067            0 :          else if (s% u_flag) then
    1068            0 :             v_tc = wrap_u_face_m1(s,k)
    1069            0 :             if (s% using_velocity_time_centering) &
    1070            0 :                v_tc = 0.5d0*(v_tc + s% u_face_start(k-1))
    1071              :          end if
    1072            0 :       end function wrap_opt_time_center_v_m1
    1073              : 
    1074            0 :       function wrap_opt_time_center_v_00(s, k) result(v_tc)
    1075              :          type (star_info), pointer :: s
    1076              :          integer, intent(in) :: k
    1077              :          type(auto_diff_real_star_order1) :: v_tc
    1078            0 :          v_tc = 0
    1079            0 :          if (s% v_flag) then
    1080            0 :             v_tc = wrap_v_00(s,k)
    1081            0 :             if (s% using_velocity_time_centering) &
    1082            0 :                v_tc = 0.5d0*(v_tc + s% v_start(k))
    1083            0 :          else if (s% u_flag) then
    1084            0 :             v_tc = wrap_u_face_00(s,k)
    1085            0 :             if (s% using_velocity_time_centering) &
    1086            0 :                v_tc = 0.5d0*(v_tc + s% u_face_start(k))
    1087              :          end if
    1088            0 :       end function wrap_opt_time_center_v_00
    1089              : 
    1090            0 :       function wrap_opt_time_center_v_p1(s, k) result(v_tc)
    1091              :          type (star_info), pointer :: s
    1092              :          integer, intent(in) :: k
    1093              :          type(auto_diff_real_star_order1) :: v_tc
    1094            0 :          v_tc = 0
    1095            0 :          if (k == s% nz) return
    1096            0 :          if (s% v_flag) then
    1097            0 :             v_tc = wrap_v_p1(s,k)
    1098            0 :             if (s% using_velocity_time_centering) &
    1099            0 :                v_tc = 0.5d0*(v_tc + s% v_start(k+1))
    1100            0 :          else if (s% u_flag) then
    1101            0 :             v_tc = wrap_u_face_p1(s,k)
    1102            0 :             if (s% using_velocity_time_centering) &
    1103            0 :                v_tc = 0.5d0*(v_tc + s% u_face_start(k+1))
    1104              :          end if
    1105            0 :       end function wrap_opt_time_center_v_p1
    1106              : 
    1107            0 :       function wrap_u_m1(s, k) result(v_m1)
    1108              :          type (star_info), pointer :: s
    1109              :          type(auto_diff_real_star_order1) :: v_m1
    1110              :          integer, intent(in) :: k
    1111            0 :          v_m1 = 0d0
    1112            0 :          if (k > 1) then
    1113            0 :             v_m1 % val = s%u(k-1)
    1114            0 :             v_m1 % d1Array(i_v_m1) = 1d0
    1115              :          end if
    1116            0 :       end function wrap_u_m1
    1117              : 
    1118            0 :       function wrap_u_00(s, k) result(v_00)
    1119              :          type (star_info), pointer :: s
    1120              :          type(auto_diff_real_star_order1) :: v_00
    1121              :          integer, intent(in) :: k
    1122            0 :          v_00 = 0d0
    1123            0 :          v_00 % val = s%u(k)
    1124            0 :          v_00 % d1Array(i_v_00) = 1d0
    1125            0 :       end function wrap_u_00
    1126              : 
    1127            0 :       function wrap_u_p1(s, k) result(v_p1)
    1128              :          type (star_info), pointer :: s
    1129              :          type(auto_diff_real_star_order1) :: v_p1
    1130              :          integer, intent(in) :: k
    1131            0 :          v_p1 = 0d0
    1132            0 :          if (k < s%nz) then
    1133            0 :             v_p1 % val = s%u(k+1)
    1134            0 :             v_p1 % d1Array(i_v_p1) = 1d0
    1135              :          else
    1136            0 :             v_p1 % val = 0d0
    1137              :             ! v_center is a constant
    1138              :          end if
    1139            0 :       end function wrap_u_p1
    1140              : 
    1141            0 :       function wrap_Hp_m1(s, k) result(Hp_m1)
    1142              :          type (star_info), pointer :: s
    1143              :          type(auto_diff_real_star_order1) :: Hp_m1
    1144              :          integer, intent(in) :: k
    1145            0 :          Hp_m1 = 0d0
    1146            0 :          if (k > 1) then
    1147            0 :             Hp_m1 % val = s%Hp_face(k-1)
    1148            0 :             Hp_m1 % d1Array(i_Hp_m1) = 1d0
    1149              :          end if
    1150            0 :       end function wrap_Hp_m1
    1151              : 
    1152            0 :       function wrap_Hp_00(s, k) result(Hp_00)
    1153              :          type (star_info), pointer :: s
    1154              :          type(auto_diff_real_star_order1) :: Hp_00
    1155              :          integer, intent(in) :: k
    1156            0 :          Hp_00 = 0d0
    1157            0 :          Hp_00 % val = s%Hp_face(k)
    1158            0 :          Hp_00 % d1Array(i_Hp_00) = 1d0
    1159            0 :       end function wrap_Hp_00
    1160              : 
    1161            0 :       function wrap_Hp_p1(s, k) result(Hp_p1)
    1162              :          type (star_info), pointer :: s
    1163              :          type(auto_diff_real_star_order1) :: Hp_p1
    1164              :          integer, intent(in) :: k
    1165            0 :          Hp_p1 = 0d0
    1166            0 :          if (k < s%nz) then
    1167            0 :             Hp_p1 % val = s%Hp_face(k+1)
    1168            0 :             Hp_p1 % d1Array(i_Hp_p1) = 1d0
    1169              :          end if
    1170            0 :       end function wrap_Hp_p1
    1171              : 
    1172              : 
    1173            0 :       function wrap_w_div_wc_m1(s, k) result(w_div_wc_m1)
    1174              :          type (star_info), pointer :: s
    1175              :          type(auto_diff_real_star_order1) :: w_div_wc_m1
    1176              :          integer, intent(in) :: k
    1177            0 :          w_div_wc_m1 = 0d0
    1178            0 :          if (k > 1) then
    1179            0 :             w_div_wc_m1 % val = s% w_div_w_crit_roche(k-1)
    1180            0 :             w_div_wc_m1 % d1Array(i_w_div_wc_m1) = 1d0
    1181              :          end if
    1182            0 :       end function wrap_w_div_wc_m1
    1183              : 
    1184            0 :       function wrap_w_div_wc_00(s, k) result(w_div_wc_00)
    1185              :          type (star_info), pointer :: s
    1186              :          type(auto_diff_real_star_order1) :: w_div_wc_00
    1187              :          integer, intent(in) :: k
    1188            0 :          w_div_wc_00 = 0d0
    1189            0 :          w_div_wc_00 % val = s% w_div_w_crit_roche(k)
    1190            0 :          w_div_wc_00 % d1Array(i_w_div_wc_00) = 1d0
    1191            0 :       end function wrap_w_div_wc_00
    1192              : 
    1193            0 :       function wrap_w_div_wc_p1(s, k) result(w_div_wc_p1)
    1194              :          type (star_info), pointer :: s
    1195              :          type(auto_diff_real_star_order1) :: w_div_wc_p1
    1196              :          integer, intent(in) :: k
    1197            0 :          w_div_wc_p1 = 0d0
    1198            0 :          if (k < s%nz) then
    1199            0 :             w_div_wc_p1 % val = s% w_div_w_crit_roche(k+1)
    1200            0 :             w_div_wc_p1 % d1Array(i_w_div_wc_p1) = 1d0
    1201              :          end if
    1202            0 :       end function wrap_w_div_wc_p1
    1203              : 
    1204              : 
    1205            0 :       function wrap_jrot_m1(s, k) result(jrot_m1)
    1206              :          type (star_info), pointer :: s
    1207              :          type(auto_diff_real_star_order1) :: jrot_m1
    1208              :          integer, intent(in) :: k
    1209            0 :          jrot_m1 = 0d0
    1210            0 :          if (k > 1) then
    1211            0 :             jrot_m1 % val = s% j_rot(k-1)
    1212            0 :             jrot_m1 % d1Array(i_jrot_m1) = 1d0
    1213              :          end if
    1214            0 :       end function wrap_jrot_m1
    1215              : 
    1216            0 :       function wrap_jrot_00(s, k) result(jrot_00)
    1217              :          type (star_info), pointer :: s
    1218              :          type(auto_diff_real_star_order1) :: jrot_00
    1219              :          integer, intent(in) :: k
    1220            0 :          jrot_00 = 0d0
    1221            0 :          jrot_00 % val = s% j_rot(k)
    1222            0 :          jrot_00 % d1Array(i_jrot_00) = 1d0
    1223            0 :       end function wrap_jrot_00
    1224              : 
    1225            0 :       function wrap_jrot_p1(s, k) result(jrot_p1)
    1226              :          type (star_info), pointer :: s
    1227              :          type(auto_diff_real_star_order1) :: jrot_p1
    1228              :          integer, intent(in) :: k
    1229            0 :          jrot_p1 = 0d0
    1230            0 :          if (k < s%nz) then
    1231            0 :             jrot_p1 % val = s% j_rot(k+1)
    1232            0 :             jrot_p1 % d1Array(i_jrot_p1) = 1d0
    1233              :          end if
    1234            0 :       end function wrap_jrot_p1
    1235              : 
    1236              : 
    1237            0 :       function wrap_omega_m1(s, k) result(omega_m1)
    1238              :          type (star_info), pointer :: s
    1239              :          type(auto_diff_real_star_order1) :: omega_m1, jrot_m1
    1240              :          integer, intent(in) :: k
    1241            0 :          omega_m1 = 0d0
    1242            0 :          jrot_m1 = wrap_jrot_m1(s,k)
    1243            0 :          if (k > 1) then
    1244            0 :             omega_m1 = jrot_m1/shift_m1(s% i_rot(k-1))
    1245              :          end if
    1246            0 :       end function wrap_omega_m1
    1247              : 
    1248            0 :       function wrap_omega_00(s, k) result(omega_00)
    1249              :          type (star_info), pointer :: s
    1250              :          type(auto_diff_real_star_order1) :: omega_00, jrot_00
    1251              :          integer, intent(in) :: k
    1252            0 :          jrot_00 = wrap_jrot_00(s,k)
    1253            0 :          omega_00 = jrot_00/s% i_rot(k)
    1254            0 :       end function wrap_omega_00
    1255              : 
    1256            0 :       function wrap_omega_p1(s, k) result(omega_p1)
    1257              :          type (star_info), pointer :: s
    1258              :          type(auto_diff_real_star_order1) :: omega_p1, jrot_p1
    1259              :          integer, intent(in) :: k
    1260            0 :          omega_p1 = 0d0
    1261            0 :          jrot_p1 = wrap_jrot_p1(s,k)
    1262            0 :          if (k < s%nz) then
    1263            0 :             omega_p1 = jrot_p1/shift_p1(s% i_rot(k+1))
    1264              :          end if
    1265            0 :       end function wrap_omega_p1
    1266              : 
    1267              : 
    1268            0 :       function wrap_xtra1_m1(s, k) result(xtra1_m1)
    1269              :          type (star_info), pointer :: s
    1270              :          type(auto_diff_real_star_order1) :: xtra1_m1
    1271              :          integer, intent(in) :: k
    1272            0 :          xtra1_m1 = 0d0
    1273            0 :          if (k > 1) then
    1274            0 :             xtra1_m1 % val = 0d0
    1275            0 :             xtra1_m1 % d1Array(i_xtra1_m1) = 1d0
    1276              :          end if
    1277            0 :       end function wrap_xtra1_m1
    1278              : 
    1279            0 :       function wrap_xtra1_00(s, k) result(xtra1_00)
    1280              :          type (star_info), pointer :: s
    1281              :          type(auto_diff_real_star_order1) :: xtra1_00
    1282              :          integer, intent(in) :: k
    1283            0 :          xtra1_00 = 0d0
    1284            0 :          xtra1_00 % val = 0d0
    1285            0 :          xtra1_00 % d1Array(i_xtra1_00) = 1d0
    1286            0 :       end function wrap_xtra1_00
    1287              : 
    1288            0 :       function wrap_xtra1_p1(s, k) result(xtra1_p1)
    1289              :          type (star_info), pointer :: s
    1290              :          type(auto_diff_real_star_order1) :: xtra1_p1
    1291              :          integer, intent(in) :: k
    1292            0 :          xtra1_p1 = 0d0
    1293            0 :          if (k < s%nz) then
    1294            0 :             xtra1_p1 % val = 0d0
    1295            0 :             xtra1_p1 % d1Array(i_xtra1_p1) = 1d0
    1296              :          end if
    1297            0 :       end function wrap_xtra1_p1
    1298              : 
    1299              : 
    1300            0 :       function wrap_xtra2_m1(s, k) result(xtra2_m1)
    1301              :          type (star_info), pointer :: s
    1302              :          type(auto_diff_real_star_order1) :: xtra2_m1
    1303              :          integer, intent(in) :: k
    1304            0 :          xtra2_m1 = 0d0
    1305            0 :          if (k > 1) then
    1306            0 :             xtra2_m1 % val = 0d0
    1307            0 :             xtra2_m1 % d1Array(i_xtra2_m1) = 1d0
    1308              :          end if
    1309            0 :       end function wrap_xtra2_m1
    1310              : 
    1311            0 :       function wrap_xtra2_00(s, k) result(xtra2_00)
    1312              :          type (star_info), pointer :: s
    1313              :          type(auto_diff_real_star_order1) :: xtra2_00
    1314              :          integer, intent(in) :: k
    1315            0 :          xtra2_00 = 0d0
    1316            0 :          xtra2_00 % val = 0d0
    1317            0 :          xtra2_00 % d1Array(i_xtra2_00) = 1d0
    1318            0 :       end function wrap_xtra2_00
    1319              : 
    1320            0 :       function wrap_xtra2_p1(s, k) result(xtra2_p1)
    1321              :          type (star_info), pointer :: s
    1322              :          type(auto_diff_real_star_order1) :: xtra2_p1
    1323              :          integer, intent(in) :: k
    1324            0 :          xtra2_p1 = 0d0
    1325            0 :          if (k < s%nz) then
    1326            0 :             xtra2_p1 % val = 0d0
    1327            0 :             xtra2_p1 % d1Array(i_xtra2_p1) = 1d0
    1328              :          end if
    1329            0 :       end function wrap_xtra2_p1
    1330              : 
    1331              : end module auto_diff_support
        

Generated by: LCOV version 2.0-1