bool NonlinearDriver::solutionNorms (const TimeDomain& time, double zero_tol, std::streamsize outPrec) { if (msgLevel < 0 || solution.empty()) return true; const size_t nsd = model.getNoSpaceDim(); size_t iMax[nsd]; double dMax[nsd]; double normL2 = model.solutionNorms(solution.front(),dMax,iMax); RealArray RF; bool haveReac = model.getCurrentReactions(RF,solution.front()); Vectors gNorm; if (calcEn) { model.setMode(SIM::RECOVERY); model.setQuadratureRule(opt.nGauss[1]); if (!model.solutionNorms(time,solution,gNorm)) gNorm.clear(); } if (myPid > 0) return true; std::streamsize stdPrec = outPrec > 0 ? IFEM::cout.precision(outPrec) : 0; double old_tol = utl::zero_print_tol; utl::zero_print_tol = zero_tol; IFEM::cout <<" Primary solution summary: L2-norm : " << utl::trunc(normL2); for (unsigned char d = 0; d < nsd; d++) if (utl::trunc(dMax[d]) != 0.0) IFEM::cout <<"\n Max "<< char('X'+d) <<"-displacement : "<< dMax[d] <<" node "<< iMax[d]; if (haveReac) { IFEM::cout <<"\n Total reaction forces: Sum(R) ="; for (size_t i = 1; i < RF.size(); i++) IFEM::cout <<" "<< utl::trunc(RF[i]); if (utl::trunc(RF.front()) != 0.0) IFEM::cout <<"\n displacement*reactions: (R,u) = "<< RF.front(); } if (!gNorm.empty()) this->printNorms(gNorm.front(),IFEM::cout); IFEM::cout << std::endl; utl::zero_print_tol = old_tol; if (stdPrec > 0) IFEM::cout.precision(stdPrec); return true; }
void __stdcall ClearVectors() { for (Vectors::size_type i = 0; i < vectors.size(); ++i) delete[] vectors[i]; vectors.clear(); }