From 04c6a76d29550bc668185911d619447a8ceb5cf3 Mon Sep 17 00:00:00 2001 From: Angus Gibson Date: Wed, 20 May 2015 16:42:33 +1000 Subject: [PATCH] Warn when numberOfGroundings exceeds maxGroundings In MOM_diabatic_driver, if more than maxGroundings groundings are encountered, an out-of-bounds array access will occur, likely causing a segmentation fault. This change causes only maxGroundings groundings to be printed, with a warning about the number of remaining groundings. --- src/parameterizations/vertical/MOM_diabatic_driver.F90 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/parameterizations/vertical/MOM_diabatic_driver.F90 b/src/parameterizations/vertical/MOM_diabatic_driver.F90 index dea1134a0d..6ce555617a 100644 --- a/src/parameterizations/vertical/MOM_diabatic_driver.F90 +++ b/src/parameterizations/vertical/MOM_diabatic_driver.F90 @@ -2690,13 +2690,19 @@ subroutine applyBoundaryFluxesInOut(CS, G, dt, fluxes, optics, ea, h, tv, & if (CS%id_createdH > 0) call post_data(CS%id_createdH, CS%createdH, CS%diag) if (numberOfGroundings>0) then - do i = 1, numberOfGroundings + do i = 1, min(numberOfGroundings, maxGroundings) call forcing_SinglePointPrint(fluxes,G,iGround(i),jGround(i),'applyBoundaryFluxesInOut (grounding)') write(mesg(1:45),'(3es15.3)') G%geoLonT( iGround(i), jGround(i) ), & G%geoLatT( iGround(i), jGround(i)) , hGrounding(i) call MOM_error(WARNING, "MOM_diabatic_driver.F90, applyBoundaryFluxesInOut(): "//& "Mass created. x,y,dh= "//trim(mesg), all_print=.true.) enddo + + if (numberOfGroundings - maxGroundings > 0) then + write(mesg, '(i4)') numberOfGroundings - maxGroundings + call MOM_error(WARNING, "MOM_diabatic_driver:F90, applyBoundaryFluxesInOut(): "//& + trim(mesg) // " groundings remaining") + endif endif end subroutine applyBoundaryFluxesInOut