Skip to content

Commit 9f32913

Browse files
committed
some changes to avoid stack overflow on windows for large arrays
1 parent 69645bf commit 9f32913

File tree

1 file changed

+27
-3
lines changed

1 file changed

+27
-3
lines changed

src/numerical_differentiation_module.f90

+27-3
Original file line numberDiff line numberDiff line change
@@ -1606,7 +1606,17 @@ subroutine columns_in_partition_group(me,igroup,n_cols,cols,nonzero_rows,indices
16061606
num_nonzero_elements_in_col
16071607
if (allocated(col_indices)) deallocate(col_indices)
16081608
allocate(col_indices(num_nonzero_elements_in_col))
1609-
col_indices = pack(me%indices,mask=me%icol==cols(i))
1609+
!col_indices = pack(me%indices,mask=me%icol==cols(i))
1610+
block
1611+
integer :: j,n
1612+
n = 0
1613+
do j = 1, size(me%icol)
1614+
if (me%icol(j)==cols(i)) then
1615+
n = n + 1
1616+
col_indices(n) = j
1617+
end if
1618+
end do
1619+
end block
16101620
if (allocated(nonzero_rows)) then
16111621
nonzero_rows = [nonzero_rows,me%irow(col_indices)]
16121622
indices = [indices,col_indices]
@@ -1652,7 +1662,10 @@ subroutine compute_indices(me)
16521662
integer :: i !! counter
16531663

16541664
allocate(me%indices(me%num_nonzero_elements))
1655-
me%indices = [(i,i=1,me%num_nonzero_elements)]
1665+
!me%indices = [(i,i=1,me%num_nonzero_elements)]
1666+
do i = 1, me%num_nonzero_elements
1667+
me%indices(i) = i
1668+
end do
16561669

16571670
end subroutine compute_indices
16581671
!*******************************************************************************
@@ -2780,7 +2793,18 @@ subroutine compute_jacobian_partitioned(me,x,dx,jac)
27802793
num_nonzero_elements_in_col = count(me%sparsity%icol==cols(i))
27812794
if (allocated(col_indices)) deallocate(col_indices)
27822795
allocate(col_indices(num_nonzero_elements_in_col))
2783-
col_indices = pack(me%sparsity%indices,mask=me%sparsity%icol==cols(i))
2796+
! col_indices = pack(me%sparsity%indices,mask=me%sparsity%icol==cols(i))
2797+
block
2798+
integer :: j,n
2799+
n = 0
2800+
do j = 1, size(me%sparsity%icol)
2801+
if (me%sparsity%icol(j)==cols(i)) then
2802+
n = n + 1
2803+
col_indices(n) = j
2804+
end if
2805+
end do
2806+
end block
2807+
27842808
df(me%sparsity%irow(col_indices)) = df(me%sparsity%irow(col_indices)) / &
27852809
(me%meth(1)%df_den_factor*dx(cols(i)))
27862810
end do

0 commit comments

Comments
 (0)