forked from eacdamal/simpar
fixed Euler's step and number of iteration for dx = 5
This commit is contained in:
parent
5807ba4b64
commit
6a4ded9ca7
1 changed files with 24 additions and 44 deletions
|
@ -1,39 +1,29 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <iomanip>
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
// Length
|
int l = 1925; // Edge length
|
||||||
int l = 1925;
|
int dx = 40; // Spatial step
|
||||||
// Spatial step
|
int dt = 100000; // Euler's step
|
||||||
int dx = 40;
|
int kmax = l / dx; // Number of spatial steps
|
||||||
// Temporal step
|
|
||||||
int dt = 2500;
|
|
||||||
// Number of spatial steps
|
|
||||||
int kmax = l / dx;
|
|
||||||
|
|
||||||
// Initializing parameters
|
|
||||||
vector<double> list(dt);
|
|
||||||
|
|
||||||
// Arrays to store data
|
|
||||||
double Q[kmax][dt];
|
|
||||||
double P[kmax][dt];
|
|
||||||
|
|
||||||
int i;
|
|
||||||
|
|
||||||
// Parameters
|
// Parameters
|
||||||
double alpha = 0.093;
|
double alpha = 0.093;
|
||||||
double beta = 0.004;
|
double beta = 0.004;
|
||||||
double gamma = 728.6;
|
double gamma = 728.6;
|
||||||
double h = 0.05;
|
double h = 0.007;
|
||||||
double sum_of_h = 0;
|
|
||||||
|
// Arrays to store data
|
||||||
|
double Q[kmax][dt];
|
||||||
|
double P[kmax][dt];
|
||||||
|
|
||||||
// Loop over time steps
|
// Loop over time steps
|
||||||
for (i = 0; i < dt; i++)
|
for (int i = 0; i < dt; i++)
|
||||||
{
|
{
|
||||||
// Loop over spatial steps
|
// Loop over spatial steps
|
||||||
for (int k = 0; k < kmax; k++)
|
for (int k = 0; k < kmax; k++)
|
||||||
|
@ -42,7 +32,7 @@ int main()
|
||||||
if (k == kmax - 1)
|
if (k == kmax - 1)
|
||||||
{
|
{
|
||||||
Q[k][i] = 0;
|
Q[k][i] = 0;
|
||||||
P[k][i] = -202.0; // P = -202 when Q = 10
|
P[k][i] = -202.0; // P = -202 when Q = 10
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
Q[k][i] = 0;
|
Q[k][i] = 0;
|
||||||
|
@ -52,31 +42,20 @@ int main()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Main calculation loop
|
// Main calculation loop
|
||||||
for (i = 2; i < dt - 2; i++)
|
for (int i = 2; i < dt; i++)
|
||||||
{
|
{
|
||||||
// Add current time step to the list
|
|
||||||
sum_of_h = sum_of_h + h;
|
|
||||||
list.push_back(sum_of_h);
|
|
||||||
|
|
||||||
std::cout << "Q at step " << i;
|
|
||||||
|
|
||||||
// Loop over spatial steps
|
// Loop over spatial steps
|
||||||
for (int k = 1; k < kmax; k++)
|
for (int k = 1; k < kmax; k++)
|
||||||
{
|
{
|
||||||
// Boundary condition for the last spatial step
|
Q[k][i + 1] = Q[k][i] + h * (alpha * (P[k - 1][i] - P[k][i]) - beta * Q[k][i] * abs(Q[k][i]));
|
||||||
if (k == kmax - 1)
|
|
||||||
{
|
// DO NOT calculate pressure for the last element such as it is given by default
|
||||||
Q[k][i + 1] = Q[k][i] + h * (alpha * (P[k - 1][i] - P[k][i]) - beta * Q[k][i] * abs(Q[k][i]));
|
if (k != kmax - 1)
|
||||||
} else
|
|
||||||
{
|
|
||||||
// Calculate Q and P for non-boundary spatial steps
|
|
||||||
Q[k][i + 1] = Q[k][i] + h * (alpha * (P[k - 1][i] - P[k][i]) - beta * Q[k][i] * abs(Q[k][i]));
|
|
||||||
P[k][i + 1] = P[k][i - 2] + h * (gamma * (Q[k][i] - Q[k + 1][i]));
|
P[k][i + 1] = P[k][i - 2] + h * (gamma * (Q[k][i] - Q[k + 1][i]));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print out the first 10 values of the timestemp
|
// Print out the first 10 of Q for each spatial step
|
||||||
std::cout << "FIRST 10 VALUES\n";
|
std::cout << "FIRST 10 VALUES\n";
|
||||||
for(int i = 0; i < kmax; i++)
|
for(int i = 0; i < kmax; i++)
|
||||||
{
|
{
|
||||||
|
@ -89,18 +68,19 @@ int main()
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print out the last 10 values of the timestemp
|
// Print out the first 10 of Q for each spatial step
|
||||||
std::cout << "LAST 10 VALUES\n";
|
std::cout << "LAST 10 VALUES:\n";
|
||||||
for(int i = 0; i < kmax; i++)
|
for(int i = 1; i < kmax; i++)
|
||||||
{
|
{
|
||||||
std::cout.width(5);
|
std::cout.width(5);
|
||||||
std::cout.flags(std::ios::left);
|
std::cout.flags(std::ios::left);
|
||||||
std::cout << i << ": ";
|
std::cout << i << ": ";
|
||||||
|
|
||||||
for(int k = 0; k < 10; k++)
|
for(int k = 0; k < 10; k++)
|
||||||
std::cout << std::setw(10) << Q[i][2489 + k];
|
std::cout << std::setw(10) << Q[i][dt - 10 + k];
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue