MEF90DefMech_Type Derived Type

type, public, extends(MEF90Object) :: MEF90DefMech_Type


Components

Type Visibility Attributes Name Initial
type(tPetscSF), public :: IOToBodyForceSF
type(tPetscSF), public :: IOToBoundaryForceSF
type(tPetscSF), public :: IOToCohesiveDisplacementSF
type(tPetscSF), public :: IOToCumulatedPlasticDissSF
type(tPetscSF), public :: IOToDamageSF
type(tPetscSF), public :: IOToDisplacementSF
type(tPetscSF), public :: IOToPlasticStrainSF
type(tPetscSF), public :: IOToPressureForceSF
type(tPetscSF), public :: IOToStressSF
type(tPetscSF), public :: IOToTemperatureSF
type(MEF90Ctx_Type), public, pointer :: MEF90Ctx => null()
type(c_ptr), public :: PETScCtx = C_NULL_PTR

Handle on self, set once in MEF90DefMechCreate with PETScCtx = c_loc(DefMech), and handed to PETSc wherever an application context is expected: SNESSetFunction, SNESSetJacobian, TAOSetObjective, ... The callbacks in m_MEF90_DefMech recover the context with call c_f_pointer(PETScCtx, MEF90DefMechCtx)

MEF90DefMech_Type cannot be passed to PETSc directly, the way MEF90DefMechCtx_Type was up to mef90 0.5.2, because extending MEF90Object gives it type-bound procedures and PETSc declares its context arguments as assumed-type. This has to be a component rather than a local or an inline c_loc(), for lifetime reasons that are easy to get wrong: see the note at the top of MEF90/m_MEF90_BaseClass.F90 before changing any of this.

real(kind=C_DOUBLE), public :: analysisTime
type(tVec), public, pointer :: bodyForce => null()

cell based vec

type(tPetscSF), public :: bodyForceToIOSF
type(tVec), public, pointer :: boundaryForce => null()
type(tPetscSF), public :: boundaryForceToIOSF
type(tVec), public, pointer :: cohesiveDisplacement => null()
type(tPetscSF), public :: cohesiveDisplacementToIOSF
integer(kind=C_INT32_T), public :: comm
type(tPetscSF), public :: cumulatedPlasticDissToIOSF
type(tVec), public, pointer :: cumulatedPlasticDissipation => null()
integer(kind=C_INT32_T), public :: currentSet = 0_Ki
type(tPetscSF), public :: damageConstraintsSF
type(tVec), public, pointer :: damageLocal => null()
type(tPetscSF), public :: damageToIOSF
integer(kind=C_INT32_T), public :: dim
type(tPetscSF), public :: displacementConstraintsSF
type(tVec), public, pointer :: displacementLocal => null()

vertex based vec

type(tVec), public, pointer :: displacementLowerBoundLocal => null()
type(tVec), public, pointer :: displacementPreviousStepLocal => null()
type(tPetscSF), public :: displacementToIOSF
type(tVec), public, pointer :: displacementUpperBoundLocal => null()
type(tPetscViewer), public :: globalEnergyViewer

Neither the problem-wide nor the per-set options are stored: they are read from the options database where they are needed, with MEF90DefMechGlobalOptionsSetFromOptions and MEF90DefMech[Cell,Face,Vertex]SetOptionsSetFromOptions, the same way the AT model, the energy split, and the Hooke's law are obtained. The number of sets is obtained from the megaDM with MEF90DMGetNumSets.

logical(kind=C_BOOL), public :: hasDisplacementBounds = PETSC_FALSE
logical(kind=C_BOOL), public :: hasUnilateralContact = PETSC_FALSE
type(tDM), public :: megaDM
character(kind=c_char, len=MEF90MXSTRLEN), public :: name = "NULL"
type(tVec), public, dimension(:), pointer :: partialDamageLocal => null()
type(tVec), public, pointer :: plasticStrain => null()
type(tPetscSF), public :: plasticStrainToIOSF
character(kind=c_char, len=MEF90MXSTRLEN), public :: prefix
type(tVec), public, pointer :: pressureForce => null()
type(tPetscSF), public :: pressureForceToIOSF
type(tPetscViewer), public, dimension(:), pointer :: setEnergyViewer => null()
type(tVec), public, pointer :: stress => null()
type(tPetscSF), public :: stressToIOSF
type(tVec), public, pointer :: temperatureLocal => null()
type(tPetscSF), public :: temperatureToIOSF
real(kind=C_DOUBLE), public :: timeStep

Type-Bound Procedures

procedure, public, pass(self) :: setFromOptions => MEF90DefMechSetFromOptions

  • public subroutine MEF90DefMechSetFromOptions(self, ierr)

    Author
    Blaise Bourdin (2012-14, bourdin@lsu.edu) Blaise Bourdin (2026, bourdin@mcmaster.ca)

    MEF90DefMechSetFromOptions: initializes a MEF90DefMech_Type from options

    Arguments

    Type IntentOptional Attributes Name
    class(MEF90DefMech_Type), intent(inout) :: self
    integer(kind=C_INT32_T), intent(inout) :: ierr

procedure, public, pass(self) :: view => MEF90Object_view

  • private subroutine MEF90Object_view(self, viewer, ierr)

    Author
    Blaise Bourdin (2026, bourdin@mcmaster.ca)

    MEF90Object_view: Views a MEF90Object and flagged it as viewed so that it is not viewed multiple times when -verbose is set to a high value

    Arguments

    Type IntentOptional Attributes Name
    class(MEF90Object), intent(in) :: self
    type(tPetscViewer), intent(in) :: viewer
    integer(kind=C_INT32_T), intent(inout) :: ierr

procedure, public, pass(self) :: view_internal => MEF90DefMechView

  • public subroutine MEF90DefMechView(self, viewer, ierr)

    Author
    Blaise Bourdin (2026, bourdin@mcmaster.ca)

    MEF90DefMechView: the default viewer for a MEF90DefMech_Type

    Arguments

    Type IntentOptional Attributes Name
    class(MEF90DefMech_Type), intent(in) :: self
    type(tPetscViewer), intent(in) :: viewer
    integer(kind=C_INT32_T), intent(inout) :: ierr