Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change LW quadrature angles #282

Merged
merged 8 commits into from
May 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/containerized-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ jobs:
RUN_CMD:
# https://github.com/earth-system-radiation/rte-rrtmgp/issues/194
OMP_TARGET_OFFLOAD: DISABLED
FAILURE_THRESHOLD: 5.8e-2 # 7.e-4
FAILURE_THRESHOLD: 7.e-4

steps:
#
Expand All @@ -72,6 +72,7 @@ jobs:
with:
repository: earth-system-radiation/rrtmgp-data
path: rrtmgp-data
ref: develop
#
# Build libraries, examples and tests (expect success)
#
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/continuous-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
RRTMGP_ROOT: ${{ github.workspace }}
RRTMGP_DATA: ${{ github.workspace }}/rrtmgp-data
RUN_CMD:
FAILURE_THRESHOLD: 5.8e-2 # 7.e-4
FAILURE_THRESHOLD: 7.e-4
steps:
#
# Relax failure thresholds for single precision
Expand All @@ -52,6 +52,7 @@ jobs:
with:
repository: earth-system-radiation/rrtmgp-data
path: rrtmgp-data
ref: develop
#
# Synchronize the package index
#
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/self-hosted-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
RRTMGP_DATA: ${{ github.workspace }}/rrtmgp-data
RTE_KERNELS: ${{ matrix.rte-kernels }}
RUN_CMD: "srun -C gpu -A d56 -p cscsci -t 15:00"
FAILURE_THRESHOLD: 5.8e-2 # 7.e-4
FAILURE_THRESHOLD: 7.e-4
steps:
#
# Checks-out repository under $GITHUB_WORKSPACE
Expand All @@ -62,6 +62,7 @@ jobs:
with:
repository: earth-system-radiation/rrtmgp-data
path: rrtmgp-data
ref: develop
#
# Finalize build environment
#
Expand Down
4 changes: 2 additions & 2 deletions .gitlab/common.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
.dp:
variables:
FPMODEL: DP
FAILURE_THRESHOLD: "5.8e-2"
FAILURE_THRESHOLD: "7.e-4"

.sp:
variables:
Expand All @@ -16,7 +16,7 @@
RRTMGP_DATA: ${CI_PROJECT_DIR}/rrtmgp-data
# Convenience variables:
RRTMGP_DATA_REPO: https://github.com/earth-system-radiation/rrtmgp-data.git
RRTMGP_DATA_TAG:
RRTMGP_DATA_TAG: develop
script:
#
# Build libraries, examples and tests
Expand Down
3 changes: 3 additions & 0 deletions .gitlab/lumi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ include:
.default:
tags:
- lumi
id_tokens:
CI_JOB_JWT:
aud: https://gitlab.com

variables:
SCHEDULER_PARAMETERS: >-
Expand Down
45 changes: 0 additions & 45 deletions examples/rfmip-clear-sky/stage_files.py

This file was deleted.

5 changes: 0 additions & 5 deletions examples/rfmip-clear-sky/stage_files.sh

This file was deleted.

25 changes: 14 additions & 11 deletions rte-frontend/mo_rte_lw.F90
Original file line number Diff line number Diff line change
Expand Up @@ -125,22 +125,25 @@ function rte_lw(optical_props, top_at_1, &
real(wp), dimension(:,:), pointer :: inc_flux_diffuse
! --------------------------------------------------
!
! Weights and angle secants for first order (k=1) Gaussian quadrature.
! Values from Table 2, Clough et al, 1992, doi:10.1029/92JD01419
! after Abramowitz & Stegun 1972, page 921
! Weights and angle secants for "Gauss-Jacobi-5" quadrature.
! Values from Table 1, R. J. Hogan 2023, doi:10.1002/qj.4598
!
integer, parameter :: max_gauss_pts = 4
real(wp), parameter, &
dimension(max_gauss_pts, max_gauss_pts) :: &
gauss_Ds = RESHAPE([1.66_wp, 0._wp, 0._wp, 0._wp, & ! Diffusivity angle, not Gaussian angle
1.18350343_wp, 2.81649655_wp, 0._wp, 0._wp, &
1.09719858_wp, 1.69338507_wp, 4.70941630_wp, 0._wp, &
1.06056257_wp, 1.38282560_wp, 2.40148179_wp, 7.15513024_wp], &
!
! Values provided are for mu = cos(theta); we require the inverse
!
gauss_Ds = 1._wp / &
RESHAPE([0.6096748751_wp, huge(1._wp) , huge(1._wp) , huge(1._wp), &
0.2509907356_wp, 0.7908473988_wp, huge(1._wp) , huge(1._wp), &
0.1024922169_wp, 0.4417960320_wp, 0.8633751621_wp, huge(1._wp), &
0.0454586727_wp, 0.2322334416_wp, 0.5740198775_wp, 0.9030775973_wp], &
[max_gauss_pts, max_gauss_pts]), &
gauss_wts = RESHAPE([0.5_wp, 0._wp, 0._wp, 0._wp, &
0.3180413817_wp, 0.1819586183_wp, 0._wp, 0._wp, &
0.2009319137_wp, 0.2292411064_wp, 0.0698269799_wp, 0._wp, &
0.1355069134_wp, 0.2034645680_wp, 0.1298475476_wp, 0.0311809710_wp], &
gauss_wts = RESHAPE([1._wp, 0._wp, 0._wp, 0._wp, &
0.2300253764_wp, 0.7699746236_wp, 0._wp, 0._wp, &
0.0437820218_wp, 0.3875796738_wp, 0.5686383044_wp, 0._wp, &
0.0092068785_wp, 0.1285704278_wp, 0.4323381850_wp, 0.4298845087_wp], &
[max_gauss_pts, max_gauss_pts])
! ------------------------------------------------------------------------------------
ncol = optical_props%get_ncol()
Expand Down
12 changes: 6 additions & 6 deletions rte-kernels/accel/mo_rte_solver_kernels.F90
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ subroutine lw_solver_noscat_oneangle(ncol, nlay, ngpt, top_at_1, D, weight, &
! Transport is for intensity
! convert flux at top of domain to intensity assuming azimuthal isotropy
!
flux_dn(icol,top_level,igpt) = incident_flux(icol,igpt)/(2._wp * pi * weight)
flux_dn(icol,top_level,igpt) = incident_flux(icol,igpt)/(pi * weight)
end do
end do

Expand Down Expand Up @@ -219,24 +219,24 @@ subroutine lw_solver_noscat_oneangle(ncol, nlay, ngpt, top_at_1, D, weight, &
! Broadband reduction including
! conversion from intensity to flux assuming azimuthal isotropy and quadrature weight
!
call sum_broadband_factor(ncol, nlay+1, ngpt, 2._wp * pi * weight, flux_dn, broadband_dn)
call sum_broadband_factor(ncol, nlay+1, ngpt, 2._wp * pi * weight, flux_up, broadband_up)
call sum_broadband_factor(ncol, nlay+1, ngpt, pi * weight, flux_dn, broadband_dn)
call sum_broadband_factor(ncol, nlay+1, ngpt, pi * weight, flux_up, broadband_up)
!$acc exit data delete( flux_dn,flux_up)
!$omp target exit data map(release:flux_dn,flux_up)
else
!
! Convert intensity to flux assuming azimuthal isotropy and quadrature weight
!
call apply_factor_3D(ncol, nlay+1, ngpt, 2._wp*pi*weight, flux_dn)
call apply_factor_3D(ncol, nlay+1, ngpt, 2._wp*pi*weight, flux_up)
call apply_factor_3D(ncol, nlay+1, ngpt, pi * weight, flux_dn)
call apply_factor_3D(ncol, nlay+1, ngpt, pi * weight, flux_up)
!$acc exit data copyout( flux_dn,flux_up)
!$omp target exit data map(from:flux_dn,flux_up)
end if
!
! Only broadband-integrated Jacobians are provided
!
if (do_Jacobians) then
call sum_broadband_factor(ncol, nlay+1, ngpt, 2._wp * pi * weight, gpt_Jac, flux_upJac)
call sum_broadband_factor(ncol, nlay+1, ngpt, pi * weight, gpt_Jac, flux_upJac)
end if

!$acc end data
Expand Down
12 changes: 6 additions & 6 deletions rte-kernels/mo_rte_solver_kernels.F90
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ subroutine lw_solver_noscat_oneangle(ncol, nlay, ngpt, top_at_1, D, weight, &
! Transport is for intensity
! convert flux at top of domain to intensity assuming azimuthal isotropy
!
gpt_flux_dn(:,top_level) = incident_flux(:,igpt)/(2._wp * pi * weight)
gpt_flux_dn(:,top_level) = incident_flux(:,igpt)/(pi * weight)
!
! Optical path and transmission, used in source function and transport calculations
!
Expand Down Expand Up @@ -220,8 +220,8 @@ subroutine lw_solver_noscat_oneangle(ncol, nlay, ngpt, top_at_1, D, weight, &
!
! Convert intensity to flux assuming azimuthal isotropy and quadrature weight
!
gpt_flux_dn(:,:) = 2._wp * pi * weight * gpt_flux_dn(:,:)
gpt_flux_up(:,:) = 2._wp * pi * weight * gpt_flux_up(:,:)
gpt_flux_dn(:,:) = pi * weight * gpt_flux_dn(:,:)
gpt_flux_up(:,:) = pi * weight * gpt_flux_up(:,:)
end if
!
! Only broadband-integrated Jacobians are provided
Expand All @@ -231,11 +231,11 @@ subroutine lw_solver_noscat_oneangle(ncol, nlay, ngpt, top_at_1, D, weight, &
end do ! g point loop

if(do_broadband) then
broadband_up(:,:) = 2._wp * pi * weight* broadband_up(:,:)
broadband_dn(:,:) = 2._wp * pi * weight* broadband_dn(:,:)
broadband_up(:,:) = pi * weight* broadband_up(:,:)
broadband_dn(:,:) = pi * weight* broadband_dn(:,:)
end if
if(do_Jacobians) &
flux_upJac(:,:) = 2._wp * pi * weight * flux_upJac(:,:)
flux_upJac(:,:) = pi * weight * flux_upJac(:,:)

end subroutine lw_solver_noscat_oneangle
! -------------------------------------------------------------------------------------------------
Expand Down
8 changes: 4 additions & 4 deletions tests/rte_lw_solver_unit_tests.F90
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ program rte_lw_solver_unit_tests
!
! Longwave tests - gray radiative equilibrium
!
real(wp), parameter :: sigma = 5.670374419e-8_wp, & ! Stefan-Boltzmann constant
D = 1.66_wp ! Diffusivity angle, from single-angle RRTMGP solver
real(wp), parameter :: sigma = 5.670374419e-8_wp, & ! Stefan-Boltzmann constant
D = 1._wp/0.6096748751_wp ! Diffusivity angle, from single-angle RRTMGP solver
real(wp), dimension( ncol), parameter :: sfc_t = [(285._wp, icol = 1,ncol/2), &
(310._wp, icol = 1,ncol/2)]
real(wp), dimension( ncol), parameter :: total_tau = [0.1_wp, 1._wp, 10._wp, 50._wp, &
Expand Down Expand Up @@ -311,7 +311,7 @@ function check_gray_rad_equil(sfc_T, lw_tau, top_at_1, up_flux, net_flux)
! Check top-of-atmosphere energy balance
!
if(.not. allclose(up_flux(:,toa), &
gray_rad_equil_olr(sfc_t, lw_tau), tol=4._wp)) then
gray_rad_equil_olr(sfc_t, lw_tau), tol=8._wp)) then
call report_err("OLR is not consistent with gray radiative equilibrium")
check_gray_rad_equil = .false.
end if
Expand All @@ -322,7 +322,7 @@ function check_gray_rad_equil(sfc_T, lw_tau, top_at_1, up_flux, net_flux)
!
if(.not. allclose(net_flux(:,:), &
spread(net_flux(:,1), dim=2, ncopies=size(net_flux,2)), &
tol = 70._wp)) then
tol = 100._wp)) then
call report_err("Net flux not constant with tau in gray radiative equilibrium")
check_gray_rad_equil = .false.
end if
Expand Down
Loading