[ncl-talk] NCL memory leak issue

STEFAN RAHIMI-ESFARJANI s.rahimi at ucla.edu
Thu Oct 8 09:24:06 MDT 2020


Greetings,


I spent a lot of time developing post-processing software for my research,
which are written in NCL. The code here creates single-year files of
daily evapotranspiration values on a lat/lon grid f(time,lat,lon). I am
experiencing a memory leak that is affecting my ability to run these jobs
using Cheyenne compute nodes.

In short, I have traced the memory leak to the following line (70) in
/glade/scratch/srahimi/interp/mpi_r8/test.ncl on Cheyenne or see below:

ff = addfiles(dir_x+files,"r")

The files are wrfout .nc files. Variable "ff" should be deleted 2 lines
later, and that space should be re-used throughout each iteration of the
loop. What seems to be happening however is that new memory is being
allocated for ff in each iteration of the loop, eventually overpowering the
core and the node.

I know ways around this in python, but I really do not want to rewrite
these scripts at present. Any suggestions?

Thanks,
-Stefan Rahimi, UCLA

;Created by S. Rahimi on 15 Jan. 2020

;to interpolate WRF fields toa common

;0.03 rectilinear grid


;Daily averages from 6-h data


;For a 2-D variable


;f = f(year,day,ny,nx)


begin


var = "etrans_sfc"

model  = "mpi-esm1-2-lr"

variant  = "r8i1p1f1"

ssp  = "ssp370"

freq = "daily"

domain  = "d01"


startyear  = 1980

endyear  = 1989

year0 = 1980


dir  = "/glade/scratch/srahimi/ucla/downscale/test/WRF-4.1.3/test/"

dir_inp  = "/glade/scratch/srahimi/interp/meta2/"

file_wrfinput  = "/glade/scratch/srahimi/interp/meta2/wrfinput_d01"


s2d = 86400.


ndays = 365

nyears = endyear - startyear + 1


nx  = 109

ny  = 104


;lat/lon from wrfinput

print (file_wrfinput+"")

f = addfile(file_wrfinput,"r")

lat_wrf = f->XLAT(0,:,:)

lon_wrf = f->XLONG(0,:,:)

delete(f)


years = ispan(startyear,endyear,1)

days = new((/ndays/),"integer")

var_wrf = new((/ndays,ny,nx/),"float")


do iyear = startyear, endyear


if (iyear .eq. 2014 ) then

        continue

end if


 dir_x =  dir + "MPI_r8_" + iyear + "/" + domain + "/"


 print (dir_x+"")

 file_str = "wrfout*"

 filei = systemfunc("cd " + dir_x + " ; ls " + file_str)


 day_count = 1


 do iday = 0, ndays - 1


  files = filei(4*(day_count-1):4*day_count-1)

  print (files) ;each is a string


  date_str = stringtochar(files(0))

  date = tostring(date_str(11:14)) + tostring(date_str(16:17)) +
tostring(date_str(19:20))

  days(iday) = stringtointeger(date)


  ff = addfiles(dir_x+files,"r")

  var_wrf(iday,:,:) =  dim_avg_n_Wrap(ff[0:dimsizes(files)-1]->ETRAN,0) *
s2d

  delete(ff)

  var_wrf(iday,:,:) = where(abs(var_wrf(iday,:,:)).gt.1e20,0.,
var_wrf(iday,:,:))


  day_count = day_count + 1

  delete(files)


 end do         ;end day loop


 var_wrf!0 = "day"

 var_wrf!1 = "lat2d"

 var_wrf!2 = "lon2d"

 var_wrf&day = days

 var_wrf at units = "mm/d"


 ;Write to .nc files

 dirout = "files/"

 fil_out = var + "." + freq + "." + \

  model + "_" + ssp + "_" + variant + "_" + \

  domain + "_" + iyear + ".nc"

 outfile = dirout+fil_out

 system("/bin/rm " +outfile)

 ncdf = addfile(outfile ,"c")  ; open output netCDF file

 ;setfileoption(outfile,"DefineMode",True)

 fAtt               = True            ; assign file attributes

 fAtt at title         = var+ " for  "+iyear

 fAtt at Conventions   = "None"

 fAtt at creation_date = systemfunc("date")

 ;fileattdef(ncdf,f[0])            ; copy file attributes

 filedimdef(ncdf,"region",-1,True)


 ncdf->$var$ = var_wrf


 delete(ncdf)


end do          ;end year loop


end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20201008/1068032c/attachment.html>


More information about the ncl-talk mailing list