This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
Elizabeth, > To: address@hidden > From: Elizabeth North <address@hidden> > Subject: Access Violation error in Fortran > Organization: University of Maryland > Keywords: 200409121151.i8CBpInJ007499 netCDF Fortran The above message contained the following: > I am trying to access a portion of an array from a large .nc file. When > the program gets to the line with STATUS = NF_GET_VARA_REAL it aborts > (before it assigns a STATUS error message). Compac Visual Fortran > debugger has the error message "Access Violation". I thought the file > could be corrupt, but I can read in the entire array without a problem. > It just happens when I use the NF_GET_VARA_REAL statement. I've pasted > the relevant code below. If you have any advice on what I can do to avoid > the error, I'd really appreciate it! Off the top of my head, there are several posibilities: 1. The start-vector (startb) is incorrect. Does the following statement startb=1 assign 1 to every element of startb? 2. The count-vector (rendb) is incorrect. 3. The receiving array (U) is too small. It's 3-D. Does it need to be 4? Basically, there's got to be a mismatch between the amount of the array you're trying to read and the space available in which to put the values. Information on the Fortran-77 start- and count-vectors can be found at http://my.unidata.ucar.edu/content/software/netcdf/guidef/ > Regards, > Elizabeth North > Assistant Research Scientist (soon to be Assistant Professor) > University of Maryland > Center for Environmental Science > Horn Point Laboratory > 2020 Horns Point Road > Cambridge, MD 21613 USA > phone: (410) 221-8497 > fax: (410) 221-8490 > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > program main > include 'netcdf.inc' > REAL U(81,122,20),Uvelb(81,122,20),Uvelc(81,122,20), > 1 Uvelf(81,122,20),hc,days,seconds,daytime > integer time,dt,iint,counter,counter2,counter3, > 1 stepf,stepc,stepb,stepT,timem,prcount,iprint,printdt, > 2 imu,jmu,kmu, > 4 startb(4),rendb(4),startc(4),rendc(4),startf(4),rendf(4) > CHARACTER prefix*5,suffix*3,buffer*30,filenm*15 > integer NCID,STATUS,NVARS,dimcount(4),dimids(4),ndims,idv_u > . . . > c Open netCDF file > counter=iint+180 > prefix='kklw_' > suffix='.nc' > WRITE(buffer,'(A,I3,A)') prefix,counter,suffix > READ(buffer,'(A)') filenm > write(*,*) filenm > c > STATUS = NF_OPEN(filenm, NF_NOWRITE, NCID) > if (STATUS .NE. NF_NOERR) write(*,*) 'Problem NF_OPEN' > write(*,*) 'ncid = ', ncid > > c **** U velocity > STATUS = NF_INQ_VARID(NCID,'u',idv_u) > write(*,*) 'u varID =', idv_u > STATUS = NF_INQ_VARNDIMS(NCID,idv_u,ndims) > status = NF_INQ_VARDIMID(NCID,idv_u,dimids) > write(*,*) ' ndims =',ndims > write(*,*) ' dimids =',dimids > do i=1,ndims > STATUS = NF_INQ_DIMLEN(NCID,dimids(i),dimcount(i)) > !write(*,*) 'u dim ',i,' = ',dimcount(i) > enddo > imu= dimcount(1) > jmu= dimcount(2) > kmu= dimcount(3) > timem= dimcount(4) > write(*,*) ' u- imu,jmu,kmu,timem = ',imu,jmu,kmu,timem > rendb(1) = imu > rendb(2) = jmu > rendb(3) = kmu > rendb(4) = stepb > startb=1 > U=0.0 > write(*,*) ' rendb',rendb(1),rendb(2),rendb(3),rendb(4) > write(*,*) ' startb',startb(1),startb(2),startb(3),startb(4) > STATUS = NF_GET_VARA_REAL(NCID,idv_u,startb,rendb,U) > if (STATUS .NE. NF_NOERR) write(*,*) 'Problem read array' > do 40 kk = 1,kmu > do 41 jj = 1,jmu > do 42 ii = 1,imu > Uvelb(ii,jj,kk) = U(ii,jj,kk) > 42 continue > 41 continue > 40 continue Regards, Steve Emmerson > NOTE: All email exchanges with Unidata User Support are recorded in the > Unidata inquiry tracking system and then made publicly available > through the web. If you do not want to have your interactions made > available in this way, you must let us know in each email you send to us.