extern _declspec(dllexport) double SoluteTransportSimulation(double U_X, double U_Y, double Dast, double ALPHA_L, int TSTEP)
/*
* INPUT:
* U_X:
* U_Y:
* Dast:
* ALPHA_L:
*
* OUTPUT:
* MaxDistance: Furthest Distance
* Concentration: Corresponding Concentration
*/
{
static double MaxDistance;
double Concentration;
int ii, jj, kk;
int tt; int NNX = XN + 1;
int NNY = YN + 1;
int NNZ = ZN + 1; double ct;
int row = 0;
int col = 0; double DeltaZ = DEPTH / ZN;
double DeltaX = WIDTH_X / XN;
double DeltaY = WIDTH_Y / YN; double rx = DeltaT / DeltaX / DeltaX;
double ry = DeltaT / DeltaY / DeltaY;
double rz = DeltaT / DeltaZ / DeltaZ;
double rx2 = DeltaT / DeltaX / 2.0;
double ry2 = DeltaT / DeltaY / 2.0;
double rz2 = DeltaT / DeltaZ / 2.0; double *XX, *YY, *ZZ; /*------------ COMPUTATION RESULTS ------------*/
double *HydraulicHead1D; /* n time layer Hydraulic Head h^n (1D Model)*/
double *HydraulicHead1D2; /* n+1 time layer Hydraulic Head h^{n+1} (1D Model)*/
double *SoluteConcentration1D; /* n time layer Solute Concentration (c^n) (1D Model)*/
double *SoluteConcentration2D; /* n time layer Solute Concentration (c^n) (2D Model)*/ /* 1D Vertical Flow Simulation & Solute Transport */
ZZ = (double *)malloc(NNY * sizeof(*ZZ));
for (kk = 0; kk < NNZ; kk++)
ZZ[kk] = kk * DeltaZ;
/* 2D Horizontal Flow Simulation & Solute Transport */
XX = (double *)malloc(NNX * sizeof(*XX));
YY = (double *)malloc(NNY * sizeof(*YY));
for (ii = 0; ii < NNX; ii++)
XX[ii] = ii * DeltaX;
for (jj = 0; jj < NNY; jj++)
YY[jj] = jj * DeltaY; HydraulicHead1D = (double *)malloc(NNZ * sizeof(*HydraulicHead1D));
HydraulicHead1D2 = (double *)malloc(NNZ * sizeof(*HydraulicHead1D2));
SoluteConcentration1D = (double *)malloc(NNZ * sizeof(*SoluteConcentration1D));
SoluteConcentration2D = (double *)malloc(NNX * NNY * sizeof(*SoluteConcentration2D)); /* Initial Values */
FuncGetValues1D(HydraulicHead1D, NNZ, ZZ, InitialHydraulicHead);
FuncGetValues1D(SoluteConcentration1D, NNZ, ZZ, InitialConcentration1D);
FuncGetValues2D(SoluteConcentration2D, NNX, NNY, XX, YY, InitialSoluteConcentration); for (tt= 1; tt <= TSTEP; tt++) {
ct = tt * DeltaT;
/*------------------------------------------------------------------
* --------- 1D Vertical Flow Solute Transport Simulation ----------
* -----------------------------------------------------------------*/
/* n time layer to n+1 time layer hydraulic head */
WaterMovement1D(HydraulicHead1D, HydraulicHead1D2, NNZ, ct, rz, rz2); /* n time layer to n+1 time layer solute concentration */
SoluteTransport1D(HydraulicHead1D, HydraulicHead1D2, SoluteConcentration1D,
NNZ, ct, rz2, DeltaZ); VecCopy(HydraulicHead1D, HydraulicHead1D2, NNZ);
ZeroVec(HydraulicHead1D2, NNZ);
// bzero(HydraulicHead1D2, NNZ * sizeof(double)); /*------------------------------------------------------------------
* ---------- 2D Plane Flow Solute Transport Simulation -----------
* -----------------------------------------------------------------*/
SoluteTransport2D(SoluteConcentration2D, NNX, NNY, tt, SoluteConcentration1D[ZN],
rx, rx2, ry, ry2, U_X, U_Y, Dast, ALPHA_L); /* Search distance and concentration */
Concentration = SearchMax(SoluteConcentration2D, NNX, NNY, row, col);
MaxDistance = DeltaX * row;
}// time marching free(XX); free(YY); free(ZZ);
free(HydraulicHead1D); free(HydraulicHead1D2);
free(SoluteConcentration1D);
free(SoluteConcentration2D); return MaxDistance;
}
[DllImport("simulation.dll")] public static extern Double SoluteTransportSimulation(double U_X, double U_Y, double Dast, double ALPHA_L, int TSTEP);
double sss= SoluteTransportSimulation(0.4, 1.2, 1.3, 5.0, 10);C#c语言的dll
/*
* INPUT:
* U_X:
* U_Y:
* Dast:
* ALPHA_L:
*
* OUTPUT:
* MaxDistance: Furthest Distance
* Concentration: Corresponding Concentration
*/
{
static double MaxDistance;
double Concentration;
int ii, jj, kk;
int tt; int NNX = XN + 1;
int NNY = YN + 1;
int NNZ = ZN + 1; double ct;
int row = 0;
int col = 0; double DeltaZ = DEPTH / ZN;
double DeltaX = WIDTH_X / XN;
double DeltaY = WIDTH_Y / YN; double rx = DeltaT / DeltaX / DeltaX;
double ry = DeltaT / DeltaY / DeltaY;
double rz = DeltaT / DeltaZ / DeltaZ;
double rx2 = DeltaT / DeltaX / 2.0;
double ry2 = DeltaT / DeltaY / 2.0;
double rz2 = DeltaT / DeltaZ / 2.0; double *XX, *YY, *ZZ; /*------------ COMPUTATION RESULTS ------------*/
double *HydraulicHead1D; /* n time layer Hydraulic Head h^n (1D Model)*/
double *HydraulicHead1D2; /* n+1 time layer Hydraulic Head h^{n+1} (1D Model)*/
double *SoluteConcentration1D; /* n time layer Solute Concentration (c^n) (1D Model)*/
double *SoluteConcentration2D; /* n time layer Solute Concentration (c^n) (2D Model)*/ /* 1D Vertical Flow Simulation & Solute Transport */
ZZ = (double *)malloc(NNY * sizeof(*ZZ));
for (kk = 0; kk < NNZ; kk++)
ZZ[kk] = kk * DeltaZ;
/* 2D Horizontal Flow Simulation & Solute Transport */
XX = (double *)malloc(NNX * sizeof(*XX));
YY = (double *)malloc(NNY * sizeof(*YY));
for (ii = 0; ii < NNX; ii++)
XX[ii] = ii * DeltaX;
for (jj = 0; jj < NNY; jj++)
YY[jj] = jj * DeltaY; HydraulicHead1D = (double *)malloc(NNZ * sizeof(*HydraulicHead1D));
HydraulicHead1D2 = (double *)malloc(NNZ * sizeof(*HydraulicHead1D2));
SoluteConcentration1D = (double *)malloc(NNZ * sizeof(*SoluteConcentration1D));
SoluteConcentration2D = (double *)malloc(NNX * NNY * sizeof(*SoluteConcentration2D)); /* Initial Values */
FuncGetValues1D(HydraulicHead1D, NNZ, ZZ, InitialHydraulicHead);
FuncGetValues1D(SoluteConcentration1D, NNZ, ZZ, InitialConcentration1D);
FuncGetValues2D(SoluteConcentration2D, NNX, NNY, XX, YY, InitialSoluteConcentration); for (tt= 1; tt <= TSTEP; tt++) {
ct = tt * DeltaT;
/*------------------------------------------------------------------
* --------- 1D Vertical Flow Solute Transport Simulation ----------
* -----------------------------------------------------------------*/
/* n time layer to n+1 time layer hydraulic head */
WaterMovement1D(HydraulicHead1D, HydraulicHead1D2, NNZ, ct, rz, rz2); /* n time layer to n+1 time layer solute concentration */
SoluteTransport1D(HydraulicHead1D, HydraulicHead1D2, SoluteConcentration1D,
NNZ, ct, rz2, DeltaZ); VecCopy(HydraulicHead1D, HydraulicHead1D2, NNZ);
ZeroVec(HydraulicHead1D2, NNZ);
// bzero(HydraulicHead1D2, NNZ * sizeof(double)); /*------------------------------------------------------------------
* ---------- 2D Plane Flow Solute Transport Simulation -----------
* -----------------------------------------------------------------*/
SoluteTransport2D(SoluteConcentration2D, NNX, NNY, tt, SoluteConcentration1D[ZN],
rx, rx2, ry, ry2, U_X, U_Y, Dast, ALPHA_L); /* Search distance and concentration */
Concentration = SearchMax(SoluteConcentration2D, NNX, NNY, row, col);
MaxDistance = DeltaX * row;
}// time marching free(XX); free(YY); free(ZZ);
free(HydraulicHead1D); free(HydraulicHead1D2);
free(SoluteConcentration1D);
free(SoluteConcentration2D); return MaxDistance;
}
[DllImport("simulation.dll")] public static extern Double SoluteTransportSimulation(double U_X, double U_Y, double Dast, double ALPHA_L, int TSTEP);
double sss= SoluteTransportSimulation(0.4, 1.2, 1.3, 5.0, 10);C#c语言的dll
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货