Ignore:
Timestamp:
03/22/11 10:33:45 (13 years ago)
Author:
smasson
Message:

update meshmask related file for full compatibility with partial steps

File:
1 edited

Legend:

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

    r371 r451  
    108108  zgr_varlist = ncdf_listvars(cdfid) 
    109109  zgr_varlist = strtrim(strlowcase(zgr_varlist), 2) 
    110 ;------------------------------------------------------ 
     110; is e3t a real 3D array? 
     111  IF (where(zgr_varlist EQ 'e3t'))[0] NE -1 THEN BEGIN  
     112    varinq = ncdf_varinq(cdfid, 'e3t') 
     113    if varinq.ndims GE 3 THEN BEGIN 
     114      ncdf_diminq, cdfid, varinq.dim[0], name, iii 
     115      ncdf_diminq, cdfid, varinq.dim[1], name, jjj 
     116      ncdf_diminq, cdfid, varinq.dim[2], name, kkk 
     117      IF iii EQ jpi AND jjj EQ jpj AND kkk EQ jpk THEN key_e3_3d = 1 
     118    ENDIF    
     119  ENDIF 
     120; is gdept a real 3D array? 
     121  IF (where(zgr_varlist EQ 'gdept'))[0] NE -1 THEN BEGIN  
     122    varinq = ncdf_varinq(cdfid, 'gdept') 
     123    if varinq.ndims GE 3 THEN BEGIN 
     124      ncdf_diminq, cdfid, varinq.dim[0], name, iii 
     125      ncdf_diminq, cdfid, varinq.dim[1], name, jjj 
     126      ncdf_diminq, cdfid, varinq.dim[2], name, kkk 
     127      IF iii EQ jpi AND jjj EQ jpj AND kkk EQ jpk THEN key_gdep_3d = 1 
     128    ENDIF    
     129  ENDIF 
    111130;------------------------------------------------------ 
    112131; 
     
    139158    varid[16+z] = ncdf_vardef(cdfidout, zgrlist[z], [dimidz], /float) 
    140159; variables related to the partial steps 
    141   IF (where(zgr_varlist EQ 'hdept'))[0] NE -1 THEN $ 
     160  with_partial = keyword_set(key_e3_3d) OR (where(zgr_varlist EQ 'hdept'))[0] NE -1 $ 
     161                 OR (where(zgr_varlist EQ 'e3tp'))[0] NE -1 $ 
     162                 OR (where(zgr_varlist EQ 'e3t_ps'))[0] NE -1 
     163  IF with_partial THEN BEGIN 
    142164    varid = [varid, ncdf_vardef(cdfidout, 'hdept', [dimidx, dimidy], /float)] 
    143   IF (where(zgr_varlist EQ 'hdepw'))[0] NE -1 THEN $ 
    144165    varid = [varid, ncdf_vardef(cdfidout, 'hdepw', [dimidx, dimidy], /float)] 
    145 ; old variable name. keep for compatibility with old run. Change e3tp to e3t_ps 
    146   IF (where(zgr_varlist EQ 'e3tp'))[0] NE -1 THEN $ 
    147166    varid = [varid, ncdf_vardef(cdfidout, 'e3t_ps', [dimidx, dimidy], /float)] 
    148 ; old variable name. keep for compatibility with old run. Change e3wp to e3w_ps 
    149   IF (where(zgr_varlist EQ 'e3wp'))[0] NE -1 THEN $ 
    150167    varid = [varid, ncdf_vardef(cdfidout, 'e3w_ps', [dimidx, dimidy], /float)] 
    151 ; 
    152   IF (where(zgr_varlist EQ 'e3t_ps'))[0] NE -1 THEN $ 
    153     varid = [varid, ncdf_vardef(cdfidout, 'e3t_ps', [dimidx, dimidy], /float)] 
    154   IF (where(zgr_varlist EQ 'e3w_ps'))[0] NE -1 THEN $ 
    155     varid = [varid, ncdf_vardef(cdfidout, 'e3w_ps', [dimidx, dimidy], /float)] 
    156 ;   IF (where(zgr_varlist EQ 'e3u_ps'))[0] NE -1 THEN $ 
    157 ;     varid = [varid, ncdf_vardef(cdfidout, 'e3u_ps', [dimidx, dimidy], /float)] 
    158 ;   IF (where(zgr_varlist EQ 'e3v_ps'))[0] NE -1 THEN $ 
    159 ;     varid = [varid, ncdf_vardef(cdfidout, 'e3v_ps', [dimidx, dimidy], /float)] 
     168  ENDIF 
     169; 
    160170  IF (where(zgr_varlist EQ 'mbathy'))[0] NE -1 THEN $ 
    161171    varid = [varid, ncdf_vardef(cdfidout, 'mbathy', [dimidx, dimidy], /short)] 
     
    163173  msklist = ['tmask', 'umask', 'vmask', 'fmask'] 
    164174  FOR m = 0, n_elements(msklist)-1 DO $ 
    165     varid = [varid, ncdf_vardef(cdfidout, msklist[m] $ 
    166                                 , [dimidx, dimidy, dimidz], /byte)] 
     175    varid = [varid, ncdf_vardef(cdfidout, msklist[m], [dimidx, dimidy, dimidz], /byte)] 
    167176;------------------------------------------------------ 
    168177;------------------------------------------------------ 
     
    189198  inzgrlist =  zgrlist 
    190199  IF (where(zgr_varlist EQ 'gdept_0'))[0] NE -1 THEN inzgrlist =  inzgrlist+'_0' 
    191   FOR z = 0, n_elements(zgrlist)-1 DO $ 
    192     ncdf_transfer, cdfid, cdfidout, inzgrlist[z], zgrlist[z] 
     200  FOR z = 0, n_elements(zgrlist)-1 DO ncdf_transfer, cdfid, cdfidout, inzgrlist[z], zgrlist[z] 
    193201; partial step variables 
    194   IF (where(zgr_varlist EQ 'hdept'))[0] NE -1 THEN $ 
    195     ncdf_transfer, cdfid, cdfidout, 'hdept' 
    196   IF (where(zgr_varlist EQ 'hdepw'))[0] NE -1 THEN $ 
    197     ncdf_transfer, cdfid, cdfidout, 'hdepw' 
    198   IF (where(zgr_varlist EQ 'e3tp'))[0] NE -1 THEN $ 
    199     ncdf_transfer, cdfid, cdfidout, 'e3tp', 'e3t_ps' 
    200   IF (where(zgr_varlist EQ 'e3wp'))[0] NE -1 THEN $ 
    201     ncdf_transfer, cdfid, cdfidout, 'e3wp', 'e3w_ps' 
    202   IF (where(zgr_varlist EQ 'e3t_ps'))[0] NE -1 THEN $ 
    203     ncdf_transfer, cdfid, cdfidout, 'e3t_ps' 
    204   IF (where(zgr_varlist EQ 'e3w_ps'))[0] NE -1 THEN $ 
    205     ncdf_transfer, cdfid, cdfidout, 'e3w_ps' 
    206 ;   IF (where(zgr_varlist EQ 'e3u_ps'))[0] NE -1 THEN $ 
    207 ;     ncdf_transfer, cdfid, cdfidout, 'e3u_ps' 
    208 ;   IF (where(zgr_varlist EQ 'e3v_ps'))[0] NE -1 THEN $ 
    209 ;     ncdf_transfer, cdfid, cdfidout, 'e3v_ps' 
    210   IF (where(zgr_varlist EQ 'mbathy'))[0] NE -1 THEN $ 
    211     ncdf_transfer, cdfid, cdfidout, 'mbathy' 
     202  IF (where(zgr_varlist EQ 'hdept' ))[0] NE -1 THEN ncdf_transfer, cdfid, cdfidout, 'hdept' 
     203  IF (where(zgr_varlist EQ 'hdepw' ))[0] NE -1 THEN ncdf_transfer, cdfid, cdfidout, 'hdepw' 
     204  IF (where(zgr_varlist EQ 'e3tp'  ))[0] NE -1 THEN ncdf_transfer, cdfid, cdfidout, 'e3tp', 'e3t_ps' 
     205  IF (where(zgr_varlist EQ 'e3wp'  ))[0] NE -1 THEN ncdf_transfer, cdfid, cdfidout, 'e3wp', 'e3w_ps' 
     206  IF (where(zgr_varlist EQ 'e3t_ps'))[0] NE -1 THEN ncdf_transfer, cdfid, cdfidout, 'e3t_ps' 
     207  IF (where(zgr_varlist EQ 'e3w_ps'))[0] NE -1 THEN ncdf_transfer, cdfid, cdfidout, 'e3w_ps' 
     208  IF (where(zgr_varlist EQ 'mbathy'))[0] NE -1 THEN ncdf_transfer, cdfid, cdfidout, 'mbathy' 
     209; 
     210  IF keyword_set(key_e3_3d)  THEN BEGIN 
     211; get the bottom 
     212    CASE (ncdf_varinq(cdfid, 'mbathy')).ndims OF 
     213      2:ncdf_varget, cdfid, 'mbathy', bat, count = [jpi, jpj] 
     214      3:ncdf_varget, cdfid, 'mbathy', bat, count = [jpi, jpj, 1] 
     215      4:ncdf_varget, cdfid, 'mbathy', bat, count = [jpi, jpj, 1, 1] 
     216    ENDCASE 
     217    bottom = 0L > ( long(bat) - 1L ) 
     218    bottom = lindgen(jpi, jpj) + jpi*jpj*temporary(bottom) 
     219; 
     220    CASE (ncdf_varinq(cdfid, 'e3t')).ndims OF 
     221      3:ncdf_varget, cdfid, 'e3t', res, count = [jpi, jpj, jpk] 
     222      4:ncdf_varget, cdfid, 'e3t', res, count = [jpi, jpj, jpk, 1] 
     223    ENDCASE 
     224    ncdf_varput, cdfidout, 'e3t_ps', (temporary(res))[bottom] * (bat NE 0L) 
     225; 
     226    CASE (ncdf_varinq(cdfid, 'e3w')).ndims OF 
     227      3:ncdf_varget, cdfid, 'e3w', res, count = [jpi, jpj, jpk] 
     228      4:ncdf_varget, cdfid, 'e3w', res, count = [jpi, jpj, jpk, 1] 
     229    ENDCASE 
     230    ncdf_varput, cdfidout, 'e3w_ps', (temporary(res))[bottom] * (bat NE 0L) 
     231  ENDIF 
     232; 
     233  IF keyword_set(key_gdep_3d)  THEN BEGIN 
     234; 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 
     240    bottom = 0L > ( long(bat) - 1L ) 
     241    bottom = lindgen(jpi, jpj) + jpi*jpj*temporary(bottom) 
     242; 
     243    CASE (ncdf_varinq(cdfid, 'gdept')).ndims OF 
     244      3:ncdf_varget, cdfid, 'gdept', res, count = [jpi, jpj, jpk] 
     245      4:ncdf_varget, cdfid, 'gdept', res, count = [jpi, jpj, jpk, 1] 
     246    ENDCASE 
     247    ncdf_varput, cdfidout, 'hdept', (temporary(res))[bottom] * (bat NE 0L) 
     248; 
     249    bottom = jpi*jpj + temporary(bottom) 
     250    CASE (ncdf_varinq(cdfid, 'gdepw')).ndims OF 
     251      3:ncdf_varget, cdfid, 'gdepw', res, count = [jpi, jpj, jpk] 
     252      4:ncdf_varget, cdfid, 'gdepw', res, count = [jpi, jpj, jpk, 1] 
     253    ENDCASE 
     254    ncdf_varput, cdfidout, 'hdepw', (temporary(res))[bottom] * (bat NE 0L) 
     255  ENDIF 
    212256; 
    213257; mask 
     
    221265    FOR m = 0, 3 DO BEGIN 
    222266      CASE (ncdf_varinq(cdfid, msklist[m])).ndims OF 
    223         3:ncdf_varget, cdfid, msklist[m], zzz, offset = [0, 0, k] $ 
    224         , count = [jpi, jpj, 1] 
    225         4:ncdf_varget, cdfid, msklist[m], zzz, offset = [0, 0, k, 0] $ 
    226         , count = [jpi, jpj, 1, 1] 
     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] 
    227269      ENDCASE 
    228       ncdf_varput, cdfidout, msklist[m], byte(temporary(zzz)) $ 
    229         , offset = [0, 0, k], count = [jpi, jpj, 1] 
     270      ncdf_varput, cdfidout, msklist[m], byte(temporary(zzz)), offset = [0, 0, k], count = [jpi, jpj, 1] 
    230271    ENDFOR 
    231272  ENDFOR 
Note: See TracChangeset for help on using the changeset viewer.