Changeset 504


Ignore:
Timestamp:
01/05/17 00:34:26 (7 years ago)
Author:
smasson
Message:

update smallmeshmask.pro

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SRC/Grid/smallmeshmask.pro

    r495 r504  
    6666; 
    6767;- 
    68 PRO smallmeshmask, ncfilein, ncfileout, IODIR = iodir, HGRFILE = hgrfile, ZGRFILE = zgrfile, MSKFILE = mskfile 
     68PRO smallmeshmask, ncfilein, ncfileout, IODIR = iodir, HGRFILE = hgrfile, ZGRFILE = zgrfile, MSKFILE = mskfile, USEBATHY = usebathy 
    6969; 
    7070  compile_opt idl2, strictarrsubs 
     
    7373  test = (file_search(filein))[0] 
    7474  IF test EQ '' THEN BEGIN 
    75     IF keyword_set(hgrfile) THEN filein_hgr = isafile(FILE = hgrfile, IODIR = iodir) ELSE filein_hgr = (file_search(filein+'.mesh_hgr.nc'))[0] 
    76     IF keyword_set(zgrfile) THEN filein_zgr = isafile(FILE = zgrfile, IODIR = iodir) ELSE filein_zgr = (file_search(filein+'.mesh_zgr.nc'))[0] 
    77     IF keyword_set(mskfile) THEN filein_msk = isafile(FILE = mskfile, IODIR = iodir) ELSE filein_msk = (file_search(filein+'.mask.nc'))[0] 
     75    IF keyword_set(hgrfile) THEN filein_hgr = isafile(FILE = hgrfile, IODIR = iodir) ELSE filein_hgr = (file_search(filein+'[._]mesh_hgr.nc'))[0] 
     76    IF keyword_set(zgrfile) THEN filein_zgr = isafile(FILE = zgrfile, IODIR = iodir) ELSE filein_zgr = (file_search(filein+'[._]mesh_zgr.nc'))[0] 
     77    IF keyword_set(usebathy) THEN filein_msk = 'not used' ELSE BEGIN 
     78      IF keyword_set(mskfile) THEN filein_msk = isafile(FILE = mskfile, IODIR = iodir) ELSE filein_msk = (file_search(filein+'[._]mask.nc'))[0] 
     79    ENDELSE 
    7880    IF filein_hgr EQ '' OR filein_zgr EQ '' OR filein_msk EQ ''  THEN BEGIN 
    7981      ras = report(['meshmask file(s) not found...', $ 
     
    171173    varid = [varid, ncdf_vardef(cdfidout, 'mbathy', [dimidx, dimidy], /short)] 
    172174; mask variable 
    173   msklist = ['tmask', 'umask', 'vmask', 'fmask'] 
     175  IF keyword_set(usebathy) THEN msklist = ['tmask'] ELSE msklist = ['tmask', 'umask', 'vmask', 'fmask'] 
    174176  FOR m = 0, n_elements(msklist)-1 DO $ 
    175177    varid = [varid, ncdf_vardef(cdfidout, msklist[m], [dimidx, dimidy, dimidz], /byte)] 
     
    208210  IF (where(zgr_varlist EQ 'mbathy'))[0] NE -1 THEN ncdf_transfer, cdfid, cdfidout, 'mbathy' 
    209211; 
     212  bat = -1 
    210213  IF keyword_set(key_e3_3d)  THEN BEGIN 
    211214; get the bottom 
     
    233236  IF keyword_set(key_gdep_3d)  THEN BEGIN 
    234237; get the bottom 
    235     CASE (ncdf_varinq(cdfid, 'mbathy')).ndims OF 
    236       2:ncdf_varget, cdfid, 'mbathy', bat, count = [jpi, jpj] 
    237       3:ncdf_varget, cdfid, 'mbathy', bat, count = [jpi, jpj, 1] 
    238       4:ncdf_varget, cdfid, 'mbathy', bat, count = [jpi, jpj, 1, 1] 
    239     ENDCASE 
     238    IF bat[0] EQ -1 THEN BEGIN 
     239      CASE (ncdf_varinq(cdfid, 'mbathy')).ndims OF 
     240        2:ncdf_varget, cdfid, 'mbathy', bat, count = [jpi, jpj] 
     241        3:ncdf_varget, cdfid, 'mbathy', bat, count = [jpi, jpj, 1] 
     242        4:ncdf_varget, cdfid, 'mbathy', bat, count = [jpi, jpj, 1, 1] 
     243      ENDCASE 
     244    ENDIF 
    240245    bottom = 0L > ( long(bat) - 1L ) 
    241246    bottom = lindgen(jpi, jpj) + jpi*jpj*temporary(bottom) 
     
    257262; mask 
    258263; 
    259   IF n_elements(filein_msk) NE 0  THEN BEGIN 
    260     ncdf_close, cdfid 
    261     cdfid = ncdf_open(filein_msk) 
    262   ENDIF 
     264  IF keyword_set(usebathy) THEN BEGIN 
     265    IF bat[0] EQ -1 THEN BEGIN 
     266      CASE (ncdf_varinq(cdfid, 'mbathy')).ndims OF 
     267        2:ncdf_varget, cdfid, 'mbathy', bat, count = [jpi, jpj] 
     268        3:ncdf_varget, cdfid, 'mbathy', bat, count = [jpi, jpj, 1] 
     269        4:ncdf_varget, cdfid, 'mbathy', bat, count = [jpi, jpj, 1, 1] 
     270      ENDCASE 
     271    ENDIF 
     272    FOR k = 0, jpk-1 DO BEGIN 
     273      zz = bat GT k 
     274      ncdf_varput, cdfidout, 'tmask', temporary(zz), offset = [0, 0, k], count = [jpi, jpj, 1] 
     275    ENDFOR   
     276  ENDIF ELSE BEGIN 
     277    IF n_elements(filein_msk) NE 0  THEN BEGIN 
     278      ncdf_close, cdfid 
     279      cdfid = ncdf_open(filein_msk) 
     280    ENDIF 
    263281; loop on the vertical levels to limit the memory use 
    264   FOR k = 0, jpk-1 DO BEGIN 
    265     FOR m = 0, 3 DO BEGIN 
    266       CASE (ncdf_varinq(cdfid, msklist[m])).ndims OF 
    267         3:ncdf_varget, cdfid, msklist[m], zzz, offset = [0, 0, k   ], count = [jpi, jpj, 1] 
    268         4:ncdf_varget, cdfid, msklist[m], zzz, offset = [0, 0, k, 0], count = [jpi, jpj, 1, 1] 
    269       ENDCASE 
    270       ncdf_varput, cdfidout, msklist[m], byte(temporary(zzz)), offset = [0, 0, k], count = [jpi, jpj, 1] 
     282    FOR k = 0, jpk-1 DO BEGIN 
     283      FOR m = 0, n_elements(msklist)-1 DO BEGIN 
     284        CASE (ncdf_varinq(cdfid, msklist[m])).ndims OF 
     285          3:ncdf_varget, cdfid, msklist[m], zzz, offset = [0, 0, k   ], count = [jpi, jpj, 1] 
     286          4:ncdf_varget, cdfid, msklist[m], zzz, offset = [0, 0, k, 0], count = [jpi, jpj, 1, 1] 
     287        ENDCASE 
     288        ncdf_varput, cdfidout, msklist[m], byte(temporary(zzz)), offset = [0, 0, k], count = [jpi, jpj, 1] 
     289      ENDFOR 
    271290    ENDFOR 
    272   ENDFOR 
     291  ENDELSE 
    273292;------------------------------------------------------ 
    274293;------------------------------------------------------ 
Note: See TracChangeset for help on using the changeset viewer.