Undefined function or variable in a POD matlab code
4 views (last 30 days)
Show older comments
Hello all,
I am trying to run the following code:
function VelocityDistributionPOD (SnapshotsAddress)
%Method of Snapshots
%Section 1 -‐ Input snapshots
%Each snapshot (txt file) contains four columns. The first two columns are the velocity
%distribution grid point coordinates for x and y direction, respectively. The last two columns
%are u and v velocities, respectively.
SnapshotsAddress = pwd;
files = dir([SnapshotsAddress,'*.txt']);
n_snapshots = size(files,1);
for j=1:n_snapshots
fid = fopen([SnapshotsAddress,files(j).name], 'r');
data = fscanf(fid,'%f %f %f %f',[4,inf]);
x = data(1,:); % x coordinate
y = data(2,:); % y coordinate
U(j,:) = data(3,:); % u velocity
V(j,:) = data(4,:); % v velocity
fclose(fid);
end
%Section 2 -‐ Compute spatial correlation matrix C
c1 = U*U';
c2 = V*V';
C = (c1+c2)/n_snapshots;
%Section 3 -‐ Solve the eigenvalue problem: C * EigenVector = EigenValue * EigenVector
[beta, lmd] = svd(C);
%Section 4 -‐ Calculate basis functions
phix = U'*beta;
phiy = V'*beta;
% Normalize basis functions
GridNum = size(x,2);
for j=1:n_snapshots
PhiNor = 0;
for i=1:GridNum
PhiNor = PhiNor + phix(i,j)^2 + phiy(i,j)^2;
end
PhiNor = sqrt(PhiNor);
phix(:,j)= phix(:,j)/PhiNor;
phiy(:,j)= phiy(:,j)/PhiNor;
end
%Section 5 -‐ Calculate coefficient
TimCoeU = U*phix;
TimCoeV = V*phiy;
TimCoe = TimCoeU + TimCoeV;
%Section 6 -‐ Export basis functions
for a=1:n_snapshots
FilNamPhi = 1000+a;
PhiOut = fopen([SnapshotsAddress,num2str(FilNamPhi),'.txt']', 'wt');
fprintf(PhiOut, '#DaVis 7.2.2 2D-‐vector 16 145 145 "position" "mm" "position" "mm" "velocity" "m/s"\n');
phia = [x;y;phix(:,a)';phiy(:,a)'];
fprintf(PhiOut, '%20.9f %20.9f %20.9f %20.9f\n',phia);
fclose(PhiOut);
end
% Write coefficients into excel file
xlswrite([SnapshotsAddress,'TimCoe.xlsx'],TimCoe);
I have 3 .txt files in the same directory but it seems whenever I try to run I get the following error:
Undefined function or variable 'U'.
Error in VelocityDistributionPOD (line 20)
c1 = U*U';
I have tried to change the way to define the directory and reading the .txt files, couldn't get it to work.
Any ideas?, thank you!
Code reference:
Chen, H., Reuss, D. L., Hung, D. L., & Sick, V. (2013). A practical guide for using proper orthogonal decomposition in engine research. International Journal of Engine Research, 14(4), 307-319.
0 Comments
Accepted Answer
Jan
on 22 Dec 2022
Moved: Jan
on 22 Dec 2022
A strange detail:
function VelocityDistributionPOD (SnapshotsAddress)
SnapshotsAddress = pwd;
The folder name provided as input is overwritten. Why?
If the current folder does not contain txt files, U is not created. Then files = dir([SnapshotsAddress,'*.txt']); is empty and the loop with the import is not entered.
Remove this line
SnapshotsAddress = pwd;
and provide the correct folder as input. Then consider folder with and without trailing file separator:
files = dir(fullfile(SnapshotsAddress, '*.txt'));
4 Comments
Jan
on 23 Dec 2022
Edited: Jan
on 23 Dec 2022
What is the contents of the variable SnapshotsAddress? How do you provide the name of the folder, if it is neither a string nor a char vector?
"txt files are also within the directory!" - Matlab's error message tells clearly, that there are no txt files in the current folder.
More Answers (0)
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!