Giter VIP home page Giter VIP logo

easyeinsteinsummation's Introduction

Easy Einstein Summation

This is a Mathematica package for doing tensor operations using Einstein summation rules, which is especially useful if you are working with special relativity or elasticity.

Functionality

This package:

  1. Does basic tensor operations including:
    • Tensor product
    • Tensor contract
    • Symmetrize and anti-symmetrize
    • Derivative & parallel transport derivative in curved space.
  2. Has complete support for Einstein summation rules.
  3. Supports calculation curved space of arbitrary dimension.

Features

This package has the following exceptional features which significantly reduces your effort when computing Einstein summation.

  1. WRITE AND COMPUTE!!! You can painlessly input the expression using virtually anything:
    • Mathematica built-in non-linear type system or Math Assistant.
    • Windows' built-in Math Input Panel. (which allows you to HANDWRITE the expression!!!)
    • Word Equation or other sources which use MathML (e.g. MathType).
    • strings (Sometimes buggy due to internal errors of Mathematica).
  2. Use Operators everywhere! You can use and as operators! You may also get a result in the form of a operator!
  3. Free Symmetrize! Support a very free usage of symmetrize symbol () and anti-symmetrize symbol []. e.g. you can write , or even , which do summation on first then symmetrize .
  4. Support symbolic tensors!!! You can work on subjects even if you don't know the exact value or even the exact dimension, thanks to Mathematica's latest feature!!!

Prerequisites

To use this package, Mathematica 11.3 or later are required. (There is a slight possibility that Version 10 can work, if you have tried, please notify me and I'll update~) Wolfram Engine is also a viable option, which is freely available to developers.

Downloads and Installation

The simplest way to configure your package is executing the following code:

PacletInstall["https://github.com/wjxway/EasyEinsteinSummation/releases/download/0.3.0/EinsteinSummation-0.3.0.paclet"]

Or you can download the lastest release of EinsteinSummation package on the Releases page, and install with:

PacletInstall["directory"]

To load and test the package, execute

<<EinsteinSummation`
SetVars[{x,y}];
$constants={a,b};
SetMetric[DiagonalMatrix@{a,b}]
AddTensorToDataset[<|"Symbol"->"A","IndexPosition"->{-1},"Value"->{p[x,y],q[x,y]}|>]
EvaluateEinsteinSummation["\*SuperscriptBox[\(g\), \(pq\)]\*SubscriptBox[\(\[Del]\), \([p\)]\*SubscriptBox[\(\[Del]\), \(\(q\)\(]\)\)]\*SuperscriptBox[\(A\), \(r\)]"]["Value"]//Normal

If you get {0,0} then the package is (probably) working right!

Basic Usage

As a demonstration of basic workflow, here we will try to figure out the Killing vector field in a 2-D spherical surface.

Step 1. First load the package:

<<EinsteinSummation`

Step 2. Setup parameters of space and the corresponding metric.

By default, variables are {t,x,y,z} and metric is diag{-1,1,1,1}, which corresponds to 4-D Minkovski spacetime.

Here, we are working on a spherical surface , so . To optimize your reading, we will use t and p as parameters.

SetVars[{t, p}];
SetMetric[DiagonalMatrix@{1, Sin[t]^2}];

Step 3. Then we need to define a (1,0) style vector as Killing vector.

Here we encountered our first vector(tensor). To input it, you have two choices:

  1. Manually input, here you will need to specify three properties: the name of your tensor, "Symbol", the position of its indexes, "IndexPosition" which takes 1 for upper index and -1 for lower index, and the value of your tensor, "Value":

    AddTensorToDataset[<|"Symbol" -> "K", "IndexPosition" -> {1}, "Value" -> {kt[t, p], kp[t, p]}|>];
  2. Or you might do the other way, You can:

    1. Use Mathematica's built-in Basic Math Assistant (which can be found under Palettes menu) and type in directly, and write like.
    AddTensorToDataset["\!\(\*SuperscriptBox[\(K\), \(\[Mu]\)]\)", {kt[t, p], kp[t, p]}];

    BTW, Don't be frightened by the long expression, this is just how Mathematica format things, not how you should input them.

    1. Use LaTeX To Type in the equation.
    AddTensorToDataset["K^\\mu", {kt[t, p], kp[t, p]}];
    1. Use Word/MathType To Type in equation (A bit complicated, For details check this wiki page)

Step 4. Type in the equation same as the step above and evaluate!!!

res=EvaluateEinsteinSummation["\!\(\*SubscriptBox[\(\[Del]\), \((\[Mu]\)]\)\!\(\*SubscriptBox[\(K\), \(\(\[Nu]\)\()\)\)]\)"]

Unfortunately, you cannot use TeX Strings here due to some internal bugs of Mathematica.

Step 5. Analyze the result.

You will obtain a tensorSymb object which shows you all sorts of information about the resulting tensor. From res["IndexName"] you know that the free indexes are and there're no symmetry marker left. and from res["IndexPosition"] you know that the result is a (0,2) type tensor. an finally, from res["Value"] you know the computation's result, which is in the form of SparseArray in this case.

You can do further analysis like TensorSymmetry@res["Value"] which tells you that the resulting tensor is symmetric.

If you want to do something more later, you can also store it like:

AddTensorToDataset["Q", res];

so next time when you want to use this you only need to write Q in your string.

For more details, please check the Mathematica documentation built in the package (Working...). (The package is properly written so the documentation can seamlessly integrate into the documentation center!)

easyeinsteinsummation's People

Contributors

wjxway avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.