| 1 | 
adcroft | 
1.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; |