Scheduled Downtime
On Friday 21 April 2023 @ 5pm MT, this website will be down for maintenance and expected to return online the morning of 24 April 2023 at the latest

Array out of bounds reference in RRTMG as implemented in CM1

Karim Shariff

New member
Dear All: I am running CM1 and after about 25 hours of physical time, there is the following out of bounds reference in rrtmg_lw.

rrtmg_lw has been called
forrtl: severe (408): fort: (3): Subscript #1 of the array SELFREF has value 0 which is less than the lower bound of 1
Image PC Routine Line Source
cm1.exe 00000000010515FF Unknown Unknown Unknown
cm1.exe 0000000000EFCBB9 rrtmg_lw_taumolta 5036 module_ra_rrtmg_lw.f90
cm1.exe 0000000000E9DE34 rrtmg_lw_taumol_m 4965 module_ra_rrtmg_lw.f90
cm1.exe 0000000000E9341D rrtmg_lw_rad_mp_r 11016 module_ra_rrtmg_lw.f90
cm1.exe 0000000000E74932 module_ra_rrtmg_l 12629 module_ra_rrtmg_lw.f90
cm1.exe 0000000000A24824 radiation_module_ 635 radiation_driver.f90
cm1.exe 00000000006E7286 MAIN__ 3470 cm1.f90
cm1.exe 000000000040ECE2 Unknown Unknown Unknown
libc-2.28.so 0000152AFDE3A7E5 __libc_start_main Unknown Unknown
cm1.exe 000000000040EBEE Unknown Unknown Unknown
forrtl: severe (408): fort: (3): Subscript #1 of the array SELFREF has value 0 which is less than the lower bound of 1

The bad array reference is
selfref(inds,ig).
The index inds is obtained from
inds = indself(lay)
The kludge I tried, inds = max(1, inds), only leads to further out-of-bounds errors downstream.
! * INDSELF - index of the lower of the two appropriate reference *
! * temperatures needed for the self-continuum interpolation
Here is how indself(lay) is set in subroutine setcoeff
indself(lay) = min(9, max(1, int(factor)-7))

Added at 3 PM Sunday, Feb. 9, 2025
Note:
inds = 0 lay = 408
indf = 2
ind1 = 66
calling stopcm1

ind1 is also out of bounds (65 is the max, I believe).

Added at 3:44 PM, Sunday, Feb. 9. 2025.
------------------------------------------------
Problem is as follows. For lay = 408, the following test passes
if (plog .le. 4.56_rb) go to 5300
However, at 5300, there is no setting of indself(lay) performed.
One possible fix (if approved by the developer or whoever coded the 5300 section) is the following:
In the 5300 section, the variable "factor" is computed and therefore could in principle
be used to set indself(lay) in the same manner as it is for plog .gt. 4.56_rb, namely:
indself(lay) = min(9, max(1, int(factor)-7))
Question: Would that be correct?
I will also see how to fix the problem with ind1.
NOTE: I looked at the latest (?) version of setcoef (rrtmg version 4.0) and it too does not set
indself in the 5300 section.
 
Last edited:
Top