Opened 9 months ago

Closed 9 months ago

#28462 closed defect (fixed)

Bug in computing the second fundamental form of a Riemannian submanifold

Reported by: egourgoulhon Owned by:
Priority: major Milestone: sage-8.9
Component: geometry Keywords: submanifolds, pseudo-Riemannian, second_fundamental_form
Cc: tscrim, gh-FlorentinJ Merged in:
Authors: Eric Gourgoulhon Reviewers: Florentin Jaffredo
Report Upstream: N/A Work issues:
Branch: f815378 (Commits) Commit: f8153780899df2a1c936b1c368e8adb85e0b562d
Dependencies: Stopgaps:

Description (last modified by egourgoulhon)

As reported in this ask.sagemath question, we have currently (Sage 8.8 and 8.9.beta9):

sage: P = Manifold(3, 'P', structure='Riemannian')
sage: Q = Manifold(2, 'Q', ambient=P, structure='Riemannian')
sage: CP.<x,y,z> = P.chart()
sage: CQ.<u,v> = Q.chart()
sage: g = P.metric()
sage: c = 2/(1 + y^2 + z^2)
sage: g[0,0], g[1,1], g[2,2] = 1, c^2, c^2
sage: phi = Q.diff_map(P, (u+v, u, v))
sage: phi_inv = P.diff_map(Q, (y, z))
sage: Q.set_embedding(phi, inverse=phi_inv)
sage: Q.second_fundamental_form()
TypeError: unable to convert 1/2*sqrt(2)*(u^4 + v^4 + 2*(u^2 + 1)*v^2 + 2*u^2 + 1)*y/
(sqrt(u^4 + v^4 + 2*(u^2 + 1)*v^2 + 2*u^2 + 3)*(y^2 + z^2 + 1)) 
+ 1/2*sqrt(2)*(u^4 + v^4 + 2*(u^2 + 1)*v^2 + 2*u^2 + 1)*z/
(sqrt(u^4 + v^4 + 2*(u^2 + 1)*v^2 + 2*u^2 + 3)*(y^2 + z^2 + 1)) 
to an integer

This results from the mention of the ring SR missing in the declaration of a matrix involved in the computation.

The issue is fixed by this ticket.

Change History (14)

comment:1 Changed 9 months ago by egourgoulhon

  • Description modified (diff)

comment:2 Changed 9 months ago by egourgoulhon

  • Branch set to public/manifolds/bug_second_fund_form-28462
  • Commit set to 7f96e90c78b57358f7e72e7e887df5c6c42e40bd

New commits:

7f96e90Fix bug in computation of second fundamental form

comment:3 Changed 9 months ago by egourgoulhon

  • Cc tscrim gh-FlorentinJ added
  • Status changed from new to needs_review

comment:4 follow-up: Changed 9 months ago by gh-FlorentinJ

I completely agree with the changes, but why was there no errors in the doctests ? The example in second_fundamental_form features a symbolic computation, and the result was not an integer.

comment:5 in reply to: ↑ 4 Changed 9 months ago by egourgoulhon

Replying to gh-FlorentinJ:

I completely agree with the changes, but why was there no errors in the doctests ? The example in second_fundamental_form features a symbolic computation, and the result was not an integer.

Actually, the error does not show off when the coefficients of the ambient connection are zero, since then gamma_n in line 1079 is filled with zeros, which is compatible with a matrix declared on the integers (the default, when the ring is not specified in matrix()). This is the case of the doctests.

Last edited 9 months ago by egourgoulhon (previous) (diff)

comment:6 Changed 9 months ago by gh-FlorentinJ

  • Status changed from needs_review to positive_review

comment:7 follow-up: Changed 9 months ago by egourgoulhon

  • Status changed from positive_review to needs_work

Argh, there is another issue: I wanted to add the following doctest to check that the original issue is solved:

            sage: M = Manifold(2, 'M', structure='Riemannian')
            sage: N = Manifold(1, 'N', ambient=M, structure='Riemannian',
            ....:              start_index=1)
            sage: CM.<x,y> = M.chart()
            sage: CN.<u> = N.chart()
            sage: g = M.metric()
            sage: g[0, 0], g[1, 1] = 1, 1/(1 + y^2)^2
            sage: phi = N.diff_map(M, (u, u))
            sage: N.set_embedding(phi)
            sage: N.second_fundamental_form()
            Field of symmetric bilinear forms K on the 1-dimensional Riemannian
             submanifold N embedded in the 2-dimensional Riemannian manifold M
            sage: N.second_fundamental_form().display()
            K = 2*sqrt(u^4 + 2*u^2 + 2)*(2*u*y^2 - (u^2 + 1)*y + 2*u)
               /(u^6 + 3*u^4 + (u^6 + 3*u^4 + 4*u^2 + 2)*y^2 + 4*u^2 + 2) du*du

As you can see, the expression of the component K_{uu} involves y, while it should be a function of u only. I guess this is because the expression of the ambient connection coefficients returned by expr() in line 1098 involves (x,y); x and y should be expressed in terms of u via the embedding formulas before continuing the computation.

comment:8 in reply to: ↑ 7 ; follow-up: Changed 9 months ago by gh-FlorentinJ

Replying to egourgoulhon:

x and y should be expressed in terms of u via the embedding formulas before continuing the >computation.

So I guess phi_inv was really needed...

comment:9 Changed 9 months ago by git

  • Commit changed from 7f96e90c78b57358f7e72e7e887df5c6c42e40bd to f8153780899df2a1c936b1c368e8adb85e0b562d

Branch pushed to git repo; I updated commit sha1. New commits:

f815378Fix another issue with second fundatemental form of pseudo-Riemannian submanifolds

comment:10 in reply to: ↑ 8 Changed 9 months ago by egourgoulhon

Replying to gh-FlorentinJ:

Replying to egourgoulhon:

x and y should be expressed in terms of u via the embedding formulas before continuing the >computation.

So I guess phi_inv was really needed...

No it was not. It was only a matter of using phi to substitute (x,y) by their expressions in terms of u. This is done in the above commit. I've also added a simplification of the result by a call to chart.simplify(). I think that everything is fixed now.

comment:11 Changed 9 months ago by egourgoulhon

  • Status changed from needs_work to needs_review

comment:12 Changed 9 months ago by gh-FlorentinJ

  • Status changed from needs_review to positive_review

comment:13 Changed 9 months ago by egourgoulhon

  • Reviewers set to Florentin Jaffredo

Thanks for the review!

comment:14 Changed 9 months ago by vbraun

  • Branch changed from public/manifolds/bug_second_fund_form-28462 to f8153780899df2a1c936b1c368e8adb85e0b562d
  • Resolution set to fixed
  • Status changed from positive_review to closed
Note: See TracTickets for help on using tickets.