00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <ScalarFunctionReaderRaw.hpp>
00021 #include <ScalarFunctionBase.hpp>
00022
00023 #include <ErrorHandler.hpp>
00024 #include <Mesh.hpp>
00025
00026 #include <ScalarDiscretizationTypeBase.hpp>
00027 #include <Vector.hpp>
00028 #include <FEMFunctionBase.hpp>
00029
00030 #include <FEMFunctionBuilder.hpp>
00031
00032 #include <fstream>
00033
00034 ConstReferenceCounting<ScalarFunctionBase>
00035 ScalarFunctionReaderRaw::
00036 getFunction() const
00037 {
00038 if (__functionName != "") {
00039 throw ErrorHandler(__FILE__,__LINE__,
00040 "cannot name function in raw format",
00041 ErrorHandler::normal);
00042 }
00043
00044 std::ifstream fin(__filename.c_str());
00045 if (not(fin)) {
00046 throw ErrorHandler(__FILE__,__LINE__,
00047 "error: cannot open file '"+__filename+"'",
00048 ErrorHandler::normal);
00049 }
00050
00051 const Mesh& mesh = (*__mesh);
00052
00053 Vector<real_t> v(mesh.numberOfVertices());
00054
00055 for (size_t j=0; j<=__componentNumber; ++j) {
00056 for (size_t i=0; i<v.size(); ++i) {
00057 fin >> v[i];
00058 }
00059
00060 if (fin.bad()) {
00061 throw ErrorHandler(__FILE__,__LINE__,
00062 "cannot read all datas in file '"+__filename+"'",
00063 ErrorHandler::normal);
00064 }
00065 }
00066
00067 FEMFunctionBuilder builder;
00068 ScalarDiscretizationTypeFEM d(ScalarDiscretizationTypeBase::lagrangianFEM1);
00069 builder.build(d, __mesh, v);
00070 return builder.getBuiltScalarFunction();
00071 }
00072
00073 ScalarFunctionReaderRaw::
00074 ScalarFunctionReaderRaw(const std::string& filename,
00075 ConstReferenceCounting<Mesh> mesh,
00076 const std::string& functionName,
00077 const int& componentNumber)
00078 : ScalarFunctionReaderBase(filename, mesh, functionName, componentNumber)
00079 {
00080 ;
00081 }
00082
00083 ScalarFunctionReaderRaw::
00084 ScalarFunctionReaderRaw(const ScalarFunctionReaderRaw& f)
00085 : ScalarFunctionReaderBase(f)
00086 {
00087 ;
00088 }
00089
00090 ScalarFunctionReaderRaw::
00091 ~ScalarFunctionReaderRaw()
00092 {
00093 ;
00094 }