Constructs idealized topography from simple functions.
28 type(dyn_horgrid_type),
intent(in) :: G
29 real,
dimension(G%isd:G%ied,G%jsd:G%jed), &
31 type(param_file_type),
intent(in) :: param_file
32 real,
intent(in) :: max_depth
34 character(len=17) :: pname1, pname2
35 character(len=20) :: funcs
36 real,
dimension(20) :: pars
39 integer :: i, j, n, n_funcs
41 call mom_mesg(
" basin_builder.F90, basin_builder_topography: setting topography", 5)
42 call log_version(param_file, mdl, version,
"")
44 do j=g%jsc,g%jec ;
do i=g%isc,g%iec
48 call get_param(param_file, mdl,
"BBUILDER_N", n_funcs, &
49 "Number of pieces of topography to use.", fail_if_missing=.true.)
52 write( pname1,
"('BBUILDER_',i3.3,'_FUNC')" ) n
53 write( pname2,
"('BBUILDER_',i3.3,'_PARS')" ) n
54 call get_param(param_file, mdl, pname1, funcs, &
55 "The basin builder function to apply with parameters "//&
56 trim(pname2)//
". Choices are: NS_COAST, EW_COAST, "//&
57 "CIRC_CONIC_RIDGE, NS_CONIC_RIDGE, CIRC_SCURVE_RIDGE, "//&
59 fail_if_missing=.true.)
61 if (trim(lowercase(funcs)) ==
'ns_coast')
then 62 call get_param(param_file, mdl, pname2, pars(1:5), &
63 "NS_COAST parameters: longitude, starting latitude, "//&
64 "ending latitude, footprint radius, shelf depth.", &
65 units=
"degrees_E,degrees_N,degrees_N,degrees,m", &
66 fail_if_missing=.true.)
67 pars(5) = pars(5) / max_depth
68 do j=g%jsc,g%jec ;
do i=g%isc,g%iec
71 d(i,j) = min( d(i,j), ns_coast(lon, lat, pars(1), pars(2), pars(3), pars(4), pars(5)) )
73 elseif (trim(lowercase(funcs)) ==
'ns_conic_ridge')
then 74 call get_param(param_file, mdl, pname2, pars(1:5), &
75 "NS_CONIC_RIDGE parameters: longitude, starting latitude, "//&
76 "ending latitude, footprint radius, ridge height.", &
77 units=
"degrees_E,degrees_N,degrees_N,degrees,m", &
78 fail_if_missing=.true.)
79 pars(5) = pars(5) / max_depth
80 do j=g%jsc,g%jec ;
do i=g%isc,g%iec
83 d(i,j) = min( d(i,j), ns_conic_ridge(lon, lat, pars(1), pars(2), pars(3), pars(4), pars(5)) )
85 elseif (trim(lowercase(funcs)) ==
'ns_scurve_ridge')
then 86 call get_param(param_file, mdl, pname2, pars(1:5), &
87 "NS_SCURVE_RIDGE parameters: longitude, starting latitude, "//&
88 "ending latitude, footprint radius, ridge height.", &
89 units=
"degrees_E,degrees_N,degrees_N,degrees,m", &
90 fail_if_missing=.true.)
91 pars(5) = pars(5) / max_depth
92 do j=g%jsc,g%jec ;
do i=g%isc,g%iec
95 d(i,j) = min( d(i,j), ns_scurve_ridge(lon, lat, pars(1), pars(2), pars(3), pars(4), pars(5)) )
97 elseif (trim(lowercase(funcs)) ==
'ew_coast')
then 98 call get_param(param_file, mdl, pname2, pars(1:5), &
99 "EW_COAST parameters: latitude, starting longitude, "//&
100 "ending longitude, footprint radius, shelf depth.", &
101 units=
"degrees_N,degrees_E,degrees_E,degrees,m", &
102 fail_if_missing=.true.)
103 pars(5) = pars(5) / max_depth
104 do j=g%jsc,g%jec ;
do i=g%isc,g%iec
107 d(i,j) = min( d(i,j), ew_coast(lon, lat, pars(1), pars(2), pars(3), pars(4), pars(5)) )
109 elseif (trim(lowercase(funcs)) ==
'circ_conic_ridge')
then 110 call get_param(param_file, mdl, pname2, pars(1:5), &
111 "CIRC_CONIC_RIDGE parameters: center longitude, center latitude, "//&
112 "ring radius, footprint radius, ridge height.", &
113 units=
"degrees_E,degrees_N,degrees,degrees,m", &
114 fail_if_missing=.true.)
115 pars(5) = pars(5) / max_depth
116 do j=g%jsc,g%jec ;
do i=g%isc,g%iec
119 d(i,j) = min( d(i,j), circ_conic_ridge(lon, lat, pars(1), pars(2), pars(3), pars(4), pars(5)) )
121 elseif (trim(lowercase(funcs)) ==
'circ_scurve_ridge')
then 122 call get_param(param_file, mdl, pname2, pars(1:5), &
123 "CIRC_SCURVe_RIDGE parameters: center longitude, center latitude, "//&
124 "ring radius, footprint radius, ridge height.", &
125 units=
"degrees_E,degrees_N,degrees,degrees,m", &
126 fail_if_missing=.true.)
127 pars(5) = pars(5) / max_depth
128 do j=g%jsc,g%jec ;
do i=g%isc,g%iec
131 d(i,j) = min( d(i,j), circ_scurve_ridge(lon, lat, pars(1), pars(2), pars(3), pars(4), pars(5)) )
134 call mom_error(fatal,
"basin_builder.F90, basin_builer_topography:\n"//&
135 "Unrecognized function "//trim(funcs))
140 do j=g%jsc,g%jec ;
do i=g%isc,g%iec
142 d(i,j) = d(i,j) * max_depth