How Does VarD Work?

640 views
Skip to first unread message

Benedict

unread,
Jan 7, 2021, 9:53:47 AM1/7/21
to xAct Tensor Computer Algebra

I'd like to check some results I obtained by using the VarD command, but the results I obtain disagree.

Under xCoba I define a Lagrangian L and perturb it using varL = L // Perturbation // ExpandPerturbation // ContractMetric // ToCanonical.

Then, I use 

vartf = 2 (-VarD[pert[LI[1], a, b], cd][varL]/Sqrt[-Detbackground[]] /. delta[-LI[1], LI[1]] -> 1 // SeparateMetric[background] // RicciToEinstein) // Expand // ContractMetric // ToCanonical

eterm = IndexCollect[cd[a]@vartf // ToCanonical, cd[-b][sf[]]] // Simplification

to obtain the equations of motion.

Now, shouldn't the [t] or [0] component of eterm agree with 

L1 = Simplify[Coefficient[Series[L, {\[Epsilon], 0, 1}], \[Epsilon], 1]];

(D[D[L1, \[Alpha][t[], x[], y[], z[]]] /Sqrt[-detg], t[]] +
   D[D[L1, b1[t[], x[], y[], z[]]] /Sqrt[-detg], x[]] +
   D[D[L1, b2[t[], x[], y[], z[]]] /Sqrt[-detg], y[]] +
   D[D[L1, b3[t[], x[], y[], z[]]] /Sqrt[-detg], z[]])

when alpha and b1, b2, b3 are the [00] and [0i] metric perturbations and L1 is the first order perturbation of the Lagrangian? I think the result should be zero, as eterm corresponds to the background scalar equation of motion, times the derivative of a scalar field. I attached two MWE to illustrate my issue. If I am not mistaken, eterm should correspond to the conservation equation ( 1/sqrt(-g) * d (sqrt(-g)L / d g_ab ),a. Or does VarD work differently than I assumed?

If you see my mistake and could point it out to me, you'd help me tremendously. Thank you very much in advance.

Benedict

EoM_xCoba171_MWE.nb
EoM_xTras171_MWE.nb

Jose

unread,
Mar 4, 2021, 10:22:28 PM3/4/21
to xAct Tensor Computer Algebra
Hi Benedict,

Did you solve this discrepancy already? It's all too complicated for me to look at,  particularly in the xTras file. Can you think of a simpler version that still shows the problem?

Regarding the general question of how does VarD work, it's just integration by parts. Basically VarD[tensor[inds], cd][expr] starts by converting itself into VarD[tensor[inds], cd][expr, 1] and then it tries to move stuff from the first argument (let us call it the "left argument", that starts with expr) to the second (the "right argument", that starts with 1) using integration by parts. For example if it finds VarD[tensor_[inds___], cd_][cd_[ind_][e1_], e2_] it will return -VarD[tensor[inds], cd][e1, cd[ind][e2]], and continue. Then at some point it will find a tensor in the left argument. If it coincides with the tensor in the first pair of brackets of VarD, it gives a bunch of deltas depending on the symmetry of the tensor. If it is a different tensor, say T[...], it will call ImplicitTensorDepQ[T, tensor] to see if you have declared implicit dependencies. If you have and this returns True then VarD[tensor[inds], cd][T[...]] stays unevaluated. If you have not (or you did but it returned False) then VarD gives zero. All the rest of the code handles linearity, different types of objects, symmetries, etc.

Cheers,
Jose.

Reply all
Reply to author
Forward
0 new messages