MOM_tracer_advect_schemes.F90

1! This file is part of MOM6, the Modular Ocean Model version 6.
2! See the LICENSE file for licensing information.
3! SPDX-License-Identifier: Apache-2.0
4
5!> This module contains constants for the tracer advection schemes.
7
8use mom_error_handler, only : mom_error, fatal
9
10implicit none ; public
11
12! The following are public parameter constants
13integer, parameter :: advect_plm = 0 !< PLM advection scheme
14integer, parameter :: advect_ppmh3 = 1 !< PPM:H3 advection scheme
15integer, parameter :: advect_ppm = 2 !< PPM advection scheme
16
17!> Documentation for tracer advection schemes
18character(len=*), parameter :: traceradvectionschemedoc = &
19 " PLM - Piecewise Linear Method\n"//&
20 " PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order)\n"// &
21 " PPM - Piecewise Parabolic Method (Colella-Woodward)"
22
23contains
24
25!> Numeric value of tracer_advect_scheme corresponding to scheme name
26subroutine set_tracer_advect_scheme(scheme_value, advect_scheme_name)
27 character(len=*), intent(in) :: advect_scheme_name !< Name of the advection scheme
28 integer, intent(out) :: scheme_value !< Integer value of the advection scheme
29
30 select case (trim(advect_scheme_name))
31 case ("")
32 scheme_value = -1
33 case ("PLM")
34 scheme_value = advect_plm
35 case ("PPM:H3")
36 scheme_value = advect_ppmh3
37 case ("PPM")
38 scheme_value = advect_ppm
39 case default
40 call mom_error(fatal, "set_tracer_advect_scheme: "//&
41 "Unknown TRACER_ADVECTION_SCHEME = "//trim(advect_scheme_name))
42 end select
43end subroutine set_tracer_advect_scheme
44