Two of my biological ROMS associates came to me with a problem. We tracked it down to mod_average.F, which should have this code:
DO itrc=1,NT(ng)
DO k=1,N(ng)
DO i=Imin,Imax
AVERAGE(ng) % avgt(i,j,k,itrc) = IniVal
END DO
END DO
END DO
END DO
# ifdef AVERAGES_QUADRATIC
DO itrc=1,NAT
DO k=1,N(ng)
DO i=Imin,Imax
AVERAGE(ng) % avgTT(i,j,k,itrc) = IniVal
AVERAGE(ng) % avgUT(i,j,k,itrc) = IniVal
AVERAGE(ng) % avgVT(i,j,k,itrc) = IniVal
END DO
END DO
END DO
# endif
It was failing in the NetCDF write of avgt(:,:.:,3) (Nitrate). When ROMS dies in this situation, it says it has trouble in the write from wrt_avg of Nitrate, but it doesn’t give the NetCDF error message. I would like to see us not only check for errors, but print out the NetCDF error from the error code. I have a f90 code which uses this function:
subroutine check(status)
integer, intent(in) :: status
if (status /= nf90_noerr) then
print *, nf90_strerror(status)
call exit(1)
endif
end subroutine check
It is used like this:
call check(nf90_inq_varid(fileID, 'vals_nod_var', varid))
call check(nf90_put_var(fileID, varid, size, &
start = (/ 1, 1, 1 /), count = (/ nnodes, 1, 1 /) ))
Yes, reporting internal IO errors are very helpful. I guess that I missed some. I already implemented this capability in my version. I actually catch the error into variable ioerror from any NetCDF error flag. Then, the NetCDF error managing routine nf_strerror is called from close_io.F.
Comment by arango — August 9, 2006 @ 16:19 @ 4:19 pm