diff --git a/Turbulence/TestApp/TestProgram.cs b/Turbulence/TestApp/TestProgram.cs
index bab1a02..b8824d2 100644
--- a/Turbulence/TestApp/TestProgram.cs
+++ b/Turbulence/TestApp/TestProgram.cs
@@ -29,9 +29,9 @@ class TestProgram
static Random random = new Random();
static double EPSILON = 0.00002;
public const bool DEVEL_MODE = false;
- //public const string infodb_string = !DEVEL_MODE ? "turbinfo_conn" : "turbinfo_test_conn";
+ public const string infodb_string = !DEVEL_MODE ? "turbinfo_conn" : "turbinfo_test_conn";
public const string infodb_backup_string = !DEVEL_MODE ? "turbinfo_backup_conn" : "";
- public const string infodb_string = "turbinfo_conn";
+ //public const string infodb_string = "turbinfo_test_conn";
public const string logdb_string = "turblog_conn";
// batch scheduler queue
@@ -72,7 +72,7 @@ public static void Main()
try
{
DateTime beginTime, stopTime;
- int nx = 1, ny = 2;
+ int nx = 1, ny = 1;
int pointsize = nx * ny * 1;
Point3[] points = new Point3[pointsize];
turbulence.Point3[] points1 = new turbulence.Point3[pointsize];
@@ -86,16 +86,19 @@ public static void Main()
float time = 0f;
service.Timeout = -1;
- points[0].x = 0.3f;// dd * 2048;
- points[0].y = 0.4f;// dd * 2048;
- points[0].z = 0.5f;// dd * 2048;
- points[1].x = 4.0f;// dd * 2048;
- points[1].y = 5.0f; ;// dd * 2048;
- points[1].z = 6.0f;// dd * 2048;
+ points[0].x = 0.5f; //0.0f; //0.3f;// dd * 2048;
+ points[0].y = 0.5f; //0.0f; //0.4f;// dd * 2048;
+ points[0].z = 0.0f; //0.0f; //0.5f;// dd * 2048;
+ float dz = (float)(2 * Math.PI / 8192);
+ //points[1].x = 0.0215f; // 8*dz; //4.0f;// dd * 2048;
+ //points[1].y = 1.5752f; // 0.0f; //5.0f;// dd * 2048;
+ //points[1].z = 0.0215f; // 0.0f; //6.0f;// dd * 2048;
beginTime = DateTime.Now;
Console.WriteLine("Calling GetVelocity");
- Vector3[] result = testp.GetVelocity(authToken, "isotropic1024coarse", time,
+ Vector3[] result = testp.GetVelocity(authToken, "isotropic8192", time,
TurbulenceOptions.SpatialInterpolation.None, TurbulenceOptions.TemporalInterpolation.None, points);
+ //VelocityGradient[] result = testp.GetVelocityGradient(authToken, "isotropic8192", time,
+ // TurbulenceOptions.SpatialInterpolation.M1Q4, TurbulenceOptions.TemporalInterpolation.None, points);
stopTime = DateTime.Now;
Console.WriteLine("Execution time: {0}", stopTime - beginTime);
@@ -222,6 +225,7 @@ public Vector3[] GetVelocity(string authToken, string dataset, float time,
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.mixing:
case DataInfo.DataSets.isotropic4096: //check this
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.strat4096:
GetVectorData(auth, dataset, dataset_enum, DataInfo.TableNames.vel, worker,
time, spatialInterpolation, temporalInterpolation, points, result, ref rowid, addr);
@@ -686,7 +690,8 @@ private void GetVectorGradient(AuthInfo.AuthToken auth, string dataset, DataInfo
float time, TurbulenceOptions.SpatialInterpolation spatialInterpolation, TurbulenceOptions.TemporalInterpolation temporalInterpolation,
Point3[] points, VelocityGradient[] result, ref object rowid, string addr = null)
{
- bool round = true;
+ //bool round = true;
+ bool round = TurbulenceOptions.SplinesOption(spatialInterpolation) ? false : true;
int kernelSize = -1;
int kernelSizeY = -1;
diff --git a/Turbulence/TestApp/fileDB_iso4096_debugger.sql b/Turbulence/TestApp/fileDB_iso4096_debugger.sql
index fa4a05f..6413b30 100644
--- a/Turbulence/TestApp/fileDB_iso4096_debugger.sql
+++ b/Turbulence/TestApp/fileDB_iso4096_debugger.sql
@@ -9,29 +9,29 @@ CREATE TABLE [dbo].[#temp_zw] (
[z] REAL NULL
);
INSERT INTO [dbo].[#temp_zw]
-VALUES (0, 1626119, 0.3, 0.4, 0.5);
+VALUES (0, 2147486586, 0.0215, 1.5719, 0.0215);
SELECT reqseq, zindex, x, y, z FROM #temp_zw
DECLARE @return_value Int
-EXEC @return_value = [dbo].[ExecuteMHDWorker]
+EXEC @return_value = [dbo].[ExecuteMHDFileDBWorker]
@serverName = N'dsp012',
- @dbname = N'turbdb101',
+ @dbname = N'iso4096db117',
@codedb = N'turbdev_zw',
- @turbinfodb = N'turbinfo',
- @turbinfoserver = N'lumberjack',
+ @turbinfodb = N'turbinfo_test',
+ @turbinfoserver = N'sciserver02',
@dataset = N'vel',
- @workerType = 56,
+ @workerType = 64,
@blobDim = 8,
@time = 0,
- @spatialInterp = 0,
+ @spatialInterp = 104,
@temporalInterp = 0,
@arg = 0,
@inputSize = 1,
- @tempTable = N'#temp_zw'
- --@startz = 0,
- --@endz = 536870911
+ @tempTable = N'#temp_zw',
+ @startz = 2147483648,
+ @endz = 2281701375
SELECT @return_value as 'Return Value'
GO
diff --git a/Turbulence/TestInterface/Properties/AssemblyInfo.cs b/Turbulence/TestInterface/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..0312574
--- /dev/null
+++ b/Turbulence/TestInterface/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("TestInterface")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("TestInterface")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+//In order to begin building localizable applications, set
+//CultureYouAreCodingWith in your .csproj file
+//inside a . For example, if you are using US english
+//in your source files, set the to en-US. Then uncomment
+//the NeutralResourceLanguage attribute below. Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
+
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Turbulence/TestInterface/Properties/Resources.Designer.cs b/Turbulence/TestInterface/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..852cf9e
--- /dev/null
+++ b/Turbulence/TestInterface/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace TestInterface.Properties
+{
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TestInterface.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Turbulence/TestInterface/Properties/Resources.resx b/Turbulence/TestInterface/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/Turbulence/TestInterface/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Turbulence/TestInterface/Properties/Settings.Designer.cs b/Turbulence/TestInterface/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..7fcc111
--- /dev/null
+++ b/Turbulence/TestInterface/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace TestInterface.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Turbulence/TestInterface/Properties/Settings.settings b/Turbulence/TestInterface/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/Turbulence/TestInterface/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Turbulence/TestInterface/TestInterface.cs b/Turbulence/TestInterface/TestInterface.cs
new file mode 100644
index 0000000..bbef181
--- /dev/null
+++ b/Turbulence/TestInterface/TestInterface.cs
@@ -0,0 +1,543 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Turbulence.TurbLib;
+using Turbulence.TurbLib.DataTypes;
+using Turbulence.SQLInterface;
+using Turbulence.TurbBatch;
+using Turbulence.SciLib;
+using TestInterface;
+using TurbulenceService;
+
+using Microsoft.SqlServer.Server;
+using Turbulence.TurbLib;
+using Turbulence.SQLInterface;
+
+using System.Data.Sql;
+using System.Data.SqlTypes;
+using System.Data.SqlClient;
+using System.Runtime.InteropServices;
+using System.IO;
+
+//using HDF.PInvoke;
+using hid_t = System.Int64;
+
+namespace TestInterface
+{
+ class TestInterface
+ {
+ //[Microsoft.SqlServer.Server.SqlProcedure]
+ public static void Main()
+ {
+ // initialize
+ string serverName = "dsp012";
+ string dbname = "iso4096db117";
+ string codedb = "turbdev_zw";
+ string turbinfodb = "turbinfo_test";
+ string turbinfoserver = "sciserver02";
+ string dataset = "vel";
+ int workerType = 64;
+ int blobDim = 8;
+ float time = 0;
+ int spatialInterp = 44;
+ int temporalInterp = 0;
+ float arg = 0;
+ int inputSize = 1;
+ string tempTable = "#temp_zw";
+ long startz = 2147483648;
+ long endz = 2281701375;
+
+ //--------------------------
+ TurbServerInfo serverinfo = TurbServerInfo.GetTurbServerInfo(codedb, turbinfodb, turbinfoserver);
+ SqlConnection standardConn;
+ SqlConnection contextConn;
+
+ string connString;
+ if (serverName.Contains("_"))
+ connString = String.Format("Data Source={0};Initial Catalog={1};User ID='turbquery';Password='aa2465ways2k';Pooling=false;", serverName.Remove(serverName.IndexOf("_")), serverinfo.codeDB);
+ else
+ connString = String.Format("Data Source={0};Initial Catalog={1};User ID='turbquery';Password='aa2465ways2k';Pooling=false;", serverName, serverinfo.codeDB);
+ standardConn = new SqlConnection(connString);
+
+ string contextConn_string = String.Format("Data Source='dsp012';Initial Catalog='turbdev_zw';User ID='turbquery';Password='aa2465ways2k';Pooling=false;");
+ contextConn= new SqlConnection(contextConn_string);
+ //contextConn = new SqlConnection("context connection=true");
+
+ // Check temp table
+ //tempTable = SQLUtility.SanitizeTemporaryTable(tempTable);
+
+ // Load information about the requested dataset
+ TurbDataTable table = TurbDataTable.GetTableInfo(serverName, dbname, dataset, blobDim, serverinfo);
+
+ // string tableName = String.Format("{0}.dbo.{1}", dbname, table.TableName);
+
+ // Instantiate a worker class
+ contextConn.Open();
+ Worker worker = Worker.GetWorker(dbname, table, workerType, spatialInterp, arg, contextConn);
+
+ float points_per_cube = 0;
+
+ //Dictionary> map;
+ //Dictionary> map;
+ Dictionary> map;
+ Dictionary input = new Dictionary(inputSize);
+ // Read input data
+
+ map = SQLUtility.ReadTempTableGetAtomsToRead(tempTable, worker, (Worker.Workers)workerType, contextConn, input, inputSize, ref points_per_cube);
+ //contextConn.Close();
+
+ SqlCommand cmd;
+
+ SqlDataRecord record;
+
+ byte[] rawdata = new byte[table.BlobByteSize];
+
+ standardConn.Open();
+ string joinTable = "";
+ joinTable = SQLUtility.CreateTemporaryJoinTable(map.Keys, standardConn, points_per_cube);
+ /*
+
+ #if MEMORY
+ int num_active_points = 0;
+ int memory_bandwidth = 0;
+ #endif
+ //float[] result;
+ */
+ record = new SqlDataRecord(worker.GetRecordMetaData());
+ SqlContext.Pipe.SendResultsStart(record);
+
+ //throw new Exception(zindexRegionsString);
+ if ((TurbulenceOptions.TemporalInterpolation)temporalInterp ==
+ TurbulenceOptions.TemporalInterpolation.None)
+ {
+ // Go through and run values on each point
+ // Find nearest timestep
+ int timestep_int = SQLUtility.GetNearestTimestep(time, table);
+
+ TurbulenceBlob blob = new TurbulenceBlob(table);
+ //This is ok I think because it is a temporary table
+ cmd = new SqlCommand(
+ String.Format(@"SELECT {0}.zindex " +
+ "FROM {0} ORDER BY zindex",
+ joinTable),
+ contextConn);
+ //standardConn);
+ cmd.CommandTimeout = 3600;
+
+ //string temp = string.Format("C:\\www\\zindexlistdb{0}.txt", dbname.Substring(dbname.Indexof("db") + 2,dbname.Length - dbname.IndexOf("db") - 2));
+ //System.IO.StreamWriter file = new System.IO.StreamWriter(@temp.ToString(), true);
+ //DateTime start = DateTime.Now;
+ List zlist = new List();
+ if (table.dbtype == 2)
+ {
+ zlist = SQLUtility.fileDB2zlistTable(dbname, standardConn);
+ }
+ //file.WriteLine(string.Format("Load table {0}: {1}", dbname, DateTime.Now - start));
+
+ //Setup the file
+
+ //string pathSource = "e:\\filedb\\isotropic4096";
+ //pathSource = pathSource + "\\" + dbname + "_" + timestep_int + ".bin";
+ string pathSource = SQLUtility.getDBfilePath(dbname, timestep_int, table.DataName, standardConn, serverName);
+ FileStream filedb = new FileStream(pathSource, FileMode.Open, System.IO.FileAccess.Read);
+ //string[] tester = { "In filedb..."};
+ //System.IO.File.WriteAllLines(@"e:\filedb\debug.txt", tester);
+ //DateTime start = DateTime.Now;
+ //while (reader.Read())
+ using (SqlDataReader reader = cmd.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ // read in the current blob
+ long thisBlob = reader.GetSqlInt64(0).Value;
+ if (thisBlob <= endz && thisBlob >= startz)
+ {
+ //Reset blob to line up with beginning of file by taking the modulo of the 512 cube zindex This could be done by the databasemap maybe.
+ //One possibility is to take the thisblob-zmin.
+ //thisBlob is the spatial blob. fileBlob is the corresponding blob in relation to the file.
+ long offset = 0;
+ if (table.dbtype == 1)
+ {
+ //long fileBlob = thisBlob - startz; /*We need to align the first blob with the start of the file */
+ long fileBlob = thisBlob % 134217728;
+ long z = fileBlob / (table.atomDim * table.atomDim * table.atomDim);
+ offset = z * table.BlobByteSize;
+ }
+ else if (table.dbtype == 2)
+ {
+ //offset = SQLUtility.fileDB2offset(dbname, table, thisBlob, standardConn);
+ //start = DateTime.Now;
+ SQLUtility.zlistTable zresult = zlist.Find(x => (x.startZ <= thisBlob && thisBlob <= x.endZ));
+ offset = (thisBlob - zresult.startZ) / (table.atomDim * table.atomDim * table.atomDim);
+ offset = (zresult.blobBefore + offset) * table.BlobByteSize;
+ //file.WriteLine(string.Format("startZ {0}, endZ {1}, blobBefore {2}, Offset {3}", result.startZ, result.endZ, result.blobBefore, offset));
+ //file.WriteLine(string.Format("Find thisBlob: {0}", DateTime.Now - start));
+ }
+ filedb.Seek(offset, SeekOrigin.Begin);
+ //Test
+ //string[] lines= { "Offset chosen = ", offset.ToString(), z.ToString(), table.BlobByteSize.ToString(), thisBlob.ToString(),pathSource, table.atomDim.ToString()};
+ //System.IO.File.WriteAllLines(@"e:\filedb\debug.txt", lines);
+
+ int bytes = filedb.Read(rawdata, 0, table.BlobByteSize);
+ blob.Setup(timestep_int, new Morton3D(thisBlob), rawdata);
+
+ foreach (int point in map[thisBlob])
+ {
+ //point = input[thisBlob][i];
+ double[] result = worker.GetResult(blob, input[point]);
+ for (int r = 0; r < result.Length; r++)
+ {
+ input[point].result[r] += result[r];
+ }
+ input[point].cubesRead++;
+ //endTime = DateTime.Now;
+ //resultTime += endTime - startTime;
+
+ //startTime = endTime;
+
+ if (input[point].cubesRead == input[point].numberOfCubes && !input[point].resultSent)
+ {
+ record.SetInt32(0, input[point].request);
+ int r = 0;
+ for (; r < input[point].result.Length; r++)
+ {
+ record.SetSqlSingle(r + 1, (float)input[point].result[r]);
+ }
+
+ //record.SetInt32(r + 1, input[point].cubesRead);
+ SqlContext.Pipe.SendResultsRow(record);
+ input[point].resultSent = true;
+
+ input[point].lagInt = null;
+ input[point].result = null;
+ input[point] = null;
+#if MEMORY
+ num_active_points--;
+#endif
+ }
+ //endTime = DateTime.Now;
+ //resultSendingTime += endTime - startTime;
+
+ //input[thisBlob][i] = point;
+
+ //startTime = endTime;
+ }
+ }
+ }
+ }
+ //} while (reader.NextResult());
+ //file.WriteLine(string.Format("reading takes: {0}", DateTime.Now - start));
+ //file.Close();
+
+ cmd = new SqlCommand(String.Format(@"DELETE FROM {0}", tempTable), contextConn);
+ try
+ {
+ cmd.ExecuteNonQuery();
+ }
+ catch (Exception e)
+ {
+ throw new Exception(String.Format("Error deleting from temporary table. [Inner Exception: {0}])",
+ e.ToString()));
+ }
+ //cmd = new SqlCommand(String.Format(@"DROP TABLE tempdb..{0}", joinTable), contextConn);
+ try
+ {
+ cmd.ExecuteNonQuery();
+ }
+ catch (Exception e)
+ {
+ throw new Exception(String.Format("Error dropping temporary table. [Inner Exception: {0}])",
+ e.ToString()));
+ }
+ standardConn.Close();
+ contextConn.Close();
+ filedb.Close();
+ //file.Close();
+ blob = null;
+ }
+ else if ((TurbulenceOptions.TemporalInterpolation)temporalInterp ==
+ TurbulenceOptions.TemporalInterpolation.PCHIP)
+ {
+ // Perform PCHIP interpolation by querying & grouping 4 timesteps by location
+ // We process the results from the database as they come out, and then calculate PCHIP at the end
+ int basetime = SQLUtility.GetFlooredTimestep(time, table);
+
+ int timestep0 = basetime - table.TimeInc;
+ int timestep1 = basetime;
+ int timestep2 = basetime + table.TimeInc;
+ int timestep3 = basetime + table.TimeInc * 2;
+
+
+ float time0 = (timestep0 - table.TimeOff) * table.Dt;
+ float time1 = (timestep1 - table.TimeOff) * table.Dt;
+ float time2 = (timestep2 - table.TimeOff) * table.Dt;
+ float time3 = (timestep3 - table.TimeOff) * table.Dt;
+
+ float delta = time2 - time1;
+
+ double[] result;
+ //string joinTable = "none"; //placeholder. We don't have PCHIP with filedb yet...isotropic4096 only has one timestep.
+ TurbulenceBlob blob = new TurbulenceBlob(table);
+ cmd = new SqlCommand(
+ String.Format(@"DECLARE @times table (timestep int NOT NULL) " +
+ "INSERT @times VALUES ({1}) " +
+ "INSERT @times VALUES ({2}) " +
+ "INSERT @times VALUES ({3}) " +
+ "INSERT @times VALUES ({4}) " +
+
+ "SELECT t.timestep, {0}.zindex " +
+ "FROM @times as t, {0} " +
+ "ORDER BY timestep, zindex",
+ joinTable, timestep0, timestep1, timestep2, timestep3),
+ contextConn);
+ //standardConn);
+ cmd.CommandTimeout = 3600;
+
+ List zlist = new List();
+ if (table.dbtype == 2)
+ {
+ zlist = SQLUtility.fileDB2zlistTable(dbname, standardConn);
+ }
+
+ string pathSource0 = SQLUtility.getDBfilePath(dbname, timestep0, table.DataName, standardConn, serverName);
+ string pathSource1 = SQLUtility.getDBfilePath(dbname, timestep1, table.DataName, standardConn, serverName);
+ string pathSource2 = SQLUtility.getDBfilePath(dbname, timestep2, table.DataName, standardConn, serverName);
+ string pathSource3 = SQLUtility.getDBfilePath(dbname, timestep3, table.DataName, standardConn, serverName);
+ FileStream filedb0 = null, filedb1 = null, filedb2 = null, filedb3 = null;
+
+ try
+ {
+ filedb0 = new FileStream(pathSource0, FileMode.Open, System.IO.FileAccess.Read);
+ }
+ catch { }
+ try
+ {
+ filedb1 = new FileStream(pathSource1, FileMode.Open, System.IO.FileAccess.Read);
+ }
+ catch { }
+ try
+ {
+ filedb2 = new FileStream(pathSource2, FileMode.Open, System.IO.FileAccess.Read);
+ }
+ catch { }
+ try
+ {
+ filedb3 = new FileStream(pathSource3, FileMode.Open, System.IO.FileAccess.Read);
+ }
+ catch { }
+
+ using (SqlDataReader reader = cmd.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ int timestep = reader.GetSqlInt32(0).Value; // Timestep returned
+ long thisBlob = reader.GetSqlInt64(1).Value; // Blob returned
+
+ if (thisBlob <= endz && thisBlob >= startz)
+ {
+ //long z = thisBlob / (table.atomDim * table.atomDim * table.atomDim);
+ //long offset = z * table.BlobByteSize;
+ long offset = 0;
+ if (table.dbtype == 1)
+ {
+ //long fileBlob = thisBlob - startz; /*We need to align the first blob with the start of the file */
+ long fileBlob = thisBlob % 134217728;
+ long z = fileBlob / (table.atomDim * table.atomDim * table.atomDim);
+ offset = z * table.BlobByteSize;
+ }
+ else if (table.dbtype == 2)
+ {
+ //offset = SQLUtility.fileDB2offset(dbname, table, thisBlob, standardConn);
+ //start = DateTime.Now;
+ SQLUtility.zlistTable zresult = zlist.Find(x => (x.startZ <= thisBlob && thisBlob <= x.endZ));
+ offset = (thisBlob - zresult.startZ) / (table.atomDim * table.atomDim * table.atomDim);
+ offset = (zresult.blobBefore + offset) * table.BlobByteSize;
+ //file.WriteLine(string.Format("startZ {0}, endZ {1}, blobBefore {2}, Offset {3}", result.startZ, result.endZ, result.blobBefore, offset));
+ //file.WriteLine(string.Format("Find thisBlob: {0}", DateTime.Now - start));
+ }
+
+ // TODO: I'm afratid this is wrong, because if file3 doesn't exist,
+ // the rawdata would use the data from file2
+ if (timestep == timestep0 && filedb0 != null)
+ {
+ filedb0.Seek(offset, SeekOrigin.Begin);
+ int bytes = filedb0.Read(rawdata, 0, table.BlobByteSize);
+ }
+ else if (timestep == timestep1 && filedb1 != null)
+ {
+ filedb1.Seek(offset, SeekOrigin.Begin);
+ int bytes = filedb1.Read(rawdata, 0, table.BlobByteSize);
+ }
+ else if (timestep == timestep2 && filedb2 != null)
+ {
+ filedb2.Seek(offset, SeekOrigin.Begin);
+ int bytes = filedb2.Read(rawdata, 0, table.BlobByteSize);
+ }
+ else if (timestep == timestep3 && filedb3 != null)
+ {
+ filedb3.Seek(offset, SeekOrigin.Begin);
+ int bytes = filedb3.Read(rawdata, 0, table.BlobByteSize);
+ }
+ blob.Setup(timestep, new Morton3D(thisBlob), rawdata);
+ //for (int i = 0; i < input[thisBlob].Count; i++)
+ foreach (int point in map[thisBlob])
+ {
+ if (worker == null)
+ throw new Exception("worker is NULL!");
+ if (blob == null)
+ throw new Exception("blob is NULL!");
+ if (input[point] == null)
+ throw new Exception("input[point] is NULL!");
+ result = worker.GetResult(blob, input[point]);
+ for (int r = 0; r < result.Length; r++)
+ {
+ if (timestep == timestep0)
+ {
+ input[point].result[r] += -result[r] * (time - time1) * (1 + (time - time1) * (-1 + (time - time2) / delta) / delta) / 2 / delta;
+ }
+ else if (timestep == timestep1)
+ {
+ input[point].result[r] += result[r] * (1 + ((time - time1) * (time - time1) * (-2 + 3 * (time - time2) / delta) / 2 / delta / delta));
+ }
+ else if (timestep == timestep2)
+ {
+ input[point].result[r] += result[r] * (time - time1) * (1 + (time - time1) * (1 - 3 * (time - time2) / delta) / delta) / 2 / delta;
+ }
+ else if (timestep == timestep3)
+ {
+ input[point].result[r] += result[r] * (time - time1) * (time - time1) * (time - time2) / 2 / delta / delta / delta;
+ }
+ }
+ input[point].cubesRead++;
+
+ if (input[point].cubesRead == 4 * input[point].numberOfCubes && !input[point].resultSent)
+ {
+ record.SetInt32(0, input[point].request);
+ int r = 0;
+ for (; r < input[point].result.Length; r++)
+ {
+ record.SetSqlSingle(r + 1, (float)input[point].result[r]);
+ }
+ //record.SetInt32(r + 1, input[point].cubesRead);
+ SqlContext.Pipe.SendResultsRow(record);
+ input[point].resultSent = true;
+
+ input[point].lagInt = null;
+ input[point].result = null;
+ input[point] = null;
+ }
+ }
+ }
+ }
+
+ //}
+ //catch (Exception ex)
+ //{
+ // throw new Exception(String.Format("Error performing PCHIP interpolation on point {9}: time={0}, times[0]={1}, times[1]={2}, times[2]={3}, times[3]={4}, " +
+ // "\n[Inner Exception: {5}])", time, time0, time1, time2, time3,
+ // ex.InnerException));
+ //}
+ }
+
+ cmd = new SqlCommand(String.Format(@"DELETE FROM {0}", tempTable), contextConn);
+ try
+ {
+ cmd.ExecuteNonQuery();
+ }
+ catch (Exception e)
+ {
+ throw new Exception(String.Format("Error deleting from temporary table. [Inner Exception: {0}])",
+ e.ToString()));
+ }
+ cmd = new SqlCommand(String.Format(@"DROP TABLE tempdb..{0}", joinTable), contextConn);
+ try
+ {
+ cmd.ExecuteNonQuery();
+ }
+ catch (Exception e)
+ {
+ throw new Exception(String.Format("Error dropping temporary table. [Inner Exception: {0}])",
+ e.ToString()));
+ }
+ standardConn.Close();
+ contextConn.Close();
+ try
+ {
+ filedb0.Close();
+ }
+ catch { }
+ try
+ {
+ filedb1.Close();
+ }
+ catch { }
+ try
+ {
+ filedb2.Close();
+ }
+ catch { }
+ try
+ {
+ filedb3.Close();
+ }
+ catch { }
+ // Encourage garbage collector to clean up.
+ blob = null;
+ }
+ else
+ {
+ standardConn.Close();
+ contextConn.Close();
+ map.Clear();
+ map = null;
+ input = null;
+ rawdata = null;
+ worker = null;
+ throw new Exception("Unsupported TemporalInterpolation Type");
+ }
+
+ SqlContext.Pipe.SendResultsEnd();
+
+ //endTime = DateTime.Now;
+
+ //resultSendingTime += endTime - startTime;
+
+ // record = new SqlDataRecord(GetSqlMetaData());
+ // SqlContext.Pipe.SendResultsStart(record);
+
+ // record.SetInt32(0, scan_count);
+ // record.SetInt32(1, logical_reads);
+ // record.SetInt32(2, physical_reads);
+ // record.SetInt32(3, read_ahead_reads);
+ // record.SetDouble(4, preProcessTime.TotalSeconds);
+ // record.SetDouble(5, IOTime.TotalSeconds);
+ // record.SetDouble(6, MemoryTime.TotalSeconds);
+ // record.SetDouble(7, resultTime.TotalSeconds);
+ // record.SetDouble(8, resultSendingTime.TotalSeconds);
+ // record.SetDouble(9, (endTime - initialTimeStamp).TotalSeconds);
+ //#if MEMORY
+ // record.SetInt32(10, memory_bandwidth);
+ // record.SetFloat(11, points_per_cube);
+ //#endif
+ // SqlContext.Pipe.SendResultsRow(record);
+
+ // SqlContext.Pipe.SendResultsEnd();
+
+ map.Clear();
+ map = null;
+ input = null;
+ rawdata = null;
+ worker = null;
+
+ //scan_count = 0;
+ //logical_reads = 0;
+ //physical_reads = 0;
+ //read_ahead_reads = 0;
+
+ // We should not have to manually call the garbage collector.
+ // System.GC.Collect();
+
+
+ }
+ }
+}
diff --git a/Turbulence/TestInterface/TestInterface.csproj b/Turbulence/TestInterface/TestInterface.csproj
new file mode 100644
index 0000000..56321e0
--- /dev/null
+++ b/Turbulence/TestInterface/TestInterface.csproj
@@ -0,0 +1,87 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {D76C5FF3-0F09-41F6-BAB6-C282301D656C}
+ WinExe
+ TestInterface
+ TestInterface
+ v4.6.1
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+ {6d341d06-801b-4b24-97e5-ee21c52f46c6}
+ TurbulenceWebServiceLibrary
+
+
+ {5a5bd529-56cd-4cc4-89d3-a1e94da48d55}
+ Turbulence
+
+
+
+
\ No newline at end of file
diff --git a/Turbulence/Turbulence/SQLInterface/ExecuteMHDFileDBWorker.cs b/Turbulence/Turbulence/SQLInterface/ExecuteMHDFileDBWorker.cs
index 988c4e7..02ffe2e 100644
--- a/Turbulence/Turbulence/SQLInterface/ExecuteMHDFileDBWorker.cs
+++ b/Turbulence/Turbulence/SQLInterface/ExecuteMHDFileDBWorker.cs
@@ -131,7 +131,7 @@ public static void ExecuteMHDFileDBWorker(
//standardConn);
cmd.CommandTimeout = 3600;
- //string temp = string.Format("C:\\www\\zindexlistdb{0}.txt", dbname.Substring(dbname.Length - 3,3));
+ //string temp = string.Format("C:\\www\\zindexlistdb{0}.txt", dbname.Substring(dbname.Indexof("db") + 2,dbname.Length - dbname.IndexOf("db") - 2));
//System.IO.StreamWriter file = new System.IO.StreamWriter(@temp.ToString(), true);
//DateTime start = DateTime.Now;
List zlist = new List();
diff --git a/Turbulence/Turbulence/SQLInterface/ExecuteMHDHDF5Worker.cs b/Turbulence/Turbulence/SQLInterface/ExecuteMHDHDF5Worker.cs
index dbe33da..2161471 100644
--- a/Turbulence/Turbulence/SQLInterface/ExecuteMHDHDF5Worker.cs
+++ b/Turbulence/Turbulence/SQLInterface/ExecuteMHDHDF5Worker.cs
@@ -130,8 +130,8 @@ public static void ExecuteMHDHDF5Worker(
contextConn);
//standardConn);
cmd.CommandTimeout = 3600;
-
- //string temp = string.Format("C:\\www\\zindexlistdb{0}.txt", dbname.Substring(dbname.Length - 3,3));
+
+ //string temp = string.Format("C:\\www\\zindexlistdb{0}.txt", dbname.Substring(dbname.IndexOf("db") + 2,dbname.Length - dbname.IndexOf("db") - 2));
//System.IO.StreamWriter file = new System.IO.StreamWriter(@temp.ToString(), true);
//DateTime start = DateTime.Now;
List zlist = new List();
diff --git a/Turbulence/Turbulence/SQLInterface/ExecuteParticleTrackingChanneDBlWorkerTaskParallel.cs b/Turbulence/Turbulence/SQLInterface/ExecuteParticleTrackingChanneDBlWorkerTaskParallel.cs
index f602b38..463a0d9 100644
--- a/Turbulence/Turbulence/SQLInterface/ExecuteParticleTrackingChanneDBlWorkerTaskParallel.cs
+++ b/Turbulence/Turbulence/SQLInterface/ExecuteParticleTrackingChanneDBlWorkerTaskParallel.cs
@@ -104,7 +104,7 @@ public static void ExecuteParticleTrackingChannelDBWorkerTaskParallel(
}
else
{
- connections.Add(new SqlConnection(String.Format("Data Source={0};Initial Catalog={1};User ID='turbquery';Password='aa2465ways2k';Pooling=false;", serverName, DBName.Substring(0,DBName.Length-3))));
+ connections.Add(new SqlConnection(String.Format("Data Source={0};Initial Catalog={1};User ID='turbquery';Password='aa2465ways2k';Pooling=false;", serverName, DBName.Substring(0,DBName.IndexOf("db") + 2))));
}
}
}
diff --git a/Turbulence/Turbulence/SQLInterface/ExecuteParticleTrackingChanneDBlWorkerTaskParallel2.cs b/Turbulence/Turbulence/SQLInterface/ExecuteParticleTrackingChanneDBlWorkerTaskParallel2.cs
index 8845df3..361ec17 100644
--- a/Turbulence/Turbulence/SQLInterface/ExecuteParticleTrackingChanneDBlWorkerTaskParallel2.cs
+++ b/Turbulence/Turbulence/SQLInterface/ExecuteParticleTrackingChanneDBlWorkerTaskParallel2.cs
@@ -103,7 +103,7 @@ public static void ExecuteParticleTrackingChannelDBWorkerTaskParallel2(
}
else
{
- connections.Add(new SqlConnection(String.Format("Data Source={0};Initial Catalog={1};User ID='turbquery';Password='aa2465ways2k';Pooling=false;", serverName, DBName.Substring(0, DBName.Length - 3))));
+ connections.Add(new SqlConnection(String.Format("Data Source={0};Initial Catalog={1};User ID='turbquery';Password='aa2465ways2k';Pooling=false;", serverName, DBName.Substring(0, DBName.IndexOf("db") + 2))));
}
}
}
diff --git a/Turbulence/Turbulence/SQLInterface/ExecuteParticleTrackingDBWorkerTaskParallel.cs b/Turbulence/Turbulence/SQLInterface/ExecuteParticleTrackingDBWorkerTaskParallel.cs
index acff26a..5025e0a 100644
--- a/Turbulence/Turbulence/SQLInterface/ExecuteParticleTrackingDBWorkerTaskParallel.cs
+++ b/Turbulence/Turbulence/SQLInterface/ExecuteParticleTrackingDBWorkerTaskParallel.cs
@@ -104,7 +104,7 @@ public static void ExecuteParticleTrackingDBWorkerTaskParallel(
}
else
{
- connections.Add(new SqlConnection(String.Format("Data Source={0};Initial Catalog={1};User ID='turbquery';Password='aa2465ways2k';Pooling=false;", serverName, DBName.Substring(0, DBName.Length - 3))));
+ connections.Add(new SqlConnection(String.Format("Data Source={0};Initial Catalog={1};User ID='turbquery';Password='aa2465ways2k';Pooling=false;", serverName, DBName.Substring(0, DBName.IndexOf("db") + 2))));
}
}
}
diff --git a/Turbulence/Turbulence/SQLInterface/SQLUtility.cs b/Turbulence/Turbulence/SQLInterface/SQLUtility.cs
index 58e12af..154d1e3 100644
--- a/Turbulence/Turbulence/SQLInterface/SQLUtility.cs
+++ b/Turbulence/Turbulence/SQLInterface/SQLUtility.cs
@@ -968,7 +968,7 @@ public static string getDBfilePath(string dbname, int timestep, string DataName,
"from {0}..DataPath " +
"where ProductionDatabaseName = @dbname " +
"AND minTime <= @timestep AND @timestep <= maxTime AND ProductionMachineName=@servername",
- dbname.Substring(0, dbname.Length - 3));
+ dbname.Substring(0, dbname.IndexOf("db") + 2));
cmd_path.Parameters.AddWithValue("@dbname", dbname);
cmd_path.Parameters.AddWithValue("@timestep", timestep);
if (sqlConn.ConnectionString.ToLower().Contains("context connection"))
@@ -1090,7 +1090,7 @@ public static List fileDB2zlistTable(string dbname, SqlConnection sq
{
SqlCommand cmd1 = new SqlCommand(
String.Format(@"SELECT startZ, endZ, blobBefore " +
- "FROM {0}.dbo.zorderList WHERE dbNo={1}", dbname.Substring(0, dbname.Length - 3), dbname.Substring(dbname.Length - 3, 3)),
+ "FROM {0}.dbo.zorderList WHERE dbNo={1}", dbname.Substring(0, dbname.IndexOf("db") + 2), dbname.Substring(dbname.IndexOf("db") + 2, dbname.Length - dbname.IndexOf("db") - 2)),
sqlConn);
cmd1.CommandTimeout = 3600;
using (SqlDataReader reader = cmd1.ExecuteReader())
diff --git a/Turbulence/Turbulence/SQLInterface/workers/GetMHDGradient.cs b/Turbulence/Turbulence/SQLInterface/workers/GetMHDGradient.cs
index 62f8e24..dec3f6a 100644
--- a/Turbulence/Turbulence/SQLInterface/workers/GetMHDGradient.cs
+++ b/Turbulence/Turbulence/SQLInterface/workers/GetMHDGradient.cs
@@ -97,9 +97,9 @@ public override void GetAtomsForPoint(SQLUtility.MHDInputRequest request, long m
if (spatialInterp == TurbulenceOptions.SpatialInterpolation.Fd4Lag4)
{
// The integer coordinates are computed only once
- X = LagInterpolation.CalcNode(request.x, setInfo.Dx);
- Y = LagInterpolation.CalcNode(request.y, setInfo.Dx);
- Z = LagInterpolation.CalcNode(request.z, setInfo.Dx);
+ X = LagInterpolation.CalcNodeWithRound(request.x, setInfo.Dx);
+ Y = LagInterpolation.CalcNodeWithRound(request.y, setInfo.Dy);
+ Z = LagInterpolation.CalcNodeWithRound(request.z, setInfo.Dz);
int LagIntOrder = 4;
//x_values = new int[] { X - kernelSize / 2 + 1, X + kernelSize / 2 }; // From X-3 to X+4
@@ -417,9 +417,9 @@ unsafe public double[] CalcGradient(TurbulenceBlob blob, SQLUtility.MHDInputRequ
int LagIntOrder = 4;
int FdOrder = 4;
- x = LagInterpolation.CalcNode(input.x, setInfo.Dx);
- y = LagInterpolation.CalcNode(input.y, setInfo.Dx);
- z = LagInterpolation.CalcNode(input.z, setInfo.Dx);
+ x = LagInterpolation.CalcNodeWithRound(input.x, setInfo.Dx);
+ y = LagInterpolation.CalcNodeWithRound(input.y, setInfo.Dy);
+ z = LagInterpolation.CalcNodeWithRound(input.z, setInfo.Dz);
// The coefficients are computed only once and cached, so that they don't have to be
// recomputed for each partial sum
diff --git a/Turbulence/Turbulence/TurbLib/TurbDataTable.cs b/Turbulence/Turbulence/TurbLib/TurbDataTable.cs
index 41b8fa9..b9a74fa 100644
--- a/Turbulence/Turbulence/TurbLib/TurbDataTable.cs
+++ b/Turbulence/Turbulence/TurbLib/TurbDataTable.cs
@@ -75,6 +75,8 @@ public virtual int CalcNodeX(double value, TurbulenceOptions.SpatialInterpolatio
case TurbulenceOptions.SpatialInterpolation.Lag6:
case TurbulenceOptions.SpatialInterpolation.Lag8:
case TurbulenceOptions.SpatialInterpolation.Fd4Lag4:
+ x = (int)(Math.Round(value / dx));
+ break;
case TurbulenceOptions.SpatialInterpolation.M1Q4:
case TurbulenceOptions.SpatialInterpolation.M1Q6:
case TurbulenceOptions.SpatialInterpolation.M1Q8:
@@ -121,6 +123,8 @@ public virtual int CalcNodeY(double value, TurbulenceOptions.SpatialInterpolatio
case TurbulenceOptions.SpatialInterpolation.Lag6:
case TurbulenceOptions.SpatialInterpolation.Lag8:
case TurbulenceOptions.SpatialInterpolation.Fd4Lag4:
+ y = (int)(Math.Round(value / dy));
+ break;
case TurbulenceOptions.SpatialInterpolation.M1Q4:
case TurbulenceOptions.SpatialInterpolation.M1Q6:
case TurbulenceOptions.SpatialInterpolation.M1Q8:
@@ -167,6 +171,8 @@ public virtual int CalcNodeZ(double value, TurbulenceOptions.SpatialInterpolatio
case TurbulenceOptions.SpatialInterpolation.Lag6:
case TurbulenceOptions.SpatialInterpolation.Lag8:
case TurbulenceOptions.SpatialInterpolation.Fd4Lag4:
+ z = (int)(Math.Round(value / dz));
+ break;
case TurbulenceOptions.SpatialInterpolation.M1Q4:
case TurbulenceOptions.SpatialInterpolation.M1Q6:
case TurbulenceOptions.SpatialInterpolation.M1Q8:
@@ -255,6 +261,12 @@ public TurbDataTable(string serverName, string dbName, TurbServerInfo serverinfo
this.gridResolution[1] = 4096;
this.gridResolution[2] = 4096;
}
+ if (dbName.Contains("iso8192"))
+ {
+ this.gridResolution[0] = 8192;
+ this.gridResolution[1] = 8192;
+ this.gridResolution[2] = 8192;
+ }
this.dx = (2.0 * Math.PI) / (double)gridResolution[2];
this.dy = (2.0 * Math.PI) / (double)gridResolution[1];
@@ -397,6 +409,14 @@ public static TurbDataTable GetTableInfo(string tableName)
"isotropic4096", 4096, 64, 4, 4, new string[] { "Ux", "Uy", "Uz", "P" },
0.0002f, 0, 0, 1, 0, 1);
}
+
+ else if (tableName.Equals("isotropic8192"))
+ {/* Check to see if this really gets executed...*/
+ return new TurbDataTable("isotropic turbulence with a resolution of 8192",
+ "isotropic4096", 8192, 64, 4, 4, new string[] { "Ux", "Uy", "Uz", "P" },
+ 1f, 0, 5, 1, 0, 1);
+ }
+
else if (tableName.Equals("strat4096"))
{/* Check to see if this really gets executed...*/
return new TurbDataTable("roration and stratified turbulence with a resolution of 4096",
@@ -482,6 +502,12 @@ public static TurbDataTable GetTableInfo(string serverName, string dbName, strin
tableName, blobDim, 0, 3, new string[] { "Ux", "Uy", "Uz" },
0.0002f, 0, 0, 10, 0, 1);
}
+ else if (dbName.Contains("iso8192"))
+ {
+ return new TurbDataTable(serverName, dbName, serverinfo, "velocity",
+ tableName, blobDim, 0, 3, new string[] { "Ux", "Uy", "Uz" },
+ 1f, 0, 5, 1, 0, 1);
+ }
else if (dbName.Contains("strat4096"))
{
return new TurbDataTable(serverName, dbName, serverinfo, "velocity",
@@ -561,6 +587,12 @@ public static TurbDataTable GetTableInfo(string serverName, string dbName, strin
tableName, blobDim, 0, 1, new string[] { "P" },
0.0002f, 0, 0, 10, 0, 1);
}
+ else if (dbName.Contains("iso8192"))
+ {
+ return new TurbDataTable(serverName, dbName, serverinfo, "pressure",
+ tableName, blobDim, 0, 1, new string[] { "P" },
+ 1f, 0, 5, 1, 0, 1);
+ }
else
{
return new TurbDataTable(serverName, dbName, serverinfo, "pressure",
diff --git a/Turbulence/TurbulenceWebServiceLibrary/DataInfo.cs b/Turbulence/TurbulenceWebServiceLibrary/DataInfo.cs
index 2459bad..c7ddede 100644
--- a/Turbulence/TurbulenceWebServiceLibrary/DataInfo.cs
+++ b/Turbulence/TurbulenceWebServiceLibrary/DataInfo.cs
@@ -27,6 +27,7 @@ public enum DataSets : int
strat4096 = 11,
bl_zaki = 12,
channel5200 = 13,
+ isotropic8192 = 14,
}
// TODO: This needs to be refactored. We probably don't want to keep track of
@@ -149,6 +150,15 @@ public static TableNames getTableName(DataSets dataSet, string field)
return TableNames.pr;
else
throw new Exception("Invalid field specified!");
+
+ case DataSets.isotropic8192:
+ if (field.Equals("u") || field.Contains("vel") || field.Contains("Vel") || field.Contains("vorticity") || field.Equals("q") || field.Equals("Q"))
+ return TableNames.vel;
+ else if (field.Equals("p") || field.Contains("pr") || field.Contains("Pr"))
+ return TableNames.pr;
+ else
+ throw new Exception("Invalid field specified!");
+
case DataSets.strat4096:
if (field.Equals("u") || field.Contains("vel") || field.Contains("Vel") || field.Contains("vorticity") || field.Equals("q") || field.Equals("Q"))
return TableNames.vel;
@@ -197,6 +207,7 @@ public static string GetCharFieldName(string field)
{"channel", "channel"},
{"channel5200", "channel5200"},
{"isotropic4096", "isotropic4096"},
+ {"isotropic8192", "isotropic8192"},
{"strat4096", "strat4096"},
{"rotstrat4096", "strat4096"},
{"transition_bl", "bl_zaki"},
@@ -263,6 +274,10 @@ public static bool isTimeInRange(DataSets dataset, float time)
{
return false;
}
+ else if (dataset == DataSets.isotropic8192 && time > 5.0F)
+ {
+ return false;
+ }
else if (dataset == DataSets.strat4096 && time > 4.0F)
{
return false;
diff --git a/Turbulence/TurbulenceWebServiceLibrary/Database.cs b/Turbulence/TurbulenceWebServiceLibrary/Database.cs
index 232449b..f534703 100644
--- a/Turbulence/TurbulenceWebServiceLibrary/Database.cs
+++ b/Turbulence/TurbulenceWebServiceLibrary/Database.cs
@@ -140,6 +140,13 @@ private void setResolution(DataInfo.DataSets dataset)
this.dz = (2.0 * Math.PI) / (double)this.GridResolutionZ;
channel_grid = false;
break;
+ case DataInfo.DataSets.isotropic8192:
+ this.gridResolution = new int[] { 8192, 8192, 8192 };
+ this.dx = (2.0 * Math.PI) / (double)this.GridResolutionX;
+ this.dy = (2.0 * Math.PI) / (double)this.GridResolutionY;
+ this.dz = (2.0 * Math.PI) / (double)this.GridResolutionZ;
+ channel_grid = false;
+ break;
//case DataInfo.DataSets.rmhd:
// this.gridResolution = new int[] { 2048, 2048, 2048 };
// this.dx = (2.0 * Math.PI) / (double)this.GridResolutionX;
@@ -248,6 +255,7 @@ public void setBlobDim(DataInfo.DataSets dataset)
case DataInfo.DataSets.channel5200:
case DataInfo.DataSets.mixing:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.strat4096:
case DataInfo.DataSets.bl_zaki:
//case DataInfo.DataSets.rmhd:
@@ -275,6 +283,10 @@ public void setDtTimeInc(DataInfo.DataSets dataset)
this.Dt = 0.0002F;
this.timeInc = 1;
break;
+ case DataInfo.DataSets.isotropic8192:
+ this.Dt = 1.0F;
+ this.timeInc = 1;
+ break;
case DataInfo.DataSets.strat4096: //These are seperated snapshots, so we set Dt=1.
this.Dt = 1.0F;
this.timeInc = 1;
@@ -885,7 +897,7 @@ public void GetServerParameters4RawData(int X, int Y, int Z, int T, int Xwidth,
}
else
{
- dbname = databases[i].Substring(0, databases[i].Length - 3); //"iso4096db"
+ dbname = databases[i].Substring(0, databases[i].IndexOf("db") + 2); //"iso4096db"
}
String cString = String.Format("Server={0};Database={1};Asynchronous Processing=true;User ID={2};Password={3};Pooling=false; Connect Timeout = 600;",
@@ -993,7 +1005,7 @@ public void GetServerParameters4RawData(int X, int Y, int Z, int T, int Xwidth,
}
else
{
- dbname = databases[i].Substring(0, databases[i].Length - 3); //"iso4096db"
+ dbname = databases[i].Substring(0, databases[i].IndexOf("db") + 2); //"iso4096db"
}
String cString = String.Format("Server={0};Database={1};Asynchronous Processing=true;User ID={2};Password={3};Pooling=false; Connect Timeout = 600;",
@@ -1083,7 +1095,7 @@ private void InsertIntoTempTable(int server, int id, Morton3D sfc, float z, floa
}
else
{
- dbname = databases[server].Substring(0, databases[server].Length - 3); //"iso4096db"
+ dbname = databases[server].Substring(0, databases[server].IndexOf("db") + 2); //"iso4096db"
}
String cString = String.Format("Server={0};Database={1};Asynchronous Processing=true;User ID={2};Password={3};Pooling=false; Connect Timeout = 600;",
@@ -1288,6 +1300,10 @@ private void SetBit(Morton3D sfc)
bit = sfc.X / 128 + sfc.Y / 128 * num_x_regions + sfc.Z / 128 * num_x_regions * num_y_regions;
}
//TODO: what is this value?
+ else if (GridResolutionX == 8192)
+ {
+ bit = (int)(sfc / (long)(1 << 30));
+ }
else if (GridResolutionX == 4096)
{
bit = (int)(sfc / (long)(1 << 24));
diff --git a/Turbulence/WebSite/App_Code/WebService.cs b/Turbulence/WebSite/App_Code/WebService.cs
index bb629dd..a5b5bbc 100644
--- a/Turbulence/WebSite/App_Code/WebService.cs
+++ b/Turbulence/WebSite/App_Code/WebService.cs
@@ -30,6 +30,7 @@ public class TurbulenceService : System.Web.Services.WebService
public const string infodb_backup_string = !DEVEL_MODE ? "turbinfo_backup_conn" : "";
//public const string infodb_string = "turbinfo_test_conn";
public const string logdb_string = (infodb_string == "turbinfo_conn") ? "turblog_conn" : "turbinfo_test_conn";
+ //public const string logdb_string = "turblog_conn";
// batch scheduler queue
public static BatchWorkerQueue batchQueue = null;
@@ -102,6 +103,7 @@ public Vector3[] GetVelocity(string authToken, string dataset, float time,
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.mixing:
case DataInfo.DataSets.isotropic4096: //check this
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.strat4096:
GetVectorData(auth, dataset, dataset_enum, DataInfo.TableNames.vel, worker,
time, spatialInterpolation, temporalInterpolation, points, result, ref rowid, addr);
@@ -211,6 +213,7 @@ public Vector3[] GetMagneticField(string authToken, string dataset, float time,
case DataInfo.DataSets.isotropic1024fine:
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.channel:
case DataInfo.DataSets.channel5200:
case DataInfo.DataSets.bl_zaki:
@@ -252,6 +255,7 @@ public Vector3[] GetVectorPotential(string authToken, string dataset, float time
case DataInfo.DataSets.isotropic1024fine:
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.channel:
case DataInfo.DataSets.channel5200:
case DataInfo.DataSets.bl_zaki:
@@ -298,7 +302,8 @@ public Pressure[] GetPressure(string authToken, string dataset, float time,
break;
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.mixing:
- case DataInfo.DataSets.isotropic4096: //check this
+ case DataInfo.DataSets.isotropic4096: //check this
+ case DataInfo.DataSets.isotropic8192:
GetScalarData(auth, dataset, dataset_enum, DataInfo.TableNames.pr, worker,
time, spatialInterpolation, temporalInterpolation, points, result, ref rowid, addr);
break;
@@ -484,6 +489,7 @@ public Vector3P[] GetVelocityAndPressure(string authToken, string dataset, float
case DataInfo.DataSets.channel:
case DataInfo.DataSets.channel5200:
case DataInfo.DataSets.isotropic4096: //check this
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.bl_zaki:
Vector3[] velocities = GetVelocity(authToken, dataset, time, spatialInterpolation, temporalInterpolation, points1, addr);
Pressure[] pressures = GetPressure(authToken, dataset, time, spatialInterpolation, temporalInterpolation, points, addr);
@@ -629,6 +635,7 @@ public VelocityGradient[] GetVelocityGradient(string authToken, string dataset,
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.mixing:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.strat4096:
GetVectorGradient(auth, dataset, dataset_enum, DataInfo.TableNames.vel, worker,
time, spatialInterpolation, temporalInterpolation, points, result, ref rowid, addr);
@@ -736,6 +743,7 @@ public VelocityGradient[] GetMagneticFieldGradient(string authToken, string data
case DataInfo.DataSets.isotropic1024fine:
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.channel:
case DataInfo.DataSets.channel5200:
case DataInfo.DataSets.bl_zaki:
@@ -777,6 +785,7 @@ public VelocityGradient[] GetVectorPotentialGradient(string authToken, string da
case DataInfo.DataSets.isotropic1024fine:
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.channel:
case DataInfo.DataSets.channel5200:
case DataInfo.DataSets.bl_zaki:
@@ -823,7 +832,8 @@ public Vector3[] GetPressureGradient(string authToken, string dataset, float tim
break;
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.mixing:
- case DataInfo.DataSets.isotropic4096: //check this
+ case DataInfo.DataSets.isotropic4096: //check this
+ case DataInfo.DataSets.isotropic8192:
GetScalarGradient(auth, dataset, dataset_enum, DataInfo.TableNames.pr, worker,
time, spatialInterpolation, temporalInterpolation, points, result, ref rowid, addr);
break;
@@ -976,7 +986,8 @@ private void GetVectorGradient(AuthInfo.AuthToken auth, string dataset, DataInfo
float time, TurbulenceOptions.SpatialInterpolation spatialInterpolation, TurbulenceOptions.TemporalInterpolation temporalInterpolation,
Point3[] points, VelocityGradient[] result, ref object rowid, string addr = null)
{
- bool round = true;
+ //bool round = true;
+ bool round = TurbulenceOptions.SplinesOption(spatialInterpolation) ? false : true;
int kernelSize = -1;
int kernelSizeY = -1;
@@ -1059,6 +1070,7 @@ public VelocityHessian[] GetVelocityHessian(string authToken, string dataset, fl
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.mixing:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.strat4096:
GetVectorHessian(auth, dataset, dataset_enum, DataInfo.TableNames.vel, worker,
time, spatialInterpolation, temporalInterpolation, points, result, ref rowid, addr);
@@ -1166,6 +1178,7 @@ public VelocityHessian[] GetMagneticHessian(string authToken, string dataset, fl
case DataInfo.DataSets.isotropic1024fine:
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.channel:
case DataInfo.DataSets.channel5200:
case DataInfo.DataSets.bl_zaki:
@@ -1207,6 +1220,7 @@ public VelocityHessian[] GetVectorPotentialHessian(string authToken, string data
case DataInfo.DataSets.isotropic1024fine:
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.channel:
case DataInfo.DataSets.channel5200:
case DataInfo.DataSets.bl_zaki:
@@ -1254,7 +1268,8 @@ public PressureHessian[] GetPressureHessian(string authToken, string dataset, fl
break;
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.mixing:
- case DataInfo.DataSets.isotropic4096: //check this
+ case DataInfo.DataSets.isotropic4096: //check this
+ case DataInfo.DataSets.isotropic8192:
GetScalarHessian(auth, dataset, dataset_enum, DataInfo.TableNames.pr, worker,
time, spatialInterpolation, temporalInterpolation, points, result, ref rowid, addr);
break;
@@ -1510,6 +1525,7 @@ public Vector3[] GetVelocityLaplacian(string authToken, string dataset, float ti
break;
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.strat4096:
case DataInfo.DataSets.mixing:
GetVectorLaplacian(auth, dataset, dataset_enum, DataInfo.TableNames.vel, worker,
@@ -1618,6 +1634,7 @@ public Vector3[] GetMagneticFieldLaplacian(string authToken, string dataset, flo
case DataInfo.DataSets.isotropic1024fine:
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.channel:
case DataInfo.DataSets.channel5200:
case DataInfo.DataSets.bl_zaki:
@@ -1659,6 +1676,7 @@ public Vector3[] GetVectorPotentialLaplacian(string authToken, string dataset, f
case DataInfo.DataSets.isotropic1024fine:
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.channel:
case DataInfo.DataSets.channel5200:
case DataInfo.DataSets.bl_zaki:
@@ -1825,6 +1843,7 @@ public ThresholdInfo[] GetThreshold(string authToken, string dataset, string fie
case DataInfo.DataSets.mhd1024:
case DataInfo.DataSets.mixing:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.strat4096:
if (field.Contains("vorticity"))
{
@@ -2070,6 +2089,7 @@ public Vector3[] GetInvariant(string authToken, string dataset, float time,
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.mixing:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.strat4096:
GetVectorGradient(auth, dataset, dataset_enum, DataInfo.TableNames.vel, worker,
time, spatialInterpolation, temporalInterpolation, points, vel_grad, ref rowid, addr);
@@ -2206,6 +2226,12 @@ public Vector3[] GetBoxFilter(string authToken, string dataset, string field, fl
{
dx = (2.0 * Math.PI) / 4096;
}
+
+ else if (dataset == "isotropic8192")
+ {
+ dx = (2.0 * Math.PI) / 8192;
+ }
+
else
{
dx = (2.0 * Math.PI) / (double)database.GridResolutionX;
@@ -2459,6 +2485,12 @@ private void InitializeSGSMethod(string authToken, float time, Point3[] points,
{
dx = (2.0 * Math.PI) / 4096;
}
+
+ else if (dataset == "isotropic8192")
+ {
+ dx = (2.0 * Math.PI) / 8192;
+ }
+
else
{
dx = (2.0 * Math.PI) / (double)database.GridResolutionX;
@@ -2531,6 +2563,12 @@ public VelocityGradient[] GetBoxFilterGradient(string authToken, string dataset,
{
dx = (2.0 * Math.PI) / 4096;
}
+
+ else if (dataset == "isotropic8192")
+ {
+ dx = (2.0 * Math.PI) / 8192;
+ }
+
else
{
dx = (2.0 * Math.PI) / (double)database.GridResolutionX;
@@ -4394,6 +4432,7 @@ public Vector3[] GetVelocityBatch(string authToken, string dataset, float time,
case DataInfo.DataSets.isotropic1024fine:
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.channel:
case DataInfo.DataSets.channel5200:
case DataInfo.DataSets.bl_zaki:
@@ -4479,6 +4518,7 @@ public byte[] GetRawVelocity(string authToken, string dataset, int T,
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.mixing:
case DataInfo.DataSets.isotropic4096: //This is not really used in filedb, but we don't want to get an invalid dataset.
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.strat4096:
tableName = DataInfo.TableNames.vel;
break;
@@ -4546,6 +4586,7 @@ public byte[] GetRawMagneticField(string authToken, string dataset, int T,
case DataInfo.DataSets.isotropic1024fine:
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.strat4096:
case DataInfo.DataSets.channel:
case DataInfo.DataSets.channel5200:
@@ -4602,6 +4643,7 @@ public byte[] GetRawVectorPotential(string authToken, string dataset, int T,
case DataInfo.DataSets.isotropic1024fine:
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.strat4096:
case DataInfo.DataSets.channel:
case DataInfo.DataSets.channel5200:
@@ -4661,6 +4703,7 @@ public byte[] GetRawPressure(string authToken, string dataset, int T,
break;
case DataInfo.DataSets.isotropic1024coarse:
case DataInfo.DataSets.isotropic4096:
+ case DataInfo.DataSets.isotropic8192:
case DataInfo.DataSets.mixing:
tableName = DataInfo.TableNames.pr;
break;
diff --git a/Turbulence/WebSite/Default.aspx b/Turbulence/WebSite/Default.aspx
index 00e1021..ded1052 100644
--- a/Turbulence/WebSite/Default.aspx
+++ b/Turbulence/WebSite/Default.aspx
@@ -79,8 +79,9 @@
a DNS of homogeneous buoyancy driven turbulence (27 Terabytes),
and a transitional boundary layer flow (105 Terabytes).
Also available are individual snapshots (spatially but not temporally resolved data) of
- 40963 DNS of isotropic turbulence (1 snapshot)
- and rotating stratified turbulence (5 snapshots, 5 Terabytes),
+ 40963 DNS of isotropic turbulence (1 snapshot),
+ 81923 DNS of isotropic turbulence (6 snapshots at higher Reynolds number),
+ rotating stratified turbulence (5 snapshots, 5 Terabytes),
and channel flow at Reτ =5200 (11 snapshots, 20 Terabytes).
Basic characteristics of the data sets can be found in the datasets description page .
Technical details about the database techniques used for this project are described in the publications .
diff --git a/Turbulence/WebSite/Isotropic8192.aspx b/Turbulence/WebSite/Isotropic8192.aspx
new file mode 100644
index 0000000..1d0a4d0
--- /dev/null
+++ b/Turbulence/WebSite/Isotropic8192.aspx
@@ -0,0 +1,86 @@
+
+
+
+
+ Johns Hopkins Turbulence Databases (JHTDB)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Johns Hopkins Turbulence Databases
+
+
+
+
+
+
+
+
+
+
+
Forced Isotropic Turbulence Dataset on 81923 Grid:
+
+
+
+
+
+
+ Dataset description
+
+
+
Forced Isotropic Turbulence Dataset on 81923 Grid:
+
+ Simulation data provenance: Georgia Tech DNS code
+ (see README-isotropic8192 for more details).
+
+
+ Direct numerical simulation (DNS) using 81923 nodes.
+ Navier-Stokes is solved using pseudo-spectral method.
+ Time integration uses second-order Runge-Kutta.
+ The simulation is de-aliased using phase-shifting and truncation.
+ Energy is injected by keeping the energy density in the lowest wavenumber modes prescribed following the approach of Donzis & Yeung.
+ After the simulation has reached a statistical stationary state, a frame of data, which includes the 3 components of the velocity vector and the pressure, are generated and written in files that can be accessed directly by the database (FileDB system).
+ Domain: 2π × 2π × 2π
+ Grid: 81923
+ Number of snapshots available: 6
+ Taylor-scale Reynolds number Reλ ~ 1200-1300 for snapshots 0-4, and Reλ ~ 610 for snapshot 5
+ Viscosity, dissipation, RMS velocity, and Kolmogorov scale: see README-isotropic8192
+ GetPosition is not implemented for this dataset.
+
+
+
+
+
+
+
+
+ Disclaimer:
While many efforts have
+ been made to ensure that these data are accurate and reliable within
+ the limits of the current state of the art, neither JHU nor any other
+ party involved in creating, producing or delivering the website shall
+ be liable for any damages arising out of users' access to, or use
+ of, the website or web services. Users use the website and web services
+ at their own risk. JHU does not warrant that the functional aspects
+ of the website will be uninterrupted or error free, and may make
+ changes to the site without notice.
+
+
+ Last update: <%=System.IO.File.GetLastWriteTime(Server.MapPath(Request.Url.AbsolutePath)).ToString()%>
+
+
+
+
+
+
+
+
+
diff --git a/Turbulence/WebSite/Properties/PublishProfiles/dsa004.pubxml b/Turbulence/WebSite/Properties/PublishProfiles/dsa004.pubxml
index bc08fa7..784bab1 100644
--- a/Turbulence/WebSite/Properties/PublishProfiles/dsa004.pubxml
+++ b/Turbulence/WebSite/Properties/PublishProfiles/dsa004.pubxml
@@ -22,7 +22,53 @@ by editing this MSBuild file. In order to learn more about this please visit htt
<_SavePWD>True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Turbulence/WebSite/Properties/PublishProfiles/dsa004.pubxml.user b/Turbulence/WebSite/Properties/PublishProfiles/dsa004.pubxml.user
index e1f8413..9eecdc2 100644
--- a/Turbulence/WebSite/Properties/PublishProfiles/dsa004.pubxml.user
+++ b/Turbulence/WebSite/Properties/PublishProfiles/dsa004.pubxml.user
@@ -6,6 +6,6 @@ by editing this MSBuild file. In order to learn more about this please visit htt
- AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAn+WETWcJlkOk8Mg850QeHgAAAAACAAAAAAADZgAAwAAAABAAAADWca8jlTGRAFVFfzsss/OkAAAAAASAAACgAAAAEAAAAPAK30jFqLNFLlOd/4BFbZ0YAAAARIRTsj7HJv8+DEt5KyYbmPJLHK8Mz+qGFAAAAPXGunHb2aW5+tgItarcU7mscpFs
+ AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAY/g4Rl+QJkO0WD92BfgNkQAAAAACAAAAAAADZgAAwAAAABAAAAAr943hbLq8sRvAT/ATPrfKAAAAAASAAACgAAAAEAAAAGuRbd27x2d5ru9xHfvQ72MgAAAAhIfueaft9Dhrxf9dLUXJxf0al8uC0ZIkYl6gUEjz0NEUAAAAQt0ZLlyO67r9mEewufYFScJeFdw=
\ No newline at end of file
diff --git a/Turbulence/WebSite/README-isotropic8192.pdf b/Turbulence/WebSite/README-isotropic8192.pdf
new file mode 100644
index 0000000..a24c938
Binary files /dev/null and b/Turbulence/WebSite/README-isotropic8192.pdf differ
diff --git a/Turbulence/WebSite/Transition_bl.aspx b/Turbulence/WebSite/Transition_bl.aspx
index 21f9688..a766b83 100644
--- a/Turbulence/WebSite/Transition_bl.aspx
+++ b/Turbulence/WebSite/Transition_bl.aspx
@@ -47,7 +47,7 @@
After the simulation has reached a statistical stationary state, 4701 frames of data, which includes the 3 components of the velocity vector and the pressure, are generated and written in files that can be accessed directly by the database (FileDB system).
Since the grid is staggered, data at the wall are not stored in the database. However, JHTDB provides values in the region between the wall and the first grid point, y∈[0, 0.0036], using 4th-order Lagrange polynomial inter- and extrapolation.
The y-locations of the grid points in the vertical direction can be downloaded from this text file .
- The time-averaged statistics can be downloaded from this HDF5 file . Breif notes are here .
+ The time-averaged statistics can be downloaded from this HDF5 file . Brief notes are here .
diff --git a/Turbulence/WebSite/Website.csproj b/Turbulence/WebSite/Website.csproj
index f35b925..3e51072 100644
--- a/Turbulence/WebSite/Website.csproj
+++ b/Turbulence/WebSite/Website.csproj
@@ -104,9 +104,12 @@
+
+
+
@@ -243,6 +246,7 @@
+
Designer
diff --git a/Turbulence/WebSite/authtoken.aspx b/Turbulence/WebSite/authtoken.aspx
index 4fe0984..8967ea8 100644
--- a/Turbulence/WebSite/authtoken.aspx
+++ b/Turbulence/WebSite/authtoken.aspx
@@ -45,7 +45,7 @@ We have a generic identifier that may be used if you are simply testing out
the interfaces. The number and size of requests may be limited.
The current testing identifier is:
-edu.jhu.pha.turbulence.testing-201311
+edu.jhu.pha.turbulence.testing-201406
Get a Group/Individual Identifier
diff --git a/Turbulence/WebSite/citing.aspx b/Turbulence/WebSite/citing.aspx
index f1bbdce..710b52e 100644
--- a/Turbulence/WebSite/citing.aspx
+++ b/Turbulence/WebSite/citing.aspx
@@ -45,7 +45,7 @@
- Y. Li, E. Perlman, M. Wan, Y. Yang, R. Burns, C. Meneveau, R. Burns, S. Chen, A. Szalay & G. Eyink.
+ Y. Li, E. Perlman, M. Wan, Y. Yang, C. Meneveau, R. Burns, S. Chen, A. Szalay & G. Eyink.
"A public turbulence database cluster and applications to study Lagrangian evolution of velocity increments in turbulence".
Journal of Turbulence 9 , No. 31, 2008.
@@ -107,6 +107,19 @@
Journal of Fluid Mechanics 774, 395-415, 2015.
+ For articles that use the 81923 isotropic turbulence, we suggest also including:
+
+
+ For snapshots 0-4: P.K. Yeung, X.M. Zhai, and K.R. Sreenivasan.
+ "Extreme events in computational turbulence".
+ Proceedings of the National Academy of Sciences 112, 12633-12638, 2015.
+
+
+ For snapshots 5: P.K. Yeung, K.R. Sreenivasan, and S.B. Pope.
+ "Effects of finite spatial and temporal resolution on extreme events in direct numerical simulations of incompressible isotropic turbulence".
+ Physical Review Fluids 3, 064603, 2018.
+
+
For articles that use the Lagrangian tracking GetPosition function, we suggest also including:
@@ -132,6 +145,8 @@
Developing Boundary Layer Dataset: https://doi.org/10.7281/T17S7KX8
Turbulent Channel Flow at Reτ =5200: https://doi.org/10.7281/T1PV6HJV
+
+ Forced Isotropic Turbulence Dataset on 81923 Grid: TDB
<%-- --%>
diff --git a/Turbulence/WebSite/datasets.aspx b/Turbulence/WebSite/datasets.aspx
index fa410a5..9f0bee4 100644
--- a/Turbulence/WebSite/datasets.aspx
+++ b/Turbulence/WebSite/datasets.aspx
@@ -56,10 +56,14 @@
+
+
+
+
-
Dataset descriptions
+
Dataset descriptions (9 datasets)
@@ -136,6 +140,15 @@
using 10240 × 1536 × 7680 nodes.
A total of 11 snapshots are available.
+
+
+
+ 9. Forced isotropic turbulence dataset on 81923 Grid:
+
+
+ Direct numerical simulation (DNS) using 81923 nodes.
+ A total of 6 timestep snapshots are available: 5 at high Reynolds number and 1 at lower Reynolds number but with very high spatial resolution.
+
<%--
--%>
diff --git a/Turbulence/WebSite/docs/README-isotropic8192.pdf b/Turbulence/WebSite/docs/README-isotropic8192.pdf
new file mode 100644
index 0000000..a24c938
Binary files /dev/null and b/Turbulence/WebSite/docs/README-isotropic8192.pdf differ
diff --git a/Turbulence/WebSite/images/isotropic8192-small.jpg b/Turbulence/WebSite/images/isotropic8192-small.jpg
new file mode 100644
index 0000000..9fc2cf0
Binary files /dev/null and b/Turbulence/WebSite/images/isotropic8192-small.jpg differ
diff --git a/Turbulence/WebSite/images/isotropic8192.png b/Turbulence/WebSite/images/isotropic8192.png
new file mode 100644
index 0000000..5e5347b
Binary files /dev/null and b/Turbulence/WebSite/images/isotropic8192.png differ
diff --git a/Turbulence/WebSite/isotropic8192-small.jpg b/Turbulence/WebSite/isotropic8192-small.jpg
new file mode 100644
index 0000000..9fc2cf0
Binary files /dev/null and b/Turbulence/WebSite/isotropic8192-small.jpg differ
diff --git a/Turbulence/WebSite/isotropic8192.jpg b/Turbulence/WebSite/isotropic8192.jpg
new file mode 100644
index 0000000..8dd162e
Binary files /dev/null and b/Turbulence/WebSite/isotropic8192.jpg differ
diff --git a/Turbulence/WebSite/navbar.htm b/Turbulence/WebSite/navbar.htm
index 806c6f8..6ae2f72 100644
--- a/Turbulence/WebSite/navbar.htm
+++ b/Turbulence/WebSite/navbar.htm
@@ -89,10 +89,11 @@
+
+
+
+
+