int make_ic(int x, int y, int z) {
int i, j, k;
double velo_x, velo_y, velo_z;
double T0, T, A, rho0, pre0;
Here the constants for the implemented temperature distribution in a stratified atmosphere are defined.
//T(z)=T_0 + A*(z-z0)
T0 = 288.15; //[K]
A = -6.5E-3; //[K/m]
Pressure and temperature at a certain level for the stratified atmosphere are assigned here.
rho0 = 1.229; // Density at sea level [kg/m^3]
pre0 = 1.013E5; //pressure at sea level [N/m^2]
In order to get a physical gas distribution we assign very small velocities to the gas.
velo_x = small;
velo_y = small;
velo_z = small;
If one needs a toy atmosphere to play around one has to switch in the Parameterfile the Stratified Atmosphere to 1.
if (strat_const_atmos == 1) {
for (i = 0; i < x; i++) {
for (j = 0; j < y; j++) {
for (k = 0; k < z; k++) {
T = T0 + A * ((ymax / y) * j);
rho[i][j][k] = rho0 * pow((T / T0), ....
(-grav_acc / (gasconstant * A) + 1));
pre[i][j][k] = pre0 * pow((T / T0), ....
(-grav_acc / (gasconstant * A)));
vx[i][j][k] = velo_x;
vy[i][j][k] = velo_y;
vz[i][j][k] = velo_z;
}
}
}
}
If one needs a homogeneous atmosphere one needs to switch in the Parameterfile the Stratified Atmosphere to 0.
if (strat_const_atmos == 0) {
for (i = 0; i < x; i++) {
for (j = 0; j < y; j++) {
for (k = 0; k < z; k++) {
rho[i][j][k] = 1.2;
pre[i][j][k] = 300 * gasconstant * rho[i][j][k];
vx[i][j][k] = velo_x;
vy[i][j][k] = velo_y;
vz[i][j][k] = velo_z;
}
}
}
}
return 0;
}
Assuming your simulation should include an obstacle build by TYCHO you have to define the shape, density and temperature in the initiate_domain function. An example for a 2D circle-like obstacle is given in the file make_ic.c. The obtacle_density and obstacle_temperature constants are specified within the Parameterfile.
/*!
The form of the obstacle is defined in this function
example of just a round thing.
*/
int initiate_domain(int x, int y, int z) {
int i, j, k;
for (i = 0; i < x; i++) {
for (j = 0; j < y; j++) {
for (k = 0; k < z; k++) {
int i2 = i - x / 2.0;
int j2 = j - y / 2.0;
int xy = sqrt(i2 * i2 + j2 * j2);
if (xy < x / 20) {
dom[i][j][k] = 1;
rho[i][j][k] = obstacle_density;
pre[i][j][k] = obstacle_temperature;
vx[i][j][k] = 0.0;
vy[i][j][k] = 0.0;
vz[i][j][k] = 0.0;
} else {
dom[i][j][k] = 0;
}
}
}
}
printf("Initiate domain done\n");
return 0;
}
To summarize, defining your own ICs in the make_ic-function requires full specification of the five 3-dimensional arrays rho, pre, vx, vy, vz. If 2 dimensional simulations are needed, then just assign 1 to the index k. Remember that this code strictly uses SI-units. Consequently a 1D simulation needs x=1, y=1 and z=1.