LifeV
fsi_blocks/solver/ExpressionDefinitions.hpp
Go to the documentation of this file.
1 //@HEADER
2 /*
3 *******************************************************************************
4 
5  Copyright (C) 2004, 2005, 2007 EPFL, Politecnico di Milano, INRIA
6  Copyright (C) 2010 EPFL, Politecnico di Milano, Emory University
7 
8  This file is part of LifeV.
9 
10  LifeV is free software; you can redistribute it and/or modify
11  it under the terms of the GNU Lesser General Public License as published by
12  the Free Software Foundation, either version 3 of the License, or
13  (at your option) any later version.
14 
15  LifeV is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  Lesser General Public License for more details.
19 
20  You should have received a copy of the GNU Lesser General Public License
21  along with LifeV. If not, see <http://www.gnu.org/licenses/>.
22 
23 *******************************************************************************
24 */
25 //@HEADER
26 
27 /*!
28  @file
29  @brief File containing the procedures for the local assembly of the differential operators
30 
31  @author Gianmarco Mengaldo <gianmarco.mengaldo@gmail.com>
32  @author Paolo Tricerri <gianmarco.mengaldo@gmail.com>
33  @mantainer Paolo Tricerri <paolo.tricerri@epfl.ch>
34 
35  All the methods are described in the report StructuralSolver framework in LifeV: Description and Usage
36  */
37 
38 
39 #ifndef _EXPRESSIONDEFINITIONS_H_
40 #define _EXPRESSIONDEFINITIONS_H_
41 
42 #include <string>
43 #include <iostream>
44 
45 #include <lifev/core/LifeV.hpp>
46 
47 #include <lifev/core/array/MatrixSmall.hpp>
48 #include <lifev/core/array/VectorSmall.hpp>
49 
50 #include <lifev/core/array/MatrixEpetra.hpp>
51 #include <lifev/core/array/VectorEpetra.hpp>
52 
53 #include <lifev/eta/fem/ETFESpace.hpp>
54 #include <lifev/eta/expression/Integrate.hpp>
55 
56 #pragma GCC diagnostic ignored "-Wunused-variable"
57 #pragma GCC diagnostic ignored "-Wunused-parameter"
58 
59 #include <boost/shared_ptr.hpp>
60 
61 #pragma GCC diagnostic warning "-Wunused-variable"
62 #pragma GCC diagnostic warning "-Wunused-parameter"
63 
64 namespace LifeV
65 {
66 
67 typedef RegionMesh<LinearTetra> MeshType;
68 typedef ETFESpace<MeshType, MapEpetra, 3, 3 > ETFESpace_Type;
69 typedef ETFESpace<MeshType, MapEpetra, 3, 1 > scalarETFESpace_Type;
70 typedef VectorEpetra vector_Type;
71 typedef MatrixSmall<3,3> matrixSmall_Type;
72 
73 /*! /namespace ExpressionDefinitions
74 
75  This namespace is specially designed to contain the elementary
76  operations (corresponding to differential operators) that build
77  the local contributions to be used in the assembly procedures.
78 
79 */
80 namespace ExpressionDefinitions
81 {
82 
83 using namespace ExpressionAssembly;
84 
85 //! @name Public typedefs
86 //@{
87 
88 // Definition of F = \grad(displacement) + I
89 typedef ExpressionAddition<
90  ExpressionInterpolateGradient<MeshType, MapEpetra, 3, 3>, ExpressionMatrix<3,3> > deformationGradient_Type;
91 
92 // Definition of J = det(F)
93 typedef ExpressionDeterminant<
94  ExpressionAddition< ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > > determinantTensorF_Type;
95 
96 // Definition of the right Cauchy-Green tensor C = F^{T} * F
97 typedef ExpressionProduct<
98  ExpressionTranspose<
99  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > >,
100  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> >
101  > rightCauchyGreenTensor_Type;
102 
103 // Definition of the tensor F^{-T}
104 typedef ExpressionMinusTransposed<
105  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > > minusTransposedTensor_Type;
106 
107 // Used later specially in the multi-mechanism
108 // Definition of the tensor F^{-1}
109 typedef ExpressionInverse<
110  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > > inverseTensor_Type;
111 
112 
113 // Definition of the trace of the tensor C
114 typedef ExpressionTrace<
115  ExpressionProduct<ExpressionTranspose<ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > >,
116  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > >
117  > traceTensor_Type;
118 
119 // Definition of the trace of the tensor C^2 = C:C = tr(C^2)
120 typedef ExpressionDot<
121  ExpressionProduct<
122  ExpressionTranspose<
123  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > >,
124  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > >,
125  ExpressionProduct<
126  ExpressionTranspose<
127  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > >,
128  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > > > traceSquaredTensor_Type;
129 
130 // Definition of the power of J ( specifically J^(-2.0/3.0) )
131 typedef ExpressionPower<
132  ExpressionDeterminant<
133  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > > > powerExpression_Type;
134 
135 // Definition of the power of J ( specifically J^(-2.0/3.0) )
136 typedef ExpressionIsochoricChangeOfVariable< determinantTensorF_Type> isochoricChangeOfVariable_Type;
137 
138 // Definition of the isochoric trace \bar{I_C} = J^( -2.0/3.0)*tr(C))
139 typedef ExpressionProduct<
140  ExpressionPower<
141  ExpressionDeterminant< ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > > >,
142  ExpressionTrace<
143  ExpressionProduct<
144  ExpressionTranspose<ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > >,
145  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > > > > isochoricTrace_Type;
146 
147 
148  // Typedefs for anisotropic laws
149  typedef ExpressionInterpolateValue<MeshType, MapEpetra, 3, 3> interpolatedValue_Type;
150 
151  typedef ExpressionInterpolateValue<MeshType, MapEpetra, 3, 1> interpolatedScalarValue_Type;
152 
153  typedef ExpressionOuterProduct<
154  ExpressionInterpolateValue<MeshType, MapEpetra, 3, 3>,
155  ExpressionInterpolateValue<MeshType, MapEpetra, 3, 3> > outerProduct_Type;
156 
157  typedef ExpressionDot<
158  ExpressionProduct<
159  ExpressionTranspose<
160  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > >,
161  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > >,
162  ExpressionOuterProduct<
163  ExpressionInterpolateValue<MeshType, MapEpetra, 3, 3 >, ExpressionInterpolateValue<MeshType, MapEpetra, 3, 3 > > > stretch_Type;
164 
165  typedef ExpressionProduct<
166  ExpressionPower<
167  ExpressionDeterminant<
168  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > > >,
169 
170  ExpressionDot<
171  ExpressionProduct<
172  ExpressionTranspose<
173  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > >,
174  ExpressionAddition<ExpressionInterpolateGradient<MeshType, MapEpetra,3,3>, ExpressionMatrix<3,3> > >,
175  ExpressionOuterProduct<
176  ExpressionInterpolateValue<MeshType, MapEpetra, 3, 3 >, ExpressionInterpolateValue<MeshType, MapEpetra, 3, 3 > > > > isochoricStretch_Type;
177 
178 //@}
179 
180  deformationGradient_Type deformationGradient( const std::shared_ptr< ETFESpace_Type > dispETFESpace,
181  const vector_Type& disp, UInt offset, const matrixSmall_Type identity);
182 
183  determinantTensorF_Type determinantF( const deformationGradient_Type F );
184 
185  rightCauchyGreenTensor_Type tensorC( const ExpressionTranspose<deformationGradient_Type> tF, const deformationGradient_Type F );
186 
187  minusTransposedTensor_Type minusT( const deformationGradient_Type F );
188 
189  inverseTensor_Type inv( const deformationGradient_Type F );
190 
191  traceTensor_Type traceTensor( const rightCauchyGreenTensor_Type C );
192 
193  traceSquaredTensor_Type traceSquared( const rightCauchyGreenTensor_Type C );
194 
195  powerExpression_Type powerExpression( const determinantTensorF_Type J, const Real exponent );
196 
197  isochoricChangeOfVariable_Type isochoricDeterminant( const determinantTensorF_Type J );
198 
199  isochoricTrace_Type isochoricTrace( const powerExpression_Type Jel, const traceTensor_Type I );
200 
201 // Constructors for anisotropic laws
202  interpolatedValue_Type interpolateFiber( const std::shared_ptr< ETFESpace_Type > dispETFESpace,
203  const vector_Type& fiberVector);
204 
205  interpolatedValue_Type interpolateValue( const std::shared_ptr< ETFESpace_Type > dispETFESpace,
206  const vector_Type& valueVector);
207 
208  interpolatedScalarValue_Type interpolateScalarValue( const std::shared_ptr< scalarETFESpace_Type > dispETFESpace,
209  const vector_Type& valueVector);
210 
211  outerProduct_Type fiberTensor( const interpolatedValue_Type ithFiber );
212 
213  stretch_Type fiberStretch( const rightCauchyGreenTensor_Type C, const outerProduct_Type M);
214 
215  isochoricStretch_Type isochoricFourthInvariant( const powerExpression_Type Jel, const stretch_Type I_4ith);
216 } //! End namespace ExpressionDefinitions
217 
218 
219 //! The namespace ExpressionDistributedModel is specific for the Dstributed Holzapfel model
220 //! the definitions have been inserted here in order to avoid huge declarations of expressions
221 //! in the header file of the model
222 
223 //! The goal of the current namespace is just to define the expressions (final and intermediate)
224 //! that are needed for the distributed model making use of the previous namespaces already
225 //! defined.
226 
227 namespace ExpressionDistributedModel
228 {
229 using namespace ExpressionAssembly;
230 
231 //! @name Public typedefs
232 //@{
233 
234 // Definition of the expression which represents
235 // the derivative with respect to F of the distributed
236 // stretch of the fibers.
237 
238 // This typedef describes \kappa * trCBar
239 typedef ExpressionProduct< ExpressionScalar, ExpressionDefinitions::isochoricTrace_Type > distributedIsochoricTrace_Type;
240 
241 // This typedef describes ( 1 - 3 \kappa) * IVithBar
242 typedef ExpressionProduct< ExpressionScalar, ExpressionDefinitions::isochoricStretch_Type > distributedIsochoricStretch_Type;
243 
244 // This typedef describes \kappa * trCBar + ( 1 - 3 \kappa) * IVithBar
245 typedef ExpressionAddition<
246  distributedIsochoricTrace_Type,
247  distributedIsochoricStretch_Type > distributedInvariants_Type;
248 
249 // This typedef describes \kappa * trCBar + ( 1 - 3 \kappa) * IVithBar - 1.0
250 typedef ExpressionAddition<
251  distributedInvariants_Type,
252  ExpressionScalar> distributedStretch_Type;
253 
254 // Term that represents F^-T : dF
255 typedef ExpressionDot<
256  ExpressionDefinitions::minusTransposedTensor_Type, ExpressionDphiJ > minusTFscalarDF_distrType;
257 
258 // Term that represents F : dF
259 typedef ExpressionDot<
260  ExpressionDefinitions::deformationGradient_Type, ExpressionDphiJ > FscalarDF_distrType;
261 
262 // Term that represents dF^T F : M
263 typedef ExpressionDot<
264  ExpressionProduct< ExpressionTranspose<ExpressionDphiJ>, ExpressionDefinitions::deformationGradient_Type >,
265  ExpressionDefinitions::outerProduct_Type > dFTtimesFscalarM_distrType;
266 
267 // Term that represents F^T dF : M
268 typedef ExpressionDot<
269  ExpressionProduct< ExpressionTranspose<ExpressionDefinitions::deformationGradient_Type>, ExpressionDphiJ >,
270  ExpressionDefinitions::outerProduct_Type > FTtimesDFscalarM_distrType;
271 
272 /*
273  Term that represents the first derivative of the isochoric trace with respect to F
274  In formula:
275 
276  D_F( \bar(I_C) ) : dF = D_F( J^(-2.0/3.0) * I_C ) : dF =
277  ( -2.0/3.0 ) * \bar(I_C) F^{-T}:dF + 2 J^(-2.0/3.0) F:dF
278 */
279 
280 typedef ExpressionProduct< ExpressionScalar, ExpressionDefinitions::traceTensor_Type> scaledTrace_Type;
281 typedef ExpressionProduct< ExpressionScalar, ExpressionDefinitions::isochoricTrace_Type> scaledIsochoricTrace_Type;
282 typedef ExpressionProduct< ExpressionScalar, ExpressionDefinitions::powerExpression_Type> scaledDeterminant_Type;
283 
284 typedef ExpressionProduct< ExpressionScalar, ExpressionDefinitions::stretch_Type> scaledFourthInvariant_Type;
285 typedef ExpressionProduct< ExpressionScalar, ExpressionDefinitions::isochoricStretch_Type> scaledIsochoricFourthInvariant_Type;
286 
287 typedef ExpressionAddition<
288  ExpressionProduct< scaledIsochoricTrace_Type, minusTFscalarDF_distrType>,
289  ExpressionProduct< scaledDeterminant_Type, FscalarDF_distrType>
290  > linearizationFisochoricTrace_Type;
291 
292 /*
293  Term that represents the first derivative of the isochoric fourth invariant
294  In formula:
295 
296  D_F( \bar(I4^i) ) : dF = D_F( J^(-2.0/3.0) * I4^i ) : dF =
297  ( -2.0/3.0 ) * \bar(I4^i) F^{-T}:dF + J^(-2.0/3.0) ( dF^T F + F^T dF ): M
298 */
299 typedef ExpressionAddition<
300  ExpressionProduct< scaledIsochoricFourthInvariant_Type, minusTFscalarDF_distrType>,
301  ExpressionProduct< ExpressionDefinitions::powerExpression_Type,
302  ExpressionAddition<dFTtimesFscalarM_distrType, FTtimesDFscalarM_distrType > >
303  > linearizationFisochoricFourthInvariant_Type;
304 
305 /*
306  Term that represents the sum of the two linearizations to have the derivative
307  of the distributed stretch
308 */
309 
310 typedef ExpressionAddition<
311  ExpressionProduct< ExpressionScalar, linearizationFisochoricTrace_Type > ,
312  ExpressionProduct< ExpressionScalar, linearizationFisochoricFourthInvariant_Type >
313  > linearizationDistributedStretch_Type;
314 
315 //====================================================
316 
317 /*
318  Definition of the expression that is the tensorial part
319  of the first Piola-Kirchhoff tensor for this model
320 
321  In the derivation of the Piola-Kirchhoff tensor,
322  the tensorial part is of the form
323 
324  \kappa F - ( 1/3 )\kappa I_C F^{-T} +
325  + ( 1 - 3\kappa ) FM - ( (1-3\kappa) / 3 ) * I_4 * F^{-T}
326 */
327 typedef ExpressionProduct< ExpressionScalar, ExpressionDefinitions::deformationGradient_Type> scaledTensorF_Type;
328 typedef ExpressionProduct< scaledTrace_Type, ExpressionDefinitions::minusTransposedTensor_Type> scaledTraceTimesMinusTF_Type;
329 typedef ExpressionProduct< ExpressionScalar,
330  ExpressionProduct<
331  ExpressionDefinitions::deformationGradient_Type,
332  ExpressionDefinitions::outerProduct_Type> > scaledFtimesM_Type;
333 typedef ExpressionProduct< scaledFourthInvariant_Type,
334  ExpressionDefinitions::minusTransposedTensor_Type> scaledFourthInvariantTimesMinusTF_Type;
335 
336 typedef ExpressionAddition<
337  ExpressionAddition< scaledTensorF_Type, scaledTraceTimesMinusTF_Type >,
338  ExpressionAddition< scaledFtimesM_Type, scaledFourthInvariantTimesMinusTF_Type> > tensorialPart_distrType;
339 //====================================================
340 //@}
341 
342 // Constructors for the expressions defined by the typedefs
343 //@{
344 
345  distributedIsochoricTrace_Type distributedIsochoricTrace( const Real coeff, const ExpressionDefinitions::isochoricTrace_Type ICbar );
346 
347  distributedIsochoricStretch_Type distributedIsochoricFourthInvariant( const Real coeff, const ExpressionDefinitions::isochoricStretch_Type I4bar);
348 
349  distributedInvariants_Type distributeInvariants( const distributedIsochoricTrace_Type distrIC,
350  const distributedIsochoricStretch_Type distrI4 );
351 
352  distributedStretch_Type distributedStretch( const ExpressionDefinitions::isochoricTrace_Type trCBar,
353  const ExpressionDefinitions::isochoricStretch_Type I_4ith, const Real kappa );
354 
355  minusTFscalarDF_distrType minusTFscalarDF( const ExpressionDefinitions::minusTransposedTensor_Type minusFT);
356 
357  FscalarDF_distrType FscalarDF( const ExpressionDefinitions::deformationGradient_Type F );
358 
359  dFTtimesFscalarM_distrType dFTtimesFscalarM( const ExpressionDefinitions::deformationGradient_Type F,
360  const ExpressionDefinitions::outerProduct_Type M);
361 
362  FTtimesDFscalarM_distrType FTtimesDFscalarM( const ExpressionDefinitions::deformationGradient_Type F,
363  const ExpressionDefinitions::outerProduct_Type M);
364 
365  scaledTrace_Type scaleTrace( const Real coeff, const ExpressionDefinitions::traceTensor_Type tr );
366 
367  scaledIsochoricTrace_Type scaleIsochoricTrace( const Real coeff, const ExpressionDefinitions::isochoricTrace_Type isoTr );
368 
369  scaledDeterminant_Type scaleDeterminant( const Real coeff, const ExpressionDefinitions::powerExpression_Type Jel );
370 
371  scaledFourthInvariant_Type scaleFourthInvariant( const Real coeff, const ExpressionDefinitions::stretch_Type I4 );
372 
373  scaledIsochoricFourthInvariant_Type scaleIsochoricFourthInvariant( const Real coeff, const ExpressionDefinitions::isochoricStretch_Type isoI4 );
374 
375  linearizationFisochoricTrace_Type derivativeIsochoricTrace( const ExpressionDefinitions::isochoricTrace_Type isoTr,
376  const ExpressionDefinitions::powerExpression_Type Jel,
377  const ExpressionDefinitions::deformationGradient_Type F,
378  const ExpressionDefinitions::minusTransposedTensor_Type F_T);
379 
380  linearizationFisochoricFourthInvariant_Type derivativeIsochoricFourthInvariant( const ExpressionDefinitions::isochoricStretch_Type isoI4,
381  const ExpressionDefinitions::powerExpression_Type Jel,
382  const ExpressionDefinitions::deformationGradient_Type F,
383  const ExpressionDefinitions::minusTransposedTensor_Type F_T,
384  const ExpressionDefinitions::outerProduct_Type M);
385 
386  linearizationDistributedStretch_Type derivativeDistributedStretch( const Real kappa,
387  const ExpressionDefinitions::isochoricTrace_Type isoTr,
388  const ExpressionDefinitions::isochoricStretch_Type isoI4,
389  const ExpressionDefinitions::powerExpression_Type Jel,
390  const ExpressionDefinitions::deformationGradient_Type F,
391  const ExpressionDefinitions::minusTransposedTensor_Type F_T,
392  const ExpressionDefinitions::outerProduct_Type M);
393 
394  scaledTensorF_Type scaleF( const Real coeff, const ExpressionDefinitions::deformationGradient_Type F );
395 
396  scaledTraceTimesMinusTF_Type scaleTraceMinuTF( const Real coeff,
397  const ExpressionDefinitions::traceTensor_Type Ic,
398  const ExpressionDefinitions::minusTransposedTensor_Type F_T );
399 
400  scaledFtimesM_Type scaleFtimesM( const Real coeff,
401  const ExpressionDefinitions::deformationGradient_Type F,
402  const ExpressionDefinitions::outerProduct_Type M);
403 
404  scaledFourthInvariantTimesMinusTF_Type scaleI4timesMinutTF( const Real coeff,
405  const ExpressionDefinitions::stretch_Type I4,
406  const ExpressionDefinitions::minusTransposedTensor_Type F_T );
407 
408  tensorialPart_distrType tensorialPartPiola( const Real kappa,
409  const ExpressionDefinitions::traceTensor_Type tr,
410  const ExpressionDefinitions::stretch_Type I4,
411  const ExpressionDefinitions::deformationGradient_Type F,
412  const ExpressionDefinitions::minusTransposedTensor_Type F_T,
413  const ExpressionDefinitions::outerProduct_Type M);
414 //@}
415 
416 } // end namespace ExpressionDistributedModel
417 
418 // name space that is specific for the Anisotropic Multi-mechanism class.
419 namespace ExpressionMultimechanism
420 {
421 using namespace ExpressionAssembly;
422 
423 typedef ExpressionSubstraction<
424  ExpressionDefinitions::isochoricStretch_Type,
425  ExpressionScalar> difference_Type;
426 
427 typedef ExpressionSubstraction<
428  ExpressionDefinitions::stretch_Type,
429  ExpressionScalar> incompressibleDifference_Type;
430 
431 typedef ExpressionDivision<
432  incompressibleDifference_Type,
433  ExpressionScalar> relativeDifference_Type;
434 
435 typedef ExpressionArcTan<difference_Type> activation_Type;
436 
437 typedef ExpressionVectorFromNonConstantScalar< difference_Type, 3> expressionVectorFromDifference_Type;
438 typedef ExpressionVectorFromNonConstantScalar< incompressibleDifference_Type, 3> expressionVectorFromIncompressibleDifference_Type;
439 typedef ExpressionVectorFromNonConstantScalar< relativeDifference_Type, 3> expressionVectorFromRelativeDifference_Type;
440 
441 typedef ExpressionProduct< ExpressionDefinitions::deformationGradient_Type,
442  ExpressionDefinitions::inverseTensor_Type > deformationActivatedTensor_Type;
443 
444 typedef ExpressionProduct< ExpressionDefinitions::minusTransposedTensor_Type,
445  ExpressionTranspose<ExpressionDefinitions::deformationGradient_Type> > activeMinusTtensor_Type;
446 
447 
448 typedef ExpressionProduct<
449  ExpressionDefinitions::minusTransposedTensor_Type,
450  ExpressionProduct< ExpressionDefinitions::rightCauchyGreenTensor_Type,
451  ExpressionDefinitions::inverseTensor_Type > > rightCauchyGreenMultiMechanism_Type;
452 
453 typedef ExpressionProduct< ExpressionDefinitions::deformationGradient_Type,
454  ExpressionDefinitions::interpolatedValue_Type> activatedFiber_Type;
455 
456 typedef ExpressionDot< activatedFiber_Type, activatedFiber_Type > squaredNormActivatedFiber_Type;
457 
458 typedef ExpressionSquareRoot< squaredNormActivatedFiber_Type> normActivatedFiber_Type;
459 
460 typedef ExpressionNormalize<activatedFiber_Type> normalizedVector_Type;
461 
462 typedef ExpressionDivision< activatedFiber_Type, normActivatedFiber_Type> normalizedFiber_Type;
463 
464 typedef ExpressionDivision< ExpressionDefinitions::determinantTensorF_Type,
465  ExpressionDefinitions::interpolatedScalarValue_Type> activatedDeterminantF_Type;
466 
467 typedef ExpressionProduct< ExpressionDefinitions::determinantTensorF_Type,
468  ExpressionDefinitions::powerExpression_Type> activatedJ_Type;
469 
470 typedef ExpressionPower<activatedDeterminantF_Type > activePowerExpression_Type;
471 
472 typedef ExpressionIsochoricChangeOfVariable<activatedDeterminantF_Type > activeIsochoricDeterminant_Type;
473 
474 typedef ExpressionOuterProduct< activatedFiber_Type, activatedFiber_Type> activeOuterProduct_Type;
475 
476 typedef ExpressionOuterProduct< normalizedVector_Type, normalizedVector_Type> activeNormalizedOuterProduct_Type;
477 
478 typedef ExpressionDot< rightCauchyGreenMultiMechanism_Type, activeNormalizedOuterProduct_Type> activeStretch_Type;
479 
480  typedef ExpressionDot< rightCauchyGreenMultiMechanism_Type, ExpressionDefinitions::outerProduct_Type> activeInterpolatedFiberStretch_Type;
481 
482 typedef ExpressionProduct< activeIsochoricDeterminant_Type,
483  activeInterpolatedFiberStretch_Type> activeIsochoricStretch_Type;
484 
485 typedef ExpressionProduct< activeIsochoricDeterminant_Type,
486  activeStretch_Type> activeNoInterpolationStretch_Type;
487 
488 typedef ExpressionProduct< activePowerExpression_Type, activeStretch_Type> activePowerIsochoricStretch_Type;
489 
490 typedef ExpressionProduct< ExpressionDefinitions::deformationGradient_Type,
491  ExpressionDefinitions::interpolatedValue_Type> activatedFiber_Type;
492 
493 typedef ExpressionProduct< ExpressionDphiJ,
494  ExpressionDefinitions::inverseTensor_Type> activeLinearization_Type;
495 
496 
497 typedef ExpressionProduct< ExpressionDphiI,
498  ExpressionDefinitions::inverseTensor_Type> activeTestGradient_Type;
499 
500 
501 difference_Type absoluteStretch( const ExpressionDefinitions::isochoricStretch_Type IVbar,
502  const Real valueToSubtract);
503 
504 incompressibleDifference_Type incompressibleAbsoluteStretch(const ExpressionDefinitions::stretch_Type IV,
505  const Real valueToSubtract );
506 
507 relativeDifference_Type relativeDifference(const incompressibleDifference_Type difference,
508  const Real refFourthInvariant );
509 
510 
511 activation_Type activationConstructor( const ExpressionMultimechanism::difference_Type absoluteStretch,
512  const Real intCoeff,
513  const Real extCoeff,
514  const Real translation);
515 
516 expressionVectorFromDifference_Type vectorFromActivation( const ExpressionMultimechanism::difference_Type activation );
517 
518 expressionVectorFromIncompressibleDifference_Type vectorFromIncompressibleDifference(const
519  ExpressionMultimechanism::incompressibleDifference_Type activation );
520 
521 expressionVectorFromRelativeDifference_Type vectorFromRelativeDifference(const
522  ExpressionMultimechanism::relativeDifference_Type relDifference );
523 
524 deformationActivatedTensor_Type createDeformationActivationTensor( const ExpressionDefinitions::deformationGradient_Type Ft,
525  const ExpressionDefinitions::inverseTensor_Type F0_ta);
526 
527 rightCauchyGreenMultiMechanism_Type activationRightCauchyGreen( const ExpressionDefinitions::minusTransposedTensor_Type FzeroAminusT,
528  const ExpressionDefinitions::rightCauchyGreenTensor_Type C,
529  const ExpressionDefinitions::inverseTensor_Type FzeroAminus1 );
530 
531  activatedFiber_Type activateFiberDirection( const ExpressionDefinitions::deformationGradient_Type F,
532  const ExpressionDefinitions::interpolatedValue_Type ithFiber);
533 
534  squaredNormActivatedFiber_Type squaredNormActivatedFiber( const activatedFiber_Type f);
535 
536  normalizedVector_Type unitVector( const activatedFiber_Type vector );
537 
538  normActivatedFiber_Type normActivatedFiber( const activatedFiber_Type f);
539 
540  normalizedFiber_Type normalizedFiberDirection( const activatedFiber_Type fiber,
541  const normActivatedFiber_Type normFiber);
542 
543  activatedDeterminantF_Type activateDeterminantF( const ExpressionDefinitions::determinantTensorF_Type Jzero,
544  const ExpressionDefinitions::interpolatedScalarValue_Type JzeroA );
545 
546  activatedJ_Type activateJ( const ExpressionDefinitions::determinantTensorF_Type Jzero,
547  const ExpressionDefinitions::powerExpression_Type JzeroA );
548 
549  activePowerExpression_Type activePowerExpression( activatedDeterminantF_Type Ja,
550  const Real exp);
551 
552  activeIsochoricDeterminant_Type activeIsochoricDeterminant( activatedDeterminantF_Type Ja );
553 
554 
555  activeOuterProduct_Type activeOuterProduct( const activatedFiber_Type activatedFiber );
556 
557  activeNormalizedOuterProduct_Type activeNormalizedOuterProduct( const normalizedVector_Type activatedFiber );
558 
559  activeStretch_Type activeFiberStretch( const rightCauchyGreenMultiMechanism_Type activeC,
560  const activeNormalizedOuterProduct_Type activeM);
561 
562  activeInterpolatedFiberStretch_Type activeInterpolatedFiberStretch( const rightCauchyGreenMultiMechanism_Type activeC,
563  const ExpressionDefinitions::outerProduct_Type activeM);
564 
565  activeIsochoricStretch_Type activeIsochoricFourthInvariant( const activeIsochoricDeterminant_Type activeJ,
566  const activeInterpolatedFiberStretch_Type activeI4);
567 
568  activeNoInterpolationStretch_Type activeNoInterpolationFourthInvariant( const activeIsochoricDeterminant_Type activeJ,
569  const activeStretch_Type activeI4);
570 
571  activePowerIsochoricStretch_Type activePowerIsochoricFourthInvariant( const activePowerExpression_Type activeJ,
572  const activeStretch_Type activeI4);
573 
574  activeMinusTtensor_Type createActiveMinusTtensor( const ExpressionDefinitions::minusTransposedTensor_Type FminusT,
575  const ExpressionTranspose<ExpressionDefinitions::deformationGradient_Type> FzeroA);
576 
577  activeLinearization_Type activatedLinearization( const ExpressionDphiJ der,
578  const ExpressionDefinitions::inverseTensor_Type inverse);
579 
580  activeTestGradient_Type activatedTestGradient(const ExpressionDphiI gradTest,
581  const ExpressionDefinitions::inverseTensor_Type FAminus1);
582 }// end namespace ExpressionDistributedModel
583 
584 } //! End namespace LifeV
585 #endif