Scheduled Downtime
On Tuesday 24 October 2023 @ 5pm MT the forums will be in read only mode in preparation for the downtime. On Wednesday 25 October 2023 @ 5am MT, this website will be down for maintenance and expected to return online later in the morning.
Normal Operations
The forums are back online with normal operations. If you notice any issues or errors related to the forums, please reach out to help@ucar.edu

What causes alpha_ai(grid box mean albedo) to be abnormal(>100%)?

CST1996

Shutao Cao
Member
Dear support of CICE Consortium,
We use CICE-master to calculate sea ice albedo(albsni) and find it abnormal(greater than 100%, even up to 10000 in some area).
And we find that the varialbe 'albsni' is calculated by weighting grid box mean albedos(including alvdr_ai, alvdf_ai, alidr_ai, alidf_ai).
So we output the grid box mean albedos and find it abnormal as well while albedos without grid box mean(ie, alvdr, alvdf, alidr, alidf)
are normal(between 0 and 100%). Therefore, we conclude that the abnormal albsni is due to the abnormal grid box mean albedo.
We guess there is something wrong when calculating grid box mean albedos(eg, calculating alvdr_ai using alvdr). But we can't find
where albedo components are transformed to their counterpart of grid box mean in CICE-master. We will appreciate it very much if
you can give us some guidance.
Look forward to your reply.
Best Wishes.
Sincerely,
Cao
 

dbailey

CSEG and Liaisons
Staff member
Not sure what you mean by alpha_ai. The code for computing albsni is as follows:

if (f_albsni (1:1) /= 'x') &
call accum_hist_field(n_albsni, iblk, &
(awtvdr*alvdr(:,:,iblk) &
+ awtidr*alidr(:,:,iblk) &
+ awtvdf*alvdf(:,:,iblk) &
+ awtidf*alidf(:,:,iblk))*workb(:,:), a2D)

Where workb is a temporary array for storing the ice area. The awt terms are the weights to turn these into a broadband albedo. There could possibly be a bug in the code that backs out the Zenith angle dependence in the monthly mean.

if (avail_hist_fields(n)%vname(1:6) == 'albsni') then
do j = jlo, jhi
do i = ilo, ihi
if (tmask(i,j,iblk)) then
ravgctz = c0
if (albcnt(i,j,iblk,ns) > puny) &
ravgctz = c1/albcnt(i,j,iblk,ns)
if (f_albsni (1:1) /= 'x' .and. n_albsni(ns) /= 0) &
a2D(i,j,n_albsni(ns),iblk) = &
a2D(i,j,n_albsni(ns),iblk)*avgct(ns)*ravgctz
endif
enddo ! i
enddo ! j
endif

where albcnt is the number of timesteps when the sun is above the horizon. We will have to look into this.
 

CST1996

Shutao Cao
Member
Not sure what you mean by alpha_ai. The code for computing albsni is as follows:

if (f_albsni (1:1) /= 'x') &
call accum_hist_field(n_albsni, iblk, &
(awtvdr*alvdr(:,:,iblk) &
+ awtidr*alidr(:,:,iblk) &
+ awtvdf*alvdf(:,:,iblk) &
+ awtidf*alidf(:,:,iblk))*workb(:,:), a2D)

Where workb is a temporary array for storing the ice area. The awt terms are the weights to turn these into a broadband albedo. There could possibly be a bug in the code that backs out the Zenith angle dependence in the monthly mean.

if (avail_hist_fields(n)%vname(1:6) == 'albsni') then
do j = jlo, jhi
do i = ilo, ihi
if (tmask(i,j,iblk)) then
ravgctz = c0
if (albcnt(i,j,iblk,ns) > puny) &
ravgctz = c1/albcnt(i,j,iblk,ns)
if (f_albsni (1:1) /= 'x' .and. n_albsni(ns) /= 0) &
a2D(i,j,n_albsni(ns),iblk) = &
a2D(i,j,n_albsni(ns),iblk)*avgct(ns)*ravgctz
endif
enddo ! i
enddo ! j
endif

where albcnt is the number of timesteps when the sun is above the horizon. We will have to look into this.
Thanks for your reply.
Alpha_ai refers to the grid box mean albedo, for example, alvdr_ai means the grid box mean of visible direct albedo, that is,
alvdr_ai = alvdr*aice, aice is the sea ice area. It is the same with the other three albedo types, alvdf, alidr, alidf.
We found values of alvdr, alvdf, alidr, alidf are normal while the grid box mean values of their counterparts are abnormal.
Now, we guess maybe there is something wrong with the ice area value casue alvdr_ai = alvdr*aice.
 

CST1996

Shutao Cao
Member
Not sure what you mean by alpha_ai. The code for computing albsni is as follows:

if (f_albsni (1:1) /= 'x') &
call accum_hist_field(n_albsni, iblk, &
(awtvdr*alvdr(:,:,iblk) &
+ awtidr*alidr(:,:,iblk) &
+ awtvdf*alvdf(:,:,iblk) &
+ awtidf*alidf(:,:,iblk))*workb(:,:), a2D)

Where workb is a temporary array for storing the ice area. The awt terms are the weights to turn these into a broadband albedo. There could possibly be a bug in the code that backs out the Zenith angle dependence in the monthly mean.

if (avail_hist_fields(n)%vname(1:6) == 'albsni') then
do j = jlo, jhi
do i = ilo, ihi
if (tmask(i,j,iblk)) then
ravgctz = c0
if (albcnt(i,j,iblk,ns) > puny) &
ravgctz = c1/albcnt(i,j,iblk,ns)
if (f_albsni (1:1) /= 'x' .and. n_albsni(ns) /= 0) &
a2D(i,j,n_albsni(ns),iblk) = &
a2D(i,j,n_albsni(ns),iblk)*avgct(ns)*ravgctz
endif
enddo ! i
enddo ! j
endif

where albcnt is the number of timesteps when the sun is above the horizon. We will have to look into this.
Please ignore the last reply of guess on something wrong with the ice area.
We have confirmed it that there is a bug on the time average of albedo.
Thanks!
 

CST1996

Shutao Cao
Member
Not sure what you mean by alpha_ai. The code for computing albsni is as follows:

if (f_albsni (1:1) /= 'x') &
call accum_hist_field(n_albsni, iblk, &
(awtvdr*alvdr(:,:,iblk) &
+ awtidr*alidr(:,:,iblk) &
+ awtvdf*alvdf(:,:,iblk) &
+ awtidf*alidf(:,:,iblk))*workb(:,:), a2D)

Where workb is a temporary array for storing the ice area. The awt terms are the weights to turn these into a broadband albedo. There could possibly be a bug in the code that backs out the Zenith angle dependence in the monthly mean.

if (avail_hist_fields(n)%vname(1:6) == 'albsni') then
do j = jlo, jhi
do i = ilo, ihi
if (tmask(i,j,iblk)) then
ravgctz = c0
if (albcnt(i,j,iblk,ns) > puny) &
ravgctz = c1/albcnt(i,j,iblk,ns)
if (f_albsni (1:1) /= 'x' .and. n_albsni(ns) /= 0) &
a2D(i,j,n_albsni(ns),iblk) = &
a2D(i,j,n_albsni(ns),iblk)*avgct(ns)*ravgctz
endif
enddo ! i
enddo ! j
endif

where albcnt is the number of timesteps when the sun is above the horizon. We will have to look into this.
Hi, dbailey.
I have another question.
We notice that for the varible 'albcnt',
Not sure what you mean by alpha_ai. The code for computing albsni is as follows:

if (f_albsni (1:1) /= 'x') &
call accum_hist_field(n_albsni, iblk, &
(awtvdr*alvdr(:,:,iblk) &
+ awtidr*alidr(:,:,iblk) &
+ awtvdf*alvdf(:,:,iblk) &
+ awtidf*alidf(:,:,iblk))*workb(:,:), a2D)

Where workb is a temporary array for storing the ice area. The awt terms are the weights to turn these into a broadband albedo. There could possibly be a bug in the code that backs out the Zenith angle dependence in the monthly mean.

if (avail_hist_fields(n)%vname(1:6) == 'albsni') then
do j = jlo, jhi
do i = ilo, ihi
if (tmask(i,j,iblk)) then
ravgctz = c0
if (albcnt(i,j,iblk,ns) > puny) &
ravgctz = c1/albcnt(i,j,iblk,ns)
if (f_albsni (1:1) /= 'x' .and. n_albsni(ns) /= 0) &
a2D(i,j,n_albsni(ns),iblk) = &
a2D(i,j,n_albsni(ns),iblk)*avgct(ns)*ravgctz
endif
enddo ! i
enddo ! j
endif

where albcnt is the number of timesteps when the sun is above the horizon. We will have to look into this.
Hi, Dbailey,
I have another question.
The variable albcnt accumulates with the increase of time step when the sun is above the horizon. Here is the code:
do iblk = 1,nblocks
do j = 1, ny_block
do i = 1, nx_block

cszn = c0
netsw = swvdr(i,j,iblk)+swidr(i,j,iblk)+swvdf(i,j,iblk)+swidf(i,j,iblk)
if (netsw > puny) cszn = c1
do n = 1, nstreams
albcnt(i,j,iblk,n) = albcnt(i,j,iblk,n) + cszn
enddo
enddo
enddo
enddo

I notice that the last dimension of albcnt is the counter of streams. But I don't find there is any differences between
arrays with different streams, such as albcnt(:,:,:,1) and albcnt(:,:,:,2). It seems that they add up the same value
under the same conditions if time step increases when sun is above the horizon. I know they have to be different for
different streams and the output also proves this. And the same is true for some other variables, such as a2D, replaced
with name 'field' in the following code.
do iblk = 1,nblocks
do ns = 1, nstreams
idns = id(ns)
if (idns > 0) then
this_block = get_block(blocks_ice(iblk),iblk)
ilo = this_block%ilo
ihi = this_block%ihi
jlo = this_block%jlo
jhi = this_block%jhi
do j = jlo, jhi
do i = ilo, ihi
if (tmask(i,j,iblk)) then
field(i,j,idns, iblk) = field(i,j,idns, iblk) + field_accum(i,j)
endif
enddo
enddo
endif
enddo
enddo


So how do arrays in different dimensions of stream become different?
And for albedo abnormal, we have confirmed it that there is nothing wrong with albedo variables
in hourly output frequency. That is, something wrong happens when doing daily mean or monthly mean.
We will appreciate it if you can help us find and repair the bug.
Look forward to your reply.
Best wishes.
Sincerely,
Cao
 

dbailey

CSEG and Liaisons
Staff member
Each stream might be assigned a different frequency. So, albcnt is reset to zero at the end of that averaging period for that stream. For example if you had:

histfreq = 'm','d','x','x','x'
histfreq_n = 1,1,1,1,1

There would be a daily and a monthly stream.
 
Top