0001 function [elements,grids,loads,constraints,materials,part,tpart]=ModelProcessorDiagnosticHutter(md);
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 global cluster
0014
0015 if cluster,
0016
0017 element_partitioning=MeshPartition(md,numlabs);
0018 else
0019
0020 element_partitioning=ones(md.numberofelements,1);
0021 labindex=1;
0022 end
0023
0024
0025 if strcmpi(md.type,'2d'),
0026 pos=find(md.gridonhutter);
0027 count=[1:length(pos)]';
0028
0029 elements=struct('element',cell(length(pos),1));
0030 materials=struct('material',cell(length(pos)+1,1));
0031 mygrids=zeros(md.numberofgrids,1);
0032 [elements(count).element]=deal(singelem);
0033
0034 elements(count)=SetStructureField(elements(count),'element','type','singelem');
0035 elements(count)=SetStructureField(elements(count),'element','id',count);
0036 elements(count)=SetStructureField(elements(count),'element','g',pos);
0037 elements(count)=SetStructureField(elements(count),'element','h',md.thickness(pos));
0038 elements(count)=SetStructureField(elements(count),'element','k',md.drag(pos));
0039 elements(count)=SetStructureField(elements(count),'element','matid',count);
0040
0041 [materials(count).material]=deal(matice);
0042 materials(count)=SetStructureField(materials(count),'material','id',count);
0043 materials(count)=SetStructureField(materials(count),'material','B',md.B(pos));
0044 materials(count)=SetStructureField(materials(count),'material','n',3);
0045
0046 else
0047 pos=find(1-md.gridonsurface);
0048 grids_el=[pos md.uppergrids(pos)];
0049 count=1:length(pos);
0050
0051 elements=struct('element',cell(length(pos),1));
0052 materials=struct('material',cell(length(pos)+1,1));
0053 mygrids=zeros(md.numberofgrids,1);
0054 [elements(count).element]=deal(beamelem);
0055
0056 elements(count)=SetStructureField(elements(count),'element','type','beamelem');
0057 elements(count)=SetStructureField(elements(count),'element','id',count');
0058 elements(count)=SetStructureField(elements(count),'element','g',grids_el(count,1:2));
0059 elements(count)=SetStructureField(elements(count),'element','h',md.thickness(grids_el));
0060 elements(count)=SetStructureField(elements(count),'element','s',md.surface(grids_el));
0061 elements(count)=SetStructureField(elements(count),'element','b',md.bed(grids_el));
0062 elements(count)=SetStructureField(elements(count),'element','k',md.drag(grids_el));
0063 elements(count)=SetStructureField(elements(count),'element','onbed',md.gridonbed(grids_el(:,1)));
0064 elements(count)=SetStructureField(elements(count),'element','onsurface',md.gridonsurface(grids_el(:,2)));
0065 elements(count)=SetStructureField(elements(count),'element','matid',count');
0066
0067 [materials(count).material]=deal(matice);
0068 materials(count)=SetStructureField(materials(count),'material','id',count');
0069 materials(count)=SetStructureField(materials(count),'material','B',md.B(grids_el)*[1;1]/2);
0070 materials(count)=SetStructureField(materials(count),'material','n',3);
0071
0072 end
0073
0074
0075 [materials(end).constants]=deal(matpar);
0076 materials(end)=SetStructureField(materials(end),'constants','g',md.g);
0077 materials(end)=SetStructureField(materials(end),'constants','rho_ice',md.rho_ice);
0078 materials(end)=SetStructureField(materials(end),'constants','beta',md.beta);
0079 materials(end)=SetStructureField(materials(end),'constants','meltingpoint',md.meltingpoint);
0080
0081 if cluster,
0082
0083 mygrids(md.elements(el3pos,:))=1;
0084 mygrids(md.elements(el6pos,:))=1;
0085 end
0086
0087 if cluster,
0088
0089
0090 bordergrids=double(gplus(mygrids)>1);
0091 else
0092 bordergrids=zeros(md.numberofgrids,1);
0093 end
0094
0095
0096 grids=struct('grid',cell(md.numberofgrids,1));
0097
0098 pos=[1:md.numberofgrids]';
0099 [grids(pos).grid]=deal(node);
0100 grids(pos)=SetStructureField(grids(pos),'grid','id',pos);
0101 grids(pos)=SetStructureField(grids(pos),'grid','x',md.x(pos));
0102 grids(pos)=SetStructureField(grids(pos),'grid','y',md.y(pos));
0103 grids(pos)=SetStructureField(grids(pos),'grid','z',md.z(pos));
0104 grids(pos)=SetStructureField(grids(pos),'grid','onbed',md.gridonbed(pos));
0105 grids(pos)=SetStructureField(grids(pos),'grid','border',bordergrids(pos));
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118 grids(pos)=SetStructureField(grids(pos),'grid','gridset','3456');
0119
0120
0121
0122 loads=struct('load',cell(0,0));
0123
0124
0125 if strcmpi(md.type,'3d'),
0126 if ~isempty(md.penalties) & ~isnan(md.penalties),
0127 for i=1:size(md.penalties,1),
0128 for j=1:(md.numlayers-1),
0129
0130
0131 constraints(count).constraint=rgb;
0132 constraints(count).constraint.grid1=md.penalties(i,1);
0133 constraints(count).constraint.grid2=md.penalties(i,j+1);
0134 constraints(count).constraint.dof=1;
0135 count=count+1;
0136
0137
0138 constraints(count).constraint=rgb;
0139 constraints(count).constraint.grid1=md.penalties(i,1);
0140 constraints(count).constraint.grid2=md.penalties(i,j+1);
0141 constraints(count).constraint.dof=2;
0142 count=count+1;
0143 end
0144 end
0145 end
0146 end
0147
0148
0149
0150 spcs=find(~md.gridonhutter);
0151 constraints=struct('constraint',cell(2*length(spcs),1));
0152
0153 count=1;
0154 for i=1:md.numberofgrids,
0155 if ~md.gridonhutter(i),
0156
0157
0158 constraints(count).constraint=spc;
0159 constraints(count).constraint.grid=i;
0160 constraints(count).constraint.dof=1;
0161 constraints(count).constraint.value=0;
0162 count=count+1;
0163
0164
0165 constraints(count).constraint=spc;
0166 constraints(count).constraint.grid=i;
0167 constraints(count).constraint.dof=2;
0168 constraints(count).constraint.value=0;
0169 count=count+1;
0170
0171 end
0172
0173 end
0174
0175
0176
0177 [part,tpart]=PartitioningVector(md,grids);
0178 end