Changeset 406 for trunk/src/calc_field.m
- Timestamp:
- May 3, 2012, 7:30:05 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/calc_field.m
r405 r406 93 93 %% interpolation with new civ data 94 94 if isfield(DataIn,'SubRange') && isfield(DataIn,'Coord_tps') && (exist('Coord_interp','var') || check_grid ||check_der) 95 96 DataOut.ListGlobalAttribute=DataIn.ListGlobalAttribute; %reproduce global attribute95 %reproduce global attributes 96 DataOut.ListGlobalAttribute=DataIn.ListGlobalAttribute; 97 97 for ilist=1:numel(DataOut.ListGlobalAttribute) 98 98 DataOut.(DataOut.ListGlobalAttribute{ilist})=DataIn.(DataIn.ListGlobalAttribute{ilist}); 99 99 end 100 DataOut.ListVarName={'coord_y','coord_x','FF'}; 101 DataOut.VarDimName{1}='coord_y'; 102 DataOut.VarDimName{2}='coord_x'; 103 XMax=max(max(DataIn.SubRange(1,:,:)));% extrema of the coordinates 104 YMax=max(max(DataIn.SubRange(2,:,:))); 105 XMin=min(min(DataIn.SubRange(1,:,:))); 106 YMin=min(min(DataIn.SubRange(2,:,:))); 100 107 101 %create a default grid if needed 108 102 if ~exist('Coord_interp','var') 103 XMax=max(max(DataIn.SubRange(1,:,:)));% extrema of the coordinates 104 YMax=max(max(DataIn.SubRange(2,:,:))); 105 XMin=min(min(DataIn.SubRange(1,:,:))); 106 YMin=min(min(DataIn.SubRange(2,:,:))); 109 107 if ~isfield(DataIn,'Mesh') 110 108 DataIn.Mesh=sqrt(2*(XMax-XMin)*(YMax-YMin)/numel(DataIn.Coord_tps)); … … 121 119 coord_x=XMin:DataIn.Mesh:XMax; 122 120 coord_y=YMin:DataIn.Mesh:YMax; 121 npx=length(coord_x); 122 npy=length(coord_y); 123 DataOut.coord_x=[XMin XMax]; 124 DataOut.coord_y=[YMin YMax]; 123 125 [XI,YI]=meshgrid(coord_x,coord_y); 124 126 XI=reshape(XI,[],1); … … 126 128 Coord_interp=[XI YI]; 127 129 end 130 131 %initialise output 128 132 nb_sites=size(Coord_interp,1); 129 133 nb_coord=size(Coord_interp,2); 130 %initialise output 134 nbval=zeros(nb_sites,1); 135 NbSubDomain=size(DataIn.SubRange,3); 136 DataOut.ListVarName={'coord_y','coord_x'}; 137 DataOut.VarDimName={{'coord_y'},{'coord_x'}}; 138 DataOut.VarAttribute{1}=[]; 139 DataOut.VarAttribute{2}=[]; 131 140 for ilist=1:length(FieldList) 132 141 switch FieldList{ilist} … … 135 144 DataOut.V=zeros(nb_sites,1); 136 145 otherwise 137 % case{'vort','div','strain'}% case of spatial derivatives138 146 DataOut.(FieldList{ilist})=zeros(nb_sites,1); 139 % otherwise % case of a scalar 140 % check_val=1; 141 % DataOut.(FieldList{ilist})=zeros(size(Coord_interp,1)); 142 end 143 end 144 nbval=zeros(nb_sites,1); 145 NbSubDomain=size(DataIn.SubRange,3); 146 %DataIn.Coord_tps=DataIn.Coord_tps(1:end-3,:,:);% suppress the 3 zeros used to fit with the dimensions of variables 147 end 148 end 149 150 % interpolate data in each subdomain 147 151 for isub=1:NbSubDomain 148 152 nbvec_sub=DataIn.NbSites(isub); … … 159 163 [EMDX,EMDY] = tps_eval_dxy(Coord_interp(ind_sel,:),DataIn.Coord_tps(1:nbvec_sub,:,isub));%kernels for calculating the spatial derivatives from tps 'sources' 160 164 end 165 var_count=0; 161 166 for ilist=1:length(FieldList) 162 167 switch FieldList{ilist} 163 168 case 'velocity' 164 169 ListFields={'U', 'V'}; 165 VarAttributes{ 1}.Role='vector_x';166 VarAttributes{ 2}.Role='vector_y';170 VarAttributes{var_count+1}.Role='vector_x'; 171 VarAttributes{var_count+2}.Role='vector_y'; 167 172 DataOut.U(ind_sel)=DataOut.U(ind_sel)+EM *DataIn.U_tps(1:nbvec_sub+3,isub); 168 173 DataOut.V(ind_sel)=DataOut.V(ind_sel)+EM *DataIn.V_tps(1:nbvec_sub+3,isub); 169 174 case 'u' 170 ListFields={' U'};171 VarAttributes{ 1}.Role='scalar';172 DataOut. U(ind_sel)=DataOut.U(ind_sel)+EM *DataIn.U_tps(1:nbvec_sub+3,isub);175 ListFields={'u'}; 176 VarAttributes{var_count+1}.Role='scalar'; 177 DataOut.u(ind_sel)=DataOut.u(ind_sel)+EM *DataIn.U_tps(1:nbvec_sub+3,isub); 173 178 case 'v' 174 ListFields={' V'};175 VarAttributes{ 1}.Role='scalar';176 DataOut. V(ind_sel)=DataOut.V(ind_sel)+EM *DataIn.V_tps(1:nbvec_sub+3,isub);179 ListFields={'v'}; 180 VarAttributes{var_count+1}.Role='scalar'; 181 DataOut.v(ind_sel)=DataOut.v(ind_sel)+EM *DataIn.V_tps(1:nbvec_sub+3,isub); 177 182 case 'norm_vel' 178 183 ListFields={'norm_vel'}; 179 VarAttributes{ 1}.Role='scalar';184 VarAttributes{var_count+1}.Role='scalar'; 180 185 V=DataOut.U(ind_sel)+EM *DataIn.U_tps(1:nbvec_sub+3,isub); 181 186 V=DataOut.V(ind_sel)+EM *DataIn.V_tps(1:nbvec_sub+3,isub); … … 183 188 case 'vort' 184 189 ListFields={'vort'}; 185 VarAttributes{ 1}.Role='scalar';190 VarAttributes{var_count+1}.Role='scalar'; 186 191 DataOut.vort(ind_sel)=DataOut.vort(ind_sel)+EMDY *DataIn.U_tps(1:nbvec_sub+3,isub)-EMDX *DataIn.V_tps(1:nbvec_sub+3,isub); 187 192 case 'div' 188 193 ListFields={'div'}; 189 VarAttributes{ 1}.Role='scalar';194 VarAttributes{var_count+1}.Role='scalar'; 190 195 DataOut.div(ind_sel)=DataOut.div(ind_sel)+EMDX*DataIn.U_tps(1:nbvec_sub+3,isub)+EMDY *DataIn.V_tps(1:nbvec_sub+3,isub); 191 196 case 'strain' 192 197 ListFields={'strain'}; 193 VarAttributes{ 1}.Role='scalar';198 VarAttributes{var_count+1}.Role='scalar'; 194 199 DataOut.strain(ind_sel)=DataOut.strain(ind_sel)+EMDY*DataIn.U_tps(1:nbvec_sub+3,isub)+EMDX *DataIn.V_tps(1:nbvec_sub+3,isub); 195 200 end 196 end 197 DataOut.FF=nbval==0; %put errorflag to 1 for points outside the interpolation rang 198 nbval(nbval==0)=1; 199 DataOut.ListVarName=[DataOut.ListVarName ListFields]; 200 for ilist=3:numel(DataOut.ListVarName) 201 DataOut.VarDimName{ilist}={'coord_y','coord_x'}; 202 end 203 DataOut.VarAttribute={[],[]}; 204 DataOut.VarAttribute{3}.Role='errorflag'; 205 DataOut.VarAttribute=[DataOut.VarAttribute VarAttributes]; 201 DataOut.FF=nbval==0; %put errorflag to 1 for points outside the interpolation rang 202 nbval(nbval==0)=1; 203 DataOut.ListVarName=[DataOut.ListVarName ListFields {'FF'}]; 204 for ilist=1:numel(ListFields) 205 VarDimName{ilist}={'coord_y','coord_x'}; 206 DataOut.(ListFields{ilist})=reshape(DataOut.(ListFields{ilist}),npy,npx); 207 end 208 DataOut.FF=reshape(DataOut.FF,npy,npx); 209 DataOut.VarDimName=[DataOut.VarDimName VarDimName {{'coord_y','coord_x'}}] ; 210 VarAttributes{length(ListFields)+1}.Role='errorflag'; 211 DataOut.VarAttribute=[DataOut.VarAttribute VarAttributes]; 212 end 206 213 end 207 214 else
Note: See TracChangeset
for help on using the changeset viewer.