diff --git a/src/parameterizations/vertical/MOM_opacity.F90 b/src/parameterizations/vertical/MOM_opacity.F90 index 763e141a5a..48d13c9aa7 100644 --- a/src/parameterizations/vertical/MOM_opacity.F90 +++ b/src/parameterizations/vertical/MOM_opacity.F90 @@ -42,7 +42,6 @@ module MOM_opacity real :: PenSW_absorb_Invlen !< The inverse of the thickness that is used to absorb the remaining !! shortwave heat flux when it drops below PEN_SW_FLUX_ABSORB [H ~> m or kg m-2]. - !! FOB !! Lookup tables for Ohlmann solar penetration scheme !! These would naturally exist as private module variables but that is prohibited in MOM6 real :: dlog10chl !< Chl increment within lookup table @@ -52,7 +51,6 @@ module MOM_opacity & a2_lut,& !< Coefficient for band 2 & b1_lut,& !< Exponential decay scale for band 1 & b2_lut !< Exponential decay scale for band 2 - !! FOB integer :: answer_date !< The vintage of the order of arithmetic and expressions in the optics !! calculations. Values below 20190101 recover the answers from the @@ -89,7 +87,6 @@ module MOM_opacity !>@} end type opacity_CS -!! FOB !>@{ Coded integers to specify the opacity scheme integer, parameter :: NO_SCHEME = 0, MANIZZA_05 = 1, MOREL_88 = 2, SINGLE_EXP = 3, DOUBLE_EXP = 4,& & OHLMANN_03 = 5 @@ -100,7 +97,6 @@ module MOM_opacity character*(10), parameter :: OHLMANN_03_STRING = "OHLMANN_03" !< String to specify the opacity scheme character*(10), parameter :: SINGLE_EXP_STRING = "SINGLE_EXP" !< String to specify the opacity scheme character*(10), parameter :: DOUBLE_EXP_STRING = "DOUBLE_EXP" !< String to specify the opacity scheme -!! FOB contains @@ -271,18 +267,16 @@ subroutine opacity_from_chl(optics, sw_total, sw_vis_dir, sw_vis_dif, sw_nir_dir ! use the "blue" band in the parameterizations to determine the e-folding ! depth of the incoming shortwave attenuation. The red portion is lumped ! into the net heating at the surface. -!FOB - ! Adding Ohlmann scheme. Needs sw_total and chl as inputs. Produces 2 penetrating bands. - ! This implementation follows that in CESM-POP using a lookup table in log10(chl) space. - ! The table is initialized in subroutine init_ohlmann and the coefficients are recovered - ! with routines lookup_ohlmann_swpen and lookup_ohlmann_opacity. - ! Note that this form treats the IR solar input implicitly: the sum of partioning - ! coefficients < 1.0. The remainder is non-penetrating and is deposited in first layer - ! irrespective of thickness. The Ohlmann (2003) paper states that the scheme is not valid - ! for vertcal grids with first layer thickness < 2.0 meters. - ! - ! Ohlmann, J.C. Ocean radiant heating in climate models. J. Climate, 16, 1337-1351, 2003. -!!FOB +! Adding Ohlmann scheme. Needs sw_total and chl as inputs. Produces 2 penetrating bands. +! This implementation follows that in CESM-POP using a lookup table in log10(chl) space. +! The table is initialized in subroutine init_ohlmann and the coefficients are recovered +! with routines lookup_ohlmann_swpen and lookup_ohlmann_opacity. +! Note that this form treats the IR solar input implicitly: the sum of partioning +! coefficients < 1.0. The remainder is non-penetrating and is deposited in first layer +! irrespective of thickness. The Ohlmann (2003) paper states that the scheme is not valid +! for vertcal grids with first layer thickness < 2.0 meters. +! +! Ohlmann, J.C. Ocean radiant heating in climate models. J. Climate, 16, 1337-1351, 2003. ! ! Morel, A., Optical modeling of the upper ocean in relation to its biogenous ! matter content (case-i waters)., J. Geo. Res., {93}, 10,749--10,768, 1988. @@ -383,7 +377,6 @@ subroutine opacity_from_chl(optics, sw_total, sw_vis_dir, sw_vis_dif, sw_nir_dir optics%sw_pen_band(n,i,j) = Inv_nbands*sw_pen_tot enddo enddo; enddo - !! FOB case (OHLMANN_03) ! want exactly two penetrating bands. If not, throw an error. if ( nbands /= 2 ) then @@ -408,7 +401,6 @@ subroutine opacity_from_chl(optics, sw_total, sw_vis_dir, sw_vis_dif, sw_nir_dir optics%sw_pen_band(1:2,i,j) = lookup_ohlmann_swpen(chl_data(i,j),optics)*SW_vis_tot endif enddo; enddo - !! FOB case default call MOM_error(FATAL, "opacity_from_chl: CS%opacity_scheme is not valid.") end select @@ -452,7 +444,6 @@ subroutine opacity_from_chl(optics, sw_total, sw_vis_dir, sw_vis_dif, sw_nir_dir optics%opacity_band(n,i,j,k) = optics%opacity_band(1,i,j,k) enddo enddo; enddo - !! FOB case (OHLMANN_03) !! not testing for 2 bands since we did it above do j=js,je ; do i=is,ie @@ -463,7 +454,6 @@ subroutine opacity_from_chl(optics, sw_total, sw_vis_dir, sw_vis_dif, sw_nir_dir optics%opacity_band(1:2,i,j,k) = lookup_ohlmann_opacity(chl_data(i,j),optics) * US%Z_to_m endif enddo; enddo - !! FOB case default call MOM_error(FATAL, "opacity_from_chl: CS%opacity_scheme is not valid.") end select @@ -1070,7 +1060,7 @@ subroutine opacity_init(Time, G, GV, US, param_file, diag, CS, optics) "concentrations are translated into opacities. Currently "//& "valid options include:\n"//& " \t\t MANIZZA_05 - Use Manizza et al., GRL, 2005. \n"//& - " \t\t MOREL_88 - Use Morel, JGR, 1988.", & + " \t\t MOREL_88 - Use Morel, JGR, 1988. \n"//& " \t\t OHLMANN_03 - Use Ohlman, J Clim, 2003.", & default=MANIZZA_05_STRING) if (len_trim(tmpstr) > 0) then @@ -1147,11 +1137,9 @@ subroutine opacity_init(Time, G, GV, US, param_file, diag, CS, optics) elseif (CS%Opacity_scheme == SINGLE_EXP ) then if (optics%nbands /= 1) call MOM_error(FATAL, & "set_opacity: \Cannot use a single_exp opacity scheme with nbands!=1.") - !! FOB elseif (CS%Opacity_scheme == OHLMANN_03 ) then if (optics%nbands /= 2) call MOM_error(FATAL, & "set_opacity: \OHLMANN_03 scheme requires nbands==2") - !! FOB endif call get_param(param_file, mdl, "DEFAULT_ANSWER_DATE", default_answer_date, & @@ -1232,7 +1220,6 @@ subroutine opacity_init(Time, G, GV, US, param_file, diag, CS, optics) end subroutine opacity_init -!! FOB !> Initialize the lookup table for Ohlmann solar penetration scheme. !! Step size in Chl is a constant in log-space to make lookups easy. !! Step size is fine enough that nearest neighbor lookup is sufficiently @@ -1393,7 +1380,6 @@ function lookup_ohlmann_opacity(chl,optics) result(B) return end function lookup_ohlmann_opacity -!! FOB subroutine opacity_end(CS, optics) type(opacity_CS) :: CS !< Opacity control structure @@ -1409,12 +1395,10 @@ subroutine opacity_end(CS, optics) deallocate(optics%max_wavelength_band) if (allocated(optics%min_wavelength_band)) & deallocate(optics%min_wavelength_band) -!! FOB if (allocated(optics%a1_lut)) deallocate(optics%a1_lut) if (allocated(optics%a2_lut)) deallocate(optics%a2_lut) if (allocated(optics%b1_lut)) deallocate(optics%b1_lut) if (allocated(optics%b2_lut)) deallocate(optics%b2_lut) -!! FOB end subroutine opacity_end !> \namespace mom_opacity