Some CMIP variables are computed using a mix of U and T quantities
phil-blain opened this issue · 1 comments
Hi @dabail10,
I realized that some of the CMIP output variables are computed by multiplying the concentration aice
(thus a T-point quantity) with variables from the dynamics which are U-point quantities. I'm wondering if we should not use grid_average_X2Y
to shift the dynamical quantities to the T-point prior to computing these variables ?
Here is a diff that shows which variables I'm talking about:
diff --git a/cicecore/cicedyn/analysis/ice_history.F90 b/cicecore/cicedyn/analysis/ice_history.F90
index 570ef495..6340d503 100644
--- a/cicecore/cicedyn/analysis/ice_history.F90
+++ b/cicecore/cicedyn/analysis/ice_history.F90
@@ -2744,11 +2744,11 @@ subroutine accum_hist (dt)
if (f_siu(1:1) /= 'x') then
worka(:,:) = c0
do j = jlo, jhi
do i = ilo, ihi
- if (aice(i,j,iblk) > puny) worka(i,j) = aice(i,j,iblk)*uvel(i,j,iblk)
+ if (aice(i,j,iblk) > puny) worka(i,j) = aice(i,j,iblk)*uvel(i,j,iblk) ! should be computed at the same location ?
enddo
enddo
call accum_hist_field(n_siu, iblk, worka(:,:), a2D)
endif
@@ -2816,11 +2816,11 @@ subroutine accum_hist (dt)
if (f_sistrxdtop(1:1) /= 'x') then
worka(:,:) = c0
do j = jlo, jhi
do i = ilo, ihi
if (aice_init(i,j,iblk) > puny) &
- worka(i,j) = aice(i,j,iblk)*(aice(i,j,iblk)*strairxU(i,j,iblk)/aice_init(i,j,iblk))
+ worka(i,j) = aice(i,j,iblk)*(aice(i,j,iblk)*strairxU(i,j,iblk)/aice_init(i,j,iblk)) !idem
enddo
enddo
call accum_hist_field(n_sistrxdtop, iblk, worka(:,:), a2D)
endif
@@ -2838,11 +2838,11 @@ subroutine accum_hist (dt)
if (f_sistrxubot(1:1) /= 'x') then
worka(:,:) = c0
do j = jlo, jhi
do i = ilo, ihi
if (aice(i,j,iblk) > puny) &
- worka(i,j) = aice(i,j,iblk)*strocnxU(i,j,iblk)
+ worka(i,j) = aice(i,j,iblk)*strocnxU(i,j,iblk) ! idem
enddo
enddo
call accum_hist_field(n_sistrxubot, iblk, worka(:,:), a2D)
endif
@@ -3302,11 +3302,11 @@ subroutine accum_hist (dt)
if (f_sidragtop(1:1) /= 'x') then
worka(:,:) = c0
do j = jlo, jhi
do i = ilo, ihi
if (aice(i,j,iblk) > puny) then
- worka(i,j) = aice(i,j,iblk)*Cdn_atm(i,j,iblk)
+ worka(i,j) = aice(i,j,iblk)*Cdn_atm(i,j,iblk) !idem
endif
enddo
enddo
call accum_hist_field(n_sidragtop, iblk, worka(:,:), a2D)
endif
@@ -3327,11 +3327,11 @@ subroutine accum_hist (dt)
if (f_siforcetiltx(1:1) /= 'x') then
worka(:,:) = c0
do j = jlo, jhi
do i = ilo, ihi
if (aice(i,j,iblk) > puny) then
- worka(i,j) = aice(i,j,iblk)*strtltxU(i,j,iblk)
+ worka(i,j) = aice(i,j,iblk)*strtltxU(i,j,iblk) !idem
endif
enddo
enddo
call accum_hist_field(n_siforcetiltx, iblk, worka(:,:), a2D)
endif
@@ -3339,11 +3339,11 @@ subroutine accum_hist (dt)
if (f_siforcetilty(1:1) /= 'x') then
worka(:,:) = c0
do j = jlo, jhi
do i = ilo, ihi
if (aice(i,j,iblk) > puny) then
- worka(i,j) = aice(i,j,iblk)*strtltyU(i,j,iblk)
+ worka(i,j) = aice(i,j,iblk)*strtltyU(i,j,iblk) ! idem
endif
enddo
enddo
call accum_hist_field(n_siforcetilty, iblk, worka(:,:), a2D)
endif
@@ -3351,11 +3351,11 @@ subroutine accum_hist (dt)
if (f_siforcecoriolx(1:1) /= 'x') then
worka(:,:) = c0
do j = jlo, jhi
do i = ilo, ihi
if (aice(i,j,iblk) > puny) then
- worka(i,j) = aice(i,j,iblk)*fmU(i,j,iblk)*vvel(i,j,iblk)
+ worka(i,j) = aice(i,j,iblk)*fmU(i,j,iblk)*vvel(i,j,iblk) ! idem
endif
enddo
enddo
call accum_hist_field(n_siforcecoriolx, iblk, worka(:,:), a2D)
endif
@@ -3363,11 +3363,11 @@ subroutine accum_hist (dt)
if (f_siforcecorioly(1:1) /= 'x') then
worka(:,:) = c0
do j = jlo, jhi
do i = ilo, ihi
if (aice(i,j,iblk) > puny) then
- worka(i,j) = -aice(i,j,iblk)*fmU(i,j,iblk)*uvel(i,j,iblk)
+ worka(i,j) = -aice(i,j,iblk)*fmU(i,j,iblk)*uvel(i,j,iblk) ! idem
endif
enddo
enddo
call accum_hist_field(n_siforcecorioly, iblk, worka(:,:), a2D)
endif
@@ -3375,11 +3375,11 @@ subroutine accum_hist (dt)
if (f_siforceintstrx(1:1) /= 'x') then
worka(:,:) = c0
do j = jlo, jhi
do i = ilo, ihi
if (aice(i,j,iblk) > puny) then
- worka(i,j) = aice(i,j,iblk)*strintxU(i,j,iblk)
+ worka(i,j) = aice(i,j,iblk)*strintxU(i,j,iblk) ! idem
endif
enddo
enddo
call accum_hist_field(n_siforceintstrx, iblk, worka(:,:), a2D)
endif
I'm working on some slight refactoring of the history code so I could include such a change if you think it makes sense.
This was a debate. According to the SIMIP protocol, everything was supposed to stay on the native grid. I agree that I probably should have interpolated these. I ended up leaving this as is. I am open to changing this.