17 #include "exact_solution.h"
23 template<
typename Scalar>
24 ExactSolution<Scalar>::ExactSolution(
const Mesh* mesh) : Solution<Scalar>(mesh)
26 this->sln_type = HERMES_EXACT;
28 this->exact_multiplicator = 1.0;
31 template<
typename Scalar>
32 MeshFunction<Scalar>* ExactSolution<Scalar>::clone()
const
34 throw Hermes::Exceptions::Exception(
"Solution<Scalar>::clone() must be overridden in the case of exact solutions.");
38 template<
typename Scalar>
39 ExactSolutionScalar<Scalar>::ExactSolutionScalar(
const Mesh* mesh) : ExactSolution<Scalar>(mesh)
41 this->num_components = 1;
44 template<
typename Scalar>
50 template<
typename Scalar>
56 template<
typename Scalar>
65 if(this->sln_type == HERMES_SLN)
74 xmlsolution.
exactCXR() = this->constant;
77 solution_schema_location.append(
"/solution_h2d_xml.xsd");
81 namespace_info_map.insert(std::pair<std::basic_string<char>,
xml_schema::namespace_info>(
"solution", namespace_info_solution));
83 std::ofstream out(filename);
91 throw Hermes::Exceptions::SolutionSaveFailureException(e.what());
98 if(this->sln_type == HERMES_SLN)
107 xmlsolution.
exactCXR() = this->constant.real();
108 xmlsolution.
exactCXC() = this->constant.imag();
111 solution_schema_location.append(
"/solution_h2d_xml.xsd");
115 namespace_info_map.insert(std::pair<std::basic_string<char>,
xml_schema::namespace_info>(
"solution", namespace_info_solution));
117 std::ofstream out(filename);
124 throw Hermes::Exceptions::SolutionSaveFailureException(e.what());
128 template<
typename Scalar>
131 template<
typename Scalar>
136 template<
typename Scalar>
139 if(this->sln_type == HERMES_SLN)
145 template<
typename Scalar>
151 template<
typename Scalar>
159 if(this->sln_type == HERMES_SLN)
171 solution_schema_location.append(
"/solution_h2d_xml.xsd");
175 namespace_info_map.insert(std::pair<std::basic_string<char>,
xml_schema::namespace_info>(
"solution", namespace_info_solution));
177 std::ofstream out(filename);
184 throw Hermes::Exceptions::SolutionSaveFailureException(e.what());
191 if(this->sln_type == HERMES_SLN)
204 solution_schema_location.append(
"/solution_h2d_xml.xsd");
208 namespace_info_map.insert(std::pair<std::basic_string<char>,
xml_schema::namespace_info>(
"solution", namespace_info_solution));
210 std::ofstream out(filename);
217 throw Hermes::Exceptions::SolutionSaveFailureException(e.what());
221 template<
typename Scalar>
224 template<
typename Scalar>
229 template<
typename Scalar>
232 if(this->sln_type == HERMES_SLN)
238 template<
typename Scalar>
244 template<
typename Scalar>
253 if(this->sln_type == HERMES_SLN)
262 xmlsolution.
exactCXR() = this->constantX;
263 xmlsolution.
exactCYR() = this->constantY;
266 solution_schema_location.append(
"/solution_h2d_xml.xsd");
270 namespace_info_map.insert(std::pair<std::basic_string<char>,
xml_schema::namespace_info>(
"solution", namespace_info_solution));
272 std::ofstream out(filename);
279 throw Hermes::Exceptions::SolutionSaveFailureException(e.what());
286 if(this->sln_type == HERMES_SLN)
295 xmlsolution.
exactCXR() = this->constantX.real();
296 xmlsolution.
exactCXC() = this->constantX.imag();
297 xmlsolution.
exactCYR() = this->constantY.real();
298 xmlsolution.
exactCYC() = this->constantY.imag();
301 solution_schema_location.append(
"/solution_h2d_xml.xsd");
305 namespace_info_map.insert(std::pair<std::basic_string<char>,
xml_schema::namespace_info>(
"solution", namespace_info_solution));
307 std::ofstream out(filename);
317 throw Hermes::Exceptions::SolutionSaveFailureException(e.what());
321 template<
typename Scalar>
324 template<
typename Scalar>
325 MeshFunction<Scalar>* ConstantSolutionVector<Scalar>::clone()
const
327 if(this->sln_type == HERMES_SLN)
328 return Solution<Scalar>::clone();
329 ConstantSolutionVector<Scalar>* sln =
new ConstantSolutionVector<Scalar>(this->mesh, this->constantX, this->constantY);
333 template<
typename Scalar>
335 return Scalar2<Scalar>(constantX, constantY);
338 template<
typename Scalar>
340 dx = Scalar2<Scalar>(Scalar(0.0), Scalar(0.0));
341 dy = Scalar2<Scalar>(Scalar(0.0), Scalar(0.0));
344 template<
typename Scalar>
352 if(this->sln_type == HERMES_SLN)
365 solution_schema_location.append(
"/solution_h2d_xml.xsd");
369 namespace_info_map.insert(std::pair<std::basic_string<char>,
xml_schema::namespace_info>(
"solution", namespace_info_solution));
371 std::ofstream out(filename);
380 throw Hermes::Exceptions::SolutionSaveFailureException(e.what());
387 if(this->sln_type == HERMES_SLN)
402 solution_schema_location.append(
"/solution_h2d_xml.xsd");
406 namespace_info_map.insert(std::pair<std::basic_string<char>,
xml_schema::namespace_info>(
"solution", namespace_info_solution));
408 std::ofstream out(filename);
416 throw Hermes::Exceptions::SolutionSaveFailureException(e.what());
420 template<
typename Scalar>
423 template<
typename Scalar>
425 return Scalar2<Scalar>(0.0, 0.0);
428 template<
typename Scalar>
430 dx = Scalar2<Scalar>(0.0, 0.0);
431 dy = Scalar2<Scalar>(0.0, 0.0);
434 template<
typename Scalar>
439 template<
typename Scalar>
440 MeshFunction<Scalar>* ZeroSolutionVector<Scalar>::clone()
const
442 if(this->sln_type == HERMES_SLN)
443 return Solution<Scalar>::clone();
444 ZeroSolutionVector<Scalar>* sln =
new ZeroSolutionVector<Scalar>(this->mesh);
448 template HERMES_API
class ExactSolutionScalar<double>;
449 template HERMES_API
class ExactSolutionScalar<std::complex<double> >;
450 template HERMES_API
class ExactSolutionVector<double>;
451 template HERMES_API
class ExactSolutionVector<std::complex<double> >;
452 template HERMES_API
class ConstantSolution<double>;
453 template HERMES_API
class ConstantSolution<std::complex<double> >;
454 template HERMES_API
class ConstantSolutionVector<double>;
455 template HERMES_API
class ConstantSolutionVector<std::complex<double> >;
456 template HERMES_API
class ZeroSolution<double>;
457 template HERMES_API
class ZeroSolution<std::complex<double> >;
458 template HERMES_API
class ZeroSolutionVector<double>;
459 template HERMES_API
class ZeroSolutionVector<std::complex<double> >;