Skip to content

Commit 1a59f92

Browse files
committed
wip - running shortwave and longwave solver with developing interface
1 parent e21ed29 commit 1a59f92

File tree

2 files changed

+52
-13
lines changed

2 files changed

+52
-13
lines changed

src/Radiation/gray_breezy.jl

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
using RRTMGP.Optics: GrayOpticalThicknessSchneider2004
2-
using RRTMGP.Parameters: RRTMGPParameters
32
using RRTMGP.AtmosphericStates: GrayAtmosphericState
4-
using RRTMGP.RTE: TwoStreamLWRTE
5-
using RRTMGP.RTESolver: solve_lw!
3+
using RRTMGP.RTE: TwoStreamLWRTE, TwoStreamSWRTE
4+
using RRTMGP.RTESolver: solve_lw!, solve_sw!
65

76
using Oceananigans
87
using Oceananigans: field
@@ -17,14 +16,26 @@ DA = array_type(architecture)
1716
Nx, Ny, Nz = 1, 1, 64
1817
Lx, Ly, Lz = 1, 20_000_000, 1_000 # domain size in meters
1918
Nbnd, Ngpt = 1, 1 # gray model
19+
deg2rad = FT/ 180)
20+
2021
lw_inc_flux = nothing # no incoming longwave flux
21-
sfc_emissivity = 1
22+
sw_inc_flux = FT(1407.679) # no incoming shortwave flux
23+
sw_inc_flux_diffuse = nothing
24+
zenith_angle = FT(52.95) # zenith angle in degrees
25+
sfc_emissivity = FT(1) # surface emissivity
26+
albedo_direct = FT(0.1) # surface albedo (direct)
27+
albedo_diffuse = FT(0.1) # surface albedo (diffuse)
28+
2229
planet_radius = 6_371_000
2330
p_surface = 100_000 # surface pressure (Pa)
2431
p_top = 9_000 # top of atmosphere pressure / emission level (Pa)
2532
lat_center = 0
2633
optical_properties = GrayOpticalThicknessSchneider2004(FT)
27-
34+
# cos_zenith .= cos(deg2rad * 52.95) # corresponding to ~52.95 deg zenith angle
35+
# toa_flux .= FT(1407.679)
36+
# sfc_alb_direct .= FT(0.1)
37+
# sfc_alb_diffuse .= FT(0.1)
38+
# inc_flux_diffuse = nothing
2839
# Grid setup, we also need to say where on the planet our box is located
2940
grid = RectilinearGrid(
3041
architecture,
@@ -55,10 +66,28 @@ atmospheric_state = GrayAtmosphericState(
5566

5667
# Set up radiation model
5768
sfc_emission = DA{FT}(undef, Nbnd, Nx, Ny)
69+
sfc_alb_direct = DA{FT}(undef, Nbnd, Nx, Ny)
70+
sfc_alb_diffuse = DA{FT}(undef, Nbnd, Nx, Ny)
71+
cos_zenith = DA{FT}(undef, Nx, Ny)
72+
toa_flux = DA{FT}(undef, Nx, Ny)
73+
lw_toa_inc_flux = nothing
74+
inc_flux_diffuse = nothing
5875
fill!(sfc_emission, FT(sfc_emissivity))
76+
fill!(sfc_alb_direct, FT(albedo_direct))
77+
fill!(sfc_alb_diffuse, FT(albedo_diffuse))
78+
fill!(cos_zenith, FT(cos(deg2rad * zenith_angle)))
79+
fill!(toa_flux, FT(sw_inc_flux))
5980
SLVLW = TwoStreamLWRTE
60-
slv_lw = SLVLW(grid; sfc_emission, lw_inc_flux)
81+
SLVSW = TwoStreamSWRTE
82+
lw_params = (; sfc_emission, lw_inc_flux)
83+
sw_params = (; cos_zenith, toa_flux, sfc_alb_direct, inc_flux_diffuse, sfc_alb_diffuse)
84+
slv_lw = SLVLW(grid; lw_params...)
85+
slv_sw = SLVSW(grid; sw_params...)
6186

62-
# solve the radiation model
63-
solve_lw!(slv_lw, atmospheric_state)
87+
# Solve the LW radiation model
88+
function update_radative_fluxes!(slv_lw, slv_sw, atmospheric_state)
89+
solve_lw!(slv_lw, atmospheric_state)
90+
solve_sw!(slv_sw, atmospheric_state)
91+
end
6492

93+
update_radative_fluxes!(slv_lw, slv_sw, atmospheric_state)

src/Radiation/rrtmgp_interface.jl

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,15 +95,16 @@ function RRTMGP.RTE.TwoStreamLWRTE(
9595
FT = eltype(grid)
9696
Nx, Ny = grid.Nx, grid.Ny
9797
Ncols = Nx * Ny
98+
Nbnd = size(sfc_emission, 1)
9899
grid_params = RRTMGPGridParams(grid)
99100
params = RRTMGPParameters(eltype(grid))
100101
(; context) = grid_params
101102
op = TwoStream(grid_params)
102103
src = SourceLW2Str(grid_params; params)
103-
if lw_inc_flux !== nothing
104-
lw_inc_flux = reshape(lw_inc_flux, 1, Ncols)
105-
end
106-
bcs = LwBCs(reshape(sfc_emission, 1, Ncols), lw_inc_flux)
104+
bcs = LwBCs(
105+
reshape(sfc_emission, Nbnd, Ncols),
106+
lw_inc_flux isa Nothing ? nothing : reshape(lw_inc_flux, 1, Ncols)
107+
)
107108
fluxb = FluxLW(grid_params)
108109
flux = FluxLW(grid_params)
109110
return TwoStreamLWRTE(context, op, src, bcs, fluxb, flux)
@@ -134,11 +135,20 @@ function RRTMGP.RTE.TwoStreamSWRTE(
134135
inc_flux_diffuse,
135136
sfc_alb_diffuse,
136137
)
138+
Nx, Ny = grid.Nx, grid.Ny
139+
Ncols = Nx * Ny
140+
Nbnd = size(sfc_alb_direct, 1)
137141
grid_params = RRTMGPGridParams(grid)
138142
(; context) = grid_params
139143
op = TwoStream(grid_params)
140144
src = SourceSW2Str(grid_params)
141-
bcs = SwBCs(cos_zenith, toa_flux, sfc_alb_direct, inc_flux_diffuse, sfc_alb_diffuse)
145+
bcs = SwBCs(
146+
reshape(cos_zenith, Ncols),
147+
reshape(toa_flux, Ncols),
148+
reshape(sfc_alb_direct, Nbnd, Ncols),
149+
inc_flux_diffuse isa Nothing ? nothing : reshape(inc_flux_diffuse, Nbnd, Ncols),
150+
reshape(sfc_alb_diffuse, Nbnd, Ncols),
151+
)
142152
fluxb = FluxSW(grid_params)
143153
flux = FluxSW(grid_params)
144154
return TwoStreamSWRTE(context, op, src, bcs, fluxb, flux)

0 commit comments

Comments
 (0)