53 if ( slave == NULL ) {
91 if ( status == NULL ) {
97 if ( status != NULL ) {
207 for (
int i = 0; i < 6; i++ ) {
208 en +=
N [ mnumber - 1 ] [ i ] * macroStrain.
at(i + 1);
218 return ( macroStrain.
at(1) + macroStrain.
at(2) + macroStrain.
at(3) ) / 3.0;
236 for (
int i = 0; i < 6; i++ ) {
237 em +=
M [ mnumber - 1 ] [ i ] * macroStrain.
at(i + 1);
250 for (
int i = 0; i < 6; i++ ) {
251 el +=
L [ mnumber - 1 ] [ i ] * macroStrain.
at(i + 1);
262 double en = 0., ev = 0., em = 0., el = 0.;
264 for (
int i = 0; i < 6; i++ ) {
265 en +=
N [ mnumber - 1 ] [ i ] * macroStrain.
at(i + 1);
266 em +=
M [ mnumber - 1 ] [ i ] * macroStrain.
at(i + 1);
267 el +=
L [ mnumber - 1 ] [ i ] * macroStrain.
at(i + 1);
270 ev = ( macroStrain.
at(1) + macroStrain.
at(2) + macroStrain.
at(3) ) / 3.0;
289 answer.
at(4, 4) = answer.
at(5, 5) = answer.
at(6, 6) =
E / ( 2. + 2. *
nu );
290 answer.
at(1, 1) = answer.
at(2, 2) = answer.
at(3, 3) =
E * ( 1. -
nu ) / ( ( 1. +
nu ) * ( 1. - 2. *
nu ) );
291 answer.
at(1, 2) = answer.
at(2, 1) = answer.
at(1, 3) = answer.
at(3, 1) =
292 answer.
at(2, 3) = answer.
at(3, 2) =
E *
nu / ( ( 1. +
nu ) * ( 1. - 2. *
nu ) );
301 if ( result !=
IRRT_OK )
return result;
325 int ij [ 6 ] [ 2 ] = { { 1, 1 }, { 2, 2 }, { 3, 3 }, { 2, 3 }, { 3, 1 }, { 1, 2 } };
337 if ( numberOfMicroplanes == 28 ) {
338 for ( i = 0; i < 4; i++ ) {
348 double help [ 7 ] [ 3 ] = {
349 { .577350259E0, .577350259E0, .577350259E0 }, { .935113132E0, .250562787E0, .250562787E0 },
350 { .250562787E0, .935113132E0, .250562787E0 }, { .250562787E0, .250562787E0, .935113132E0 },
351 { .186156720E0, .694746614E0, .694746614E0 }, { .694746614E0, .186156720E0, .694746614E0 },
352 { .694746614E0, .694746614E0, .186156720E0 }
354 for ( i = 0; i < 7; i++ ) {
412 }
else if ( numberOfMicroplanes == 21 ) {
413 for ( i = 0; i < 3; i++ ) {
417 for ( i = 3; i < 9; i++ ) {
421 for ( i = 9; i < 21; i++ ) {
439 double help [ 3 ] [ 3 ] = { { 0.3879072746, 0.3879072746, 0.8360956240 },
440 { 0.3879072746, 0.8360956240, 0.3879072746 },
441 { 0.8360956240, 0.3879072746, 0.3879072746 } };
443 for ( i = 0; i < 3; i++ ) {
528 }
else if ( numberOfMicroplanes == 61 ) {
529 double help [ 61 ] [ 4 ] = {
530 { 1.000000000000, 0.000000000000, 0.000000000000, 0.00795844204678 },
531 { 0.745355992500, 0.0, 0.666666666667, 0.00795844204678 },
532 { 0.745355992500, -0.577350269190, -0.333333333333, 0.00795844204678 },
533 { 0.745355992500, 0.577350269190, -0.333333333333, 0.00795844204678 },
534 { 0.333333333333, 0.577350269190, 0.745355992500, 0.00795844204678 },
535 { 0.333333333333, -0.577350269190, 0.745355992500, 0.00795844204678 },
536 { 0.333333333333, -0.934172358963, 0.127322003750, 0.00795844204678 },
537 { 0.333333333333, -0.356822089773, -0.872677996250, 0.00795844204678 },
538 { 0.333333333333, 0.356822089773, -0.872677996250, 0.00795844204678 },
539 { 0.333333333333, 0.934172358963, 0.127322003750, 0.00795844204678 },
540 { 0.794654472292, -0.525731112119, 0.303530999103, 0.0105155242892 },
541 { 0.794654472292, 0.0, -0.607061998207, 0.0105155242892 },
542 { 0.794654472292, 0.525731112119, 0.303530999103, 0.0105155242892 },
543 { 0.187592474085, 0.0, 0.982246946377, 0.0105155242892 },
544 { 0.187592474085, -0.850650808352, -0.491123473188, 0.0105155242892 },
545 { 0.187592474085, 0.850650808352, -0.491123473188, 0.0105155242892 },
546 { 0.934172358963, 0.0, 0.356822089773, 0.0100119364272 },
547 { 0.934172358963, -0.309016994375, -0.178411044887, 0.0100119364272 },
548 { 0.934172358963, 0.309016994375, -0.178411044887, 0.0100119364272 },
549 { 0.577350269190, 0.309016994375, 0.755761314076, 0.0100119364272 },
550 { 0.577350269190, -0.309016994375, 0.755761314076, 0.0100119364272 },
551 { 0.577350269190, -0.809016994375, -0.110264089708, 0.0100119364272 },
552 { 0.577350269190, -0.5, -0.645497224368, 0.0100119364272 },
553 { 0.577350269190, 0.5, -0.645497224368, 0.0100119364272 },
554 { 0.577350269190, 0.809016994375, -0.110264089708, 0.0100119364272 },
555 { 0.356822089773, -0.809016994375, 0.467086179481, 0.0100119364272 },
556 { 0.356822089773, 0.0, -0.934172358963, 0.0100119364272 },
557 { 0.356822089773, 0.809016994375, 0.467086179481, 0.0100119364272 },
558 { 0.0, 0.5, 0.866025403784, 0.0100119364272 },
559 { 0.0, -1.0, 0.0, 0.0100119364272 },
560 { 0.0, 0.5, -0.866025403784, 0.0100119364272 },
561 { 0.947273580412, -0.277496978165, 0.160212955043, 0.00690477957966 },
562 { 0.812864676392, -0.277496978165, 0.512100034157, 0.00690477957966 },
563 { 0.595386501297, -0.582240127941, 0.553634669695, 0.00690477957966 },
564 { 0.595386501297, -0.770581752342, 0.227417407053, 0.00690477957966 },
565 { 0.812864676392, -0.582240127941, -0.015730584514, 0.00690477957966 },
566 { 0.492438766306, -0.753742692223, -0.435173546254, 0.00690477957966 },
567 { 0.274960591212, -0.942084316623, -0.192025554687, 0.00690477957966 },
568 { -0.076926487903, -0.942084316623, -0.326434458707, 0.00690477957966 },
569 { -0.076926487903, -0.753742692223, -0.652651721349, 0.00690477957966 },
570 { 0.274960591212, -0.637341166847, -0.719856173359, 0.00690477957966 },
571 { 0.947273580412, 0.0, -0.320425910085, 0.00690477957966 },
572 { 0.812864676392, -0.304743149777, -0.496369449643, 0.00690477957966 },
573 { 0.595386501297, -0.188341624401, -0.781052076747, 0.00690477957966 },
574 { 0.595386501297, 0.188341624401, -0.781052076747, 0.00690477957966 },
575 { 0.812864676392, 0.304743149777, -0.496369449643, 0.00690477957966 },
576 { 0.492438766306, 0.753742692223, -0.435173546254, 0.00690477957966 },
577 { 0.274960591212, 0.637341166847, -0.719856173359, 0.00690477957966 },
578 { -0.076926487903, 0.753742692223, -0.652651721349, 0.00690477957966 },
579 { -0.076926487903, 0.942084316623, -0.326434458707, 0.00690477957966 },
580 { 0.274960591212, 0.942084316623, -0.192025554687, 0.00690477957966 },
581 { 0.947273580412, 0.277496978165, 0.160212955043, 0.00690477957966 },
582 { 0.812864676392, 0.582240127941, -0.015730584514, 0.00690477957966 },
583 { 0.595386501297, 0.770581752342, 0.227417407053, 0.00690477957966 },
584 { 0.595386501297, 0.582240127941, 0.553634669695, 0.00690477957966 },
585 { 0.812864676392, 0.277496978165, 0.512100034157, 0.00690477957966 },
586 { 0.492438766306, 0.0, 0.870347092509, 0.00690477957966 },
587 { 0.274960591212, 0.304743149777, 0.911881728046, 0.00690477957966 },
588 { -0.076926487903, 0.188341624401, 0.979086180056, 0.00690477957966 },
589 { -0.076926487903, -0.188341624401, 0.979086180056, 0.00690477957966 },
590 { 0.274960591212, -0.304743149777, 0.911881728046, 0.00690477957966 }
657 if ( ( mPlane + 1 ) % 3 == 0 ) {
658 aux = sqrt( n.at(1) * n.at(1) + n.at(2) * n.at(2) );
659 if ( fabs(aux) > 1.0e-12 ) {
660 m.at(1) = n.at(2) / aux;
661 m.at(2) = -n.at(1) / aux;
668 }
else if ( ( mPlane + 1 ) % 3 == 1 ) {
669 aux = sqrt( n.at(2) * n.at(2) + n.at(3) * n.at(3) );
670 if ( fabs(aux) > 1.0e-12 ) {
672 m.at(2) = n.at(3) / aux;
673 m.at(3) = -n.at(2) / aux;
680 aux = sqrt( n.at(1) * n.at(1) + n.at(3) * n.at(3) );
681 if ( fabs(aux) > 1.0e-12 ) {
682 m.at(1) = n.at(3) / aux;
684 m.at(3) = -n.at(1) / aux;
695 for ( i = 0; i < 6; i++ ) {
699 N [ mPlane ] [ i ] = n.at(ii) * n.at(jj);
700 M [ mPlane ] [ i ] = 0.5 * ( m.at(ii) * n.at(jj) + m.at(jj) * n.at(ii) );
701 L [ mPlane ] [ i ] = 0.5 * ( l.
at(ii) * n.at(jj) + l.
at(jj) * n.at(ii) );
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
int numberOfMicroplanes
Number of microplanes.
double computeShearMStrainComponent(Microplane *mplane, const FloatArray ¯oStrain)
Computes the shear component (in m direction) of macro strain on given microplane.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
double L[MAX_NUMBER_OF_MICROPLANES][6]
Shear projection tensors (l direction) for all microplanes.
#define _IFT_MicroplaneMaterial_n
void beVectorProductOf(const FloatArray &v1, const FloatArray &v2)
Computes vector product (or cross product) of vectors given as parameters, , and stores the result in...
virtual MaterialMode giveCorrespondingSlaveMaterialMode(MaterialMode masterMode)
Returns corresponding material mode for microplane according to macro integration mode...
IntegrationPointStatus * setMaterialStatus(IntegrationPointStatus *ptr, int n)
Sets Material status managed by receiver.
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
double E
Young's modulus.
double M[MAX_NUMBER_OF_MICROPLANES][6]
Shear projection tensors (m direction) for all microplanes.
virtual contextIOResultType saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Stores integration point state to output stream.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
virtual MaterialStatus * CreateMicroplaneStatus(GaussPoint *gp)=0
double & at(int i)
Coefficient access function.
double computeNormalDeviatoricStrainComponent(Microplane *mplane, const FloatArray ¯oStrain)
Computes the normal deviatoric component of macro strain on given microplane.
double microplaneNormals[MAX_NUMBER_OF_MICROPLANES][3]
Normals of microplanes.
Microplane * giveMicroplane(int i, GaussPoint *masterGp)
Returns i-th microplane belonging to master-macro-integration point. )-based indexing.
virtual contextIOResultType saveIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Stores integration point state to output stream.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
virtual contextIOResultType restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Reads integration point state to output stream.
GaussPoint * giveSlaveGaussPoint(int index)
Returns index-th slave gauss point of receiver.
MaterialMode
Type representing material mode of integration point.
MatResponseMode
Describes the character of characteristic material matrix.
virtual void initializeData(int numberOfMicroplanes)
Initializes internal data (integration weights, microplane normals and computes projection tensors)...
virtual void initTempStatus(GaussPoint *gp)
Initializes temporary variables stored in integration point status at the beginning of new time step...
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
virtual void giveMicroplaneNormal(FloatArray &answer, Microplane *mplane)
Computes normal of given microplane.
#define _IFT_MicroplaneMaterial_nmp
int giveNumber()
Returns number of receiver.
double nu
Poisson's ratio.
Class representing microplane integration point in finite element program.
virtual double giveMicroplaneIntegrationWeight(Microplane *mplane)
Returns microplane integration weight.
double at(int i, int j) const
Coefficient access function.
double computeNormalStrainComponent(Microplane *mplane, const FloatArray ¯oStrain)
Computes the length of normal strain vector on given microplane.
IntegrationRule * giveIntegrationRule()
Returns corresponding integration rule to receiver.
Abstract base class representing a material status information.
Class representing vector of real numbers.
double N[MAX_NUMBER_OF_MICROPLANES][6]
Normal projection tensors for all microplanes.
double computeNormalVolumetricStrainComponent(Microplane *mplane, const FloatArray ¯oStrain)
Computes the normal volumetric component of macro strain on given microplane.
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
double microplaneWeights[MAX_NUMBER_OF_MICROPLANES]
Integration weights of microplanes.
IntegrationPointStatus * giveMaterialStatus()
Returns reference to associated material status (NULL if not defined).
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
std::vector< GaussPoint * > gaussPoints
List of slave integration points.
#define _IFT_MicroplaneMaterial_e
void zero()
Zeroes all coefficients of receiver.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
void zero()
Zeroes all coefficient of receiver.
virtual IntegrationPointStatus * giveMicroplaneStatus(GaussPoint *gp)
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual contextIOResultType restoreIPContext(DataStream &stream, ContextMode mode, GaussPoint *gp)
Reads integration point state to output stream.
double computeShearLStrainComponent(Microplane *mplane, const FloatArray ¯oStrain)
Computes the shear component (in l direction) of macro strain on given microplane.
Class representing integration point in finite element program.
Class representing solution step.
Abstract base class representing a integration status.
double Kronecker[6]
Kronecker's delta.
void computeStrainVectorComponents(FloatArray &answer, Microplane *mplane, const FloatArray ¯oStrain)
Computes the vector of all micro stress components (Ev, En, Em, El) of macro strain vector on given m...
void resize(int s)
Resizes receiver towards requested size.