Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .zenodo.json
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
{
"license": "BSD-3-Clause",
"copyright": "Copyright (c) 1998, 2017 Triad National Security, LLC",
"copyright": "Copyright 1998-2025 Triad National Security, LLC",
"description": "View detailed release notes at https://github.com/CICE-Consortium/CICE/releases",
"language": "eng",
"title": "CICE-Consortium/CICE: CICE Version 6.6.1",
"title": "CICE-Consortium/CICE: CICE Version 6.6.2",
"keywords": [
"sea ice model",
"CICE",
"Icepack"
],
"version": "6.6.1",
"version": "6.6.2",
"upload_type": "software",
"communities": [
{
"identifier": "cice-consortium"
}
],
"publication_date": "2025-07-21",
"publication_date": "2025-08-15",
"creators": [
{
"affiliation": "Los Alamos National Laboratory",
Expand Down
Binary file modified COPYRIGHT.pdf
Binary file not shown.
112 changes: 59 additions & 53 deletions cicecore/cicedyn/analysis/ice_history.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1535,17 +1535,17 @@ subroutine init_hist (dt)

call define_hist_field(n_sitemptop,"sitemptop","K",tstr2D, tcstr, &
"sea ice surface temperature", &
"none", c1, c0, &
"none", c1, Tffresh, &
ns1, f_sitemptop, avg_ice_present=.true., mask_ice_free_points=.true.)

call define_hist_field(n_sitempsnic,"sitempsnic","K",tstr2D, tcstr, &
"snow ice interface temperature", &
"surface temperature when no snow present", c1, c0, &
"surface temperature when no snow present", c1, Tffresh, &
ns1, f_sitempsnic, avg_ice_present=.true., mask_ice_free_points=.true.)

call define_hist_field(n_sitempbot,"sitempbot","K",tstr2D, tcstr, &
"sea ice bottom temperature", &
"none", c1, c0, &
"none", c1, Tffresh, &
ns1, f_sitempbot, avg_ice_present=.true., mask_ice_free_points=.true.)

call define_hist_field(n_siu,"siu","m/s",ustr2D, ucstr, &
Expand Down Expand Up @@ -2753,22 +2753,18 @@ subroutine accum_hist (dt)
worka(:,:) = c0
do j = jlo, jhi
do i = ilo, ihi
if (aice(i,j,iblk) > puny) &
worka(i,j) = aice(i,j,iblk)*(trcr(i,j,nt_Tsfc,iblk)+Tffresh)
worka(i,j) = aice(i,j,iblk)*trcr(i,j,nt_Tsfc,iblk)
enddo
enddo
call accum_hist_field(n_sitemptop, iblk, worka(:,:), a2D)
endif

! Tsnice is already multiplied by aicen in icepack.
if (f_sitempsnic(1:1) /= 'x') then
worka(:,:) = c0
do j = jlo, jhi
do i = ilo, ihi
if (vsno(i,j,iblk) > puny .and. aice_init(i,j,iblk) > puny) then
worka(i,j) = aice(i,j,iblk)*(Tsnice(i,j,iblk)/aice_init(i,j,iblk)+Tffresh)
else
worka(i,j) = aice(i,j,iblk)*(trcr(i,j,nt_Tsfc,iblk)+Tffresh)
endif
worka(i,j) = Tsnice(i,j,iblk)
enddo
enddo
call accum_hist_field(n_sitempsnic, iblk, worka(:,:), a2D)
Expand All @@ -2778,8 +2774,7 @@ subroutine accum_hist (dt)
worka(:,:) = c0
do j = jlo, jhi
do i = ilo, ihi
if (aice_init(i,j,iblk) > puny) &
worka(i,j) = aice(i,j,iblk)*(Tbot(i,j,iblk)/aice_init(i,j,iblk)+Tffresh)
worka(i,j) = aice(i,j,iblk)*Tbot(i,j,iblk)
enddo
enddo
call accum_hist_field(n_sitempbot, iblk, worka(:,:), a2D)
Expand Down Expand Up @@ -3705,33 +3700,40 @@ subroutine accum_hist (dt)
do n = 1, num_avail_hist_fields_2D
if (avail_hist_fields(n)%vhistfreq == histfreq(ns)) then

do j = jlo, jhi
do i = ilo, ihi
if (.not. tmask(i,j,iblk)) then ! mask out land points
a2D(i,j,n,iblk) = spval_dbl
else ! convert units
a2D(i,j,n,iblk) = avail_hist_fields(n)%cona*a2D(i,j,n,iblk) &
* ravgct + avail_hist_fields(n)%conb
endif
enddo ! i
enddo ! j

! Only average for timesteps when ice present
! Only average when/where ice present
if (avail_hist_fields(n)%avg_ice_present) then
do j = jlo, jhi
do i = ilo, ihi
if (tmask(i,j,iblk)) then
a2D(i,j,n,iblk) = &
a2D(i,j,n,iblk)*avgct(ns)*ravgip(i,j)
if (.not. tmask(i,j,iblk)) then
a2D(i,j,n,iblk) = spval_dbl
else ! convert units
a2D(i,j,n,iblk) = avail_hist_fields(n)%cona*a2D(i,j,n,iblk) &
* ravgip(i,j) + avail_hist_fields(n)%conb
endif
! Mask ice-free points
if (avail_hist_fields(n)%mask_ice_free_points) then
if (ravgip(i,j) == c0) a2D(i,j,n,iblk) = spval_dbl
enddo ! i
enddo ! j
else
do j = jlo, jhi
do i = ilo, ihi
if (.not. tmask(i,j,iblk)) then ! mask out land points
a2D(i,j,n,iblk) = spval_dbl
else ! convert units
a2D(i,j,n,iblk) = avail_hist_fields(n)%cona*a2D(i,j,n,iblk) &
* ravgct + avail_hist_fields(n)%conb
endif
enddo ! i
enddo ! j
endif

! Mask ice-free points
if (avail_hist_fields(n)%mask_ice_free_points) then
do j = jlo, jhi
do i = ilo, ihi
if (ravgip(i,j) == c0) a2D(i,j,n,iblk) = spval_dbl
enddo ! i
enddo ! j
endif

! CMIP albedo: also mask points below horizon
if (index(avail_hist_fields(n)%vname,'sialb') /= 0) then
do j = jlo, jhi
Expand Down Expand Up @@ -3838,30 +3840,33 @@ subroutine accum_hist (dt)
nn = n2D + n
if (avail_hist_fields(nn)%vhistfreq == histfreq(ns)) then

do k = 1, ncat_hist
do j = jlo, jhi
do i = ilo, ihi
if (.not. tmask(i,j,iblk)) then ! mask out land points
a3Dc(i,j,k,n,iblk) = spval_dbl
else ! convert units
a3Dc(i,j,k,n,iblk) = avail_hist_fields(nn)%cona*a3Dc(i,j,k,n,iblk) &
* ravgct + avail_hist_fields(nn)%conb
if (avail_hist_fields(nn)%avg_ice_present) then
do k = 1, ncat_hist
do j = jlo, jhi
do i = ilo, ihi
if (.not. tmask(i,j,iblk)) then ! mask out land points
a3Dc(i,j,k,n,iblk) = spval_dbl
else ! convert units
a3Dc(i,j,k,n,iblk) = avail_hist_fields(nn)%cona*a3Dc(i,j,k,n,iblk) &
* ravgipn(i,j,k) + avail_hist_fields(nn)%conb
endif
enddo ! i
enddo ! j
enddo ! k
else
do k = 1, ncat_hist
do j = jlo, jhi
do i = ilo, ihi
if (.not. tmask(i,j,iblk)) then ! mask out land points
a3Dc(i,j,k,n,iblk) = spval_dbl
else ! convert units
a3Dc(i,j,k,n,iblk) = avail_hist_fields(nn)%cona*a3Dc(i,j,k,n,iblk) &
* ravgct + avail_hist_fields(nn)%conb
endif
enddo ! i
enddo ! j
enddo ! k
endif
enddo ! i
enddo ! j
enddo ! k
if (avail_hist_fields(nn)%avg_ice_present) then
do k = 1, ncat_hist
do j = jlo, jhi
do i = ilo, ihi
if (tmask(i,j,iblk)) then
a3Dc(i,j,k,n,iblk) = &
a3Dc(i,j,k,n,iblk)*avgct(ns)*ravgipn(i,j,k)
endif
enddo ! i
enddo ! j
enddo ! k
endif

endif

Expand All @@ -3885,6 +3890,7 @@ subroutine accum_hist (dt)
enddo ! k
endif
enddo ! n

do n = 1, num_avail_hist_fields_3Db
nn = n3Dzcum + n
if (avail_hist_fields(nn)%vhistfreq == histfreq(ns)) then
Expand Down
39 changes: 37 additions & 2 deletions cicecore/cicedyn/dynamics/ice_dyn_evp1d.F90
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ subroutine dyn_evp1d_init
endif

! gather from blks to global
call gather_static(G_uarear, G_dxT, G_dyT, G_tmask)
call gather_static(G_uarear, G_dxT, G_dyT, G_tmask)

! calculate number of water points (T and U). Only needed for the static version
! tmask in ocean/ice
Expand Down Expand Up @@ -349,7 +349,6 @@ subroutine evp1d_alloc_static_na(na0)
call abort_ice(subname//' ERROR: allocating', file=__FILE__, line=__LINE__)
endif


allocate(indxTi(1:na0), &
indxTj(1:na0), &
stat=ierr)
Expand Down Expand Up @@ -628,6 +627,11 @@ subroutine gather_static(G_uarear, G_dxT, G_dyT, G_Tmask)

character(len=*), parameter :: subname = '(gather_static)'

G_uarear = c0
G_dyT = c0
G_dxT = c0
G_tmask = .false.

! copy from distributed I_* to G_*
call gather_global_ext(G_uarear, uarear, master_task, distrb_info)
call gather_global_ext(G_dxT , dxT , master_task, distrb_info)
Expand Down Expand Up @@ -977,6 +981,37 @@ subroutine convert_1d_2d_dyn(na0 , navel0 ,
integer(kind=int_kind) :: lo, up, iw, i, j
character(len=*), parameter :: subname = '(convert_1d_2d_dyn)'

G_stressp_1 = c0
G_stressp_2 = c0
G_stressp_3 = c0
G_stressp_4 = c0
G_stressm_1 = c0
G_stressm_2 = c0
G_stressm_3 = c0
G_stressm_4 = c0
G_stress12_1 = c0
G_stress12_2 = c0
G_stress12_3 = c0
G_stress12_4 = c0
G_strength = c0
G_cdn_ocn = c0
G_aiu = c0
G_uocn = c0
G_vocn = c0
G_waterxU = c0
G_wateryU = c0
G_forcexU = c0
G_forceyU = c0
G_umassdti = c0
G_fmU = c0
G_strintxU = c0
G_strintyU = c0
G_Tbu = c0
G_uvel = c0
G_vvel = c0
G_taubxU = c0
G_taubyU = c0

lo=1
up=na0
do iw = lo, up
Expand Down
26 changes: 26 additions & 0 deletions cicecore/cicedyn/dynamics/ice_dyn_shared.F90
Original file line number Diff line number Diff line change
Expand Up @@ -193,13 +193,24 @@ subroutine alloc_dyn_shared
stat=ierr)
if (ierr/=0) call abort_ice(subname//': Out of memory')

uvel_init = c0
vvel_init = c0
iceTmask = .false.
iceUmask = .false.
fcor_blk = c0
DminTarea = c0

allocate( &
fld2(nx_block,ny_block,2,max_blocks), &
fld3(nx_block,ny_block,3,max_blocks), &
fld4(nx_block,ny_block,4,max_blocks), &
stat=ierr)
if (ierr/=0) call abort_ice(subname//': Out of memory')

fld2 = c0
fld3 = c0
fld4 = c0

allocate( &
cyp(nx_block,ny_block,max_blocks), & ! 1.5*HTE - 0.5*HTW
cxp(nx_block,ny_block,max_blocks), & ! 1.5*HTN - 0.5*HTS
Expand All @@ -208,12 +219,19 @@ subroutine alloc_dyn_shared
stat=ierr)
if (ierr/=0) call abort_ice(subname//': Out of memory')

cyp = c0
cxp = c0
cym = c0
cxm = c0

if (grid_ice == 'B' .and. evp_algorithm == "standard_2d") then
allocate( &
dxhy(nx_block,ny_block,max_blocks), & ! 0.5*(HTE - HTW)
dyhx(nx_block,ny_block,max_blocks), & ! 0.5*(HTN - HTS)
stat=ierr)
if (ierr/=0) call abort_ice(subname//': Out of memory')
dxhy = c0
dyhx = c0
endif

if (grid_ice == 'CD' .or. grid_ice == 'C') then
Expand All @@ -228,6 +246,14 @@ subroutine alloc_dyn_shared
fcorN_blk (nx_block,ny_block,max_blocks), & ! Coriolis
stat=ierr)
if (ierr/=0) call abort_ice(subname//': Out of memory')
uvelE_init = c0
vvelE_init = c0
uvelN_init = c0
vvelN_init = c0
iceEmask = .false.
iceNmask = .false.
fcorE_blk = c0
fcorN_blk = c0
endif

end subroutine alloc_dyn_shared
Expand Down
Loading