然后又去pimpleFoam跑了一下,代码改成这样的:
momentumSource
{
type vectorCodedSource;
active yes;
name sourceTime;
vectorCodedSourceCoeffs
{
selectionMode all;
// cellZone pZone;
fields (U);
codeInclude
#{
#};
codeCorrect
#{
// Pout<< "**codeCorrect**" << endl;
#};
codeAddSup
#{
// Pout<< "**codeAddSup**" << endl;
// const vectorField& C = mesh_.C();
const scalarField& V = mesh_.V();
vectorField& Usource = eqn.source();
const vectorField& U = mesh().lookupObject<volVectorField>("U");
// const scalarField& Rho = mesh().lookupObject<volScalarField>("rho");
const scalarField& nu = mesh().lookupObject<volScalarField>("nu");
// const scalarField& magU = mag(U);
scalar A = 1e2;
scalar B = 1e2;
// vector C(0,1e4,0);
forAll(V,i)
{
const scalar x = mesh_.C()[i][0];
const scalar y = mesh_.C()[i][1];
if(x < 0.5 && x > 0 && y < 0.5 && y > 0.45)
{
Usource[i] += (1e-5 * A + mag(U[i])* B * 0.5 ) * U[i]* V[i];
// Usource = (A * U[i] + B * mag(U[i]) * U[i]) * V[i];
// Usource[i] += - C * V[i];
}
}
// Info << "***codeAddSup***" << nl;
#};
codeSetValue
#{
// Pout<< "**codeSetValue**" << endl;
#};
// Dummy entry. Make dependent on above to trigger recompilation
code
#{
$codeInclude
$codeCorrect
$codeAddSup
$codeSetValue
#};
}
sourceTimeCoeffs
{
$vectorCodedSourceCoeffs;
}
}
跑完的速度场是这样:
pimple.gif
就完全处于A和B只能在1e2这个数量级,但凡再大一点就直接浮点溢出了。。。完全不知道是咋回事。。