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

Contents 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 - (show 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 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