--- trunk/libf/phylmd/hgardfou.f90 2011/01/06 17:52:19 38 +++ trunk/Sources/phylmd/hgardfou.f 2016/09/01 10:30:53 207 @@ -4,94 +4,44 @@ contains - SUBROUTINE hgardfou(t, tsol) + SUBROUTINE hgardfou(t, ftsol) ! From phylmd/hgardfou.F, v 1.1.1.1 2004/05/19 12:53:07 ! This procedure aborts the program if the temperature gets out of range. - use dimens_m - use indicesol - use dimphy - use SUPHEC_M + USE indicesol, ONLY: nbsrf + USE dimphy, ONLY: klev, klon + use nr_util, only: ifirstloc - REAL, intent(in):: t(klon, klev), tsol(klon, nbsrf) + REAL, intent(in):: t(klon, klev), ftsol(klon, nbsrf) ! Variables local to the procedure: real, parameter:: temp_min = 50., temp_max = 370. ! temperature range, in K - INTEGER i, k, nsrf - INTEGER jadrs(klon), jbad - LOGICAL ok + INTEGER k, nsrf, jbad !---------------------------------------------------------- - ok = .TRUE. DO k = 1, klev - jbad = 0 - DO i = 1, klon - IF (t(i, k) > temp_max) THEN - jbad = jbad + 1 - jadrs(jbad) = i - ENDIF - ENDDO - IF (jbad > 0) THEN - ok = .FALSE. - DO i = 1, jbad - print *, "t(", jadrs(i), ", ", k, ") = ", t(jadrs(i), k) - ENDDO - ENDIF - jbad = 0 - DO i = 1, klon - IF (t(i, k) < temp_min) THEN - jbad = jbad + 1 - jadrs(jbad) = i - ENDIF - ENDDO - IF (jbad > 0) THEN - ok = .FALSE. - DO i = 1, jbad - print *, "t(", jadrs(i), ", ", k, ") = ", t(jadrs(i), k) - ENDDO - ENDIF + jbad = ifirstloc(t(:, k) > temp_max .or. t(:, k) < temp_min) + if (jbad <= klon) then + PRINT *, 'hgardfou: temperature out of range' + print *, "t(", jbad, ", ", k, ") = ", t(jbad, k) + stop 1 + end if ENDDO DO nsrf = 1, nbsrf - jbad = 0 - DO i = 1, klon - IF (tsol(i, nsrf) > temp_max) THEN - jbad = jbad + 1 - jadrs(jbad) = i - ENDIF - ENDDO - IF (jbad > 0) THEN - ok = .FALSE. - DO i = 1, jbad - print *, "tsol(", jadrs(i), ", ", nsrf, ") = ", & - tsol(jadrs(i), nsrf) - ENDDO - ENDIF - jbad = 0 - DO i = 1, klon - IF (tsol(i, nsrf) < temp_min) THEN - jbad = jbad + 1 - jadrs(jbad) = i - ENDIF - ENDDO - IF (jbad > 0) THEN - ok = .FALSE. - DO i = 1, jbad - print *, "tsol(", jadrs(i), ", ", nsrf, ") = ", & - tsol(jadrs(i), nsrf) - ENDDO + jbad = ifirstloc(ftsol(:, nsrf) > temp_max & + .or. ftsol(:, nsrf) < temp_min) + if (jbad <= klon) then + PRINT *, 'hgardfou: temperature out of range' + print *, "ftsol(", jbad, ", ", nsrf, ") = ", ftsol(jbad, nsrf) + stop 1 ENDIF ENDDO - IF (.NOT. ok) THEN - PRINT *, 'hgardfou: temperature out of range' - stop 1 - ENDIF - END SUBROUTINE hgardfou end module hgardfou_m