Adjust heat flux with diurnal cycle

Bug reports, work arounds and fixes

Moderators: arango, robertson

Post Reply
Message
Author
austinctodd

Adjust heat flux with diurnal cycle

#1 Unread post by austinctodd »

I have recently been trying to run a ROMS simulation with climatological (monthly-average) heat fluxes, and I have some concerns with the way that the shortwave radiation is modified and imposed when one activates both DIURNAL_SRFLUX and SOLAR_SOURCE without BULK_FLUXES activated. I have two main concerns:

(1) SOLAR_SOURCE penetration term may heat too much
When we calculate the penetration of shortwave radiation to deeper depths, should the total solar heating equal the amount prescribed at the ocean's surface, or may it be greater? That is, if we have swrad=600W/m2, does that 600W/m2 get distributed to deeper depths such that swrad(i,j,N-1)+swrad(i,j,N-2)+swrad(i,j,N-3)+...=600W/m2? If it should equal the prescribed swrad at the surface, then the routine lmd_swfrac_tile does not calculate the "fraction of the solar shortwave radiation" correctly. I output the spatially-varying swdk variable calculated via lmd_swfrac_tile with Jerlov water type 2, and summed the values across the layer depths of a NW Atlantic domain. To my surprise, I got summed fractions that exceeded 1 (the sums exceeded 10 in many coastal areas... see fig).
sum_swdk.png
sum_swdk.png (154.65 KiB) Viewed 3734 times
My original thought was that the amount of solar shortwave radiation reaching the surface should be distributed to depths (which would make the sum of these fractions equal to 1), not applied in different amounts at each depth. Should this be the case or is my thinking wrong?

On to the next concern...

(2) Mismatch between heat flux and solar radiation with DIURNAL_SRFLUX
When SOLAR_SOURCE and DIURNAL_SRFLUX are both applied, ROMS reads in the net shortwave radiation for fields at >= 24 frequency, and imposes a diurnal cycle. The result is that the net solar radiative heating over the 24hr period is similar to that of a constant solar radiative heating, but peaks in the afternoon (see figure below: - red line=constant swrad prescribed, blue line = ROMS-calculated swrad with diurnal cycle. The "area under the curve" for each line is roughly equal).
swrad_diurnal.png
Now, the problem comes when SOLAR_SOURCE is also defined, since ROMS takes this newly-adjusted srflx and applies the solar radiative heating to depths below the surface. In pre_step3d.F, ROMS calculates the fraction of the solar radiation penetrating the water column with the term swdk, then calculates the net heating within each layer, i.e.

Code: Select all

!
!  Compute vertical diffusive fluxes "FC" of the tracer fields at
!  current time step n, and at horizontal RHO-points and vertical
!  W-points.
!
...           FC(i,k)=cff3*cff*Akt(i,j,k,ltrc)*                         &
     &                (t(i,j,k+1,nstp,itrc)-                            &
     &                 t(i,j,k  ,nstp,itrc))
...
!
!  Add in incoming solar radiation at interior W-points using decay
!  decay penetration function based on Jerlow water type.
!
...
                FC(i,k)=FC(i,k)+dt(ng)*srflx(i,j)*swdk(i,j,k)
...
!
!  Apply bottom and surface tracer flux conditions.
!
          DO i=Istr,Iend
            FC(i,0)=dt(ng)*btflx(i,j,itrc)
            FC(i,N(ng))=dt(ng)*stflx(i,j,itrc)
          END DO
!
!  Compute new tracer field (m Tunits).
!
...           cff1=Hz(i,j,k)*t(i,j,k,nstp,itrc)
              cff2=FC(i,k)-FC(i,k-1)
              t(i,j,k,nnew,itrc)=cff1+cff2
              t(i,j,k,3,itrc)=t(i,j,k,nnew,itrc)/Hz(i,j,k)
...
In this code, layer N is heated by the amount cff2, which is dt(ng)*(stflx(i,j,itemp)-srflx(i,j)*swdk(i,j,k)). However, stflx(i,j,itemp) (the original net surface heat flux composed of sensible+latent+longwave+original net shortwave) is not modified such that the net solar radiation term is diurnally-varying. :!: To be consistent with the changes in net surface heat fluxes I think that ana_srflux.h should be modified to something like this:

Code: Select all

!
!  SRFLX is reset on each time step in subroutine SET_DATA which 
!  interpolates values in the forcing file to the current date.
!  This DIURNAL_SRFLUX option is provided so that SRFLX values
!  corresponding to a greater or equal daily average can be modulated
!  by the local length of day to produce a diurnal cycle with the 
!  same daily average as the original data.  This approach assumes 
!  the net effect of clouds is incorporated into the SRFLX data. 
!
!  Normalization factor = INTEGRAL{ABS(a+b*COS(t)) dt} from 0 to 2*pi 
!                       = (a*ARCCOS(-a/b)+SQRT(b**2-a**2))/pi
!  
#  ifndef BULK_FLUXES
!
!   Before calculating the diurnal part of the shortwave, remove the 
!   original values of shortwave radiation from the net surface heat
!   flux.  The adjusted value will be added back in at the end.
!
          stflx(i,j,itemp)=stflx(i,j,itemp)-srflx(i,j)
#  endif
          IF (ABS(cff1).gt.ABS(cff2)) THEN
            IF (cff1*cff2.gt.0.0_r8) THEN
              cff=cff1*2.0_r8*pi                       ! All day case
              srflx(i,j)=MAX(0.0_r8,                                    &
     &                       srflx(i,j)/cff*                            &
     &                       (cff1+cff2*COS(Hangle-lonr(i,j)*deg2rad)))
            ELSE
              srflx(i,j)=0.0_r8                        ! All night case
            END IF
          ELSE
            cff=(cff1*ACOS(-cff1/cff2)+SQRT(cff2*cff2-cff1*cff1))/pi
            srflx(i,j)=MAX(0.0_r8,                                      &
     &                     srflx(i,j)/cff*                              &
     &                     (cff1+cff2*COS(Hangle-lonr(i,j)*deg2rad)))
          END IF
#  ifndef BULK_FLUXES
          stflx(i,j,itemp)=stflx(i,j,itemp)+srflx(i,j)
#  endif
# endif
        END DO
      END DO
Which should adjust the net surface heat flux such that the shortwave radiation part of Qnet is now diurnally-varying. 8)

Thanks for any thoughts or suggestions.

Austin

User avatar
wilkin
Posts: 879
Joined: Mon Apr 28, 2003 5:44 pm
Location: Rutgers University
Contact:

Re: Adjust heat flux with diurnal cycle

#2 Unread post by wilkin »

On your concern (1) I believe this is being done correctly. The sequence of fractional swrad(...,k) values from k = N, N-1, ... 0 should not sum to the net radiation (your e.g. 600 W/m2). This is because these values are the amount of radiation passing through the interfaces of the cells. They do not represent the amount of heat going in to each cell. Internal heating only arises when these fluxes have a divergence.

The amount of radiation that goes in to heating cell k is the difference of what comes in at the top face swrad(i,j,k) minus what goes out the bottom face swrad(i,j,k-1). (If this were optically perfectly transparent water the two fluxes would be the same - both 600 W/m2 - and radiation would simply pass through without heating the water).

To sum the total amount of heating in the water column add these up over k.

sum over k from k = N...1 (swrad(i,j,k)-swrad(i,j,k-1)) = swrad(N) - swrad(0)

Provided there is sufficient absorption that no radiation reaches the seafloor, the heating is simply the surface radiation swrad(N) or your 600 W/m2.

Now on concern (2) I think you might be right, though I'm surprised this has never jumped out as obvious in idealized 1-D examples. I have a version of the BIO_TOY test (without and bio) that I can run to look at this. Thanks for flagging the issue - and proposing a solution.
John Wilkin: DMCS Rutgers University
71 Dudley Rd, New Brunswick, NJ 08901-8521, USA. ph: 609-630-0559 jwilkin@rutgers.edu

austinctodd

Re: Adjust heat flux with diurnal cycle

#3 Unread post by austinctodd »

Hi John,

Thanks for the clarification Re: (1).
To sum the total amount of heating in the water column add these up over k.

sum over k from k = N...1 (swrad(i,j,k)-swrad(i,j,k-1)) = swrad(N) - swrad(0)
That does make more sense, and assuming that the solar shortwave at the surface is the full amount, the sum does equal swrad(N) - swrad(0). I double-checked that the sum of these interface radiation values is equal to swrad (600 W/m2 in my example) if I assume no bottom swrad. Thanks.

As for (2), perhaps you haven't seen evidence of this in your BIO_TOY case because the total heating over one day should be the same with or without the diurnal cycle. Plus, the shortwave radiation is only a part of the net heat flux. So maybe the overall effect is small, but it should probably be adjusted for consistency.

Cheers,
Austin

User avatar
wilkin
Posts: 879
Joined: Mon Apr 28, 2003 5:44 pm
Location: Rutgers University
Contact:

Re: Adjust heat flux with diurnal cycle

#4 Unread post by wilkin »

As for (2), perhaps you haven't seen evidence of this in your BIO_TOY case because the total heating over one day should be the same with or without the diurnal cycle. Plus, the shortwave radiation is only a part of the net heat flux. So maybe the overall effect is small, but it should probably be adjusted for consistency.
Yes, the overall 24-hour effect should be neutral, but if you are correct there would be an unrealistic manifestation of surface layer cooling during part of the diurnal cycle.

I looked at this last night but the way I implemented the diurnal cycle in my 1-D TOY case by-passes the default code for DIURNAL_SRFLUX so I need to be a bit careful about how I evaluate this to get a robust result.
John Wilkin: DMCS Rutgers University
71 Dudley Rd, New Brunswick, NJ 08901-8521, USA. ph: 609-630-0559 jwilkin@rutgers.edu

Post Reply