/[MITgcm]/MITgcm_contrib/gael/matlab_class/gcmfaces_misc/diff_mat.m
ViewVC logotype

Annotation of /MITgcm_contrib/gael/matlab_class/gcmfaces_misc/diff_mat.m

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (hide annotations) (download)
Thu Aug 25 22:43:25 2011 UTC (13 years, 10 months ago) by gforget
Branch: MAIN
CVS Tags: checkpoint65x, checkpoint65r, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, HEAD
- added routine : diff_mat.m checks that fields from two mat files match.
- added routine : density.m computes potential and in situ density.

1 gforget 1.1 function [report0]=diff_mat(file1,dir2,varargin);
2     %object: compute the %rms difference between fields in two mat files
3     %inputs: file1 is the file to compare with a reference
4     % dir2 is the reference file directory
5     %optional: file2 is the reference file (file1 by default)
6     %output: cell array containing the % rms difference display per field
7    
8     if nargin>2; file2=varargin{1}; else; file2=file1; end;
9    
10     new=open(file1); old=open([dir2 file2]);
11    
12     %new list of fields:
13     %===================
14     IInew=fieldnames(new); NInew=length(IInew);
15     %extend to structure fields:
16     JJ={};
17     for ii=1:NInew;
18     tmp0=IInew{ii}; tmp1=getfield(new,tmp0);
19     if isstruct(tmp1);
20     tmp2=fieldnames(tmp1);
21     for jj=1:length(tmp2); JJ{length(JJ)+1}=[tmp0 '.' tmp2{jj}]; end;
22     else;
23     JJ{length(JJ)+1}=tmp0;
24     end;
25     end;
26     %overwrite list of fields:
27     IInew=JJ; NInew=length(IInew);
28    
29     %old list of fields:
30     %===================
31     IIold=fieldnames(old); NIold=length(IIold);
32     %extend to structure fields:
33     JJ={};
34     for ii=1:NIold;
35     tmp0=IIold{ii}; tmp1=getfield(old,tmp0);
36     if isstruct(tmp1);
37     tmp2=fieldnames(tmp1);
38     for jj=1:length(tmp2); JJ{length(JJ)+1}=[tmp0 '.' tmp2{jj}]; end;
39     else;
40     JJ{length(JJ)+1}=tmp0;
41     end;
42     end;
43     %overwrite list of fields:
44     IIold=JJ; NIold=length(IIold);
45    
46     %compare new to old fields:
47     %==========================
48     report0={};
49     report1={};
50     for ii=1:NInew;
51     test0=isempty(find(strcmp(IIold,IInew{ii})));
52     test1=strfind(IInew{ii},'gcm2faces');
53     if test0;
54     txt0=sprintf(['new contains ' IInew{ii} ' BUT ref does not']);
55     report1{length(report1)+1,1}=txt0;
56     elseif test1;
57     txt0=sprintf(['test of ' IInew{ii} ' was omitted']);
58     report1{length(report1)+1,1}=txt0;
59     else;
60     tmp0=IInew{ii}; tmp00=strfind(tmp0,'.');
61     if isempty(tmp00);
62     %get the field:
63     tmp1=getfield(new,IInew{ii}); tmp2=getfield(old,IInew{ii});
64     elseif length(tmp00)==1;
65     %get the sub field:
66     tmp11=IInew{ii}(1:tmp00-1);
67     tmp1=getfield(new,tmp11); tmp2=getfield(old,tmp11);
68     tmp11=IInew{ii}(tmp00+1:end);
69     tmp1=getfield(tmp1,tmp11); tmp2=getfield(tmp2,tmp11);
70     else;
71     error(sprintf('cannot compare %s',tmp0));
72     end;
73     %do the comparison:
74     if isa(tmp1,'double')|isa(tmp1,'gcmfaces');
75     %add blanks for display:
76     tmp11=ceil(length(tmp0)/10)*10-length(tmp0); tmp11=char(32*ones(1,tmp11));
77     %compute difference:
78     tmp22=nanstd(tmp1(:))^2; if tmp22==0; tmp22=nanmean( tmp1(:).^2 ); end;
79     tmp22=100*sqrt(nanmean( (tmp1(:)-tmp2(:)).^2 )./tmp22);
80     %full text for display:
81     txt0=[tmp0 tmp11];
82     %txt0=sprintf('%s differs by %i%% from %s',txt0,round(tmp22),[dir2 file2]);
83     txt0=sprintf('%s diff by %i%%',txt0,round(tmp22));
84     %do display:
85     if tmp22~=0; fprintf([txt0 '\n']); end;
86     %add to report:
87     report0{length(report0)+1,1}=txt0;
88     end;
89     end;
90     end;
91    
92     %compare old field to new fields:
93     %================================
94     report2={};
95     for ii=1:NIold;
96     test0=~isempty(find(strcmp(IInew,IIold{ii})));
97     if ~test0;
98     txt0=sprintf(['ref contains ' IIold{ii} ' BUT new does not']);
99     report2{length(report2)+1,1}=txt0;
100     end;
101     end;
102    
103     %combine the various reports:
104     %============================
105     report0={report0{:} report1{:}}';
106     report0={report0{:} report2{:}}';
107    

  ViewVC Help
Powered by ViewVC 1.1.22