TermGenerator Derived Type

type, public, abstract, extends(Object) :: TermGenerator

Abstract TermGenerator object, responsible for automatic generation of terms


Components

Type Visibility Attributes Name Initial
logical, public :: userDefined = .false.

True only if user explicitly sets it to true

type(MatTermContainer), private, allocatable, dimension(:) :: implicitTerms
type(TermContainer), private, allocatable, dimension(:) :: generalTerms
character(len=:), private, allocatable :: generatorPrefix

Type-Bound Procedures

procedure, public :: isDefined => isDefinedObject

  • interface

    private pure module function isDefinedObject(this) result(defined)

    Getter for userDefined

    Arguments

    Type IntentOptional Attributes Name
    class(Object), intent(in) :: this

    Return Value logical

procedure, public :: makeDefined => makeDefinedObject

  • interface

    private pure module subroutine makeDefinedObject(this)

    Set userDefined to .true.

    Arguments

    Type IntentOptional Attributes Name
    class(Object), intent(inout) :: this

procedure, public :: makeUndefined => makeUndefinedObject

  • interface

    private pure module subroutine makeUndefinedObject(this)

    Set userDefined to .false.

    Arguments

    Type IntentOptional Attributes Name
    class(Object), intent(inout) :: this

procedure, public :: setImplicitTerms

  • interface

    private module subroutine setImplicitTerms(this, impTerms)

    Move allocation of impTerms to this%implicitTerms

    Arguments

    Type IntentOptional Attributes Name
    class(TermGenerator), intent(inout) :: this
    type(MatTermContainer), intent(inout), allocatable, dimension(:) :: impTerms

procedure, public :: setGeneralTerms

  • interface

    private module subroutine setGeneralTerms(this, genTerms)

    Move allocation of genTerms to this%generalTerms

    Arguments

    Type IntentOptional Attributes Name
    class(TermGenerator), intent(inout) :: this
    type(TermContainer), intent(inout), allocatable, dimension(:) :: genTerms

procedure, public :: setGeneratorPrefix

  • interface

    private module subroutine setGeneratorPrefix(this, prefix)

    Set prefix for added term names

    Arguments

    Type IntentOptional Attributes Name
    class(TermGenerator), intent(inout) :: this
    character(len=*), intent(in) :: prefix

procedure, public :: getNumImplicitTerms

  • interface

    private pure module function getNumImplicitTerms(this) result(numTerms)

    Get size of this%implicitTerms

    Arguments

    Type IntentOptional Attributes Name
    class(TermGenerator), intent(in) :: this

    Return Value integer(kind=ik)

procedure, public :: getNumGeneralTerms

  • interface

    private pure module function getNumGeneralTerms(this) result(numTerms)

    Get size of this%generalTerms

    Arguments

    Type IntentOptional Attributes Name
    class(TermGenerator), intent(in) :: this

    Return Value integer(kind=ik)

procedure, public :: moveTerms

  • interface

    private module subroutine moveTerms(this, modelObj, impTermImpGroups, impTermGenGroups, genTermGroups)

    Move terms to modelObj

    Arguments

    Type IntentOptional Attributes Name
    class(TermGenerator), intent(inout) :: this
    class(Model), intent(inout) :: modelObj
    type(IntArray), intent(in), optional, dimension(:) :: impTermImpGroups
    type(IntArray), intent(in), optional, dimension(:) :: impTermGenGroups
    type(IntArray), intent(in), optional, dimension(:) :: genTermGroups

procedure(generateTerms), public, deferred :: generate

  • subroutine generateTerms(this, mbData) Prototype

    Abstract routine for generating terms

    Arguments

    Type IntentOptional Attributes Name
    class(TermGenerator), intent(inout) :: this
    class(ModelboundData), intent(in), optional :: mbData