Skip to content

Commit 363f388

Browse files
authored
Fix a invalid memory reference error identified by gfortran (#1671)
Fix a memory problem in Noah LSM after PR#[1641](#1641) TYPE: bug fix KEYWORDS: memory issue, Noah LSM, WRF-Hydro SOURCE: internal DESCRIPTION OF CHANGES: Problem: After PR#1641 merge, which consisted modification and additions to NoahMP, problems showed up in the model when Noah LSM is used. Errors include random failures when running with a relatively large domain (581x501x56 in one test) and nests, and when model is trying to write output. Solution: Using 'configure -D' with gfortran identified the failure in module_sf_noahdrv.F. Examination of the routine suggests the code related to WRF-Hydro implementation could be an issue when WRF-Hydro is not used. Revision is made to the driver so that variables related to WRF-Hydro are properly defined when WRF-Hydro is not used or arrays are not defined. LIST OF MODIFIED FILES: M phys/module_sf_noahdrv.F M phys/module_surface_driver.F TESTS CONDUCTED: 1. Previously failed large domain and nest tests are working now. 2. The Jenkins tests are all passing.
1 parent 78d8725 commit 363f388

File tree

2 files changed

+53
-19
lines changed

2 files changed

+53
-19
lines changed

phys/module_sf_noahdrv.F

+48-12
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,10 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, &
115115
a_u_bep,a_v_bep,a_t_bep,a_q_bep, & !O multi-layer urban
116116
a_e_bep,b_u_bep,b_v_bep, & !O multi-layer urban
117117
b_t_bep,b_q_bep,b_e_bep,dlg_bep, & !O multi-layer urban
118-
dl_u_bep,sf_bep,vl_bep,sfcheadrt,INFXSRT, soldrain & !O multi-layer urban
118+
dl_u_bep,sf_bep,vl_bep &
119+
#ifdef WRF_HYDRO
120+
,sfcheadrt,INFXSRT,soldrain & !O multi-layer urban
121+
#endif
119122
,SDA_HFX, SDA_QFX, HFX_BOTH, QFX_BOTH, QNORM, fasdas & !fasdas
120123
,RC2,XLAI2 &
121124
,IRR_CHAN &
@@ -269,12 +272,15 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, &
269272
INTEGER, INTENT(IN ) :: julian, julyr !urban
270273

271274
!added by Wei Yu for routing
275+
#ifdef WRF_HYDRO
272276
REAL, DIMENSION( ims:ime, jms:jme ) , &
273277
INTENT(INOUT) :: sfcheadrt,INFXSRT,soldrain
274278
real :: etpnd1
279+
#endif
275280
!end added
276281

277-
282+
! new local vars for hydro
283+
REAL :: etpnd1_hydro,sfcheadrt_hydro,infxsrt_hydro
278284

279285
REAL, DIMENSION( ims:ime, jms:jme ) , &
280286
INTENT(IN ) :: TMN, &
@@ -1077,6 +1083,15 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, &
10771083
!
10781084
! END FASDAS
10791085
!
1086+
#ifdef WRF_HYDRO
1087+
etpnd1_hydro = 0.
1088+
sfcheadrt_hydro = sfcheadrt(i,j)
1089+
infxsrt_hydro = infxsrt(i,j)
1090+
#else
1091+
etpnd1_hydro = 0.
1092+
sfcheadrt_hydro = 0.
1093+
infxsrt_hydro = 0.
1094+
#endif
10801095
CALL SFLX (I,J,FFROZP, ISURBAN, DT,ZLVL,NSOIL,SLDPTH, & !C
10811096
LOCAL, & !L
10821097
LUTYPE, SLTYPE, & !CL
@@ -1099,14 +1114,18 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, &
10991114
SNOTIME1, &
11001115
RIBB, &
11011116
SMCWLT,SMCDRY,SMCREF,SMCMAX,NROOT, &
1102-
sfcheadrt(i,j), & !I
1103-
INFXSRT(i,j),ETPND1,OPT_THCND,AOASIS & !O
1117+
! WRF_HYDRO vars
1118+
sfcheadrt_hydro, & !I
1119+
INFXSRT_hydro,ETPND1_hydro & !O
1120+
,OPT_THCND,AOASIS & !O
11041121
,XSDA_QFX, HFX_PHY, QFX_PHY, XQNORM, fasdas, HCPCT_FASDAS & ! fasdas
11051122
,IRRIGATION_CHANNEL)
11061123

1107-
11081124
#ifdef WRF_HYDRO
11091125
soldrain(i,j) = RUNOFF2*DT*1000.0
1126+
sfcheadrt(i,j) = sfcheadrt_hydro
1127+
infxsrt(i,j) = INFXSRT_hydro
1128+
etpnd1 = etpnd1_hydro
11101129
#endif
11111130
ELSEIF (ICE == -1) THEN
11121131

@@ -2414,7 +2433,9 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, &
24142433
a_e_bep,b_u_bep,b_v_bep, & !O multi-layer urban
24152434
b_t_bep,b_q_bep,b_e_bep,dlg_bep, & !O multi-layer urban
24162435
dl_u_bep,sf_bep,vl_bep & !O multi-layer urban
2436+
#ifdef WRF_HYDRO
24172437
,sfcheadrt,INFXSRT, soldrain & !hydro
2438+
#endif
24182439
,SDA_HFX, SDA_QFX, HFX_BOTH, QFX_BOTH, QNORM, fasdas & !fasdas
24192440
,RC2,XLAI2 & !O
24202441
,IRR_CHAN &
@@ -2566,11 +2587,16 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, &
25662587
INTEGER, INTENT(IN ) :: julian,julyr
25672588
25682589
!added by Wei Yu for routing
2590+
#ifdef WRF_HYDRO
25692591
REAL, DIMENSION( ims:ime, jms:jme ) , &
25702592
INTENT(INOUT) :: sfcheadrt,INFXSRT,soldrain
25712593
real :: etpnd1
2594+
#endif
25722595
!end added
25732596
2597+
! new local vars for hydro
2598+
REAL :: etpnd1_hydro,sfcheadrt_hydro,infxsrt_hydro
2599+
25742600
REAL, DIMENSION( ims:ime, jms:jme ) , &
25752601
INTENT(IN ) :: TMN, &
25762602
XLAND, &
@@ -3531,13 +3557,18 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, &
35313557
SNOTIME1, &
35323558
RIBB, &
35333559
SMCWLT,SMCDRY,SMCREF,SMCMAX,NROOT, &
3534-
sfcheadrt(i,j), & !I
3535-
INFXSRT(i,j),ETPND1,OPT_THCND,AOASIS & !O
3536-
,XSDA_QFX, HFX_PHY, QFX_PHY, XQNORM, fasdas, HCPCT_FASDAS & ! fasdas vars
3537-
,IRRIGATION_CHANNEL )
3560+
! WRF_HYDRO vars
3561+
sfcheadrt_hydro, & !I
3562+
INFXSRT_hydro,ETPND1_hydro & !O
3563+
,OPT_THCND,AOASIS & !O
3564+
,XSDA_QFX, HFX_PHY, QFX_PHY, XQNORM, fasdas, HCPCT_FASDAS & ! fasdas vars
3565+
,IRRIGATION_CHANNEL )
35383566

35393567
#ifdef WRF_HYDRO
35403568
soldrain(i,j) = RUNOFF2*DT*1000.0
3569+
sfcheadrt(i,j) = sfcheadrt_hydro
3570+
infxsrt(i,j) = INFXSRT_hydro
3571+
etpnd1 = etpnd1_hydro
35413572
#endif
35423573
ELSEIF (ICE == -1) THEN
35433574

@@ -4453,13 +4484,18 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, &
44534484
SNOTIME1, &
44544485
RIBB, &
44554486
SMCWLT,SMCDRY,SMCREF,SMCMAX,NROOT, &
4456-
sfcheadrt(i,j), & !I
4457-
INFXSRT(i,j),ETPND1,OPT_THCND,AOASIS & !O
4458-
,XSDA_QFX, HFX_PHY, QFX_PHY, XQNORM, fasdas, HCPCT_FASDAS & ! fasdas vars
4487+
! WRF_HYDRO vars
4488+
sfcheadrt_hydro, & !I
4489+
INFXSRT_hydro,ETPND1_hydro & !O
4490+
,OPT_THCND,AOASIS & !O
4491+
,XSDA_QFX, HFX_PHY, QFX_PHY, XQNORM, fasdas, HCPCT_FASDAS & ! fasdas vars
44594492
,IRRIGATION_CHANNEL )
44604493
44614494
#ifdef WRF_HYDRO
44624495
soldrain(i,j) = RUNOFF2*DT*1000.0
4496+
sfcheadrt(i,j) = sfcheadrt_hydro
4497+
infxsrt(i,j) = INFXSRT_hydro
4498+
etpnd1 = etpnd1_hydro
44634499
#endif
44644500
ELSEIF (ICE == -1) THEN
44654501

phys/module_surface_driver.F

+5-7
Original file line numberDiff line numberDiff line change
@@ -2754,7 +2754,9 @@ SUBROUTINE surface_driver( &
27542754
a_e_bep,b_u_bep,b_v_bep, & !O multi-layer urban
27552755
b_t_bep,b_q_bep,b_e_bep,dlg_bep, & !O multi-layer urban
27562756
dl_u_bep,sf_bep,vl_bep & !O multi-layer urban
2757+
#ifdef WRF_HYDRO
27572758
,sfcheadrt,INFXSRT, soldrain & !hydro
2759+
#endif
27582760
,SDA_HFX, SDA_QFX, HFX_BOTH, QFX_BOTH, QNORM, fasdas & ! fasdas
27592761
,RS,XLAIDYN,IRRIGATION_CHANNEL)
27602762
ELSE
@@ -2884,14 +2886,10 @@ SUBROUTINE surface_driver( &
28842886
a_e_bep,b_u_bep,b_v_bep, & !O multi-layer urban
28852887
b_t_bep,b_q_bep,b_e_bep,dlg_bep, & !O multi-layer urban
28862888
dl_u_bep,sf_bep,vl_bep & !O multi-layer urban
2887-
,sfcheadrt,INFXSRT, soldrain &
2888-
!
2889-
! FASDAS
2890-
!
2889+
#ifdef WRF_HYDRO
2890+
,sfcheadrt,INFXSRT, soldrain &
2891+
#endif
28912892
,SDA_HFX, SDA_QFX, HFX_BOTH, QFX_BOTH, QNORM, fasdas &
2892-
!
2893-
! END FASDAS
2894-
!
28952893
,RS,XLAIDYN,IRRIGATION_CHANNEL)
28962894
ENDIF
28972895

0 commit comments

Comments
 (0)