/[MITgcm]/MITgcm_contrib/dfer/matlab_stuff/concatstruct.m
ViewVC logotype

Annotation of /MITgcm_contrib/dfer/matlab_stuff/concatstruct.m

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


Revision 1.2 - (hide annotations) (download)
Wed Mar 7 17:26:42 2018 UTC (6 years, 2 months ago) by dfer
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +20 -18 lines
Update with more flexible options

1 dfer 1.1 function NewField = concatstruct(OldField1,OldField2);
2    
3     name1=fieldnames(OldField1);
4     name2=fieldnames(OldField2);
5    
6     if size(name1,1) ~= size(name2,1)
7     disp('The 2 structures must have the same number of fields')
8     NewField=[];
9     return
10     end
11    
12     NewField=[];
13    
14     for i=1:size(name1,1)
15     if char(name1(i)) == char(name2(i))
16     nameloc = char(name1(i));
17     disp(['Field : ',nameloc])
18     %size(getfield(OldField1,nameloc));
19    
20 dfer 1.2 if strcmp(nameloc,'T')
21     disp([' concatenating, 1d'])
22     NewField=setfield(NewField,nameloc, ...
23     cat(1,getfield(OldField1,nameloc),getfield(OldField2,nameloc)));
24     elseif strcmp(nameloc,'iter')
25     disp([' concatenating, 1d'])
26     NewField=setfield(NewField,nameloc, ...
27     cat(1,getfield(OldField1,nameloc),getfield(OldField2,nameloc)));
28     elseif ( strcmp(nameloc,'iters_read_from_file') | strcmp(nameloc,'iters_from_file') )
29     disp([' concatenating, 1d'])
30     NewField=setfield(NewField,nameloc, ...
31     cat(1,getfield(OldField1,nameloc),getfield(OldField2,nameloc)));
32     elseif ndims(getfield(OldField2,nameloc)) == 4
33 dfer 1.1 disp([' concatenating, 4d'])
34     NewField=setfield(NewField,nameloc, ...
35     cat(4,getfield(OldField1,nameloc),getfield(OldField2,nameloc)));
36    
37     elseif ndims(getfield(OldField2,nameloc)) == 3
38 dfer 1.2 if length(getfield(OldField2,'iters_from_file')) == 1
39 dfer 1.1 disp([' concatenating, 4d'])
40     NewField=setfield(NewField,nameloc, ...
41     cat(4,getfield(OldField1,nameloc),getfield(OldField2,nameloc)));
42 dfer 1.2 else
43 dfer 1.1 disp([' concatenating, 3d'])
44     NewField=setfield(NewField,nameloc, ...
45     cat(3,getfield(OldField1,nameloc),getfield(OldField2,nameloc)));
46 dfer 1.2 end
47 dfer 1.1 elseif ndims(getfield(OldField2,nameloc)) == 2
48     disp([' concatenating, 2d'])
49     NewField=setfield(NewField,nameloc, ...
50     cat(3,getfield(OldField1,nameloc),getfield(OldField2,nameloc)));
51 dfer 1.2 % elseif strcmp(nameloc,'iters_from_file')
52     % disp([' concatenating, 1d'])
53     % NewField=setfield(NewField,nameloc, ...
54     % cat(1,getfield(OldField1,nameloc),getfield(OldField2,nameloc)));
55 dfer 1.1 else
56     disp([' replacing'])
57     NewField=setfield(NewField,nameloc,getfield(OldField1,nameloc));
58    
59     end
60    
61     end
62     end
63    
64    
65     return

  ViewVC Help
Powered by ViewVC 1.1.22