hypervisc_strict_2nd

Module

Description

$Id$

This module applies a sixth order hyperviscosity to the equation of motion (following Haugen & Brandenburg 2004). This hyperviscosity ensures that the energy dissipation rate is positive define everywhere.

The rate of strain tensor

S^(3) = (-nab^2)^2*S

is a high order generalisation of the first order rate of strain tensor

2*S_ij = u_i,j + u_j,i - 2/3*delta_ij*div(u)

Spatial derivatives are accurate to second order.

** AUTOMATIC CPARAM.INC GENERATION ************************ Declare (for generation of cparam.inc) the number of f array variables and auxiliary variables added by this module

CPARAM logical, parameter :: lhyperviscosity_strict=.true.

MVAR CONTRIBUTION 0 MAUX CONTRIBUTION 3


Quick access

Variables:

del2_2nd, del2_2nd_nof, del2v_2nd, der2_2nd, der2_2nd_nof, der_2nd, der_2nd_nof, div_2nd, grad_2nd, graddivu_2nd

Routines:

hyperviscosity_strict(), register_hypervisc_strict()

Needed modules

Variables

  • hypervisc_strict/del2_2nd [private]
  • hypervisc_strict/del2_2nd_nof [private]
  • hypervisc_strict/del2v_2nd [private]
  • hypervisc_strict/der2_2nd [private]
  • hypervisc_strict/der2_2nd_nof [private]
  • hypervisc_strict/der_2nd [private]
  • hypervisc_strict/der_2nd_nof [private]
  • hypervisc_strict/div_2nd [private]
  • hypervisc_strict/grad_2nd [private]
  • hypervisc_strict/graddivu_2nd [private]

Subroutines and functions

subroutine  hypervisc_strict/register_hypervisc_strict()

Set up indices for hyperviscosity auxiliary slots.

Use :

farraymanager

Call to:

svn_id()

subroutine  hypervisc_strict/hyperviscosity_strict(f)

Apply momentum-conserving, symmetric, sixth order hyperviscosity with positive definite heating rate (see Haugen & Brandenburg 2004).

The rate of strain tensor of order 3 is defined as:

/-1/3*div(u)+dux/dx 1/2*(dux/dy+duy/dx) 1/2*(dux/dz+duz/dx) | |

S^(3)=(d2)^2 |1/2*(dux/dy+duy/dx) -1/3*div(u)+duy/dy 1/2*(duy/dz+duz/dy) |

1/2*(dux/dz+duz/dx) 1/2*(duy/dz+duz/dy) -1/3*div(u)+2*duz/dz/

where d2 is the Laplacian operator d2=(d^2/dx^2+d2/dy^2+d2/dz^2).

To avoid communicating ghost zones after each operator, we use derivatives that are second order in space.

24-nov-03/nils: coded

Parameters:

f (mx,my,mz,mfarray) [real]

Use :

sharedvariables (get_shared_variable()), sub