WVFixedAmplitudeForcing
Fixed amplitude forcing at the natural frequency of each mode
Declaration
WVFixedAmplitudeForcing < WVForcingOverview
The fixed-amplitude forcing maintains the amplitude of the wave or geostrophic features, while allowing energy and enstrophy to flux from the feature.
As a simple example, one can set an internal wave mode with amplitude 1 cm/s, and that mode will continue to oscillate and maintain its amplitude. The wave will participate in all the nonlinear dynamics, but its amplitude will be maintained/restored at each time step.
There are several different ways to write this style of forcing mathematically. The equations of motion, written in the spectral domain, take the following form
\[\frac{\partial}{\partial t} A^{klj} = \sum_i F_i^{klj}\]where \(F_i\) are the different forces applied. The transform computes the spatial forcing (which includes nonlinear advection), the spectral forcing, followed by the spectral amplitude forcing. The WVFixedAmplitudeForcing is a spectral amplitude forcing and is thus comptued last. This forcing thus simply adds back the flux the from the spatial and spectral forcing, so that \(\frac{\partial}{\partial t} A^{klj} =0\) for the modes in question.
In practice, of course, we simply restore the amplitudes to their desired value at the last step, e.g.,
A0(self.A0_indices) = self.A0bar
Notes
- This approach is commonly used in forced-dissipative turbulence to maintain some fixed forcing.
- Every mode that is used in
WVFixedAmplitudeForcingessentially removes a degree-of-freedom from the model, as that mode is no longer free to fully evolve. Thus when you pass the forcing wave-vortex coefficients, e.g.A0, it does not fix the amplitude of coefficients that are small to avoid removing degrees-of-freedom. - One must also be careful not to forcing in the damping region. If you have some sort of small scale damping enabled, you probably do not want to be forcing at those smallest scales.
Usage
To setup a geostrophic mean flow,
% initialize a transform
wvt = WVTransformHydrostatic([Lx, Ly, Lz], [Nx, Ny, Nz], N2=@(z) N0*N0*exp(2*z/L_gm),latitude=33);
% set a geostrophic mode, with no flow at the bottom boundary
wvt.setGeostrophicModes(k=0,l=5,j=1,phi=0,u=u0);
wvt.setGeostrophicModes(k=0,l=5,j=0,phi=0,u=max(max(wvt.u(:,:,1))));
% pass the vortex coefficients to the forcing
force = WVFixedAmplitudeForcing(wvt,name="geostrophic-mean-flow");
force.setGeostrophicForcingCoefficients(wvt.A0);
wvt.addForcing(force);
In practice you can initialize the flow in any way you want with any arbitrary structure, and then pass those coefficients to the forcing. The WVFixedAmplitudeForcing looks for coefficients that are small and ignores those.
Topics
- Initialization
WVFixedAmplitudeForcinginitialize the WVFixedAmplitudeForcing
- Setting the forcing
setGeostrophicForcingCoefficientsset amplitude to fix for the geostrophic part of the flowsetNarrowBandGeostrophicForcingsets a narrow waveband of geostrophic forcing for forced-dissipative modelingsetWaveForcingCoefficientsset the amplitude to fix for the wave part of the flow
- Properties
A0_indicesindices of modes in theA0matrix to fixA0baramplitudes of the fixed modes in theA0matrixAm_indicesindices of modes in theAmmatrix to fixAmbaramplitudes of the fixed modes in theAmmatrixAp_indicesindices of modes in theApmatrix to fixApbaramplitudes of the fixed modes in theApmatrix
- CAAnnotatedClass requirement
classRequiredPropertyNamesReturns the required property names for the class