本文整理汇总了C++中SolutionPtr::ip方法的典型用法代码示例。如果您正苦于以下问题:C++ SolutionPtr::ip方法的具体用法?C++ SolutionPtr::ip怎么用?C++ SolutionPtr::ip使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SolutionPtr
的用法示例。
在下文中一共展示了SolutionPtr::ip方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
//.........这里部分代码省略.........
problems[0].bf()->graphNorm(),
minLogElements, maxLogElements,
H1Order, pToAdd, false, useTriangles, false);
study.setReportRelativeErrors(computeRelativeErrors);
study.setCubatureDegreeForExact(kovasznayCubatureEnrichment);
vector< SolutionPtr > solutions;
numCells1D = pow(2.0,minLogElements);
for (vector< VGPNavierStokesProblem >::iterator problem = problems.begin();
problem != problems.end(); problem++)
{
SolutionPtr solnIncrement = problem->solutionIncrement();
FunctionPtr u1_incr = Function::solution(u1_vgp, solnIncrement);
FunctionPtr u2_incr = Function::solution(u2_vgp, solnIncrement);
FunctionPtr sigma11_incr = Function::solution(sigma11_vgp, solnIncrement);
FunctionPtr sigma12_incr = Function::solution(sigma12_vgp, solnIncrement);
FunctionPtr sigma21_incr = Function::solution(sigma21_vgp, solnIncrement);
FunctionPtr sigma22_incr = Function::solution(sigma22_vgp, solnIncrement);
FunctionPtr p_incr = Function::solution(p_vgp, solnIncrement);
// LinearTermPtr rhsLT = problem->backgroundFlow()->rhs()->linearTerm();
// if (rank==0) cout << "bilinearForm: " << problems[0].mesh()->bilinearForm()->displayString() << endl;
// if (rank==0) cout << "RHS: " << rhsLT->displayString() << endl;
FunctionPtr l2_incr = u1_incr * u1_incr + u2_incr * u2_incr + p_incr * p_incr
+ sigma11_incr * sigma11_incr + sigma12_incr * sigma12_incr
+ sigma21_incr * sigma21_incr + sigma22_incr * sigma22_incr;
double weight = 1.0;
do
{
weight = problem->iterate(useLineSearch, useCondensedSolve);
LinearTermPtr rhsLT = problem->backgroundFlow()->rhs()->linearTerm();
RieszRep rieszRep(problem->backgroundFlow()->mesh(), problem->backgroundFlow()->ip(), rhsLT);
rieszRep.computeRieszRep();
double costFunction = rieszRep.getNorm();
double incr_norm = sqrt(l2_incr->integrate(problem->mesh()));
if (rank==0)
{
cout << setprecision(6) << scientific;
cout << "\x1B[2K"; // Erase the entire current line.
cout << "\x1B[0E"; // Move to the beginning of the current line.
cout << "Iteration: " << problem->iterationCount() << "; L^2(incr) = " << incr_norm;
flush(cout);
// cout << setprecision(6) << scientific;
// cout << "Took " << weight << "-weighted step for " << numCells1D;
// cout << " x " << numCells1D << " mesh: " << problem->iterationCount();
// cout << setprecision(6) << fixed;
// cout << " iterations; cost function " << costFunction << endl;
}
}
while ((sqrt(l2_incr->integrate(problem->mesh())) > minL2Increment ) && (problem->iterationCount() < maxIters) && (weight != 0));
if (rank==0) cout << endl;
solutions.push_back( problem->backgroundFlow() );
// set the IP to the naive norm for clearer comparison with the best approximation energy error
// problem->backgroundFlow()->setIP(problem->bf()->naiveNorm());
// double energyError = problem->backgroundFlow()->energyErrorTotal();
// if (rank==0) {
// cout << setprecision(6) << fixed;
// cout << numCells1D << " x " << numCells1D << ": " << problem->iterationCount();
// cout << " iterations; actual energy error " << energyError << endl;