#include <cstring>
#include <boost/filesystem.hpp>
+
+static std::string removeFile(std::string fileName, int& notOk)
+{
+ std::string errStr;
+ notOk = std::remove(fileName.c_str());
+ if (notOk) errStr = ToComment(" \n error while removing file : ")
+ << fileName;
+ else errStr= ToComment("\n file : ")<< fileName << " succesfully deleted! \n ";
+
+ return errStr;
+}
namespace
{
struct GET_DEFAULT // struct used to get default value from GetOptionValue()
if (op_val->second != optionValue)
{
- const char* ptr = optionValue.c_str();
+
+ std::string lowerOptionValue = toLowerStr(optionValue);
+ const char* ptr = lowerOptionValue.c_str();
// strip white spaces
while (ptr[0] == ' ')
ptr++;
if (i == 0) {
// empty string
} else if (_charOptions.count(optionName)) {
- // do not check strings
+ // do not check strings
} else if (_doubleOptions.count(optionName)) {
// check if value is double
toDbl(ptr, &typeOk);
return val;
}
//================================================================================
+/*!
+ * \brief Converts a string to a lower
+ */
+//================================================================================
+std::string MgAdapt::toLowerStr(const std::string& str)
+{
+ std::string s = str;
+ for ( size_t i = 0; i <= s.size(); ++i )
+ s[i] = tolower( s[i] );
+ return s;
+}
+//================================================================================
/*!
* \brief Converts a string to a bool
*/
int MgAdapt::compute(std::string& errStr)
{
- std::string cmd= getCommandToRun();
+ std::string cmd = getCommandToRun();
int err = 0;
execCmd( cmd.c_str(), err ); // run
{
convertMeshFile(meshFormatOutputMesh, solFormatOutput);
}
+ //~if (!err) cleanUp();
return err;
}
{
err = 1;
std::array <char, 128> buffer;
- std:: ofstream logStream;
- logStream.open(logFile);
+ std::streambuf* buf;
+ outFileStream fileStream;
+ if (printLogInFile)
+ {
+ fileStream.open(logFile);
+ buf = fileStream.rdbuf();
+ }
+ else
+ {
+ buf = std::cout.rdbuf();
+ }
+ std::ostream logStream(buf);
+
std::unique_ptr <FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose );
if(!pipe)
{
{
logStream<<buffer.data() ;
}
- logStream.close();
err = 0;
}
+
+void MgAdapt::cleanUp()
+{
+ int notOk;
+ std::string errStr;
+ if(removeOnSuccess) tmpFilesToBeDeleted.push_back(logFile);
+
+ std::vector< std::string>::iterator it = tmpFilesToBeDeleted.begin();
+ for (; it!=tmpFilesToBeDeleted.end(); ++it)
+ {
+ errStr=removeFile(*it, notOk);
+ if (notOk)
+ {
+ appendMsgToLogFile(errStr);
+ }
+
+ }
+}
+
+void MgAdapt::appendMsgToLogFile(std::string& msg)
+{
+ std::ofstream logStream;
+ logStream.open(logFile, std::ofstream::out | std::ofstream::app);
+ logStream<< msg;
+ logStream.close();
+}
//================================================================================
/*!
* \brief Return command to run MG-Tetra mesher excluding file prefix (-f)
errStr = ToComment(" failed to find .mesh or .sol file from converter ")<< strerror( errno );
return errStr;
}
+ tmpFilesToBeDeleted.push_back(meshIn);
+ tmpFilesToBeDeleted.push_back(solFileIn);
if(useBackgroundMap && !isFileExist(sizeMapIn))
{
return errStr;
}
- meshFormatOutputMesh = meshIn;
- solFormatOutput.push_back(solFileIn);
+
cmd+= " --in "+ meshIn;
meshFormatOutputMesh = getFileName()+".mesh";
{
cmd+= " --background_mesh "+ sizeMapIn ;
cmd+= " --background_sizemap "+ solFileIn;
+ tmpFilesToBeDeleted.push_back(sizeMapIn);
}
//~else
//~{
//~// constant value TODO
//~}
-
+ /* sizemap file is not adapted in case of only surface adaptation see MeshGems docs */
+ std::string adapOp = "adaptation";
+ std::string adpOpVal = getOptionValue(adapOp);
+ std::string surfaceAdapt = "surface";
+ if(surfaceAdapt != adpOpVal )
+ {
+ std::string solFileOut = getFileName()+".sol";
+ cmd+= " --write_sizemap "+ solFileOut;
+ solFormatOutput.push_back(solFileOut);
+ }
if (verbosityLevel != defaultVerboseLevel())
{
if ( erreur < 0 )
{
- //~addMessage( ToComment(" error: error while reading field last time step ") << nomcha << " in file " << aFile , /*fatal=*/true );
+ //~addMessage( ToComment(" error: error while reading field ") << nomcha << "step (numdt, numit) = " <<"("<< numdt<< ", " \
+ numit<< ")" <<" in file " << aFile , /*fatal=*/true );
return;
}
};
-
+class outFileStream : public std::ofstream{
+public:
+ ~outFileStream(){close();} //to close file at dtor
+};
/*!
* \brief Class to generate string from any type
static double toDbl(const std::string&, bool* isOk = 0) throw (std::invalid_argument);
static bool toBool(const std::string&, bool* isOk = 0) throw (std::invalid_argument);
static int toInt(const std::string&, bool* isOk = 0 ) throw (std::invalid_argument);
+ static std::string toLowerStr(const std::string& str);
/* default values */
std::vector< std::string> solFormatOutput;
std::vector <group> groupVec;
std::vector <family> famVec;
+ std::vector< std::string> tmpFilesToBeDeleted;
/* convert MED-->.mesh format */
void convertMedFile(std::string& meshIn,std::string& solFileIn, std::string& sizeMapIn) ;
med_idt openMedFile(const std::string aFile) ;
bool isFileExist(std::string& fName) const;
void execCmd( const char* cmd, int& err);
+ void cleanUp();
+ void appendMsgToLogFile(std::string& msg);
};