The documentation is an interactive content, explaining a little bit more in details objects and functions in CSL. CSL is the computer algebra system embedded in MARTY, although it is logically separated and has its own manual and documentation.
This documentation is probably not complete. It is a work in progress, but it represents a massive amount of work and time constraints prevented me from writing a comprehensive documentation. There is still an important quantity of information you may get here, in particular on important topics about CSL.
If you have any question that this documentation and the manual do not answer, please feel free to ask the author: marty.uhlrich@gmail.com.
If you want to come back on MARTY main page, you can click here or click on the logo at the top of the page at any time. To get to MARTY's documentation, please click here.
If you are in the documentation for the first time, you should already have a pretty precise idea of what CSL is doing without knowing really how. For a code overview, the manual or the initial publication are probably better.
It is still very valuable to learn how to navigate in the documentation, and in particular where to start. Then if you want to use a specific object in your code, the documentation is really the best help you can get as even if not all function are documented, they all appear here.
To have an idea of what information you can get here, you may be interested in the tab Data Structures/Data Structure Index. It contains all the classes (object abstractions) in CSL. You may found there what is an Expr (symbolic expression), csl::Sum, csl::Integer, csl::Tensor and more.
Another good starting point is to go in File/File List that shows all the header files in the physics part of CSL. File names are clear and the user should be able to guess what lies inside each (at least a bit). For example, csl::Cos, csl::Exp, csl::Sin are mathematical (symbolic) functions and are in the file mathFunctions.h.
This part aims to give directly the links to the main features of CSL, sorted by topic.
Most CSL's features are callable from class methods. The files interface.h and interface_indicial.h contain a number of functions directly callable, without having to know what object owns the method. All features are not reimplemented in this file, but the main ones are, and it is then a good starting point to know what you can do with CSL.
A mathematical expression in CSL is expressed as a pointer to an abstract base class. The pointer may point to any specialization (a sum, an integer, a product...). The ownership of an expression is shared, i.e. several expressions may own another one (a variable 'x' may appear in several functions for example). The pointer is then a std::shared_ptr that expresses the fact that the underlying ressource is shared. When the last shared_ptr pointing to a resource is deleted, this ressource is automatically destroyed.
In CSL, the abstract base class is csl::Abstract and the shared pointer to it is encapsulated in the class Expr. Both classes are in the file abstract.h. In the csl::Abstract class, you may see all functions callable for a variable of type Expr using expr->func(<args>). In the Expr type is implemented a bit of interface allowing to use operator[] for example on an expression.
A list of all types in CSL is in the file enum.h.
As we said, a mathematical expression (Expr) is a shared pointer to the base class csl::Abstract, but the underlying object is specialized in a valid object. These objects can be of different types (here are just the scalar types):
Expressions may be tensorial as well, i.e. carrying indices.
Expressions may of course be modified by CSL. You may call at any moment member functions of the obecjt you manipulate, but also interface functions doing specific actions on expressions:
Several general options can be found in the file options.h.
1.8.13