 #
  # ELECTROMAGNETICS.
  #
  - &physicsElectromagnetics
    key: &physicsKey physicsElectromagnetics
    name: &physicsName Electromagnetics
    description: #Fixme
    arguments: &argElectromagnetics [*propMagFlux]

    physicalProperties:
      - &propJouleHeat
        <<: *propMagFlux
        key: Jheat
        name: Joule heat
        symbol: Q
        units: "\\frac{W}{m^3}"
        baseUnit: siHeatSource

      - &propBField
        <<: *propMagFlux
        key: Bfield

      - &propBFieldRe
        <<: *propMagFlux
        key: Bfield_re
        name: Magnetic field intensity (Re)
        components: 3

      - &propBFieldIm
        <<: *propMagFlux
        key: Bfield_im
        name: Magnetic field intensity (Im)
        components: 3

      - &propCurrentDensity
        key: CurrDens
        name: Current density
        symbol: J
        units: "\\frac{A}{m^2}"
        baseUnit: siCurrentDensity

      - &propCurrentDensityRe
        <<: *propCurrentDensity
        key: CurrDens_re
        name: Current density (Re)
        components: 3

      - &propCurrentDensityIm
        <<: *propCurrentDensity
        key: CurrDens_im
        name: Current density (Im)
        components: 3

      - &propMagneticVectorPotential
        key: MagneticVectorPotential
        name: Vector potential
        symbol: A
        units: T/m
        baseUnits: siMagneticVectorPotential
        default: 0
        hidden: true

      - &propMagneticVectorPotential2D
        <<: *propMagneticVectorPotential
        key: MagneticVectorPotential_2D
        name: Vector potential Z
        symbol: A_z

      - &propDummyLin2D
        key: Lin2D
        name: Dummy line
        default: 1
        hidden: true

      - &propDummyLin3D
        key: Lin3D
        name: Dummy line
        default: 1
        hidden: true

      - &propElectricScalarPotential
        key: ElectricScalarPotential
        name: Electric Scalar Potential
        symbol: "\\phi"
        baseUnits: siVolt
        default: 0
        hidden: true

      - &propVoltage
        key: volt
        name: Voltage
        symbol: U
        units: V
        default: 0
        baseUnits: siVolt

      - &propVoltageRe
        <<: *propVoltage
        key: volt_re
        name: Electric scalar potential (Re)
        components: 3

      - &propVoltageIm
        <<: *propVoltage
        key: volt_im
        name: Electric scalar potential (Im)
        components: 3

      - &propCurrent
        key: I_3D
        name: Current (Amplitude)
        symbol: I
        units: A
        baseUnits: siAmpere
        # default: 0

      - &propPower
        key: target_power
        name: Power
        symbol: P
        units: W
        baseUnits: siW
        # default: 0

      - &propOrientation
        units: "-"
        baseUnits: siNone
        # default: 0

      - &propMagneticPermeability
        key: mu
        name: Magnetic permeability
        symbol: "\\mu_r"
        units: "-"
        baseUnits: siNone
        min: 0
        minExclude: true
        valueTypes: [scalar, table, expression]
        arguments: [*propTemperature]

      - &propRemanence
        key: br
        name: Magnet Remanence
        symbol: "B_r"
        units: "T"
        baseUnits: siMagneticFluxDensity
        min: 0
        minExclude: false

      - &propElectricConductivity
        key: sigma
        name: Electric conductivity
        symbol: "\\sigma"
        units: "\\frac{S}{m}"
        baseUnits: siSimensOnMeter
        min: 0
        minExclude: false
        valueTypes: [scalar, table, expression]
        arguments: [*propTemperature]

      - &propResistanceElectric
        key: resistance_electric
        name: Electric contact resistance
        symbol: R
        units: "\\Omega m^2"
        baseUnit: siNone #Fixme
        min: 0
        minExclude: true

      - &propDirection
        key: direction
        name: Rotation direction (only sign of value is used)
        symbol: "-"
        units: "-"
        baseUnits: siNone

      - &voltFlag
        key: isVoltageSource
        name: Voltage source
        default: false
        style: checkbox
        incompatibleWith:
          - isCurrentSource

      - &currentFlag
        key: isCurrentSource
        name: Current source
        default: true
        style: checkbox
        incompatibleWith:
          - isVoltageSource

      - &propArea
        key: area
        name: Area
        symbol: A
        units: "m^2"
        baseUnit: siNone

      - &propWindings
        key: windings
        name: Number of turns
        symbol: N
        units: "-"
        baseUnit: siNone
        type: integer

      - &propFillFactor
        name: Fill Factor
        symbol: f
        units: "-"
        baseUnit: siNone
        min: 0
        minExclude: true
        max: 1
        maxExclude: false

      - &propVolume
        key: volume
        name: Volume
        symbol: V
        units: "-"
        baseUnit: siNone

      - &steinmetz_useLosses
        key: useSteinmetzLosses
        name: Use power losses in non-conducting material
        description: Steinmetz equation \( q = k \times f^a \times B^b \)
        default: false
        style: checkbox
        relevance:
          - key: physicsThermal
            value: true

      - &steinmetz_Amplitude
        key: steinmetz_k
        name: Amplitude for power losses
        symbol: "k"
        units: "W cm^-3"
        baseUnit: siNone
        relevance:
          - key: physicsThermal
            value: true
          - key: useSteinmetzLosses
            value: true

      - &steinmetz_FreqExp
        key: steinmetz_a
        name: Frequency exponent
        symbol: "a"
        units: "-"
        baseUnit: siNone
        relevance:
          - key: physicsThermal
            value: true
          - key: useSteinmetzLosses
            value: true

      - &steinmetz_MagnExp
        key: steinmetz_b
        name: Magnetic field exponent
        symbol: "b"
        units: "-"
        baseUnit: siNone
        relevance:
          - key: physicsThermal
            value: true
          - key: useSteinmetzLosses
            value: true

    BHModelProperties:
      - &BHModel_Permeability
        <<: *propMagneticPermeability
        relevance:
          - key: useBHModel
            value: false
          - key: useTForMagFlux
            value: false

      - &BHModel_Permeability_C
        <<: *propMagneticPermeability
        key: mu_C
        valueTypes: [scalar, expression]
        relevance:
          - key: useBHModel
            value: false
          - key: useTForMagFlux
            value: true

      - &BHModel_Flux
        <<: *propMagFlux
        key: BHModel
        valueTypes: [table]
        arguments:
          - <<: *propMagIntensity
            always: true
        relevance:
          - key: useBHModel
            value: true

      - &BHModel_useBHModel
        key: useBHModel
        name: Use B(H) model
        default: false
        style: checkbox
        incompatibleWith:
          - useAnalyticBHModel

      - &BHModel_useTemperature
        key: useTForMagFlux
        name: Use temperature dependance
        description: \( \mu(T) = 1 + (1 - \mu_r)(1-(T/T_C)^\beta) \)
        default: false
        style: checkbox
        relevance:
          - key: physicsThermal
            value: true

      - &BHModel_TCurie
        <<: *propTemperature
        key: TCurie
        name:  Curie temperature
        symbol: T_C
        relevance:
          - key: physicsThermal
            value: true
          - key: useTForMagFlux
            value: true

      - &BHModel_TCurieExponent
        key: TCurieExponent
        name: Exponent
        symbol: "\\beta"
        units: "-"
        baseUnit: siNone
        relevance:
          - key: physicsThermal
            value: true
          - key: useTForMagFlux
            value: true

      - &BHModel_isHarmonic
        key: isHarmonic
        name: HarmonicFlag
        units: "-"
        baseUnit: siNone
        hidden: true
        relevance:
          - key: time
            value: harmonic


    boundaryTypes:
      - &symmetryAxis2D
        id: 1
        key: symm_axis
        name: Symmetry axis
        description: Zero vector potential at the axis (axisymmetric only)
        isSymmetryType: true
        properties:
          - *propMagneticVectorPotential2D

      - &flux_parallel2D
        id: 2
        key: flux_parallel
        name: Flux parallel
        description: Magnetic field lines are parallel to the boundary
        properties:
          - *propMagneticVectorPotential2D

      - &infinity2D
        id: 3
        key: infinity
        name: Infinity
        description: Zero vector potential at outer boundary
        properties:
          - *propMagneticVectorPotential2D

      - &interface2D
        id: 4
        key: interface
        name: Interface
        isInterfaceType: true
        isOuterType: false
        description: Internal face between two domains
        properties:
          - *propDummyLin2D

      - &flux_normal2D
        id: 5
        key: flux_normal
        name: Flux normal
        description: Magnetic field lines are normal to the boundary

      - &sibc2D
        id: 6
        key: sibc
        name: Surface Impedance
        description: Surface Impedance Boundary Condition

      - &infinity3D
        id: 1
        key: infinity
        name: Infinity
        description: Zero vector potential at the boundary
        properties:
          -
            <<: *propMagneticVectorPotential
            key: Gauge
          -
            <<: *propMagneticVectorPotential
            key: MVP_3D

      - &flux_parallel_cond3D
        id: 2
        key: flux_parallel_cond
        name: Flux parallel
        description: Magnetic field lines are parallel to the boundary
        properties:
          -
            <<: *propMagneticVectorPotential
            key: MVP_3D
          -
            <<: *propMagneticVectorPotential
            key: Gauge
          -
            <<: *propElectricScalarPotential
            key: ElPot

      - &flux_parallel_ncond3D
        id: 3
        key: flux_parallel_ncond
        name: Flux parallel
        description: Magnetic field lines are parallel to the boundary
        properties:
          -
            <<: *propMagneticVectorPotential
            key: MVP_3D
          -
            <<: *propMagneticVectorPotential
            key: Gauge

      - &flux_normal3D
        id: 4
        key: flux_normal
        name: Flux normal
        description: Magnetic field lines are normal to the boundary

      - &voltage3D
        id: 5
        key: voltage
        name: Voltage (Amplitude)
        description: |-
            Voltage source. Amplitude value has to be input
            \( U_{amplitude} = U_{RMS} * \sqrt{2}\)
        properties:
          -
            <<: *propVoltage
            key: V_3D
            valueTypes: [scalar, table, expression]
            arguments: [*propTime]

          -
            <<: *propMagneticVectorPotential
            key: Gauge
      - &power3D
        id: 6
        key: power
        name: Power
        properties:
          -
            <<: *propCurrent
            default: 1
            hidden: true
          -
            <<: *propMagneticVectorPotential
            key: Gauge

          - 
            <<: *propPower
            valueTypes: [scalar, table, expression]
            arguments: [*propTime]
            


      - &current3D
        id: 6
        key: current
        name: Current (Amplitude)
        description: |-
            Current source. Amplitude value has to be input
            \( I_{amplitude} = I_{RMS} * \sqrt{2} \)
        properties:
          -
            <<: *propCurrent
            valueTypes: [scalar, table, expression]
            arguments: [*propTime]
          -
            <<: *propMagneticVectorPotential
            key: Gauge

      - &ground3D
        id: 7
        key: ground
        name: Ground
        properties:
          -
            <<: *propMagneticVectorPotential
            key: Gauge
          -
            <<: *propMagneticVectorPotential
            key: MVP_3D

      - &interface3D
        id: 8
        key: interface
        name: Interface
        description: Internal face between two domains
        isInterfaceType: true
        isOuterType: false
        properties:
          - *propDummyLin3D

      - &sibc3D
        id: 9
        key: sibc
        name: Surface Impedance
        description: Surface Impedance Boundary Condition

      - &currentStr3D
        id: 11
        key: current_stranded
        name: Current
        properties:
          -
            <<: *propCurrent
            hidden: true
            default: 1
          -
            <<: *propMagneticVectorPotential
            key: Gauge

      - &groundStr3D
        id: 12
        key: ground_stranded
        name: Ground
        properties:
          -
            <<: *propMagneticVectorPotential
            key: Gauge
          -
            <<: *propMagneticVectorPotential
            key: MVP_3D

      - &resistance_electric
        id: 13
        key: resistance_electric
        name: Electric Contact Resistance
        description: |-
          Define contact resistance as thin layer at interface.
          IMPORTANT: The same condition has to be set on both sides.
          Resistance can be calculated as \( d / \sigma \)
          (\( d \) - thickness, \( \sigma \) - conductivity).
        isInterfaceType: true
        isOuterType: false
        properties:
          -
            <<: *propResistanceElectric


    domainTypes:
      # Non-conductive domain (common for 2D and 3D)
      - &domainEMNonConductiveAbstract
        id: 1
        key: em_nc
        name: Non-conductive
        material:
          properties:
            - *BHModel_Permeability
            - *BHModel_Flux
            - *BHModel_useBHModel
            - *BHModel_useTemperature
            - *BHModel_TCurie
            - *BHModel_TCurieExponent
            - *BHModel_TCurieExponent
            - *steinmetz_useLosses
            - *steinmetz_Amplitude
            - *steinmetz_FreqExp
            - *steinmetz_MagnExp

      # Non-conductive domain (2D)
      - &domainEMNonConductive2D
        <<: *domainEMNonConductiveAbstract
        boundaryTypes:
          - *infinity2D
          - *flux_parallel2D
          - *flux_normal2D
          - *symmetryAxis2D
          - *interface2D

      # Non-conductive domain (3D)
      - &domainEMNonConductive3D
        <<: *domainEMNonConductiveAbstract
        boundaryTypes:
          - *infinity3D
          - *flux_parallel_ncond3D
          - *flux_normal3D
          - *interface3D

      # Conductive domain (common for 2D and 3D)
      - &domainEMConductiveAbstract
        id: 2
        key: em_cc
        name: Conductive
        material:
          properties:
            - *propElectricConductivity
            - *BHModel_Permeability
            - *BHModel_Permeability_C
            - *BHModel_Flux
            - *BHModel_useBHModel
            - *BHModel_useTemperature
            - *BHModel_TCurie
            - *BHModel_TCurieExponent

      # Conductive domain (2D)
      - &domainEMConductive2D
        <<: *domainEMConductiveAbstract
        boundaryTypes:
          - *infinity2D
          - *flux_parallel2D
          - *flux_normal2D
          - *symmetryAxis2D
          - *interface2D
        properties:
          -
            <<: *propVoltage
            key: VoltageLoad_2D
            hidden: true

      # Conductive domain (3D)
      - &domainEMConductive3D
        <<: *domainEMConductiveAbstract
        boundaryTypes:
          - *infinity3D
          - *flux_parallel_cond3D
          - *flux_normal3D
          - *interface3D
          - *resistance_electric

      # Current source domain (common for 2D and 3D)
      - &domainEMSourceAbstract
        id: 3
        key: source_dom
        name: Current source
        material:
          properties:
            - *propElectricConductivity
            - *BHModel_Permeability
            - *BHModel_Permeability_C
            - *BHModel_Flux
            - *BHModel_useBHModel
            - *BHModel_useTemperature
            - *BHModel_TCurie
            - *BHModel_TCurieExponent

      # Current source domain (2D)
      - &domainEMSource2D
        <<: *domainEMSourceAbstract
        boundaryTypes:
          - *infinity2D
          - *flux_parallel2D
          - *flux_normal2D
          - *symmetryAxis2D
          - *interface2D
        properties:
          -
            key: _current
            name: Current
            default: true
            style: checkbox
            incompatibleWith:
              - _voltage
              - _power
          -
            <<: *propCurrent
            key: Current_2D
            valueTypes: [scalar, table, expression]
            arguments: [*propTime]
            relevance:
              - key: _current
                value: true
          -
            key: _voltage
            name: Voltage
            default: false
            style: checkbox
            incompatibleWith:
              - _current
              - _power
          -
            <<: *propVoltage
            key: Voltage_2D
            valueTypes: [scalar, table, expression]
            arguments: [*propTime]
            relevance:
              - key: _voltage
                value: true

          -
            key: _power
            name: Power
            default: false
            style: checkbox
            incompatibleWith:
              - _current
              - _voltage
            
          -
            <<: *propCurrent
            key: Current_2D
            default: 1
            hidden: true
            relevance:
              - key: _power
                value: true

          -
            key: ElectricalCircuit
            name: Circuit
            default: 0
            hidden: true

          -
            name: Power
            symbol: P
            units: W
            key: target_power
            valueTypes: [scalar, table, expression]
            arguments: [*propTime]
            relevance:
              - key: _power
                value: true

        domain_groups:
          source:
            - this

      # Current source domain (3D)
      - &domainEMSource3D
        <<: *domainEMSourceAbstract
        boundaryTypes:
          - *voltage3D
          - *current3D
          - *ground3D
          - *power3D
          - *flux_parallel_cond3D
          - *flux_normal3D
          - *interface3D
          - *infinity3D
          - *resistance_electric


        domain_groups:
          source_domain:
            - this
          terms:
            - voltage
            - current
            - ground

      # Magnet domain (common for 2D and 3D)
      #- &domainEMPerMagnetAbstract
      # id: 4
      #  key: permag_dom
      #  name: Permanent Magnet
      #  material:
      #    properties:
      #      - *propElectricConductivity
      #      - *BHModel_Permeability
      #      - *BHModel_Flux
      #      - *BHModel_useBHModel
      #      - *BHModel_useTemperature
      #      - *BHModel_TCurie
      #      - *BHModel_TCurieExponent
      #      - *propRemanence

      # Magnet domain (2D)
      #- &domainEMPerMagnet2D
      #  <<: *domainEMPerMagnetAbstract
      #  boundaryTypes:
      #    - *infinity2D
      #    - *flux_parallel2D
      #    - *flux_normal2D
      #    - *symmetryAxis2D
      #    - *interface2D
      #  properties:
      #    -
      #      <<: *propOrientation
      #      key: orientx
      #      symbol: e_{x}
      #      name: Magnet orientation X
      #    -
      #      <<: *propOrientation
      #      key: orienty
      #      symbol: e_{y}
      #      name: Magnet orientation Y
      #    -
      #      <<: *propDirection
      #     relevance:
      #        - key: time
      #          value: harmonic

      # Magnet domain (3D)
      #- &domainEMPerMagnet3D
      #  <<: *domainEMPerMagnetAbstract
      #  boundaryTypes:
      #    - *infinity3D
      #    - *flux_parallel_cond3D
      #    - *flux_normal3D
      #    - *interface3D
      #  properties:
      #    -
      #      <<: *propOrientation
      #      key: orientx
      #      symbol: e_{x}
      #      name: Magnet orientation X
      #    -
      #      <<: *propOrientation
      #      key: orienty
      #      symbol: e_{y}
      #      name: Magnet orientation Y
      #    -
      #      <<: *propOrientation
      #      key: orientz
      #      symbol: e_{z}
      #      name: Magnet orientation Z
      #    -
      #      <<: *propDirection
      #      relevance:
      #        - key: time
      #          value: harmonic

      # Suface-impedance BC
      - &domainEMSIBCAbstract
        id: 5
        key: em_sibc
        name: Surface Impedance Domain
        material:
          properties:
            - *propElectricConductivity
            - *propMagneticPermeability
            # - *BHModel_Permeability_C
            # - *BHModel_Flux
            # - *BHModel_useBHModel
            # - *BHModel_useTemperature
            # - *BHModel_TCurie
            # - *BHModel_TCurieExponent

      - &domainEMSIBC2D
        <<: *domainEMSIBCAbstract
        boundaryTypes:
          - *infinity2D
          - *flux_parallel2D
          - *flux_normal2D
          - *symmetryAxis2D
          - *interface2D
          - *sibc2D

      - &domainEMSIBC3D
        <<: *domainEMSIBCAbstract
        boundaryTypes:
          - *infinity3D
          - *flux_parallel_cond3D
          - *flux_normal3D
          - *interface3D
          - *sibc3D

      - &domainEMStrandesSourceAbstract
        id: 6
        key: stranded_source_dom
        name: Stranded Coil Source
        material:
          properties:
            - *propElectricConductivity
            - *BHModel_Permeability
            - *BHModel_Flux
            - *BHModel_useBHModel
            - *BHModel_useTemperature
            - *BHModel_TCurie
            - *BHModel_TCurieExponent

      # Current source stranded (2D)
      - &domainEMStrandedSource2D
        <<: *domainEMStrandesSourceAbstract
        boundaryTypes:
          - *infinity2D
          - *flux_parallel2D
          - *flux_normal2D
          - *symmetryAxis2D
          - *interface2D
        properties:
          -
            key: a_litz
            name: Litz wire
            default: false
            style: checkbox
          -
            key: _current
            name: Current
            default: true
            style: checkbox
            incompatibleWith:
              - _voltage
          -
            <<: *propCurrent
            key: Current_2D
            valueTypes: [scalar, table, expression]
            arguments: [*propTime]
            relevance:
              - key: _current
                value: true
          -
            key: _voltage
            name: Voltage
            default: false
            style: checkbox
            incompatibleWith:
              - _current
          -
            <<: *propVoltage
            key: Voltage_2D
            valueTypes: [scalar, table, expression]
            arguments: [*propTime]
            relevance:
              - key: _voltage
                value: true
          -
            key: ElectricalCircuit
            name: Circuit
            default: 0
            hidden: true
          -
            <<: *propWindings
            key: Nc
          -
            <<: *propFillFactor
            key: FillFactor

        domain_groups:
          stranded_source_domain:
            - this


      # Current source stranded (3D)
      - &domainEMStrandedSource3D
        <<: *domainEMStrandesSourceAbstract
        boundaryTypes:
          - *currentStr3D
          - *groundStr3D
          - *flux_parallel_cond3D
          - *flux_normal3D
          - *interface3D
          - *infinity3D

        properties:
          -
            key: a_litz
            name: Litz wire
            default: false
            style: checkbox
          -
            <<: *propWindings
            key: Nc
          -
            <<: *propFillFactor
            key: FillFactor
          -
            <<: *propArea
            name: Cross section area
            key: cross_section_area
          -
            key: I_str
            name: Current (Amplitude)
            symbol: I
            units: A
            valueTypes: [scalar, table, expression]
            arguments: [*propTime]


      # Magnet domain (common for 2D and 3D)
      - &domainCircuitDummy
        id: 7
        key: circdom
        name: Circuit Domain (Dummy)
        hidden: true
        properties:
          -
            <<: *propWindings
            key: Nc
            default: 1
          -
            <<: *propFillFactor
            key: FillFactor
            default: 1
          -
            key: a_litz
            name: Litz wire
            default: false
            style: checkbox



    subPhysicsParts:
      #
      # Electromagnetics 2D General.
      #
      - &subPhysicsEMGeneral2D
        key: subPhysicsEMGeneral2D
        name: Low frequency 2D
        description: "Solves EM 2D"
        physicsKey: *physicsKey
        physicsName: *physicsName
        arguments: *argElectromagnetics

        resultValues:
          - *propJouleHeat
          - *propBField
          - *propBFieldRe
          - *propBFieldIm
          - *propCurrentDensity
          - *propCurrentDensityRe
          - *propCurrentDensityIm

        timeTypes:
          - *timeHarmonic
          - *timeSteady

        domainTypes:
          - *domainEMNonConductive2D
          - *domainEMConductive2D
          - *domainEMSource2D
         # - *domainEMPerMagnet2D
          - *domainEMSIBC2D
          - *domainEMStrandedSource2D
          - *domainCircuitDummy

      #
      # Electromagnetics 2D with transient time.
      #
      - &subPhysicsEMWithTransient2D
        key: subPhysicsEMGeneral2D
        name: Low frequency 2D
        description: "Solves EM 2D"
        physicsKey: *physicsKey
        physicsName: *physicsName
        arguments: *argElectromagnetics

        resultValues:
          - *propJouleHeat
          - *propBField
          - *propBFieldRe
          - *propBFieldIm
          - *propCurrentDensity
          - *propCurrentDensityRe
          - *propCurrentDensityIm

        timeTypes:
          - *timeHarmonic
          - *timeSteady
          - *timeTransient

        domainTypes:
          - *domainEMNonConductive2D
          - *domainEMConductive2D
          - *domainEMSource2D
        #  - *domainEMPerMagnet2D
          - *domainEMSIBC2D
          - *domainEMStrandedSource2D
          - *domainCircuitDummy

      #
      # Electromagnetics 3D General.
      #
      - &subPhysicsEMGeneral3D
        key: subPhysicsEMGeneral3D
        name: Low frequency 3D,
        description: "Solves EM 3D"
        physicsKey: *physicsKey
        physicsName: *physicsName
        arguments: *argElectromagnetics

        resultValues:
          - *propJouleHeat
          - *propBField
          - *propBFieldRe
          - *propBFieldIm
          - *propCurrentDensity
          - *propCurrentDensityRe
          - *propCurrentDensityIm
          - *propVoltage
          - *propVoltageRe
          - *propVoltageIm

        timeTypes:
          - *timeHarmonic
          - *timeSteady

        domainTypes:
          - *domainEMNonConductive3D
          - *domainEMConductive3D
          - *domainEMSource3D
         # - *domainEMPerMagnet3D
          - *domainEMSIBC3D
          - *domainEMStrandedSource3D

      #
      # Electromagnetics 3D with transient time.
      #
      - &subPhysicsEMWithTransient3D
        key: subPhysicsEMGeneral3D
        name: Low frequency 3D,
        description: "Solves EM 3D"
        physicsKey: *physicsKey
        physicsName: *physicsName
        arguments: *argElectromagnetics

        resultValues:
          - *propJouleHeat
          - *propBField
          - *propBFieldRe
          - *propBFieldIm
          - *propCurrentDensity
          - *propCurrentDensityRe
          - *propCurrentDensityIm
          - *propVoltage
          - *propVoltageRe
          - *propVoltageIm

        timeTypes:
          - *timeHarmonic
          - *timeSteady
          - *timeTransient

        domainTypes:
          - *domainEMNonConductive3D
          - *domainEMConductive3D
          - *domainEMSource3D
        #  - *domainEMPerMagnet3D
          - *domainEMSIBC3D
          - *domainEMStrandedSource3D


    subPhysics:
      - key: subPhysicsEMGeneral
        name: Low Frequency
        description: "Solver for electromagnetic equation using AV formulation. Steady, and frequency domain solvers available"

        basisList:
          -
            key: subPhysicsEMGeneral2D
            basis: *mesh2D
            name: Low frequency 2D,
            description: "Solves EM 2D"
            physicsList:
              - *subPhysicsEMWithTransient2D

          -
            key: subPhysicsEMGeneral3D
            basis: *mesh3D
            name: Low frequency 3D,
            description: "Solves EM 3D"
            physicsList:
              - *subPhysicsEMWithTransient3D

#      - key: subPhysicsEMHighFrequency
#        name: High Frequency
#        description: "Solver for electromagnetic equation using AV formulation. Steady, and frequency domain solvers available"
#
#        basisList:
#          -
#            key: subPhysicsEMHighFrequency2D
#            basis: *mesh2D
#            name: High frequency 2D,
#            description: "Solves EM HF 2D"
#            physicsList:
#              - *subPhysicsEMHighFrequency2D
#          -
#            key: subPhysicsEMHighFrequency3D
#            basis: *mesh3D
#            name: High frequency 3D,
#            description: "Solves EM HF 3D"
#            physicsList:
#              - *subPhysicsEMHighFrequency3D
