# Singular

##### 7.7.6.0. SannfsVar
Procedure from library `dmodvar.lib` (see dmodvar_lib).

Usage:
SannfsVar(F [,ORD,eng]); F an ideal, ORD an optional string, eng an optional int

Return:
ring (Weyl algebra tensored with U(gl_P)), containing an ideal LD

Purpose:
compute the D<S>-module structure of D<S>*f^s where f = F[1]*...*F[P] and D<S> is the Weyl algebra D tensored with K<S>=U(gl_P), according to the generalized algorithm by Briancon and Maisonobe for affine varieties

Assume:
The basering is commutative and over a field of characteristic 0.

Note:
Activate the output ring D<S> with the `setring` command. In the ring D<S>, the ideal LD is the needed D<S>-module structure.
The value of ORD must be an elimination ordering in D<Dt,S> for Dt written in the string form, otherwise the result may have no meaning. By default ORD = '(a(1..(P)..1),a(1..(P+P^2)..1),dp)'.
If eng<>0, `std` is used for Groebner basis computations, otherwise, and by default `slimgb` is used.

Display:
If printlevel=1, progress debug messages will be printed,
if printlevel>=2, all the debug messages will be printed.

Example:
 ```LIB "dmodvar.lib"; ring R = 0,(x,y),Dp; ideal F = x^3, y^5; //ORD = "(a(1,1),a(1,1,1,1,1,1),dp)"; //eng = 0; def A = SannfsVar(F); setring A; A; ==> // characteristic : 0 ==> // number of vars : 8 ==> // block 1 : ordering a ==> // : names s(1)(1) s(1)(2) s(2)(1) s(2)(2) ==> // : weights 1 1 1 1 ==> // block 2 : ordering dp ==> // : names s(1)(1) s(1)(2) s(2)(1) s(2)(2) x y Dx Dy ==> // block 3 : ordering C ==> // noncommutative relations: ==> // s(1)(2)s(1)(1)=s(1)(1)*s(1)(2)-s(1)(2) ==> // s(2)(1)s(1)(1)=s(1)(1)*s(2)(1)+s(2)(1) ==> // s(2)(1)s(1)(2)=s(1)(2)*s(2)(1)-s(1)(1)+s(2)(2) ==> // s(2)(2)s(1)(2)=s(1)(2)*s(2)(2)-s(1)(2) ==> // s(2)(2)s(2)(1)=s(2)(1)*s(2)(2)+s(2)(1) ==> // Dxx=x*Dx+1 ==> // Dyy=y*Dy+1 LD; ==> LD[1]=5*s(2)(2)-y*Dy ==> LD[2]=3*s(1)(1)-x*Dx ==> LD[3]=15*s(1)(2)*s(2)(1)-x*y*Dx*Dy-5*x*Dx ==> LD[4]=5*s(2)(1)*y^4-x^3*Dy ==> LD[5]=3*s(1)(2)*x^2-y^5*Dx ```