There is also dimension
package by Barton Willis. It is most likely already
a part of your maxima
installation.
http://sourceforge.net/p/maxima/code/ci/master/tree/share/physics
A direct link to a pdf file with documentation:
http://sourceforge.net/p/maxima/code/ci/master/tree/share/physics/dimension.pdf?format=raw
You may find this example useful
load("dimension");
depends(v, [t, x]);
depends(p, [t, x]);
/* put known dimensions */
qput(rho, mass/length^3, dimension);
qput(v, length/time, dimension);
qput(t, time, dimension);
qput(x, length, dimension);
qput(L, length, dimension);
/* Navier-Stokes equation */
ns: rho*(diff(v, t) + v*diff(v, x)) = -diff(p, x) + mu*diff(v, x, 2);
/* assume dimensions for `p' and `mu' are unknown and derive them */
eq1: dimension(lhs(ns)) = dimension(part(rhs(ns), 1));
eq2: dimension(lhs(ns)) = dimension(part(rhs(ns), 2));
sol: solve([eq1, eq2], [dimension(p), dimension(mu)])[1];
/* this line should give an error becouse `ns' is dimensionally inconsistent */
/* dimension(ns); */
/* put dimensions for `p' and `mu' */
put(p, assoc(dimension(p), sol), 'dimension);
put(mu, assoc(dimension(mu), sol), 'dimension);
/* now it is OK */
dimension(ns);
/* define Reynolds number as dimensionless reverse viscosity */
one_over_mu_unit: natural_unit(1/mu, [L, rho, v]);
Re: (1/mu)/one_over_mu_unit;
print("dimension(mu): ", dimension(mu));
print("dimension(p): ", dimension(p));
print("Reynolds number: ", Re);
print("dimension(ns): ", dimension(ns));
The output should be:
mass
dimension(mu): -----------
length time
mass
dimension(p): ------------
2
length time
rho v L
Reynolds number: [-------]
mu
mass
dimension(ns): -------------
2 2
length time