LCOV - code coverage report
Current view: top level - turb/test/src - test_turb.f90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 121 121
Test Date: 2025-06-06 17:08:43 Functions: 100.0 % 6 6

            Line data    Source code
       1            1 : program test_turb
       2              : 
       3            1 :    use math_lib
       4              :    use auto_diff
       5              :    use const_def, only: dp, pi, rsun, lsun, msun, kerg, mp, boltz_sigma, standard_cgrav
       6              :    use turb
       7              : 
       8              :    implicit none
       9              : 
      10            1 :    call check_efficient_MLT_scaling()
      11            1 :    call check_TDC()
      12            1 :    call compare_TDC_and_Cox_MLT()
      13              : 
      14              : contains
      15              : 
      16            3 :    subroutine header(text)
      17              :       character(len=*), intent(in) :: text
      18              : 
      19            3 :       write (*, '(a)') ' ----------------------------------------------------------------'
      20            3 :       write (*, '(a)') ' '
      21            3 :       write (*, '(a)') ' '//text
      22            3 :       write (*, '(a)') ' '
      23            3 :       write (*, '(a)') ' ----------------------------------------------------------------'
      24              : 
      25            4 :    end subroutine header
      26              : 
      27            4 :    subroutine check_efficient_MLT_scaling()
      28              :       type(auto_diff_real_star_order1) :: chiT, chiRho, Cp, grav, Lambda, rho, P, T, opacity, gradr, grada, gradL
      29              :       character(len=3) :: MLT_option
      30            1 :       real(dp) :: mixing_length_alpha, Henyey_MLT_nu_param, Henyey_MLT_y_param, max_conv_vel
      31              :       type(auto_diff_real_star_order1) :: Gamma, gradT, Y_face, conv_vel, conv_vel2, D, r, L
      32              :       integer :: mixing_type, ierr
      33              : 
      34              :       include 'formats'
      35              : 
      36            1 :       call header('Test MLT')
      37              : 
      38            1 :       MLT_option = 'Cox'
      39            1 :       mixing_length_alpha = 1d0
      40            1 :       Henyey_MLT_nu_param = 0d0
      41            1 :       Henyey_MLT_y_param = 0d0
      42            1 :       chiT = 1d0
      43            1 :       chiRho = 1d0
      44              : 
      45            1 :       T = 1d5
      46            1 :       rho = 1d-5
      47            1 :       grav = 1d4
      48            1 :       r = Rsun
      49            1 :       Cp = 2.5d0*kerg/mp
      50            1 :       P = rho*T*kerg/mp
      51            1 :       Lambda = P/(rho*grav)
      52            1 :       opacity = 1d0
      53            1 :       grada = 0.4d0
      54            1 :       gradL = grada
      55              : 
      56            1 :       L = 1d5*Lsun
      57            1 :       gradr = 3d0*P*opacity*L/(64*pi*boltz_sigma*pow4(T)*grav*pow2(r))
      58              : 
      59            1 :       max_conv_vel = 1d99
      60              : 
      61              :       call set_MLT(MLT_option, mixing_length_alpha, Henyey_MLT_nu_param, Henyey_MLT_y_param, &
      62              :                    chiT, chiRho, Cp, grav, Lambda, rho, P, T, opacity, &
      63              :                    gradr, grada, gradL, &
      64            1 :                    Gamma, gradT, Y_face, conv_vel, D, mixing_type, max_conv_vel, ierr)
      65              : 
      66            1 :       write (*, 1) 'vc at 1d5 Lsun', conv_vel%val
      67              : 
      68            1 :       L = 1d8*Lsun
      69            1 :       gradr = 3d0*P*opacity*L/(64*pi*boltz_sigma*pow4(T)*grav*pow2(r))
      70              : 
      71              :       call set_MLT(MLT_option, mixing_length_alpha, Henyey_MLT_nu_param, Henyey_MLT_y_param, &
      72              :                    chiT, chiRho, Cp, grav, Lambda, rho, P, T, opacity, &
      73              :                    gradr, grada, gradL, &
      74            1 :                    Gamma, gradT, Y_face, conv_vel2, D, mixing_type, max_conv_vel, ierr)
      75              : 
      76            1 :       write (*, 1) 'vc at 1d8 Lsun', conv_vel2%val
      77              : 
      78            1 :       write (*, 1) 'Ratio:', conv_vel2%val/conv_vel%val
      79            1 :       write (*, '(a)') 'Expected ~10 because in the efficient limit vc ~ L^{1/3}'
      80            1 :    end subroutine check_efficient_MLT_scaling
      81              : 
      82            4 :    subroutine compare_TDC_and_Cox_MLT()
      83            1 :       real(dp) :: mixing_length_alpha, conv_vel_start, alpha_TDC_DAMP, alpha_TDC_DAMPR, alpha_TDC_PtdVdt, dt, cgrav, m, scale
      84              :       type(auto_diff_real_star_order1) :: &
      85              :          r, L, T, P, opacity, rho, dV, chiRho, chiT, Cp, gradr, grada, scale_height, gradL, grav, Lambda
      86              :       type(auto_diff_real_star_order1) :: gradT, Y_face, conv_vel, D, Gamma
      87            1 :       real(dp) :: Henyey_MLT_nu_param, Henyey_MLT_y_param, max_conv_vel
      88              :       character(len=3) :: MLT_option
      89              :       integer :: mixing_type, ierr, tdc_num_iters
      90              :       logical :: report
      91              : 
      92              :       include 'formats'
      93              : 
      94            1 :       call header('Compare TDC with MLT Cox')
      95              : 
      96              :       ! For limiting the conv_vel coming out of mlt/TDC with Csound.
      97            1 :       max_conv_vel = 1d99 ! we don't limit the conv_vel for testing.
      98              : 
      99              :       ! General
     100            1 :       mixing_length_alpha = 2.0d0
     101            1 :       chiT = 1d0
     102            1 :       chiRho = 1d0
     103            1 :       T = 1d5
     104            1 :       rho = 1d-5
     105            1 :       r = Rsun
     106            1 :       m = Msun
     107            1 :       cgrav = standard_cgrav
     108            1 :       grav = m*cgrav/pow2(r)
     109            1 :       Cp = 2.5d0*kerg/mp
     110            1 :       P = rho*T*kerg/mp
     111            1 :       scale_height = P/(rho*grav)
     112            1 :       Lambda = mixing_length_alpha*scale_height
     113            1 :       opacity = 1d0
     114            1 :       grada = 0.4d0
     115            1 :       gradL = grada
     116              : 
     117            1 :       L = 70*Lsun
     118            1 :       gradr = 3d0*P*opacity*L/(64*pi*boltz_sigma*pow4(T)*grav*pow2(r))
     119              : 
     120              :       ! Adjust L down to get just slightly superadiabatic gradR)
     121            1 :       L = L*(1d0 + 1d-5)*(grada/gradr)
     122            1 :       gradr = 3d0*P*opacity*L/(64*pi*boltz_sigma*pow4(T)*grav*pow2(r))
     123              : 
     124              :       ! TDC
     125            1 :       alpha_TDC_DAMP = 1.0d0
     126            1 :       alpha_TDC_DAMPR = 0.0d0
     127            1 :       alpha_TDC_PtdVdt = 0.0d0
     128            1 :       dV = 0d0
     129            1 :       conv_vel_start = 0d0  !1d10
     130            1 :       scale = L%val*1d-3
     131            1 :       report = .false.
     132            1 :       dt = 1d40  ! Long time-step so we get into equilibrium
     133              : 
     134              :       ! MLT
     135            1 :       MLT_option = 'Cox'
     136            1 :       Henyey_MLT_nu_param = 0d0
     137            1 :       Henyey_MLT_y_param = 0d0
     138              : 
     139            1 :       write (*, 1) 'gradR - gradA', gradr%val - grada%val
     140              : 
     141              :       call set_TDC( &
     142              :          conv_vel_start, mixing_length_alpha, alpha_TDC_DAMP, alpha_TDC_DAMPR, alpha_TDC_PtdVdt, dt, cgrav, m, report, &
     143              :          mixing_type, scale, chiT, chiRho, gradr, r, P, T, rho, dV, Cp, opacity, &
     144            1 :          scale_height, gradL, grada, conv_vel, D, Y_face, gradT, tdc_num_iters, max_conv_vel, ierr)
     145              : 
     146            1 :       write (*, 1) 'TDC: Y, conv_vel_start, conv_vel, dt   ', Y_face%val, conv_vel_start, conv_vel%val, dt
     147              : 
     148              :       call set_MLT(MLT_option, mixing_length_alpha, Henyey_MLT_nu_param, Henyey_MLT_y_param, &
     149              :                    chiT, chiRho, Cp, grav, Lambda, rho, P, T, opacity, &
     150              :                    gradr, grada, gradL, &
     151            1 :                    Gamma, gradT, Y_face, conv_vel, D, mixing_type, max_conv_vel, ierr)
     152              : 
     153            1 :       write (*, 1) 'MLT: Y, conv_vel_start, conv_vel, Gamma', Y_face%val, conv_vel_start, conv_vel%val, Gamma%val
     154              : 
     155            1 :    end subroutine compare_TDC_and_Cox_MLT
     156              : 
     157            1 :    subroutine check_TDC()
     158            1 :       real(dp) :: mixing_length_alpha, conv_vel_start
     159            1 :       real(dp) :: alpha_TDC_DAMP, alpha_TDC_DAMPR, alpha_TDC_PtdVdt, dt, cgrav, m, scale, max_conv_vel
     160              :       type(auto_diff_real_star_order1) :: &
     161              :          r, L, T, P, opacity, rho, dV, chiRho, chiT, Cp, gradr, grada, scale_height, gradL
     162              :       type(auto_diff_real_star_order1) :: gradT, Y_face, conv_vel, D
     163              :       integer :: mixing_type, ierr, tdc_num_iters
     164              :       logical :: report
     165              :       integer :: j
     166              : 
     167              :       include 'formats'
     168              : 
     169            1 :       call header('Test TDC')
     170              : 
     171              :       ! For limiting the conv_vel coming out of mlt/TDC with Csound.
     172            1 :       max_conv_vel = 1d99 ! we don't limit the conv_vel for testing.
     173              : 
     174            1 :       conv_vel_start = 52320587.415154047d0
     175              : 
     176            1 :       mixing_length_alpha = 2.0d0
     177            1 :       alpha_TDC_DAMP = 1.0d0
     178            1 :       alpha_TDC_DAMPR = 0.0d0
     179            1 :       alpha_TDC_PtdVdt = 0.0d0
     180            1 :       cgrav = 6.6743000000000004d-8
     181            1 :       m = 5.8707400456875664d34
     182            1 :       scale = 5.0386519362246294d45
     183            1 :       L = 1.0941528815883500015d0*(-5.0386519362246294d45)
     184            1 :       r = 10314294541.567163d0
     185            1 :       P = 5.0581587249808894d20
     186            1 :       T = 613193666.51783681d0
     187            1 :       rho = 5204.5732574745753d0
     188            1 :       dV = 3.8256494463482604d-7
     189            1 :       Cp = 6628075118.4606590d0
     190            1 :       opacity = 9.0750171231469945d-2
     191            1 :       scale_height = 2638686602.0063782d0
     192            1 :       gradL = 0.25207587267343501d0
     193            1 :       grada = 0.25204697256872738d0
     194            1 :       report = .false.
     195            1 :       chiT = 1d0
     196            1 :       chiRho = 1d0
     197            1 :       gradr = 3d0*P*opacity*L/(64*pi*boltz_sigma*pow4(T)*cgrav*m)
     198              : 
     199            1 :       write (*, *) "####################################"
     200            1 :       write (*, *) "Running dt test"
     201              : 
     202           32 :       do j = 0, 30
     203           31 :          dt = 500d0*pow(1.02d0, j)
     204              :          call set_TDC( &
     205              :             conv_vel_start, mixing_length_alpha, alpha_TDC_DAMP, alpha_TDC_DAMPR, alpha_TDC_PtdVdt, dt, cgrav, m, report, &
     206              :             mixing_type, scale, chiT, chiRho, gradr, r, P, T, rho, dV, Cp, opacity, &
     207           31 :             scale_height, gradL, grada, conv_vel, D, Y_face, gradT, tdc_num_iters, max_conv_vel, ierr)
     208              : 
     209           31 :          write (*, 1) 'dt, gradT, conv_vel_start, conv_vel', dt, gradT%val, conv_vel_start, conv_vel%val
     210           63 :          if (report) stop
     211              :       end do
     212              : 
     213            1 :    end subroutine check_TDC
     214              : 
     215              : end program test_turb
        

Generated by: LCOV version 2.0-1