Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "kShellIntegration.H"
00027 #include <OpenFOAM/mathematicalConstants.H>
00028
00029
00030
00031 Foam::graph Foam::kShellIntegration
00032 (
00033 const complexVectorField& Ek,
00034 const Kmesh& K
00035 )
00036 {
00037
00038
00039
00040 graph kShellMeanEk = kShellMean(Ek, K);
00041 const scalarField& x = kShellMeanEk.x();
00042 scalarField& y = *kShellMeanEk.begin()();
00043
00044
00045
00046
00047
00048 y *= sqr(x)*4.0*mathematicalConstant::pi;
00049
00050
00051
00052 scalar l0(K.sizeOfBox()[0]*(scalar(K.nn()[0])/(scalar(K.nn()[0])-1.0)));
00053 scalar factor = pow((l0/(2.0*mathematicalConstant::pi)),3.0);
00054
00055 y *= factor;
00056
00057
00058
00059
00060 y /= scalar(K.size());
00061
00062 return kShellMeanEk;
00063 }
00064
00065
00066
00067
00068
00069 Foam::graph Foam::kShellMean
00070 (
00071 const complexVectorField& Ek,
00072 const Kmesh& K
00073 )
00074 {
00075 const label tnp = Ek.size();
00076 const label NoSubintervals = label
00077 (
00078 pow(scalar(tnp), 1.0/vector::dim)*pow(1.0/vector::dim, 0.5) - 0.5
00079 );
00080
00081 scalarField k1D(NoSubintervals);
00082 scalarField Ek1D(NoSubintervals);
00083 scalarField EWeight(NoSubintervals);
00084
00085 scalar kmax = K.max()*pow(1.0/vector::dim,0.5);
00086 scalar delta_k = kmax/(NoSubintervals);
00087
00088 forAll(Ek1D, a)
00089 {
00090 k1D[a] = (a + 1)*delta_k;
00091 Ek1D[a] = 0.0;
00092 EWeight[a] = 0;
00093 }
00094
00095 forAll(K, l)
00096 {
00097 scalar kmag = mag(K[l]);
00098
00099 for (label a=0; a<NoSubintervals; a++)
00100 {
00101 if
00102 (
00103 kmag <= ((a + 1)*delta_k + delta_k/2.0)
00104 && kmag > ((a + 1)*delta_k - delta_k/2.0)
00105 )
00106 {
00107 scalar dist = delta_k/2.0 - mag((a + 1)*delta_k - kmag);
00108
00109 Ek1D[a] += dist*
00110 magSqr
00111 (
00112 vector
00113 (
00114 mag(Ek[l].x()),
00115 mag(Ek[l].y()),
00116 mag(Ek[l].z())
00117 )
00118 );
00119
00120 EWeight[a] += dist;
00121 }
00122 }
00123 }
00124
00125 for (label a=0; a<NoSubintervals; a++)
00126 {
00127 if (EWeight[a] > 0)
00128 {
00129 Ek1D[a] /= EWeight[a];
00130 }
00131 }
00132
00133 return graph("E(k)", "k", "E(k)", k1D, Ek1D);
00134 }
00135
00136
00137