NeoPZ
pzbndcond.h
Go to the documentation of this file.
1 
6 #ifndef BNDCONDHPP
7 #define BNDCONDHPP
8 
9 #include <iostream>
10 #include <map>
11 
12 #include "pzreal.h"
13 #include "pzdiscgal.h"
14 #include "pzvec.h"
15 #include "pzmanvector.h"
16 #include "pzfmatrix.h"
17 #include "tpzautopointer.h"
18 
19 template <class T, int N>
20 class TPZManVector;
21 
30 
31  friend class TPZMaterial;
32 
33 protected:
34 
35  class TPZ_BCDefine : public TPZSavable {
36 
37  public :
40 
43 
46 
49 
52 
55 
58 
59  TPZ_BCDefine() : fBCVal2(), fForcingFunction(NULL), fForcingFunctionExact(NULL),fTimeDependentForcingFunction(NULL),
60  fTimedependentFunctionExact(NULL), fBCForcingFunction(NULL),fTimedependentBCForcingFunction(NULL)
61  {
62 
63  }
64  TPZ_BCDefine(TPZFMatrix<STATE> Val2) : fBCVal2(), fForcingFunction(NULL), fForcingFunctionExact(NULL),fTimeDependentForcingFunction(NULL),
65  fTimedependentFunctionExact(NULL), fBCForcingFunction(NULL),fTimedependentBCForcingFunction(NULL)
66  {
67 
68  }
69  TPZ_BCDefine(const TPZ_BCDefine &cp) : fBCVal2(cp.fBCVal2), fForcingFunction(cp.fForcingFunction),fForcingFunctionExact(cp.fForcingFunctionExact),
70  fTimeDependentForcingFunction(cp.fTimeDependentForcingFunction), fTimedependentFunctionExact(cp.fTimedependentFunctionExact),
71  fBCForcingFunction(cp.fBCForcingFunction),fTimedependentBCForcingFunction(cp.fTimedependentBCForcingFunction)
72  {
73 
74  }
76  {
77  fBCVal2 = cp.fBCVal2;
78  fForcingFunction = cp.fForcingFunction;
79  fForcingFunctionExact = cp.fForcingFunctionExact;
80  fTimeDependentForcingFunction = cp.fTimeDependentForcingFunction;
81  fTimedependentFunctionExact = cp.fTimedependentFunctionExact;
82  fBCForcingFunction = cp.fBCForcingFunction;
83  fTimedependentBCForcingFunction = cp.fTimedependentBCForcingFunction;
84  return *this;
85  }
87  {
88 
89  } int ClassId() const override;
90  void Read(TPZStream &buf, void *context) override;
91  void Write(TPZStream &buf, int withclassid) const override;
92 
93  };
94 
96 
98  int fType;
105 
108 
109  public :
112  TPZDiscontinuousGalerkin(bc), fBCs(bc.fBCs), fType(-1), fBCVal1(bc.fBCVal1),
113  fBCVal2(bc.fBCVal2), fMaterial(0), fValFunction(NULL){
114  fMaterial = bc.fMaterial;
115  fType = bc.fType;
122  }
125  TPZDiscontinuousGalerkin(), fBCs(), fType(-1), fBCVal1(),
126  fBCVal2(), fMaterial(0), fValFunction(NULL){
127  }
130  TPZDiscontinuousGalerkin(matid), fBCs(0), fType(-1), fBCVal1(),
131  fBCVal2(), fMaterial(0), fValFunction(NULL){
132  }
135 
136  TPZBndCond(TPZMaterial * material,int id,int type,TPZFMatrix<STATE> &val1,TPZFMatrix<STATE> &val2) :
137  TPZRegisterClassId(&TPZBndCond::ClassId), TPZDiscontinuousGalerkin(id), fBCs(), fBCVal1(val1), fBCVal2(val2), fValFunction(NULL) {
138  //creates a new material
139  if(!material)
140  {
141  std::cout << __PRETTY_FUNCTION__ << " Creating boundary condition with NULL material" << std::endl;
142  DebugStop();
143  }
144  fMaterial = material;
145  fType = type;
146 
147  }
148 
150  TPZDiscontinuousGalerkin(copy), fBCs(copy.fBCs), fType(copy.fType),
151  fBCVal1(copy.fBCVal1), fBCVal2(copy.fBCVal2), fMaterial(ref), fValFunction(copy.fValFunction) {
152 
159 
160  }
161 
162 
163  void SetValFunction(void (*fp)(TPZVec<REAL> &loc, TPZFMatrix<STATE> &Val1, TPZVec<STATE> &Val2, int &BCType)){
164  fValFunction = fp;
165  }
166 
168  {
169  if (loadcase == 0) {
171  }
172  else {
173  fBCs[loadcase].fForcingFunction = func;
174  }
175  }
176 
178  {
179  if (loadcase == 0) {
181  }
182  else {
183  fBCs[loadcase].fForcingFunctionExact = func;
184  }
185  }
186 
188  {
189  if (loadcase == 0) {
191  }
192  else {
193  fBCs[loadcase].fTimeDependentForcingFunction = func;
194  }
195  }
196 
198  {
199  if (loadcase == 0) {
201  }
202  else {
203  fBCs[loadcase].fTimedependentFunctionExact = func;
204  }
205  }
206 
208  {
209  if (loadcase == 0) {
211  }
212  else {
213  fBCs[loadcase].fBCForcingFunction = func;
214  }
215  }
216 
218  {
219  if (loadcase == 0) {
221  }
222  else {
223  fBCs[loadcase].fTimedependentBCForcingFunction = func;
224  }
225  }
226 
228  {
229  if (loadcase == 0) {
230  return this->fTimedependentBCForcingFunction;
231  }
232  else {
233  return fBCs[loadcase].fTimedependentBCForcingFunction;
234  }
235  }
236 
237  void SetMaterial(TPZMaterial * mat) { fMaterial = mat;}
238 
240  int Dimension() const override { return fMaterial->Dimension(); }
241 
242  virtual int NFluxes() override { return fMaterial->NFluxes(); }
243 
244  virtual int NStateVariables() const override { return fMaterial->NStateVariables(); }
245 
247  virtual int NEvalErrors() override {return fMaterial->NEvalErrors();}
248 
249  int Type() { return fType; }
250 
251  void SetType(int type){ this->fType = type; }
252 
254 
255  TPZFMatrix<STATE> &Val2(int loadcase = 0)
256  {
257  if (loadcase == 0 || loadcase > fBCs.size() ) {
258  return fBCVal2;
259  }
260  return fBCs[loadcase-1].fBCVal2;
261  }
262 
263  TPZMaterial * Material() const { return fMaterial; }
264 
266  {
267  fBCs.Resize(val2vec.size()-1);
268  fBCVal2 = val2vec[0];
269  for (int i=0; i<val2vec.size()-1; i++) {
270  fBCs[i] = val2vec[i+1];
271  }
272  }
273 
274  virtual int MinimumNumberofLoadCases() override
275  {
276  return 1+fBCs.size();
277  }
278 
280  void Flux(TPZVec<REAL> &x, TPZVec<STATE> &Sol, TPZFMatrix<STATE> &DSol, TPZFMatrix<REAL> &axes, TPZVec<STATE> &flux) override {
281  flux.Fill(0.);
282  }
283 
284  void Print(std::ostream & out = std::cout) override {
285  out << " Boundary condition number = " << Id() << "\n";
286  out << " boundary condition type = " << fType << "\n";
287  out << " val1 = \n"; fBCVal1.Print("fBCVal1",out);
288  out << " val2 = \n"; fBCVal2.Print("fBCVal2",out);
289  if (HasForcingFunction()) out << " has forcing function\n";
290  else out << "has no forcing function\n";
291  }
292 
294 
295  /*
296  @brief this method will be used only in case of multiphysics simulation
297  */
299 
308  virtual void Contribute(TPZMaterialData &data, REAL weight, TPZFMatrix<STATE> &ek, TPZFMatrix<STATE> &ef) override;
309 
319  virtual void Contribute(TPZVec<TPZMaterialData> &datavec, REAL weight, TPZFMatrix<STATE> &ek, TPZFMatrix<STATE> &ef) override;
320 
330  virtual void ContributeBC(TPZMaterialData &data, REAL weight, TPZFMatrix<STATE> &ek, TPZFMatrix<STATE> &ef, TPZBndCond &bc) override;
331 
339  virtual void Contribute(TPZMaterialData &data, REAL weight, TPZFMatrix<STATE> &ef) override;
340 
349  virtual void ContributeBC(TPZMaterialData &data, REAL weight, TPZFMatrix<STATE> &ef, TPZBndCond &bc) override;
350 
355  virtual void ContributeInterface(TPZMaterialData &data, TPZMaterialData &dataleft, TPZMaterialData &dataright, REAL weight, TPZFMatrix<STATE> &ek, TPZFMatrix<STATE> &ef) override;
356 
361  virtual void ContributeInterface(TPZMaterialData &data, TPZVec<TPZMaterialData> &dataleft, TPZVec<TPZMaterialData> &dataright, REAL weight, TPZFMatrix<STATE> &ek, TPZFMatrix<STATE> &ef) override;
362 
367  virtual void ContributeInterface(TPZMaterialData &data, TPZMaterialData &dataleft, TPZMaterialData &dataright, REAL weight, TPZFMatrix<STATE> &ef) override;
368 
373  virtual void ContributeBCInterface(TPZMaterialData &data, TPZMaterialData &dataleft, REAL weight, TPZFMatrix<STATE> &ek,TPZFMatrix<STATE> &ef,TPZBndCond &bc) override;
374 
379  virtual void ContributeBCInterface(TPZMaterialData &data, TPZMaterialData &dataleft, REAL weight, TPZFMatrix<STATE> &ef,TPZBndCond &bc) override;
380 
382  TPZVec<STATE> &uexact,TPZFMatrix<STATE> &duexact,TPZVec<REAL> &val) override {
383  val.Fill(0.);
384  }
385 
386  virtual void Clone(std::map<int, TPZMaterial * > &matvec) override;
387 
397  virtual void InterfaceJump(TPZVec<REAL> &x, TPZSolVec &leftu,TPZSolVec &rightu,TPZSolVec &jump) override;
398 
400  public:
401 virtual int ClassId() const override;
402 
404  virtual void Write(TPZStream &buf, int withclassid) const override;
405 
407  virtual void Read(TPZStream &buf, void *context) override;
408 
410  REAL weight,
411  TPZVec<STATE> &nkL,
412  TPZVec<STATE> &nkR,
413  int &errorid) override;
414 
416  REAL weight,
417  TPZVec<REAL> &nk,
418  int &errorid) override {
419  //nothing to be done here
420  };
421 
422 
424  REAL weight,
425  TPZVec<STATE> &nk,
426  TPZBndCond &bc,
427  int &errorid
428  ) override {
429  //nothing to be done here
430  }
431 
433  virtual void FillDataRequirements(TPZMaterialData &data) override;
434 
435  virtual void FillDataRequirements(TPZVec<TPZMaterialData> &datavec) override;
436 
437  virtual void FillDataRequirementsInterface(TPZMaterialData &data, TPZVec<TPZMaterialData > &datavec_left, TPZVec<TPZMaterialData > &datavec_right) override;
438 
439 };
440 
441 #endif
virtual int NFluxes() override
Returns the number of components which form the flux function.
Definition: pzbndcond.h:242
void ContributeInterfaceErrors(TPZMaterialData &data, TPZMaterialData &dataleft, TPZMaterialData &dataright, REAL weight, TPZVec< STATE > &nkL, TPZVec< STATE > &nkR, int &errorid) override
Definition: pzbndcond.cpp:120
Defines the interface which material objects need to implement for discontinuous Galerkin formulation...
Definition: pzdiscgal.h:20
TPZBndCond(int matid)
Default constructor.
Definition: pzbndcond.h:129
void Flux(TPZVec< REAL > &x, TPZVec< STATE > &Sol, TPZFMatrix< STATE > &DSol, TPZFMatrix< REAL > &axes, TPZVec< STATE > &flux) override
Computes the value of the flux function to be used by ZZ error estimator.
Definition: pzbndcond.h:280
TPZ_BCDefine & operator=(const TPZ_BCDefine &cp)
Definition: pzbndcond.h:75
void SetMaterial(TPZMaterial *mat)
Definition: pzbndcond.h:237
TPZAutoPointer< TPZFunction< STATE > > fBCForcingFunction
Pointer to bc forcing function, it is a variable boundary condition at differential equation...
Definition: pzbndcond.h:54
Implements a vector class which allows to use external storage provided by the user. Utility.
Definition: pzquad.h:16
virtual int NEvalErrors() override
Returns the number of norm errors. Default is 3: energy, L2 and H1.
Definition: pzbndcond.h:247
virtual void ContributeInterfaceBCErrors(TPZMaterialData &data, TPZMaterialData &dataleft, REAL weight, TPZVec< STATE > &nk, TPZBndCond &bc, int &errorid) override
Definition: pzbndcond.h:423
clarg::argBool bc("-bc", "binary checkpoints", false)
TPZAutoPointer< TPZFunction< STATE > > fBCForcingFunction
Pointer to bc forcing function, it is a variable boundary condition at differential equation...
Definition: TPZMaterial.h:59
TPZVec< TPZ_BCDefine > fBCs
Definition: pzbndcond.h:95
TPZBndCond(TPZBndCond &bc)
Copy constructor.
Definition: pzbndcond.h:111
int Type()
Definition: pzbndcond.h:249
Templated vector implementation.
~TPZBndCond()
Default destructor.
Definition: pzbndcond.h:134
TPZAutoPointer< TPZFunction< STATE > > fTimeDependentForcingFunction
Pointer to time dependent forcing function, it is the right member at differential equation...
Definition: pzbndcond.h:48
void SetBCForcingFunction(TPZAutoPointer< TPZFunction< STATE > > fp)
Sets a procedure as variable boundary condition.
Definition: TPZMaterial.h:447
virtual void Errors(TPZVec< REAL > &x, TPZVec< STATE > &sol, TPZFMatrix< STATE > &dsol, TPZFMatrix< REAL > &axes, TPZVec< STATE > &flux, TPZVec< STATE > &uexact, TPZFMatrix< STATE > &duexact, TPZVec< REAL > &val) override
Computes the error due to the difference between the interpolated flux and the flux computed based o...
Definition: pzbndcond.h:381
void ContributeErrors(TPZMaterialData &data, REAL weight, TPZVec< REAL > &nk, int &errorid) override
Definition: pzbndcond.h:415
virtual int Dimension() const =0
Returns the integrable dimension of the material.
virtual int NStateVariables() const =0
Returns the number of state variables associated with the material.
This class implements a simple vector storage scheme for a templated class T. Utility.
Definition: pzgeopoint.h:19
REAL val(STATE &number)
Returns value of the variable.
Definition: pzartdiff.h:23
TPZAutoPointer< TPZFunction< STATE > > fForcingFunctionExact
Pointer to exact solution function, needed to calculate exact error.
Definition: pzbndcond.h:45
TPZFMatrix< STATE > & Val2(int loadcase=0)
Definition: pzbndcond.h:255
This abstract class defines the behaviour which each derived class needs to implement.
Definition: TPZMaterial.h:39
TPZAutoPointer< TPZFunction< STATE > > fTimedependentFunctionExact
Pointer to time dependent exact solution function, needed to calculate exact error.
Definition: pzbndcond.h:51
TPZAutoPointer< TPZFunction< STATE > > fTimedependentBCForcingFunction
Pointer to time dependent bc forcing function, it is a variable boundary condition at differential eq...
Definition: TPZMaterial.h:62
virtual void Contribute(TPZMaterialData &data, REAL weight, TPZFMatrix< STATE > &ek, TPZFMatrix< STATE > &ef) override
It computes a contribution to the stiffness matrix and load vector at one integration point...
Definition: pzbndcond.cpp:142
int64_t size() const
Returns the number of elements of the vector.
Definition: pzvec.h:196
void SetForcingFunctionExact(TPZAutoPointer< TPZFunction< STATE > > fp)
Sets a procedure as exact solution for the problem.
Definition: TPZMaterial.h:405
virtual void Resize(const int64_t newsize, const T &object)
Resizes the vector object reallocating the necessary storage, copying the existing objects to the new...
Definition: pzvec.h:373
TPZAutoPointer< TPZFunction< STATE > > GetTimedependentBCForcingFunction(int loadcase)
Definition: pzbndcond.h:227
virtual void ContributeInterface(TPZMaterialData &data, TPZMaterialData &dataleft, TPZMaterialData &dataright, REAL weight, TPZFMatrix< STATE > &ek, TPZFMatrix< STATE > &ef) override
It computes a contribution to stiffness matrix and load vector at one integration point...
Definition: pzbndcond.cpp:174
virtual int NEvalErrors()
Returns the number of norm errors. Default is 3: energy, L2 and H1.
Definition: TPZMaterial.h:524
void UpdateBCValues(TPZManVector< REAL, 3 > &x)
Definition: pzbndcond.cpp:239
virtual void ContributeBC(TPZMaterialData &data, REAL weight, TPZFMatrix< STATE > &ek, TPZFMatrix< STATE > &ef, TPZBndCond &bc) override
It computes a contribution to the stiffness matrix and load vector at one BC integration point...
Definition: pzbndcond.cpp:166
virtual int NStateVariables() const override
Returns the number of state variables associated with the material.
Definition: pzbndcond.h:244
int ClassId() const override
Define the class id associated with the class.
Definition: pzbndcond.cpp:16
TPZFNMatrix< 9, STATE > fBCVal1
first value of boundary condition
Definition: pzbndcond.h:100
TPZBndCond()
Default constructor.
Definition: pzbndcond.h:124
virtual int NFluxes()
Returns the number of components which form the flux function.
Definition: TPZMaterial.h:183
Contains TPZMatrixclass which implements full matrix (using column major representation).
#define DebugStop()
Returns a message to user put a breakpoint in.
Definition: pzerror.h:20
TPZAutoPointer< TPZFunction< STATE > > fForcingFunctionExact
Pointer to exact solution function, needed to calculate exact error.
Definition: TPZMaterial.h:50
void SetType(int type)
Definition: pzbndcond.h:251
TPZAutoPointer< TPZFunction< STATE > > fTimedependentBCForcingFunction
Pointer to time dependent bc forcing function, it is a variable boundary condition at differential eq...
Definition: pzbndcond.h:57
This class defines the boundary condition for TPZMaterial objects.
Definition: pzbndcond.h:29
void SetTimeDependentForcingFunction(TPZAutoPointer< TPZFunction< STATE > > fp)
Sets a procedure as time dependent source function for the material.
Definition: TPZMaterial.h:419
Free store vector implementation.
void SetTimeDependentForcingFunction(int loadcase, TPZAutoPointer< TPZFunction< STATE > > func)
Definition: pzbndcond.h:187
TPZ_BCDefine(const TPZ_BCDefine &cp)
Definition: pzbndcond.h:69
virtual void ContributeBCInterface(TPZMaterialData &data, TPZMaterialData &dataleft, REAL weight, TPZFMatrix< STATE > &ek, TPZFMatrix< STATE > &ef, TPZBndCond &bc) override
It computes a contribution to stiffness matrix and load vector at one BC integration point...
Definition: pzbndcond.cpp:230
virtual void InterfaceJump(TPZVec< REAL > &x, TPZSolVec &leftu, TPZSolVec &rightu, TPZSolVec &jump) override
Compute interface jumps.
Definition: pzbndcond.cpp:60
void SetTimeDependentFunctionExact(int loadcase, TPZAutoPointer< TPZFunction< STATE > > func)
Definition: pzbndcond.h:197
TPZBndCond(TPZBndCond &copy, TPZMaterial *ref)
Definition: pzbndcond.h:149
Contains declaration of the TPZAutoPointer class which has Increment and Decrement actions are mutexe...
TPZFMatrix< STATE > & Val1()
Definition: pzbndcond.h:253
void(* fValFunction)(TPZVec< REAL > &loc, TPZFMatrix< STATE > &Val1, TPZVec< STATE > &Val2, int &BCType)
Function to allow fBCVal1 to be variable.
Definition: pzbndcond.h:107
TPZMaterial * fMaterial
pointer to material which created bc
Definition: pzbndcond.h:104
void Print(std::ostream &out=std::cout) override
Prints out the data associated with the material.
Definition: pzbndcond.h:284
virtual int HasForcingFunction()
Directive that gives true if the material has a forcing function.
Definition: TPZMaterial.h:472
virtual void FillDataRequirementsInterface(TPZMaterialData &data, TPZVec< TPZMaterialData > &datavec_left, TPZVec< TPZMaterialData > &datavec_right) override
This method defines which parameters need to be initialized in order to compute the contribution of i...
Definition: pzbndcond.cpp:316
int fType
boundary condition type
Definition: pzbndcond.h:98
void SetTimedependentBCForcingFunction(TPZAutoPointer< TPZFunction< STATE > > fp)
Sets a procedure as time variable boundary condition.
Definition: TPZMaterial.h:461
TPZAutoPointer< TPZFunction< STATE > > fTimedependentFunctionExact
Pointer to time dependent exact solution function, needed to calculate exact error.
Definition: TPZMaterial.h:56
virtual int MinimumNumberofLoadCases() override
returns the minimum number of load cases for this material
Definition: pzbndcond.h:274
TPZAutoPointer< TPZFunction< STATE > > fForcingFunction
Pointer to forcing function, it is the right member at differential equation.
Definition: pzbndcond.h:42
void Write(TPZStream &buf, int withclassid) const override
Writes this object to the TPZStream buffer. Include the classid if withclassid = true.
Definition: pzbndcond.cpp:30
void SetValFunction(void(*fp)(TPZVec< REAL > &loc, TPZFMatrix< STATE > &Val1, TPZVec< STATE > &Val2, int &BCType))
Definition: pzbndcond.h:163
TPZFNMatrix< 6, STATE > fBCVal2
second value of boundary condition
Definition: pzbndcond.h:39
virtual void FillDataRequirements(TPZMaterialData &data) override
Calls the aggregate material correspondent function.
Definition: pzbndcond.cpp:288
void SetBCForcingFunction(int loadcase, TPZAutoPointer< TPZFunction< STATE > > func)
Definition: pzbndcond.h:207
int Dimension() const override
Returns the integrable dimension of the material.
Definition: pzbndcond.h:240
void SetForcingFunction(TPZAutoPointer< TPZFunction< STATE > > fp)
Sets a procedure as source function for the material.
Definition: TPZMaterial.h:368
void Read(TPZStream &buf, void *context) override
read objects from the stream
Definition: pzbndcond.cpp:20
virtual void Clone(std::map< int, TPZMaterial * > &matvec) override
Creates a copy of the material object and put it in the vector which is passed on.
Definition: pzbndcond.cpp:40
TPZBndCond(TPZMaterial *material, int id, int type, TPZFMatrix< STATE > &val1, TPZFMatrix< STATE > &val2)
Definition: pzbndcond.h:136
TPZAutoPointer< TPZFunction< STATE > > fForcingFunction
Pointer to forcing function, it is the right member at differential equation.
Definition: TPZMaterial.h:47
int Id() const
Definition: TPZMaterial.h:170
void Fill(const T &copy, const int64_t from=0, const int64_t numelem=-1)
Will fill the elements of the vector with a copy object.
Definition: pzvec.h:460
void SetTimedependentBCForcingFunction(int loadcase, TPZAutoPointer< TPZFunction< STATE > > func)
Definition: pzbndcond.h:217
void SetForcingFunctionExact(int loadcase, TPZAutoPointer< TPZFunction< STATE > > func)
Definition: pzbndcond.h:177
virtual void Print(std::ostream &out) const
Definition: pzmatrix.h:253
void SetTimeDependentFunctionExact(TPZAutoPointer< TPZFunction< STATE > > fp)
Sets a procedure as time dependent exact solution for the problem.
Definition: TPZMaterial.h:433
Defines the interface for saving and reading data. Persistency.
Definition: TPZStream.h:50
Contains the declaration of TPZFlopCounter class and TPZCounter struct.
Contains the TPZDiscontinuousGalerkin class which implements the interface for discontinuous Galerkin...
This class defines the interface to save and restore objects from TPZStream objects. Persistency.
Definition: TPZSavable.h:67
void SetLoadCases(TPZVec< TPZFMatrix< STATE > > &val2vec)
Definition: pzbndcond.h:265
TPZFNMatrix< 3, STATE > fBCVal2
second value of boundary condition
Definition: pzbndcond.h:102
void SetForcingFunction(int loadcase, TPZAutoPointer< TPZFunction< STATE > > func)
Definition: pzbndcond.h:167
TPZ_BCDefine(TPZFMatrix< STATE > Val2)
Definition: pzbndcond.h:64
TPZMaterial * Material() const
Definition: pzbndcond.h:263
TPZAutoPointer< TPZFunction< STATE > > fTimeDependentForcingFunction
Pointer to time dependent forcing function, it is the right member at differential equation...
Definition: TPZMaterial.h:53
This class implements a reference counter mechanism to administer a dynamically allocated object...