Hi, I just want to clarify the units used for the biharmonic mixing coefficients. The constants specified for VISC4 and TNU4 have units of m^4 s^-1 in the .in-file.
However, I noticed that in mod_scalars.F, visc4 and tnu4 are described as being the 'square root lateral biharmonic constant mixing coefficient (m^2 s^-1/2)'. Also, if I understand correctly, visc4_p and visc4_r are set equal to visc4 in mod_mixing.F. So, is the square root of VISC4 and TNU4 taken somewhere in the code when setting visc4_p, visc4_r, diff4?
On a related note, I'm interested in specifying increased horizontal mixing in a sponge layer with ana_hmixcoef. In the ADRIA02 example, visc2_r, visc2_p, and diff2 = 0 outside of the sponge layer. With biharmonic mixing coefficients, if I specify VISC4 and TNU4 in the model, do I also have to set visc4_r, visc4_p, diff4 explicitly in this file outside of the sponge layer? And do I have to make sure to take the square root of visc4 to get the correct units for visc4_r, visc4_p, diff4?
Thank you so much for clearing up my confusion!
-Jessica
visc4, tnu4 clarification
- arango
- Site Admin
- Posts: 1367
- Joined: Wed Feb 26, 2003 4:41 pm
- Location: DMCS, Rutgers University
- Contact:
Re: visc4, tnu4 clarification
Yes, the squared-root of the biharmonic coefficients is done in inp_par.F. You will see statements like:
This is done so each harmonic term is multiply by its viscosity/diffusion coefficient. Currently, we allow the nonlinear, tangent, representer, and adjoint models to have different horizontal mixing coefficients. The associated arrays are initialized in ini_hmixcoef.F which is called during initialization.
If you want a sponge layer in your application with biharmonic mixing, you need to do this in visc4_r, visc4_p, and diff4. Follow the example for the harmonic case in ana_hmixcoef.h.
Code: Select all
DO ng=1,Ngrids
!
! Take the square root of the biharmonic coefficients so it can
! be applied to each harmonic operator.
!
nl_visc4(ng)=SQRT(ABS(nl_visc4(ng)))
#ifdef ADJOINT
ad_visc4(ng)=SQRT(ABS(ad_visc4(ng)))
#endif
#if defined TANGENT || defined TL_IOMS
tl_visc4(ng)=SQRT(ABS(tl_visc4(ng)))
#endif
tkenu4(ng)=SQRT(ABS(tkenu4(ng)))
END DO
...
DO ng=1,Ngrids
DO itrc=1,NAT+NPT
nl_tnu4(itrc,ng)=SQRT(ABS(nl_tnu4(itrc,ng)))
#ifdef ADJOINT
ad_tnu4(itrc,ng)=SQRT(ABS(ad_tnu4(itrc,ng)))
#endif
#if defined TANGENT || defined TL_IOMS
tl_tnu4(itrc,ng)=SQRT(ABS(tl_tnu4(itrc,ng)))
#endif
END DO
END DO
If you want a sponge layer in your application with biharmonic mixing, you need to do this in visc4_r, visc4_p, and diff4. Follow the example for the harmonic case in ana_hmixcoef.h.
Re: visc4, tnu4 clarification
Great- thanks for letting me know!
-Jessica
-Jessica
Re: visc4, tnu4 clarification
In the ana_hmixcoef.h, should the following code be deleted, because they put zero to the interior domain?arango wrote: The associated arrays are initialized in ini_hmixcoef.F which is called during initialization.
If you want a sponge layer in your application with biharmonic mixing, you need to do this in visc4_r, visc4_p, and diff4. Follow the example for the harmonic case in ana_hmixcoef.h.
Code: Select all
DO j=MAX(JstrR,7),JendR
visc2_r(i,j)=0.0_r8
visc2_p(i,j)=0.0_r8
END DO
- arango
- Site Admin
- Posts: 1367
- Joined: Wed Feb 26, 2003 4:41 pm
- Location: DMCS, Rutgers University
- Contact:
Re: visc4, tnu4 clarification
This is a user routine and you can do what it is appropriate for your application. In this particular example, the interior values were set to zero because the default hyper-diffusive advection scheme was activated. Therefore, no explicit viscosity/diffusion was specified because there is a lot of implicit mixing in them. This depends on your advection scheme. Various of the advection schemes in ROMS do require explicit viscosity/diffusion. In such cases, setting visc2_r, visc2_p, and diff2 outside of the sponge layers is not a good idea for stability.