NeoPZ
pzreferredcompel.cpp
Go to the documentation of this file.
1 
6 #include "pzreferredcompel.h"
7 #include "pzelctemp.h"
8 #include "pzintel.h"
9 #include "TPZCompElDisc.h"
10 #include "TPZInterfaceEl.h"
11 
12 #include "pzquad.h"
13 #include "TPZGeoElement.h"
14 #include "pzgeopoint.h"
15 #include "pzshapepoint.h"
16 #include "TPZGeoLinear.h"
17 #include "pzshapelinear.h"
18 #include "pzgeoquad.h"
19 #include "pzshapequad.h"
20 #include "pzgeotriangle.h"
21 #include "pzshapetriang.h"
22 #include "TPZGeoCube.h"
23 #include "pzshapecube.h"
24 #include "pzgeoprism.h"
25 #include "pzshapeprism.h"
26 #include "pzgeopyramid.h"
27 #include "pzshapepiram.h"
28 #include "pzgeotetrahedra.h"
29 #include "pzshapetetra.h"
30 
31 #include "TPZMaterial.h"
32 #include "pzelmat.h"
33 #include "pzgeoel.h"
34 #include "pzcmesh.h"
35 
36 #include "pzlog.h"
37 
38 #include "tpzcompmeshreferred.h"
39 
40 #ifdef PZDEBUG
41 #define DEBUG2
42 #endif
43 
44 
45 #ifdef LOG4CXX
46 static LoggerPtr logger(Logger::getLogger("pz.mesh.tpzcompel"));
47 #endif
48 
49 using namespace std;
50 
51 template<class TVar>
53 {
54  int64_t nu1 = u1.NElements(), nu2 = u2.NElements();
55  u12.Resize(nu1 + nu2);
56  int64_t i;
57  for (i = 0; i<nu1; i++) u12[i] = u1[i];
58  for (i = 0; i<nu2; i++) u12[i + nu1] = u2[i];
59 }
60 
61 template<class TVar>
63 {
64  int64_t ru1 = u1.Rows(), cu1 = u1.Cols(), ru2 = u2.Rows(), cu2 = u2.Cols();
65  int64_t ru12 = ru1 < ru2 ? ru2 : ru1;
66  int64_t cu12 = cu1 + cu2;
67  u12.Redim(ru12, cu12);
68  int64_t i, j;
69  for (i = 0; i<ru1; i++) for (j = 0; j<cu1; j++) u12(i, j) = u1(i, j);
70  for (i = 0; i<ru2; i++) for (j = 0; j<cu2; j++) u12(i, j + cu1) = u2(i, j);
71 }
72 
73 bool AreEqual(const TPZVec<REAL> &A, const TPZVec<REAL> &B, REAL tol) {
74  if (A.NElements() != B.NElements()) return false;
75  int64_t i;
76  const int64_t n = A.NElements();
77  for (i = 0; i < n; i++) {
78  if (fabs(A[i] - B[i]) > tol) return false;
79  }
80  return true;
81 }
82 
83 template< class TCOMPEL>
85  TPZCompMesh * cmesh = this->Mesh();
86  TPZCompMeshReferred * refmesh = dynamic_cast<TPZCompMeshReferred*>(cmesh);
87  if (!refmesh) return NULL;
88  TPZCompEl * other = refmesh->ReferredEl( this->Index() );
89 // if(!other) DebugStop();
90  return other;
91 }
92 
93 template< class TCOMPEL>
94 void TPZReferredCompEl<TCOMPEL>::Print(std::ostream & out) const{
95  out << "\n" << __PRETTY_FUNCTION__ << "\n";
96  TCOMPEL::Print(out);
97 
98  TPZCompMesh * cmesh = this->Mesh();
99  TPZCompMeshReferred * refmesh = dynamic_cast<TPZCompMeshReferred*>(cmesh);
100  if (refmesh){
101  TPZCompEl * other = refmesh->ReferredEl( this->Index() );
102  out << "My ReferredEl = " << other << "\n";
103  }
104  else out << "My ReferredEl = " << 0 << "\n";
105  out << "end of " << __PRETTY_FUNCTION__ << "\n";
106 }//void
107 
108 template<class TCOMPEL>
110 TCOMPEL(mesh, gel,index){
111 
112 }//method
113 
114 template<class TCOMPEL>
116 TCOMPEL(){
117 
118 }//method
119 
120 template<class TCOMPEL>
122 TCOMPEL(mesh,copy){
123 
124 }//method
125 
126 template<class TCOMPEL>
128  const TPZReferredCompEl<TCOMPEL> &copy,
129  std::map<int64_t,int64_t> & gl2lcConMap,
130  std::map<int64_t,int64_t> & gl2lcElMap):
132 TCOMPEL(mesh,copy,gl2lcConMap,gl2lcElMap)
133 {
134 
135 }//method
136 
137 template<class TCOMPEL>
139 
140 }//method
141 
142 template <>
144  TPZGradSolVec &dsol, TPZFMatrix<REAL> &axes)
145 {
146  DebugStop();
147 }
148 
149 template < class TCOMPEL >
151  TPZGradSolVec &dsol, TPZFMatrix<REAL> &axes)
152 {
153  TCOMPEL * other = dynamic_cast<TCOMPEL *> (this->ReferredElement());
154  if (!other) return;
155 
156  TPZSolVec ThisSol(sol);
157  TPZGradSolVec ThisDSol(dsol);
158 
159  TPZMaterialData otherdata;
160  other->InitMaterialData(otherdata);
161  other->ComputeShape(qsi,otherdata);
162  other->ComputeSolution(qsi,otherdata);
163 // TPZSolVec OtherSol;
164 // TPZGradSolVec OtherDSol;
165  TPZGradSolVec OtherDSol2;
166 // TPZFNMatrix<9> otheraxes(3,3,0.);
167 // other->ComputeSolution(qsi, OtherSol, OtherDSol, otheraxes);
168  int64_t numbersol = sol.size();
169  OtherDSol2.resize(numbersol);
170  for (int64_t is=0; is<numbersol; is++) {
171  if(sol[is].NElements()){
172  AdjustSolutionDerivatives(otherdata.dsol[is],otherdata.axes,OtherDSol2[is],axes);
173  }
174  else if(otherdata.sol[is].NElements()){
175  OtherDSol2[is] = otherdata.dsol[is];
176 // OtherDSol2[is] = OtherDSol[is];
177  axes = otherdata.axes;
178  }
179  ::Append(ThisSol[is],otherdata.sol[is],sol[is]);
180  ::Append(ThisDSol[is],OtherDSol2[is],dsol[is]);
181  }
182 }
183 
184 template < class TCOMPEL >
186 {
187  TCOMPEL * other = dynamic_cast<TCOMPEL *> (this->ReferredElement());
188  if (!other) return;
189 
190  TPZSolVec ThisSol(sol);
191 
192  TPZSolVec OtherSol;
193  TPZGradSolVec OtherDSol;
194  TPZFNMatrix<9> otheraxes(3,3,0.);
195  other->ComputeSolution(qsi, OtherSol, OtherDSol, otheraxes);
196  int64_t numbersol = sol.size();
197  for (int64_t is=0; is<numbersol; is++) {
198  ::Append(ThisSol[is],OtherSol[is],sol[is]);
199  }
200 }
201 
202 template < class TCOMPEL >
204  TPZGradSolVec&dsol, const TPZFMatrix<REAL> &axes)
205 {
206  TCOMPEL * other = dynamic_cast<TCOMPEL *> (this->ReferredElement());
207  if (!other) return;
208 
209  TPZSolVec ThisSol(sol);
210  TPZGradSolVec ThisDSol(dsol);
211  int64_t numbersol = sol.size();
212 
213  TPZSolVec OtherSol;
214  TPZGradSolVec OtherDSol,OtherDSol2(numbersol);
215  TPZFNMatrix<9> otheraxes(3,3,0.);
216  other->ComputeSolution(qsi, OtherSol, OtherDSol, otheraxes);
217  for (int64_t is=0; is<numbersol; is++) {
218  if(sol[is].NElements()){
219  AdjustSolutionDerivatives(OtherDSol[is],otheraxes,OtherDSol2[is],axes);
220  }
221  else if(OtherSol[is].NElements()){
222  OtherDSol2[is] = OtherDSol[is];
223  //axes = otheraxes;
224  }
225  ::Append(ThisSol[is],OtherSol[is],sol[is]);
226  ::Append(ThisDSol[is],OtherDSol2[is],dsol[is]);
227  }
228 }
229 
230 template < class TCOMPEL >
232  TPZVec<REAL> &normal,
233  TPZSolVec &leftsol, TPZGradSolVec &dleftsol, TPZFMatrix<REAL> &leftaxes,
234  TPZSolVec &rightsol, TPZGradSolVec &drightsol,TPZFMatrix<REAL> &rightaxes){
235  TCOMPEL * other = dynamic_cast<TCOMPEL *> (this->ReferredElement());
236  if (!other) return;
237 
238  TPZSolVec ThisLeftSol(leftsol), ThisRightSol(rightsol);
239  TPZGradSolVec ThisDLeftSol(dleftsol), ThisDRightSol(drightsol);
240 
241  TPZSolVec OtherLeftSol(0), OtherRightSol(0);
242  TPZManVector<REAL,3> OtherNormal(0);
243  TPZGradSolVec OtherDSol2(0), OtherDLeftSol(0), OtherDLeftSol2(0), OtherDRightSol(0), OtherDRightSol2(0);
244  TPZFNMatrix<9> OtherLeftAxes(3,3,0.), OtherRightAxes(3,3,0.);
245  other->ComputeSolution(qsi, OtherNormal,
246  OtherLeftSol, OtherDLeftSol, OtherLeftAxes,
247  OtherRightSol, OtherDRightSol, OtherRightAxes);
248 
249  if (OtherLeftSol.NElements() || OtherRightSol.NElements()) {//it means other has solution left/right
250  if (normal.NElements() && OtherNormal.NElements()){ //then both element must have same normal
251  if ( !AreEqual(normal,OtherNormal) ) {
252  PZError << "\nFATAL ERROR at " << __PRETTY_FUNCTION__ << "\n";
253  }
254  }
255  if (normal.NElements() == 0) {//however, this may be a interpolationspace and other is an interface.
256  normal = OtherNormal;//Then OtherNormal is the corret value
257  }//if (normal.NElements() == 0)
258  }//if other has solution
259 
260  int64_t numbersol = ThisLeftSol.size();
261  for (int64_t is=0; is<numbersol; is++) {
262  if(leftsol.NElements()){
263  AdjustSolutionDerivatives(OtherDLeftSol[is],OtherLeftAxes,OtherDLeftSol2[is],leftaxes);
264  }
265  else if(OtherLeftSol.NElements()){
266  OtherDLeftSol2[is] = OtherDLeftSol[is];
267  leftaxes = OtherLeftAxes;
268  }
269 
270  if(rightsol.NElements()){
271  AdjustSolutionDerivatives(OtherDRightSol[is],OtherRightAxes,OtherDRightSol2[is],rightaxes);
272  }
273  else if(OtherRightSol.NElements()){
274  OtherDRightSol2[is] = OtherDRightSol[is];
275  rightaxes = OtherRightAxes;
276  }
277  ::Append(ThisLeftSol[is], OtherLeftSol[is], leftsol[is]);
278  ::Append(ThisDLeftSol[is], OtherDLeftSol[is], dleftsol[is]);
279  ::Append(ThisRightSol[is], OtherRightSol[is], rightsol[is]);
280  ::Append(ThisDRightSol[is], OtherDRightSol[is], drightsol[is]);
281  }
282 }
283 
284 template < >
287 }
288 
289 template< class TCOMPEL >
292 }
293 
294 /*
295 template< class TCOMPEL >
296 void TPZReferredCompEl< TCOMPEL >::ComputeSolution(TPZVec<REAL> &qsi,
297  TPZFMatrix<REAL> &phi,
298  TPZFMatrix<REAL> &dphix,
299  const TPZFMatrix<REAL> &axes,
300  TPZSolVec &sol,
301  TPZGradSolVec &dsol){
302  TCOMPEL::ComputeSolution(qsi, phi, dphix, axes, sol, dsol);
303  this->AppendOtherSolution(qsi, sol, dsol, axes);
304 }//method
305 */
306 
316 template< class TCOMPEL >
318 {
319  TCOMPEL::ComputeSolution(qsi,data);
321  {
322  this->AppendOtherSolution(qsi,data.sol,data.dsol,data.axes);
323  }
324  else
325  {
326  this->AppendOtherSolution(qsi,data.sol);
327  }
328 }
329 
330 
331 template< class TCOMPEL >
333  TPZVec<REAL> &normal,
334  TPZSolVec &leftsol, TPZGradSolVec &dleftsol, TPZFMatrix<REAL> &leftaxes,
335  TPZSolVec &rightsol, TPZGradSolVec &drightsol,TPZFMatrix<REAL> &rightaxes){
336  TCOMPEL::ComputeSolution(qsi, normal, leftsol, dleftsol, leftaxes, rightsol, drightsol, rightaxes);
337  this->AppendOtherSolution(qsi, normal, leftsol, dleftsol, leftaxes, rightsol, drightsol, rightaxes);
338 }
339 
340 template<class TCOMPEL>
342  return Hash("TPZReferredCompEl") ^ TCOMPEL::ClassId() << 1;
343 }
344 
346  TPZFMatrix<STATE> &dsolto, const TPZFMatrix<REAL> &axesto)
347 {
348  TPZFNMatrix<9> axesinner, axesfromlocal;
349  axesfrom.Transpose(&axesfromlocal);
350  axesto.MultAdd(axesfromlocal,axesinner,axesinner,1.,0.);
351  int64_t nderiv = dsolfrom.Rows();
352  int64_t nstate = dsolfrom.Cols();
353  dsolto.Resize(nderiv,nstate);
354  int64_t id,jd,is;
355  for(is=0; is<nstate; is++)
356  {
357  TPZManVector<STATE> dval(nderiv,0.);
358  for(id=0; id<nderiv; id++)
359  {
360  for(jd=0; jd<nderiv; jd++)
361  {
362  dval[id] += dsolfrom(jd,is)*(STATE)axesinner(id,jd);
363  }
364  }
365  for(id=0; id<nderiv; id++)
366  {
367  dsolto(id,is) = dval[id];
368  }
369  }
370 }
371 
372 
373 
374 using namespace pzshape;
375 using namespace pzgeom;
376 
387 
398 
399 TPZCompEl * CreateReferredPointEl(TPZGeoEl *gel,TPZCompMesh &mesh,int64_t &index) {
400  return new TPZReferredCompEl< TPZIntelGen<TPZShapePoint> >(mesh,gel,index);
401 }
402 
403 TPZCompEl * CreateReferredLinearEl(TPZGeoEl *gel,TPZCompMesh &mesh,int64_t &index) {
404  return new TPZReferredCompEl< TPZIntelGen<TPZShapeLinear> >(mesh,gel,index);
405 }
406 
407 TPZCompEl * CreateReferredQuadEl(TPZGeoEl *gel,TPZCompMesh &mesh,int64_t &index) {
408  return new TPZReferredCompEl< TPZIntelGen<TPZShapeQuad> >(mesh,gel,index);
409 }
410 
412  return new TPZReferredCompEl< TPZIntelGen<TPZShapeTriang> >(mesh,gel,index);
413 }
414 
415 TPZCompEl * CreateReferredCubeEl(TPZGeoEl *gel,TPZCompMesh &mesh,int64_t &index) {
416  return new TPZReferredCompEl< TPZIntelGen<TPZShapeCube> >(mesh,gel,index);
417 }
418 
419 TPZCompEl * CreateReferredPrismEl(TPZGeoEl *gel,TPZCompMesh &mesh,int64_t &index) {
420  return new TPZReferredCompEl< TPZIntelGen<TPZShapePrism> >(mesh,gel,index);
421 }
422 
423 TPZCompEl * CreateReferredPyramEl(TPZGeoEl *gel,TPZCompMesh &mesh,int64_t &index) {
424  return new TPZReferredCompEl< TPZIntelGen<TPZShapePiram> >(mesh,gel,index);
425 }
426 
427 TPZCompEl * CreateReferredTetraEl(TPZGeoEl *gel,TPZCompMesh &mesh,int64_t &index) {
428  return new TPZReferredCompEl< TPZIntelGen<TPZShapeTetra> >(mesh,gel,index);
429 }
430 
431 TPZCompEl * CreateReferredDisc(TPZGeoEl *gel,TPZCompMesh &mesh,int64_t &index) {
432  return new TPZReferredCompEl< TPZCompElDisc >(mesh,gel,index);
433 }
434 
435 #include "pzelchdiv.h"
436 
444 
445 
453 
454 #include "pzelchdivbound2.h"
455 
460 
461 
466 
TPZCompEl * CreateReferredPyramEl(TPZGeoEl *gel, TPZCompMesh &mesh, int64_t &index)
Creates pyramidal referred computational element related with geometric element gel.
Contains TPZShapeTetra class which implements the shape functions of a tetrahedral element...
expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ fabs
Definition: tfadfunc.h:140
Contains the TPZInt1d, TPZIntTriang, TPZIntQuad, TPZIntCube3D, TPZIntTetra3D, TPZIntPyram3D and TPZIn...
Contains declaration of TPZIntelGen class which implements a generic computational element...
Contains definitions to LOGPZ_DEBUG, LOGPZ_INFO, LOGPZ_WARN, LOGPZ_ERROR and LOGPZ_FATAL, and the implementation of the inline InitializePZLOG(string) function using log4cxx library or not. It must to be called out of "#ifdef LOG4CXX" scope.
TPZCompEl * ReferredEl(int64_t index)
virtual void ComputeSolution(TPZVec< REAL > &qsi, TPZMaterialData &data) override
Computes solution and its derivatives in local coordinate qsi.
int ClassId() const override
virtual void resize(const int64_t newsize)
Definition: pzvec.h:213
void Append(TPZVec< TVar > &u1, TPZVec< TVar > &u2, TPZVec< TVar > &u12)
Append u2 vector after u1 vector in u12 vector.
groups all classes dedicated to the computation of shape functions
Definition: pzshapeextend.h:16
bool AreEqual(const TPZVec< REAL > &A, const TPZVec< REAL > &B, REAL tol)
Returns true whether for all the entries of the matrices.
TPZGradSolVec dsol
vector of the derivatives of the solution at the integration point
MShapeFunctionType fShapeType
TPZCompEl * CreateReferredTriangleEl(TPZGeoEl *gel, TPZCompMesh &mesh, int64_t &index)
Creates triangular referred computational element related with geometric element gel.
Contains declaration of TPZCompElHDiv class which implements a generic computational element (HDiv sc...
Contains TPZShapeLinear class which implements the shape functions of a linear one-dimensional elemen...
Contains declaration of TPZElementMatrix struct which associates an element matrix with the coeficien...
Contains TPZShapeCube class which implements the shape functions of a hexaedral element.
int64_t size() const
Returns the number of elements of the vector.
Definition: pzvec.h:196
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
void SetAllCreateFunctionsDiscontinuousReferred()
Definition: pzcmesh.h:513
static const double tol
Definition: pzgeoprism.cpp:23
Defines the behaviour of all geometric elements. GeometryTPZGeoEl is the common denominator for all g...
Definition: pzgeoel.h:43
Contains declaration of TPZCompMeshReferred class which implements the structure to allow one mesh to...
Contains the TPZGeoTetrahedra class which implements the geometry of a tetrahedral element...
#define DebugStop()
Returns a message to user put a breakpoint in.
Definition: pzerror.h:20
Contains declaration of TPZInterfaceElement class which computes the contribution over an interface b...
virtual void SetCreateFunctions(TPZCompMesh *mesh) override
Set create function in TPZCompMesh to create elements of this type.
Implements the structure to allow one mesh to refer to the solution of another. Geometry.
int64_t Rows() const
Returns number of rows.
Definition: pzmatrix.h:803
TPZFNMatrix< 9, REAL > axes
axes indicating the directions of the derivatives of the shapefunctions
Contains declaration of TPZCompelDisc class which implements a computational element for discontinuou...
Contains TPZShapePoint class which implements the shape function associated with a point...
Contains declaration of TPZCompMesh class which is a repository for computational elements...
Full matrix class. Matrix.
Definition: pzfmatrix.h:32
int Redim(const int64_t newRows, const int64_t newCols) override
Redimension a matrix and ZERO your elements.
Definition: pzfmatrix.h:616
Contains the TPZGeoCube class which implements the geometry of hexahedra element. ...
int32_t Hash(std::string str)
Definition: TPZHash.cpp:10
Contains the TPZGeoPoint class which implements the geometry of a point element or 0-D element...
Contains TPZShapePrism class which implements the shape functions of a prism element.
void AppendOtherSolution(TPZVec< REAL > &qsi, TPZSolVec &sol, TPZGradSolVec &dsol, TPZFMatrix< REAL > &axes)
Append solution of the referred element.
~TPZReferredCompEl()
Class destructor.
TPZCompEl * CreateReferredPointEl(TPZGeoEl *gel, TPZCompMesh &mesh, int64_t &index)
Creates point referred computational element related with geometric element gel.
virtual void Print(std::ostream &out=std::cout) const override
Prints element data.
TPZCompEl * CreateReferredTetraEl(TPZGeoEl *gel, TPZCompMesh &mesh, int64_t &index)
Creates tetrahedral referred computational element related with geometric element gel...
Contains declaration of TPZCompElHDivBound2 class which implements a generic computational element (H...
Template to generate computational elements. Computational Element.
Implements computational mesh. Computational Mesh.
Definition: pzcmesh.h:47
TPZCompEl * CreateReferredQuadEl(TPZGeoEl *gel, TPZCompMesh &mesh, int64_t &index)
Creates quadrilateral referred computational element related with geometric element gel...
TPZCompEl * CreateReferredLinearEl(TPZGeoEl *gel, TPZCompMesh &mesh, int64_t &index)
Creates linear referred computational element related with geometric element gel. ...
Contains declaration of TPZInterpolatedElement class which implements computational element of the in...
virtual void MultAdd(const TPZFMatrix< TVar > &x, const TPZFMatrix< TVar > &y, TPZFMatrix< TVar > &z, const TVar alpha=1., const TVar beta=0., const int opt=0) const override
It computes z = beta * y + alpha * opt(this)*x but z and x can not overlap in memory.
Definition: pzfmatrix.cpp:757
int64_t Cols() const
Returns number of cols.
Definition: pzmatrix.h:809
int Resize(const int64_t newRows, const int64_t wCols) override
Redimension a matrix, but maintain your elements.
Definition: pzfmatrix.cpp:1016
Contains TPZShapePiram class which implements the shape functions of a pyramid element.
Contains the TPZGeoPyramid class which implements the geometry of pyramid element.
TPZCompEl * CreateReferredCubeEl(TPZGeoEl *gel, TPZCompMesh &mesh, int64_t &index)
Creates cube referred computational element related with geometric element gel.
int64_t NElements() const
Returns the number of elements of the vector.
Definition: pzvec.h:190
void SetAllCreateFunctionsContinuousReferred()
Definition: pzcmesh.h:518
Contains the TPZGeoPrism class which implements the geometry of a prism element.
Contains declaration of TPZReferredCompEl class which generates computational elements.
Contains declaration of TPZGeoElement class which implements a generic geometric element with a unifo...
TPZCompEl * ReferredElement()
Returns referred element of this.
TPZCompEl * CreateReferredPrismEl(TPZGeoEl *gel, TPZCompMesh &mesh, int64_t &index)
Creates prismal referred computational element related with geometric element gel.
Groups all classes which model the geometry.
Definition: pzgeopoint.cpp:18
Defines the interface of a computational element. Computational Element.
Definition: pzcompel.h:59
TPZSolVec sol
vector of the solutions at the integration point
TPZCompEl * CreateReferredDisc(TPZGeoEl *gel, TPZCompMesh &mesh, int64_t &index)
Creates discontinuous referred computational element related with geometric element gel...
Contains TPZShapeQuad class which implements the shape functions of a quadrilateral element...
void Transpose(TPZMatrix< TVar > *const T) const override
It makes *T the transpose of current matrix.
Definition: pzfmatrix.cpp:1073
Contains TPZShapeTriang class which implements the shape functions of a triangular element...
Implements an interface to register a class id and a restore function. Persistence.
Definition: TPZSavable.h:150
#define PZError
Defines the output device to error messages and the DebugStop() function.
Definition: pzerror.h:15
void AdjustSolutionDerivatives(TPZFMatrix< STATE > &dsolfrom, TPZFMatrix< REAL > &axesfrom, TPZFMatrix< STATE > &dsolto, const TPZFMatrix< REAL > &axesto)
Adjust the derivatives from one system of axes to the other.