# This file was automatically generated by SWIG (https://www.swig.org).
# Version 4.1.1
#
# Do not make changes to this file unless you know what you are doing - modify
# the SWIG interface file instead.

from sys import version_info as _swig_python_version_info
# Import the low-level C/C++ module
if __package__ or "." in __name__:
    from . import _aniso
else:
    import _aniso

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

def _swig_repr(self):
    try:
        strthis = "proxy of " + self.this.__repr__()
    except __builtin__.Exception:
        strthis = ""
    return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)


def _swig_setattr_nondynamic_instance_variable(set):
    def set_instance_attr(self, name, value):
        if name == "this":
            set(self, name, value)
        elif name == "thisown":
            self.this.own(value)
        elif hasattr(self, name) and isinstance(getattr(type(self), name), property):
            set(self, name, value)
        else:
            raise AttributeError("You cannot add instance attributes to %s" % self)
    return set_instance_attr


def _swig_setattr_nondynamic_class_variable(set):
    def set_class_attr(cls, name, value):
        if hasattr(cls, name) and not isinstance(getattr(cls, name), property):
            set(cls, name, value)
        else:
            raise AttributeError("You cannot add class attributes to %s" % cls)
    return set_class_attr


def _swig_add_metaclass(metaclass):
    """Class decorator for adding a metaclass to a SWIG wrapped class - a slimmed down version of six.add_metaclass"""
    def wrapper(cls):
        return metaclass(cls.__name__, cls.__bases__, cls.__dict__.copy())
    return wrapper


class _SwigNonDynamicMeta(type):
    """Meta class to enforce nondynamic attributes (no new attributes) for a class"""
    __setattr__ = _swig_setattr_nondynamic_class_variable(type.__setattr__)


import ooflib.SWIG.engine.property
import ooflib.SWIG.engine.properties.elasticity.elasticity
import ooflib.SWIG.engine.properties.elasticity.cijkl
import ooflib.SWIG.engine.symmmatrix
import ooflib.SWIG.engine.outputval
import ooflib.SWIG.engine.fieldindex
import ooflib.SWIG.engine.planarity
import ooflib.SWIG.engine.IO.propertyoutput
import ooflib.SWIG.engine.mastercoord
class CAnisoElasticity(ooflib.SWIG.engine.properties.elasticity.elasticity.Elasticity):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, registry, _self, name, c):
        _aniso.CAnisoElasticity_swiginit(self, _aniso.new_CAnisoElasticity(registry, _self, name, c))
    __swig_destroy__ = _aniso.delete_CAnisoElasticity

    def crystal_cijkl(self):
        return _aniso.CAnisoElasticity_crystal_cijkl(self)

# Register CAnisoElasticity in _aniso:
_aniso.CAnisoElasticity_swigregister(CAnisoElasticity)
# -*- python -*-

# This software was produced by NIST, an agency of the U.S. government,
# and by statute is not subject to copyright in the United States.
# Recipients of this software assume all responsibilities associated
# with its operation, modification and maintenance. However, to
# facilitate maintenance we ask that before distributing modified
# versions of this software, you first contact the authors at
# oof_manager@nist.gov. 

# Definitions of anisotropic linear elastic properties

from ooflib.SWIG.engine.properties.elasticity import cijkl
from ooflib.common.IO import parameter
from ooflib.common.IO import xmlmenudump
from ooflib.engine import problem
from ooflib.engine import propertyregistration 
from ooflib.engine.IO import anisocijkl

PropertyRegistration = propertyregistration.PropertyRegistration

class AnisoElasticity(CAnisoElasticity):
    def __init__(self, registration, name, cijkl):
        CAnisoElasticity.__init__(self, registration, self, name,
                                  cijkl.tensorForm())


# CUBIC

class CubicElasticityProp(AnisoElasticity):
    pass

reg = PropertyRegistration(
    'Mechanical:Elasticity:Anisotropic:Cubic', CubicElasticityProp,
    11,
    [anisocijkl.CubicCijklParameter('cijkl',
                                    anisocijkl.CubicRank4TensorCij(c11=1.0,
                                                                   c12=0.5,
                                                                   c44=0.25),
                                    tip=parameter.emptyTipString)],
    outputs=["Energy", "Material Constants:Mechanical:Elastic Modulus C"],
    propertyType="Elasticity",
    tip="Cubic linear elasticity.",
    discussion=xmlmenudump.loadFile(
        'DISCUSSIONS/engine/property/anisoelastic.xml')
    )

reg.fluxInfo(fluxes=[problem.Stress], fields=[problem.Displacement],
             time_derivs=[0])

# HEXAGONAL 

class HexagonalElasticityProp(AnisoElasticity):
    pass

reg = PropertyRegistration(
    'Mechanical:Elasticity:Anisotropic:Hexagonal',
    HexagonalElasticityProp,
    12,
    [anisocijkl.HexagonalCijklParameter(
    'cijkl', anisocijkl.HexagonalRank4TensorCij(c11=1.0,
                                                c12=0.5, c13=0.5,
                                                c33=1.0, c44=0.25),
    tip=parameter.emptyTipString)],
    outputs=["Energy", "Material Constants:Mechanical:Elastic Modulus C"],
    propertyType="Elasticity",
    tip="Hexagonal linear elasticity.",
    discussion=xmlmenudump.loadFile(
        'DISCUSSIONS/engine/property/anisoelastic.xml')
    )
reg.fluxInfo(fluxes=[problem.Stress], fields=[problem.Displacement], 
             time_derivs=[0])

# TETRAGONAL

class TetragonalElasticityProp(AnisoElasticity):
    pass

reg = PropertyRegistration(
    'Mechanical:Elasticity:Anisotropic:Tetragonal',
    TetragonalElasticityProp,
    13,
    [anisocijkl.TetragonalCijklParameter(
            'cijkl', anisocijkl.TetragonalRank4TensorCij(
                c11=1.0, c12=0.5, c13=0.5,
                c33=1.0, c44=0.25, c66=0.25, c16=0.0),
            tip=parameter.emptyTipString)],
    outputs=["Energy", "Material Constants:Mechanical:Elastic Modulus C"],
    propertyType="Elasticity",
    tip="Tetragonal linear elasticity.",
    discussion=xmlmenudump.loadFile(
        'DISCUSSIONS/engine/property/anisoelastic.xml')
    )
reg.fluxInfo(fluxes=[problem.Stress], fields=[problem.Displacement],
             time_derivs=[0])

# TRIGONAL-A

class TrigonalAElasticityProp(AnisoElasticity):
    pass

reg = PropertyRegistration(
    'Mechanical:Elasticity:Anisotropic:TrigonalA',
    TrigonalAElasticityProp,
    14,
    [anisocijkl.TrigonalACijklParameter('cijkl',
                                        anisocijkl.TrigonalARank4TensorCij(
    c11=1.0, c12=0.5, c13=0.5, c33=1.0, c44=0.25, c14=0.0, c15=0.0),
                                        tip=parameter.emptyTipString)],
    outputs=["Energy", "Material Constants:Mechanical:Elastic Modulus C"],
    propertyType="Elasticity",
    tip="Trigonal-A linear elasticity.",
    discussion=xmlmenudump.loadFile(
        'DISCUSSIONS/engine/property/anisoelastic.xml'))

reg.fluxInfo(fluxes=[problem.Stress], fields=[problem.Displacement],
             time_derivs=[0])

# TRIGONAL-B

class TrigonalBElasticityProp(AnisoElasticity):
    pass

reg = PropertyRegistration(
    'Mechanical:Elasticity:Anisotropic:TrigonalB',
    TrigonalBElasticityProp,
    15,
    [anisocijkl.TrigonalBCijklParameter(
            'cijkl', anisocijkl.TrigonalBRank4TensorCij(
                c11=1.0, c12=0.5,c13=0.5,c33=1.0,c44=0.25,c14=0.0),
            tip=parameter.emptyTipString)],
    outputs=["Energy", "Material Constants:Mechanical:Elastic Modulus C"],
    propertyType="Elasticity",
    tip="Trigonal-B linear elasticity.",
    discussion=xmlmenudump.loadFile(
        'DISCUSSIONS/engine/property/anisoelastic.xml'))

reg.fluxInfo(fluxes=[problem.Stress], fields=[problem.Displacement],
             time_derivs=[0])

# ORTHORHOMBIC

class OrthorhombicElasticityProp(AnisoElasticity):
    pass

reg = PropertyRegistration(
    'Mechanical:Elasticity:Anisotropic:Orthorhombic',
    OrthorhombicElasticityProp,
    16,
    [anisocijkl.OrthorhombicCijklParameter(
    'cijkl',
    anisocijkl.OrthorhombicRank4TensorCij(c11=1.0, c12=0.5, c13=0.5,
                                      c22=1.0, c23=0.5, c33=1.0,
                                      c44=0.25, c55=0.25, c66=0.25),
    tip=parameter.emptyTipString)],
    outputs=["Energy", "Material Constants:Mechanical:Elastic Modulus C"],
    propertyType="Elasticity",
    tip="Orthorhombic linear elasticity.",
    discussion=xmlmenudump.loadFile(
        'DISCUSSIONS/engine/property/anisoelastic.xml'))

reg.fluxInfo(fluxes=[problem.Stress], fields=[problem.Displacement],
             time_derivs=[0])

# MONOCLINIC

class MonoclinicElasticityProp(AnisoElasticity):
    pass

reg = PropertyRegistration(
    'Mechanical:Elasticity:Anisotropic:Monoclinic',
    MonoclinicElasticityProp,
    17,
    [anisocijkl.MonoclinicCijklParameter(
    'cijkl',
    anisocijkl.MonoclinicRank4TensorCij(c11=1.0, c12=0.5, c13=0.5, c15=0.0,
                                        c22=1.0, c23=0.5, c25=0.0,
                                        c33=0.25, c35=0.0, c44=0.25,
                                        c46=0.0, c55=0.25, c66=0.25),
    tip=parameter.emptyTipString)],
    outputs=["Energy", "Material Constants:Mechanical:Elastic Modulus C"],
    propertyType="Elasticity",
    tip="Monoclinic linear elasticity.",
    discussion=xmlmenudump.loadFile(
        'DISCUSSIONS/engine/property/anisoelastic.xml'))

reg.fluxInfo(fluxes=[problem.Stress], fields=[problem.Displacement], 
             time_derivs=[0])

# TRICLINIC

class TriclinicElasticityProp(AnisoElasticity):
    pass

reg = PropertyRegistration(
    'Mechanical:Elasticity:Anisotropic:Triclinic',
    TriclinicElasticityProp,
    18,
    [anisocijkl.TriclinicCijklParameter(
    'cijkl',
    anisocijkl.TriclinicRank4TensorCij(c11=1.0, c12=0.5, c13=0.5, c14=0.0,
                                   c15=0.0, c16=0.0, c22=1.0, c23=0.5,
                                   c24=0.0, c25=0.0, c26=0.0, c33=1.0,
                                   c34=0.0, c35=0.0, c36=0.0, c44=0.25,
                                   c45=0.0, c46=0.0, c55=0.25, c56=0.0,
                                   c66=0.25),
    tip=parameter.emptyTipString)],
    outputs=["Energy", "Material Constants:Mechanical:Elastic Modulus C"],
    propertyType="Elasticity",
    tip="Triclinic linear elasticity.",
    discussion=xmlmenudump.loadFile(
        'DISCUSSIONS/engine/property/anisoelastic.xml'))

reg.fluxInfo(fluxes=[problem.Stress], fields=[problem.Displacement],
             time_derivs=[0])


