New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 2751 for trunk/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_ts_AMOC.pro – NEMO

Ignore:
Timestamp:
2011-04-26T10:45:52+02:00 (13 years ago)
Author:
smasson
Message:

large update of IDL_scripts for Is-ENES

File:
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/CONFIG/ORCA2_LIM/IDL_scripts/std_ts_AMOC.pro

    r2740 r2751  
    1 pro ts_mean_V, sEXP1, sEXP2, year1, year2, s_iodir_data, POSTSCRIPT = postscript, _extra = ex 
     1PRO std_ts_read_AMOC, var_name, dt1, dt2, prefix, suffix, t45, t70, t50 
    22 
    3    
    43  compile_opt idl2, strictarrsubs 
    54   
    6   @common 
    7    
    8  @initorca2 
    9   
     5@common 
     6@std_common 
    107 
    11  if KEYWORD_SET(POSTSCRIPT) then begin 
    12     openps, sEXP1+'_V_mean.ps', portrait = 1 
    13  endif 
    14   
    15 ; inizialization of vectors (for experience 1 and 2)  
    16  ts_mAMOC45 = 0. 
    17  ts_mAABW70 = 0. 
    18  ts_mAABC50 = 0. 
    19  ts_mAMOC45_2 = 0. 
    20  ts_mAABW70_2 = 0. 
    21  ts_mAABC50_2 = 0. 
     8  list = rseries_ncdf(var_name, dt1, dt2, prefix, suffix, /fileslist) 
     9  nfiles = n_elements(list) 
    2210 
    23  ts_Time = 0. 
    24   
    25  for year=year1,year2 do begin 
    26      
    27     date1 = year * 10000L + 101 
    28     date2 = year * 10000L + 1231 
    29     filename = getname(s_iodir_data,sEXP1,'1Y','grid_V',date1) 
    30     filename2 = getname(s_iodir_data,sEXP2,'1Y','grid_V',date1) 
    31      
    32     if filename eq '' then stop  
    33      
    34     domdef, 0, jpk-1,/zindex 
     11  t45 = 0. 
     12  t70 = 0. 
     13  t50 = 0. 
     14  ts_Time = 0. 
    3515 
    36     V1 = read_ncdf('vocetr_eff',date1 ,date2 , filename = filename, /nostruct) 
    37     V2 = read_ncdf('vocetr_eff',date1 ,date2 , filename = filename2, /nostruct) 
    38      
    39     msf_tot = msf(V1, indexboxzoom = ind) 
    40     msf2_tot = msf(V2, indexboxzoom = ind) 
    41      
    42     yaxis = gphit[ind[0], ind[2]:ind[3]] 
    43   
     16  trans = strlowcase(var_name) EQ 'vocetr_eff' 
     17 
     18  FOR i = 0, nfiles-1 DO BEGIN 
     19    var = read_ncdf(var_name, allrecords = allrec, filename = list[i], /nostruct) 
     20    ts_Time = [ ts_Time, Time] 
     21; 
     22    FOR t = 0, jpt-1 DO BEGIN 
     23      msftot = msf(var[*, *, *, t], TRANSPORT = trans, /nostruct, indexboxzoom = ind) 
     24      yaxis = gphit[ind[0], ind[2]:ind[3]] 
     25 
    4426; computation of max Atlatic Meridional Overturninc Circulation at 40°N and 50°N 
    45 ;;  see plot msf global 
    46     indy = where(yaxis gt 40 and yaxis le 50) 
    47     domdef, 0, 3500 
    48      
    49     mAMOC45 = max(msf_tot.arr[indy, firstzw:lastzw],/NaN) 
    50     mAMOC45_2 = max(msf2_tot.arr[indy, firstzw:lastzw],/NaN) 
    51  
     27      indy = where(yaxis gt 40 and yaxis le 50) 
     28      domdef, 0, 3500 
     29      t45 = [t45, max(msftot[indy, firstzw:lastzw], /NaN)] 
     30       
    5231; computation of max atlantic Antarctic Bottom Water between 80°S and 65°S 
    53 ;; see plot msf global 
    54     indy = where(yaxis gt -80 and yaxis le -65) 
    55     domdef, 300, 3500 
    56      
    57     mAABW70 = min(msf_tot.arr[indy, firstzw:lastzw],/NaN) 
    58     mAABW70_2 = min(msf2_tot.arr[indy, firstzw:lastzw],/NaN) 
     32      indy = where(yaxis gt -80 and yaxis le -65) 
     33      domdef, 300, 3500 
     34      t70 = [t70, min(msftot[indy, firstzw:lastzw], /NaN)] 
    5935 
    6036;  computation of max Antarctic Abyssal Bottom Cell between 65°S and 30°N ,  
    61 ;; see plot msf global 
    62     indy = where(yaxis gt -65 and yaxis le 30) 
    63     domdef, 2500, 5000 
     37      indy = where(yaxis gt -65 and yaxis le 30) 
     38      domdef, 2500, 5000 
     39      t50 = [t50, min(msftot[indy, firstzw:lastzw], /NaN)] 
     40       
     41      domdef, 0, jpk-1, /zindex 
     42    ENDFOR 
     43 
     44  ENDFOR 
     45 
     46  time = ts_Time[1:*]           ; remove first record of 0 
     47  jpt = n_elements(time) 
     48   
     49  t45 = t45[1:*]                ; remove first record of 0  
     50  t70 = t70[1:*]                ; remove first record of 0  
     51  t50 = t50[1:*]                ; remove first record of 0  
     52 
     53  return 
     54end 
     55 
     56pro std_ts_AMOC, masknp, s_iodir_data, POSTSCRIPT = postscript, _extra = ex 
     57 
     58  compile_opt idl2, strictarrsubs 
     59   
     60@common 
     61@std_common 
     62 
     63; get exp1 info 
     64  vV1 = getenv('VAR1_V')   &   prefix = getenv('V1V_PREF')    &   suffix = getenv('V1V_SUFF') 
     65; get exp2 info 
     66  vV2 = getenv('VAR2_V')   &   prefix2 = getenv('V2V_PREF')   &   suffix2 = getenv('V2V_SUFF') 
     67; 
     68  cdti3 = string(cnt, format = '(i3.3)') 
     69  print, cdti3 + ') ' + blabla 
     70  filename = cdti3 + '_ts_AMOC_'+prefix 
     71  if prefix NE prefix2 then filename = filename + '_'+prefix2 
     72  if KEYWORD_SET(postscript) then openps, filename+'_1.ps', portrait = 1 
     73; 
     74  d1_d2 = '('+strtrim(date1, 1)+' - '+strtrim(date2, 1)+')' 
     75  d1_d2_2 = '('+strtrim(date1_2, 1)+' - '+strtrim(date2_2, 1)+')' 
     76; 
     77  iodir = std_iodir_data 
     78 
     79; compute the MSF 
     80 
     81  std_ts_read_AMOC, vV1, date1, date2, prefix, suffix, t45, t70, t50 
     82  if prefix NE prefix2 then begin 
     83    tsave = time 
     84    std_ts_read_AMOC, vV2, date1_2, date2_2, prefix2, suffix2, t45_2, t70_2, t50_2 
     85    time = tsave   &   IF n_elements(time) NE jpt THEN stop 
     86  ENDIF 
     87 
     88; plots...   
     89 
     90  title = prefix+' '+d1_d2+'!C'+'Max Atlantic MOC between 40N and 50N' 
     91  pltt, t45, 't', 0., 30., date1, date2, /REMPLI, /PORTRAIT $ 
     92        ,  small = [1, 2, 1],  TITLE = title, YTITLE = varunit, _extra = ex 
     93  IF prefix NE prefix2 then begin 
     94    title = prefix+' '+d1_d2+' - '+prefix2+' '+d1_d2_2+'!C'+'Max Atlantic MOC between 40N and 50N' 
     95    pltt, t45 - t45_2, 't', -9., 9., date1, date2, /REMPLI, /NOERASE $ 
     96          ,  COLOR = 250, small = [1, 2, 2],  TITLE = title, YTITLE = varunit, _extra = ex 
     97  endif 
     98   
     99  htmltxt = [ htmltxt, '<hr>'+blabla, '<br><img width="80%" src='+filename+'_1.png  />  ' ] 
     100  if KEYWORD_SET(postscript) then closeps 
     101  if KEYWORD_SET(postscript) then openps, filename+'_2.ps', portrait = 1 
     102 
     103  title = prefix+' '+d1_d2+'!C'+'Max AntArctic Bottom Water between 80S and 65S '+d1_d2 
     104  pltt, -t70, 't', 0., 20., date1, date2, /REMPLI, /PORTRAIT, window = 2 $ 
     105        , small = [1, 2, 1],  TITLE = title, YTITLE = varunit, _extra = ex 
     106  if prefix NE prefix2 then begin  
     107    title = prefix+' '+d1_d2+' - '+prefix2+' '+d1_d2_2+'!C'+'Max AntArctic Bottom Water between 80S and 65S' 
     108    pltt, -t70 + t70_2, 't', -5., 5., date1, date2, /REMPLI, /NOERASE $ 
     109          ,  COLOR = 250, small = [1, 2, 2],  TITLE = title, YTITLE = varunit, _extra = ex 
     110  endif 
     111   
     112  htmltxt = [ htmltxt, '<hr>'+blabla, '<br><img width="80%" src='+filename+'_2.png  />  ' ] 
     113  if KEYWORD_SET(postscript) then closeps 
     114  if KEYWORD_SET(postscript) then openps, filename+'_3.ps', portrait = 1 
     115 
     116  title = prefix+' '+d1_d2+'!C'+'Max AntArctic Bottom Cell between 65S and 30N '+d1_d2 
     117  pltt, -t50, 't', 5., 30., date1, date2, /REMPLI, /PORTRAIT, window = 3 $ 
     118        ,  small = [1, 2, 1],  TITLE = title, YTITLE = varunit, _extra = ex 
     119  if prefix NE prefix2 then begin 
     120    title = prefix+' '+d1_d2+' - '+prefix2+' '+d1_d2_2+'!C'+'Max AntArctic Bottom Cell between 65S and 30N' 
     121    pltt, -t50 + t50_2, 't', -5., 5., date1, date2, /REMPLI, /NOERASE  $ 
     122          ,  COLOR = 250, small = [1, 2, 2],  TITLE = title, YTITLE = varunit, _extra = ex 
     123  endif 
     124   
     125  domdef, 0, jpk-1, /zindex 
     126 
     127  htmltxt = [ htmltxt, '<hr>'+blabla, '<br><img width="80%" src='+filename+'_3.png  />  ' ] 
     128  if KEYWORD_SET(postscript) then closeps 
    64129     
    65     mAABC50 = min(msf_tot.arr[indy, firstzw:lastzw],/NaN) 
    66     mAABC50_2 = min(msf2_tot.arr[indy, firstzw:lastzw],/NaN) 
    67  
    68 ; creation of Time Series 
    69 ; for EXPERIENCE 1 
    70     ts_mAMOC45 = [ ts_mAMOC45, mAMOC45 ] 
    71     ts_mAABW70 = [ ts_mAABW70, mAABW70 ] 
    72     ts_mAABC50 = [ ts_mAABC50, mAABC50 ] 
    73  
    74 ; for EXPERIENCE 2 
    75     ts_mAMOC45_2 = [ ts_mAMOC45_2, mAMOC45_2 ] 
    76     ts_mAABW70_2 = [ ts_mAABW70_2, mAABW70_2 ] 
    77     ts_mAABC50_2 = [ ts_mAABC50_2, mAABC50_2 ] 
    78     
    79     ts_Time = [ ts_Time, Time]  ; Time = date 
    80      
    81  endfor 
    82  
    83  ts_mAMOC45 = ts_mAMOC45[1:*]   ; remove first record of 0 
    84  ts_mAABW70 = ts_mAABW70[1:*]   ; remove first record of 0 
    85  ts_mAABC50 = ts_mAABC50[1:*]   ; remove first record of 0 
    86   
    87  ts_mAMOC45_2 = ts_mAMOC45_2[1:*]   ; remove first record of 0 
    88  ts_mAABW70_2 = ts_mAABW70_2[1:*]   ; remove first record of 0 
    89  ts_mAABC50_2 = ts_mAABC50_2[1:*]   ; remove first record of 0 
    90  
    91  Time = ts_Time[1:*]            ; remove first record of 0 
    92   
    93  jpt = n_elements(Time) 
    94   
    95  title = sEXP1+' Max Atlantic MOC between 40N and 50N --- year '+strtrim(year1,1)+' - '+strtrim(year2,1) 
    96  pltt, ts_mAMOC45,'t', 0., 30., year1 * 10000L + 101, year2 * 10000L + 1231 , /REMPLI $ 
    97       ,  small = [1,2,1],  TITLE = title, YTITLE='Sv', FORMAT = '(I3)', /PORTRAIT, _extra = ex 
    98   
    99  if sEXP2 ne sEXP1 then begin 
    100     title = sEXP1+' - '+sEXP2+' Max Atlantic MOC between 40N and 50N --- year '+strtrim(year1,1)+' - '+strtrim(year2,1) 
    101     pltt, ts_mAMOC45 - ts_mAMOC45_2,'t', -9., 9., year1 * 10000L + 101, year2 * 10000L + 1231 , /REMPLI, /NOERASE $ 
    102           ,  COLOR = 250, small = [1,2,2],  TITLE = title, YTITLE='Sv', FORMAT = '(I3)', /PORTRAIT, _extra = ex 
    103  endif 
    104   
    105  title = sEXP1+' Max AntArctic Bottom Water between 80S and 65S --- year '+strtrim(year1,1)+' - '+strtrim(year2,1) 
    106  pltt,-ts_mAABW70,'t', 0., 20., year1 * 10000L + 101, year2 * 10000L + 1231 , /REMPLI $ 
    107       , small = [1,2,1],  TITLE = title, YTITLE='Sv', FORMAT = '(I3)', /PORTRAIT, _extra = ex 
    108   
    109  if sEXP2 ne sEXP1 then begin  
    110     title = sEXP1+' - '+sEXP2+' Max AntArctic Bottom Water between 80S and 65S --- year '+strtrim(year1,1)+' - '+strtrim(year2,1) 
    111     pltt,-ts_mAABW70 + ts_mAABW70_2 ,'t', -5., 5., year1 * 10000L + 101, year2 * 10000L + 1231 , /REMPLI, /NOERASE $ 
    112          ,  COLOR = 250, small = [1,2,2],  TITLE = title, YTITLE='Sv', FORMAT = '(I3)', /PORTRAIT, _extra = ex 
    113  endif 
    114   
    115  title = sEXP1+' Max AntArctic Bottom Cell between 65S and 30N --- year '+strtrim(year1,1)+' - '+strtrim(year2,1) 
    116  pltt,-ts_mAABC50,'t', 5., 30., year1 * 10000L + 101, year2 * 10000L + 1231 , /REMPLI $ 
    117       ,  small = [1,2,1],  TITLE = title, YTITLE='Sv', FORMAT = '(I3)', /PORTRAIT, _extra = ex 
    118  
    119  if sEXP2 ne sEXP1 then begin 
    120  
    121     title = sEXP1+' - '+sEXP2+' Max AntArctic Bottom Cell between 65S and 30N --- year '+strtrim(year1,1)+' - '+strtrim(year2,1) 
    122     pltt,-ts_mAABC50 + ts_mAABC50_2,'t', -5., 5., year1 * 10000L + 101, year2 * 10000L + 1231 , /REMPLI,/NOERASE  $ 
    123          ,  COLOR = 250, small = [1,2,2],  TITLE = title, YTITLE='Sv', FORMAT = '(I3)', /PORTRAIT, _extra = ex 
    124  endif 
    125  
    126  if KEYWORD_SET(POSTSCRIPT) then begin 
    127     closeps 
    128  endif 
    129   
    130   
    131  return 
     130  return 
    132131end 
Note: See TracChangeset for help on using the changeset viewer.