Skip to content

Code verification opfm

Verification of the Opfm material law

TODO replace OpfmCUbe by OpfmUnitcell

To verify that the expected model form is correctly implemented, the OpfmCube model is used. Indeed, this model uses the same run-processor processor component (and thus the same material subroutine) as the OpfmPlate model. It differs from the latter by its pre-processor and post-processor components, in which an RVE approach is used instead of a meshed model of a plate. Thus, it allows the verification of the implementation of the model dataflow, the call to Abaqus with proper options, and the interfacing with the subroutine. The verification is based on the relationship between the material properties defined as inputs and the model's outputs such as max_strength. For instance, when considering the response simulated with the OpfmCube model under a pure longitudinal load (PST on 0° laminate), the material property Xt should be equal to the max_strength output. The code verification relies on the VIMSEO CodeVerificationAgainstData tool, where an example is given here.

The error between Xt and max_strength is computed for two values of the numerical parameter nb_intervals, which controls the convergence of the subroutine. The reference dataset that needs to be specified to the CodeVerificationAgainstData tool is composed of three variables: - the inputs Xt and nb_intervals - the output max_strength

Several metrics of comparison can be specified to evaluate the error between the reference output and the corresponding simulated value.

Here, the relative error is found to be negligible.

Matrix

Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4
OpfmPlate OpfmUnitCell OpfmCube rel_tol
PST, [0] PST0 PST0 0.2
PST, [0, 0] PST0 PST0 0.2
PST, [90] PST90 PST90 0.2
PST, [90, 90] PST90 PST90 0.2
PSC, [0] PSC0 PSC0 0.2
PSC, [0, 0] PSC0 PSC0 0.2
PSC, [90] PSC90 PSC90 0.2
PSC, [90, 90] PSC90 PSC90 0.2
PST, [45, -45]s IPS IPS 0.2
nan nan nan nan
nan nan nan nan
PgPlate nan nan nan
OHT VATool nan 0.2
PST VATool nan 0.2
nan nan nan nan
nan nan nan nan
nan nan nan nan
OpfmCube nan nan nan
PST0 max_strength=Xt nan epsilon
PSC0 max_strength=Xc nan epsilon
PST90 max_strength=Yt nan epsilon
PSC90 max_strength=Yc nan epsilon

Verification of the integration of the Opfm material law with Abaqus

Repeat above verif for OpfmCUbe

Then, the integration of the Opfm law with Abaqus, which is done through VIMSEO RunAbaqusWrapper can be performed. First, we can check that the OpfmCube and OpfmUnitCell models return results that are close on load cases with uniform stress distribution. By close, we mean \(10 \%\) error, because the boundary conditions between the two models are not strictly the same.

TODO add link to deployed doc

Code verification for OpfmPlate model PST

Secondly, we can check that the OpfmPlate and OpfmCube model also return close results.

The following test matrix is used:

OpfmPlate layup OpfmUnitCell OpfmCube rel_tol
PST [0] PST0 PST0 0.1
PST [0, 0] PST0 PST0 0.1
PST [90] PST90 PST90 0.1
PST [90, 90] PST90 PST90 0.1
PSC [0] PSC0 PSC0 0.1
PSC [0, 0] PSC0 PSC0 0.1
PSC [90] PSC90 PSC90 0.1
PSC [90, 90] PSC90 PSC90 0.1

The OpfmPlate PST model is verified against OpfmCube PST. The variables of the parameter space on which the models are sampled correspond to input variables to which the max_strength output is the most sensitive for the OpfmCube PST model, which are:

  • \(E1\)
  • \(E1t\)
  • \(G12\)
  • \(Xt\)

The geometrical parameters:

  • \(width\)
  • \(length\)
  • \(thickness\)

are also added. Triangular distributions are defined for each variable, ranging over the bounds defined in the Opfm material of vims-composites.

TODO link to example

Layup \([0]\)

The input parameter space is represented in the following figure:

One way to represent how the error range and their distribution is to plot a histogram of the errors (one for each error metric). Thus, in abscissa we have error band values, and in ordinate we have the number of error values within a given band. We observe that the relative error on \(max\_strength\) between the two models can reach \(10 \%\):