Material Models

Each RatelMaterial is responsible for adding volumetric terms to the residual, Jacobian, and diagnostic quantity evaluation operators as well as any surface terms that require volumetric or material model values. Additionally, each RatelMaterial is responsible for building and modifying corresponding preconditioner components, as needed.

typedef PetscErrorCode (*RatelMaterialSetupMultigridLevelFunction)(RatelMaterial material, DM dm_level, CeedVector m_loc, CeedOperator sub_op_fine, CeedOperator op_coarse, CeedOperator op_prolong, CeedOperator op_restrict)

Material model multigrid level setup function.

typedef int (*RatelComputef1)(void*, CeedInt, CeedInt, const CeedScalar *const*, CeedScalar *const*, CeedScalar[3][3], CeedScalar[3][3])
typedef int (*RatelComputef1_fwd)(void*, CeedInt, CeedInt, const CeedScalar *const*, CeedScalar *const*, CeedScalar[3][3], CeedScalar[3][3])
typedef int (*RatelComputeDiagnosticStress)(void*, const CeedScalar, const CeedScalar, const CeedScalar, CeedScalar[3][3], CeedScalar[6], CeedScalar*, CeedScalar*, CeedScalar*)
typedef int (*RatelComputef1_Mixed)(void*, CeedInt, CeedInt, const CeedScalar *const*, CeedScalar *const*, CeedScalar[3][3], CeedScalar[3][3], CeedScalar*)
typedef int (*RatelComputedf1_fwd_Mixed)(void*, CeedInt, CeedInt, const CeedScalar *const*, CeedScalar *const*, CeedScalar[3][3], CeedScalar[3][3], CeedScalar*, CeedScalar*)
typedef int (*RatelComputeg0_Mixed)(void*, CeedInt, CeedInt, const CeedScalar *const*, const CeedScalar, CeedScalar *const*, CeedScalar*)
typedef int (*RatelComputedg0_fwd_Mixed)(void*, CeedInt, CeedInt, const CeedScalar *const*, const CeedScalar, const CeedScalar, CeedScalar *const*, CeedScalar*)
typedef int (*RatelComputeDiagnosticMixedStress)(void*, const CeedScalar, const CeedScalar, const CeedScalar, const CeedScalar, CeedScalar[3][3], CeedScalar[6], CeedScalar*, CeedScalar*, CeedScalar*)
struct RatelModelParameterData_private elasticity_damage_param_data_private

Elasticity+damage model parameters for CeedQFunctionContext and viewing.

RatelModelParameterData elasticity_damage_param_data = &elasticity_damage_param_data_private
struct RatelModelParameterData_private mixed_neo_hookean_param_data_private

Mixed Neo-Hookean model parameters for CeedQFunctionContext and viewing.

RatelModelParameterData mixed_neo_hookean_param_data = &mixed_neo_hookean_param_data_private
struct RatelModelParameterData_private mixed_ogden_param_data_private

Mixed Ogden model parameters for CeedQFunctionContext and viewing.

RatelModelParameterData mixed_ogden_param_data = &mixed_ogden_param_data_private
struct RatelModelParameterData_private mms_ceed_bps_param_data_private

CEED BPs MMS model parameters for CeedQFunctionContext and viewing.

RatelModelParameterData mms_ceed_bps_param_data = &mms_ceed_bps_param_data_private
struct RatelModelParameterData_private mms_linear_elasticity_param_data_private

Linear elasticity MMS model parameters for CeedQFunctionContext and viewing.

RatelModelParameterData mms_linear_elasticity_param_data = &mms_linear_elasticity_param_data_private
struct RatelModelParameterData_private mooney_rivlin_param_data_private

Mooney-Rivlin model parameters for CeedQFunctionContext and viewing.

RatelModelParameterData mooney_rivlin_param_data = &mooney_rivlin_param_data_private
struct RatelModelParameterData_private neo_hookean_param_data_private

Neo-Hookean model parameters for CeedQFunctionContext and viewing.

RatelModelParameterData neo_hookean_param_data = &neo_hookean_param_data_private
struct RatelModelParameterData_private ogden_param_data_private

Ogden model parameters for CeedQFunctionContext and viewing.

RatelModelParameterData ogden_param_data = &ogden_param_data_private
struct RatelModelParameterData_private plasticity_linear_param_data_private

Linear plasticity model parameters for CeedQFunctionContext and viewing.

RatelModelParameterData plasticity_linear_param_data = &plasticity_linear_param_data_private
const char DMSwarmPICField_volume[] = "volume"
int RestrictBoundingBox(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Restrict the bounding box of the domain to a given bounding box.

Parameters:
  • ctx[in] QFunction context, RatelBoundingBoxParamsContext

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - x, physical (initial) coordinates

    • 1 - scale, multiplicity scaling factor

    • 2 - r, current timestep residual

  • out[out] Output array

    • 0 - v, current timestep residual restricted to bounding box

Returns:

An error code: 0 - success, otherwise - failure

int SetupSurfaceGeometryBounded(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute geometric factors for integration, gradient transformations, and coordinate transformations on element faces, restricted by a bounding box.

Reference (parent) 2D coordinates are given by X and physical (current) 3D coordinates are given by x. The change of coordinate matrix is given bydxdX_{i,j} = dx_i/dX_j (indicial notation) [3 * 2].

(N_1, N_2, N_3) is given by the cross product of the columns of dxdX_{i,j}.

detNb is the magnitude of (N_1, N_2, N_3).

Parameters:
  • ctx[in] QFunction context, RatelBoundingBoxParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - Face coordinates

    • 1 - Jacobian of face coordinates

    • 2 - quadrature weights

  • out[out] Output array

    • 0 - qdata, w detNb and N

Returns:

An error code: 0 - success, otherwise - failure

int SetupSurfaceForceGeometry(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute geometric factors for integration, gradient transformations, and coordinate transformations on element faces.

Reference (parent) 2D coordinates are given by X and physical (current) 3D coordinates are given by x. The change of coordinate matrix is given bydxdX_{i,j} = dx_i/dX_j (indicial notation) [3 * 2].

(N_1, N_2, N_3) is given by the cross product of the columns of dxdX_{i,j}.

detNb is the magnitude of (N_1, N_2, N_3).

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - Jacobian of cell coordinates

    • 1 - Jacobian of face coordinates

    • 2 - quadrature weights

  • out[out] Output array

    • 0 - qdata, w detNb, dXdx, and N

Returns:

An error code: 0 - success, otherwise - failure

int SetupSurfaceGeometry(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute geometric factors for integration, gradient transformations, and coordinate transformations on element faces.

Reference (parent) 2D coordinates are given by X and physical (current) 3D coordinates are given by x. The change of coordinate matrix is given bydxdX_{i,j} = dx_i/dX_j (indicial notation) [3 * 2].

(N_1, N_2, N_3) is given by the cross product of the columns of dxdX_{i,j}.

detNb is the magnitude of (N_1, N_2, N_3).

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - Jacobian of face coordinates

    • 1 - quadrature weights

  • out[out] Output array

    • 0 - qdata, w detNb and N

Returns:

An error code: 0 - success, otherwise - failure

int SetupVolumeGeometryMPM(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute geometric factors for integration, gradient transformations, and coordinate transformations in elements.

Reference (parent) coordinates are given by X and physical (current) coordinates are given by x. Change of coordinate matrix is given by dxdX_{i,j} = x_{i,j} (indicial notation). Inverse of change of coordinate matrix is given by dXdx_{i,j} = (detJ^-1) * X_{i,j}.

We require the transpose of the inverse of the Jacobian to properly compute integrals of the form int( gradv u ).

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - Jacobian of cell coordinates

    • 1 - quadrature weights

    • 2 - point volumes

  • out[out] Output array

    • 0 - qdata, w V_p and dXdx

Returns:

An error code: 0 - success, otherwise - failure

int UpdateVolume_MPM(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Update swarm volume based on previous converged solution for hyperelastic materials.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

    • 2 - Volume in the previous converged solution

  • out[out] Output array

    • 0 - Updated volume J*V_prev

Returns:

An error code: 0 - success, otherwise - failure

int SetupVolumeGeometrySymmetricMPM(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute symmetric geometric factors for integration, gradient transformations, and coordinate transformations in elements.

Reference (parent) coordinates are given by X and physical (current) coordinates are given by x. Change of coordinate matrix is given by dxdX_{i,j} = x_{i,j} (indicial notation). Inverse of change of coordinate matrix is given by dXdx_{i,j} = (detJ^-1) * X_{i,j}.

We require the transpose of the inverse of the Jacobian to properly compute integrals of the form int( gradv u ).

Inverse of Jacobian is given by dXdx_i,j = Aij / detJ. We store w A^T A / detJ, which is symmetric, so we only store 6 distinct entries.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - Jacobian of cell coordinates

    • 1 - quadrature weights

    • 2 - point volumes

  • out[out] Output array

    • 0 - qdata, w V_p and dXdx_sym

Returns:

An error code: 0 - success, otherwise - failure

int SetupVolumeGeometrySymmetric(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute symmetric geometric factors for integration, gradient transformations, and coordinate transformations in elements.

Reference (parent) coordinates are given by X and physical (current) coordinates are given by x. Change of coordinate matrix is given by dxdX_{i,j} = x_{i,j} (indicial notation). Inverse of change of coordinate matrix is given by dXdx_{i,j} = (detJ^-1) * X_{i,j}.

We require the transpose of the inverse of the Jacobian to properly compute integrals of the form int( gradv u ).

Inverse of Jacobian is given by dXdx_i,j = Aij / detJ. We store w A^T A / detJ, which is symmetric, so we only store 6 distinct entries.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - Jacobian of cell coordinates

    • 1 - quadrature weights

  • out[out] Output array

    • 0 - qdata, w detJ and dXdx_sym

Returns:

An error code: 0 - success, otherwise - failure

int SetupVolumeGeometry(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute geometric factors for integration, gradient transformations, and coordinate transformations in elements.

Reference (parent) coordinates are given by X and physical (current) coordinates are given by x. Change of coordinate matrix is given by dxdX_{i,j} = x_{i,j} (indicial notation). Inverse of change of coordinate matrix is given by dXdx_{i,j} = (detJ^-1) * X_{i,j}.

We require the transpose of the inverse of the Jacobian to properly compute integrals of the form int( gradv u ).

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - Jacobian of cell coordinates

    • 1 - quadrature weights

  • out[out] Output array

    • 0 - qdata, w detJ and dXdx

Returns:

An error code: 0 - success, otherwise - failure

int Residual_CEED_BP1(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute the residual for the CEED scalar BP problem.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - interpolated values of u

  • out[out] Output array

    • 0 - action of the QFunction

Returns:

An error code: 0 - success, otherwise - failure

int Jacobian_CEED_BP1(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute the Jacobian for the CEED scalar BP problem.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - interpolated values of du

  • out[out] Output array

    • 0 - action of the QFunction

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_CEED_BP1(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute the diagnostic quantities for the CEED scalar BP problem.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - u

  • out[out] Output array

    • 0 - diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int Residual_CEED_BP2(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute the residual for the CEED vector BP problem.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - interpolated values of u

  • out[out] Output array

    • 0 - action of the QFunction

Returns:

An error code: 0 - success, otherwise - failure

int Jacobian_CEED_BP2(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute the Jacobian for the CEED vector BP problem.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - interpolated values of du

  • out[out] Output array

    • 0 - action of the QFunction

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_CEED_BP2(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute the diagnostic values for the CEED vector BP problem.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - u

  • out[out] Output array

    • 0 - diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int Residual_CEED_BP3(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute the residual for the CEED scalar BP problem.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u

  • out[out] Output array

    • 0 - action of the QFunction

Returns:

An error code: 0 - success, otherwise - failure

int Jacobian_CEED_BP3(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute the Jacobian for the CEED scalar BP problem.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of du

  • out[out] Output array

    • 0 - action of the QFunction

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_CEED_BP3(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute the diagnostic quantities for the CEED scalar BP problem.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - u

  • out[out] Output array

    • 0 - diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int Residual_CEED_BP4(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute the residual for the CEED vector BP problem.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u

  • out[out] Output array

    • 0 - action of the QFunction

Returns:

An error code: 0 - success, otherwise - failure

int Jacobian_CEED_BP4(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute the Jacobian for the CEED vector BP problem.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of du

  • out[out] Output array

    • 0 - action of the QFunction

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_CEED_BP4(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute the diagnostic values for the CEED vector BP problem.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - u

  • out[out] Output array

    • 0 - diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int DualDiagnostic(void *ctx, const CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute dual space diagnostic values.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

  • out[out] Output array

    • 0 - nodal volume

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual(void *ctx, CeedInt Q, RatelComputef1 compute_f1, bool has_state_values, bool has_stored_values, CeedInt num_active_field_eval_modes, const CeedScalar *const *in, CeedScalar *const *out)

Compute elasticity residual evaluation.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • compute_f1[in] Function to compute action of f1

  • has_state_values[in] Boolean flag indicating model state values in residual evaluation

  • has_stored_values[in] Boolean flag indicating model stores values in residual evaluation

  • num_active_field_eval_modes[in] Number of active field evaluation modes

  • in[in] Input arrays

    • 0 - volumetric qdata

  • out[out] Output array

    • output_data_offset - action of QFunction

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian(void *ctx, CeedInt Q, RatelComputef1_fwd compute_df1, bool has_stored_values, bool has_state_values, CeedInt num_active_field_eval_modes, const CeedScalar *const *in, CeedScalar *const *out)

Compute elasticity Jacobian evaluation.

Parameters:
  • ctx[in] QFunction context, holding common parameters and model parameters

  • Q[in] Number of quadrature points

  • compute_df1[in] Function to compute action of df1

  • has_state_values[in] Boolean flag indicating model state values in residual evaluation

  • has_stored_values[in] Boolean flag indicating model stores values in residual evaluation

  • num_active_field_eval_modes[in] Number of active field evaluation modes

  • in[in] Input arrays

    • 0 - volumetric qdata

    • input_data_offset - incremental change in u

  • out[out] Output array

    • 0 - action of QFunction

    • 1 - action of QFunction dynamic solver term

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityDiagnostic(void *ctx, CeedInt Q, RatelComputeDiagnosticStress compute_diagnostic_stress, const CeedScalar *const *in, CeedScalar *const *out)

Compute elasticity diagnostic evaluation.

Parameters:
  • ctx[in] QFunction context, holding common parameters and model parameters

  • Q[in] Number of quadrature points

  • compute_diagnostic_stress[in] Function to compute diagnostic

  • in[in] Input arrays

    • 0 - qdata

    • 1 - u

    • 2 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - projected diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityDualDiagnostic(void *ctx, const CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute dual space diagnostic values.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

  • out[out] Output array

    • 0 - nodal volume

Returns:

An error code: 0 - success, otherwise - failure

int RatelKirchhoffTau_IsochoricMooneyRivlin(CeedScalar J_dVdJ, CeedScalar bulk, CeedScalar mu_1, CeedScalar two_mu_2, CeedScalar J_pow, const CeedScalar e_sym[6], CeedScalar tau_sym[6])

Compute Kirchoff tau for isochoric Mooney-Rivlin hyperelasticity.

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk[in] Bulk modulus

  • mu_1[in] First Mooney-Rivlin parameter

  • two_mu_2[in] Two times the second Mooney-Rivlin parameter

  • J_pow[in] J^{-2/3}

  • e_sym[in] Green Euler strain, in symmetric representation

  • tau_sym[out] Kirchoff tau, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_IsochoricMooneyRivlin(CeedScalar J_dVdJ, CeedScalar bulk, CeedScalar mu_1, CeedScalar two_mu_2, CeedScalar Jm1, const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar S_sym[6])

Compute second Kirchoff stress for isochoric Mooney-Rivlin hyperelasticity.

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk[in] Bulk modulus

  • mu_1[in] First Mooney-Rivlin parameter

  • two_mu_2[in] Two times the second Mooney-Rivlin parameter

  • Jm1[in] Determinant of deformation gradient - 1

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • S_sym[out] Second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_IsochoricMooneyRivlin_fwd(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar bulk, CeedScalar mu_1, CeedScalar two_mu_2, CeedScalar Jm1, const CeedScalar F[3][3], const CeedScalar grad_du[3][3], const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar dS_sym[6])

Compute derivative of second Kirchoff stress for isochoric Mooney-Rivlin hyperelasticity.

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • bulk[in] Bulk modulus

  • mu_1[in] First Mooney-Rivlin parameter

  • two_mu_2[in] Two times the second Mooney-Rivlin parameter

  • Jm1[in] Determinant of deformation gradient - 1

  • F[in] Deformation gradient

  • grad_du[in] Gradient of incremental change in u

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • dS_sym[out] Derivative of second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelComputeFdSFTranspose_IsochoricMooneyRivlin(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar bulk, CeedScalar mu_1, CeedScalar two_mu_2, CeedScalar J_pow, const CeedScalar grad_du[3][3], const CeedScalar e_sym[6], CeedScalar FdSFTranspose[3][3])

Compute F*dS*F^T for isochoric Mooney-Rivlin hyperelasticity in current configuration.

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • bulk[in] Bulk modulus

  • mu_1[in] First Mooney-Rivlin parameter

  • two_mu_2[in] Two times the second Mooney-Rivlin parameter

  • J_pow[in] J^{-2/3}

  • grad_du[in] Gradient of incremental change in u

  • e_sym[in] Green Euler strain, in symmetric representation

  • FdSFTranspose[out] F*dS*F^T needed for computing df1 in current configuration

Returns:

An error code: 0 - success, otherwise - failure

int RatelStrainEnergy_IsochoricMooneyRivlin(CeedScalar V, CeedScalar bulk, CeedScalar mu_1, CeedScalar mu_2, CeedScalar Jm1, CeedScalar trace_strain, CeedScalar trace_strain2, CeedScalar *strain_energy)

Compute strain energy for isochoric Mooney-Rivlin model.

psi = 0.5 mu_1 (I1_bar - 3) + 0.5 mu_2 (I2_bar - 3) + bulk * V(J)

Parameters:
  • V[in] V(J)

  • bulk[in] Bulk modulus

  • mu_1[in] First Mooney-Rivlin parameter

  • mu_2[in] Second Mooney-Rivlin parameter

  • Jm1[in] Determinant of deformation gradient - 1

  • trace_strain[in] Trace of Green Lagrange or Green euler strain tensor (E or e)

  • trace_strain2[in] Trace of E^2 (or e^2)

  • strain_energy[out] Strain energy for isochoric Mooney-Rivlin model

Returns:

An error code: 0 - success, otherwise - failure

int StrainEnergy_IsochoricMooneyRivlin(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute strain energy for isochoric Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - strain energy

Returns:

An error code: 0 - success, otherwise - failure

int DiagnosticStress_IsochoricMooneyRivlin(void *ctx, const CeedScalar Jm1, const CeedScalar V, const CeedScalar J_dVdJ, CeedScalar grad_u[3][3], CeedScalar sigma_sym[6], CeedScalar *strain_energy, CeedScalar *trace_e, CeedScalar *trace_e2)

Compute projected diagnostic stress, and strain energy invariants values for isochoric Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Jm1[in] Determinant of deformation gradient - 1

  • V[in] V(J); volumetric energy

  • J_dVdJ[in] J dV/dJ

  • grad_u[in] Gradient of incremental change in u

  • sigma_sym[out] Cauchy stress tensor in symmetric representation

  • strain_energy[out] Strain energy

  • trace_e[out] Trace of strain tensor e

  • trace_e2[out] Trace of strain tensor e*e

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_IsochoricMooneyRivlin(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute projected diagnostic values for isochoric Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - u

    • 2 - gradient of u with respect to reference coordinates

    • 3 - p

  • out[out] Output arrays

    • 0 - projected diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int SurfaceForceCellToFace_IsochoricMooneyRivlin(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute surface forces for isochoric Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - surface force values

Returns:

An error code: 0 - success, otherwise - failure

int f1_IsochoricMooneyRivlinCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute tau for isochoric Mooney-Rivlin hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - stored, dXdx, e, J - 1 and J^{-2/3}

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = tau

Returns:

An error code: 0 - success, otherwise - failure

int df1_IsochoricMooneyRivlinCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of df1 for isochoric Mooney-Rivlin hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored dXdx, e, J - 1 and J^{-2/3}

    • 2 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dtau - tau * grad_du^T

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_IsochoricMooneyRivlinCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for isochoric Mooney-Rivlin hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_IsochoricMooneyRivlinCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for isochoric Mooney-Rivlin hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int f1_IsochoricMooneyRivlinInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute P for isochoric Mooney-Rivlin hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - stored gradient of u with respect to physical coordinates

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = P

Returns:

An error code: 0 - success, otherwise - failure

int df1_IsochoricMooneyRivlinInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of P for isochoric Mooney-Rivlin hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored gradient of u with respect to physical coordinates

    • 2 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dP

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_IsochoricMooneyRivlinInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for isochoric Mooney-Rivlin hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_IsochoricMooneyRivlinInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for isochoric Mooney-Rivlin hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsResidual_IsochoricMooneyRivlinInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute platen residual for isochoric Mooney-Rivlin hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsJacobian_IsochoricMooneyRivlinInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate platen Jacobian for isochoric Mooney-Rivlin hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int RatelKirchhoffTau_IsochoricNeoHookean(CeedScalar J_dVdJ, CeedScalar bulk, CeedScalar two_mu, CeedScalar J_pow, const CeedScalar e_sym[6], CeedScalar tau_sym[6])

Compute Kirchoff tau for isochoric neo-Hookean hyperelasticity.

tau = (bulk * J dV/dJ) I + 2 mu J^{-2/3} e_dev

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk[in] Bulk modulus

  • two_mu[in] Two times the shear modulus

  • J_pow[in] J^{-2/3}

  • e_sym[in] Green Euler strain, in symmetric representation

  • tau_sym[out] Kirchoff tau, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_IsochoricNeoHookean(CeedScalar J_dVdJ, CeedScalar bulk, CeedScalar two_mu, CeedScalar Jm1, const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar S_sym[6])

Compute second Kirchoff stress for isochoric neo-Hookean hyperelasticity.

S = (bulk * J dV/dJ) * C_inv + 2 mu J^{-2/3} C_inv * E_dev

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk[in] Bulk modulus

  • two_mu[in] Two times the shear modulus

  • Jm1[in] Determinant of deformation gradient - 1

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • S_sym[out] Second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_IsochoricNeoHookean_fwd(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar bulk, CeedScalar mu, CeedScalar Jm1, const CeedScalar F[3][3], const CeedScalar grad_du[3][3], const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar dS_sym[6])

Compute derivative of second Kirchoff stress for isochoric neo-Hookean hyperelasticity.

dS = dS_vol + dS_iso

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • bulk[in] Bulk modulus

  • mu[in] Shear modulus

  • Jm1[in] Determinant of deformation gradient - 1

  • F[in] Deformation gradient

  • grad_du[in] Gradient of incremental change in u

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • dS_sym[out] Derivative of second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelComputeFdSFTranspose_IsochoricNeoHookean(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar bulk, CeedScalar mu, CeedScalar J_pow, const CeedScalar grad_du[3][3], const CeedScalar e_sym[6], CeedScalar FdSFTranspose[3][3])

Compute F*dS*F^T for isochoric neo-Hookean hyperelasticity in current configuration.

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • bulk[in] Bulk modulus

  • mu[in] Shear modulus

  • J_pow[in] J^{-2/3}

  • grad_du[in] Gradient of incremental change in u

  • e_sym[in] Green Euler strain, in symmetric representation

  • FdSFTranspose[out] F*dS*F^T needed for computing df1 in current configuration

Returns:

An error code: 0 - success, otherwise - failure

int RatelStrainEnergy_IsochoricNeoHookean(CeedScalar V, CeedScalar bulk, CeedScalar mu, CeedScalar Jm1, CeedScalar trace_strain, CeedScalar *strain_energy)

Compute strain energy for isochoric neo-Hookean model.

psi = 0.5 mu (I1_bar - 3) + bulk * V(J)

Parameters:
  • V[in] V(J)

  • bulk[in] Bulk modulus

  • mu[in] Shear modulus

  • Jm1[in] Determinant of deformation gradient - 1

  • trace_strain[in] Trace of Green Lagrange or Green euler strain tensor (E or e)

  • strain_energy[out] Strain energy for isochoric Neo-Hookean model

Returns:

An error code: 0 - success, otherwise - failure

int StrainEnergy_IsochoricNeoHookean(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute strain energy for isochoric neo-Hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - strain energy

Returns:

An error code: 0 - success, otherwise - failure

int DiagnosticStress_IsochoricNeoHookean(void *ctx, const CeedScalar Jm1, const CeedScalar V, const CeedScalar J_dVdJ, CeedScalar grad_u[3][3], CeedScalar sigma_sym[6], CeedScalar *strain_energy, CeedScalar *trace_e, CeedScalar *trace_e2)

Compute projected diagnostic stress, and strain energy invariants values for isochoric Neo-Hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Jm1[in] Determinant of deformation gradient - 1

  • V[in] V(J); volumetric energy

  • J_dVdJ[in] J dV/dJ

  • grad_u[in] Gradient of incremental change in u

  • sigma_sym[out] Cauchy stress tensor in symmetric representation

  • strain_energy[out] Strain energy

  • trace_e[out] Trace of strain tensor e

  • trace_e2[out] Trace of strain tensor e*e

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_IsochoricNeoHookean(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute projected diagnostic values for isochoric neo-Hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int SurfaceForceCellToFace_IsochoricNeoHookean(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute surface forces for isochoric neo-Hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - surface force values

Returns:

An error code: 0 - success, otherwise - failure

int f1_IsochoricNeoHookeanCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute tau for isochoric neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - stored, dXdx, e, J - 1 and J^{-2/3}

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = tau

Returns:

An error code: 0 - success, otherwise - failure

int df1_IsochoricNeoHookeanCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of df1 for isochoric neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored dXdx, e, J - 1 and J^{-2/3}

    • 2 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dtau - tau * grad_du^T

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_IsochoricNeoHookeanCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for isochoric neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_IsochoricNeoHookeanCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for isochoric neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int f1_IsochoricNeoHookeanInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute P for isochoric neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - stored gradient of u with respect to physical coordinates

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = P

Returns:

An error code: 0 - success, otherwise - failure

int df1_IsochoricNeoHookeanInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of P for isochoric neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored gradient of u with respect to physical coordinates

    • 2 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dP

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_IsochoricNeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for isochoric neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_IsochoricNeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for isochoric neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsResidual_IsochoricNeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute platen residual for isochoric neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsJacobian_IsochoricNeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate platen Jacobian for isochoric neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int RatelKirchhoffTau_IsochoricOgden(CeedScalar J_dVdJ, CeedScalar bulk, CeedInt N, const CeedScalar *m, const CeedScalar *alpha, const CeedScalar series_terms[9], const CeedScalar e_vals[3], const CeedScalar e_vecs[3][3], CeedScalar tau_sym[6])

Compute Kirchoff tau for isochoric Ogden hyperelasticity.

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk[in] Bulk modulus

  • N[in] Number of Ogden parameters

  • m[in] Array of first Ogden material model

  • alpha[in] Array of second Ogden material model

  • series_terms[in] Series terms

  • e_vals[in] Eigenvalues of Green Euler strain tensor

  • e_vecs[in] Eigenvectors of Green Euler strain tensor

  • tau_sym[out] Kirchoff tau, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int SecondKirchhoffStress_IsochoricOgden(CeedScalar J_dVdJ, CeedScalar bulk, CeedInt N, const CeedScalar *m, const CeedScalar *alpha, CeedScalar Jm1, const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar S_sym[6])

Compute second Kirchoff stress for isochoric Ogden hyperelasticity.

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk[in] Bulk modulus

  • N[in] Number of Ogden parameters

  • m[in] Array of first Ogden material model

  • alpha[in] Array of second Ogden material model

  • Jm1[in] Determinant of deformation gradient - 1

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • S_sym[out] Second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int SecondKirchhoffStress_IsochoricOgden_fwd(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar bulk, CeedInt N, const CeedScalar *m, const CeedScalar *alpha, CeedScalar Jm1, const CeedScalar F[3][3], const CeedScalar grad_du[3][3], const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar dS_sym[6])

Compute derivative of second Kirchoff stress for isochoric Ogden hyperelasticity.

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • bulk[in] Bulk modulus

  • N[in] Number of Ogden parameters

  • m[in] Array of first Ogden material model

  • alpha[in] Array of second Ogden material model

  • Jm1[in] Determinant of deformation gradient - 1

  • F[in] Deformation gradient

  • grad_du[in] Gradient of incremental change in u

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • dS_sym[out] Derivative of second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelComputeFdSFTranspose_IsochoricOgden(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar bulk, CeedInt N, const CeedScalar *m, const CeedScalar *alpha, const CeedScalar J_pow_alpha[3], const CeedScalar series_terms[9], const CeedScalar grad_du[3][3], const CeedScalar e_vals[3], const CeedScalar e_vecs[3][3], CeedScalar FdSFTranspose[3][3])

Compute F*dS*F^T for isochoric Ogden hyperelasticity in current configuration.

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • bulk[in] Bulk modulus

  • N[in] Number of Ogden parameters

  • m[in] Array of first Ogden material model

  • alpha[in] Array of second Ogden material model

  • J_pow_alpha[in] Array of J^{-alpha[j]/3}, j=1..3

  • series_terms[in] Series terms

  • grad_du[in] Gradient of incremental change in u

  • e_vals[in] Eigenvalues of Green Euler strain tensor

  • e_vecs[in] Eigenvectors of Green Euler strain tensor

  • FdSFTranspose[out] F*dS*F^T needed for computing df1 in current configuration

Returns:

An error code: 0 - success, otherwise - failure

int RatelStrainEnergy_IsochoricOgden(CeedScalar V, CeedScalar bulk, CeedInt N, const CeedScalar *m, const CeedScalar *alpha, const CeedScalar pr_str_bar[3], CeedScalar *strain_energy)

Compute strain energy for isochoric Ogden model.

psi = sum_{j=1:3} (sum_{k=1:N} m_k/alpha_k (pr_bar_j^alpha_k - 1)) + bulk * V(J)

Parameters:
  • V[in] V(J)

  • bulk[in] Bulk modulus

  • N[in] Number of Ogden parameters

  • m[in] Array of first Ogden material model

  • alpha[in] Array of second Ogden material model

  • pr_str_bar[in] Modified principal stretch

  • strain_energy[out] Strain energy for isochoric Ogden model

Returns:

An error code: 0 - success, otherwise - failure

int StrainEnergy_IsochoricOgden(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute strain energy for isochoric Ogden hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - strain energy

Returns:

An error code: 0 - success, otherwise - failure

int DiagnosticStress_IsochoricOgden(void *ctx, const CeedScalar Jm1, const CeedScalar V, const CeedScalar J_dVdJ, CeedScalar grad_u[3][3], CeedScalar sigma_sym[6], CeedScalar *strain_energy, CeedScalar *trace_e, CeedScalar *trace_e2)

Compute projected diagnostic stress, and strain energy invariants values for isochoric Ogden hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelOgdenElasticityParams

  • Jm1[in] Determinant of deformation gradient - 1

  • V[in] V(J); volumetric energy

  • J_dVdJ[in] J dV/dJ

  • grad_u[in] Gradient of incremental change in u

  • sigma_sym[out] Cauchy stress tensor in symmetric representation

  • strain_energy[out] Strain energy

  • trace_e[out] Trace of strain tensor e

  • trace_e2[out] Trace of strain tensor e*e

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_IsochoricOgden(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute projected diagnostic values for isochoric Ogden hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int SurfaceForceCellToFace_IsochoricOgden(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute surface forces for isochoric Ogden hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - surface force values

Returns:

An error code: 0 - success, otherwise - failure

int f1_IsochoricOgdenCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute tau for isochoric Ogden hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelOgdenElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - stored, dXdx, e, J - 1 and J^{-alpha[j]/3}

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = tau

Returns:

An error code: 0 - success, otherwise - failure

int df1_IsochoricOgdenCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of tau for isochoric Ogden hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelOgdenElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored, dXdx, e, J - 1 and J^{-alpha[j]/3}

    • 2 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dtau - tau * grad_du^T

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_IsochoricOgdenCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for isochoric Ogden hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_IsochoricOgdenCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for isochoric Ogden hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int f1_IsochoricOgdenInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute P for isochoric Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelOgdenElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - stored gradient of u with respect to physical coordinates

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = P

Returns:

An error code: 0 - success, otherwise - failure

int df1_IsochoricOgdenInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of P for isochoric Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelOgdenElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored gradient of u with respect to physical coordinates

    • 2 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dP

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_IsochoricOgdenInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for isochoric Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_IsochoricOgdenInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for isochoric Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsResidual_IsochoricOgdenInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute platen residual for isochoric Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsJacobian_IsochoricOgdenInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate platen Jacobian for isochoric Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int RatelIsochoricKirchhoffTau_MooneyRivlin(CeedScalar mu_1, CeedScalar two_mu_2, CeedScalar J_pow, const CeedScalar e_sym[6], CeedScalar tau_iso_sym[6])

Compute isochoric part of Kirchoff tau for Mooney-Rivlin hyperelasticity.

tau_iso = 2 (mu_1 * J^{-2/3} + 2 mu_2 * J^{-4/3}) e_dev + 2 mu_2 * J^{-4/3} (trace(e) b - e*b) - 4/3 mu_2 * J^{-4/3}*(I1(e) + 2* I2(e)) * I

Parameters:
  • mu_1[in] First Mooney-Rivlin parameter

  • two_mu_2[in] Two times the second Mooney-Rivlin parameter

  • J_pow[in] J^{-2/3}

  • e_sym[in] Green Euler strain, in symmetric representation

  • tau_iso_sym[out] Isochoric Kirchoff tau, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelIsochoricSecondKirchhoffStress_MooneyRivlin(CeedScalar mu_1, CeedScalar two_mu_2, CeedScalar J, const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar S_iso_sym[6])

Compute isochoric part of second Kirchoff stress for Mooney-Rivlin hyperelasticity.

Parameters:
  • mu_1[in] First Mooney-Rivlin parameter

  • two_mu_2[in] Two times the second Mooney-Rivlin parameter

  • J[in] Determinant of deformation gradient

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • S_iso_sym[out] Isochoric second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelIsochoricSecondKirchhoffStress_MooneyRivlin_fwd(CeedScalar mu_1, CeedScalar two_mu_2, CeedScalar J, const CeedScalar F[3][3], const CeedScalar grad_du[3][3], const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar dC_inv_sym[6], CeedScalar dS_iso_sym[6], CeedScalar *Cinv_contract_dE)

Compute derivative of isochoric second Kirchoff stress for Mooney-Rivlin hyperelasticity.

Parameters:
  • mu_1[in] First Mooney-Rivlin parameter

  • two_mu_2[in] Two times the second Mooney-Rivlin parameter

  • J[in] Determinant of deformation gradient

  • F[in] Deformation gradient

  • grad_du[in] Gradient of incremental change in u

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • dC_inv_sym[out] Derivative of C^{-1}, in symmetric representation

  • dS_iso_sym[out] Derivative of isochoric second Kirchoff stress, in symmetric representation

  • Cinv_contract_dE[out] C_inv : dE

Returns:

An error code: 0 - success, otherwise - failure

int RatelComputeFdSFTransposeIsochoric_MooneyRivlin(CeedScalar mu_1, CeedScalar two_mu_2, CeedScalar J_pow, const CeedScalar grad_du[3][3], const CeedScalar e_sym[6], CeedScalar depsilon_sym[6], CeedScalar FdSFTranspose_iso_sym[6], CeedScalar *trace_depsilon)

Compute F*dS_iso*F^T for isochoric Mooney-Rivlin hyperelasticity in current configuration.

Parameters:
  • mu_1[in] First Mooney-Rivlin parameter

  • two_mu_2[in] Two times the second Mooney-Rivlin parameter

  • J_pow[in] J^{-2/3}

  • grad_du[in] Gradient of incremental change in u

  • e_sym[in] Green Euler strain, in symmetric representation

  • depsilon_sym[out] depsilon = (grad_du + grad_du^T)/2

  • FdSFTranspose_iso_sym[out] F*dS_iso*F^T needed for computing df1 in current configuration

  • trace_depsilon[out] trace(depsilon)

Returns:

An error code: 0 - success, otherwise - failure

int RatelIsochoricKirchhoffTau_NeoHookean(CeedScalar two_mu, CeedScalar J_pow, const CeedScalar e_sym[6], CeedScalar tau_iso_sym[6])

Compute isochoric part of Kirchoff tau for neo-Hookean hyperelasticity.

tau_iso = 2 mu J^{-2/3} e_dev

Parameters:
  • two_mu[in] Two times the shear modulus

  • J_pow[in] J^{-2/3}

  • e_sym[in] Green Euler strain, in symmetric representation

  • tau_iso_sym[out] Isochoric Kirchoff tau, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelIsochoricSecondKirchhoffStress_NeoHookean(CeedScalar two_mu, CeedScalar J, const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar S_iso_sym[6])

Compute isochoric part of second Kirchoff stress for neo-Hookean hyperelasticity.

S_iso = 2 mu J^{-2/3} C_inv * E_dev

Parameters:
  • two_mu[in] Two times the shear modulus

  • J[in] Determinant of deformation gradient

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • S_iso_sym[out] Isochoric second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelIsochoricSecondKirchhoffStress_NeoHookean_fwd(CeedScalar mu, CeedScalar J, const CeedScalar F[3][3], const CeedScalar grad_du[3][3], const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar dC_inv_sym[6], CeedScalar dS_iso_sym[6], CeedScalar *Cinv_contract_dE)

Compute derivative of isochoric second Kirchoff stress for neo-Hookean hyperelasticity.

dS_iso = -4/3 mu J^(-2/3) (C_inv:dE) C_inv * E_dev - 1/3 mu J^(-2/3) dS_iso1 dS_iso1 = 2 tr(dE) C_inv + I1(C) dC_inv

Parameters:
  • mu[in] Shear modulus

  • J[in] Determinant of deformation gradient

  • F[in] Deformation gradient

  • grad_du[in] Gradient of incremental change in u

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • dC_inv_sym[out] Derivative of C^{-1}, in symmetric representation

  • dS_iso_sym[out] Derivative of isochoric second Kirchoff stress, in symmetric representation

  • Cinv_contract_dE[out] C_inv : dE

Returns:

An error code: 0 - success, otherwise - failure

int RatelComputeFdSFTransposeIsochoric_NeoHookean(CeedScalar mu, CeedScalar J_pow, const CeedScalar grad_du[3][3], const CeedScalar e_sym[6], CeedScalar depsilon_sym[6], CeedScalar FdSFTranspose_iso_sym[6], CeedScalar *trace_depsilon)

Compute F*dS_iso*F^T for neo-Hookean hyperelasticity in current configuration.

Parameters:
  • mu[in] Shear modulus

  • J_pow[in] J^{-2/3}

  • grad_du[in] Gradient of incremental change in u

  • e_sym[in] Green Euler strain, in symmetric representation

  • depsilon_sym[out] depsilon = (grad_du + grad_du^T)/2

  • FdSFTranspose_iso_sym[out] F*dS_iso*F^T needed for computing df1 in current configuration

  • trace_depsilon[out] trace(depsilon)

Returns:

An error code: 0 - success, otherwise - failure

int RatelIsochoricKirchhoffTau_Ogden(CeedInt N, const CeedScalar *m, const CeedScalar *alpha, const CeedScalar series_terms[9], const CeedScalar e_vals[3], const CeedScalar e_vecs[3][3], CeedScalar tau_iso_sym[6])

Compute isochoric part of Kirchoff tau for Ogden hyperelasticity.

Parameters:
  • N[in] Number of Ogden parameters

  • m[in] Array of first Ogden material model

  • alpha[in] Array of second Ogden material model

  • series_terms[in] Series terms

  • e_vals[in] Eigenvalues of Green Euler strain tensor

  • e_vecs[in] Eigenvectors of Green Euler strain tensor

  • tau_iso_sym[out] Isochoric Kirchoff tau, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelIsochoricSecondKirchhoffStress_Ogden(CeedInt N, const CeedScalar *m, const CeedScalar *alpha, CeedScalar J, const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar S_iso_sym[6])

Compute isochoric part of second Kirchoff stress for Ogden hyperelasticity.

Parameters:
  • N[in] Number of Ogden parameters

  • m[in] Array of first Ogden material model

  • alpha[in] Array of second Ogden material model

  • J[in] Determinant of deformation gradient

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • S_iso_sym[out] Isochoric second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelIsochoricSecondKirchhoffStress_Ogden_fwd(CeedInt N, const CeedScalar *m, const CeedScalar *alpha, CeedScalar J, const CeedScalar F[3][3], const CeedScalar grad_du[3][3], const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar dC_inv_sym[6], CeedScalar dS_iso_sym[6], CeedScalar *Cinv_contract_dE)

Compute derivative of isochoric second Kirchoff stress for Ogden hyperelasticity.

Parameters:
  • N[in] Number of Ogden parameters

  • m[in] Array of first Ogden material model

  • alpha[in] Array of second Ogden material model

  • J[in] Determinant of deformation gradient

  • F[in] Deformation gradient

  • grad_du[in] Gradient of incremental change in u

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • dC_inv_sym[out] Derivative of C^{-1}, in symmetric representation

  • dS_iso_sym[out] Derivative of isochoric second Kirchoff stress, in symmetric representation

  • Cinv_contract_dE[out] C_inv : dE

Returns:

An error code: 0 - success, otherwise - failure

int RatelComputeFdSFTransposeIsochoric_Ogden(CeedInt N, const CeedScalar *m, const CeedScalar *alpha, const CeedScalar J_pow_alpha[3], const CeedScalar series_terms[9], const CeedScalar grad_du[3][3], const CeedScalar e_vals[3], const CeedScalar e_vecs[3][3], CeedScalar depsilon_sym[6], CeedScalar FdSFTranspose_iso_sym[6], CeedScalar *trace_depsilon)

Compute F*dS_iso*F^T for Ogden hyperelasticity in current configuration.

Parameters:
  • N[in] Number of Ogden parameters

  • m[in] Array of first Ogden material model

  • alpha[in] Array of second Ogden material model

  • J_pow_alpha[in] Array of J^{-alpha[j]/3}, j=1..3

  • series_terms[in] Series terms

  • grad_du[in] Gradient of incremental change in u

  • e_vals[in] Eigenvalues of Green Euler strain tensor

  • e_vecs[in] Eigenvectors of Green Euler strain tensor

  • depsilon_sym[out] depsilon = (grad_du + grad_du^T)/2

  • FdSFTranspose_iso_sym[out] F*dS_iso*F^T needed for computing df1 in current configuration

  • trace_depsilon[out] trace(depsilon)

Returns:

An error code: 0 - success, otherwise - failure

CeedScalar PsiPlus_Linear(const CeedScalar mu, const CeedScalar bulk, const CeedScalar trace_e, const CeedScalar e_dev_sym[6])

Compute Psi_plus for linear elasticity with damage.

Parameters:
  • mu[in] shear modulus

  • bulk[in] bulk modulus

  • trace_e[in] trace strain tensor

  • e_dev_sym[in] deviatoric strain tensor in symmetric representation

Returns:

Computed Psi_plus for linear elasticity

CeedScalar PsiPlus_Linear_fwd(const CeedScalar mu, const CeedScalar bulk, const CeedScalar trace_e, const CeedScalar e_dev_sym[6], const CeedScalar de_sym[6])

Compute Linearization of Psi_plus for linear elasticity with damage.

Parameters:
  • mu[in] Shear modulus

  • bulk[in] Bulk modulus

  • trace_e[in] trace strain tensor

  • e_dev_sym[in] deviatoric strain tensor in symmetric representation

  • de_sym[in] Linear strain tensor increment in symmetric representation

Returns:

Computed linearization of Psi_plus for linear elasticity

int ComputeDegradedStress_Linear(const CeedScalar mu, const CeedScalar bulk, const CeedScalar eta, const CeedScalar phi, const CeedScalar trace_e, const CeedScalar e_dev_sym[6], CeedScalar sigma_degr_sym[6])

Compute sigma_degr for linear damage elasticity.

sigma_degr = g(phi) * sigma_vol + g(phi) * sigma_dev, if trace_e >= 0 sigma_degr = sigma_vol + g(phi) * sigma_dev, if trace_e < 0

Parameters:
  • mu[in] Shear modulus

  • bulk[in] Bulk modulus

  • eta[in] Residual stiffness

  • phi[in] Damage field

  • trace_e[in] trace strain tensor

  • e_dev_sym[in] deviatoric strain tensor in symmetric representation

  • sigma_degr_sym[out] Degraded stress in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int ComputeDegradedStress_Linear_fwd(const CeedScalar mu, const CeedScalar bulk, const CeedScalar eta, const bool use_offdiagonal, const CeedScalar phi, const CeedScalar trace_e, const CeedScalar dphi, const CeedScalar trace_de, const CeedScalar e_dev_sym[6], const CeedScalar de_dev_sym[6], CeedScalar dsigma_degr_sym[6])

Compute linearization of sigma_degr for linear damage elasticity.

dsigma_degr = g(phi) * dsigma_vol + g(phi) * dsigma_dev + dg * sigma_vol + dg * sigma_dev, if trace_e >= 0 dsigma_degr = dsigma_vol + g(phi) * dsigma_dev + dg * sigma_dev, if trace_e < 0

Parameters:
  • mu[in] Shear modulus

  • bulk[in] Bulk modulus

  • eta[in] Residual stiffness

  • use_offdiagonal[in] Flag to use off-diagonal terms

  • phi[in] Damage field

  • trace_e[in] trace strain tensor

  • dphi[in] Increment of damage field

  • trace_de[in] Trace of incremental linear strain

  • e_dev_sym[in] deviatoric strain tensor in symmetric representation

  • de_dev_sym[in] deviatoric strain tensor increment in symmetric representation

  • dsigma_degr_sym[out] Linearization of degraded stress in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityDamageResidual_ut_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute u_t term of damage residual.

Parameters:
  • ctx[in] QFunction context, holding RatelElasticityDamageParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 2 - u_t (four components: 3 displacement components, 1 scalar damage field)

  • out[out] Output arrays

    • 2 - action on u_t

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityDamageResidual_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for linear elasticity with damage.

Parameters:
  • ctx[in] QFunction context, holding RatelElasticityDamageParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - Psi_plus and damage state

    • 2 - u (four components: 3 displacement components, 1 scalar damage field)

    • 3 - u_g gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - Updated Psi_plus and damage state

    • 1 - stored vector

    • 2 - action on u

    • 3 - action on u_g

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityDamageJacobian_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute jacobian for linear elasticity with damage.

Parameters:
  • ctx[in] QFunction context, holding RatelElasticityDamageParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - Current state values

    • 2 - Stored values

    • 3 - du (four components: 3 displacement components, 1 damage field)

    • 4 - du_g gradient of du with respect to reference coordinates

  • out[out] Output arrays

    • 0 - action on du

    • 1 - action on du_g

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityDamageDiagnostic_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute projected diagnostic values for linear elasticity with damage.

Parameters:
  • ctx[in] QFunction context holding RatelElasticityDamageParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 2 - u (four components: 3 displacement components, 1 scalar damage field)

    • 3 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - projected diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityDamageStrainEnergy_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute (degraded) strain energy for linear elasticity+damage.

Parameters:
  • ctx[in] QFunction context holding RatelElasticityDamageParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 2 - u (4 components)

    • 3 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - (degraded) strain energy

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityDamageSurfaceForceCellToFace_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute (degraded) surface force for linear elasticity+damage.

Parameters:
  • ctx[in] QFunction context holding RatelElasticityDamageParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - u (4 components)

    • 2 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - surface force value

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityDamageDualDiagnostic_Linear(void *ctx, const CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute dual space diagnostic values for linear elasticity with damage.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

  • out[out] Output array

    • 0 - nodal volume

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityDamagePlatenResidual_Linear(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar sigma_degr[3][3])

Compute platens residual for linear elasticity with damage.

Parameters:
  • ctx[in] QFunction context, holding RatelElasticityDamageParams

  • Q[in] Number of quadrature points

  • i[in] Index

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 2 - u (four components: 3 displacement components, 1 scalar damage field)

    • 3 - u_g gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 1 - stored vector

    • 2 - initializing v

  • dXdx[out] dXdx

  • sigma_degr[out] Degraded stress tensor

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityDamagePlatenJacobian_Linear(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar dsigma_degr[3][3])

Compute platens jacobian for linear elasticity with damage.

Parameters:
  • ctx[in] QFunction context, holding RatelElasticityDamageParams

  • Q[in] Number of quadrature points

  • i[in] Index

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 2 - Stored values

    • 3 - du (four components: 3 displacement components, 1 damage field)

    • 4 - du_g gradient of du with respect to reference coordinates

  • out[out] Output arrays

    • 0 - initializing dv

  • dXdx[out] dXdx

  • dsigma_degr[out] Linearization of degraded stress tensor

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsResidualElasticityDamage_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute platen residual for linear elasticity+damage.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsJacobianElasticityDamage_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate platen Jacobian for linear elasticity+damage.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityDualDiagnostic_Linear(void *ctx, const CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute dual space diagnostic values.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - volumetric qdata

  • out[out] Output array

    • 0 - nodal volume

Returns:

An error code: 0 - success, otherwise - failure

int f1_Linear(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute Sigma for linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelLinearElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = Sigma = lambda*trace(e)I + 2 mu e

Returns:

An error code: 0 - success, otherwise - failure

int df1_Linear(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of Sigma for linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelLinearElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dSigma = lambda tr(de) I + 2 mu de

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelLinearElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelLinearElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsResidual_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute platen residual for linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsJacobian_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate platen Jacobian for linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int StrainEnergy_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute strain energy for linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelLinearElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - strain energy

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute projected diagnostic values for linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelLinearElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - u

    • 2 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - projected diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int SurfaceForceCellToFace_Linear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute surface forces for linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelLinearElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - surface force values

Returns:

An error code: 0 - success, otherwise - failure

int MixedElasticityResidual(void *ctx, CeedInt Q, RatelComputef1_Mixed compute_f1_mixed, RatelComputeg0_Mixed compute_g0_mixed, bool has_state_values, bool has_stored_values, CeedInt num_active_field_eval_modes, const CeedScalar *const *in, CeedScalar *const *out)

Compute mixed elasticity residual evaluation.

Parameters:
  • ctx[in] QFunction context, unused

  • Q[in] Number of quadrature points

  • compute_f1_mixed[in] Function to compute action of f1

  • compute_g0_mixed[in] Function to compute action of g0

  • has_state_values[in] Boolean flag indicating model state values in residual evaluation

  • has_stored_values[in] Boolean flag indicating model stores values in residual evaluation

  • num_active_field_eval_modes[in] Number of active field evaluation modes

  • in[in] Input arrays

    • 0 - volumetric qdata

  • out[out] Output array

    • output_data_offset - action of QFunction on displacement

    • output_data_offset + 1 - action of QFunction on pressure

Returns:

An error code: 0 - success, otherwise - failure

int MixedElasticityJacobian(void *ctx, CeedInt Q, RatelComputedf1_fwd_Mixed compute_df1_mixed, RatelComputedg0_fwd_Mixed compute_dg0_mixed, bool has_state_values, bool has_stored_values, CeedInt num_active_field_eval_modes, const CeedScalar *const *in, CeedScalar *const *out)

Compute mixed elasticity Jacobian evaluation.

Parameters:
  • ctx[in] QFunction context, holding common parameters and model parameters

  • Q[in] Number of quadrature points

  • compute_df1_mixed[in] Function to compute action of df1

  • compute_dg0_mixed[in] Function to compute action of dg0

  • has_state_values[in] Boolean flag indicating model state values in residual evaluation

  • has_stored_values[in] Boolean flag indicating model stores values in residual evaluation

  • num_active_field_eval_modes[in] Number of active field evaluation modes

  • in[in] Input arrays

    • 0 - volumetric qdata

    • input_data_offset - incremental change in u

  • out[out] Output array

    • 0 - action of QFunction on displacement

    • 1 - action of QFunction on pressure

    • 2 - action of QFunction dynamic solver term

Returns:

An error code: 0 - success, otherwise - failure

int MixedElasticityDiagnostic(void *ctx, CeedInt Q, RatelComputeDiagnosticMixedStress compute_diagnostic_mixedstress, const CeedScalar *const *in, CeedScalar *const *out)

Compute mixed elasticity diagnostic evaluation.

Parameters:
  • ctx[in] QFunction context, holding common parameters and model parameters

  • Q[in] Number of quadrature points

  • compute_diagnostic_mixedstress[in] Function to compute diagnostic

  • in[in] Input arrays

    • 0 - qdata

    • 1 - u

    • 2 - gradient of u with respect to reference coordinates

    • 3 - p

  • out[out] Output arrays

    • 0 - projected diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int f1_MixedLinear(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3], CeedScalar *trace_e)

Compute Sigma for linear mixed elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedLinearElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

    • 2 - p

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = Sigma = (bulk_primal * tr(e) - p) * I + 2 * mu * e_dev

  • trace_e[out] Divergence of u = trace_e needed for computing g0 function

Returns:

An error code: 0 - success, otherwise - failure

int g0_MixedLinear(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, const CeedScalar trace_e, CeedScalar *const *out, CeedScalar *g0)

Compute g0 for mixed linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedLinearElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 2 - p

  • trace_e[in] Divergence of u = trace_e computed in f1 function

  • out[out] Output arrays, unused

  • g0[out] g0 = -div(u) - p/(bulk - bulk_primal)

Returns:

An error code: 0 - success, otherwise - failure

int df1_MixedLinear(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3], CeedScalar *trace_de, CeedScalar *Cinv_contract_dE)

Compute linearization of Sigma for mixed linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedLinearElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of incremental change to u with respect to reference coordinates

    • 2 - dp

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dSigma = -dp*I + 2*mu*de_dev

  • trace_de[out] Linearization of div(u): div_du = trace_de

  • Cinv_contract_dE[out] C_inv:dE, unused for mixed linear elasticity

Returns:

An error code: 0 - success, otherwise - failure

int dg0_MixedLinear(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, const CeedScalar trace_de, const CeedScalar Cinv_contract_dE, CeedScalar *const *out, CeedScalar *dg0)

Compute linearization of g0 for mixed linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedLinearElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 2 - dp

  • trace_de[in] Linearization of divergence of u: div(du) = trace_de computed in df1 function

  • Cinv_contract_dE[in] C_inv:dE unused for mixed linear elasticity

  • out[out] Output arrays, unused

  • dg0[out] dg0 = -div(du) - dp/(bulk - bulk_primal)

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_MixedLinear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for mixed linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedLinearElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_MixedLinear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for linear mixed elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedLinearElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int f1_MixedLinear_Platen(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Wrapper to compute Sigma for linear mixed elasticity platen BCs.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedLinearElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

    • 2 - p

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = Sigma = -p*I + 2*mu*e_dev

Returns:

An error code: 0 - success, otherwise - failure

int df1_MixedLinear_Platen(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Wrapper to compute linearization of Sigma for mixed linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedLinearElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of incremental change to u with respect to reference coordinates

    • 2 - dp

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dSigma = -dp*I + 2*mu*de_dev

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsResidual_MixedLinear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute platen residual for linear mixed elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsJacobian_MixedLinear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate platen Jacobian for linear mixed elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int StrainEnergy_MixedLinear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute strain energy for mixed linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedLinearElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

    • 2 - p

  • out[out] Output arrays

    • 0 - strain energy

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_MixedLinear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute projected diagnostic values for mixed linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedLinearElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - u

    • 2 - gradient of u with respect to reference coordinates

    • 3 - p

  • out[out] Output arrays

    • 0 - projected diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int SurfaceForceCellToFace_MixedLinear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute surface forces for mixed linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedLinearElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

    • 2 - p

  • out[out] Output arrays

    • 0 - surface force values

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityPC_uu_MixedLinear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute displacement block for pMG preconditioner for mixed linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of incremental change of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - action of QFunction for displacement field

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityPC_pp_MixedLinear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute pressure block for pMG preconditioner for mixed linear elasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - incremental change of p

  • out[out] Output arrays

    • 0 - action of QFunction for pressure field

Returns:

An error code: 0 - success, otherwise - failure

int RatelKirchhoffTau_MixedNeoHookean(CeedScalar J_dVdJ, CeedScalar bulk_primal, CeedScalar two_mu, CeedScalar p, CeedScalar Jm1, CeedScalar J_pow, const CeedScalar e_sym[6], CeedScalar tau_sym[6])

Compute Kirchoff tau for mixed neo-Hookean hyperelasticity.

tau = [bulk_primal * J dV/dJ - p J] I + 2 mu J^{-2/3} e_dev

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk_primal[in] Primal bulk modulus

  • two_mu[in] Two times the shear modulus

  • p[in] Pressure

  • Jm1[in] Determinant of deformation gradient - 1

  • J_pow[in] J^{-2/3}

  • e_sym[in] Green Euler strain, in symmetric representation

  • tau_sym[out] Kirchoff tau, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_MixedNeoHookean(CeedScalar J_dVdJ, CeedScalar bulk_primal, CeedScalar two_mu, CeedScalar p, CeedScalar Jm1, const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar S_sym[6])

Compute second Kirchoff stress for mixed neo-Hookean hyperelasticity.

S = S_iso + S_vol

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk_primal[in] Primal bulk modulus

  • two_mu[in] Two times the shear modulus

  • p[in] Pressure

  • Jm1[in] Determinant of deformation gradient - 1

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • S_sym[out] Second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_MixedNeoHookean_fwd(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar bulk_primal, CeedScalar mu, CeedScalar p, CeedScalar dp, CeedScalar Jm1, const CeedScalar F[3][3], const CeedScalar grad_du[3][3], const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar dS_sym[6], CeedScalar *Cinv_contract_dE)

Compute derivative of second Kirchoff stress for mixed neo-Hookean hyperelasticity.

dS = dS_iso + dS_vol

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • bulk_primal[in] Primal bulk modulus

  • mu[in] Shear modulus

  • p[in] Pressure

  • dp[in] Increment of Pressure

  • Jm1[in] Determinant of deformation gradient - 1

  • F[in] Deformation gradient

  • grad_du[in] Gradient of incremental change in u

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • dS_sym[out] Derivative of second Kirchoff stress, in symmetric representation

  • Cinv_contract_dE[out] C_inv : dE

Returns:

An error code: 0 - success, otherwise - failure

int RatelComputeFdSFTranspose_MixedNeoHookean(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar bulk_primal, CeedScalar mu, CeedScalar p, CeedScalar dp, CeedScalar Jm1, CeedScalar J_pow, const CeedScalar grad_du[3][3], const CeedScalar e_sym[6], CeedScalar FdSFTranspose[3][3], CeedScalar *trace_depsilon)

Compute F*dS*F^T for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • bulk_primal[in] Primal bulk modulus

  • mu[in] Shear modulus

  • p[in] Pressure

  • dp[in] Increment of Pressure

  • Jm1[in] Determinant of deformation gradient - 1

  • J_pow[in] J^{-2/3}

  • grad_du[in] Gradient of incremental change in u

  • e_sym[in] Green Euler strain, in symmetric representation

  • FdSFTranspose[out] F*dS*F^T needed for computing df1 in current configuration

  • trace_depsilon[out] trace(depsilon)

Returns:

An error code: 0 - success, otherwise - failure

int RatelStrainEnergy_MixedNeoHookean(CeedScalar V, CeedScalar bulk, CeedScalar mu, CeedScalar Jm1, CeedScalar trace_strain, CeedScalar *strain_energy)

Compute strain energy for mixed neo-Hookean model.

psi = 0.5 mu (I1_bar - 3) + bulk * V(J)

Parameters:
  • V[in] V(J)

  • bulk[in] Bulk modulus

  • mu[in] Shear modulus

  • Jm1[in] Determinant of deformation gradient - 1

  • trace_strain[in] Trace of Green Lagrange or Green euler strain tensor (E or e)

  • strain_energy[out] Strain energy for mixed Neo-Hookean model

Returns:

An error code: 0 - success, otherwise - failure

int StrainEnergy_MixedNeoHookean(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute strain energy for mixed neo-Hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - strain energy

Returns:

An error code: 0 - success, otherwise - failure

int DiagnosticStress_MixedNeoHookean(void *ctx, const CeedScalar p, const CeedScalar Jm1, const CeedScalar V, const CeedScalar J_dVdJ, CeedScalar grad_u[3][3], CeedScalar sigma_sym[6], CeedScalar *strain_energy, CeedScalar *trace_e, CeedScalar *trace_e2)

Compute projected diagnostic stress, and strain energy invariants values for isochoric Neo-Hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • p[in] Pressure field

  • Jm1[in] Determinant of deformation gradient - 1

  • V[in] V(J); volumetric energy

  • J_dVdJ[in] J dV/dJ

  • grad_u[in] Gradient of incremental change in u

  • sigma_sym[out] Cauchy stress tensor in symmetric representation

  • strain_energy[out] Strain energy

  • trace_e[out] Trace of strain tensor e

  • trace_e2[out] Trace of strain tensor e*e

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_MixedNeoHookean(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute projected diagnostic values for mixed neo-Hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - u

    • 2 - gradient of u with respect to reference coordinates

    • 3 - p

  • out[out] Output arrays

    • 0 - projected diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int SurfaceForceCellToFace_MixedNeoHookean(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute surface forces for mixed neo-Hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

    • 2 - p

  • out[out] Output arrays

    • 0 - surface force values

Returns:

An error code: 0 - success, otherwise - failure

int f1_MixedNeoHookeanCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3], CeedScalar *Jm1)

Compute P for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

    • 2 - pressure

  • out[out] Output arrays

    • 0 - stored values: dXdx, e, J - 1, J^{-2/3} and p

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = tau

  • Jm1[out] Determinant of deformation gradient - 1 needed for computing g0 function

Returns:

An error code: 0 - success, otherwise - failure

int g0_MixedNeoHookeanCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, const CeedScalar Jm1, CeedScalar *const *out, CeedScalar *g0)

Compute g0 for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 2 - p

  • Jm1[in] Determinant of deformation gradient - 1 computed in f1 function

  • out[out] Output arrays, unused

  • g0[out] g0 = -J dV/dJ - p * J / (bulk - bulk_primal)

Returns:

An error code: 0 - success, otherwise - failure

int df1_MixedNeoHookeanCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3], CeedScalar *Jm1, CeedScalar *trace_depsilon)

Compute linearization of f1 for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored dXdx, e, J - 1, J^{-2/3} and p

    • 2 - gradient of incremental change to u with respect to reference coordinates

    • 3 - dp

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dtau - tau * grad_du^T

  • Jm1[out] Determinant of deformation gradient - 1 needed for computing dg0 function

  • trace_depsilon[out] trace(depsilon) needed for computing dg0 function

Returns:

An error code: 0 - success, otherwise - failure

int dg0_MixedNeoHookeanCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, const CeedScalar Jm1, const CeedScalar trace_depsilon, CeedScalar *const *out, CeedScalar *dg0)

Compute linearization of g0 for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 1 - stored J and p

    • 3 - dp

  • Jm1[in] Determinant of deformation gradient - 1 computed in df1 function

  • trace_depsilon[in] trace(depsilon) computed in df1 function

  • out[out] Output arrays, unused

  • dg0[out] dg0 = ([-J^2 d2V/dJ2 - J dV/dJ - J*p/(bulk-bulk_primal)]trace(depsilon) - dp*J/(bulk-bulk_primal) )

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_MixedNeoHookeanCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_MixedNeoHookeanCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityPC_uu_MixedNeoHookeanCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute displacement block for pMG preconditioner for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays 0 - qdata 1 - gradient of incremental change of u with respect to reference coordinates

  • out[out] Output arrays 0 - action of QFunction for displacement field

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityPC_pp_MixedNeoHookeanCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute pressure block for pMG preconditioner for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays 0 - qdata 1 - incremental change of p

  • out[out] Output arrays 0 - action of QFunction for pressure field

Returns:

An error code: 0 - success, otherwise - failure

int f1_MixedNeoHookeanInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3], CeedScalar *Jm1)

Compute P for mixed neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

    • 2 - pressure

  • out[out] Output arrays

    • 0 - stored values: grad_u and p

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = P

  • Jm1[out] Determinant of deformation gradient - 1 needed for computing g0 function

Returns:

An error code: 0 - success, otherwise - failure

int g0_MixedNeoHookeanInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, const CeedScalar Jm1, CeedScalar *const *out, CeedScalar *g0)

Compute g0 for mixed neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 2 - p

  • Jm1[in] Determinant of deformation gradient - 1 computed in f1 function

  • out[out] Output arrays, unused

  • g0[out] g0 = -J dV/dJ - p * J / (bulk - bulk_primal)

Returns:

An error code: 0 - success, otherwise - failure

int df1_MixedNeoHookeanInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3], CeedScalar *Jm1, CeedScalar *Cinv_contract_dE)

Compute linearization of P for mixed neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored gradient of u and p

    • 2 - gradient of incremental change to u with respect to reference coordinates

    • 3 - dp

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dP

  • Jm1[out] Determinant of deformation gradient - 1 needed for computing dg0 function

  • Cinv_contract_dE[out] C_inv:dE needed for computing dg0 function

Returns:

An error code: 0 - success, otherwise - failure

int dg0_MixedNeoHookeanInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, const CeedScalar Jm1, const CeedScalar Cinv_contract_dE, CeedScalar *const *out, CeedScalar *dg0)

Compute linearization of g0 for mixed neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 1 - stored gradient of u and p

    • 3 - dp

  • Jm1[in] Determinant of deformation gradient - 1 computed in df1 function

  • Cinv_contract_dE[in] C_inv:dE computed in df1 function

  • out[out] Output arrays, unused

  • dg0[out] dg0 = ([-J^2 d2V/dJ2 - J dV/dJ - J*p/(bulk-bulk_primal)](C_inv:dE) - dp*J/(bulk-bulk_primal) )

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_MixedNeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for mixed neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_MixedNeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for mixed neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int f1_MixedNeoHookeanInitial_Platen(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Wrapper to compute P for mixed neo-Hookean hyperelasticity in initial configuration for platen BCs.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

    • 2 - pressure

  • out[out] Output arrays

    • 0 - stored values: grad_u and p

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = P

Returns:

An error code: 0 - success, otherwise - failure

int df1_MixedNeoHookeanInitial_Platen(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of P for mixed neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored gradient of u and p

    • 2 - gradient of incremental change to u with respect to reference coordinates

    • 3 - dp

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dP

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsResidual_MixedNeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute platen residual for mixed neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsJacobian_MixedNeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate platen Jacobian for mixed neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityPC_uu_MixedNeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute displacement block for pMG preconditioner for mixed neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays 0 - qdata 1 - gradient of incremental change of u with respect to reference coordinates

  • out[out] Output arrays 0 - action of QFunction for displacement field

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityPC_pp_MixedNeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute pressure block for pMG preconditioner for mixed neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays 0 - qdata 1 - incremental change of p

  • out[out] Output arrays 0 - action of QFunction for pressure field

Returns:

An error code: 0 - success, otherwise - failure

int RatelKirchhoffTau_MixedNeoHookeanPL(CeedScalar U, CeedScalar J_dUdJ, CeedScalar bulk_primal, CeedScalar two_mu, CeedScalar p, CeedScalar J_pow, const CeedScalar e_sym[6], CeedScalar tau_sym[6])

Compute Kirchoff tau for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity.

tau = [bulk_primal * U - p ] * J dU/dJ * I + 2 mu J^{-2/3} e_dev

Parameters:
  • U[in] U(J)

  • J_dUdJ[in] J dU/dJ

  • bulk_primal[in] Primal bulk modulus

  • two_mu[in] Two times the shear modulus

  • p[in] Lagrange multiplier

  • J_pow[in] J^{-2/3}

  • e_sym[in] Green Euler strain, in symmetric representation

  • tau_sym[out] Kirchoff tau, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_MixedNeoHookeanPL(CeedScalar U, CeedScalar J_dUdJ, CeedScalar bulk_primal, CeedScalar two_mu, CeedScalar p, CeedScalar Jm1, const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar S_sym[6])

Compute second Kirchoff stress for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity.

S = S_vol + S_iso

Parameters:
  • U[in] U(J)

  • J_dUdJ[in] J dU/dJ

  • bulk_primal[in] Primal bulk modulus

  • two_mu[in] Two times the shear modulus

  • p[in] Lagrange multiplier

  • Jm1[in] Determinant of deformation gradient - 1.

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • S_sym[out] Second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_MixedNeoHookeanPL_fwd(CeedScalar U, CeedScalar J_dUdJ, CeedScalar J2_d2UdJ2, CeedScalar bulk_primal, CeedScalar mu, CeedScalar p, CeedScalar dp, CeedScalar Jm1, const CeedScalar F[3][3], const CeedScalar grad_du[3][3], const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar dS_sym[6], CeedScalar *Cinv_contract_dE)

Compute derivative of second Kirchoff stress mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity.

dS = dS_iso + dS_vol

Parameters:
  • U[in] U(J)

  • J_dUdJ[in] J dU/dJ

  • J2_d2UdJ2[in] J^2 d^2U/dJ^2

  • bulk_primal[in] Primal bulk modulus

  • mu[in] Shear modulus

  • p[in] Pressure

  • dp[in] Increment of Pressure

  • Jm1[in] Determinant of deformation gradient - 1

  • F[in] Deformation gradient

  • grad_du[in] Gradient of incremental change in u

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • dS_sym[out] Derivative of second Kirchoff stress, in symmetric representation

  • Cinv_contract_dE[out] C_inv : dE

Returns:

An error code: 0 - success, otherwise - failure

int RatelComputeFdSFTranspose_MixedNeoHookeanPL(CeedScalar U, CeedScalar J_dUdJ, CeedScalar J2_d2UdJ2, CeedScalar bulk_primal, CeedScalar mu, CeedScalar p, CeedScalar dp, CeedScalar J_pow, const CeedScalar grad_du[3][3], const CeedScalar e_sym[6], CeedScalar FdSFTranspose[3][3], CeedScalar *trace_depsilon)

Compute F*dS*F^T for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • U[in] U(J)

  • J_dUdJ[in] J dU/dJ

  • J2_d2UdJ2[in] J^2 d^2U/dJ^2

  • bulk_primal[in] Primal bulk modulus

  • mu[in] Shear modulus

  • p[in] Pressure

  • dp[in] Increment of Pressure

  • J_pow[in] J^{-2/3}

  • grad_du[in] Gradient of incremental change in u

  • e_sym[in] Green Euler strain, in symmetric representation

  • FdSFTranspose[out] F*dS*F^T needed for computing df1 in current configuration

  • trace_depsilon[out] trace(depsilon)

Returns:

An error code: 0 - success, otherwise - failure

int RatelStrainEnergy_MixedNeoHookeanPL(CeedScalar U, CeedScalar bulk, CeedScalar bulk_primal, CeedScalar mu, CeedScalar p, CeedScalar Jm1, CeedScalar trace_strain, CeedScalar *mixed_energy)

Compute mixed potential energy for mixed neo-Hookean model.

Pi(u,p) = 0.5 mu (I1_bar - 3) - p U + 0.5 * bulk_primal * U^2 - 0.5 p^2 / (bulk - bulk_primal)

Note that strain energy function is psi = 0.5 mu (I1_bar - 3) + bulk / 2 * U(J)^2

Parameters:
  • U[in] U(J)

  • bulk[in] Bulk modulus

  • bulk_primal[in] Primal bulk modulus

  • mu[in] Shear modulus

  • p[in] Pressure

  • Jm1[in] Determinant of deformation gradient - 1

  • trace_strain[in] Trace of Green Lagrange or Green euler strain tensor (E or e)

  • mixed_energy[out] Energy for mixed Neo-Hookean model

Returns:

An error code: 0 - success, otherwise - failure

int StrainEnergy_MixedNeoHookeanPL(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute strain energy for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays 0 - qdata 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays 0 - strain energy

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_MixedNeoHookeanPL(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute projected diagnostic values for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays 0 - qdata 1 - u 2 - gradient of u with respect to reference coordinates 3 - p

  • out[out] Output arrays 0 - projected diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int SurfaceForceCellToFace_MixedNeoHookeanPL(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute surface forces for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays 0 - qdata 1 - gradient of u with respect to reference coordinates 2 - p

  • out[out] Output arrays 0 - surface force values

Returns:

An error code: 0 - success, otherwise - failure

int f1_MixedNeoHookeanPLCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3], CeedScalar *Jm1)

Compute P for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

    • 2 - pressure

  • out[out] Output arrays

    • 0 - stored values: dXdx, e, J - 1, J^{-2/3} and p

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = tau

  • Jm1[out] Determinant of deformation gradient - 1 needed for computing g0 function

Returns:

An error code: 0 - success, otherwise - failure

int g0_MixedNeoHookeanPLCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, const CeedScalar Jm1, CeedScalar *const *out, CeedScalar *g0)

Compute g0 for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 2 - p

  • Jm1[in] Determinant of deformation gradient - 1 computed in f1 function

  • out[out] Output arrays, unused

  • g0[out] g0 = (-U(J) - p/(bulk - bulk_primal) )

Returns:

An error code: 0 - success, otherwise - failure

int df1_MixedNeoHookeanPLCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3], CeedScalar *Jm1, CeedScalar *trace_depsilon)

Compute linearization of f1 for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored dXdx, e, J - 1, J^{-2/3} and p

    • 2 - gradient of incremental change to u with respect to reference coordinates

    • 3 - dp

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dtau - tau * grad_du^T

  • Jm1[out] Determinant of deformation gradient - 1 needed for computing dg0 function

  • trace_depsilon[out] trace(depsilon) needed for computing dg0 function

Returns:

An error code: 0 - success, otherwise - failure

int dg0_MixedNeoHookeanPLCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, const CeedScalar Jm1, const CeedScalar trace_depsilon, CeedScalar *const *out, CeedScalar *dg0)

Compute linearization of g0 for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 1 - stored J and p

    • 3 - dp

  • Jm1[in] Determinant of deformation gradient - 1 computed in df1 function

  • trace_depsilon[in] trace(depsilon) computed in df1 function

  • out[out] Output arrays, unused

  • dg0[out] dg0 = (dU(J) - dp/(bulk - bulk_primal))

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_MixedNeoHookeanPLCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_MixedNeoHookeanPLCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityPC_uu_MixedNeoHookeanPLCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute displacement block for pMG preconditioner for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays 0 - qdata 1 - gradient of incremental change of u with respect to reference coordinates

  • out[out] Output arrays 0 - action of QFunction for displacement field

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityPC_pp_MixedNeoHookeanPLCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute pressure block for pMG preconditioner for mixed neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays 0 - qdata 1 - incremental change of p

  • out[out] Output arrays 0 - action of QFunction for pressure field

Returns:

An error code: 0 - success, otherwise - failure

int f1_MixedNeoHookeanPLInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3], CeedScalar *Jm1)

Compute P for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays 0 - volumetric qdata 1 - gradient of u with respect to reference coordinates 2 - Lagrange multiplier

  • out[out] Output arrays 0 - stored values: grad_u and p

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = P

  • Jm1[out] Determinant of deformation gradient - 1 needed for computing g0 function

Returns:

An error code: 0 - success, otherwise - failure

int g0_MixedNeoHookeanPLInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, const CeedScalar Jm1, CeedScalar *const *out, CeedScalar *g0)

Compute g0 for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays 2 - Lagrange multiplier

  • Jm1[in] Determinant of deformation gradient - 1 computed in f1 function

  • out[out] Output arrays, unused

  • g0[out] g0 = (U(J) - p/bulk )

Returns:

An error code: 0 - success, otherwise - failure

int df1_MixedNeoHookeanPLInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3], CeedScalar *Jm1, CeedScalar *Cinv_contract_dE)

Compute linearization of P for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays 0 - volumetric qdata 1 - stored gradient of u and p 2 - gradient of incremental change to u with respect to reference coordinates 3 - dp

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dP

  • Jm1[out] Determinant of deformation gradient - 1 needed for computing dg0 function

  • Cinv_contract_dE[out] C_inv:dE needed for computing dg0 function

Returns:

An error code: 0 - success, otherwise - failure

int dg0_MixedNeoHookeanPLInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, const CeedScalar Jm1, const CeedScalar Cinv_contract_dE, CeedScalar *const *out, CeedScalar *dg0)

Compute linearization of g0 for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays 1 - stored gradient of u and p 3 - dp

  • Jm1[in] Determinant of deformation gradient - 1 computed in df1 function

  • Cinv_contract_dE[in] C_inv:dE computed in df1 function

  • out[out] Output arrays, unused

  • dg0[out] dg0 = ([-J^2 - J*p/bulk](C_inv:dE) - dp*J/bulk )

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_MixedNeoHookeanPLInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_MixedNeoHookeanPLInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int f1_MixedNeoHookeanPLInitial_Platen(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Wrapper to compute P for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity in initial configuration for platen BCs.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays 0 - volumetric qdata 1 - gradient of u with respect to reference coordinates 2 - pressure

  • out[out] Output arrays 0 - stored values: grad_u and p

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = P

Returns:

An error code: 0 - success, otherwise - failure

int df1_MixedNeoHookeanPLInitial_Platen(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of P for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays 0 - volumetric qdata 1 - stored gradient of u and p 2 - gradient of incremental change to u with respect to reference coordinates 3 - dp

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dP

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsResidual_MixedNeoHookeanPLInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute platen residual for neo-Hookean perturbed Lagrange-multiplier hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding BCPlatenData

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsJacobian_MixedNeoHookeanPLInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate platen Jacobian for neo-Hookean perturbed Lagrange-multiplier hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding BCPlatenData

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityPC_uu_MixedNeoHookeanPLInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute displacement block for pMG preconditioner for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays 0 - qdata 1 - gradient of incremental change of u with respect to reference coordinates

  • out[out] Output arrays 0 - action of QFunction for displacement field

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityPC_pp_MixedNeoHookeanPLInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute pressure block for pMG preconditioner for mixed neo-Hookean perturbed Lagrange-multiplier hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays 0 - qdata 1 - incremental change of p

  • out[out] Output arrays 0 - action of QFunction for pressure field

Returns:

An error code: 0 - success, otherwise - failure

int RatelKirchhoffTau_MixedOgden(CeedScalar J_dVdJ, CeedScalar bulk_primal, CeedScalar p, CeedScalar Jm1, CeedInt N, const CeedScalar *m, const CeedScalar *alpha, const CeedScalar series_terms[9], const CeedScalar e_vals[3], const CeedScalar e_vecs[3][3], CeedScalar tau_sym[6])

Compute Kirchoff tau for mixed Ogden hyperelasticity.

tau = [bulk_primal * J dV/dJ - p J] I + tau_iso

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk_primal[in] Primal bulk modulus

  • p[in] Pressure

  • Jm1[in] Determinant of deformation gradient - 1

  • N[in] Number of Ogden parameters

  • m[in] Array of first Ogden material model

  • alpha[in] Array of second Ogden material model

  • series_terms[in] Series terms

  • e_vals[in] Eigenvalues of Green Euler strain tensor

  • e_vecs[in] Eigenvectors of Green Euler strain tensor

  • tau_sym[out] Kirchoff tau, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_MixedOgden(CeedScalar J_dVdJ, CeedScalar bulk_primal, CeedScalar p, CeedScalar Jm1, CeedInt N, const CeedScalar *m, const CeedScalar *alpha, const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar S_sym[6])

Compute second Kirchoff stress for mixed Ogden hyperelasticity.

S = S_iso + S_vol

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk_primal[in] Primal bulk modulus

  • p[in] Pressure

  • Jm1[in] Determinant of deformation gradient - 1

  • N[in] Number of Ogden parameters

  • m[in] Array of first Ogden material model

  • alpha[in] Array of second Ogden material model

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • S_sym[out] Second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_MixedOgden_fwd(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar bulk_primal, CeedScalar p, CeedScalar dp, CeedScalar Jm1, CeedInt N, const CeedScalar *m, const CeedScalar *alpha, const CeedScalar F[3][3], const CeedScalar grad_du[3][3], const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar dS_sym[6], CeedScalar *Cinv_contract_dE)

Compute derivative of second Kirchoff stress for mixed Ogden hyperelasticity.

dS = dS_iso + dS_vol

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • bulk_primal[in] Primal bulk modulus

  • p[in] Pressure

  • dp[in] Increment of Pressure

  • Jm1[in] Determinant of deformation gradient - 1

  • N[in] Number of Ogden parameters

  • m[in] Array of first Ogden material model

  • alpha[in] Array of second Ogden material model

  • F[in] Deformation gradient

  • grad_du[in] Gradient of incremental change in u

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • dS_sym[out] Derivative of second Kirchoff stress, in symmetric representation

  • Cinv_contract_dE[out] C_inv : dE

Returns:

An error code: 0 - success, otherwise - failure

int RatelStrainEnergy_MixedOgden(CeedScalar V, CeedScalar bulk, CeedInt N, const CeedScalar *m, const CeedScalar *alpha, const CeedScalar pr_str_bar[3], CeedScalar *strain_energy)

Compute strain energy for mixed Ogden model.

psi = sum_{j=1:3} (sum_{k=1:N} m_k/alpha_k (pr_bar_j^alpha_k - 1)) + bulk * V(J)

Parameters:
  • V[in] V(J)

  • bulk[in] Bulk modulus

  • N[in] Number of Ogden parameters

  • m[in] Array of first Ogden material model

  • alpha[in] Array of second Ogden material model

  • pr_str_bar[in] Modified principal stretch

  • strain_energy[out] Strain energy for mixed Ogden model

Returns:

An error code: 0 - success, otherwise - failure

int StrainEnergy_MixedOgden(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute strain energy for mixed Ogden hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - strain energy

Returns:

An error code: 0 - success, otherwise - failure

int DiagnosticStress_MixedOgden(void *ctx, const CeedScalar p, const CeedScalar Jm1, const CeedScalar V, const CeedScalar J_dVdJ, CeedScalar grad_u[3][3], CeedScalar sigma_sym[6], CeedScalar *strain_energy, CeedScalar *trace_e, CeedScalar *trace_e2)

Compute projected diagnostic stress, and strain energy invariants values for mixed Ogden hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • p[in] Pressure field

  • Jm1[in] Determinant of deformation gradient - 1

  • V[in] V(J); volumetric energy

  • J_dVdJ[in] J dV/dJ

  • grad_u[in] Gradient of incremental change in u

  • sigma_sym[out] Cauchy stress tensor in symmetric representation

  • strain_energy[out] Strain energy

  • trace_e[out] Trace of strain tensor e

  • trace_e2[out] Trace of strain tensor e*e

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_MixedOgden(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute projected diagnostic values for mixed Ogden hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - u

    • 2 - gradient of u with respect to reference coordinates

    • 3 - p

  • out[out] Output arrays

    • 0 - projected diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int SurfaceForceCellToFace_MixedOgden(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute surface forces for mixed Ogden hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

    • 2 - p

  • out[out] Output arrays

    • 0 - surface force values

Returns:

An error code: 0 - success, otherwise - failure

int f1_MixedOgdenInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3], CeedScalar *Jm1)

Compute P for mixed Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

    • 2 - pressure

  • out[out] Output arrays

    • 0 - stored values: grad_u and p

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = P

  • Jm1[out] Determinant of deformation gradient - 1 needed for computing g0 function

Returns:

An error code: 0 - success, otherwise - failure

int g0_MixedOgdenInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, const CeedScalar Jm1, CeedScalar *const *out, CeedScalar *g0)

Compute g0 for mixed Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 2 - p

  • Jm1[in] Determinant of deformation gradient - 1 computed in f1 function

  • out[out] Output arrays, unused

  • g0[out] g0 = -J dV/dJ - p * J / (bulk - bulk_primal)

Returns:

An error code: 0 - success, otherwise - failure

int df1_MixedOgdenInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3], CeedScalar *Jm1, CeedScalar *Cinv_contract_dE)

Compute linearization of P for mixed Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored gradient of u and p

    • 2 - gradient of incremental change to u with respect to reference coordinates

    • 3 - dp

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dP

  • Jm1[out] Determinant of deformation gradient - 1 needed for computing dg0 function

  • Cinv_contract_dE[out] C_inv:dE needed for computing dg0 function

Returns:

An error code: 0 - success, otherwise - failure

int dg0_MixedOgdenInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, const CeedScalar Jm1, const CeedScalar Cinv_contract_dE, CeedScalar *const *out, CeedScalar *dg0)

Compute linearization of g0 for mixed Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 1 - stored gradient of u and p

    • 3 - dp

  • Jm1[in] Determinant of deformation gradient - 1 computed in df1 function

  • Cinv_contract_dE[in] C_inv:dE computed in df1 function

  • out[out] Output arrays, unused

  • dg0[out] dg0 = ([-J^2 d2V/dJ2 - J dV/dJ - J*p/(bulk-bulk_primal)](C_inv:dE) - dp*J/(bulk-bulk_primal) )

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_MixedOgdenInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for mixed Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_MixedOgdenInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for mixed Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int f1_MixedOgdenInitial_Platen(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Wrapper to compute P for mixed Ogden hyperelasticity in initial configuration in Platen BCs.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

    • 2 - pressure

  • out[out] Output arrays

    • 0 - stored values: grad_u and p

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = P

Returns:

An error code: 0 - success, otherwise - failure

int df1_MixedOgdenInitial_Platen(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Wrapper to compute linearization of P for mixed Ogden hyperelasticity in initial configuration in Platen BCs.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored gradient of u and p

    • 2 - gradient of incremental change to u with respect to reference coordinates

    • 3 - dp

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dP

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsResidual_MixedOgdenInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute platen residual for mixed Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsJacobian_MixedOgdenInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate platen Jacobian for mixed Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityPC_uu_MixedOgdenInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute displacement block for pMG preconditioner for mixed Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays 0 - qdata 1 - gradient of incremental change of u with respect to reference coordinates

  • out[out] Output arrays 0 - action of QFunction for displacement field

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityPC_pp_MixedOgdenInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute pressure block for pMG preconditioner for mixed Ogden hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMixedOgdenElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays 0 - qdata 1 - incremental change of p

  • out[out] Output arrays 0 - action of QFunction for pressure field

Returns:

An error code: 0 - success, otherwise - failure

int RatelVolumetricKirchhoffTau_Mixed_PL(CeedScalar U, CeedScalar J_dUdJ, CeedScalar bulk_primal, CeedScalar p, CeedScalar *tau_vol_sym)

Compute volumetric Kirchoff tau for mixed perturbed Lagrange-multiplier hyperelasticity.

tau_vol = [bulk_primal * U - p ] * J dU/dJ * I

Parameters:
  • U[in] U(J)

  • J_dUdJ[in] J dU/dJ

  • bulk_primal[in] Primal bulk modulus

  • p[in] Pressure

  • tau_vol_sym[out] Volumetric Kirchoff tau

Returns:

An error code: 0 - success, otherwise - failure

int RatelVolumetricSecondKirchhoffStress_Mixed_PL(CeedScalar U, CeedScalar J_dUdJ, CeedScalar bulk_primal, CeedScalar p, const CeedScalar C_inv_sym[6], CeedScalar S_vol_sym[6])

Compute volumetric part of second Kirchoff stress for mixed with perturbed Lagrange-multiplier hyperelasticity.

S = [bulk_primal * U - p ] * J dU/dJ * C_inv

Parameters:
  • U[in] U(J)

  • J_dUdJ[in] J dU/dJ

  • bulk_primal[in] Primal bulk modulus

  • p[in] Lagrange multiplier

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • S_vol_sym[out] Volumetric second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelVolumetricSecondKirchhoffStress_Mixed_PL_fwd(CeedScalar U, CeedScalar J_dUdJ, CeedScalar J2_d2UdJ2, CeedScalar bulk_primal, CeedScalar p, CeedScalar dp, CeedScalar Cinv_contract_dE, const CeedScalar C_inv_sym[6], const CeedScalar dC_inv_sym[6], CeedScalar dS_vol_sym[6])

Compute derivative of volumetric second Kirchoff stress mixed with perturbed Lagrange-multiplier hyperelasticity.

dS_vol = [(bulk_primal (J dU/dJ)^2 + (bulk_primal * U - p) * (J^2 * d2U/dJ2 + J dU/dJ)) C_inv:dE - dp * J dU/dJ] C_inv + [bulk_primal * U - p] J dU/dJ * dC_inv

Parameters:
  • U[in] U(J)

  • J_dUdJ[in] J dU/dJ

  • J2_d2UdJ2[in] J^2 d^2U/dJ^2

  • bulk_primal[in] Primal bulk modulus

  • p[in] Pressure

  • dp[in] Increment of Pressure

  • Cinv_contract_dE[in] C_inv : dE

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • dC_inv_sym[in] Derivative of C^{-1}, in symmetric representation

  • dS_vol_sym[out] Derivative of primal second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelComputeFdSFTransposeVolumetric_Mixed_PL(CeedScalar U, CeedScalar J_dUdJ, CeedScalar J2_d2UdJ2, CeedScalar bulk_primal, CeedScalar p, CeedScalar dp, CeedScalar trace_depsilon, const CeedScalar depsilon_sym[6], CeedScalar FdSFTranspose_vol_sym[6])

Compute F*dS_vol*F^T for mixed with perturbed Lagrange-multiplier in current configuration.

Parameters:
  • U[in] U(J)

  • J_dUdJ[in] J dU/dJ

  • J2_d2UdJ2[in] J^2 d^2U/dJ^2

  • bulk_primal[in] Primal bulk modulus

  • p[in] Pressure

  • dp[in] Increment of Pressure

  • trace_depsilon[in] trace(depsilon)

  • depsilon_sym[in] depsilon = (grad_du + grad_du^T)/2

  • FdSFTranspose_vol_sym[out] F*dS_vol*F^T needed for computing df1 in current configuration

Returns:

An error code: 0 - success, otherwise - failure

int RatelVolumetricKirchhoffTau_Mixed(CeedScalar J_dVdJ, CeedScalar bulk_primal, CeedScalar Jm1, CeedScalar p, CeedScalar *tau_vol_sym)

Compute volumetric Kirchoff tau for mixed fields hyperelasticity.

tau_vol = [bulk_primal * J dV/dJ - p J] I

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk_primal[in] Primal bulk modulus

  • Jm1[in] Determinant of deformation gradient - 1

  • p[in] Pressure

  • tau_vol_sym[out] Volumetric Kirchoff tau

Returns:

An error code: 0 - success, otherwise - failure

int RatelVolumetricSecondKirchhoffStress_Mixed(CeedScalar J_dVdJ, CeedScalar bulk_primal, CeedScalar p, CeedScalar Jm1, const CeedScalar C_inv_sym[6], CeedScalar S_vol_sym[6])

Compute volumetric part of second Kirchoff stress for mixed fields hyperelasticity.

S_vol = [bulk_primal * J dV/dJ - p J] * C_inv

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk_primal[in] Primal bulk modulus

  • p[in] Pressure

  • Jm1[in] Determinant of deformation gradient - 1

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • S_vol_sym[out] Volumetric second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelVolumetricSecondKirchhoffStress_Mixed_fwd(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar bulk_primal, CeedScalar p, CeedScalar dp, CeedScalar Jm1, CeedScalar Cinv_contract_dE, const CeedScalar C_inv_sym[6], const CeedScalar dC_inv_sym[6], CeedScalar dS_vol_sym[6])

Compute derivative of volumetric second Kirchoff stress for mixed fields hyperelasticity.

dS_vol = [(bulk_primal J^2 * d2V/dJ2 + (bulk_primal * J dV/dJ - p J)) (C_inv:dE) - dp J] C_inv + [bulk_primal * J dV/dJ - p J ] dC_inv

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • bulk_primal[in] Primal bulk modulus

  • p[in] Pressure

  • dp[in] Increment of Pressure

  • Jm1[in] Determinant of deformation gradient - 1

  • Cinv_contract_dE[in] C_inv : dE

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • dC_inv_sym[in] Derivative of C^{-1}, in symmetric representation

  • dS_vol_sym[out] Derivative of primal second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelComputeFdSFTransposeVolumetric_Mixed(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar bulk_primal, CeedScalar p, CeedScalar dp, CeedScalar Jm1, CeedScalar trace_depsilon, const CeedScalar depsilon_sym[6], CeedScalar FdSFTranspose_vol_sym[6])

Compute F*dS_vol*F^T for mixed fields hyperelasticity in current configuration.

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • bulk_primal[in] Primal bulk modulus

  • p[in] Pressure

  • dp[in] Increment of Pressure

  • Jm1[in] Determinant of deformation gradient - 1

  • trace_depsilon[in] trace(depsilon)

  • depsilon_sym[in] depsilon = (grad_du + grad_du^T)/2

  • FdSFTranspose_vol_sym[out] F*dS_vol*F^T needed for computing df1 in current configuration

Returns:

An error code: 0 - success, otherwise - failure

int RatelKirchhoffTau_MooneyRivlin(CeedScalar J_dVdJ, CeedScalar lambda, CeedScalar mu_1, CeedScalar two_mu_2, const CeedScalar e_sym[6], CeedScalar tau_sym[6])

Compute Kirchoff tau for Mooney-Rivlin hyperelasticity.

tau = 2 (mu_1 + 2 mu_2) e + 2 mu_2 (trace(e) b - e*b) + (lambda * J dV/dJ) I

Ref https://ratel.micromorph.org/doc/modeling/materials/mooney-rivlin/#equation-mooney-rivlin-tau-stable

Parameters:
  • J_dVdJ[in] J dV/dJ

  • lambda[in] Lamé parameter

  • mu_1[in] First Mooney-Rivlin parameter

  • two_mu_2[in] Two times the second Mooney-Rivlin parameter

  • e_sym[in] Green Euler strain, in symmetric representation

  • tau_sym[out] Kirchoff tau, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_MooneyRivlin(CeedScalar J_dVdJ, CeedScalar lambda, CeedScalar mu_1, CeedScalar two_mu_2, CeedScalar Jm1, const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar S_sym[6])

Compute second Kirchoff stress for Mooney-Rivlin hyperelasticity.

S = (lambda * J dV/dJ) * C_inv + 2 (mu_1 + 2 mu_2) C_inv * E + 2 mu_2 (tr(E) I - E)

Ref https://ratel.micromorph.org/doc/modeling/materials/mooney-rivlin/#equation-mooney-rivlin-tau-stable

Parameters:
  • J_dVdJ[in] J dV/dJ

  • lambda[in] Lamé parameter

  • mu_1[in] First Mooney-Rivlin parameter

  • two_mu_2[in] Two times the second Mooney-Rivlin parameter

  • Jm1[in] Determinant of deformation gradient - 1

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • S_sym[out] Second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_MooneyRivlin_fwd(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar lambda, CeedScalar mu_1, CeedScalar two_mu_2, CeedScalar Jm1, const CeedScalar F[3][3], const CeedScalar grad_du[3][3], const CeedScalar C_inv_sym[6], CeedScalar dS_sym[6])

Compute derivative of second Kirchoff stress for Mooney-Rivlin hyperelasticity.

dS = dS_vol - (mu_1 + 2 mu_2) * dC_inv + 2 mu_2 (tr(dE)*I - dE) dS_vol = ((lambda J^2 * d2V/dJ2 + lambda * J dV/dJ) * (C_inv:dE)) C_inv + (lambda * J dV/dJ) dC_inv

Ref https://ratel.micromorph.org/doc/modeling/materials/mooney-rivlin/#equation-mooney-rivlin-tau-stable

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • lambda[in] Lamé parameter

  • mu_1[in] First Mooney-Rivlin parameter

  • two_mu_2[in] Two times the second Mooney-Rivlin parameter

  • Jm1[in] Determinant of deformation gradient - 1

  • F[in] Deformation gradient

  • grad_du[in] Gradient of incremental change in u

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • dS_sym[out] Derivative of second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelComputeFdSFTranspose_MooneyRivlin(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar lambda, CeedScalar mu_1, CeedScalar two_mu_2, const CeedScalar grad_du[3][3], const CeedScalar e_sym[6], CeedScalar FdSFTranspose[3][3])

Compute F*dS*F^T for Mooney-Rivlin hyperelasticity in current configuration.

Ref https://ratel.micromorph.org/doc/modeling/methods/hyperelasticity/#equation-cur-simp-jac-mooney-rivlin

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • lambda[in] Lamé parameter

  • mu_1[in] First Mooney-Rivlin parameter

  • two_mu_2[in] Two times the second Mooney-Rivlin parameter

  • grad_du[in] Gradient of incremental change in u

  • e_sym[in] Green Euler strain, in symmetric representation

  • FdSFTranspose[out] F*dS*F^T needed for computing df1 in current configuration

Returns:

An error code: 0 - success, otherwise - failure

int RatelStrainEnergy_MooneyRivlin(CeedScalar V, CeedScalar lambda, CeedScalar mu_1, CeedScalar two_mu_2, CeedScalar Jm1, CeedScalar trace_strain, CeedScalar trace_strain2, CeedScalar *strain_energy)

Compute strain energy for Mooney-Rivlin model.

psi = lambda * V(J) - (mu_1 + 2 mu_2) logJ + mu_1 I1(E) + 2 mu_2 II(E)

Parameters:
  • V[in] V(J)

  • lambda[in] Lamé parameter

  • mu_1[in] First Mooney-Rivlin parameter

  • two_mu_2[in] Two times the second Mooney-Rivlin parameter

  • Jm1[in] Determinant of deformation gradient - 1

  • trace_strain[in] Trace of Green Lagrange or Green euler strain tensor (E or e)

  • trace_strain2[in] Trace of E^2 (or e^2)

  • strain_energy[out] Strain energy for Mooney-Rivlin model

Returns:

An error code: 0 - success, otherwise - failure

int StrainEnergy_MooneyRivlin(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute strain energy for Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - strain energy

Returns:

An error code: 0 - success, otherwise - failure

int DiagnosticStress_MooneyRivlin(void *ctx, const CeedScalar Jm1, const CeedScalar V, const CeedScalar J_dVdJ, CeedScalar grad_u[3][3], CeedScalar sigma_sym[6], CeedScalar *strain_energy, CeedScalar *trace_e, CeedScalar *trace_e2)

Compute projected diagnostic stress, and strain energy invariants values for Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Jm1[in] Determinant of deformation gradient - 1

  • V[in] V(J); volumetric energy

  • J_dVdJ[in] J dV/dJ

  • grad_u[in] Gradient of incremental change in u

  • sigma_sym[out] Cauchy stress tensor in symmetric representation

  • strain_energy[out] Strain energy

  • trace_e[out] Trace of strain tensor e

  • trace_e2[out] Trace of strain tensor e*e

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_MooneyRivlin(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute projected diagnostic values for Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - u

    • 2 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - projected diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int SurfaceForceCellToFace_MooneyRivlin(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute surface forces for Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - surface force values

Returns:

An error code: 0 - success, otherwise - failure

int f1_MooneyRivlinCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute tau for Mooney-Rivlin hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - stored, dXdx, e, and J - 1

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = tau

Returns:

An error code: 0 - success, otherwise - failure

int df1_MooneyRivlinCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization df1 for Mooney-Rivlin hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored dXdx, e, and J - 1

    • 2 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dtau - tau * grad_du^T

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_MooneyRivlinCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for Mooney-Rivlin hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_MooneyRivlinCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for Mooney-Rivlin hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int f1_MooneyRivlinInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute P for Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - stored gradient of u with respect to physical coordinates

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = P

Returns:

An error code: 0 - success, otherwise - failure

int df1_MooneyRivlinInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of P for Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored gradient of u with respect to physical coordinates

    • 2 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dP

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_MooneyRivlinInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_MooneyRivlinInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelMooneyRivlinElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsResidual_MooneyRivlinInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute platen residual for Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsJacobian_MooneyRivlinInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate platen Jacobian for Mooney-Rivlin hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int SetPointFields_MPM_NeoHookean(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)
int StrainEnergy_MPM_NeoHookean(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute strain energy for neo-Hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - strain energy

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_MPM_NeoHookean(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute projected diagnostic values for neo-Hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - u

    • 2 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - projected diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int f1_MPM_NeoHookeanCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute tau for neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - stored, dXdx, tau, and J - 1

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = tau

Returns:

An error code: 0 - success, otherwise - failure

int df1_MPM_NeoHookeanCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization df1 for neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored dXdx, tau, and J - 1

    • 2 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dtau - tau * grad_du^T

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_MPM_NeoHookeanCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_MPM_NeoHookeanCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int RatelKirchhoffTau_NeoHookean(CeedScalar J_dVdJ, CeedScalar lambda, CeedScalar two_mu, const CeedScalar e_sym[6], CeedScalar tau_sym[6])

Compute Kirchoff tau for neo-Hookean hyperelasticity.

tau = (lambda * J dV/dJ) I + 2 mu * e

Ref https://ratel.micromorph.org/doc/modeling/materials/neo-hookean/#equation-eq-tau-neo-hookean

Parameters:
  • J_dVdJ[in] J dV/dJ

  • lambda[in] Lamé parameter

  • two_mu[in] Two times the shear modulus

  • e_sym[in] Green Euler strain, in symmetric representation

  • tau_sym[out] Kirchoff tau, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_NeoHookean(CeedScalar J_dVdJ, CeedScalar lambda, CeedScalar two_mu, const CeedScalar C_inv_sym[6], const CeedScalar E_sym[6], CeedScalar S_sym[6])

Compute second Kirchoff stress for neo-Hookean hyperelasticity.

S = (lambda * J dV/dJ) * C_inv + 2 mu C_inv * E

Ref https://ratel.micromorph.org/doc/modeling/materials/neo-hookean/#equation-eq-tau-neo-hookean

Parameters:
  • J_dVdJ[in] J dV/dJ

  • lambda[in] Lamé parameter

  • two_mu[in] Two times the shear modulus

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • S_sym[out] Second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelSecondKirchhoffStress_NeoHookean_fwd(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar lambda, CeedScalar mu, const CeedScalar F[3][3], const CeedScalar grad_du[3][3], const CeedScalar C_inv_sym[6], CeedScalar dS_sym[6])

Compute derivative of second Kirchoff stress for neo-Hookean hyperelasticity.

dS = dS_vol - mu * dC_inv dS_vol = ((lambda J^2 * d2V/dJ2 + lambda * J dV/dJ) * (C_inv:dE)) C_inv + (lambda * J dV/dJ) dC_inv

Ref https://ratel.micromorph.org/doc/modeling/materials/neo-hookean/#equation-eq-tau-neo-hookean

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • lambda[in] Lamé parameter

  • mu[in] Shear modulus

  • F[in] Deformation gradient

  • grad_du[in] Gradient of incremental change in u

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • dS_sym[out] Derivative of second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelComputeFdSFTranspose_NeoHookean(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar lambda, CeedScalar mu, const CeedScalar grad_du[3][3], CeedScalar FdSFTranspose[3][3])

Compute F*dS*F^T for neo-Hookean hyperelasticity in current configuration.

Ref https://ratel.micromorph.org/doc/modeling/methods/hyperelasticity/#equation-cur-simp-jac

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • lambda[in] Lamé parameter

  • mu[in] Shear modulus

  • grad_du[in] Gradient of incremental change in u

  • FdSFTranspose[out] F*dS*F^T needed for computing df1 in current configuration

Returns:

An error code: 0 - success, otherwise - failure

int RatelStrainEnergy_NeoHookean(CeedScalar V, CeedScalar lambda, CeedScalar mu, CeedScalar Jm1, CeedScalar trace_strain, CeedScalar *strain_energy)

Compute strain energy for neo-Hookean model.

psi = lambda * V(J) - mu logJ + mu I1(E)

Parameters:
  • V[in] V(J)

  • lambda[in] Lamé parameter

  • mu[in] Shear modulus

  • Jm1[in] Determinant of deformation gradient - 1

  • trace_strain[in] Trace of Green Lagrange or Green euler strain tensor (E or e)

  • strain_energy[out] Strain energy for Neo-Hookean model

Returns:

An error code: 0 - success, otherwise - failure

int StrainEnergy_NeoHookean(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute strain energy for neo-Hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - strain energy

Returns:

An error code: 0 - success, otherwise - failure

int DiagnosticStress_NeoHookean(void *ctx, const CeedScalar Jm1, const CeedScalar V, const CeedScalar J_dVdJ, CeedScalar grad_u[3][3], CeedScalar sigma_sym[6], CeedScalar *strain_energy, CeedScalar *trace_e, CeedScalar *trace_e2)

Compute projected diagnostic stress, and strain energy invariants values for Neo-hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Jm1[in] Determinant of deformation gradient - 1

  • V[in] V(J); volumetric energy

  • J_dVdJ[in] J dV/dJ

  • grad_u[in] Gradient of incremental change in u

  • sigma_sym[out] Cauchy stress tensor in symmetric representation

  • strain_energy[out] Strain energy

  • trace_e[out] Trace of strain tensor e

  • trace_e2[out] Trace of strain tensor e*e

Returns:

An error code: 0 - success, otherwise - failure

int Diagnostic_NeoHookean(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute projected diagnostic values for neo-Hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - u

    • 2 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - projected diagnostic values

Returns:

An error code: 0 - success, otherwise - failure

int SurfaceForceCellToFace_NeoHookean(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute surface forces for neo-Hookean hyperelasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

    • 0 - qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - surface force values

Returns:

An error code: 0 - success, otherwise - failure

CeedScalar RatelStrainEnergy_NeoHookeanCurrent_AD(CeedScalar e_sym[6], CeedScalar lambda, CeedScalar mu)

Compute strain energy for neo-Hookean hyperelasticity.

Parameters:
  • e_sym[in] Green Euler strain, in symmetric representation

  • lambda[in] Lamé parameter

  • mu[in] Shear modulus

Returns:

A scalar value: strain energy

void RatelKirchhofftau_sym_NeoHookean_AD(const CeedScalar lambda, const CeedScalar mu, CeedScalar e_sym[6], CeedScalar tau_sym[6])

Compute Kirchoff tau for neo-Hookean hyperelasticity in current configuration with Enzyme.

Parameters:
  • lambda[in] Lamé parameter

  • mu[in] Shear modulus

  • e_sym[in] Green Euler strain, in symmetric representation

  • tau_sym[out] Kirchoff tau, in symmetric representation

void Rateldtau_fwd(const CeedScalar lambda, const CeedScalar mu, CeedScalar e_sym[6], CeedScalar de_sym[6], CeedScalar tau_sym[6], CeedScalar dtau_sym[6])

Compute derivative of Kirchoff tau for neo-Hookean hyperelasticity in current configuration with Enzyme.

Parameters:
  • lambda[in] Lamé parameter

  • mu[in] Shear modulus

  • e_sym[in] Green Euler strain, in symmetric representation

  • de_sym[out] Derivative of Green Euler strain, in symmetric representation

  • tau_sym[in] Kirchoff tau, in symmetric representation

  • dtau_sym[out] Derivative of Kirchoff tau, in symmetric representation

int f1_NeoHookeanCurrent_AD(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute tau for neo-Hookean hyperelasticity in current configuration with Enzyme.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - stored dXdx and Green Euler strain

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = tau

Returns:

An error code: 0 - success, otherwise - failure

int df1_NeoHookeanCurrent_AD(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of tau for neo-Hookean hyperelasticity in current configuration with Enzyme.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored dXdx and Green Euler strain

    • 2 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dtau - tau * (nabla_x du)^T

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_NeoHookeanCurrent_AD(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for neo-Hookean hyperelasticity in current configuration with Enzyme.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_NeoHookeanCurrent_AD(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for neo-Hookean hyperelasticity in current configuration with Enzyme.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int f1_NeoHookeanCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute tau for neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - stored, dXdx, tau, and J - 1

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = tau

Returns:

An error code: 0 - success, otherwise - failure

int df1_NeoHookeanCurrent(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization df1 for neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored dXdx, tau, and J - 1

    • 2 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dtau - tau * grad_du^T

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_NeoHookeanCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_NeoHookeanCurrent(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for neo-Hookean hyperelasticity in current configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

CeedScalar RatelStrainEnergy_NeoHookeanInitial_AD(CeedScalar E_sym[6], CeedScalar lambda, CeedScalar mu)

Compute strain energy for neo-Hookean hyperelasticity.

Parameters:
  • E_sym[in] Green Lagrange strain, in symmetric representation

  • lambda[in] Lamé parameter

  • mu[in] Shear modulus

Returns:

A scalar value: strain energy

void SecondPiolaKirchhoffStress_NeoHookean_AD(const CeedScalar lambda, const CeedScalar mu, CeedScalar E_sym[6], CeedScalar S_sym[6])

Compute second Piola-Kirchhoff for neo-Hookean hyperelasticity in initial configuration with Enzyme.

Parameters:
  • lambda[in] Lamé parameter

  • mu[in] Shear modulus

  • E_sym[in] Green Lagrange strain, in symmetric representation

  • S_sym[out] Second Piola-Kirchhoff, in symmetric representation

void S_augmentfwd(double *S, double *E, const double lambda, const double mu, double *tape)

Compute first Piola-Kirchhoff for neo-Hookean hyperelasticity in initial configuration with Enzyme.

Parameters:
  • E[in] Green Lagrange strain

  • S[in] Second Piola-Kirchhoff

  • lambda[in] Lamé parameter

  • mu[in] Shear modulus

  • tape[out] Enzyme tape

void dS_fwd(double *dS, double *dE, const double lambda, const double mu, const double *tape)

Compute derivative of first Piola-Kirchhoff for neo-Hookean hyperelasticity in initial configuration with Enzyme.

Parameters:
  • dS[out] Derivative of first Piola-Kirchoff

  • dE[out] Derivative of Green Lagrange strain

  • lambda[in] Lamé parameter

  • mu[in] Shear modulus

  • tape[in] Enzyme tape

int f1_NeoHookeanInitial_AD(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute P for neo-Hookean hyperelasticity in initial configuration with Enzyme.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - stored gradient of u with respect to physical coordinates, Second Piola-Kirchhoff, and tape

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = P = F * S

Returns:

An error code: 0 - success, otherwise - failure

int df1_NeoHookeanInitial_AD(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of P for neo-Hookean hyperelasticity in initial configuration with Enzyme.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored gradient of u with respect to physical coordinates, Second Piola-Kirchhoff, and tape

    • 2 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dP = dF * S + F * dS

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_NeoHookeanInitial_AD(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for neo-Hookean hyperelasticity in initial configuration with Enzyme.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_NeoHookeanInitial_AD(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for neo-Hookean hyperelasticity in initial configuration with Enzyme.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int f1_NeoHookeanInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute P for neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - stored gradient of u with respect to physical coordinates

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = P

Returns:

An error code: 0 - success, otherwise - failure

int df1_NeoHookeanInitial(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of P for neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - stored gradient of u with respect to physical coordinates

    • 2 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dP

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityResidual_NeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int ElasticityJacobian_NeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate Jacobian for neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelNeoHookeanElasticityParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsResidual_NeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute platen residual for neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int PlatenBCsJacobian_NeoHookeanInitial(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Evaluate platen Jacobian for neo-Hookean hyperelasticity in initial configuration.

Parameters:
  • ctx[in] QFunction context, holding RatelBCPlatenParams

  • Q[in] Number of quadrature points

  • in[in] Input arrays

  • out[out] Output arrays

Returns:

An error code: 0 - success, otherwise - failure

int VolumetricFunctionAndDerivatives(CeedScalar Jm1, CeedScalar *V, CeedScalar *J_dVdJ, CeedScalar *J2_d2VdJ2)

Compute V, J * dV/dJ, J^2 * d^2V/dJ^2 for mixed/single fields hyperelasticity.

For isochoric single field and mixed methods we consider the volumetric energy of form \psi_vol = k * V

A = J^2 - 1 - 2 logJ V = A / 4 J dV/dJ = (J^2 - 1) / 2 J^2 d^2V/dJ^2 = (J^2 + 1) / 2

Parameters:
  • Jm1[in] Determinant of deformation gradient - 1.

  • V[out] V

  • J_dVdJ[out] J dV/dJ

  • J2_d2VdJ2[out] J^2 d^2V/dJ^2

Returns:

An error code: 0 - success, otherwise - failure

int VolumetricFunctionAndDerivatives_PL(CeedScalar Jm1, CeedScalar *U, CeedScalar *J_dUdJ, CeedScalar *J2_d2UdJ2)

Compute U, J * dU/dJ, J^2 * d^2U/dJ^2 for mixed with perturbed Lagrange-multiplier hyperelasticity.

For mixed PL method we consider the volumetric energy of form \psi_vol = k/2 * U^2

A = J^2 - 1 - 2 logJ U = A^{1/2} / sqrt(2) J dU/dJ = (J^2 - 1) A^{-1/2} / sqrt(2) J^2 d^2U/dJ^2 = [(J^2 + 1) A^{-1/2} - (J^2 - 1)^2 A^{-3/2}] / sqrt(2)

Parameters:
  • Jm1[in] Determinant of deformation gradient - 1.

  • U[out] U

  • J_dUdJ[out] J dU/dJ

  • J2_d2UdJ2[out] J^2 d^2U/dJ^2

Returns:

An error code: 0 - success, otherwise - failure

int RatelVolumetricKirchhoffTau(CeedScalar J_dVdJ, CeedScalar bulk, CeedScalar *tau_vol_sym)

Compute volumetric Kirchoff tau for single field isochoric hyperelasticity.

tau_vol = (bulk * J dV/dJ) I

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk[in] Bulk modulus

  • tau_vol_sym[out] Volumetric Kirchoff tau

Returns:

An error code: 0 - success, otherwise - failure

int RatelVolumetricSecondKirchhoffStress(CeedScalar J_dVdJ, CeedScalar bulk, const CeedScalar C_inv_sym[6], CeedScalar S_vol_sym[6])

Compute volumetric part of second Kirchoff stress for single field isochoric hyperelasticity.

S_vol = (bulk * J dV/dJ) * C_inv

Parameters:
  • J_dVdJ[in] J dV/dJ

  • bulk[in] Bulk modulus

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • S_vol_sym[out] Volumetric second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelVolumetricSecondKirchhoffStress_fwd(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar bulk, CeedScalar Cinv_contract_dE, const CeedScalar C_inv_sym[6], const CeedScalar dC_inv_sym[6], CeedScalar dS_vol_sym[6])

Compute derivative of volumetric second Kirchoff stress for single field isochoric hyperelasticity.

dS_vol = ((bulk J^2 * d2V/dJ2 + bulk * J dV/dJ) (C_inv:dE)) C_inv + (bulk * J dV/dJ) dC_inv

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • bulk[in] Bulk modulus

  • Cinv_contract_dE[in] C_inv : dE

  • C_inv_sym[in] Inverse of right Cauchy-Green tensor, in symmetric representation

  • dC_inv_sym[in] Derivative of C^{-1}, in symmetric representation

  • dS_vol_sym[out] Derivative of primal second Kirchoff stress, in symmetric representation

Returns:

An error code: 0 - success, otherwise - failure

int RatelComputeFdSFTransposeVolumetric(CeedScalar J_dVdJ, CeedScalar J2_d2VdJ2, CeedScalar bulk, CeedScalar trace_depsilon, const CeedScalar depsilon_sym[6], CeedScalar FdSFTranspose_vol_sym[6])

Compute F*dS_vol*F^T for for single field isochoric hyperelasticity in current configuration.

Parameters:
  • J_dVdJ[in] J dV/dJ

  • J2_d2VdJ2[in] J^2 d^2V/dJ^2

  • bulk[in] Bulk modulus

  • trace_depsilon[in] trace(depsilon)

  • depsilon_sym[in] depsilon = (grad_du + grad_du^T)/2

  • FdSFTranspose_vol_sym[out] F*dS_vol*F^T needed for computing df1 in current configuration

Returns:

An error code: 0 - success, otherwise - failure

int f1_PlasticityLinear(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar f1[3][3])

Compute Sigma for linear plasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelElastoPlasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - previously accepted plastic state components

    • 2 - gradient of u with respect to reference coordinates

  • out[out] Output arrays

    • 0 - currently computed plastic state components

  • dXdx[out] Coordinate transformation

  • f1[out] f1 = Sigma = lambda*trace(e)I + 2 mu e

Returns:

An error code: 0 - success, otherwise - failure

int df1_PlasticityLinear(void *ctx, const CeedInt Q, const CeedInt i, const CeedScalar *const *in, CeedScalar *const *out, CeedScalar dXdx[3][3], CeedScalar df1[3][3])

Compute linearization of Sigma for linear plasticity.

Parameters:
  • ctx[in] QFunction context, holding RatelElastoPlasticityParams

  • Q[in] Number of quadrature points

  • i[in] Current quadrature point

  • in[in] Input arrays

    • 0 - volumetric qdata

    • 1 - previously accepted plastic state components

    • 2 - stored values for total strain and s_trial

    • 3 - gradient of incremental change to u with respect to reference coordinates

  • out[out] Output arrays, unused

  • dXdx[out] Coordinate transformation

  • df1[out] df1 = dSigma = lambda tr(de) I + 2 mu de

Returns:

An error code: 0 - success, otherwise - failure

int PlasticityResidual_PlasticityLinear(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out)

Compute residual for linear plasticity.