Problem-level time integration helpers.

Time Integration (fedoo.time)

The fedoo.time module contains time integrators that are attached to a problem rather than embedded directly in a weak form. Weak forms describe the static equilibrium, storage, and dissipation terms, while the problem selects which temporal scheme advances each evolution category.

For example, a mechanical weak form can expose a second-order storage term through a mass or inertia weak form, and the problem can advance it with a Newmark or generalized-alpha integrator:

pb = fd.problem.NonLinear(assembly)
pb.set_time_integrator(fd.time.SECOND_ORDER, fd.time.Newmark())

Thermal diffusion is a first-order evolution and can be advanced independently:

pb.set_time_integrator(fd.time.FIRST_ORDER, fd.time.BackwardEuler())

Static analysis

A problem remains static as long as no time integrator is attached. Weak forms may still expose storage metadata, such as a density or heat capacity, but this metadata is ignored until a compatible integrator is selected:

pb = fd.problem.NonLinear(assembly)
pb.nlsolve()

An integrator can also be removed before the problem is initialized by passing None:

pb.set_time_integrator(fd.time.SECOND_ORDER, fd.time.Newmark())
pb.set_time_integrator(fd.time.SECOND_ORDER, None)

Once the problem has been initialized, compatible weak forms may already have been compiled into transient weak forms. At that point the integrator cannot be removed safely from the same problem object; create a new static problem, or change the assembly before removing the integrator.

Evolution categories

The predefined categories are FIRST_ORDER and SECOND_ORDER. They are instances of TimeEvolution and are used by fedoo.problem.NonLinear.set_time_integrator() to match weak forms with compatible schemes.

Integrators

BackwardEuler()

Backward-Euler integrator for first-order storage weakforms.

GeneralizedAlpha([alpha_m, alpha_f, beta, gamma])

Generalized-alpha time integrator for second-order evolutions.

Newmark([beta, gamma])

Newmark-beta time integrator.

RayleighDamping([alpha, beta])

Rayleigh damping descriptor: C = alpha*M + beta*K.

TimeEvolution(kind)

Time-evolution category used to match weakforms and integrators.

Second-order schemes

GeneralizedAlpha is the general second-order integrator. In fedoo’s convention, alpha_m = 0 and alpha_f = 0 gives the classical endpoint Newmark scheme. The default values of beta and gamma are chosen from

\[\gamma = \frac{1}{2} - \alpha_m + \alpha_f, \qquad \beta = \frac{1}{4}(1 - \alpha_m + \alpha_f)^2.\]

The Newmark constructor is kept as the compact interface for the common case:

fd.time.Newmark(beta=0.25, gamma=0.5)

which is equivalent to:

fd.time.GeneralizedAlpha(alpha_m=0.0, alpha_f=0.0,
                         beta=0.25, gamma=0.5)

Dissipation

Physical damping is defined on the weak form so that only selected parts of a multi-assembly problem are damped:

wf = fd.weakform.StressEquilibrium(material)
wf.set_dissipation(alpha=0.1, beta=0.0)

The keyword form defines Rayleigh damping \(\mathbf{C} = \alpha\mathbf{M} + \beta\mathbf{K}\). A dedicated dissipative weak form can also be passed to set_dissipation.