Skip to content

Commit

Permalink
Remove obsolete classes ScalarField and VectorField (#92)
Browse files Browse the repository at this point in the history
Fix #50
  • Loading branch information
yguclu authored Feb 5, 2021
1 parent f838dfe commit b4667ac
Show file tree
Hide file tree
Showing 9 changed files with 235 additions and 295 deletions.
111 changes: 81 additions & 30 deletions sympde/calculus/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
>>> from sympde.topology import Domain
>>> from sympde.topology import ScalarFunctionSpace
>>> from sympde.topology import ScalarTestFunction
>>> from sympde.topology import element_of
>>> domain = Domain('Omega', dim=2)
>>> V = ScalarFunctionSpace('V', domain)
Expand All @@ -24,8 +25,8 @@
>>> alpha, beta, gamma = [Constant(i) for i in ['alpha','beta','gamma']]
>>> f,g,h = [ScalarField(V, name=i) for i in ['f','g','h']]
>>> F,G,H = [VectorField(W, i) for i in ['F','G','H']]
>>> f,g,h = [element_of(V, name=i) for i in ['f','g','h']]
>>> F,G,H = [element_of(W, i) for i in ['F','G','H']]
Generic properties
******************
Expand Down Expand Up @@ -90,32 +91,84 @@
"""

from sympy.core.compatibility import is_sequence
from sympy.core import Basic
from sympy import Indexed, IndexedBase, sympify
from sympy import Matrix, ImmutableDenseMatrix
from sympy.core import Add, Mul, Pow, Symbol
from sympy.core.containers import Tuple
from sympy.core.singleton import S

from operator import mul, add
from functools import reduce

from sympde.core.basic import CalculusFunction
from sympde.core.basic import _coeffs_registery
from sympy import Indexed, sympify
from sympy import Matrix, ImmutableDenseMatrix
from sympy import cacheit
from sympy.core import Basic
from sympy.core import Add, Mul, Pow
from sympy.core.containers import Tuple
from sympy.core.singleton import S
from sympy.core.decorators import call_highest_priority
from sympy.core.compatibility import is_sequence

from sympde.topology.space import ScalarTestFunction, VectorTestFunction, IndexedTestTrial
from sympde.topology.space import ScalarField, VectorField, IndexedVectorField
from sympde.topology.space import _is_sympde_atom
from sympde.topology.domain import NormalVector, MinusNormalVector, PlusNormalVector
from sympde.core.basic import CalculusFunction
from sympde.core.basic import _coeffs_registery
from sympde.topology.space import ScalarTestFunction, VectorTestFunction
from sympde.topology.space import _is_sympde_atom
from sympde.topology.domain import NormalVector, MinusNormalVector, PlusNormalVector
from sympde.topology.datatype import H1SpaceType, HcurlSpaceType
from sympde.topology.datatype import HdivSpaceType, L2SpaceType, UndefinedSpaceType
from sympde.topology.datatype import HdivSpaceType, UndefinedSpaceType

from .matrices import MatrixSymbolicExpr
from .errors import ArgumentTypeError
from sympy.core.decorators import call_highest_priority
from operator import mul,add
from functools import reduce
from sympy import cacheit

__all__ = (
'Average',
'BasicOperator',
'BasicOperatorAdd',
'Bracket',
'Convect',
'Convolution',
'Cross',
'Curl',
'DiffOperator',
'Div',
'Dot',
'Grad',
'Hessian',
'Inner',
'Jump',
'Laplace',
'MinusInterfaceOperator',
'NormalDerivative',
'Outer',
'PlusInterfaceOperator',
'Rot',
'StrainTensor',
#
'add_basicop',
'has',
'is_constant',
'is_scalar',
'is_zero',
#
'D',
'Dn',
'_diff_ops',
'_generic_ops',
'_is_op_test_function',
'avg',
'bracket',
'conv',
'convect',
'cross',
'curl',
'div',
'dot',
'grad',
'hessian',
'inner',
'jump',
'laplace',
'minus',
'outer',
'plus',
'rot',
)

#==============================================================================
@cacheit
def has(obj, types):
if hasattr(obj, 'args'):
Expand All @@ -130,6 +183,7 @@ def is_zero(x):
return all( i==0 for i in x[:])
else:
return x == 0

#==============================================================================
class BasicOperator(CalculusFunction):
"""
Expand Down Expand Up @@ -212,7 +266,7 @@ def is_constant(atom):
def is_scalar(atom):
""" Determine whether the given atom represents a scalar quantity.
"""
return is_constant(atom) or isinstance(atom, (ScalarField, ScalarTestFunction))
return is_constant(atom) or isinstance(atom, ScalarTestFunction)

#==============================================================================
# TODO add dot(u,u) +2*dot(u,v) + dot(v,v) = dot(u+v,u+v)
Expand Down Expand Up @@ -546,8 +600,8 @@ class Convect(BasicOperator):
>>> V = ScalarFunctionSpace('V', domain)
>>> W = VectorFunctionSpace('W', domain)
>>> alpha, beta, gamma = [Constant(i) for i in ['alpha','beta','gamma']]
>>> f,g,h = [ScalarField(V, name=i) for i in ['f','g','h']]
>>> F,G,H = [VectorField(W, i) for i in ['F','G','H']]
>>> f,g,h = [element_of(V, name=i) for i in ['f','g','h']]
>>> F,G,H = [element_of(W, i) for i in ['F','G','H']]
>>> convect(F+G, H)
convect(F,H) + convect(G,H)
Expand Down Expand Up @@ -967,11 +1021,11 @@ def eval(cls, expr):
a,b = vectors
# TODO remove try/except using regularity from space
try:
if isinstance(a, (Tuple, VectorTestFunction, VectorField)):
if isinstance(a, (Tuple, VectorTestFunction)):
f = b ; F = a
return f*Div(F) + Dot(F, grad(f))

elif isinstance(b, (Tuple, VectorTestFunction, VectorField)):
elif isinstance(b, (Tuple, VectorTestFunction)):
f = a ; F = b
return f*Div(F) + Dot(F, grad(f))

Expand Down Expand Up @@ -1762,9 +1816,6 @@ def eval(cls, *_args):
_is_op_test_function = lambda op: (isinstance(op, (Grad, Curl, Div)) and
isinstance(op._args[0], (ScalarTestFunction, VectorTestFunction)))

_is_op_field = lambda op: (isinstance(op, (Grad, Curl, Div)) and
isinstance(op._args[0], (ScalarField, VectorField)))

def add_basicop(expr):
return BasicOperatorAdd(*expr.args)

Expand Down
9 changes: 4 additions & 5 deletions sympde/expr/basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@
from sympy.core.containers import Tuple

from sympde.core.basic import Constant
from sympde.topology.space import ScalarFunctionSpace,VectorFunctionSpace
from sympde.topology.space import ScalarTestFunction
from sympde.topology.space import VectorTestFunction
from sympde.topology.space import IndexedTestTrial
from sympde.topology.space import ScalarField, VectorField

__all__ = ('BasicExpr', 'BasicForm', '_sanitize_arguments')

#==============================================================================
def _sanitize_arguments(arguments, is_bilinear=False, is_linear=False):
Expand Down Expand Up @@ -67,7 +66,7 @@ class BasicExpr(Expr):

@property
def fields(self):
atoms = self.expr.atoms(ScalarField, VectorField, ScalarTestFunction, VectorTestFunction)
atoms = self.expr.atoms(ScalarTestFunction, VectorTestFunction)
if self.is_bilinear or self.is_linear:
args = self.variables
if self.is_bilinear:
Expand Down Expand Up @@ -99,7 +98,7 @@ class BasicForm(Expr):

@property
def fields(self):
atoms = self.expr.atoms(ScalarField, VectorField, ScalarTestFunction, VectorTestFunction)
atoms = self.expr.atoms(ScalarTestFunction, VectorTestFunction)
if self.is_bilinear or self.is_linear:
args = self.variables
if self.is_bilinear:
Expand Down
39 changes: 29 additions & 10 deletions sympde/expr/evaluation.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

from itertools import product
from collections import OrderedDict

import numpy as np

from sympy import Abs, S, cacheit
from sympy import Indexed, Matrix, ImmutableDenseMatrix
from sympy import expand
Expand All @@ -21,16 +24,14 @@
from sympde.calculus import jump, avg, minus, plus
from sympde.calculus import Jump
from sympde.calculus.core import _generic_ops, _diff_ops

from sympde.calculus.matrices import SymbolicDeterminant, Inverse, Transpose
from sympde.calculus.matrices import MatSymbolicPow, MatrixElement, SymbolicTrace

from sympde.topology.mapping import JacobianSymbol, InterfaceMapping, MultiPatchMapping, JacobianInverseSymbol

from sympde.topology.basic import BasicDomain, Union, Interval
from sympde.topology.domain import NormalVector, TangentVector
from sympde.topology.basic import Boundary, Interface
from sympde.topology.basic import InteriorDomain
from sympde.topology.domain import NormalVector, TangentVector
from sympde.topology.mapping import JacobianSymbol, InterfaceMapping, MultiPatchMapping, JacobianInverseSymbol
from sympde.topology.mapping import LogicalExpr, PullBack

# TODO fix circular dependency between sympde.expr.evaluation and sympde.topology.mapping
Expand All @@ -40,7 +41,7 @@
from sympde.topology.space import IndexedTestTrial
from sympde.topology.space import Trace
from sympde.topology.space import element_of
from sympde.topology.space import VectorField
from sympde.topology.space import ScalarFunctionSpace

from sympde.topology.derivatives import _partial_derivatives
from sympde.topology.derivatives import _logical_partial_derivatives
Expand All @@ -54,24 +55,42 @@
from sympde.topology.derivatives import Bracket_2d
from sympde.topology.derivatives import Laplace_1d, Laplace_2d, Laplace_3d
from sympde.topology.derivatives import Hessian_1d, Hessian_2d, Hessian_3d

from sympde.topology.derivatives import (LogicalGrad_1d, LogicalDiv_1d,
LogicalGrad_2d, LogicalCurl_2d, LogicalRot_2d, LogicalDiv_2d,
LogicalGrad_3d, LogicalCurl_3d, LogicalDiv_3d)

from sympde.topology.derivatives import LogicalBracket_2d
from sympde.topology.derivatives import LogicalLaplace_1d, LogicalLaplace_2d, LogicalLaplace_3d
from sympde.topology.derivatives import LogicalHessian_1d, LogicalHessian_2d, LogicalHessian_3d

from sympde.topology.space import ScalarFunctionSpace

from .basic import BasicExpr, BasicForm
from .expr import BilinearForm
from .expr import Integral
from .expr import Functional
from .expr import _get_domain

import numpy as np
__all__ = (
'Advection',
'AdvectionT',
'Basic1dForm',
'Bilaplacian',
'BoundaryExpression',
'DomainExpression',
'InterfaceExpression',
'KernelExpression',
'Mass',
'Stiffness',
'TensorExpr',
'TerminalExpr',
'_get_trials_tests_flattened',
'_replace_atomic_expr',
'_split_expr_over_interface',
'_split_test_function',
'_tensorize_atomic_expr',
'_to_matrix_form',
'_unpack_functions',
'is_sequence',
)

#==============================================================================
def is_sequence(a):
return isinstance(a, (list,tuple,Tuple))
Expand Down
31 changes: 23 additions & 8 deletions sympde/expr/expr.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
# coding: utf-8

from operator import mul, add
from functools import reduce

from sympy import Dummy
from sympy import Matrix, ImmutableDenseMatrix
from sympy.core import Basic, S
from sympy.core import Expr, Add, Mul
from sympy.core.expr import AtomicExpr
from sympy.core.numbers import Zero as sy_Zero
from sympy.core.containers import Tuple
from sympy.core.compatibility import is_sequence
Expand All @@ -17,22 +19,35 @@
from sympde.topology import BasicDomain, Union
from sympde.topology import NormalVector
from sympde.topology import Boundary, Interface, Domain, InteriorDomain
from sympde.topology.space import ScalarFunctionSpace
from sympde.topology.space import ProductSpace
from sympde.topology.space import ScalarTestFunction
from sympde.topology.space import VectorTestFunction
from sympde.topology.space import Trace, trace_0, trace_1
from sympde.topology.space import ScalarField, VectorField

from .errors import UnconsistentLinearExpressionError
from .basic import BasicForm
from .basic import BasicExpr
from .basic import _sanitize_arguments
from sympy import cacheit

from operator import mul, add
from functools import reduce
__all__ = (
'BilinearForm',
'Functional',
'IntAdd',
'Integral',
'LinearExpr',
'LinearForm',
'Norm',
#
'_get_domain',
'add_int',
'expand',
'integral',
'is_linear_expression',
'linearize',
'mul_add',
'mul_integral',
)

#==============================================================================
class IntAdd(Add):
_op_priority = 20
def __new__(cls, *args, **options):
Expand Down Expand Up @@ -277,7 +292,7 @@ class Functional(BasicForm):
def __new__(cls, expr, domain, evaluate=True, **options):

# compute dim from fields if available
ls = tuple(expr.atoms(ScalarField, VectorField, ScalarTestFunction, VectorTestFunction))
ls = tuple(expr.atoms(ScalarTestFunction, VectorTestFunction))
if ls:
F = ls[0]
space = F.space
Expand Down
5 changes: 0 additions & 5 deletions sympde/printing/latex.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,6 @@ def _print_VectorTestFunction(self, expr):
return r'\mathbf{' + self._print(expr.name) + '}'
# ...

# ...
def _print_VectorField(self, expr):
return r'\mathbf{' + self._print(expr.name) + '}'
# ...

# ... algebraic operators
def _print_Dot(self, expr):
left = expr.args[0]
Expand Down
Loading

0 comments on commit b4667ac

Please sign in to comment.