diff --git a/contrib/MeshOptimizer/MeshOpt.cpp b/contrib/MeshOptimizer/MeshOpt.cpp index 7beba21227f850697a04426d48edb79c8f0706dd..abc73e7b08ba6b1315240954d7f1f91463a7b2a0 100644 --- a/contrib/MeshOptimizer/MeshOpt.cpp +++ b/contrib/MeshOptimizer/MeshOpt.cpp @@ -80,8 +80,6 @@ MeshOpt::MeshOpt(const std::map<MElement*,GEntity*> &element2entity, } _objFunc = &_allObjFunc[0]; if (par.nCurses){ - int nbRow, nbCol; - mvgetScreenSize(nbRow, nbCol); int minCol = 0; for (int i=0; i < _objFunc->names().size(); i++){ if (i > 0) @@ -91,7 +89,9 @@ MeshOpt::MeshOpt(const std::map<MElement*,GEntity*> &element2entity, } minCol = std::max(minCol, 96); int minRow = std::max(34, 34+(int)_objFunc->names().size()-5); - if (nbRow < minRow || nbCol < minCol){ + int nbRow, nbCol; + mvgetScreenSize(nbRow, nbCol); + while (nbRow < minRow || nbCol < minCol){ for (int i=0; i<nbRow; i++){ mvfillRow(i,' '); } @@ -99,11 +99,19 @@ MeshOpt::MeshOpt(const std::map<MElement*,GEntity*> &element2entity, mvprintCenter(firstRow,"Given the number of contributions to the objective function, ncurses"); mvprintCenter(firstRow+1,"enhanced interface requires a terminal window of minimal size"); mvprintCenter(firstRow+2,"%4ix%4i characters. Yours is %4ix%4i, try resizing the window", minRow, minCol, nbRow, nbCol); - mvprintCenter(firstRow+3,"or disabling the ncurses interface."); + mvprintCenter(firstRow+3,"then press SPACE."); mvpause(); - mvterminate(); - Msg::SetCallback(NULL); - Msg::Exit(EXIT_FAILURE); + for (int i=0; i<nbRow; i++){ + mvfillRow(i,' '); + } + mvbold(true); + mvprintCenter(0, "OPTIMIZING MESH"); + mvfillRow(1,'-'); + mvfillRow(10,'-'); + mvfillRow(20,'-'); + mvfillRow(27,'-'); + mvbold(false); + mvgetScreenSize(nbRow, nbCol); } } } @@ -157,7 +165,7 @@ void MeshOpt::printProgress(const alglib::real_1d_array &x, double Obj) sprintf(_iterHistory.back(), _objFunc->minMaxStr().c_str()); mvprintList(22, 5, _iterHistory, 1); } - if ((_verbose > 2) && (_iter % _intervDisplay == 0)) + if ((_verbose > 2) && (_iter % _intervDisplay == 0 || _nCurses)) Msg::Info(("--> Iteration %3d --- OBJ %12.5E (relative decrease = %12.5E)" + _objFunc->minMaxStr()).c_str(), _iter, Obj, Obj/_initObj); } @@ -309,7 +317,10 @@ int MeshOpt::optimize(const MeshOptParameters &par) } mvprintList(19, -8, _optHistory, 2); } - if (_verbose > 2) Msg::Info("--- Optimization run %d", iBar); + if (_verbose > 2){ + Msg::Info("--- Optimization run %d", iBar); + Msg::Info("%s", _objFunc->minMaxStr().c_str()); + } _objFunc->updateParameters(); runOptim(x, gradObj, par.pass[_iPass].maxOptIter, iBar); _objFunc->updateMinMax();