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