1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
| /**
# Coupling interface for Grains3D and Basilisk
*/
#include "Grains_BuilderFactory.H"
#include "InterfaceGrains.h"
#ifdef __cplusplus
extern "C" {
#endif
static GrainsCoupledWithFluid * grains = NULL;
void Init_Grains (double fluid_density, const bool b_restart,
const bool b_initializeClonePer,
const double grid_size,
const bool is_solidsolver_parallel,
const int my_rank, const int nb_procs) {
string simulation_file = "Grains/simul.xml";
ReaderXML::initialize();
string simulation_file_exe = Grains_BuilderFactory::init (simulation_file, my_rank, is_solidsolver_parallel ? nb_procs : 1);
DOMElement* rootNode = ReaderXML::getRoot (simulation_file_exe);
// cout << "simulation_file_exe=:"<< simulation_file_exe <<endl;
// cout << "rootNode: " << rootNode << " on pid()= " << my_rank << endl;
grains = Grains_BuilderFactory::createCoupledWithFluid (rootNode, fluid_density, grid_size);
// cout << "grain = Grains_BuilderFactory:" << grains << "pid()=" << my_rank << endl;
if ( b_restart ) grains->setReloadSame();
grains->Construction (rootNode);
// cout << "grain->Construction ok" << "on pid()= " << my_rank << endl;
grains->Forces (rootNode);
// cout << "grain->Forces ok" << "on pid()= " << my_rank << endl;
grains->Chargement (rootNode);
// cout << "grain->Chargement ok " << "on pid()= " << my_rank << endl;
if ( b_initializeClonePer ) grains->initializeClonesPeriodiques();
ReaderXML::terminate();
cout << "Construction of Grains completed" << endl;
}
void Simu_Grains (const bool predictor, const bool isPredictorCorrector, const bool explicit_added_mass) {
grains->Simulation (predictor, isPredictorCorrector, explicit_added_mass);
}
void Data_GrainsToCstruct (struct BasiliskDataStructure * b, const int m) {
grains->WriteParticulesInFluid (b);
}
void Data_CstructToGrains (struct BasiliskDataStructure * b) {};
void Setdt_Grains (double const dtfluid) {
grains->set_timeStep (dtfluid);
}
void Setdt_AddedMassGrains (double dtfluid) {
grains->set_ExplicitAddedMasstimeStep (dtfluid);
}
void Setviscosity_Grains (double const viscosity) {
grains->setFluidViscosity (viscosity);
}
void SaveResults_Grains (const int counter, int * restarted_simu) {
int cc = counter ;
if ((cc == 0) || (*restarted_simu)) {
if (*restarted_simu)
cc--;
grains->setInitialCycleNumber (cc);
grains->InitialPostProcessing();
*restarted_simu = 0;
}
else
grains->doPostProcessing();
}
/* Check that Paraview writer is activated
------------------------------------------*/
void checkParaviewPostProcessing_Grains (char * solid_resDir ) {
grains->checkParaviewPostProcessing ("grains", solid_resDir, true);
}
void Update_Velocity_Grains (struct BasiliskDataStructure * b, bool explicit_added_mass) {
grains->UpdateParticulesVelocities (b, explicit_added_mass);
}
void ActivateExplicitAddedMass (bool restart) {
grains->AddExplicitAddedMass( restart, "" );
}
void InitializeExplicitAddedMass (bool restart, char * solid_resDir) {
grains->InitializeExplicitAddedMassRestart (restart, solid_resDir);
}
#ifdef __cplusplus
}
#endif
|