source: (hydro.coriol.f90) [ c_92_rp1 release ]

HYDRODYNAMICS This routine computes the tendency to u and v momentum within
a grid box by the Coriolis effect and by advection of momentum
through the vector invariant form:

{partial v }over{ partial t } = -(f + %zeta) times v - nabla K

where v is the vector velocity, f is the vertical compontent of the Coriolis parameter, %zeta is the vertical component of the vorticity and K = v^2/2

The tendency returned is partial v / partial t .

and is not mass- nor grid area-weighted. The units are [velocity] / sec, where it is expected that the routine is called with velocity in meters/second and mass in dynamic meters.

GHOSTING

The input state is assumed fully ghosted. Output tendencies are NOT ghosted. GHOST will only be called internally if there are fewer than 2 shadow (or halo) rows around the computational core.

The C-grid vector invariant form is done as in Arakawa & Hsu (Mon. We. Rev., 1990) as a second-order scheme.

Vorticity is estimated at the north-east corner of the grid box from the four surrounding velocity points. If no-slip conditions are used, then the estimate of vorticity with zero velocities in land is sufficient. If free-slip conditions are used, the vorticity is set to zero if any of the four surrounding mass points are in land.

Use the following trick to load up U and V over the required range of i1-1:i2+2, j1-1:j2+2, regardless of the number of shadows in the input data. Note that if xshadows >= 2 and yshadows >= 2, then no ghosting is needed inside this routine. In general, 1 = i1-xshadows im = i2 + xshadows, 1 = j1-yshadows , and jm = j2+xshadows

In practice, I recommend at least 2 shadows throughout the code, as this is sufficient for nearly all uses.

Make a new mask which indicates where we have mass in the layer.

The vector invariant treatment was originally developed for the C-grid, and is a second-order Arakawa-Hsu style formulation. The B-grid treatment is not common, but was introduced in OPYC by Josef Oberhuber.

The B-grid relative vorticity was originally computed as

overline{ (%zeta / H) } times v H.

With vanishing layers, this seems to have caused trouble. Since u and v are co-located, we can use

overline{ %zeta } times v

This "works" but conservation properties for either scheme are not fully documented.

Kinetic energy is computed at the u points, then averaged to the h points, and differenced as in the pressure.

TYPE (T_POSEIDON_GRID) :: g | Poseidon Grid object |

INTEGER :: im | Dimensions |

INTEGER :: jm | Dimensions |

INTEGER :: km | Dimensions |

LOGICAL :: noslip | If true, use no slip bcs, otherwise use free slip |

LOGICAL :: has_external_mode | does model have bottom? |

REAL :: H(IM,JM,KM) | Layer thickness at primary points (m) |

REAL :: Hu(IM,JM,KM) | Layer thickness at u points (m) |

REAL :: Hv(IM,JM,KM) | Layer thickness at u points (m) |

REAL :: Uin(IM,JM,KM) | Zonal velocity (m/s) |

REAL :: Vin(IM,JM,KM) | Meridional velocity (m/s) |

REAL :: dUdt(IM,JM,KM) | Velocity tendencies (m/sec^2) |

REAL :: dVdt(IM,JM,KM) | |

REAL :: Ave_du(IM,JM) | Vertical average of velocity tendencies (m/sec^2) |

REAL :: Ave_dv(IM,JM) | |

REAL(REALHIGH) :: Mass_fluxes(IM,JM,KM,2) | Zonal mass fluxes used in continuity (m^3/s) |

TYPE (T_DIAGNOSTICS) :: diag | |

REAL :: dtime | Time step in seconds (used only to weight diagnostics) |

INTEGER :: PV_scheme | The scheme to use for PV calculation one of pvsDefault, pvsSadourny, pvsArakawa_Hsu pvsOberhuber (pvsSuarez and pvsMOM are not yet implemented, but planned)==========================================================================> Local Variables |

call CORIOL(g,im,jm,km,noslip,has_external_mode,H,Hu,Hv,Uin,Vin,dUdt,dVdt,[Ave_du],&

[Ave_dv], [Mass_fluxes], [diag], [dtime], [PV_Scheme])

`INTENT(IN) :: g,im,jm,km,noslip,has_external_mode,H,Hu,Hv,Uin,Vin,Mass_fluxes,dtime,PV_scheme`

`INTENT(OUT) :: Ave_du,Ave_dv`

Legend: | INTENT(INOUT) | INTENT(IN) | INTENT(OUT) | [OPTIONAL] |

Subroutines | Parameters | Variables | Use |

Poseidon Ocean Model (Release: c_92_rp1 ) Documentation automation by Paul Schopf's DocFort Perl scripts.