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

Clear sky upwelling LW not equal to total sky upwelling LW at surface?

khartig

Kara
New Member
I am confused why the clearsky upwelling longwave flux at the surface (FLNSC - FLDSC) is not equal to the total sky upwelling longwave flux the the surface (FLNS - FLDS). There are regions where the total sky upwelling flux is over 100 W/m2 and/or 1.5+ times more than the clear sky.

I looked through rrtmg_lw_rad.f90 and rrtmg_lw_rtrnmc.f90 and the only obvious difference I found at the surface is in the specular reflection of downwelling longwave, but since the surface emissivity is ~90% the reflected radiance should only be on the order of 10% at most outside of desserts and things, which would be 10's of W/m2 rather than the 100+ I'm seeing. This is all with cesm2.1.3 with CAM6, F2000climo compset at f09_f09_mg17 resolution. Any help in interpreting RRTMG and these variables would be greatly appreciated!
 

brianpm

Member
Hi Kara,

I think you are using an incorrect sign convention.


In rad_rrtmg_lw, you can see the definition of the net surface fluxes:
Code:
flns(:ncol)  = uflx (:ncol,1) - dflx (:ncol,1)
flnsc(:ncol) = uflxc(:ncol,1) - dflxc(:ncol,1)

So to derive the upwelling surface flux:

FLUS = flns + flns
FLUSC = flnsc + flnsc

While we do not have these as output fields, they are easy to add to confirm.

To do that, you can add the following to the subroutine radiation_init in radiation.F90:
Code:
call addfld('FLUS'//diag(icall), horiz_only, 'A', 'W/m2', 'Upwelling longwave flux at surface', sampling_seq='radlwsw')
call addfld('FLUSC'//diag(icall), horiz_only, 'A', 'W/m2', 'Clearsky upwelling longwave flux at surface', sampling_seq='radlwsw')

and then to get output, you can add the following to subroutine rad_rrtmg_lw in radlw.F90:
Code:
call outfld('FLUS', uflx (:ncol,1), pcols, lchnk)
call outfld('FLUSC', uflxc(:ncol,1), pcols, lchnk)

(around line 217 or so).

I just did this and wrote instantaneous, time-step output for one day of an F2000climo run.

When I look at that output using python (with xarray and numpy):
Code:
>>>> (np.absolute(ds['FLUSC']-ds['FLUS'])).max()

array(0., dtype=float32)

So the actual upwelling fluxes are identical at all grid points at all the timesteps for that one day. The derived upwelling flux shows only a negligible discrepancy:
Code:
>>>> np.absolute((ds['FLNS'] + ds['FLDS']) - ds['FLUS']).max()
array(6.1035156e-05, dtype=float32)
>>>> np.absolute((ds['FLNSC'] + ds['FLDSC']) - ds['FLUSC']).max()
array(6.1035156e-05, dtype=float32)
>>>> np.absolute((ds['FLNSC'] + ds['FLDSC']) - (ds['FLNS'] + ds['FLDS'])).max()
array(6.1035156e-05, dtype=float32)
 

khartig

Kara
New Member
Thanks for the correction! I saw somewhere that the flux sign convention was positive down, which lead me to believe that net would be up plus down, so I appreciate the clarification.

I'm assuming you meant to write
FLUS = FLNS + FLDS
FLUSC = FLNSC + FLDSC
(you had net twice on the right-hand side)
 

khartig

Kara
New Member
It looks like SW fluxes have the opposite sign convention from LW; rrtmg_sw sets the net flux with down minus up,
swnflxc(i) = swdflxc(iplon,i) - swuflxc(iplon,i) swnflx(i) = swdflx(iplon,i) - swuflx(iplon,i)
 

brianpm

Member
Thanks for the correction! I saw somewhere that the flux sign convention was positive down, which lead me to believe that net would be up plus down, so I appreciate the clarification.

I'm assuming you meant to write
FLUS = FLNS + FLDS
FLUSC = FLNSC + FLDSC
(you had net twice on the right-hand side)
Right!
 
Top