Skip to content
Ricardo Torres edited this page May 23, 2023 · 2 revisions

Some notes on semi-implicit usage Contributed by Karsten Lettmann from Universitaet Oldenburg

The semi-implicit time-stepping method has been implemented by Zhigang Lai as part of his PhD project (see e.g. Lai et al., 2010 ) and follows the theory e.g. described in Casulli and Cattani (1994). Many details of the method are provided in the FVCOM manual or these papers and the references therein. Here, we concentrate on the practical application and parameter settings.

The central parameter, that controls the the stability and accuracy of the method is θ or IFCETA as it is called within the *_run.nml - file (see below). This parameter lies in the range between θ = 0.0, which corresponds to a fully explicit run, and θ = 1.0, which denotes a fully implicit run. All values in between might be called semi-implicit with θ = 0.5 (similar to the Crank-Nicolson scheme) resulting in the largest accuracy. The stability properties, we are after, are obtained for θ >= 0.5 with a value of θ = 1.0 having the best stability properties. However, according to Casulli and Cattani (1994), a value of θ close to 1.0 might result in a large damping of surface waves. Therefore, the value of θ = 0.55 proposed by the FVCOM developers might be best compromise between accuracy and stability.

In order to increase accuracy (and possibly also stability) for other processes than pressure terms within the momentum or tracer equation, the FVCOM developers have implemented a multi-step or multistage method that can proceed the momentum and tracer equation in smaller explicit sub-time-steps for one larger time-step of the surface equation. (Here, a reference might be good to have.)

According to the FVCOM manual, some settings have to be done within the *_run.nml – file. Firstly, within the NML_INTEGRATION section, the EXTSTEP_SECONDS and ISPLIT are replaced by just one parameter INTSTEP_SECONDS.

Secondly, one has to add the following section to the file:

&NML\_SEMI
IFCETA = 0.55
BEDF = 1.000000
KSTAGE\_UV = 1
KSTAGE\_TE = 1
KSTAGE\_TS = 1
MSTG = slow
/

IFCETA:

Implicit factor for the surface pressure gradient term, ifceta = 0 for a fully explicit time stepping method; ifceta=1 for a fully implicit time stepping method. A recommended value is 0.55.

BEDF:

Factor to enforce a zero normal flux condition at a solid wall boundary in the free surface matrix inversion. Factor can be specified from a value of "1" (no allowing the flux across a solid wall boundary) to a value of "0" (allowing the flux across a solid wall boundary). So, if you want a similar behaviour to explicit runs without ghost cells, you might keep this value to one (please see also the comment below on solid boundary conditions).

KSTAGE\_UV:

Factor to set up the Nth step multistage explicit advection scheme to calculate the advection terms when a semi-implicit solver is selected. "1" represents the 1st stage scheme which is identical to an explicit advection scheme, "2"; is the 2nd stage scheme, and "N" is the Nth stage scheme. Increasing the stage number allows a user to choose a longer time step with a sacrifice in computational efficiency at each integration loop. The default setup is "1".

KSTAGE\_TE:

Factor to set up the Nth step multistage explicit advection scheme to solve the turbulence advection terms in the turbulence closure models when a semi-implicit scheme is selected. See 'KSTAGE_UV' for explanation on how a factor could be selected. A default setup is "1".

KSTAGE\_TS:

Factor to set up the Nth step multistage explicit advection scheme to solve the advection terms in temperature or salinity equations when a semi-implicit scheme is selected. See 'KSTAGE_UV' for explanation on how a factor could be selected. The default setup is "1".

MSTG:

A flag to control the computational efficiency of the multistage advection scheme. Two options: 1) "slow" and 2) "fast";. When "fast" is chosen, the solver will try to use a novel way to speed up the multistage explicit advection scheme in the momentum equation. This option still needs more testing, so we don't recommend a new user to use it. The default selection is "slow".

Some experiences and suggestions:

  • In principle, it might be possible to generate explicit simulations with the semi-implicit method by setting the IFCETA = 0.0. The results should be equal or very similar to results obtained directly via the explicit method. However, as the specific implementation of the two methods is different, so there are reasons why one cannot expect the results to match perfectly. E.g. as the explicit method uses the Runge-Kutta time-stepping for the external mode, sponge layers might be applied more often in the explicit method than in semi-implicit method. So, sponge layers definitively can cause differences between results of explicit runs and results obtained with explicit parameter settings in semi-implicit simulations. In addition, ghost cells are not implemented in the semi-implicit method, yet. Therefore, when used in explicit simulations, they are a cause for differences, as well.

  • Even if larger time steps work for the surface equation, they might cause problems in advective terms of momentum or tracers. However, it seems that momentum advection is more prone to suffer from instabilities. Therefore, it might be helpful to use KSTAGE_UV values larger than one to stabilize the code. The time gain then is obtained by keeping KSTAGE_TS and KSTAGE_TE to one. E.g., a possible setting might be KSTAGE_UV = 3 (...5) while KSTAGE_TE = 1 and KSTAGE_TS = 1.

  • Although the semi-implicit option might allow larger time steps, the results will very likely loose accuracy compared to explicit simulations with smaller time steps. So, the time step should be selected wisely.

  • In the present FVCOM version (4.4.2) the solid boundary condition is set such that normal velocities to boundaries are allowed in case the velocity is off-shore. On-shore velocities are set to zero.

Literature:

Casulli, V. and E. Cattani. 1994. Stability, accuracy and efficiency of a semi-implicit method for three-dimensional shallow water flow. Computers and Mathematics with Application, 27: 99-112.

Lai, Z., C. Chen, G. W. Cowles, and R. C. Beardsley (2010), A nonhydrostatic version of FVCOM: 1.Validation experiments, J. Geophys. Res., 115, C11010, doi:10.1029/2009JC005525.

Clone this wiki locally