Revision a2e6a2b1dd1da48e502fc25126aa9b8a139ed543 authored by GUANGMING ZANG on 13 August 2018, 08:44:48 UTC, committed by GitHub on 13 August 2018, 08:44:48 UTC
1 parent 80d039c
tools.cpp
#include "tools.h"
int index3DtoLinear( int *sizeMat, int i, int j,int k)
{
return (int)(i + j*sizeMat[0] + k*sizeMat[0]*sizeMat[1]);
}
int linearTo3Di( int *sizeMat, int index)
{
return index%sizeMat[0];
}
int linearTo3Dj( int *sizeMat, int index)
{
return (index-linearTo3Di(sizeMat,index))/sizeMat[0] % sizeMat[1];
}
int linearTo3Dk( int *sizeMat, int index)
{
return ((index-linearTo3Di(sizeMat,index))/sizeMat[0] - linearTo3Dj(sizeMat,index)) / sizeMat[1] % sizeMat[2];
}
float myAbs(float x)
{
return x > 0 ? x : -x;
}
float myMin(float a, float b)
{
return a > b ? b : a;
}
float myMax(float a, float b)
{
return a < b ? b : a;
}
float myPow2(float x)
{
return x * x;
}
float dxc3( float *data, float *u, int *sizeMat, int i, int j, int k)
{
int indexIP = index3DtoLinear(sizeMat, i + 1, j,k);
int indexIM = index3DtoLinear(sizeMat, i - 1, j,k);
if (i > 0 && i < sizeMat[0] - 1 && k < sizeMat[2] - 1)
{
return 0.5f*(data[indexIP] - data[indexIM]);
}
else
{
return 0.0f;
}
}
float dxcT3( float *data, float *u, int *sizeMat, int i, int j, int k )
{
//Attention! Transposed operator contains a different weight for u
int indexIP = index3DtoLinear(sizeMat, i + 1, j, k);
int indexIM = index3DtoLinear(sizeMat, i - 1, j, k);
int indexIJ = index3DtoLinear(sizeMat, i, j, k);
if (i > 1 && i < sizeMat[0] - 2 && k < sizeMat[2] - 1)
{
return 0.5f*(data[indexIP] * u[indexIP] - data[indexIM] * u[indexIM]);
}
else if (i <= 1 && k < sizeMat[2] - 1)
{
return 0.5f* data[indexIP] * u[indexIP];
}
else if (k < sizeMat[2] - 1)
{
return -0.5f* data[indexIM] * u[indexIM];
}
else
{
return 0.0f;
}
}
float dyc3( float *data, float *u, int *sizeMat, int i, int j, int k)
{
int indexJP = index3DtoLinear(sizeMat, i, j + 1, k);
int indexJM = index3DtoLinear(sizeMat, i, j - 1, k);
if (j > 0 && j < sizeMat[1] - 1 && k < sizeMat[2] - 1)
{
return 0.5f*(data[indexJP] - data[indexJM]);
}
else
{
return 0.0f;
}
}
float dycT3( float *data, float *u, int *sizeMat, int i, int j, int k)
{
//Attention! Transposed operator contains a different weight for u
int indexIP = index3DtoLinear(sizeMat, i, j + 1, k);
int indexIM = index3DtoLinear(sizeMat, i, j - 1, k);
int indexIJ = index3DtoLinear(sizeMat, i, j, k);
if (j > 1 && j < sizeMat[1] - 2 && k < sizeMat[2] - 1)
{
return 0.5f*(data[indexIP] * u[indexIP] - data[indexIM] * u[indexIM]);
}
else if (j <= 1 && k < sizeMat[2] - 1)
{
return 0.5f* data[indexIP] * u[indexIP];
}
else if (k < sizeMat[2] - 1)
{
return -0.5f* data[indexIM] * u[indexIM];
}
else
{
return 0.0f;
}
}
float dxp3( float *data, int *sizeMat, int i, int j, int k)
{
return i < sizeMat[0] - 1 ? data[index3DtoLinear(sizeMat, i + 1, j, k)] - data[index3DtoLinear(sizeMat, i, j, k)] : 0.0f;
}
float dyp3( float *data, int *sizeMat, int i, int j, int k)
{
return j < sizeMat[1] - 1 ? data[index3DtoLinear(sizeMat, i, j + 1, k)] - data[index3DtoLinear(sizeMat, i, j, k)] : 0.0f;
}
float dzp3( float *data, int *sizeMat, int i, int j, int k)
{
return k < sizeMat[2] - 1 ? data[index3DtoLinear(sizeMat, i, j , k+1)] - data[index3DtoLinear(sizeMat, i, j, k)] : 0.0f;
}
//forward differenc
float dtp3( float *data, int *sizeMat, int i, int j, int k)
{
return k < sizeMat[2] - 1 ? data[index3DtoLinear(sizeMat, i, j, k + 1)] - data[index3DtoLinear(sizeMat, i, j, k)] : 0.0f;
}
// backward difference
float dxm3( float *data, int *sizeMat, int i, int j, int k)
{
if (i > 0 && i < sizeMat[0] - 1)
{
return data[index3DtoLinear(sizeMat, i, j, k)] - data[index3DtoLinear(sizeMat, i - 1, j, k)];
}
else if (i == 0)
{
return data[index3DtoLinear(sizeMat, i, j, k)];
}
else
{
return -data[index3DtoLinear(sizeMat, i - 1, j, k)];
}
}
float dym3( float *data, int *sizeMat, int i, int j, int k)
{
if (j > 0 && j < sizeMat[1] - 1)
{
return data[index3DtoLinear(sizeMat, i, j, k)] - data[index3DtoLinear(sizeMat, i, j - 1, k)];
}
else if (j == 0)
{
return data[index3DtoLinear(sizeMat, i, j, k)];
}
else
{
return -data[index3DtoLinear(sizeMat, i, j - 1, k)];
}
}
float dzm3( float *data, int *sizeMat, int i, int j, int k)
{
if (k > 0 && k < sizeMat[2] - 1)
{
return data[index3DtoLinear(sizeMat, i, j, k)] - data[index3DtoLinear(sizeMat, i, j, k-1)];
}
else if (k == 0)
{
return data[index3DtoLinear(sizeMat, i, j, k)];
}
else
{
return -data[index3DtoLinear(sizeMat, i, j, k-1)];
}
}
float dtm3( float *data, int *sizeMat, int i, int j, int k)
{
if (k > 0 && k < sizeMat[2] - 1)
{
return data[index3DtoLinear(sizeMat, i, j, k)] - data[index3DtoLinear(sizeMat, i, j, k - 1)];
}
else if (k == 0)
{
return data[index3DtoLinear(sizeMat, i, j, k)];
}
else
{
return -data[index3DtoLinear(sizeMat, i, j, k - 1)];
}
}

Computing file changes ...