cratepy.main.ASCA

class ASCA(strain_formulation, problem_type, self_consistent_scheme='regression', scs_parameters=None, scs_max_n_iterations=20, scs_conv_tol=0.0001, max_n_iterations=12, conv_tol=1e-06, max_subinc_level=5, max_cinc_cuts=5, is_adapt_repeat_inc=True)[source]

Bases: object

Adaptive Self-Consistent Clustering Analysis (ASCA).

The detailed formulation of this method can be found in Ferreira et. al (2022) [1] and also in Ferreira (2022) [2].

_n_dim

Problem number of spatial dimensions.

Type:

int

_comp_order_sym

Strain/Stress components symmetric order.

Type:

list[str]

_comp_order_nsym

Strain/Stress components nonsymmetric order.

Type:

list[str]

_global_strain_old_mf

Last converged global vector of clusters strains stored in matricial form.

Type:

numpy.ndarray (1d)

_farfield_strain_old_mf

Last converged far-field strain tensor (matricial form).

Type:

numpy.ndarray (1d), default=None

_total_time

Total time (s) associated with online-stage.

Type:

float

_effective_time

Total time (s) associated with the solution of the equilibrium problem.

Type:

float

_post_process_time

Total time (s) associated with post-processing operations.

Type:

float

get_time_profile(self)[source]

Get time profile of online-stage.

solve_equilibrium_problem(self, crve, material_state, mac_load, mac_load_presctype, mac_load_increm, output_dir, problem_name='problem', clust_adapt_freq=None, is_solution_rewinding=False, rewind_state_criterion=None, rewinding_criterion=None, max_n_rewinds=1, is_clust_adapt_output=False, is_ref_material_output=False, is_vtk_output=False, vtk_data=None, is_voxels_output=False)[source]

Solve clustering-based reduced-order equilibrium problem.

_init_global_strain_mf(self, crve, material_state, mode='last_converged')[source]

Set clusters strains initial iterative guess.

_init_global_inc_strain_mf(self, n_total_clusters, mode='last_converged')[source]

Set clusters incremental strains initial iterative guess.

_init_farfield_strain_mf(self, mode='last_converged')[source]

Set far-field strain initial iterative guess.

_init_inc_farfield_strain_mf(self, mode='last_converged')[source]

Set incremental far-field strain initial iterative guess.

_build_residual(self, crve, material_state, presc_strain_idxs, presc_stress_idxs, applied_mac_load_mf, ref_material, global_cit_mf, global_strain_mf, farfield_strain_mf=None, applied_mix_strain_mf=None, applied_mix_stress_mf=None)[source]

Build Lippmann-Schwinger equilibrium residuals.

_build_jacobian(self, crve, material_state, presc_strain_idxs, presc_stress_idxs, global_cit_diff_tangent_mf)[source]

Build Lippmann-Schwinger equilibrium Jacobian matrix.

_build_global_cit_diff_tangent_mf(self, crve, global_cit_mf, material_state, ref_material)[source]

Build global cluster interaction - tangent modulus matrix.

_check_convergence(self, crve, material_state, presc_strain_idxs, presc_stress_idxs, applied_mac_load_mf, residual, applied_mix_strain_mf=None)[source]

Check Lippmann-Schwinger equilibrium convergence.

_crve_effective_tangent_modulus(self, crve, material_state, global_cit_diff_tangent_mf, global_strain_mf=None, farfield_strain_mf=None)[source]

CRVE tangent modulus and clusters strain concentration tensors.

_validate_csct(self, material_phases, phase_clusters, global_csct_mf, global_strain_mf, farfield_strain_mf)[source]

Validate clusters strain concentration tensors computation.

_init_clusters_sct(self, material_phases, phase_clusters)[source]

Initialize cluster strain concentration tensors.

_build_clusters_residuals(self, material_phases, phase_clusters, residual)[source]

Build clusters equilibrium residuals dictionary.

_display_inc_data(mac_load_path)[source]

Display loading increment data.

_display_scs_iter_data(ref_material, is_lock_prop_ref, mode='init', scs_iter_time=None)[source]

Display reference material self-consistent scheme iteration data.

_display_nr_iter_data(mode='init', nr_iter=None, nr_iter_time=None, errors=[])[source]

Display Newton-Raphson iteration data.

_set_output_files(self, output_dir, crve, problem_name='problem', is_clust_adapt_output=False, is_ref_material_output=None, is_vtk_output=False, vtk_data=None, is_voxels_output=None)[source]

Create and initialize output files.

Constructor.

Parameters:
  • strain_formulation ({'infinitesimal', 'finite'}) – Problem strain formulation.

  • problem_type (int) – Problem type: 2D plane strain (1), 2D plane stress (2), 2D axisymmetric (3) and 3D (4).

  • self_consistent_scheme ({'regression',}, default='regression') – Self-consistent scheme to update the elastic reference material properties.

  • scs_parameters ({dict, None}, default=None) – Self-consistent scheme parameters (key, str; item, {int, float, bool}).

  • scs_max_n_iterations (int, default=20) – Self-consistent scheme maximum number of iterations.

  • scs_conv_tol (float, default=1e-4) – Self-consistent scheme convergence tolerance.

  • max_n_iterations (int, default=12) – Newton-Raphson maximum number of iterations.

  • conv_tol (float, default=1e-6) – Newton-Raphson convergence tolerance.

  • max_subinc_level (int, default=5) – Maximum level of loading subincrementation.

  • max_cinc_cuts (int, default=5) – Maximum number of consecutive increment cuts.

  • is_adapt_repeat_inc (bool, default=False) – True if loading increment is to be repeated after a clustering adaptivity step, False otherwise.

List of Public Methods

get_time_profile

Get time profile of online-stage.

solve_equilibrium_problem

Solve clustering-based reduced-order equilibrium problem.

Methods

__init__(strain_formulation, problem_type, self_consistent_scheme='regression', scs_parameters=None, scs_max_n_iterations=20, scs_conv_tol=0.0001, max_n_iterations=12, conv_tol=1e-06, max_subinc_level=5, max_cinc_cuts=5, is_adapt_repeat_inc=True)[source]

Constructor.

Parameters:
  • strain_formulation ({'infinitesimal', 'finite'}) – Problem strain formulation.

  • problem_type (int) – Problem type: 2D plane strain (1), 2D plane stress (2), 2D axisymmetric (3) and 3D (4).

  • self_consistent_scheme ({'regression',}, default='regression') – Self-consistent scheme to update the elastic reference material properties.

  • scs_parameters ({dict, None}, default=None) – Self-consistent scheme parameters (key, str; item, {int, float, bool}).

  • scs_max_n_iterations (int, default=20) – Self-consistent scheme maximum number of iterations.

  • scs_conv_tol (float, default=1e-4) – Self-consistent scheme convergence tolerance.

  • max_n_iterations (int, default=12) – Newton-Raphson maximum number of iterations.

  • conv_tol (float, default=1e-6) – Newton-Raphson convergence tolerance.

  • max_subinc_level (int, default=5) – Maximum level of loading subincrementation.

  • max_cinc_cuts (int, default=5) – Maximum number of consecutive increment cuts.

  • is_adapt_repeat_inc (bool, default=False) – True if loading increment is to be repeated after a clustering adaptivity step, False otherwise.

_build_clusters_residuals(material_phases, phase_clusters, residual)[source]

Build clusters equilibrium residuals dictionary.

This procedure is only carried out so that clusters equilibrium residuals are conveniently stored to perform post-processing operations.


Parameters:
  • material_phases (list[str]) – RVE material phases labels (str).

  • phase_clusters (dict) – Clusters labels (item, list[int]) associated with each material phase (key, str).

  • residual (numpy.ndarray (1d)) – Lippmann-Schwinger equilibrium residual vector.

Returns:

clusters_residuals_mf – Equilibrium residual second-order tensor (matricial form) (item, numpy.ndarray (1d)) associated with each material cluster (key, str).

Return type:

dict

_build_global_cit_diff_tangent_mf(crve, global_cit_mf, material_state, ref_material)[source]

Build global cluster interaction - tangent modulus matrix.

Infinitesimal strains:

\[\boldsymbol{\mathsf{T}}^{(I)(K)} : \left( \boldsymbol{\mathsf{D}}^{(K)}_{n+1} - \boldsymbol{\mathsf{D}}^{e,\, 0} \right) \, , \qquad \forall I, \, K=1, \, \dots, \, n_{\text{c}} \, ,\]

where \(\boldsymbol{\mathsf{T}}^{(I)(K)}\) is the cluster interaction tensor (fourth-order tensor) between the \(I\) th and \(K\) th material clusters, \(\boldsymbol{\mathsf{D}}^{(K)}_{n+1}\) is the consistent tangent modulus of the \(K\) th material cluster, \(\boldsymbol{\mathsf{D}}^{e,\, 0}\) is the elastic tangent modulus of the reference homogeneous material, \(n_{c}\) is the number of material clusters. and \(n+1\) denotes the current increment.


Finite strains:

\[\boldsymbol{\mathsf{T}}^{(I)(K)} : \left( \boldsymbol{\mathsf{A}}^{(K)}_{n+1} - \boldsymbol{\mathsf{A}}^{e,\, 0} \right) \, , \qquad \forall I, \, K=1, \, \dots, \, n_{\text{c}} \, ,\]

where \(\boldsymbol{\mathsf{T}}^{(I)(K)}\) is the cluster interaction tensor (fourth-order tensor) between the \(I\) th and \(K\) th material clusters, \(\boldsymbol{\mathsf{A}}^{(K)}_{n+1}\) is the material consistent tangent modulus of the \(K\) th material cluster, \(\boldsymbol{\mathsf{A}}^{e,\, 0}\) is the elastic tangent modulus of the reference homogeneous material, \(n_{c}\) is the number of material clusters. and \(n+1\) denotes the current increment.


Parameters:
  • crve (CRVE) – Cluster-Reduced Representative Volume Element.

  • global_cit_mf (numpy.ndarray (2d)) – Global cluster interaction matrix. Assembly positions are assigned according to the order of material_phases (1st) and phase_clusters (2nd).

  • material_state (MaterialState) – CRVE material constitutive state.

  • ref_material (ElasticReferenceMaterial) – Elastic reference material.

Returns:

global_cit_diff_tangent_mf – Global matrix similar to the global cluster interaction matrix but where each cluster interaction tensor is double contracted with the difference between the associated material cluster consistent tangent modulus and the reference material elastic tangent modulus.

Return type:

numpy.ndarray (2d)

_build_jacobian(crve, material_state, presc_strain_idxs, presc_stress_idxs, global_cit_diff_tangent_mf)[source]

Build Lippmann-Schwinger equilibrium Jacobian matrix.

Infinitesimal strains:

\[\begin{split}\boldsymbol{J}_{n+1} = \dfrac{\partial \boldsymbol{R}_{n+1}}{\partial \Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}} = \begin{bmatrix} \dfrac{\partial \boldsymbol{R}^{(I)}_{n+1}}{\partial \Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(K)}} & \dfrac{\partial \boldsymbol{R}^{(I)}_{n+1}}{\partial \Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{0}} \\[8pt] \dfrac{\partial \boldsymbol{R}^{(n_{\text{c}} + 1)}_{n+1} }{\partial \Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(K)}} & \dfrac{\partial \boldsymbol{R}^{(n_{\text{c}} + 1)}_{n+1}}{\partial \Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{0}} \end{bmatrix} \, , \qquad \forall I, \, K=1, \, \dots, \, n_{\text{c}} \, ,\end{split}\]

where \(\boldsymbol{R}_{n+1}\) is the global residual function (assuming incremental equilibrium formulation and incremental primary unknowns), \(\boldsymbol{R}^{(I)}_{n+1}\) is the \(I\) th material cluster equilibrium residual function, \(\boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1}\) is the strain and/or stress loading constraints residual function, \(\Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(K)}\) is the \(K\) th material cluster incremental infinitesimal strain tensor, \(\Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{0}\) is the incremental far-field infinitesimal strain tensor, \(n_{c}\) is the number of material clusters, and \(n+1\) denotes the current increment.

The partial derivatives are defined as

\[\dfrac{\partial \boldsymbol{R}^{(I)}_{n+1}}{\partial \Delta \boldsymbol{\varepsilon}_{\mu, \, n+1}^{(K)}} = \delta_{(I)(K)} \boldsymbol{\mathsf{I}} + \boldsymbol{\mathsf{T}}^{(I)(K)} : \left( \boldsymbol{\mathsf{D}}^{(K)}_{n+1} - \boldsymbol{\mathsf{D}}^{e,\, 0} \right) \, ,\]
\[\dfrac{\partial \boldsymbol{R}^{(I)}_{n+1}}{\partial \Delta \boldsymbol{\varepsilon}_{\mu, \, n+1}^{0}} = - \boldsymbol{\mathsf{I}} \, ,\]
\[\text{strain:} \; \dfrac{\partial \boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1}}{\partial \Delta \boldsymbol{\varepsilon}_{\mu, \, n+1}^{(K)}} = f^{(K)} \, \boldsymbol{\mathsf{I}} \, , \quad \text{stress:} \; \dfrac{\partial \boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1}}{\partial \Delta \boldsymbol{\varepsilon}_{\mu, \, n+1}^{(K)}} = f^{(K)} \, \boldsymbol{\mathsf{D}}^{(K)}_{n+1} \, ,\]
\[\dfrac{\partial \boldsymbol{R}^{(n_{\text{c}} + 1)}_{n+1} }{\partial \Delta \boldsymbol{\varepsilon}_{\mu, \, n+1}^{0}} = \mathbf{0} \, ,\]

where \(\delta_{(I)(K)}\) is the Kronecker delta, \(\boldsymbol{\mathsf{I}}\) is the fourth-order identity tensor, \(\boldsymbol{\mathsf{T}}^{(I)(K)}\) is the cluster interaction tensor (fourth-order tensor) between the \(I\) th and \(K\) th material clusters, \(\boldsymbol{\mathsf{D}}^{(K)}_{n+1}\) is the consistent tangent modulus of the \(K\) th material cluster, \(\boldsymbol{\mathsf{D}}^{e,\, 0}\) is the elastic tangent modulus of the reference homogeneous material, \(f^{(K)}\) is the volume fraction of the \(K\) th material cluster.

Remark: The Jacobian matrix is the same when the residual functions are derived with respect to the total strains (assuming incremental equilibrium formulation and total primary unknowns).


Finite strains:

\[\begin{split}\boldsymbol{J}_{n+1} = \dfrac{\partial \boldsymbol{R}_{n+1}}{\partial \boldsymbol{F}_{\mu,\,n+1}} = \begin{bmatrix} \dfrac{\partial \boldsymbol{R}^{(I)}_{n+1}}{\partial \boldsymbol{F}_{\mu,\,n+1}^{(K)}} & \dfrac{\partial \boldsymbol{R}^{(I)}_{n+1}}{\partial \boldsymbol{F}_{\mu,\,n+1}^{0}} \\[8pt] \dfrac{\partial \boldsymbol{R}^{(n_{\text{c}} + 1)}_{n+1}}{\partial \boldsymbol{F}_{\mu,\,n+1}^{(K)}} & \dfrac{\partial \boldsymbol{R}^{(n_{\text{c}} + 1)}_{n+1}}{\partial \boldsymbol{F}_{\mu,\,n+1}^{0}} \end{bmatrix} \, , \qquad \forall I, \, K=1, \, \dots, \, n_{\text{c}} \, ,\end{split}\]

where \(\boldsymbol{R}_{n+1}\) is the global residual function, \(\boldsymbol{R}^{(I)}_{n+1}\) is the \(I\) th material cluster equilibrium residual function, \(\boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1}\) is the strain and/or stress loading constraints residual function, \(\boldsymbol{F}_{\mu,\,n+1}^{(K)}\) is the \(K\) th material cluster deformation gradient, \(\boldsymbol{F}_{\mu,\,n+1}^{0}\) is the far-field deformation gradient, \(n_{c}\) is the number of material clusters, and \(n+1\) denotes the current increment.

The partial derivatives are defined as

\[\dfrac{\partial \boldsymbol{R}^{(I)}_{n+1}}{\partial \boldsymbol{F}_{\mu, \, n+1}^{(K)}} = \delta_{(I)(K)} \boldsymbol{\mathsf{I}} + \boldsymbol{\mathsf{T}}^{(I)(K)} : \left( \boldsymbol{\mathsf{A}}^{(K)}_{n+1} - \boldsymbol{\mathsf{A}}^{e,\, 0} \right) \, ,\]
\[\dfrac{\partial \boldsymbol{R}^{(I)}_{n+1}}{\partial \boldsymbol{F}_{\mu, \, n+1}^{0}} = - \boldsymbol{\mathsf{I}} \, ,\]
\[\text{strain:} \; \dfrac{\partial \boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1}}{\partial \boldsymbol{F}_{\mu, \, n+1}^{(K)}} = f^{(K)} \, \boldsymbol{\mathsf{I}} \, , \quad \text{stress:} \; \dfrac{\partial \boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1}}{\partial \boldsymbol{F}_{\mu, \, n+1}^{(K)}} = f^{(K)} \, \boldsymbol{\mathsf{A}}^{(K)}_{n+1} \, ,\]
\[\dfrac{\partial \boldsymbol{R}^{(n_{\text{c}} + 1)}_{n+1} }{\partial \boldsymbol{F}_{\mu, \, n+1}^{0}} = \mathbf{0} \, ,\]

where \(\delta_{(I)(K)}\) is the Kronecker delta, \(\boldsymbol{\mathsf{I}}\) is the fourth-order identity tensor, \(\boldsymbol{\mathsf{T}}^{(I)(K)}\) is the cluster interaction tensor (fourth-order tensor) between the \(I\) th and \(K\) th material clusters, \(\boldsymbol{\mathsf{A}}^{(K)}_{n+1}\) is the material consistent tangent modulus of the \(K\) th material cluster, \(\boldsymbol{\mathsf{A}}^{e,\, 0}\) is the elastic tangent modulus of the reference homogeneous material, \(f^{(K)}\) is the volume fraction of the \(K\) th material cluster.


Parameters:
  • crve (CRVE) – Cluster-Reduced Representative Volume Element.

  • material_state (MaterialState) – CRVE material constitutive state.

  • global_cit_diff_tangent_mf (numpy.ndarray (2d)) – Global matrix similar to global cluster interaction matrix but where each cluster interaction tensor is double contracted with the difference between the associated material cluster consistent tangent modulus and the elastic reference material tangent modulus.

Returns:

jacobian – Lippmann-Schwinger equilibrium Jacobian matrix.

Return type:

numpy.ndarray (2d)

_build_residual(crve, material_state, presc_strain_idxs, presc_stress_idxs, applied_mac_load_mf, ref_material, global_cit_mf, global_strain_mf, inc_mac_load_mf=None, farfield_strain_mf=None, farfield_strain_old_mf=None)[source]

Build Lippmann-Schwinger equilibrium residuals.

Global residual function:

\[\begin{split}\boldsymbol{R}_{n+1} = \begin{bmatrix} \boldsymbol{R}^{(I)}_{n+1} \\[5pt] \boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1} \end{bmatrix} = \begin{bmatrix} \boldsymbol{0} \\[5pt] \boldsymbol{0} \end{bmatrix} \, , \qquad \forall I = 1,2, \, \dots, \, n_{\text{c}} \, ,\end{split}\]

where \(\boldsymbol{R}_{n+1}\) is the global residual function, \(\boldsymbol{R}^{(I)}_{n+1}\) is the \(I\) th material cluster equilibrium residual function, \(\boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1}\) is the strain and/or stress loading constraints residual function, \(n_{c}\) is the number of material clusters, and \(n+1\) denotes the current increment.


Infinitesimal strains (incremental equilibrium formulation, incremental primary unknowns):

Equilibrium residuals

\[\boldsymbol{R}^{(I)}_{n+1} = \Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(I)} + \sum^{n_{\text{c}}}_{J=1} \boldsymbol{\mathsf{T}}^{(I)(J)} : \left( \Delta \hat{\boldsymbol{\sigma}}_{\mu,\,n+1}^{(J)} - \boldsymbol{\mathsf{D}}^{e,\, 0}: \Delta\boldsymbol{\varepsilon}_{\mu,\,n+1}^{(J)} \right) - \Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{0}\, ,\]
\[\forall I = 1, \, \dots, \, n_{\text{c}} \, ,\]

where \(\boldsymbol{R}^{(I)}_{n+1}\) is the \(I\) th material cluster equilibrium residual function, \(\Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(I)}\) is the \(I\) th material cluster incremental infinitesimal strain tensor, \(\boldsymbol{\mathsf{T}}^{(I)(J)}\) is the cluster interaction tensor (fourth-order tensor) between the \(I\) th and \(J\) th material clusters, \(\Delta \boldsymbol{\sigma}_{\mu,\,n+1}^{(J)}\) is the \(J\) th material cluster incremental Cauchy stress tensor (\(\hat{(\cdot)}\) denotes the incremental nature of the constitutive function), \(\boldsymbol{\mathsf{D}}^{e,\, 0}\) is the elastic tangent modulus of the reference homogeneous material, \(\Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{0}\) is the incremental far-field infinitesimal strain tensor, \(n_{c}\) is the number of material clusters, and \(n+1\) denotes the current increment.

Loading (homogenization-based) strain and/or stress constraints

\[\boldsymbol{R}^{(n_{\text{c}} + 1)}_{n+1} = \sum^{n_{\text{c}}}_{I=1} f^{(I)} \Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(I)} - \Delta \boldsymbol{\varepsilon}_{n+1} \, ,\]

where \(\boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1}\) is the strain loading constraint residual function, \(f^{(I)}\) is the volume fraction of the \(I\) th material cluster, \(\Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(I)}\) is the \(I\) th material cluster incremental infinitesimal strain tensor, \(\Delta \boldsymbol{\varepsilon}_{n+1}\) is the macroscale incremental Cauchy stress tensor, \(n_{c}\) is the number of material clusters, and \(n+1\) denotes the current increment.

\[\boldsymbol{R}^{(n_{\text{c}} + 1)}_{n+1} = \sum^{n_{\text{c}}}_{I=1} f^{(I)} \Delta \hat{\boldsymbol{\sigma}}_{\mu,\,n+1}^{(I)} - \Delta \boldsymbol{\sigma}_{n+1} \, ,\]

where \(\boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1}\) is the stress loading constraint residual function, \(f^{(I)}\) is the volume fraction of the \(I\) th material cluster, \(\Delta \boldsymbol{\sigma}_{\mu,\,n+1}^{(I)}\) is the \(I\) th material cluster incremental Cauchy stress tensor (\(\hat{(\cdot)}\) denotes the incremental nature of the constitutive function), \(\Delta \boldsymbol{\sigma}_{n+1}\) is the macroscale incremental Cauchy stress tensor, \(n_{c}\) is the number of material clusters, and \(n+1\) denotes the current increment.


Infinitesimal strains (incremental equilibrium formulation, total primary unknowns):

This formulation is mathematically equivalent to the incremental formulation of the equilibrium problem. Based on the additive nature of both infinitesimal strain and Cauchy stress tensors, this functional format is suitable for a computational implementation where total primary unknowns are adopted.

Equilibrium residuals

\[\begin{split}\begin{multline} \boldsymbol{R}^{(I)}_{n+1} = \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(I)} + \sum^{n_{\text{c}}}_{J=1} \boldsymbol{\mathsf{T}}^{(I)(J)} : \left( \hat{\boldsymbol{\sigma}}_{\mu,\,n+1}^{(J)} - \boldsymbol{\mathsf{D}}^{e,\, 0}: \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(J)} \right) - \boldsymbol{\varepsilon}_{\mu,\,n+1}^{0} \\ - \left( \boldsymbol{\varepsilon}_{\mu,\,n}^{(I)} + \sum^{n_{\text{c}}}_{J=1} \boldsymbol{\mathsf{T}}^{(I)(J)} : \left( \boldsymbol{\sigma}_{\mu,\,n}^{(J)} - \boldsymbol{\mathsf{D}}^{e,\, 0}: \boldsymbol{\varepsilon}_{\mu,\,n}^{(J)} \right) - \boldsymbol{\varepsilon}_{\mu,\,n}^{0} \right) \, , \end{multline}\end{split}\]
\[\forall I = 1, \, \dots, \, n_{\text{c}} \, ,\]

where \(\boldsymbol{R}^{(I)}_{n+1}\) is the \(I\) th material cluster equilibrium residual function, \(\boldsymbol{\varepsilon}_{\mu}^{(I)}\) is the \(I\) th material cluster infinitesimal strain tensor, \(\boldsymbol{\mathsf{T}}^{(I)(J)}\) is the cluster interaction tensor (fourth-order tensor) between the \(I\) th and \(J\) th material clusters, \(\boldsymbol{\sigma}_{\mu}^{(J)}\) is the \(J\) th material cluster Cauchy stress tensor (\(\hat{(\cdot)}\) denotes the incremental nature of the constitutive function), \(\boldsymbol{\mathsf{D}}^{e,\, 0}\) is the elastic tangent modulus of the reference homogeneous material, \(\boldsymbol{\varepsilon}_{\mu}^{0}\) is the far-field infinitesimal strain tensor, \(n_{c}\) is the number of material clusters, \(n+1\) denotes the current increment, and \(n\) denotes the last converged increment.

Loading (homogenization-based) strain and/or stress constraints

\[\boldsymbol{R}^{(n_{\text{c}} + 1)}_{n+1} = \sum^{n_{\text{c}}}_{I=1} f^{(I)} \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(I)} - \boldsymbol{\varepsilon}_{n+1} - \left( \sum^{n_{\text{c}}}_{I=1} f^{(I)} \boldsymbol{\varepsilon}_{\mu,\,n}^{(I)} - \boldsymbol{\varepsilon}_{n} \right) \, ,\]

where \(\boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1}\) is the strain loading constraint residual function, \(f^{(I)}\) is the volume fraction of the \(I\) th material cluster, \(\boldsymbol{\varepsilon}_{\mu}^{(I)}\) is the \(I\) th material cluster infinitesimal strain tensor, \(\boldsymbol{\varepsilon}\) is the macroscale infinitesimal strain tensor, \(n_{c}\) is the number of material clusters, \(n+1\) denotes the current increment, and \(n\) denotes the last converged increment.

\[\boldsymbol{R}^{(n_{\text{c}} + 1)}_{n+1} = \sum^{n_{\text{c}}}_{I=1} f^{(I)} \hat{\boldsymbol{\sigma}}_{\mu,\,n+1}^{(I)} - \boldsymbol{\sigma}_{n+1} - \left( \sum^{n_{\text{c}}}_{I=1} f^{(I)} \boldsymbol{\sigma}_{\mu,\,n}^{(I)} - \boldsymbol{\sigma}_{n} \right) \, ,\]

where \(\boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1}\) is the stress loading constraint residual function, \(f^{(I)}\) is the volume fraction of the \(I\) th material cluster, \(\boldsymbol{\sigma}_{\mu}^{(I)}\) is the \(I\) th material cluster Cauchy stress tensor (\(\hat{(\cdot)}\) denotes the incremental nature of the constitutive function), \(\boldsymbol{\sigma}\) is the macroscale incremental Cauchy stress tensor, \(n_{c}\) is the number of material clusters, \(n+1\) denotes the current increment, and \(n\) denotes the last converged increment.


Finite strains (total equilibrium formulation, total primary unknowns):

Equilibrium residuals

\[\boldsymbol{R}^{(I)}_{n+1} = \boldsymbol{F}_{\mu,\,n+1}^{(I)} + \sum^{n_{\text{c}}}_{J=1} \boldsymbol{\mathsf{T}}^{(I)(J)} : \left( \hat{\boldsymbol{P}}_{\mu,\,n+1}^{(J)} - \boldsymbol{\mathsf{A}}^{e,\, 0}: \boldsymbol{F}_{\mu,\,n+1}^{(J)} \right) - \boldsymbol{F}_{\mu,\,n+1}^{0} \, ,\]
\[\forall I = 1, \, \dots, \, n_{\text{c}} \, ,\]

where \(\boldsymbol{R}^{(I)}_{n+1}\) is the \(I\) th material cluster equilibrium residual function, \(\boldsymbol{F}_{\mu,\,n+1}^{(I)}\) is the \(I\) th material cluster deformation gradient, \(\boldsymbol{\mathsf{T}}^{(I)(J)}\) is the cluster interaction tensor (fourth-order tensor) between the \(I\) th and \(J\) th material clusters, \(\boldsymbol{P}_{\mu,\,n+1}^{(J)}\) is the \(J\) th material cluster first Piola-Kirchhoff stress tensor (\(\hat{(\cdot)}\) denotes the incremental nature of the constitutive function), \(\boldsymbol{\mathsf{A}}^{e,\, 0}\) is the elastic tangent modulus of the reference homogeneous material, \(\boldsymbol{F}_{\mu,\,n+1}^{0}\) is the far-field deformation gradient, \(n_{c}\) is the number of material clusters, and \(n+1\) denotes the current increment.

Loading (homogenization-based) strain and/or stress constraints

\[\boldsymbol{R}^{(n_{\text{c}} + 1)}_{n+1} = \sum^{n_{\text{c}}}_{I=1} f^{(I)} \boldsymbol{F}_{\mu,\,n+1}^{(I)} - \boldsymbol{F}_{n+1} \, ,\]

where \(\boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1}\) is the strain loading constraint residual function, \(f^{(I)}\) is the volume fraction of the \(I\) th material cluster, \(\boldsymbol{F}_{\mu,\,n+1}^{(I)}\) is the \(I\) th material cluster deformation gradient, \(\boldsymbol{F}_{n+1}\) is the macroscale deformation gradient, \(n_{c}\) is the number of material clusters, and \(n+1\) denotes the current increment.

\[\boldsymbol{R}^{(n_{\text{c}} + 1)}_{n+1} = \sum^{n_{\text{c}}}_{I=1} f^{(I)} \hat{\boldsymbol{P}}_{\mu,\,n+1}^{(I)} - \boldsymbol{P}_{n+1}\]

where \(\boldsymbol{R}^{(n_{\text{c}}+1)}_{n+1}\) is the stress loading constraint residual function, \(f^{(I)}\) is the volume fraction of the \(I\) th material cluster, \(\boldsymbol{P}_{\mu, \,n+1}^{(I)}\) is the \(I\) th material cluster first Piola-Kirchhoff stress tensor (\(\hat{(\cdot)}\) denotes the incremental nature of the constitutive function), \(\boldsymbol{P}_{n+1}\) is the macroscale first Piola-Kirchhoff stress tensor, \(n_{c}\) is the number of material clusters, and \(n+1\) denotes the current increment.


Parameters:
  • crve (CRVE) – Cluster-Reduced Representative Volume Element.

  • material_state (MaterialState) – CRVE material constitutive state.

  • presc_strain_idxs (list[int]) – Prescribed macroscale loading strain components indexes.

  • presc_stress_idxs (list[int]) – Prescribed macroscale loading stress components indexes.

  • applied_mac_load_mf (dict) – For each prescribed loading nature type (key, {‘strain’, ‘stress’}), stores the current applied macroscale loading constraints in a numpy.ndarray of shape (n_comps,).

  • ref_material (ElasticReferenceMaterial) – Elastic reference material.

  • global_cit_mf (numpy.ndarray (2d)) – Global cluster interaction matrix. Assembly positions are assigned according to the order of material_phases (1st) and phase_clusters (2nd).

  • global_strain_mf (numpy.ndarray (1d)) – Global vector of clusters strain tensors (matricial form).

  • inc_mac_load_mf (dict, default=None) – For each loading nature type (key, {‘strain’, ‘stress’}), stores the incremental loading constraint matricial form in a numpy.ndarray of shape (n_comps,).

  • farfield_strain_mf (numpy.ndarray (1d), default=None) – Far-field strain tensor (matricial form).

  • farfield_strain_old_mf (numpy.ndarray (1d), default=None) – Last converged far-field strain tensor (matricial form).

Returns:

residual – Lippmann-Schwinger equilibrium residual vector.

Return type:

numpy.ndarray (1d)

_check_convergence(crve, material_state, presc_strain_idxs, presc_stress_idxs, applied_mac_load_mf, residual, applied_mix_strain_mf=None)[source]

Check Lippmann-Schwinger equilibrium convergence.

Parameters:
  • crve (CRVE) – Cluster-Reduced Representative Volume Element.

  • material_state (MaterialState) – CRVE material constitutive state.

  • presc_strain_idxs (list[int]) – Prescribed macroscale loading strain components indexes.

  • presc_stress_idxs (list[int]) – Prescribed macroscale loading stress components indexes.

  • applied_mac_load_mf (dict) – For each prescribed loading nature type (key, {‘strain’, ‘stress’}), stores the current applied loading constraints in a numpy.ndarray of shape (n_comps,).

  • residual (numpy.ndarray (1d)) – Lippmann-Schwinger equilibrium residual vector.

  • applied_mix_strain_mf (numpy.ndarray (1d), default=None) – Strain tensor (matricial form) that contains prescribed strain components and (non-prescribed) homogenized strain components.

Returns:

  • is_converged (bool) – True if Lippmann-Schwinger equilibrium iterative solution converged, False otherwise.

  • errors (list[float]) – List of errors associated with the Lippmann-Schwinger equilibrium convergence evaluation.

_crve_effective_tangent_modulus(crve, material_state, global_cit_diff_tangent_mf, global_strain_mf=None, farfield_strain_mf=None)[source]

CRVE tangent modulus and clusters strain concentration tensors.

Infinitesimal strains:

\[\overline{\boldsymbol{\mathsf{D}}}_{n+1} = \sum^{n_{\text{c}}}_{I=1} f^{(I)} \boldsymbol{\mathsf{D}}^{(I)}_{n+1} : \boldsymbol{\mathsf{H}}^{(I)}_{n+1} \, ,\]
\[\mathbf{H}^{(I)}_{n+1} = \sum_{K=1}^{ n_{\text{c}}} \left( \mathbf{M}^{-1} \right)_{(I)(K)} \, , \quad \forall I = 1,2, \, \dots, \, n_{\text{c}} \, ,\]
\[\begin{split}\mathbf{M} = \begin{bmatrix} \dfrac{\partial \boldsymbol{R}^{(1)}_{n+1}}{\partial \Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(1)}} & \dots & \dfrac{\partial \boldsymbol{R}^{(1)}_{n+1}}{\partial \Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(n_{\text{c}})}} \\[10pt] \vdots & \ddots & \vdots \\[5pt] \dfrac{\partial \boldsymbol{R}^{(n_{\mathrm{c}})}_{n+1}}{ \partial \Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(1)}} & \dots & \dfrac{\partial \boldsymbol{R}^{(n_{\text{c}})}_{n+1}}{\partial \Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(n_{\text{c}})}} \end{bmatrix} \, ,\end{split}\]

where \(\overline{\boldsymbol{\mathsf{D}}}_{n+1}\) is the CRVE homogenized consistent tangent modulus, \(f^{(I)}\) is the volume fraction of the \(I\) th material cluster, \(\boldsymbol{\mathsf{D}}^{(I)}_{n+1}\) is the consistent tangent modulus of the \(I\) th material cluster, \(\boldsymbol{\mathsf{H}}^{(I)}_{n+1}\) is the \(I\) th material cluster strain concentration tensor, \(\boldsymbol{R}^{(I)}_{n+1}\) is the \(I\) th material cluster equilibrium residual function, \(\Delta \boldsymbol{\varepsilon}_{\mu,\,n+1}^{(K)}\) is the \(K\) th material cluster incremental infinitesimal strain tensor, \(n_{c}\) is the number of material clusters, and \(n+1\) denotes the current increment.

The residual derivatives are defined as

\[\dfrac{\partial \boldsymbol{R}^{(I)}_{n+1}}{\partial \Delta \boldsymbol{\varepsilon}_{\mu, \, n+1}^{(K)}} = \delta_{(I)(K)} \boldsymbol{\mathsf{I}} + \boldsymbol{\mathsf{T}}^{(I)(K)} : \left( \boldsymbol{\mathsf{D}}^{(K)}_{n+1} - \boldsymbol{\mathsf{D}}^{e,\, 0} \right) \, ,\]
\[\forall I, K = 1, \, \dots, \, n_{\text{c}} \, .\]

Remark: The residual derivatives are the same when the residual functions are derived with respect to the total strains.


Finite strains:

\[\overline{\boldsymbol{\mathsf{A}}}_{n+1} = \sum^{n_{\text{c}}}_{I=1} f^{(I)} \boldsymbol{\mathsf{A}}^{(I)}_{n+1} : \boldsymbol{\mathsf{H}}^{(I)}_{n+1} \, ,\]
\[\mathbf{H}^{(I)}_{n+1} = \sum_{K=1}^{ n_{\text{c}}} \left( \mathbf{M}^{-1} \right)_{(I)(K)} \, , \quad \forall I = 1,2, \, \dots, \, n_{\text{c}} \, ,\]
\[\begin{split}\mathbf{M} = \begin{bmatrix} \dfrac{\partial \boldsymbol{R}^{(1)}_{n+1}}{\partial \boldsymbol{F}_{\mu,\,n+1}^{(1)}} & \dots & \dfrac{\partial \boldsymbol{R}^{(1)}_{n+1}}{\partial \boldsymbol{F}_{\mu,\,n+1}^{(n_{\text{c}})}} \\[10pt] \vdots & \ddots & \vdots \\[5pt] \dfrac{\partial \boldsymbol{R}^{(n_{\mathrm{c}})}_{n+1}}{\partial \boldsymbol{F}_{\mu,\,n+1}^{(1)}} & \dots & \dfrac{\partial \boldsymbol{R}^{(n_{\text{c}})}_{n+1}}{ \partial \boldsymbol{F}_{\mu,\,n+1}^{(n_{\text{c}})}} \end{bmatrix} \, ,\end{split}\]

where \(\overline{\boldsymbol{\mathsf{A}}}_{n+1}\) is the CRVE homogenized material consistent tangent modulus, \(f^{(I)}\) is the volume fraction of the \(I\) th material cluster, \(\boldsymbol{\mathsf{A}}^{(I)}_{n+1}\) is the material consistent tangent modulus of the \(I\) th material cluster, \(\boldsymbol{\mathsf{H}}^{(I)}_{n+1}\) is the \(I\) th material cluster strain concentration tensor, \(\boldsymbol{R}^{(I)}_{n+1}\) is the \(I\) th material cluster equilibrium residual function, \(\boldsymbol{F}_{\mu,\,n+1}^{(K)}\) is the \(K\) th material cluster deformation gradient, \(n_{c}\) is the number of material clusters, and \(n+1\) denotes the current increment.

The residual derivatives are defined as

\[\dfrac{\partial \boldsymbol{R}^{(I)}_{n+1}}{\partial \boldsymbol{F}_{\mu, \, n+1}^{(K)}} = \delta_{(I)(K)} \boldsymbol{\mathsf{I}} + \boldsymbol{\mathsf{T}}^{(I)(K)} : \left( \boldsymbol{\mathsf{A}}^{(K)}_{n+1} - \boldsymbol{\mathsf{A}}^{e,\, 0} \right) \, ,\]
\[\forall I, K = 1, \, \dots, \, n_{\text{c}} \, .\]

Parameters:
  • crve (CRVE) – Cluster-Reduced Representative Volume Element.

  • material_state (MaterialState) – CRVE material constitutive state.

  • global_cit_diff_tangent_mf (numpy.ndarray (2d)) – Global matrix similar to global cluster interaction matrix but where each cluster interaction tensor is double contracted with the difference between the associated material cluster consistent tangent modulus and the elastic reference material tangent modulus.

  • global_strain_mf (numpy.ndarray (1d), default=None) – Global vector of clusters strains stored in matricial form. Only required for validation of cluster strain concentration tensors computation.

  • farfield_strain_mf (numpy.ndarray (1d), default=None) – Far-field strain tensor (matricial form). Only required for validation of cluster strain concentration tensors computation.

Returns:

  • eff_tangent_mf (numpy.ndarray (2d)) – CRVE effective material tangent modulus (matricial form).

  • clusters_sct_mf (dict) – Fourth-order strain concentration tensor (matricial form) (item, numpy.ndarray (2d)) associated with each material cluster (key, str).

static _display_inc_data(mac_load_path)[source]

Display loading increment data.

Parameters:

mac_load_path (LoadingPath) – Macroscale loading path.

static _display_nr_iter_data(mode='init', nr_iter=None, nr_iter_time=None, errors=[])[source]

Display Newton-Raphson iteration data.

Parameters:
  • mode ({'init', 'iter'}) – Output mode: Newton-Raphson iteration header (‘init’) or solution related metrics (‘iter’).

  • nr_iter (int) – Newton-Raphson iteration counter.

  • nr_iter_time (float) – Total Newton-Raphson iteration time (s).

  • errors (list[float]) – List of errors associated with the Newton-Raphson convergence evaluation.

static _display_scs_iter_data(ref_material, is_lock_prop_ref, mode='init', scs_iter_time=None)[source]

Display reference material self-consistent scheme iteration data.

Parameters:
  • ref_material (ElasticReferenceMaterial) – Elastic reference material.

  • is_lock_prop_ref (bool) – True if elastic reference material properties are locked, False otherwise.

  • mode ({'init', 'end'}) – Output mode: Self-consistent scheme iteration header (init) or footer (end).

  • scs_iter_time (float) – Total self-consistent scheme time (s).

_init_clusters_sct(material_phases, phase_clusters)[source]

Initialize cluster strain concentration tensors.

Parameters:
  • material_phases (list[str]) – RVE material phases labels (str).

  • phase_clusters (dict) – Clusters labels (item, list[int]) associated with each material phase (key, str).

Returns:

clusters_sct_mf – Fourth-order strain concentration tensor (matricial form) (item, numpy.ndarray (2d)) associated with each material cluster (key, str).

Return type:

dict

_init_farfield_strain_mf(mode='last_converged')[source]

Set far-field strain initial iterative guess.

Parameters:

mode ({'last_converged',}, default='last_converged') – Strategy to set incremental far-field strain initial iterative guess.

Returns:

farfield_strain_mf – Incremental far-field strain tensor (matricial form).

Return type:

1darray, default=None

_init_global_inc_strain_mf(n_total_clusters, mode='last_converged')[source]

Set clusters incremental strains initial iterative guess.

Parameters:
  • n_total_clusters (int) – Total number of clusters.

  • mode ({'last_converged',}, default='last_converged') – Strategy to set clusters incremental strains initial iterative guess.

Returns:

global_inc_strain_mf – Global vector of clusters incremental strains stored in matricial form.

Return type:

numpy.ndarray (1d)

_init_global_strain_mf(crve, material_state, mode='last_converged')[source]

Set clusters strains initial iterative guess.

Parameters:
  • crve (CRVE) – Cluster-Reduced Representative Volume Element.

  • material_state (MaterialState) – CRVE material constitutive state at rewind state.

  • mode ({'last_converged',}, default='last_converged') – Strategy to set clusters incremental strains initial iterative guess.

Returns:

global_strain_mf – Global vector of clusters strains stored in matricial form.

Return type:

numpy.ndarray (1d)

_init_inc_farfield_strain_mf(mode='last_converged')[source]

Set incremental far-field strain initial iterative guess.

Parameters:

mode ({'last_converged',}, default='last_converged') – Strategy to set incremental far-field strain initial iterative guess.

Returns:

inc_farfield_strain_mf – Incremental far-field strain tensor (matricial form).

Return type:

numpy.ndarray (1d), default=None

_set_output_files(output_dir, crve, problem_name='problem', is_clust_adapt_output=False, is_ref_material_output=None, is_vtk_output=False, vtk_data=None, is_voxels_output=None)[source]

Create and initialize output files.

Parameters:
  • output_dir (str) – Absolute directory path of output files.

  • crve (CRVE) – Cluster-Reduced Representative Volume Element.

  • problem_name (str, default='problem') – Problem name.

  • is_clust_adapt_output (bool, default=False) – Clustering adaptivity output flag.

  • is_ref_material_output (bool, default=False) – Reference material output flag.

  • is_vtk_output (bool, default=False) – VTK output flag.

  • vtk_data (dict, default=None) – VTK output file parameters.

  • is_voxels_output (bool) – Voxels output flag.

Returns:

  • hres_output (HomResOutput) – Output associated with the homogenized results.

  • efftan_output (EffTanOutput) – Output associated with the CRVE effective tangent modulus.

  • ref_mat_output (RefMatOutput) – Output associated with the reference material.

  • voxels_output (VoxelsOutput) – Output associated with voxels material-related quantities.

  • adapt_output (ClusteringAdaptivityOutput) – Output associated with the clustering adaptivity procedures.

  • vtk_output (VTKOutput) – Output associated with the VTK files.

_validate_csct(material_phases, phase_clusters, global_csct_mf, global_strain_mf, farfield_strain_mf)[source]

Validate clusters strain concentration tensors computation.

This validation procedure requires the homogenized strain tensor instead of the far-field strain tensor in the SCA formulation without the far-field strain tensor.


Parameters:
  • material_phases (list[str]) – RVE material phases labels (str).

  • phase_clusters (dict) – Clusters labels (item, list[int]) associated with each material phase (key, str).

  • global_csct_mf (numpy.ndarray (2d)) – Global matrix of cluster strain concentration tensors (matricial form).

  • global_strain_mf (numpy.ndarray (1d)) – Global vector of clusters strains stored in matricial form.

  • farfield_strain_mf (numpy.ndarray (1d)) – Far-field strain tensor (matricial form).

get_time_profile()[source]

Get time profile of online-stage.

Returns:

  • total_time (float) – Total time (s) associated with online-stage.

  • effective_time (float) – Total time (s) associated with the solution of the equilibrium problem.

  • post_process_time (float) – Total time (s) associated with post-processing operations.

solve_equilibrium_problem(crve, material_state, mac_load, mac_load_presctype, mac_load_increm, output_dir, problem_name='problem', clust_adapt_freq=None, is_solution_rewinding=False, rewind_state_criterion=None, rewinding_criterion=None, max_n_rewinds=1, is_clust_adapt_output=False, is_ref_material_output=False, is_vtk_output=False, vtk_data=None, is_voxels_output=False)[source]

Solve clustering-based reduced-order equilibrium problem.

The overall solution procedure of the Self-consistent Clustering Analysis (SCA) under infinitesimal strains is summarized in Boxes C.2 (Newton-Raphson iterative scheme) and C.3 (self-consistent iterative scheme) of Ferreira (2022) [3]. The finite strain extension compatible with multiplicative kinematics can be found in Box 4.2 (Newton-Raphson iterative scheme) and the enrichement with clustering adaptivity (Adaptive Self-consistent Clustering Analysis (ASCA)) is described in Section 4.4.


Parameters:
  • crve (CRVE) – Cluster-Reduced Representative Volume Element.

  • material_state (MaterialState) – CRVE material constitutive state.

  • mac_load (dict) – For each loading nature type (key, {‘strain’, ‘stress’}), stores the loading constraints for each loading subpath in a numpy.ndarray (2d), where the i-th row is associated with the i-th strain/stress component and the j-th column is associated with the j-th loading subpath.

  • mac_load_presctype (numpy.ndarray (2d)) – Loading nature type ({‘strain’, ‘stress’}) associated with each loading constraint (numpy.ndarray of shape (n_comps, n_load_subpaths)), where the i-th row is associated with the i-th strain/stress component and the j-th column is associated with the j-th loading subpath.

  • mac_load_increm (dict) – For each loading subpath id (key, str), stores a numpy.ndarray of shape (n_load_increments, 2) where each row is associated with a prescribed loading increment, and the columns 0 and 1 contain the corresponding incremental load factor and incremental time, respectively.

  • output_dir (str) – Absolute directory path of output files.

  • problem_name (str, default='problem') – Problem name.

  • clust_adapt_freq (dict, default=None) – Clustering adaptivity frequency (relative to loading incrementation) (item, int) associated with each adaptive cluster-reduced material phase (key, str).

  • is_solution_rewinding (bool, default=False) – Problem solution rewinding flag.

  • rewind_state_criterion (tuple, default=None) – Rewind state storage criterion [0] and associated parameter [1].

  • rewinding_criterion (tuple, default=None) – Rewinding criterion [0] and associated parameter [1].

  • max_n_rewinds (int, default=1) – Maximum number of rewind operations.

  • is_clust_adapt_output (bool, default=False) – Clustering adaptivity output flag.

  • is_ref_material_output (bool, default=False) – Reference material output flag.

  • is_vtk_output (bool, default=False) – VTK output flag.

  • vtk_data (dict, default=None) – VTK output file parameters.

  • is_voxels_output (bool) – Voxels output file flag.