module ice_probability_tools 2,2
use ice_kinds_mod
use ice_blocks
, only: nx_block, ny_block, nblocks_tot
implicit none
integer, parameter :: numCoeff = 10
real (dbl_kind) :: perfmodel(numCoeff)
character (len=char_len) :: perfmodel_name
!=========================================================
! This performance model derived timing data and least-sq
! approximation.
!=========================================================
! minimizes: dynamics subcycling
! data perfmodel / 6.111e-05_dbl_kind, 3.0994e-2_dbl_kind, &
! -2.1127e-2_dbl_kind, 2.5825e-4_dbl_kind, &
! 5.3287e-4_dbl_kind, 0.0000e-1_dbl_kind, &
! 0.0000e-1_dbl_kind, 0.0000e-1_dbl_kind, &
! 0.0000e-1_dbl_kind, 0.0000e-1_dbl_kind /
! minimizes: Column
! data perfmodel / 1.2253e-03_dbl_kind, 9.1685e-2_dbl_kind, &
! -7.4930e-2_dbl_kind, 5.7960e-2_dbl_kind, &
! 5.0205e-3_dbl_kind, 2.0189e-3_dbl_kind /
!---------------------------------------------------------
! minimizes: Column v2
!---------------------------------------------------------
! data perfmodel / 1.2253e-03_dbl_kind, 9.1685e-2_dbl_kind, &
! -7.4930e-2_dbl_kind, 1.0000e-3_dbl_kind, &
! 5.0205e-3_dbl_kind, 2.0189e-3_dbl_kind, &
! 0.0000e-1_dbl_kind, 0.0000e-1_dbl_kind, &
! 0.0000e-1_dbl_kind, 0.0000e-1_dbl_kind /
! data perfmodel_name /'Column v2'/
!---------------------------------------------------------
! name: subycle v2
! minimizes: dynamics subcycle
!---------------------------------------------------------
! data perfmodel / 0.0000e-01_dbl_kind, 0.0000e-1_dbl_kind, &
! 5.3586e-2_dbl_kind, 0.0000e-1_dbl_kind, &
! 4.6250e-4_dbl_kind, 0.0000e-1_dbl_kind, &
! 0.0000e-1_dbl_kind, 0.0000e-1_dbl_kind, &
! 0.0000e-1_dbl_kind, 0.0000e-1_dbl_kind /
! data perfmodel_name /'subcycle v2'/
!---------------------------------------------------------
! name: subycle v3
! minimizes: dynamics subcycle
!---------------------------------------------------------
data perfmodel / 9.9777e-06_dbl_kind, 0.0000e-1_dbl_kind, &
1.9347e-2_dbl_kind, 0.0000e-1_dbl_kind, &
0.0000e-1_dbl_kind, 0.0000e-1_dbl_kind, &
0.0000e-1_dbl_kind, 0.0000e-1_dbl_kind, &
0.0000e-1_dbl_kind, 0.0000e-1_dbl_kind /
data perfmodel_name /'subcycle v3'/
!---------------------------------------------------------
! name: combo v7
! minimizes: dynamics subcycle + Advection + Column
! Thermo + Shortwave + Ridging + Bound
!---------------------------------------------------------
! data perfmodel / 9.9215e-04_dbl_kind, 0.0000e-1_dbl_kind, &
! 1.1514e-1_dbl_kind, 0.0000e-1_dbl_kind, &
! 1.6484e-2_dbl_kind, 8.7421e-4_dbl_kind, &
! 0.0000e-1_dbl_kind, 0.0000e-1_dbl_kind, &
! 0.0000e-1_dbl_kind, 0.0000e-1_dbl_kind /
! minimizes: Thermo
! data perfmodel / 9.4472e-04_dbl_kind, 8.6489e-2_dbl_kind, &
! -6.6769-2_dbl_kind, 2.5593e-2_dbl_kind, &
! 3.4758e-3_dbl_kind, 1.8534e-3_dbl_kind /
! minimizes: dynamics subcycling + Column + Thermo + Ridging
! data perfmodel / 6.1443e-04_dbl_kind, 1.0804e-1_dbl_kind, &
! -7.5396e-2_dbl_kind, 1.8444e-3_dbl_kind, &
! 0.0000e-1_dbl_kind, -6.1136e-4_dbl_kind /
! minimizes: dynamics subcycling + Column + Thermo + Ridging
! data perfmodel / 6.2215e-03_dbl_kind, 6.3478e-2_dbl_kind, &
! 0.0000e-1_dbl_kind, 1.2852e-1_dbl_kind, &
! -8.4564e-3_dbl_kind, 1.2788e-2_dbl_kind /
! manual selection
! data perfmodel /0.000e-1_dbl_kind, 0.0e-1_dbl_kind, &
! 0.000e-1_dbl_kind, 0.0e-1_dbl_kind, &
! 1.000e-2_dbl_kind, 3.0e-1_dbl_kind /
! minimizes: dynamics
!data perfmodel / 1.4455e-6_dbl_kind, 2.7671e-05_dbl_kind, &
! -4.7234e-05_dbl_kind,2.0304e-2_dbl_kind, &
! 1.6523e-5_dbl_kind /
! minimizes: column
! data perfmodel / 2.3000e-04_dbl_kind, 1.6847e-2_dbl_kind, &
! -1.2453e-2_dbl_kind, 0.0000e-0_dbl_kind, &
! 2.7042e-2_dbl_kind /
integer (int_kind), allocatable, dimension(:) :: &
nocn, &! number of ocean points per block
nice005, &! number of ice points P > 0.005
nice010, &! number of ice points P > 0.01
nice050, &! number of ice points P > 0.05
nice100, &! number of ice points P > 0.10
nice250, &! number of ice points P > 0.25
nice500 ! number of ice points P > 0.50
public BuildProbabilityStats2
contains
subroutine BuildProbabilityStats2(blockLocation,coeffMatrix) 2
integer (int_kind) :: blockLocation(:)
real (dbl_kind) :: coeffMatrix(:,:)
integer (int_kind) :: maxNice,n,ip
coeffMatrix=0.0
maxNice = MAXVAL(nice005)
do n=1,nblocks_tot
ip = blockLocation(n)
if(ip > 0) then
coeffMatrix(1,ip) = coeffMatrix(1,ip) + real(nocn(n),dbl_kind)
coeffMatrix(2,ip) = coeffMatrix(2,ip) + real(nice005(n),dbl_kind)
coeffMatrix(3,ip) = coeffMatrix(3,ip) + real(nice010(n),dbl_kind)
coeffMatrix(4,ip) = maxNice
coeffMatrix(5,ip) = coeffMatrix(5,ip) + 2*(nx_block + ny_block)
if( nice005(n) > 0) then
coeffMatrix(6,ip) = coeffMatrix(6,ip) + real(nx_block*ny_block,kind=dbl_kind)
endif
coeffMatrix(7,ip) = coeffMatrix(7,ip) + real(nice050(n),dbl_kind)
coeffMatrix(8,ip) = coeffMatrix(8,ip) + real(nice100(n),dbl_kind)
coeffMatrix(9,ip) = coeffMatrix(9,ip) + real(nice250(n),dbl_kind)
coeffMatrix(10,ip) = coeffMatrix(10,ip) + real(nice500(n),dbl_kind)
endif
enddo
end subroutine BuildProbabilityStats2
end module ice_probability_tools