From 7839d973a94516ff7c007d1aeeae65267f263136 Mon Sep 17 00:00:00 2001 From: weiwangncar Date: Wed, 9 Feb 2022 10:30:32 -0700 Subject: [PATCH] fix a invalid memory reference error identified by gfortran --- phys/module_sf_noahdrv.F | 60 ++++++++++++++++++++++++++++-------- phys/module_surface_driver.F | 12 +++----- 2 files changed, 53 insertions(+), 19 deletions(-) diff --git a/phys/module_sf_noahdrv.F b/phys/module_sf_noahdrv.F index b6246de6b6..453b3967a4 100644 --- a/phys/module_sf_noahdrv.F +++ b/phys/module_sf_noahdrv.F @@ -115,7 +115,10 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & a_u_bep,a_v_bep,a_t_bep,a_q_bep, & !O multi-layer urban a_e_bep,b_u_bep,b_v_bep, & !O multi-layer urban b_t_bep,b_q_bep,b_e_bep,dlg_bep, & !O multi-layer urban - dl_u_bep,sf_bep,vl_bep,sfcheadrt,INFXSRT, soldrain & !O multi-layer urban + dl_u_bep,sf_bep,vl_bep & +#ifdef WRF_HYDRO + ,sfcheadrt,INFXSRT,soldrain & !O multi-layer urban +#endif ,SDA_HFX, SDA_QFX, HFX_BOTH, QFX_BOTH, QNORM, fasdas & !fasdas ,RC2,XLAI2 & ,IRR_CHAN & @@ -269,12 +272,15 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & INTEGER, INTENT(IN ) :: julian, julyr !urban !added by Wei Yu for routing +#ifdef WRF_HYDRO REAL, DIMENSION( ims:ime, jms:jme ) , & INTENT(INOUT) :: sfcheadrt,INFXSRT,soldrain real :: etpnd1 +#endif !end added - +! new local vars for hydro + REAL :: etpnd1_hydro,sfcheadrt_hydro,infxsrt_hydro REAL, DIMENSION( ims:ime, jms:jme ) , & INTENT(IN ) :: TMN, & @@ -1077,6 +1083,15 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & ! ! END FASDAS ! +#ifdef WRF_HYDRO + etpnd1_hydro = 0. + sfcheadrt_hydro = sfcheadrt(i,j) + infxsrt_hydro = infxsrt(i,j) +#else + etpnd1_hydro = 0. + sfcheadrt_hydro = 0. + infxsrt_hydro = 0. +#endif CALL SFLX (I,J,FFROZP, ISURBAN, DT,ZLVL,NSOIL,SLDPTH, & !C LOCAL, & !L LUTYPE, SLTYPE, & !CL @@ -1099,14 +1114,18 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & SNOTIME1, & RIBB, & SMCWLT,SMCDRY,SMCREF,SMCMAX,NROOT, & - sfcheadrt(i,j), & !I - INFXSRT(i,j),ETPND1,OPT_THCND,AOASIS & !O +! WRF_HYDRO vars + sfcheadrt_hydro, & !I + INFXSRT_hydro,ETPND1_hydro & !O + ,OPT_THCND,AOASIS & !O ,XSDA_QFX, HFX_PHY, QFX_PHY, XQNORM, fasdas, HCPCT_FASDAS & ! fasdas ,IRRIGATION_CHANNEL) - #ifdef WRF_HYDRO soldrain(i,j) = RUNOFF2*DT*1000.0 + sfcheadrt(i,j) = sfcheadrt_hydro + infxsrt(i,j) = INFXSRT_hydro + etpnd1 = etpnd1_hydro #endif ELSEIF (ICE == -1) THEN @@ -2414,7 +2433,9 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & a_e_bep,b_u_bep,b_v_bep, & !O multi-layer urban b_t_bep,b_q_bep,b_e_bep,dlg_bep, & !O multi-layer urban dl_u_bep,sf_bep,vl_bep & !O multi-layer urban +#ifdef WRF_HYDRO ,sfcheadrt,INFXSRT, soldrain & !hydro +#endif ,SDA_HFX, SDA_QFX, HFX_BOTH, QFX_BOTH, QNORM, fasdas & !fasdas ,RC2,XLAI2 & !O ,IRR_CHAN & @@ -2566,11 +2587,16 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & INTEGER, INTENT(IN ) :: julian,julyr !added by Wei Yu for routing +#ifdef WRF_HYDRO REAL, DIMENSION( ims:ime, jms:jme ) , & INTENT(INOUT) :: sfcheadrt,INFXSRT,soldrain real :: etpnd1 +#endif !end added +! new local vars for hydro + REAL :: etpnd1_hydro,sfcheadrt_hydro,infxsrt_hydro + REAL, DIMENSION( ims:ime, jms:jme ) , & INTENT(IN ) :: TMN, & XLAND, & @@ -3531,13 +3557,18 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & SNOTIME1, & RIBB, & SMCWLT,SMCDRY,SMCREF,SMCMAX,NROOT, & - sfcheadrt(i,j), & !I - INFXSRT(i,j),ETPND1,OPT_THCND,AOASIS & !O - ,XSDA_QFX, HFX_PHY, QFX_PHY, XQNORM, fasdas, HCPCT_FASDAS & ! fasdas vars - ,IRRIGATION_CHANNEL ) +! WRF_HYDRO vars + sfcheadrt_hydro, & !I + INFXSRT_hydro,ETPND1_hydro & !O + ,OPT_THCND,AOASIS & !O + ,XSDA_QFX, HFX_PHY, QFX_PHY, XQNORM, fasdas, HCPCT_FASDAS & ! fasdas vars + ,IRRIGATION_CHANNEL ) #ifdef WRF_HYDRO soldrain(i,j) = RUNOFF2*DT*1000.0 + sfcheadrt(i,j) = sfcheadrt_hydro + infxsrt(i,j) = INFXSRT_hydro + etpnd1 = etpnd1_hydro #endif ELSEIF (ICE == -1) THEN @@ -4453,13 +4484,18 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & SNOTIME1, & RIBB, & SMCWLT,SMCDRY,SMCREF,SMCMAX,NROOT, & - sfcheadrt(i,j), & !I - INFXSRT(i,j),ETPND1,OPT_THCND,AOASIS & !O - ,XSDA_QFX, HFX_PHY, QFX_PHY, XQNORM, fasdas, HCPCT_FASDAS & ! fasdas vars +! WRF_HYDRO vars + sfcheadrt_hydro, & !I + INFXSRT_hydro,ETPND1_hydro & !O + ,OPT_THCND,AOASIS & !O + ,XSDA_QFX, HFX_PHY, QFX_PHY, XQNORM, fasdas, HCPCT_FASDAS & ! fasdas vars ,IRRIGATION_CHANNEL ) #ifdef WRF_HYDRO soldrain(i,j) = RUNOFF2*DT*1000.0 + sfcheadrt(i,j) = sfcheadrt_hydro + infxsrt(i,j) = INFXSRT_hydro + etpnd1 = etpnd1_hydro #endif ELSEIF (ICE == -1) THEN diff --git a/phys/module_surface_driver.F b/phys/module_surface_driver.F index 1d34ad6a4e..d1e64bf11d 100644 --- a/phys/module_surface_driver.F +++ b/phys/module_surface_driver.F @@ -2754,7 +2754,9 @@ SUBROUTINE surface_driver( & a_e_bep,b_u_bep,b_v_bep, & !O multi-layer urban b_t_bep,b_q_bep,b_e_bep,dlg_bep, & !O multi-layer urban dl_u_bep,sf_bep,vl_bep & !O multi-layer urban +#ifdef WRF_HYDRO ,sfcheadrt,INFXSRT, soldrain & !hydro +#endif ,SDA_HFX, SDA_QFX, HFX_BOTH, QFX_BOTH, QNORM, fasdas & ! fasdas ,RS,XLAIDYN,IRRIGATION_CHANNEL) ELSE @@ -2884,14 +2886,10 @@ SUBROUTINE surface_driver( & a_e_bep,b_u_bep,b_v_bep, & !O multi-layer urban b_t_bep,b_q_bep,b_e_bep,dlg_bep, & !O multi-layer urban dl_u_bep,sf_bep,vl_bep & !O multi-layer urban - ,sfcheadrt,INFXSRT, soldrain & -! -! FASDAS -! +#ifdef WRF_HYDRO + ,sfcheadrt,INFXSRT, soldrain & +#endif ,SDA_HFX, SDA_QFX, HFX_BOTH, QFX_BOTH, QNORM, fasdas & -! -! END FASDAS -! ,RS,XLAIDYN,IRRIGATION_CHANNEL) ENDIF