⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 referencetensor.py

📁 finite element library for mathematic majored research
💻 PY
字号:
__author__ = "Anders Logg (logg@simula.no)"__date__ = "2004-11-03 -- 2007-03-05"__copyright__ = "Copyright (C) 2004-2007 Anders Logg"__license__  = "GNU GPL version 3 or any later version"# Modified by Garth N. Wells 2006# Python modulesimport timeimport numpy# FFC language modulesfrom ffc.compiler.language.index import *from ffc.compiler.language.reassignment import *# FFC tensor representation modulesfrom monomialintegration import *from multiindex import *class ReferenceTensor:    """This class represents the reference tensor for a monomial term    of a multilinear form"""    def __init__(self, monomial, facet0, facet1):        "Create reference tensor for given monomial"        # Compute reference tensor        self.A0 = integrate(monomial, facet0, facet1)        # Create primary, secondary and auxiliary multi indices        self.i = self.__create_multi_index(monomial, Index.PRIMARY)        self.a = self.__create_multi_index(monomial, Index.SECONDARY)        self.b = self.__create_multi_index(monomial, Index.AUXILIARY_0)        debug("Primary multi index: " + str(self.i), 1)        debug("Secondary multi index: " + str(self.a), 1)        debug("Auxiliary multi index: " + str(self.b), 1)    def __create_multi_index(self, monomial, index_type):        "Find dimensions and create multi index"                # Compute rank        rank = max([max_index(v, index_type) for v in monomial.basisfunctions] + [-1]) + 1        # Compute all dimensions        dims = [self.__find_dim(monomial, i, index_type) for i in range(rank)]        # Create multi index from dims        return MultiIndex(dims)    def __find_dim(self, monomial, i, index_type):        "Find dimension of given index"        # Create index to search for        index = Index(i)        index.type = index_type        # Search all basis functions        for v in monomial.basisfunctions:                        # Check basis function index            if v.index == index:                return range(len(v.index.range))            # Check component indices            for j in range(len(v.component)):                if v.component[j] == index:                    return range(len(v.component[j].range))            # Check derivatives            for d in v.derivatives:                if d.index == index:                    return range(len(d.index.range))                        # Didn't find dimension        raise RuntimeError, "Unable to find dimension for index " + str(index)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -