Skip to content

Commit 790c66b

Browse files
committed
Towards the First Release
1 parent ed6cc7f commit 790c66b

15 files changed

+1107
-0
lines changed
357 KB
Loading

Quick Start Manual.docx

17.9 KB
Binary file not shown.

config/characterisation.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
; Characterisation module specifications

database/materials.ini

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
; database of material properties
2+
3+
[fundamental]
4+
Boltzmann_constant= 1.3807E-23
5+
; Boltzmann constant [k_B]
6+
7+
[Al2O3]
8+
; Alumina Ceramics
9+
10+
alumina_density = 3990.0
11+
; Alumina ceramic density [kg/m^3]
12+
13+
; surface energies in [J/m^2]
14+
alumina_gb_energy = 2.0
15+
; Al2O3 matrix-matrix grain boundary energy
16+
17+
alumina_gb_with_rGO_energy = 1.0
18+
; Al2O3 matrix-rGO grain boundary energy
19+
20+
[rGO]
21+
; reduced graphene oxide
22+
23+
rgo_density = 2266.0
24+
; rGO density (graphite density) [kg/m^3]
25+
26+
rGO_agglomeration_energy = 0.4;
27+
; rGO-rGO bound energy inside rGO agglomeration
28+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
///** Algebraic functions calculating Laplacians with their spectra
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
///================================ A part of the PCC Characteriasation module =============================================================///
2+
///=================================================================================================================================///
3+
/** The library calculate indices of k-Cells, k={0,1,2,3} based on their primal and secondary types **/
4+
///==============================================================================================================================///
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*kgc=10.0*powf(10,16);
2+
BurgV=2.56*powf(10,-10);
3+
YStress0=1.3*powf(10,8);
4+
ShStress=46*powf(10,9);
5+
Vc=5.8*powf(10,-8);
6+
Kalf=1.6;
7+
RHOD00=powf(10,12);
8+
9+
dRHODm = DeF*(kgc*BurgV*YStress0 + 0.4*ShStress*BurgV*BurgV*kgc*sqrtf(RHOD) - Vc*(RHODm - RHOD00)*sqrtf(RHODim) - Kalf*(2.0*RHODm + RHODim));
10+
dRHODim = DeF*(Vc*(RHODm - RHOD00)*sqrtf(RHODim) - Kalf*RHODim);
11+
// if (i==0) { dRHODm = HAGBsFunc[i][0]*(kgc*BurgV*YStress0 + 0.4*ShStress*BurgV*BurgV*kgc*sqrtf(RHOD) - Vc*(RHODm - RHOD00)*sqrtf(RHODim) - Kalf*(2.0*RHODm + RHODim));
12+
// dRHODim = HAGBsFunc[i][0]*(Vc*(RHODm - RHOD00)*sqrtf(RHODim) - Kalf*RHODim); }
13+
// else { dRHODm = (HAGBsFunc[i][0]-HAGBsFunc[i-1][0])*(kgc*BurgV*YStress0 + 0.4*ShStress*BurgV*BurgV*kgc*sqrtf(RHOD) - Vc*(RHODm - RHOD00)*sqrtf(RHODim) - Kalf*(2.0*RHODm + RHODim));
14+
// dRHODim = (HAGBsFunc[i][0]-HAGBsFunc[i-1][0])*(Vc*(RHODm - RHOD00)*sqrtf(RHODim) - Kalf*RHODim); }
15+
16+
dRHOD = dRHODm + dRHODim;
17+
RHODm += dRHODm; RHODim += dRHODim; RHOD += dRHOD;
18+
*/

src/lib/PCC_Characterisation/functions/arch/LaplaciansLab.h

Lines changed: 312 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
/*//-------------------------------------------------------------------------------------
2+
//Ji-Jj analyser
3+
//--------------------------------------------------------------------------------------
4+
for (int in = 0; in < Edgenumb; in++)
5+
for (int j = 0; j < 100; j++)
6+
JEdgeNeigh[in][j] = -10;
7+
8+
for(int ih = 0; ih < Edgenumb; ih++) {
9+
knn=0;
10+
//Сначала мы выясняем тип самой грани
11+
J1count=0; JN0Count=0;
12+
for (int lk = 0; lk < Facenumb; lk++) { if(MFE1[lk][ih] == 2) JN0Count++; if(MFE1[lk][ih] >= 1) J1count++; }
13+
if(J1count > 1) JEdgeNeigh[ih][0] = JN0Count;
14+
// {cout<<" il= "<<ih<<" JEdgeNeigh0= "<<JEdgeNeigh[ih][0]<<endl; system("pause");}
15+
//Сначала в 0-ячейку собственный тип ребра //
16+
}
17+
18+
for(int ih = 0; ih < Edgenumb; ih++) {
19+
knn=1;
20+
//Затем проходим всех ее соседей
21+
for (int lmn = 0; lmn < 100; lmn++) {
22+
if(EdgeNeighbours[ih][lmn]>=0) knumb = EdgeNeighbours[ih][lmn];
23+
else knumb=-1;
24+
//------------------------------------------------------
25+
J1count=0; JNCount=0;
26+
if(knumb>=0) { for (int lk = 0; lk < Facenumb; lk++) { if(MFE1[lk][knumb] == 2) JNCount++; if(MFE1[lk][knumb] >= 1) J1count++; }
27+
//-----------------------------------------------------
28+
if(J1count > 1) JEdgeNeigh[ih][knn++] = JNCount;
29+
else JEdgeNeigh[ih][knn+1]=-1; //knn++
30+
31+
} } }
32+
33+
//Вывод в файл JEdgeNeigh.txt
34+
if(i==10) {
35+
JEdgeN.open("C:\\Users\\v94623eb\\Dropbox\\Projects\\Current simmulation\\Voronois\\Voronois\\VAnRes\\(HAGBs)JEdgeNeigh10.txt", ios::trunc);
36+
for (int il = 0; il < Edgenumb; il++) {
37+
for (int jl = 0; jl < 100; jl++) {
38+
if(JEdgeNeigh[il][jl]>=0) JEdgeN << JEdgeNeigh[il][jl] << "\t";
39+
}
40+
JEdgeN <<"Edge number="<<il<<"\n";
41+
}
42+
JEdgeN.close();
43+
}
44+
45+
for (int ip = 0; ip < 10; ip++)
46+
for (int j = 0; j < 10; j++)
47+
JEN[ip][j] = 0;
48+
49+
//Анализ матрицы JEdgeNeigh[i][j]
50+
for (int il = 0; il < Edgenumb; il++) //для каждой грани
51+
for (int nl = 0; nl < 10; nl++) //мы перебираем все варианты какой она может быть
52+
if(JEdgeNeigh[il][0] == nl) for (int mj = 1; mj < 100; mj++) //НАЧАЛО С 1, ЧТОБЫ НЕ УЧИТЫВАТЬ САМУ ГРАНЬ КАК СОСЕДА// и если она оказалась определенного типа, то мы перебираем всех ее соседей
53+
for (int nk = 0; nk < 10; nk++) if(JEdgeNeigh[il][mj] == nk) JEN[nl][nk]++; //так что если сосед оказывается также определенного типа, то мы заносим их связь в матрицу JEN
54+
55+
56+
//Полсчет "мощности" каждого тройного стыка с учетом соседей
57+
for (int il = 0; il < Edgenumb; il++) {
58+
TJpow[il]=0; NEneigh=0; for (int jl = 0; jl < 100; jl++) if(JEdgeNeigh[il][jl]>=0) {TJpow[il]+= JEdgeNeigh[il][jl]; NEneigh++; };
59+
TJpow[il] = TJpow[il]/NEneigh;
60+
//Только ненулевые стыки
61+
TJpow2[il]=0; NEneigh2=0; for (int jl = 0; jl < 100; jl++) if(JEdgeNeigh[il][jl]>=0 && JEdgeNeigh[il][0]>0) {TJpow2[il]+= JEdgeNeigh[il][jl]; NEneigh2++; };
62+
TJpow2[il] = TJpow2[il]/NEneigh2;
63+
}
64+
65+
66+
//Подсчет среднего по комплексу и дисперсии DISPERSION!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67+
//!!!!!!!!!!!!!!!!
68+
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!/
69+
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
70+
NEneighSum=0.0; NEneighAv=0; for (int il = 0; il < Edgenumb; il++) if(TJpow[il]>=0) {NEneighSum += TJpow[il]; NEneighAv++;}
71+
NEneighSum = NEneighSum/NEneighAv;
72+
73+
//Только ненулевые стыки
74+
NEneighSum2=0.0; NEneighAv2=0; for (int il = 0; il < Edgenumb; il++) if(TJpow2[il]>0) {NEneighSum2 += TJpow2[il]; NEneighAv2++;}
75+
NEneighSum2 = NEneighSum2/NEneighAv2;
76+
77+
//Dispersion
78+
SNEneighSum=0.0; NEneighAv=0; for (int il = 0; il < Edgenumb; il++) if(TJpow[il]>=0) {SNEneighSum += (TJpow[il]*TJpow[il]); NEneighAv++;}
79+
SNEneighSum = SNEneighSum/(NEneighAv);
80+
//Только ненулевые стыки
81+
SNEneighSum2=0.0; NEneighAv2=0; for (int il = 0; il < Edgenumb; il++) if(TJpow2[il]>0) {SNEneighSum2 += (TJpow2[il]*TJpow2[il]); NEneighAv2++;}
82+
SNEneighSum2 = SNEneighSum2/(NEneighAv2);
83+
84+
if((SNEneighSum - NEneighSum*NEneighSum) >0) DispNES1 = sqrtl(SNEneighSum - NEneighSum*NEneighSum);
85+
else DispNES1 = sqrtl(-SNEneighSum +NEneighSum*NEneighSum);
86+
if((SNEneighSum2 - NEneighSum2*NEneighSum2) >0) DispNES2 = sqrtl(SNEneighSum2 - NEneighSum2*NEneighSum2);
87+
else DispNES2 = sqrtl(-SNEneighSum2 +NEneighSum2*NEneighSum2);
88+
89+
JEdgeN.open("C:\\Users\\v94623eb\\Dropbox\\Projects\\Current simmulation\\Voronois\\Voronois\\VAnRes\\(HAGBs)TJspow.txt", ios::app);
90+
JEdgeN << HAGBsFunc[i][0]<<"\t"<<25.0*powf(10,6)/(sqrtf(RHOD))<<"\t"<<30.0*powf(10,6)/(HAGBsFunc[i][1]*sqrtf(RHOD))<<"\t"<< 30.0*powf(10,6)*NEneighSum/(NEneighSum2*HAGBsFunc[i][1]*sqrtf(RHOD))<<"\t"<< 3.0*27.0*powf(10,6)/(NEneighSum2*HAGBsFunc[i][1]*sqrtf(RHOD));
91+
92+
// if(NEneighSum2>0) JEdgeN <<HAGBsFunc[i][0]<<"\t"<<NEneighSum<<"\t"<<NEneighSum2<<"\t"<<DispNES1<<"\t"<<DispNES2<<"\t"<<2.2*powl(NEneighSum,(-1.0/1.0))<<"\t"<<2.2*powl(NEneighSum2,(-1.0/1.0)); //<<"\t"<<SNEneighSum<<"\t"<<SNEneighSum2;
93+
// else JEdgeN <<HAGBsFunc[i][0]<<"\t"<<NEneighSum<<"\t"<<0.0;
94+
// JEdgeN <<"Accumulated Strain = "<<HAGBsFunc[i][0]<<"\n";
95+
// JEdgeN<< NEneighSum << "\t";
96+
//Мощность всех узлов
97+
// for(int il = 0; il < Edgenumb; il++) if(TJpow[il]>=0) JEdgeN<<TJpow[il] << "\t";
98+
JEdgeN <<"\n";
99+
JEdgeN.close();
100+
101+
//--------------------------------------------------------------------------------------
102+
103+
//Вывод в файл JEN.txt
104+
JENStream.open("C:\\Users\\v94623eb\\Dropbox\\Projects\\Current simmulation\\Voronois\\Voronois\\VAnRes\\(HAGBs)JEN.txt", ios::app);
105+
JENStream <<AcStrain<<endl;
106+
for (int i = 0; i < 10; i++) {
107+
for (int j = 0; j < 10; j++) if(JEN[i][j]>=0) JENStream << JEN[i][j] << "\t";
108+
// JENStream << JEN[i][j] << "\t";
109+
JENStream <<"\n";
110+
}
111+
// Очевидно, что при таком алгоритме диагональные элементы учитываются дважды, а также считаем число всех элементов и делим потом на него, то есть
112+
SumJEN=0; Jenii=0; Jenij=0;
113+
for (int ic = 0; ic < 10; ic++)
114+
for (int jc = 0; jc < 10; jc++) {SumJEN += 0.5*JEN[ic][jc]; if(ic==jc) Jenii+=0.5*JEN[ic][jc]; else Jenij+=0.5*JEN[ic][jc]; }
115+
//cout<< SumJEN <<endl;
116+
117+
JENStream <<"\n"<<"\n"<<"\n";
118+
JENStream.close();
119+
//***cout<<"(HAGBs)JEN.txt has been created"<<endl;
120+
121+
JENStream.open("C:\\Users\\v94623eb\\Dropbox\\Projects\\Current simmulation\\Voronois\\Voronois\\VAnRes\\(HAGBs)Jlk.txt", ios::app);
122+
// if(i==0) JENStream << "STRAIN" << "\t"<<"ii"<<"\t"<<"ij"<<"\t"<<"00"<<"\t"<<"11"<<"\t"<<"22"<<"\t"<<"33"<<"\t"<<"01"<<"\t"<<"02"<<"\t"<<"03"<<"\t"<<"12"<<"\t"<<"13"<<"\t"<<"23"<<endl;
123+
if(i==0) JENStream << "STRAIN" << "\t"<<"ii"<<"\t"<<"ij"<<"\t"<<endl;
124+
JENStream << HAGBsFunc[i][0]<<"\t"<<Jenii*100.0/SumJEN<<"\t"<< Jenij*100.0/SumJEN;
125+
// JENStream << HAGBsFunc[i][0]<<"\t"<<JEN[0][0] + JEN[1][1] + JEN[2][2] + JEN[3][3] + JEN[4][4]<<"\t"<< JEN[0][1] + JEN[0][2] + JEN[0][3] + JEN[1][2] + JEN[1][3] + JEN[2][3] + JEN[2][4] + JEN[3][4] << "\t"<< JEN[0][0] << "\t"<< JEN[1][1] << "\t"<< JEN[2][2] << "\t"<< JEN[3][3] << "\t"<< JEN[0][1] << "\t"<< JEN[0][2] << "\t"<< JEN[0][3] << "\t"<< JEN[1][2] << "\t"<< JEN[1][3] << "\t"<< JEN[2][3]; // JENStream << HAGBsFunc[i][0]<<"\t"<<JEN[0][0] + JEN[1][1] + JEN[2][2] + JEN[3][3]<<"\t"<< JEN[0][1] + JEN[1][0] + JEN[0][2] + JEN[2][0] + JEN[0][3] + JEN[3][0] + JEN[1][2] + JEN[2][1] + JEN[1][3] + JEN[3][1] + JEN[2][3] + JEN[3][2]<< "\t"<< JEN[0][1] + JEN[1][0]<< "\t"<< JEN[0][2] + JEN[2][0]<< "\t"<< JEN[0][3] + JEN[0][3]<< "\t"<< JEN[1][2] + JEN[2][1]<< "\t"<< JEN[1][3] + JEN[3][1]<< "\t"<< JEN[2][3] + JEN[3][2];
126+
// JENStream << HAGBsFunc[i][0]<<"\t"<<JEN[0][0] + JEN[1][1] + JEN[2][2] + JEN[3][3]<<"\t"<< JEN[0][1] + JEN[0][2] + JEN[0][3] + JEN[1][2] + JEN[1][3] + JEN[2][3] << "\t"<< JEN[0][1] << "\t"<< JEN[0][2] << "\t"<< JEN[0][3] << "\t"<< JEN[1][2] << "\t"<< JEN[1][3] << "\t"<< JEN[2][3]; // JENStream << 0*JEN[0][0] + 2*JEN[1][1] + 4*JEN[2][2] + 6*JEN[3][3]<<"\t"<< JEN[0][1] + JEN[1][0] + 2*JEN[0][2] + 2*JEN[2][0] + 3*JEN[0][3] + 3*JEN[3][0] + 3*JEN[1][2] + 3*JEN[2][1] + 4*JEN[1][3] + 4*JEN[3][1] + 5*JEN[2][3] + 5*JEN[3][2]<< "\t"<< JEN[0][1] + JEN[1][0]<< "\t"<< 2*JEN[0][2] + 2*JEN[2][0]<< "\t"<< 3*JEN[0][3] + 3*JEN[0][3]<< "\t"<< 3*JEN[1][2] + 3*JEN[2][1]<< "\t"<< 4*JEN[1][3] + 4*JEN[3][1]<< "\t"<< 5*JEN[2][3] + 5*JEN[3][2];
127+
JENStream <<"\n";
128+
JENStream.close();
129+
*/

0 commit comments

Comments
 (0)