Using the JHU Turbulence Database with Matlab

Downloads

Matlab Code - turblib-20090809.tar.gz

This downloads a directory with a sample Matlab M-file (mex/turbm.m) which can be adapted to the
end-user's needs. The directory also includes MEX Matlab-C wrapper routines for each database
function along with several gSOAP wrapper functions that need not be modified. Users should
check that the mex/Makefile variables are specified to reflect system settings. Using a terminal
run 'make' from the mex directory to build all of the MEX libraries. Please see the mex/README file
for more information.

Overview

We have written several routines which use the gSOAP library to call the JHU Turbulence Database.
The Matlab interface to the JHU Turbulence Database is accomplished by using Matlab's MEX
functionality (see MEX-files Guide for more information). For each database function, a MEX routine
has been created which is used to communicate data from Matlab's interface to the gSOAP library
and back. This method does not use Matlab's built-in web service functions as they were found to
be problematic when comunicating with gSOAP.

Note: This Matlab interface has been also tested and found to work with newer versions of GNU Octave.

Limitations

Interpolation Flags

Note: Detailed descriptions of the underlying functions can be found in the analysis tools documentation.

% ---- Temporal Interpolation Options ----
NoTInt = 0; % No temporal interpolation
PCHIPInt = 1; % Piecewise cubic Hermit interpolation in time

% ---- Spatial Interpolation Flags for GetVelocity & GetVelocityAndPressure ----
NoSInt = 0; % No spatial interpolation
Lag4 = 4; % 4th order Lagrangian interpolation in space
Lag6 = 6; % 6th order Lagrangian interpolation in space
Lag8 = 8; % 8th order Lagrangian interpolation in space

% ---- Spatial Differentiation & Interpolation Flags for GetVelocityGradient & GetPressureGradient ----
FD4NoInt = 40; % 4th order finite differential scheme for grid values, no spatial interpolation
FD6NoInt = 60; % 6th order finite differential scheme for grid values, no spatial interpolation
FD8NoInt = 80; % 8th order finite differential scheme for grid values, no spatial interpolation
FD4Lag4 = 44; % 4th order finite differential scheme for grid values, 4th order Lagrangian interpolation in space

Function Descriptions

GetVelocity

real(3,count) output = getVelocity(char authkey, char dataset, real time,
  spatial interpolation option, temporal interpolation option, integer count,
  real(3,count) input);


Example

for i = 1:10
  points(1, i) = 0.1*i; % x
  points(2, i) = 0.3*i; % y
  points(3, i) = 0.2*i; % z
end

fprintf('\nRequesting velocity at 10 points...\n');
result3 = getVelocity (authkey, dataset, time, Lag6, NoTInt, 10, points);
for i = 1:10
  fprintf(1,'Vx = %f\n', result3(1,i));
  fprintf(1,'Vy = %f\n', result3(2,i));
  fprintf(1,'Vz = %f\n', result3(3,i));
end

GetVelocityAndPressure

real(4,count) output = getvelocityandpressure(char authkey, char dataset, real time,
  spatial interpolation option, temporal interpolation option, integer count,
  real(3,count) input);


Example

fprintf('Requesting velocity and pressure at 10 points...\n');
result4 = getVelocityAndPressure(authkey, dataset, time, Lag6, NoTInt, 10, points);
for i = 1:10
  fprintf(1,'Vx = %f\n', result4(1,i));
  fprintf(1,'Vy = %f\n', result4(2,i));
  fprintf(1,'Vz = %f\n', result4(3,i));
  fprintf(1,'Pressure = %f\n', result4(4,i));
end

GetVelocityGradient

real(9,count) output = getVelocityAndPressure(char authkey, char dataset, real time,
  spatial interpolation option, temporal interpolation option, integer count,
  real(3,count) input);


Example

fprintf(1,'Velocity gradient at 10 particle locations...\n');
result9 = getVelocityGradient(authkey, dataset, time, FD4Lag4, NoTInt, 10, points);
for i = 1:10
  fprintf(1,'%i : duxdx=%f', i, result9(1,i));
  fprintf(1,', duxdy=%f', result9(2,i));
  fprintf(1,', duxdz=%f', result9(3,i));
  fprintf(1,', duydx=%f', result9(4,i));
  fprintf(1,', duydy=%f', result9(5,i));
  fprintf(1,', duydz=%f', result9(6,i));
  fprintf(1,', duzdx=%f', result9(7,i));
  fprintf(1,', duzdy=%f', result9(8,i));
  fprintf(1,', duzdz=%f', result9(9,i));
end

GetVelocityHessian

real(18,count) output = getVelocityHessian(char authkey, char dataset, real time,
  spatial interpolation option, temporal interpolation option,
  integer count, real(3,count) input)


Example

fprintf(1,'Velocity Hessian at 10 particle locations...\n');
result18 = getVelocityHessian(authkey, dataset, time, FD4Lag4, NoTInt, 10, points);
for i = 1:10
  fprintf(1,'%i : d2uxdxdx=%f', i, result18(1,i));
  fprintf(1,', d2uxdxdy=%f', result18(2,i));
  fprintf(1,', d2uxdxdz=%f', result18(3,i));
  fprintf(1,', d2uxdydy=%f', result18(4,i));
  fprintf(1,', d2uxdydz=%f', result18(5,i));
  fprintf(1,', d2uxdzdz=%f', result18(6,i));
  fprintf(1,', d2uydxdx=%f', result18(7,i));
  fprintf(1,', d2uydxdy=%f', result18(8,i));
  fprintf(1,', d2uydxdz=%f', result18(9,i));
  fprintf(1,', d2uydydy=%f', result18(10,i));
  fprintf(1,', d2uydydz=%f', result18(11,i));
  fprintf(1,', d2uydzdz=%f', result18(12,i));
  fprintf(1,', d2uzdxdx=%f', result18(13,i));
  fprintf(1,', d2uzdxdy=%f', result18(14,i));
  fprintf(1,', d2uzdxdz=%f', result18(15,i));
  fprintf(1,', d2uzdydy=%f', result18(16,i));
  fprintf(1,', d2uzdydz=%f', result18(18,i));
  fprintf(1,', d2uzdzdz=%f\n', result18(18,i));
end

GetVelocityLaplacian

real(3,count) output = getVelocityLaplacian(char authkey, char dataset, real time,
  spatial interpolation option, temporal interpolation option, integer count,
  real(3,count) input);


Example

fprintf(1,'Velocity Laplacian at 10 particle locations...\n');
result3 = getVelocityLaplacian(authkey, dataset, time, FD4Lag4, NoTInt, 10, points);
for i = 1:10
  fprintf(1,'%i: (grad2ux=%f, grad2uy=%f, grad2uz=%f\n', ...
    i, result3(1,i), result3(2,i), result3(3,i));
end

GetPressureGradient

real(3,count) output = getPressureGradient(char authkey, char dataset, real time,
  spatial interpolation option, temporal interpolation option, integer count,
  real(3,count) input);


Example

fprintf(1,'Pressure gradient at 10 particle locations...\n');
result3 = getPressureGradient(authkey, dataset, time, FD4Lag4, NoTInt, 10, points);
for i = 1:10
  fprintf(1,'%i: dpdx=%f, dpdy=%f, dpdz=%f\n', ...
    i, result3(1,i), result3(2,i), result3(3,i));
end

GetPressureHessian

real(6,count) output = getPressureHessian(char authkey, char dataset, real time,
  spatial interpolation option, temporal interpolation option, integer count,
  real(3,count) input);


Example

fprintf(1,'Velocity hessian at 10 particle locations...\n');
result6 = getPressureHessian(authkey, dataset, time, FD4Lag4, NoTInt, 10, points);
for i = 1:10
  fprintf(1,'%i: d2pdxdx=%f', i, result6(1,i));
  fprintf(1,', d2pdxdy=%f', result6(2,i));
  fprintf(1,', d2pdxdz=%f', result6(3,i));
  fprintf(1,', d2pdydy=%f', result6(4,i));
  fprintf(1,', d2pdydz=%f', result6(5,i));
  fprintf(1,', d2pdzdz=%f\n', result6(6,i));
end

GetForce

real(3,count) output = getForce(char authkey, char dataset, real time,
  spatial interpolation option, temporal interpolation option, integer count,
  real(3,count) input);


Example

fprintf(1,'Requesting forcing at 10 points...\n');
result3 = getForce(authkey, dataset, time, Lag6, NoTInt, 10, points);
for i = 1:10
  fprintf(1,'%i: %f, %f, %f\n', i, result3(1,i), result3(2,i), result3(3,i));
end