| 1 | function [STATE] = loadstate(varargin) | 
| 2 | %loadstate() | 
| 3 | %loadstate(DIRECTORY) | 
| 4 | %loadstate(ITERATION) | 
| 5 | %loadstate(DIRECTORY,ITERATION) | 
| 6 | % | 
| 7 | %Reads MITgcm parameter input files and output to create a STATE structure | 
| 8 | %If ITERATION is not specified, the last model state is read by default. | 
| 9 | %If DIRECTORY is not specified the current working directory is used. | 
| 10 | % | 
| 11 | %e.g. | 
| 12 | % >> STATE=loadstate; | 
| 13 | % >> STATE2=loadstate('/scratch/john/run2/'); | 
| 14 | % >> STATE3=loadstate(3000); | 
| 15 | % >> STATE4=loadstate('/scratch/john/run2/',2460); | 
| 16 | % | 
| 17 | % Elements  (u,v,w,t,s,eta) correspond to snap-shots. | 
| 18 | % Elements  (U,V,W,T,S,ETA) correspond to time averages. | 
| 19 | % | 
| 20 | %Written by adcroft@mit.edu, 2002 | 
| 21 | %$Header: | 
| 22 |  | 
| 23 | Dir='./'; | 
| 24 | iter=inf; | 
| 25 | if nargin~=0 | 
| 26 | for k = 1:nargin; | 
| 27 | if isstr(varargin{k}) | 
| 28 | Dir=[varargin{k} '/']; | 
| 29 | else | 
| 30 | iter=varargin{k}; | 
| 31 | end | 
| 32 | end | 
| 33 | end | 
| 34 |  | 
| 35 | Its=[]; | 
| 36 | [STATE.t,its]=rdmds([Dir 'T'],iter); if isempty(Its); Its=its; end | 
| 37 | [STATE.s,its]=rdmds([Dir 'S'],iter); if isempty(Its); Its=its; end | 
| 38 | [STATE.u,its]=rdmds([Dir 'U'],iter); if isempty(Its); Its=its; end | 
| 39 | [STATE.v,its]=rdmds([Dir 'V'],iter); if isempty(Its); Its=its; end | 
| 40 | [STATE.w,its]=rdmds([Dir 'W'],iter); if isempty(Its); Its=its; end | 
| 41 | [STATE.eta,its]=rdmds([Dir 'Eta'],iter); if isempty(Its); Its=its; end | 
| 42 | [STATE.T,its]=rdmds([Dir 'Ttave'],iter); if isempty(Its); Its=its; end | 
| 43 | [STATE.S,its]=rdmds([Dir 'Stave'],iter); if isempty(Its); Its=its; end | 
| 44 | [STATE.U,its]=rdmds([Dir 'uVeltave'],iter); if isempty(Its); Its=its; end | 
| 45 | [STATE.V,its]=rdmds([Dir 'vVeltave'],iter); if isempty(Its); Its=its; end | 
| 46 | [STATE.W,its]=rdmds([Dir 'wVeltave'],iter); if isempty(Its); Its=its; end | 
| 47 | [STATE.ETA,its]=rdmds([Dir 'ETAtave'],iter); if isempty(Its); Its=its; end | 
| 48 | STATE.iters=Its; | 
| 49 |  | 
| 50 | datafile=[Dir 'data']; | 
| 51 | dtClock = grepparameter(datafile,'deltatclock'); | 
| 52 | dtTracer = grepparameter(datafile,'deltattracer'); | 
| 53 | dtMom = grepparameter(datafile,'deltatmom'); | 
| 54 | dt = grepparameter(datafile,'deltat'); | 
| 55 | dt=[dt dtClock dtTracer dtMom]; dt=dt(1); | 
| 56 |  | 
| 57 | STATE.dt=dt; | 
| 58 | STATE.time_secs=its*dt; | 
| 59 | STATE.time_days=its*dt/86400; | 
| 60 | STATE.time_years=its*dt/86400/360; |