| 1 |
dgoldberg |
1.4 |
C $Header: /u/gcmpack/MITgcm/pkg/streamice/slope_limiter.F,v 1.2 2013/06/21 20:49:50 jmc Exp $ |
| 2 |
|
|
C $Name: $ |
| 3 |
|
|
|
| 4 |
heimbach |
1.1 |
#include "CPP_OPTIONS.h" |
| 5 |
|
|
|
| 6 |
dgoldberg |
1.3 |
! _RL FUNCTION SLOPE_LIMITER (num, denom) |
| 7 |
|
|
|
| 8 |
|
|
_RL FUNCTION SLOPE_LIMITER (Cr) |
| 9 |
|
|
|
| 10 |
|
|
! _RL num, denom |
| 11 |
heimbach |
1.1 |
! _RL SLOPE_LIMITER |
| 12 |
dgoldberg |
1.3 |
! _RL r |
| 13 |
|
|
_RL Cr |
| 14 |
heimbach |
1.1 |
|
| 15 |
|
|
! used for flux limiting in advective subroutines |
| 16 |
|
|
! Van Leer limiter (source: Wikipedia!) |
| 17 |
|
|
|
| 18 |
dgoldberg |
1.3 |
! if (denom .eq. 0.0) then |
| 19 |
|
|
! SLOPE_LIMITER = 0.0 |
| 20 |
|
|
! elseif (num*denom .le. 0.0) then |
| 21 |
|
|
! SLOPE_LIMITER = 0.0 |
| 22 |
|
|
! else |
| 23 |
|
|
! r = num/denom |
| 24 |
|
|
! SLOPE_LIMITER = (r+abs(r))/(1+abs(r)) |
| 25 |
|
|
! endif |
| 26 |
|
|
|
| 27 |
|
|
SLOPE_LIMITER = max(0.D0,max(min(1.D0,2.D0*Cr), |
| 28 |
|
|
& min(2.D0,Cr))) |
| 29 |
|
|
|
| 30 |
heimbach |
1.1 |
|
| 31 |
|
|
RETURN |
| 32 |
dgoldberg |
1.4 |
END |