;;; -*- Mode:Lisp; Syntax: Common-Lisp; Package:ONTOLINGUA-USER; Base:10 -*-
;;; 3D-Tensor Quantities
;;; (c) 1993,1994 Gregory R. Olsen and Thomas R. Gruber
(in-package "ONTOLINGUA-USER")
(define-theory 3D-TENSOR-QUANTITIES (tensor-quantities)
"This theory specializes the Tensor-Quantities for tensors of spatial.dimension 3. 3D-tensors are ubiquitous in engineering analysis and have important special properties. The cross product (or vector product) is defined for vector-quantities of spatial.dimension 3."
:issues ("(c) 1993, 1994 Gregory R. Olsen and Thomas R. Gruber"
(:see-also "The EngMath paper on line")))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 3-Dimensional Tensor-Quantity Algebra
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(in-theory '3D-tensor-quantities)
(define-class 3D-DYAD (?x)
"Second order tensors of 3-dimensions."
:def (and (dyad ?x)
(spatial.dimension ?x 3)))
(define-class 3D-VECTOR-QUANTITY (?x)
"Vectors of 3-dimensions. (These vectors have important properities
and are of particular interest to engineering analysis)."
:def (and (vector-quantity ?x)
(spatial.dimension ?x 3)))
(define-function CROSS (?v1 ?v2) :-> ?v
"Vector or cross product of two three dimensional vectors. If we
know the components of two vectors with respect to a common basis, we
can determine the components of the cross product in that basis."
:iff-def (and
(3d-vector-quantity ?v1)
(3d-vector-quantity ?v2)
(3d-vector-quantity ?v)
(= (quantity.dimension ?v)
(* (quantity.dimension ?v1)
(quantity.dimension ?v2)))
(= (dot ?v1 ?v)
(the-zero-scalar-for-dimension
(* (quantity.dimension ?v1)
(quantity.dimension ?v))))
(= (dot ?v2 ?v)
(the-zero-scalar-for-dimension
(* (quantity.dimension ?v2)
(quantity.dimension ?v))))
(and
(= (vector-component ?v 1 ?b)
(-
(* (vector-component ?v1 2 ?b)
(vector-component ?v2 3 ?b))
(* (vector-component ?v2 2 ?b)
(vector-component ?v1 3 ?b))))
(= (vector-component ?v 2 ?b)
(-
(* (vector-component ?v2 1 ?b)
(vector-component ?v1 3 ?b))
(* (vector-component ?v1 1 ?b)
(vector-component ?v2 3 ?b))))
(= (vector-component ?v 3 ?b)
(-
(* (vector-component ?v1 1 ?b)
(vector-component ?v2 2 ?b))
(* (vector-component ?v2 1 ?b)
(vector-component ?v1 2 ?b)))))))