Skip to content

Commit d553177

Browse files
author
Matthias Fabry
committed
[ci optional] fix to check_dX so it returns the largest dt_ratio
1 parent 2e2dc1f commit d553177

File tree

1 file changed

+35
-27
lines changed

1 file changed

+35
-27
lines changed

star/private/timestep.f90

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -484,24 +484,26 @@ integer function check_dX(s, skip_hard_limit, dt, &
484484
n_mix_bdy, mix_bdy_loc, mix_bdy_q, &
485485
dX_dt_limit_ratio, dX_div_X_dt_limit_ratio)
486486
use num_lib, only: binary_search
487-
type (star_info), pointer :: s
488487
logical, intent(in) :: skip_hard_limit
489488
integer, intent(in) :: n_mix_bdy, mix_bdy_loc(:)
490489
real(dp), intent(in) :: dt
491490
real(dp), intent(in), pointer :: mix_bdy_q(:)
492491
real(dp), intent(inout) :: dX_dt_limit_ratio, dX_div_X_dt_limit_ratio
493492

493+
type (star_info), pointer :: s
494494
real(dp) :: X, X_old, delta_X, delta_X_div_X, max_dX, max_dX_div_X, &
495-
bdy_dist_dm, max_dX_bdy_dist_dm, max_dX_div_X_bdy_dist_dm, cz_dist_limit
495+
bdy_dist_dm, max_dX_bdy_dist_dm, max_dX_div_X_bdy_dist_dm, cz_dist_limit, &
496+
D_mix_cutoff, ratio_tmp
496497
integer :: i, j, k, cid, bdy, max_dX_j, max_dX_k, max_dX_div_X_j, max_dX_div_X_k
497-
real(dp) :: D_mix_cutoff
498498
real(dp), dimension(max_dX_limit_ctrls) :: dX_limit, dX_hard_limit, &
499499
dX_div_X_limit, dX_div_X_hard_limit
500500
character (len=strlen) :: sp
501501

502502
include 'formats'
503503

504504
check_dX = keep_going
505+
dX_dt_limit_ratio = 0d0
506+
dX_div_X_dt_limit_ratio = 0d0
505507

506508
if (s% mix_factor == 0d0 .and. s% dxdt_nuc_factor == 0d0) return
507509

@@ -638,34 +640,40 @@ integer function check_dX(s, skip_hard_limit, dt, &
638640

639641
if (dX_limit(i) > 0) then
640642
dX_dt_limit_ratio = max_dX/dX_limit(i)
641-
if (dX_dt_limit_ratio <= 1d0) then
642-
dX_dt_limit_ratio = 0
643-
else
644-
s% Tlim_dX_species = max_dX_j
645-
s% Tlim_dX_cell = max_dX_k
646-
write(*, '(a30, i5, 99e20.10)') &
647-
' limit dt because of large dX '// &
648-
trim(chem_isos% name(s% chem_id(max_dX_j))) // &
649-
' k, max, lim, m ', &
650-
max_dX_k, max_dX, dX_limit(i), &
651-
max_dX_bdy_dist_dm/Msun
643+
if (ratio_tmp > dX_dt_limit_ratio) then
644+
dX_dt_limit_ratio = ratio_tmp
645+
if (dX_dt_limit_ratio <= 1d0) then
646+
dX_dt_limit_ratio = 0
647+
else
648+
s% Tlim_dX_species = max_dX_j
649+
s% Tlim_dX_cell = max_dX_k
650+
! write(*, '(a30, i5, 99e20.10)') &
651+
! ' limit dt because of large dX '// &
652+
! trim(chem_isos% name(s% chem_id(max_dX_j))) // &
653+
! ' k, max, lim, m ', &
654+
! max_dX_k, max_dX, dX_limit(i), &
655+
! max_dX_bdy_dist_dm/Msun
656+
end if
652657
end if
653-
654658
end if
655659

656660
if (dX_div_X_limit(i) > 0) then
657-
dX_div_X_dt_limit_ratio = max_dX_div_X/dX_div_X_limit(i)
658-
if (dX_div_X_dt_limit_ratio <= 1d0) then
659-
dX_div_X_dt_limit_ratio = 0
660-
else
661-
s% Tlim_dX_div_X_species = max_dX_div_X_j
662-
s% Tlim_dX_div_X_cell = max_dX_div_X_k
663-
write(*, '(a35, i5, 99e20.10)') &
664-
' limit dt because of large dX_div_X ' // &
665-
trim(chem_isos% name(s% chem_id(max_dX_div_X_j))) // &
666-
' k, max, lim, m ', &
667-
max_dX_div_X_k, max_dX_div_X, dX_div_X_limit(i), &
668-
max_dX_div_X_bdy_dist_dm/Msun
661+
ratio_tmp = max_dX_div_X/dX_div_X_limit(i)
662+
if (ratio_tmp > dX_div_X_dt_limit_ratio) then ! pick out largest culprit only!
663+
dX_div_X_dt_limit_ratio = ratio_tmp
664+
if (dX_div_X_dt_limit_ratio <= 1d0) then
665+
dX_div_X_dt_limit_ratio = 0
666+
else
667+
s% Tlim_dX_div_X_species = max_dX_div_X_j
668+
s% Tlim_dX_div_X_cell = max_dX_div_X_k
669+
! write(*, '(a35, i5, 99e20.10)') & ! shouldn't be written as is isn't guarantueed
670+
! this control will trigger timestep reduction
671+
! ' limit dt because of large dX_div_X ' // &
672+
! trim(chem_isos% name(s% chem_id(max_dX_div_X_j))) // &
673+
! ' k, max, lim, m ', &
674+
! max_dX_div_X_k, max_dX_div_X, dX_div_X_limit(i), &
675+
! max_dX_div_X_bdy_dist_dm/Msun
676+
end if
669677
end if
670678
end if
671679
end do

0 commit comments

Comments
 (0)