然后又去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这个数量级,但凡再大一点就直接浮点溢出了。。。完全不知道是咋回事。。