diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.H b/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.H index c89d8dc6c9..04cc2a83ca 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.H +++ b/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.H @@ -29,6 +29,36 @@ Description Basic sub-grid obstacle flame-wrinking enhancement factor model. Details supplied by J Puttock 2/7/06. + Sub-grid flame area generation + + \f$ n = N - \hat{\dwea{\vec{U}}}.n_{s}.\hat{\dwea{\vec{U}}} \f$ + \f$ n_{r} = \sqrt{n} \f$ + + where: + + \f$ \hat{\dwea{\vec{U}}} = \dwea{\vec{U}} / \vert \dwea{\vec{U}} + \vert \f$ + + \f$ b = \hat{\dwea{\vec{U}}}.B.\hat{\dwea{\vec{U}}} / n_{r} \f$ + + where: + + \f$ B \f$ is the file "B". + + \f$ N \f$ is the file "N". + + \f$ n_{s} \f$ is the file "ns". + + The flame area enhancement factor \f$ \Xi_{sub} \f$ is expected to + approach: + + \f[ + \Xi_{{sub}_{eq}} = + 1 + max(2.2 \sqrt{b}, min(0.34 \frac{\vert \dwea{\vec{U}} + \vert}{{\vec{U}}^{'}}, 1.6)) \times min(\frac{n}{4}, 1) + \f] + + SourceFiles basicSubGrid.C diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.H b/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.H index 01a6d7cb11..a455fd28b4 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.H +++ b/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.H @@ -25,10 +25,28 @@ License Class basicSubGrid + Description + Basic sub-grid obstacle flame-wrinking generation rate coefficient model. Details supplied by J Puttock 2/7/06. + \f$ G_{sub} \f$ denotes the generation coefficient and it is given by + + \f[ + G_{sub} = k_{1} /frac{\vert \dwea{\vec{U}} \vert}{L_{obs}} + \frac{/Xi_{{sub}_{eq}}-1}{/Xi_{sub}} + \f] + + and the removal: + + \f[ - k_{1} /frac{\vert \dwea{\vec{U}} \vert}{L_{sub}} + \frac{\Xi_{sub}-1}{\Xi_{sub}} \f] + + Finally, \f$ G_{sub} \f$ is added to generation rate \f$ G_{in} \f$ + due to the turbulence. + + SourceFiles basicSubGrid.C diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.H b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.H index ceb75ff827..05ec433919 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.H +++ b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.H @@ -29,6 +29,50 @@ Description Basic sub-grid obstacle drag model. Details supplied by J Puttock 2/7/06. + Sub-grid drag term + + The resistance term (force per unit of volume) is given by: + + \f[ + R = -\frac{1}{2} \rho \vert \dwea{\vec{U}} \vert \dwea{\vec{U}}.D + \f] + + where: + + \f$ D \f$ is the tensor field "CR" in \f$ m^{-1} \f$ + + This is term is treated implicitly in UEqn.H + + Sub-grid turbulence generation + + The turbulence source term \f$ G_{R} \f$ occurring in the + \f$ \kappa-\epsilon \f$ equations for the generation of turbulence due + to interaction with unresolved obstacles : + + \f$ G_{R} = C_{s}\beta_{\nu} + \mu_{eff} A_{w}^{2}(\dwea{\vec{U}}-\dwea{\vec{U}_{s}})^2 + \frac{1}{2} + \rho \vert \dwea{\vec{U}} \vert \dwea{\vec{U}}.T.\dwea{\vec{U}} \f$ + + where: + + \f$ C_{s} \f$ = 1 + + \f$ \beta_{\nu} \f$ is the volume porosity (file "betav"). + + \f$ \mu_{eff} \f$ is the effective viscosity. + + \f$ A_{w}^{2}\f$ is the obstacle surface area per unit of volume + (file "Aw"). + + \f$ \dwea{\vec{U}_{s}} \f$ is the slip velocity and is considered + \f$ \frac{1}{2}. \dwea{\vec{U}} \f$. + + \f$ T \f$ is a tensor in the file CT. + + The term \f$ G_{R} \f$ is treated explicitly in the \f$ \kappa-\epsilon + \f$ Eqs in the PDRkEpsilon.C file. + + SourceFiles basic.C @@ -40,7 +84,6 @@ SourceFiles #include "PDRDragModel.H" #include "XiEqModel.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.H b/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.H index 15d52e7269..b35ef9151e 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.H +++ b/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.H @@ -26,7 +26,17 @@ Class PDRkEpsilon Description - Standard k-epsilon turbulence model. + Standard k-epsilon turbulence model with additional source terms + corresponding to PDR basic drag model (basic.H) + + The turbulence source term \f$ G_{R} \f$ appears in the + \f$ \kappa-\epsilon \f$ equation for the generation of turbulence due to + interaction with unresolved obstacles. + + In the \f$ \epsilon \f$ equation \f$ C_{1} G_{R} \f$ is added as a source + term. + + In the \f$ \kappa \f$ equation \f$ G_{R} \f$ is added as a source term. SourceFiles PDRkEpsilon.C diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiModel/XiModel.H b/applications/solvers/combustion/PDRFoam/XiModels/XiModel/XiModel.H index 13fa58a53e..2b76f9bc92 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiModel/XiModel.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiModel/XiModel.H @@ -27,6 +27,57 @@ Class Description Base-class for all Xi models used by the b-Xi combustion model. + See Technical Report SH/RE/01R for details on the PDR modelling. + + Xi is given through an algebraic expression (algebraic.H), + by solving a transport equation (transport.H) or a fixed value (fixed.H). + See report TR/HGW/10 for details on the Weller two equations model. + + In the algebraic and transport methods \f$\Xi_{eq}\f$ is calculated in + similar way. In the algebraic approach, \f$\Xi_{eq}\f$ is the value used in + the \f$ b \f$ transport equation. + + \f$\Xi_{eq}\f$ is calculated as follows: + + \f$\Xi_{eq} = 1 + (1 + 2\Xi_{coeff}(0.5 - \dwea{b}))(\Xi^* - 1)\f$ + + where: + + \f$ \dwea{b} \f$ is the regress variable. + + \f$ \Xi^* \f$ is the total equilibrium wrinkling combining the effects + of the flame inestability and turbulence interaction and is given by + + \f[ + \Xi^* = \frac {R}{R - G_\eta - G_{in}} + \f] + + where: + + \f$ G_\eta \f$ is the generation rate of wrinkling due to turbulence + interaction. + + \f$ G_{in} = \kappa \rho_{u}/\rho_{b} \f$ is the generation + rate due to the flame inestability. + + By adding the removal rates of the two effects: + + \f[ + R = G_\eta \frac{\Xi_{\eta_{eq}}}{\Xi_{\eta_{eq}} - 1} + + G_{in} \frac{\Xi_{{in}_{eq}}}{\Xi_{{in}_{eq}} - 1} + \f] + + where: + + \f$ R \f$ is the total removal. + + \f$ G_\eta \f$ is a model constant. + + \f$ \Xi_{\eta_{eq}} \f$ is the flame wrinkling due to turbulence. + + \f$ \Xi_{{in}_{eq}} \f$ is the equilibrium level of the flame wrinkling + generated by inestability. It is a constant (default 2.5). + SourceFiles XiModel.C @@ -51,6 +102,8 @@ namespace Foam Class XiModel Declaration \*---------------------------------------------------------------------------*/ + + class XiModel { diff --git a/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.H b/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.H index e837fefa8b..8c65453b94 100644 --- a/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.H +++ b/applications/solvers/combustion/PDRFoam/laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.H @@ -28,6 +28,33 @@ Class Description Laminar flame speed obtained from the SCOPE correlation. + Seven parameters are specified in terms of polynomial functions of + stoichiometry. Two polynomials are fitted, covering different parts of the + flammable range. If the mixture is outside the fitted range, linear + interpolation is used between the extreme of the polynomio and the upper or + lower flammable limit with the Markstein number constant. + + Variations of pressure and temperature from the reference values are taken + into account through \f$ pexp \f$ and \f$ texp \f$ + + The laminar burning velocity fitting polynomial is: + + \f$ Su = a_{0}(1+a_{1}x+K+..a_{i}x^{i}..+a_{6}x^{6}) (p/p_{ref})^{pexp} + (T/T_{ref})^{texp} \f$ + + where: + + \f$ a_{i} \f$ are the polinomial coefficients. + + \f$ pexp \f$ and \f$ texp \f$ are the pressure and temperature factors + respectively. + + \f$ x \f$ is the equivalence ratio. + + \f$ T_{ref} \f$ and \f$ p_{ref} \f$ are the temperature and pressure + references for the laminar burning velocity. + + SourceFiles SCOPELaminarFlameSpeed.C @@ -125,7 +152,7 @@ class SCOPE // corrected for temperature and pressure dependence inline scalar Su0pTphi(scalar p, scalar Tu, scalar phi) const; - //- Laminar flame speed evaluated from the given uniform + //- Laminar flame speed evaluated from the given uniform // equivalence ratio corrected for temperature and pressure dependence tmp Su0pTphi ( @@ -134,7 +161,7 @@ class SCOPE scalar phi ) const; - //- Laminar flame speed evaluated from the given equivalence ratio + //- Laminar flame speed evaluated from the given equivalence ratio // distribution corrected for temperature and pressure dependence tmp Su0pTphi ( @@ -144,7 +171,7 @@ class SCOPE ) const; //- Return the Markstein number - // evaluated from the given equivalence ratio + // evaluated from the given equivalence ratio tmp Ma(const volScalarField& phi) const; //- Construct as copy (not implemented) diff --git a/applications/test/DynamicList/DynamicListTest.C b/applications/test/DynamicList/DynamicListTest.C index 6cdbb84890..28960444a2 100644 --- a/applications/test/DynamicList/DynamicListTest.C +++ b/applications/test/DynamicList/DynamicListTest.C @@ -43,16 +43,21 @@ int main(int argc, char *argv[]) ldl[0](3) = 3; ldl[0](1) = 1; - ldl[0].setSize(5); // increase allocated size - ldl[1].setSize(10); // increase allocated size - ldl[1](2) = 2; + ldl[0].setCapacity(5); // increase allocated size + ldl[1].setCapacity(10); // increase allocated size + ldl[0].reserve(15); // should increase allocated size + ldl[1].reserve(5); // should not decrease allocated size + ldl[1](3) = 2; // allocates space and sets value + + // this works without a segfault, but doesn't change the list size + ldl[0][4] = 4; ldl[1] = 3; Info<< "" << ldl << "" << nl << "sizes: "; forAll(ldl, i) { - Info<< " " << ldl[i].size() << "/" << ldl[i].allocSize(); + Info<< " " << ldl[i].size() << "/" << ldl[i].capacity(); } Info<< endl; @@ -63,7 +68,7 @@ int main(int argc, char *argv[]) Info<< "" << ldl << "" << nl << "sizes: "; forAll(ldl, i) { - Info<< " " << ldl[i].size() << "/" << ldl[i].allocSize(); + Info<< " " << ldl[i].size() << "/" << ldl[i].capacity(); } Info<< endl; @@ -78,10 +83,10 @@ int main(int argc, char *argv[]) { dlA.append(i); } - dlA.setSize(10); + dlA.setCapacity(10); Info<< "" << dlA << "" << nl << "sizes: " - << " " << dlA.size() << "/" << dlA.allocSize() << endl; + << " " << dlA.size() << "/" << dlA.capacity() << endl; dlB.transfer(dlA); @@ -91,10 +96,54 @@ int main(int argc, char *argv[]) Info<< "Transferred to dlB" << endl; Info<< "" << dlA << "" << nl << "sizes: " - << " " << dlA.size() << "/" << dlA.allocSize() << endl; + << " " << dlA.size() << "/" << dlA.capacity() << endl; Info<< "" << dlB << "" << nl << "sizes: " - << " " << dlB.size() << "/" << dlB.allocSize() << endl; + << " " << dlB.size() << "/" << dlB.capacity() << endl; + // try with a normal list: + List