where srflx is rescaled?

General scientific issues regarding ROMS

Moderators: arango, robertson

Post Reply
Message
Author
andreykoch

where srflx is rescaled?

#1 Unread post by andreykoch »

In the Nonlinear/npzd_Powell.h the shortwave radiation flux srflx is given in [gradC*m/s] and is being rescaled back to [W/m2] to compute photosynthetically available radiation PARsur:
#ifdef CONST_PAR
!
! Specify constant surface irradiance a la Powell and Spitz.
!
PARsur(i)=158.075_r8
#else
PARsur(i)=PARfrac(ng)*srflx(i,j)*rho0*Cp
#endif
I have a hard time finding the place in the code where srflx is scaled to [gradC*m/s] from its proper units [W/m2].
I realize that somewhere it is multiplied by 1/(rho0*Cp) as it's done in Nonlinear/bulk_flux.F with Srad variable.

It would be a big help if someone could tell me that place in the code.

Andrey

User avatar
arango
Site Admin
Posts: 1367
Joined: Wed Feb 26, 2003 4:41 pm
Location: DMCS, Rutgers University
Contact:

Re: where srflx is rescaled?

#2 Unread post by arango »

This is very simple. Check inp_par.F around line 570 we have:

Code: Select all

!
!  Convert momentum stresses and tracer flux scales to kinematic
!  Values. Recall, that all the model fluxes are kinematic.
!
        cff=1.0_r8/rho0
        Fscale(idUsms,ng)=cff*Fscale(idUsms,ng)
        Fscale(idVsms,ng)=cff*Fscale(idVsms,ng)
        Fscale(idUbms,ng)=cff*Fscale(idUbms,ng)
        Fscale(idVbms,ng)=cff*Fscale(idVbms,ng)
        Fscale(idUbrs,ng)=cff*Fscale(idUbrs,ng)
        Fscale(idVbrs,ng)=cff*Fscale(idVbrs,ng)
        Fscale(idUbws,ng)=cff*Fscale(idUbws,ng)
        Fscale(idVbws,ng)=cff*Fscale(idVbws,ng)
        Fscale(idUbcs,ng)=cff*Fscale(idUbcs,ng)
        Fscale(idVbcs,ng)=cff*Fscale(idVbcs,ng)
        cff=1.0_r8/(rho0*Cp)
        Fscale(idTsur(itemp),ng)=cff*Fscale(idTsur(itemp),ng)
        Fscale(idTbot(itemp),ng)=cff*Fscale(idTbot(itemp),ng)
        Fscale(idSrad,ng)=cff*Fscale(idSrad,ng)
        Fscale(idLdwn,ng)=cff*Fscale(idLdwn,ng)
        Fscale(idLrad,ng)=cff*Fscale(idLrad,ng)
        Fscale(idLhea,ng)=cff*Fscale(idLhea,ng)
        Fscale(idShea,ng)=cff*Fscale(idShea,ng)
        Fscale(iddQdT,ng)=cff*Fscale(iddQdT,ng)
      END DO
Notice that during reading all the input fields are multiplied by the scale factor Fscale. In this case, Fscale(idTsur(itemp),ng) is used. The reason why this is done here and not in varinfo.dat is that the value of rho0 is not known because the input file ocean.in has not been read yet. Recall that this parameter is set by the user.

andreykoch

Re: where srflx is rescaled?

#3 Unread post by andreykoch »

Thank you for your reply. Then, could you point out where in the code Fscale(idSrad,ng) becomes srflx?

Post Reply