Having problems with mouse drag mesh vertex deformation in 2D

enter image description here

This is in 2D space. I want to create a mouse dragging mechanic like the one shown in the picture where I find a range of vertices relative to the position I first clicked where the red vertices have the most “weight” and the grey vertices have less weight. Then I move them depending on where I drag my mouse but also curve the outer side vertices so it looks more smooth.

So far I’m able to move a stack of vertices around my mouse but the outer vertices are not deforming the way I want because I want the grey outer edge vertices in front of the direction I drag to move forward and the grey vertices in the opposite direction to move inward. I’m not sure how I can differentiate the outer vertices from the inner ones.

ag.algebraic geometry – Deformation to a normal cone for a holomorphically symplectic manifold

Let $X$ be a subvariety in $M$.
“Deformation to the normal cone”

is a holomorphic deformation of a neighbourhood
of $X$ in $M$ over the disk such that its central fiber
is the total space of the normal bundle $NX$, and
the rest of the fibers are $M$.

I want to have a holomorphically symplectic version of this
statement. The following conjecture seems to be true; I
think I have a proof (ugly), but I am afraid it’s already

Let $(M, Omega)$ be a holomorphically
symplectic manifold, and $Xsubset M$
a compact holomorphic Lagrangian subvariety.
Assume that $M$ admits a proper, birational map
which contracts $X$. Then there exists
a smooth, holomorphic deformation
of a neighbourhood of $X$ in $M$
over the disk $Delta$, such that
its central fiber is biholomorphic to
a neighbourhood of $X$ in $T^*X$,
the rest of the fibers are
biholomorphic to a neighbourhood of $X$ in $M$,
and the holomorphic symplectic form on
$T^*X$ can be smoothly extended to the
holomorphic symplectic form on the
rest of the fibers.

This statement is provably false for some other holomorphic Lagrangian
subvarieties, such as a smooth fiber in a sufficiently generic
proper holomorphically Lagrangian fibration. I know there are MO
users who know the subject better than me, any help will be highly

finite element method – Large deformation of solids

Link to notebook with this question and code

I’d like to understand how large deformations of solid mechanics work and how they are implemented. For this am looking at the following reference problem: A long slender beam is fixated at the left. A larger force is pushing in the negative x direction and a smaller force in the negative y direction.

enter image description here

To keep things a simple as possible this example uses a linear plane stress model (a linear material model) – it’s just about the large deformation.

A reference to this benchmark problem can be found here. There is also a video starting at time 28:00. Geometric nonlinearity is explained at 26:22.

The result for the plane stress case is a largely deformed beam. In the picture below (taken from the source given above) we are talking about the lower of the two beams.

enter image description here

Set up some parameters.

length = 3.2;
hight = 1/10;
thickness = 1/10;
(CapitalOmega) = Rectangle({0, 0}, {length, hight});
mesh = ToElementMesh((CapitalOmega));
bmesh = ToBoundaryMesh(mesh);

The total force is given. I am not 100% sure what total force means in Comsol speak, but I assume it means force per area. The force in the negative x direction is 10^3 times larger then the one in the negative y direction. We use Poisson’s ratio of 0 and Young’s modulus of 210 GPa.

(*force per area*)
fx = -3.844*10^6/(hight*thickness);
fy = fx*10^-3;
bc2 = {NeumannValue(fx, x == length), NeumannValue(fy, x == length)};
bc1 = DirichletCondition({u(x, y) == 0, v(x, y) == 0}, x == 0);
materialData = {nu -> 0, Y -> 210*10^9};

We start by using a linear – no large deformation – plane stress operator used on SE in several places and known to produce correct results. The only thing I changed is adding a ‘thickness’ factor to account for the thickness that is not 1.

PlaneStress({Y_, nu_}, {u_, v_}, X : {x_, y_}) := Module({pStress},
  (* uses global thickness *)
  pStress = -thickness * 
    Y/(1 - nu^2)*{{{{1, 0}, {0, (1 - nu)/2}}, {{0, nu}, {(1 - nu)/2, 
        0}}}, {{{0, (1 - nu)/2}, {nu, 0}}, {{(1 - nu)/2, 0}, {0, 1}}}};
  {Inactive(Div)(pStress((1, 1)) . Inactive(Grad)(u, X), X) + 
    Inactive(Div)(pStress((1, 2)) . Inactive(Grad)(v, X), X), 
   Inactive(Div)(pStress((2, 1)) . Inactive(Grad)(u, X), X) + 
    Inactive(Div)(pStress((2, 2)) . Inactive(Grad)(v, X), X)})

Solve the equation:

planeStress = 
  PlaneStress({Y, nu} /. materialData, {u(x, y), v(x, y)}, {x, y});
{uif2, vif2} = 
  NDSolveValue({planeStress == bc2, bc1}, {u, 
    v}, {x, y} (Element) (CapitalOmega));
 deform2 = 
  ElementMeshDeformation(mesh, {uif2, vif2}, "ScalingFactor" -> 1)(
   "Wireframe"("MeshElementStyle" -> EdgeForm(Red))))

Next, I am solving the same problem with a different setup. This setup will allow me later to easily change to a large deformation setup. We use the following:

enter image description here

This is then converted to a 2 by 2 matrix:

  Thread(Rule({{1, 1}, {2, 2}, {1, 2}}, {Subscript((Sigma), xx), 
     Subscript((Sigma), yy), Subscript((Tau), xy)})), Automatic, 

(* {{Subscript((Sigma), xx), Subscript((Tau), 
  xy)}, {Subscript((Tau), xy), Subscript((Sigma), yy)}} *)

And plugged into (with an additional thickness factor):

 Inactive(Div)(-{{Subscript((Sigma), xx), Subscript((Tau), 
      xy)}, {Subscript((Tau), xy), Subscript((Sigma), 
      yy)}}((i, ;;)), X), {i, Length(U)})

(* {Inactive(
   Div)({-Subscript((Sigma), xx), -Subscript((Tau), xy)}, {x, y}), 
 Inactive(Div)({-Subscript((Tau), xy), -Subscript((Sigma), yy)}, {x,
    y})} *)

makeStressModel(e_) := Block(
  {materialData, materialModel, exx, eyy, gxy, eVec, strain, nu, Y, 
  (* linear elastic plane stress model *)
  materialModel = 
   Y/(1 - nu^2)*{{1, nu, 0}, {nu, 1, 0}, {0, 0, (1 - nu)/2}};
  exx = e((1, 1));
  eyy = e((2, 2));
  gxy = (e((1, 2)) + e((2, 1)));
  (* for plane stress ezz =nu/(1-nu)*(exx+
  eyy) does not play a role since nu = 0 *)
  strain = {exx, eyy, gxy};
  stress = (materialModel . strain);
    Thread(Rule({{1, 1}, {2, 2}, {1, 2}}, stress)), Automatic, 

(* uses global defined thickness *)
makePDEModel(stressMatrix_) := 
 Table(Inactive(Div)(-thickness*stressMatrix((i, ;;)), X), {i, 

We verify that this gives the same results as a the previous plane stress operator:

X = {x, y};
U = {u(x, y), v(x, y)};

(* geometric linear *)
gu = Grad(U, X);
gut = Transpose(gu);
e = 1/2 (gu + gut);
stress = makeStressModel(e);

pde = makePDEModel(stress /. materialData);
{uif, vif} = 
  NDSolveValue({pde == bc2, bc1}, {u, v}, {x, y} (Element) mesh);

 deform1 = 
  ElementMeshDeformation(mesh, {uif, vif}, "ScalingFactor" -> 1)(
   "Wireframe"("MeshElementStyle" -> EdgeForm(Brown))))

enter image description here

Norm(uif("ValuesOnGrid") - uif2("ValuesOnGrid"))
Norm(vif("ValuesOnGrid") - vif2("ValuesOnGrid"))

(* 1.43378*10^-10

With the framework in place and verified, I want to look at the large deformations. I set up the deformation gradient f and set up the non-linear strain.

(* geometric nonlinear *)
f = Grad(U, {x, y}) + IdentityMatrix(2);
e1 = 1/2 (Transpose(f) . f - IdentityMatrix(2)) // Expand // Simplify;

With the same approach as above

stress = makeStressModel(e1);
pde = makePDEModel(stress /. materialData);
{uif, vif} = 
  NDSolveValue({pde == bc2, bc1}, {u, 
    v}, {x, y} (Element) (CapitalOmega));
mesh = uif("ElementMesh");
 deform2 = 
  ElementMeshDeformation(mesh, {uif, vif}, "ScalingFactor" -> 1)(
   "Wireframe"("MeshElementStyle" -> EdgeForm(Red))))

enter image description here

Show(deform1, deform2)

enter image description here

This is not correct. I would have expected a failure from the nonlinear solver for the large deformation or a much larger deformation. I am trying to understand what I am missing.
Question: Why is this approach wrong or where did I make a mistake?

A second way to specify the large strains is by

gu = Grad(U, X);
gut = Transpose(gu);
e2 = 1/2 (gu + gut + gut . gu);
FullSimplify(e1 - e2)

(* {{0, 0}, {0, 0}} *)

But it gives the same result. I have verified that the PDE coefficients parse correctly

{state} = 
  NDSolve`ProcessEquations({pde == bc2, bc1}, {u, 
    v}, {x, y} (Element) (CapitalOmega));
GetInactivePDE(state) - pde

(*{0, 0}*)

The next idea was that using the Cauchy stress is not correct. So I changed to the second Piola-Kirchhoff stress. We compute the stress as before

stress = makeStressModel(e1);

Now, find the deformation gradient, it’s inverse and transpose and J the determinant of f.

f = Grad(U, X) + IdentityMatrix(2);
invF = Inverse(f);
invFT = Transpose(invF);
piolaStress = Det(f)*invF . stress . invFT;
pde = makePDEModel(piolaStress /. materialData);
{uif, vif} = 
  NDSolveValue({pde == bc2, bc1}, {u, 
    v}, {x, y} (Element) (CapitalOmega));
deform3 = 
  ElementMeshDeformation(mesh, {uif, vif}, "ScalingFactor" -> 1)(
   "Wireframe"("MeshElementStyle" -> EdgeForm(Blue)));
Show(deform2, deform3)

enter image description here

Still, no joy.

{state} = 
  NDSolve`ProcessEquations({pde == bc2, bc1}, {u, 
    v}, {x, y} (Element) (CapitalOmega));
GetInactivePDE(state) - pde
(* {0, 0} *)

Link to notebook with this question and code

ag.algebraic geometry – Manifolds with a Kähler deformation

Let $X$ be a compact complex non-Kähler manifold, then what conditions do we need to make it has a Kähler deformation? that is to say it can be deformed to a Kähler manifold.

Obviously not all the compact complex manifolds can be deformed to Kähler ones, for example, the Hopf surface, but certainly, there exist some non-Kähler manifolds which can be deformed to Kähler ones. For example, Hironaka has provided an example that except the central fiber, all the other fibers are projective manifolds, and the central fiber is a non-Kähler Moishezon manifold, so, conversely, for this Moishezon manifold, we can say it has a Kähler (even projective) deformation.

Then, are there any other examples of non-Kähler manifolds which has a Kähler deformation? or even a projective deformation? For example does a $partialbarpartial$-manifolds with trivial canonical bundle has a Kähler deformation? Has anyone think about it before? And what’s the latest progress on it?

ag.algebraic geometry – Spectral sequences as deformation theory

I believe that running the spectral sequence of a filtered complex / spectrum $ cdots to F_n to F_{n+1} to cdots$ can be viewed as doing deformation theory in some very primitive “derived algebraic geometry”-type setting. First recall the

Standard geometric way to think about filtrations: Set $F = oplus_n F_n$. Then $F$ is a $mathbb S(t)$-module, where the action of $t$ shifts along the filtration. So we may view $F$ as a quasicoherent sheaf over $mathbb A^1 = Spec mathbb S(t)$. Note that the natural grading of $mathbb S(t)$ corresponds to the natural action of $mathbb G_m = Spec mathbb S(t^{pm})$ on $mathbb A^1$, and the natural grading of $F$ can be interpreted as a $mathbb G_m$-equivariant structure on $F$ viewed as a sheaf over $mathbb A^1$. The map $mathbb S(t) to mathbb S$ sending $t mapsto 0$ corresponds to the origin of $mathbb A^1$, a fixed point for the $mathbb G_m$ action. So the pullback of $F$ to this point, which is the associated graded of the filtration we started with, has a $mathbb G_m$ action, corresponding to its natural grading.

So the stalk of $F$ over $0$ is where the $E_2$ page of the spectral sequence comes from. Now, consider the maps $mathbb S to mathbb S(t)/t^2 xrightarrow{j} mathbb S(t)/t^3 to dots$. These correspond to closed infinitesimal, $mathbb G_m$-equivariant neighborhoods of the origin, and the pullbacks of $F$ to theses neighborhoods correspond to the later pages of the spectral sequence. The way the spectral sequence is constructed also has a geometric interpretation: the exact couple allowing you to compute the $E_4$ page $F^{(4)}$ from the $E_3$ page $F^{(3)} = j^ast F^{(4)}$, for instance, comes from the fact that $F^{(4)}$ fits into an exact sequence $j^! F^{(3)} to F^{(4)} to j^ast F^{(3)}$ and moreover that $j^! F^{(3)}$ and $j^ast F^{(3)}$ differ by a shift, being the fiber and cofiber of the map $F^{(4)} xrightarrow{t^2} F^{(4)}$.

The $E_infty$ page is going to hopefully tell you something about $F$ over the big $mathbb G_m$-equivariant, but still infinitesimal neighborhood of the origin given by $Spec mathbb S((t))$, which you use to approximate the stalk of $F$ at $t=1$, $varinjlim F_n$.

This perspctive seems to beg generalization to things more general than filtrations, corresponding to fancier group actions than $mathbb G_m$ acting on $mathbb A^1$. What these “generalized filtrations” look like, I’m not sure!


  1. Is there anywhere a perspective like this is developed in more detail?

  2. What kinds of things can one say about convergence of the spectral sequence from this perspective?

  3. For other groups $G$ and $G$-spaces $X$, are there algebraic interpretations of $G$-equivariant sheaves on $X$ of a similar flavor to the “filtration” interpretation of a $mathbb G_m$-equivariant sheaf over $mathbb A^1$? (And if so, what do their associated “spectral sequences” look like in this picture…)

For (2), I’m thinking in particular that there should be standard algebraic geometry concepts allowing one to relate information over an infinitesimal neighborhood like $Spec k((t))$ to information over points which are are “nearby, but not infinitesimally so” like the point at $t=1$. I think flatness has something to do with this? But I’m not sure. Also, the relationship between the $E_infty$ page of the spectral sequence and the pullback of $F$ to $Spec k((t))$ is likely a bit delicate.

ag.algebraic geometry – Canonical lift of the deformation of an ordinary abelian variety

If $A/k$ is a principally polarised ordinary abelian variety ($k$ a perfect field of characteristic $p$, we may assume it is finite for simplicity), we have a canonical lift $hat{A}/W(k)$.
Now if I take a deformation $A_{epsilon}/k(epsilon)$, does there still exists a canonical lift of this deformation to a deformation of (the generic fiber of) $hat{A}$?

By the Kodaira-Spencer mapping deformations are essentially encoded by differentials of $A$, so the question boils down to whether differentials on $A$ lifts canonically to differentials on $hat{A}$. By Katz, Serre-Tate local moduli, Section 3, differentials on any lift $tilde{A}$ correspond to points in $T_p(A^vee)(k)$, and his main theorem 3.7.1 describe the compatibility of this identification with the Kodaira-Spencer map. Is there a way to use this to lift differentials canonically on the canonical lift?

ag.algebraic geometry – Obstruction to deformation of composite morphism (Reference request + question)

Let $f_0:X_0xrightarrow{g_0}Y_0xrightarrow{h_0}Z_0/S_0$ be a morphism of smooth projective $S_0$-schemes such that $g_0,h_0$ are flat. Let $S_0subset S$ be a first-order thickening, and let $X,Y,Z$ be $S$-schemes restricting to $X_0,Y_0,Z_0$ over $S_0$. Let $sigma_{f_0}$ (resp. $sigma_{g_0}$ and $sigma_{h_0}$) denote the obstruction to lifting $f_0$ to $f:Xlongrightarrow Z/S$ (resp. $g_0$ to $g:Xlongrightarrow Y/S$ and $h_0$ to $h:Ylongrightarrow Z/S$)

(1) I read in some deformation theory notes that $sigma_{f_0}=g_0^ast sigma_{h_0}$. Is there a reference for this fact?

(2) Assuming that what I wrote in point (1) is correct, suppose furthermore that $S_0$ is the spectrum of an algebraically closed field, that $sigma_{f_0}=0$, and that $g_0$ a finite separable morphism. Is it true that $sigma_{h_0}=0?$

c++ – How can I do real-time mesh deformation?

I have a very simple problem: I have a icosphere mesh rendered with OpenGL and I want to deform/stretch it. But it has to be a real-time process because the deformation is generated when user drag’n drop a part of the mesh. The idea is to let the user models the shape like a ball of play dough.

I already tried the biharmonic deformation functionality of libigl. The results are good but the performances are terrible, far from real-time.
I also look into Bullet Physics and its soft bodies but it seems they are just elastic and return to their initial shape when you release them. I need to keep the deformed shape.

How do I achieve this result? (I just thought of replacing my mesh with a group of rigid spheres stick together and spawning new spheres when user drag’n drop the ‘volume’ to extend it)

Thank for your help

ag.algebraic geometry – Deformation equivalent Hodge structures

An HH type is the oriented homotopy type of a closed simply-connected Kähler manifold together with the Hodge structure on cohomology.

Two HH types are deformation equivalent if they are realized by closed Kähler manifolds that are deformation equivalent.

If two HH types are equivalent as oriented homotopy types and have the same Hodge diamonds are they deformation equivalent?

Closed simply-connected complex surfaces with $p_gneq0$ (e.g. complete intersections) can supply counterexamples. I haven’t yet verified if the statement holds for them.