SDT-nlsim         Contents     Functions         Previous Next     PDF Index

1.3  Non-linear constitutive laws

While implementation of non-linear kinematics is fairly generic, users typically want to implement their own constitutive laws relating stresses to strains and possibly their history.

1.3.1  Laws with no internal states, principles

Constitutive laws where the stress only depends on strain and strain rate are the simplest. These laws exploit the framework provided by nl_inout for various element types.

The only thing that needs to be implemented is a .Fu function

 
    (1.20)

During time/frequency evaluations it is essential that such evaluations be very fast, this has an impact on implementation and different strategies are implemented

1.3.2  Tabular interpolation

sdtweb('_eval','d_fetime.m#BumpStop')
opt=d_fetime('timeopt dt=1e-4 tend=.1');opt.Method='Back';
model=fe_time(opt,mdl)

Multiple forms are supported. Currently a cell array of

For Jacobian computations by nl_spring NLJacobianUpdate, one uses xxx

Supported data input forms

1.3.3  Laws with internal states

Classical rheologic model exploit internal states to account for hysteresis phenomena. E.g. The elasto-visco-plastic behavior is shown in figure 1.1


Figure 1.1: Elastic-visco-plastic model

In this case one internal state is required to represent the relative force between both extremities, to keep track of the relative displacement between the middle spring and middle dashpot.

Very complex models can be associated to this kind of representation, where one will implement internal dynamics associated to a strain history. The general formulation of such system is given as

 
    (1.21)

and the internal states evolution equation functional

 
    (1.22)

where {z} is a vector of internal states, {q} the displacement vector and ẋ represent the time derivatives.

Equations (1.21) and (1.22) represent the class of so-called state space models (for example in the 80's for geophysics applications, in particular by Rice and Ruina [1]).

Internal state representation can be based on the need for an efficient implementation and on the fact that the first order dynamics laws defined by equations (1.21) and (1.22) do not comply with a second order based resolution framework (the internal states acceleration is seldom defined).

Equation (1.22) can thus be resolved separately, possibly with a sub-integration scheme and an adequate interpolation of the external states.

In the non-linearity framework internal states are stored in the continuity of the generalized strains per Gauss points in field .unl. A single non-linearity only handles a single topology and a single internal model, so that each Gauss point has the same number of strain observations and internal states. The field .unl is then of size ((NE+NING ) × NT. The internal storage in field NL.unl is thus of the form

 
    (1.23)

This formalism keeps vectorization capability per instant. The internal rate states are stored in the same manner.

Strain history is stored in the third dimension .unl(:,:,jh). In general for time integration, one will use

When performing a residual call, it is efficient to combine time stepping (1.22) and state update. The StoreType parameters controls what the StoreState C function does.

When .iopt(1)=FInd is positive, .snl is copied as a consecutive vector to model.FNL assuming the field exists. When .iopt(2)=iu is positive, internal states are copied consecutively to the displacement vector u with offset iu. This is done for Ng=.iopt(5) gauss points while skipping Nstrain=.iopt(3) components and copying Nistate=.iopt(4).

only the previous state is needed to integrate internal state evolution, as offset unl0 is already stored in the third dimension, unl,t−1 is found in the third index.

DOF representation of internal states
The number of internal states depends on the model and thus must be declared in the non-linearity. One must then declare in NLdata the fields .adofi and field .MatTyp to obtain a proper initialization of .unl field and associated observations in nl_inout.

By default, one should let initialization procedures allocate DOF identifiers to each internal states by only providing a DOF extension in .adofi. If internal states have a physically defined nodal support, it is also possible to provide the corresponding DOF instead of just an extension. Beware that these DOF should not be coupled to the elastic model, as external resolution would interfere with the internal dynamics. Internal DOF replication for each Gauss point is automatically carried out if a single column is provided.

To allow clean representation and access to internal states, the global model DOF are automatically augmented with DOF associated to internal states. One can then decide whether to keep them or not during the resolution phase by setting positive (kept) or negative (eliminated) signs to the non-empty values in .adofi. To simplify for a given non-linearity all internal states are either kept or not, any negative value will then switch to elimination. In the case where internal states are kept during the resolution displacement and velocity states are automatically updated in the model.

HBM solvers specificity

HBM formulations have a resolution approach that is different from usual transient simulations that usually require to write separate dedicated functions for both resolution strategies.

In transient simulations, strain history is available, so that one first integrates internal states defined by equation (1.22), and then computes the non-linear forces with equation (1.21).

In HBM based formulations the steady state response state is assumed in the prediction/correction scheme, including strain history. Internal states coefficients are thus predicted, so that the corresponding non-linear force defined inequation (1.21) is directly obtained. One then updates the internal states evolution equation (1.22) for convergence iterations. Internal states DOF must thus be kept in the resolution phase.

1.3.4  Hyper-visco-hysteretic 0D model

For the representation of bushings, each Gauss point is a scalar (0D) constitutive law that considers a combination of hyperelastic (red curve in figure 1.2), rate independent hysteresis (green curves from low speed triangular testing), and viscoelastic behavior (blue to yellow maps denoting frequency and amplitude dependence from sine testing).


Figure 1.2: Tangent hyperelastic stiffness (red), hysteretic relaxation modulus (green), viscoelastic complex modulus (blue to yellow)

The total load is a series of forces/stresses

 
    (1.24)

where hyperelasticity is represented using a tabular form with either linear of piecewise cubic interpolation with no internal states Fg0(ug) (stored as NLdata.Fu{k})and other behavior is represented using a series of cells (also called branches in reference to the classical rheologic representation of figure 1.3), specified using a field .cell where each row describes a branch indexed by i with [ty gi fi xfi ai] type, load fraction, and if used frequency in Hz , sliding distance, non-linearity coefficient. xxx Note that the convention is to declare constants using a fraction of the high frequency modulus

g0+
 
i
 gi= 1      (1.25)

but when starting relaxations from the low frequency stresses, the coefficient gi/g0 is more relevant and that coefficient only needs to be positive.

Currently supported types


Figure 1.4: Scheme for Iwan model and respective response in terms of hysteretic relaxation and on force/displacement domain.

For runtime integration, the data necessary for evolution equations is stored as

The constants vi depend on the integration scheme and constitutive laws

1.3.5  User callback in nl_inout, MexCb field

The current high performance developments are focusing on vectorized user implementation of non-linearities integrated in the chandle nl_inout implementation. In the data structure used during time integration (see section 1.6.3), the .MexCb field is used to provide data. It is a cell array giving {@fun,RO}.

For optimized operation limiting field name checks, the option structure RO is assumed to have ordered fields

Expected return arguments are snl and uint (new value of internal states).

1.3.6  Dedicated user function (deprecated)

The easiest conceptual way to define a non-linearity is to use your own function. For example, if you have defined the function

function NL=resCubic(NL,fc,model,u,v,a,opt,Case,RO) 
NL.unl=-.01*NL.unl.^3  ... % Cubic stiffness on relative motion
     + -.02*NL.vnl;        % Linear viscous damping on relative velocity

You can specify that this function should be used to compute a law with no internal states using

model=d_fetime('TestbeamNL');
model=nl_spring('SetPro proid100 Fu="@resCubic"',model);
% verify that Fu was defined in NLdata
NL=stack_get(model,'','NL','get');NL.NLdata.Fu
% The same with a subfunction in d_hbm
model=nl_spring('SetPro proid100 Fu="d_hbm(''@resCubic'')"',model);
NL=stack_get(model,'','NL','get');NL.NLdata.Fu

Note that in instances of deployed MATLAB generated with the MATLAB compiler, all custom functions must be defined a priori. And only anonymous functions may be created.

The NLdata entry is kept as the one defined by the nl_inout db call. Entry NLdata.Fu must then be replaced by the handle to the dedicated function in the non-linear property

1.3.7  .anonymous field for definition (deprecated)

To allow parameter edition, the base mechanism to automatically create an .Fu as MATLAB anonymous function handle is to use the following NLdata fields

Use of inline functions. One can directly use the existing framework with a customized call based on the concept of anonymous function handles in MATLAB.

d_hbm('TestDuffing2Dof-an')
% completes the defintion
NLdata=struct('csv','par1(1#%g#"value of parameter 1")',...
'Param','par1=val',...
'tex','p_1 u_{NL}'
'anonymous','-NL.par1*NL.unl');
model=feutil('setpro 2001',model,'NLdata',NLdata);

1.3.8  Maxwell cell model using matrices (deprecated)

The Maxwell cell model belongs to a category of so-called rheology based models. the force at each Gauss point is calculated based on an internal rheology identified as a spring-mass based model. Figure 1.5 illustrates the Maxwell (or Zener) model.


Figure 1.5: Standard viscoelastic model (single cell Maxwell or Zener). Generalized multi-cell model.

Since each branch is decoupled, one can write a series of scalar internal state evolution equations

 
    (1.46)

and recompose the total non-linear stress using

 
    (1.47)

To allow more general superelement representation of the constitutive law, the external force snlb can be defined defined by a first order equation involving the system strain state at a given Gauss point eb and ėb, and a series of internal states ei and ėi. In the following bold letters refer to non-scalar values for a given Gauss point.

 
    (1.48)

No external forces being applied on the internal rheology, one is able to use a Schur complement to obtain the internal states evolution equation

 
    (1.49)

Once the internal state is resolved, the external force can be deduced

 
    (1.50)

Resolution of equation (1.49) can be obtained with different strategies. In transient simulations a local integration is performed using the Euler scheme. From instant tn the internal state at instant tn+1 has to be integrated over h=tn+1tn

 
    (1.51)

Implemented strategies can involve either single or multiple step integration in implicit or explicit form. Implicit resolution involves Newton-Raphson resolution, the usual initial prediction assuming constant velocity over the time step.

In the harmonic balance method, the global resolution scheme iterates on the internal states, so that one directly computes equations (1.49) and (1.50) from the current solution and the be used in the residue equation. The harmonic balance scheme then checks non-linear forces equilibrium and the stability of internal velocities.


©1991-2025 by SDTools
Previous Up Next