2013-12-11 20:50:21 -05:00
|
|
|
#include <iostream>
|
|
|
|
|
#include <math.h>
|
2015-02-18 14:41:23 -05:00
|
|
|
|
2018-02-10 20:13:57 -05:00
|
|
|
#include "analysis/TwoPhase.h"
|
2015-02-18 14:41:23 -05:00
|
|
|
#include "common/MPI_Helpers.h"
|
2015-08-21 16:56:43 -04:00
|
|
|
#include "common/Communication.h"
|
2015-02-18 14:41:23 -05:00
|
|
|
#include "IO/Mesh.h"
|
|
|
|
|
#include "IO/Writer.h"
|
|
|
|
|
#include "ProfilerApp.h"
|
2013-12-11 20:50:21 -05:00
|
|
|
|
|
|
|
|
#define RADIUS 15
|
|
|
|
|
#define CAPRAD 20
|
|
|
|
|
#define HEIGHT 15.5
|
|
|
|
|
#define N 60
|
2014-01-27 11:43:24 -05:00
|
|
|
#define SPEED -1
|
2013-12-11 20:50:21 -05:00
|
|
|
#define PI 3.14159
|
|
|
|
|
|
|
|
|
|
int main (int argc, char *argv[])
|
|
|
|
|
{
|
2015-02-18 14:41:23 -05:00
|
|
|
// Initialize MPI
|
|
|
|
|
int rank,nprocs;
|
|
|
|
|
MPI_Init(&argc,&argv);
|
2015-09-04 13:06:36 -04:00
|
|
|
MPI_Comm comm = MPI_COMM_WORLD;
|
|
|
|
|
MPI_Comm_rank(comm,&rank);
|
|
|
|
|
MPI_Comm_size(comm,&nprocs);
|
2015-02-18 14:41:23 -05:00
|
|
|
|
|
|
|
|
int i,j,k,n;
|
2018-05-15 16:03:29 -04:00
|
|
|
|
|
|
|
|
// Load inputs
|
2018-05-15 15:00:26 -04:00
|
|
|
string FILENAME = argv[1];
|
2018-05-15 15:06:28 -04:00
|
|
|
// Load inputs
|
|
|
|
|
if (rank==0) printf("Loading input database \n");
|
2018-05-15 16:19:11 -04:00
|
|
|
auto db = std::make_shared<Database>( FILENAME );
|
|
|
|
|
auto domain_db = db->getDatabase( "Domain" );
|
2018-05-15 15:06:28 -04:00
|
|
|
int Nx = domain_db->getVector<int>( "n" )[0];
|
|
|
|
|
int Ny = domain_db->getVector<int>( "n" )[1];
|
|
|
|
|
int Nz = domain_db->getVector<int>( "n" )[2];
|
2015-02-18 14:41:23 -05:00
|
|
|
|
2018-05-19 07:49:32 -04:00
|
|
|
std::shared_ptr<Domain> Dm(new Domain(domain_db,comm));
|
2018-05-15 16:11:35 -04:00
|
|
|
|
2018-05-17 21:09:54 -04:00
|
|
|
for (i=0; i<Dm->Nx*Dm->Ny*Dm->Nz; i++) Dm->id[i] = 1;
|
2015-02-18 14:41:23 -05:00
|
|
|
|
2018-05-19 07:49:32 -04:00
|
|
|
Dm->CommInit();
|
2015-02-18 14:41:23 -05:00
|
|
|
|
2018-05-17 21:09:54 -04:00
|
|
|
std::shared_ptr<TwoPhase> Averages(new TwoPhase(Dm));
|
2015-02-18 14:41:23 -05:00
|
|
|
int timestep=0;
|
|
|
|
|
|
2013-12-11 20:50:21 -05:00
|
|
|
double Cx,Cy,Cz;
|
|
|
|
|
double dist1,dist2;
|
2015-02-18 14:41:23 -05:00
|
|
|
|
2013-12-11 20:50:21 -05:00
|
|
|
Cx = Cy = Cz = N*0.5;
|
|
|
|
|
for (k=0; k<Nz; k++){
|
|
|
|
|
for (j=0; j<Ny; j++){
|
|
|
|
|
for (i=0; i<Nx; i++){
|
|
|
|
|
dist2 = sqrt((i-Cx)*(i-Cx)+(j-Cy)*(j-Cy)+(k-Cz)*(k-Cz)) - CAPRAD;
|
|
|
|
|
dist2 = fabs(Cz-k)-HEIGHT;
|
|
|
|
|
|
2018-05-17 21:09:54 -04:00
|
|
|
Averages->Phase_tminus(i,j,k) = dist2;
|
2013-12-11 20:50:21 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Cz += SPEED;
|
|
|
|
|
for (k=0; k<Nz; k++){
|
|
|
|
|
for (j=0; j<Ny; j++){
|
|
|
|
|
for (i=0; i<Nx; i++){
|
|
|
|
|
|
|
|
|
|
dist1 = sqrt((i-Cx)*(i-Cx)+(j-Cy)*(j-Cy)) - RADIUS;
|
|
|
|
|
dist2 = sqrt((i-Cx)*(i-Cx)+(j-Cy)*(j-Cy)+(k-Cz)*(k-Cz)) - CAPRAD;
|
|
|
|
|
dist2 = fabs(Cz-k)-HEIGHT;
|
|
|
|
|
|
2018-05-17 21:09:54 -04:00
|
|
|
Averages->SDs(i,j,k) = -dist1;
|
|
|
|
|
Averages->Phase(i,j,k) = dist2;
|
|
|
|
|
Averages->SDn(i,j,k) = dist2;
|
2013-12-11 20:50:21 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Cz += SPEED;
|
|
|
|
|
for (k=0; k<Nz; k++){
|
|
|
|
|
for (j=0; j<Ny; j++){
|
|
|
|
|
for (i=0; i<Nx; i++){
|
|
|
|
|
dist2 = sqrt((i-Cx)*(i-Cx)+(j-Cy)*(j-Cy)+(k-Cz)*(k-Cz)) - CAPRAD;
|
|
|
|
|
dist2 = fabs(Cz-k)-HEIGHT;
|
|
|
|
|
|
2018-05-17 21:09:54 -04:00
|
|
|
Averages->Phase_tplus(i,j,k) = dist2;
|
2013-12-11 20:50:21 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//...........................................................................
|
2015-02-18 14:41:23 -05:00
|
|
|
|
|
|
|
|
//....................................................................
|
|
|
|
|
// The following only need to be done once
|
2018-05-17 21:09:54 -04:00
|
|
|
//Averages->SetupCubes(Dm);
|
|
|
|
|
Averages->UpdateSolid(); // unless the solid is deformable!
|
2015-02-18 14:41:23 -05:00
|
|
|
//....................................................................
|
|
|
|
|
// The following need to be called each time new averages are computed
|
2018-05-17 21:09:54 -04:00
|
|
|
Averages->Initialize();
|
|
|
|
|
Averages->UpdateMeshValues();
|
|
|
|
|
Averages->ComputeLocal();
|
|
|
|
|
Averages->Reduce();
|
|
|
|
|
Averages->PrintAll(timestep);
|
2015-02-18 14:41:23 -05:00
|
|
|
//....................................................................
|
2013-12-16 12:04:24 -05:00
|
|
|
|
2013-12-11 20:50:21 -05:00
|
|
|
printf("-------------------------------- \n");
|
2018-05-17 21:09:54 -04:00
|
|
|
printf("NWP volume = %f \n", Averages->nwp_volume);
|
|
|
|
|
printf("Area wn = %f, Analytical = %f \n", Averages->awn,2*PI*RADIUS*RADIUS);
|
|
|
|
|
printf("Area ns = %f, Analytical = %f \n", Averages->ans, 2*PI*RADIUS*(Nz-2)-4*PI*RADIUS*HEIGHT);
|
|
|
|
|
printf("Area ws = %f, Analytical = %f \n", Averages->aws, 4*PI*RADIUS*HEIGHT);
|
|
|
|
|
printf("Area s = %f, Analytical = %f \n", Averages->As, 2*PI*RADIUS*(Nz-2));
|
|
|
|
|
printf("Length wns = %f, Analytical = %f \n", Averages->lwns, 4*PI*RADIUS);
|
|
|
|
|
printf("Geodesic curvature (wns) = %f, Analytical = %f \n", Averages->KGwns_global, 0.0);
|
|
|
|
|
printf("Normal curvature (wns) = %f, Analytical = %f \n", Averages->KNwns_global, 1.0/RADIUS);
|
2013-12-16 12:04:24 -05:00
|
|
|
// printf("Cos(theta_wns) = %f, Analytical = %f \n",efawns/lwns,1.0*RADIUS/CAPRAD);
|
2018-05-17 21:09:54 -04:00
|
|
|
printf("Interface Velocity = %f,%f,%f \n",Averages->vawn_global(0),Averages->vawn_global(1),Averages->vawn_global(2));
|
|
|
|
|
printf("Common Curve Velocity = %f,%f,%f \n",Averages->vawns_global(0),Averages->vawns_global(1),Averages->vawns_global(2));
|
2013-12-11 20:50:21 -05:00
|
|
|
printf("-------------------------------- \n");
|
|
|
|
|
//.........................................................................
|
|
|
|
|
|
2014-06-06 08:32:07 -04:00
|
|
|
int toReturn = 0;
|
2018-05-17 21:09:54 -04:00
|
|
|
if (fabs(Averages->awn - 2*PI*RADIUS*RADIUS)/(2*PI*RADIUS*RADIUS) > 0.02){
|
2016-01-08 12:33:00 -05:00
|
|
|
toReturn = 1;
|
|
|
|
|
printf("TestCylinderArea.cpp: error tolerance exceeded for wn area \n");
|
|
|
|
|
}
|
2018-05-17 21:09:54 -04:00
|
|
|
if (fabs(Averages->ans - (2*PI*RADIUS*(Nz-2)-4*PI*RADIUS*HEIGHT))/(2*PI*RADIUS*(Nz-2)-4*PI*RADIUS*HEIGHT)> 0.02 ){
|
2016-01-08 12:33:00 -05:00
|
|
|
toReturn = 2;
|
|
|
|
|
printf("TestCylinderArea.cpp: error tolerance exceeded for ns area \n");
|
|
|
|
|
}
|
2018-05-17 21:09:54 -04:00
|
|
|
if (fabs(Averages->aws - 4*PI*RADIUS*HEIGHT)/(4*PI*RADIUS*HEIGHT) > 0.02 ){
|
2016-01-08 12:33:00 -05:00
|
|
|
toReturn = 3;
|
|
|
|
|
printf("TestCylinderArea.cpp: error tolerance exceeded for ws area \n");
|
|
|
|
|
}
|
2018-05-17 21:09:54 -04:00
|
|
|
if (fabs(Averages->As - 2*PI*RADIUS*(Nz-2))/(2*PI*RADIUS*(Nz-2)) > 0.02 ){
|
2016-01-08 12:33:00 -05:00
|
|
|
toReturn = 4;
|
|
|
|
|
printf("TestCylinderArea.cpp: error tolerance exceeded for solid area \n");
|
|
|
|
|
}
|
2018-05-17 21:09:54 -04:00
|
|
|
if (fabs(Averages->lwns - 4*PI*RADIUS)/(4*PI*RADIUS) > 0.02 ){
|
2016-01-08 12:33:00 -05:00
|
|
|
toReturn = 5;
|
|
|
|
|
printf("TestCylinderArea.cpp: error tolerance exceeded for common curve length \n");
|
|
|
|
|
}
|
2018-05-17 21:09:54 -04:00
|
|
|
if ( fabs(Averages->vawn_global(2)+0.2) > 0.01){
|
2015-02-18 14:46:15 -05:00
|
|
|
printf("TestInterfaceSpeed: Error too high for kinematic velocity of wn interface \n");
|
2016-01-08 12:33:00 -05:00
|
|
|
toReturn = 6;
|
2015-02-18 14:46:15 -05:00
|
|
|
}
|
2018-05-17 21:09:54 -04:00
|
|
|
if ( fabs(Averages->vawns_global(2)+0.2) > 0.01){
|
2015-02-18 14:46:15 -05:00
|
|
|
printf("TestInterfaceSpeed: Error too high for kinematic velocity of common curve \n");
|
2016-01-08 12:33:00 -05:00
|
|
|
toReturn = 7;
|
2015-02-18 14:46:15 -05:00
|
|
|
}
|
|
|
|
|
|
2014-06-06 08:32:07 -04:00
|
|
|
return toReturn;
|
2015-02-18 14:41:23 -05:00
|
|
|
|
|
|
|
|
// ****************************************************
|
2015-09-04 13:06:36 -04:00
|
|
|
MPI_Barrier(comm);
|
2015-02-18 14:41:23 -05:00
|
|
|
return 0;
|
|
|
|
|
MPI_Finalize();
|
|
|
|
|
// ****************************************************
|
2013-12-11 20:50:21 -05:00
|
|
|
}
|