17 #if !defined finley_MeshAdapter_20040526_H
18 #define finley_MeshAdapter_20040526_H
21 #include "finley/Mesh.h"
22 #include "finley/Finley.h"
23 #include "finley/Assemble.h"
26 #include <pasowrap/SystemMatrixAdapter.h>
27 #include <pasowrap/TransportProblemAdapter.h>
28 #include "escript/AbstractContinuousDomain.h"
29 #include "escript/FunctionSpace.h"
30 #include "escript/FunctionSpaceFactory.h"
32 #include <boost/shared_ptr.hpp>
33 #include <boost/python/dict.hpp>
34 #include <boost/python/extract.hpp>
47 escript::Domain_ptr
brick(
int n0,
int n1,
int n2,
int order,
48 double l0,
double l1,
double l2,
49 bool periodic0,
bool periodic1,
bool periodic2,
50 int integrationOrder,
int reducedIntegrationOrder,
51 bool useElementsOnFace,
bool useFullElementOrder,
52 bool optimize,
const std::vector<double>& points,
53 const std::vector<int>& tags,
54 const std::map<std::string, int>& tagnamestonums);
57 escript::Domain_ptr
rectangle(
int n0,
int n1,
int order,
59 bool periodic0,
bool periodic1,
60 int integrationOrder,
int reducedIntegrationOrder,
61 bool useElementsOnFace,
bool useFullElementOrder,
62 bool optimize,
const std::vector<double>& points,
63 const std::vector<int>& tags,
64 const std::map<std::string, int>& tagnamestonums);
79 class MeshAdapter :
public escript::AbstractContinuousDomain {
180 void write(
const std::string& fileName)
const;
195 void dump(
const std::string& fileName)
const;
351 virtual int getDim()
const;
378 virtual std::pair<int,int>
getDataShape(
int functionSpaceCode)
const;
386 virtual void setToX(escript::Data& arg)
const;
395 virtual void setTagMap(
const std::string& name,
int tag);
403 virtual int getTag(
const std::string& name)
const;
425 virtual void setNewX(
const escript::Data& arg);
457 virtual void interpolateACross(escript::Data& target,
const escript::Data& source)
const;
464 virtual bool probeInterpolationACross(
int functionSpaceType_source,
const escript::AbstractDomain& targetDomain,
int functionSpaceType_target)
const;
472 virtual void setToNormal(escript::Data& out)
const;
480 virtual void setToSize(escript::Data& out)
const;
488 virtual void setToGradient(escript::Data& grad,
const escript::Data& arg)
const;
496 virtual void setToIntegrals(std::vector<double>& integrals,
const escript::Data& arg)
const;
508 virtual int getSystemMatrixTypeId(
const int solver,
const int preconditioner,
const int package,
const bool symmetry)
const;
520 virtual int getTransportTypeId(
const int solver,
const int preconditioner,
const int package,
const bool symmetry)
const;
547 escript::AbstractSystemMatrix& mat, escript::Data& rhs,
548 const escript::Data& A,
const escript::Data& B,
const escript::Data& C,
549 const escript::Data& D,
const escript::Data& X,
const escript::Data& Y,
550 const escript::Data& d,
const escript::Data& y,
551 const escript::Data& d_contact,
const escript::Data& y_contact,
552 const escript::Data& d_dirac,
const escript::Data& y_dirac)
const;
560 const escript::Data& D,
561 const escript::Data& d,
562 const escript::Data& d_dirac,
563 const bool useHRZ)
const;
571 const escript::Data& X,
const escript::Data& Y,
572 const escript::Data& y,
const escript::Data& y_contact,
const escript::Data& y_dirac)
const;
580 escript::AbstractTransportProblem& tp, escript::Data& source,
581 const escript::Data&
M,
582 const escript::Data& A,
const escript::Data& B,
const escript::Data& C,
const escript::Data& D,
583 const escript::Data& X,
const escript::Data& Y,
584 const escript::Data& d,
const escript::Data& y,
585 const escript::Data& d_contact,
const escript::Data& y_contact,
const escript::Data& d_dirac,
const escript::Data& y_dirac)
const;
594 const int row_blocksize,
595 const escript::FunctionSpace& row_functionspace,
596 const int column_blocksize,
597 const escript::FunctionSpace& column_functionspace,
598 const int type)
const;
608 const escript::FunctionSpace& functionspace,
609 const int type)
const;
615 virtual escript::Data
getX()
const;
627 virtual escript::Data
getSize()
const;
633 virtual bool operator==(
const escript::AbstractDomain& other)
const;
635 virtual bool operator!=(
const escript::AbstractDomain& other)
const;
643 virtual void setTags(
const int functionSpaceType,
const int newTag,
const escript::Data& mask)
const;
661 bool canTag(
int functionSpaceCode)
const;
684 void addDiracPoints(
const std::vector<double>& points,
const std::vector<int>& tags)
const;
706 friend escript::Domain_ptr
brick(
int n0,
int n1,
int n2,
int order,
707 double l0,
double l1,
double l2,
708 bool periodic0,
bool periodic1,
bool periodic2,
709 int integrationOrder,
710 int reducedIntegrationOrder,
711 bool useElementsOnFace,
712 bool useFullElementOrder,
714 const std::vector<double>& points,
715 const std::vector<int>& tags,
716 const std::map<std::string, int>& tagnamestonums);
719 friend escript::Domain_ptr
rectangle(
int n0,
int n1,
int order,
720 double l0,
double l1,
721 bool periodic0,
bool periodic1,
722 int integrationOrder,
723 int reducedIntegrationOrder,
724 bool useElementsOnFace,
725 bool useFullElementOrder,
727 const std::vector<double>& points,
728 const std::vector<int>& tags,
729 const std::map<std::string, int>& tagnamestonums);