19#ifndef _BERT_ELECTRODE__H
20#define _BERT_ELECTRODE__H
24#include <baseentity.h>
37 Electrode(
const RVector3 & pos,
int id = -1);
47 bool operator == (
const Electrode & e)
const {
return pos_ == e.pos(); }
49 inline void setPos(
const RVector3 & pos){ pos_ = pos; }
51 inline const RVector3 & pos()
const {
return pos_; }
62 ElectrodeShape(
const RVector3 & pos);
64 virtual ~ElectrodeShape();
66 virtual std::vector < MeshEntity * > entities()
const {
67 THROW_TO_IMPL;
return std::vector < MeshEntity * >();
70 virtual double domainSize()
const {
return size_; }
78 virtual double pot(
const RVector & sol)
const { THROW_TO_IMPL;
return 0.0; }
81 virtual void assembleRHS(RVector & rhs,
double value, uint matrixSize)
const {
82 THROW_TO_IMPL;
return;
86 virtual void setSingValue(RVector & sol,
double scale,
double k)
const {
94 virtual int mID()
const {
return mID_; }
105class DLLEXPORT ElectrodeShapeNode :
public ElectrodeShape{
107 ElectrodeShapeNode(
Node & node);
109 virtual ~ElectrodeShapeNode();
111 void setNode(
Node & node);
113 inline const Node * node()
const {
return node_; }
115 virtual std::vector < MeshEntity * > entities()
const {
116 std::vector < MeshEntity * > ents;
117 ents.push_back(entity_);
125 virtual double pot(
const RVector & sol)
const;
127 virtual void assembleRHS(RVector & rhs,
double value, uint matrixSize)
const;
129 virtual void setSingValue(RVector & sol,
double scale = 1.0,
double k = 0.0)
const;
146 std::vector < Node * > nodes_;
153class DLLEXPORT ElectrodeShapeEntity :
public ElectrodeShape{
155 ElectrodeShapeEntity(
MeshEntity & entity,
const RVector3 & pos);
157 virtual ~ElectrodeShapeEntity();
159 inline void setEntity(
MeshEntity & entity) { entity_ = & entity; }
160 inline MeshEntity * entity()
const {
return entity_; }
162 virtual std::vector < MeshEntity * > entities()
const {
163 std::vector < MeshEntity * > ents;
164 ents.push_back(entity_);
171 virtual double pot(
const RVector & sol)
const;
173 virtual void assembleRHS(RVector & rhs,
double value, uint matrixSize)
const;
175 virtual void setSingValue(RVector & sol,
double scale,
double k)
const;
183class DLLEXPORT ElectrodeShapeDomain :
public ElectrodeShape{
185 ElectrodeShapeDomain(
const std::vector < MeshEntity * > & entities);
190 ElectrodeShapeDomain(
const std::vector < Boundary * > & entities);
192 virtual ~ElectrodeShapeDomain();
194 inline void setEntities(std::vector < MeshEntity * > & entities) { entities_ = entities; }
196 virtual std::vector < MeshEntity * > entities()
const {
return entities_; }
200 virtual double pot(
const RVector & sol)
const;
202 virtual void assembleRHS(RVector & rhs,
double value, uint matrixSize)
const;
205 std::vector < MeshEntity * > entities_;
Base Entity.
Definition baseentity.h:30
int id() const
Definition baseentity.h:59
virtual double pot(const RVector &sol) const
Definition electrode.cpp:367
virtual double geomMeanCellAttributes() const
Definition electrode.cpp:327
virtual void assembleRHS(RVector &rhs, double value, uint matrixSize) const
Definition electrode.cpp:350
virtual double pot(const RVector &sol) const
Definition electrode.cpp:270
virtual double geomMeanCellAttributes() const
Definition electrode.cpp:252
virtual void setSingValue(RVector &sol, double scale, double k) const
Definition electrode.cpp:207
virtual void assembleRHS(RVector &rhs, double value, uint matrixSize) const
Definition electrode.cpp:274
virtual void assembleRHS(RVector &rhs, double value, uint matrixSize) const
Definition electrode.cpp:133
virtual void setSingValue(RVector &sol, double scale=1.0, double k=0.0) const
Definition electrode.cpp:154
virtual double geomMeanCellAttributes() const
Definition electrode.cpp:102
virtual double pot(const RVector &sol) const
Definition electrode.cpp:129
ElectrodeShapeNodesWithBypass(std::vector< Node * > &nodes)
Definition electrode.cpp:191
virtual void setSingValue(RVector &sol, double scale, double k) const
Definition electrode.h:86
virtual void assembleRHS(RVector &rhs, double value, uint matrixSize) const
Definition electrode.h:81
virtual double geomMeanCellAttributes() const
Definition electrode.h:75
void setMID(uint id)
Definition electrode.h:91
virtual int mID() const
Definition electrode.h:94
virtual double pot(const RVector &sol) const
Definition electrode.h:78
double size_
size of the domain
Definition electrode.h:99
Electrode()
Definition electrode.cpp:31
Definition meshentities.h:103
3D Node
Definition node.h:39
GIMLi main namespace for the Geophyiscal Inversion and Modelling Library.
Definition baseentity.h:24
RVector y(const R3Vector &rv)
Definition pos.cpp:114
RVector x(const R3Vector &rv)
Definition pos.cpp:107
RVector z(const R3Vector &rv)
Definition pos.cpp:120