diff --git a/Ressources-Onelab/Levitation/levitation/BH.pro b/Ressources-Onelab/Levitation/levitation/BH.pro new file mode 100644 index 0000000000000000000000000000000000000000..c48b926d725a78eb0beddd53904b97226172eb22 --- /dev/null +++ b/Ressources-Onelab/Levitation/levitation/BH.pro @@ -0,0 +1,65 @@ +Function{ + + // Materiau magnetique + + // Ferrite + Mat_h = {0.000000, 44.635198, 47.996938, 54.360481, 57.254136, 63.513926, 66.205407, + 83.184012, 128.638642, 150.321852, 280.295679, 307.761975, 317.501481, + 486.037901, 775.608272, 869.477778, 1359.072840, 1373.269136, 2431.451852, + 5699.176543, 6389.154321, 8458.007407, 61532.617284, 73419.641975, + 197003.703704, 321027.901235, 324350.000000}; + + Mat_b = {0.000000, 0.068851, 0.079231, 0.096630, 0.104285, 0.117920, 0.123374, 0.150912, + 0.191749, 0.202635, 0.239024, 0.243936, 0.245556, 0.267244, 0.290565, 0.296190, + 0.312896, 0.313356, 0.335942, 0.364839, 0.368482, 0.376766, 0.477117, 0.494881, + 0.666990, 0.828539, 0.832720}; + + // XC10 + If (TypFe == 2) + Mat_h = {0, 43.92451, 87.84902, 145.3502, 214.3516, 297.1533, 396.5154, 515.7499, + 658.8312, 830.5289, 1036.566, 1283.811, 1580.504, 1936.536, 2363.775, 2876.462, + 3491.686, 4229.955, 5115.877, 6178.984, 7454.712, 8985.587, 10822.64, 13027.09, + 15672.45, 18846.87, 22656.17, 27227.34, 32712.74, 35984.02} ; + + Mat_b = {0, 0.1116464, 0.2104877, 0.3239492, 0.4408211, 0.5592701, 0.6773683, 0.7932189, + 0.9050798, 1.011466, 1.111222, 1.203555, 1.288032, 1.364557, 1.433316, 1.494722, 1.549358, + 1.597921, 1.641505, 1.683981, 1.725604, 1.765532, 1.802967, 1.837184, 1.867554, 1.893545, + 1.914713, 1.930682, 1.941108, 1.945219} ; + EndIf + + // M800 + If ( TypFe == 3 ) + Mat_h = { 0, 100, 125, 150, 175, 200, 250, 350, 500, 750, 1000, 1250, 1500, 2000, 2500, + 5000, 7500, 10000, 15000, 20000, 40000, 50000, 60000, 70000, 80000, 90000, 100000, + 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000} ; + + Mat_b = { 0, 0.57521, 0.80524, 0.99704, 1.14392, 1.21025, 1.30311, 1.39454, 1.45633, + 1.50824, 1.54066, 1.56507, 1.58528, 1.61581, 1.64054, 1.72818, 1.79222, 1.84547, + 1.92998, 1.99233, 2.07277, 2.09943, 2.12151, 2.14092, 2.15865, 2.17525, 2.19105, + 2.33142, 2.46203, 2.59017, 2.71733, 2.84399, 2.97036, 3.09656, 3.22264, 3.34864} ; + EndIf + + + Mat_b2 = Mat_b()^2; + Mat_nu = Mat_h() / Mat_b(); + Mat_nu(0) = Mat_nu(1); + + Mat_nu_b2 = ListAlt[Mat_b2(), Mat_nu()] ; + nu_1[] = InterpolationLinear[ SquNorm[$1] ]{ Mat_nu_b2() } ; + dnudb2_1[] = dInterpolationLinear[SquNorm[$1]]{ Mat_nu_b2() } ; + h_1[] = nu_1[$1] * $1 ; + dhdb_1[] = TensorDiag[1,1,1] * nu_1[$1#1] + 2*dnudb2_1[#1] * SquDyadicProduct[#1] ; + dhdb_1_NL[] = 2*dnudb2_1[$1#1] * SquDyadicProduct[#1] ; + + Mat_h2 = Mat_h()^2; + Mat_mu = Mat_b() / Mat_h(); + Mat_mu(0) = Mat_mu(1); + + Mat_mu_h2 = ListAlt[Mat_h2(), Mat_mu()] ; + mu_1[] = InterpolationLinear[ SquNorm[$1] ]{ Mat_mu_h2() } ; + dmudh2_1[] = dInterpolationLinear[SquNorm[$1]]{ Mat_mu_h2() } ; + b_1[] = mu_1[$1] * $1 ; + dbdh_1[] = TensorDiag[1,1,1] * mu_1[$1#1] + 2*dmudh2_1[#1] * SquDyadicProduct[#1] ; + dbdh_1_NL[] = 2*dmudh2_1[$1#1] * SquDyadicProduct[#1] ; + +} diff --git a/Ressources-Onelab/Levitation/levitation/data.geo b/Ressources-Onelab/Levitation/levitation/data.geo new file mode 100644 index 0000000000000000000000000000000000000000..c481031c481a83950fd3c208340cc3470032eb23 --- /dev/null +++ b/Ressources-Onelab/Levitation/levitation/data.geo @@ -0,0 +1,95 @@ + +// Parametres geometriques +//--------------------------- + +// noyau electroaimant +hea0 = 3e-2; +rea0 = 1e-2; + +// bobine +//dfil = 0.5e-3; +section0 = 0.52e-6; +Ns0 = 150; +kr = 0.6; + +// aimant permanent +rap0 = 0.5e-2; +hap0 = 1e-2; + +// distance inter-aimants +dia0 = 0.5e-2; + + +// Parametres physiques +//------------------------ + +Ibob0 = 10; +Br0 = 1.0; + + +// Interface graphique +//----------------------- +DefineConstant[ + TypFe = {1, Choices {1="Ferrite", 2="XC10", 3="M800"}, + Name "Modèle/Paramètres/01Bobine/00 Matériau noyau"}, + hea = {hea0*1e3, Min 10, Max 100, Step 1, + Name "Modèle/Paramètres/01Bobine/01Hauteur (en mm)"}, + rea = {rea0*1e3, Min 5, Max 50, Step 0.5, + Name "Modèle/Paramètres/01Bobine/02Rayon noyau ferreux (en mm)"}, + section = {section0*1e6, Choices {0.11="0,11",0.2="0,2",0.33="0,33", + 0.4="0,4",0.52="0,52",0.7="0,7",0.82="0,82",1.1="1,1",1.3="1,3", + 1.5="1,5",2.5="2,5",3.3="3,3"}, + Name"Modèle/Paramètres/01Bobine/03Section fil (en mm^2)"}, + Ns = {Ns0, Min 10, Max 250, Step 5, + Name "Modèle/Paramètres/01Bobine/04Nombre de spires"}, + Ibob = {Ibob0, Min 0, Max 50, Step 0.1, + Name "Modèle/Paramètres/01Bobine/05Courant (en A)"}, + rap = {rap0*1e3, Min 2.5, Max 25, Step 0.1, + Name "Modèle/Paramètres/02Aimant/01Rayon aimant (en mm)"}, + hap = {hap0*1e3, Min 5, Max 50, Step 0.5, + Name "Modèle/Paramètres/02Aimant/02Hauteur aimant (en mm)"}, + Br = {Br0, Choices {0.4 = "Ferrite", 0.9="NdFeB 0,9 T", + 1.0="NdFeB 1,0 T", 1.1="NdFeB 1,1 T", 1.2="NdFeB 1,2 T"}, + Name "Modèle/Paramètres/02Aimant/03Type d'aimant"}, + dia = {dia0*1e3, Min 1, Max 50, Step 0.1, + Name "Modèle/Paramètres/03Dispositif/04Distance aimant-bobine (en mm)"} +]; + + +// retour en m : +hea = hea*1e-3; +rea = rea*1e-3; +section = section*1e-6; +rap = rap*1e-3; +hap = hap*1e-3; +dia = dia*1e-3; + +// calculs grandeurs annexes +//----------------------------- +htot = hea+dia+hap; +epbob = Ns*section/kr/hea; +jeq = Ns*Ibob/(hea*epbob); + +rdom = 1.5*Sqrt[(htot/2)^2+(rea+epbob)^2]; +rext = 1.2*rdom; + +// Parametres maillage +//---------------------- +lc = (rap<epbob)?rap:epbob/25; +lcdom = rdom/25; +nehea = 40; +nerea = 20; +neepbob = 12; +nerap = 20; +nehap = 20; +neent = 25; + +// regions physiques +//--------------------- +BORD = 500; +STM = 501; +AIR = 1000; +NOY = 1001; +BOB = 1002; +AIM = 1003; +INF = 1004; diff --git a/Ressources-Onelab/Levitation/levitation/ldc.png b/Ressources-Onelab/Levitation/levitation/ldc.png new file mode 100644 index 0000000000000000000000000000000000000000..6f9e8c116705b55c3bc9f764379560479016e94a Binary files /dev/null and b/Ressources-Onelab/Levitation/levitation/ldc.png differ diff --git a/Ressources-Onelab/Levitation/levitation/levitation.geo b/Ressources-Onelab/Levitation/levitation/levitation.geo new file mode 100644 index 0000000000000000000000000000000000000000..b233fd62d80d8fc8ee193e8e363d1a00b56b4247 --- /dev/null +++ b/Ressources-Onelab/Levitation/levitation/levitation.geo @@ -0,0 +1,78 @@ +// geometrie du probleme + +Include "data.geo"; + +Point(1) = {0,htot/2,0,lc}; +Point(2) = {0,htot/2-hea,0,lc}; +Point(3) = {rea,htot/2-hea,0,lc}; +Point(4) = {rea,htot/2,0,lc}; +Point(5) = {rea+epbob,htot/2,0,lc}; +Point(6) = {rea+epbob,htot/2-hea,0,lc}; +Point(7) = {0,-htot/2,0,lc}; +Point(8) = {rap,-htot/2,0,lc}; +Point(9) = {rap,-htot/2+hap,0,lc}; +Point(10) = {0,-htot/2+hap,0,lc}; +Point(11) = {0,rdom,0,lcdom}; +Point(12) = {rdom,0,0,lcdom}; +Point(13) = {0,-rdom,0,lcdom}; +Point(14) = {0,rext,0,lcdom}; +Point(15) = {rext,0,0,lcdom}; +Point(16) = {0,-rext,0,lcdom}; + +c = newp; +Point(c) = {0,0,0}; + +Line(1) = {1,2}; +Line(2) = {2,3}; +Line(3) = {3,4}; +Line(4) = {4,1}; +Line(5) = {4,5}; +Line(6) = {5,6}; +Line(7) = {6,3}; +Line(8) = {7,8}; +Line(9) = {8,9}; +Line(10) = {9,10}; +Line(11) = {10,7}; +Line(12) = {11,1}; +Line(13) = {2,10}; +Line(14) = {7,13}; +Circle(15) = {13,c,12}; +Circle(16) = {12,c,11}; +Line(17) = {11,14}; +Circle(18) = {14,c,15}; +Circle(19) = {15,c,16}; +Line(20) = {16,13}; + +Transfinite Line {1,3,6} = nehea+1; +Transfinite Line {2,4} = nerea+1; +Transfinite Line {5,7} = neepbob+1; +Transfinite Line {8,10} = nerap+1; +Transfinite Line {9,11} = nehap+1; +Transfinite Line {13,12,14} = neent+1; + +Line Loop(1) = {1,2,3,4}; +Plane Surface(1) = {1}; +Line Loop(2) = {5,6,7,3}; +Plane Surface(2) = {2}; +Line Loop(3) = {8,9,10,11}; +Plane Surface(3) = {3}; +Line Loop(4) = {12,-4,5,6,7,-2,13,-10,-9,-8,14,15,16}; +Plane Surface(4) = {4}; +Line Loop(5) = {15,16,17,18,19,20}; +Plane Surface(5) = {5}; + +//Transfinite Surface {1,2,3}; + + +Physical Surface(NOY) = {1}; +Physical Surface(BOB) = {2}; +Physical Surface(AIM) = {3}; +Physical Surface(AIR) = {4}; +Physical Surface(INF) = {5}; +Physical Line(BORD) = {18,19,1,13,11,14,12,17,20}; +Physical Line(STM) = {8,9,10}; + +Color White { Surface{4,5}; } +Color Gray { Surface{1}; } +Color Red { Surface{2}; } +Color Blue { Surface{3}; } \ No newline at end of file diff --git a/Ressources-Onelab/Levitation/levitation/levitation.pro b/Ressources-Onelab/Levitation/levitation/levitation.pro new file mode 100644 index 0000000000000000000000000000000000000000..755fc24ce8ef4439df031d670a0cd785796cb242 --- /dev/null +++ b/Ressources-Onelab/Levitation/levitation/levitation.pro @@ -0,0 +1,164 @@ + +// resolution du probleme + +Include "data.geo"; + +Group{ + Domaine = Region[{NOY,BOB,AIM,AIR,INF}]; + Air = Region[{AIR}]; + Fer = Region[{NOY}]; + NonMag = Region[{BOB,AIM,AIR,INF}]; + Bobine = Region[{BOB}]; + Aimant = Region[{AIM}]; + BoiteInf = Region[{INF}]; + Bord = Region[{BORD}]; + STenseur = Region[{STM}]; + Vol_Force = Region[Air, OnOneSideOf STenseur] ; +} + +Include "BH.pro"; + +Function{ + mu0 = 4e-7*Pi; + //mur = 500; + //nu[#{NonMag}] = 1.0/mu0; + //nu[#{Fer}] = 1.0/(mu0*mur); + nu[#{NonMag}] = 1.0/mu0; + nu[#{Fer}] = nu_1[$1]; + dhdb_NL[#{Fer}] = dhdb_1[$1]; + j[#{Bobine}] = Vector[0,0,-jeq]; + br[#{Aimant}] = Vector[0,Br,0]; + TM[] = ( SquDyadicProduct[$1] - SquNorm[$1] * TensorDiag[0.5, 0.5, 0.5] ) * nu[] ; +} + +Jacobian{ + { Name Jvol; + Case { + { Region BoiteInf ; Jacobian VolAxiSquSphShell{rdom, rext}; } + { Region All ; Jacobian VolAxiSqu ; } + } + } +} + +Integration{ + { Name Integ; + Case { + {Type Gauss; + Case { + { GeoElement Line ; NumberOfPoints 2; } + { GeoElement Triangle ; NumberOfPoints 6; } } + } + } + } +} + +Constraint { + { Name Dirichlet ; + Case { + { Region Bord ; Type Assign ; Value 0. ; } + } + } + { Name TenseurAimant ; + Case { + { Region STenseur ; Value 1. ; } + } + } +} + +FunctionSpace { + { Name Hrot ; Type Form1 ; + BasisFunction { + { Name se ; NameOfCoef ae ; Function BF_PerpendicularEdge ; + Support Region[{Domaine}] ; Entity NodesOf[All] ; } + } + Constraint { + { NameOfCoef ae ; EntityType NodesOf ; NameOfConstraint Dirichlet ; } + } + } + { Name TenseurAim ; Type Form0 ; + BasisFunction { + { Name sn ; NameOfCoef un ; Function BF_GroupOfNodes ; + Support Air ; Entity GroupsOfNodesOf[ STenseur ] ; } + } + Constraint { + { NameOfCoef un ; EntityType GroupsOfNodesOf ; NameOfConstraint TenseurAimant ; } + } + } +} + + +Formulation { + { Name Magnetostat ; Type FemEquation ; + Quantity { + { Name a ; Type Local ; NameOfSpace Hrot ; } + { Name un ; Type Local ; NameOfSpace TenseurAim ; } + } + Equation { + + Galerkin { [ nu[{Curl a}]*Dof{Curl a} , {Curl a} ] ; + In Domaine ; Jacobian Jvol ; Integration Integ ; } + + Galerkin { JacNL [ dhdb_NL[{Curl a}] * Dof{Curl a} , {Curl a} ] ; In Fer ; Jacobian Jvol ; Integration Integ ; } + + Galerkin { [ -j[] , {a} ] ; + In Bobine ; Jacobian Jvol ; Integration Integ ; } + + Galerkin{ [ -nu[]*br[] , {Curl a} ] ; + In Aimant ; Jacobian Jvol ; Integration Integ ;} + + Galerkin { [ 0 * Dof{un} , {un} ] ; + In Air ; Jacobian Jvol ; Integration Integ ; } + } + } +} + + +Resolution { + { Name analyse ; + System { + { Name Sys ; NameOfFormulation Magnetostat ; } + } + Operation { + InitSolution[Sys] ; + GenerateJac[Sys] ; + SolveNL[Sys] ; + SaveSolution[Sys] ; + } + } +} + + PostProcessing { + { Name PostProc ; NameOfFormulation Magnetostat ; + Quantity { + { Name j ; Value { Local { [ j[] ] ; In Bobine ; Jacobian Jvol ; } } } + { Name a ; Value { Local { [ {a} ] ; In Domaine ; Jacobian Jvol ; } } } + { Name az ; Value { Local { [ Norm[{a}] ] ; In Domaine ; Jacobian Jvol ; } } } + { Name b ; Value { Local { [ {Curl a} ] ; In Domaine ; Jacobian Jvol ; } } } + { Name normb ; Value { Local { [ Norm[{Curl a}] ] ; In Domaine ; Jacobian Jvol ; } } } + { Name h ; Value { + Local { [ nu[{Curl a}]*{Curl a} ] ; In Domaine ; Jacobian Jvol ; } + Local { [ -nu[]*br[] ] ; In Aimant ; Jacobian Jvol ; } + } + } + { Name f ; Value { Integral { [ 2*Pi*CompY[- TM[{Curl a}] * {d un}] ] ; + In Vol_Force ; Jacobian Jvol ; Integration Integ ; } } } + } + } + } + + PostOperation PostOp UsingPost PostProc { + Print[ j, OnElementsOf Bobine, File "j.pos"] ; + Print[ a, OnElementsOf Domaine, File "a.pos"] ; + Print[ b, OnElementsOf Domaine, File "b.pos"] ; + Print[ normb, OnElementsOf Domaine, File "normb.pos"] ; + Print[ h, OnElementsOf Domaine, File "h.pos"] ; + Print[ az, OnElementsOf Domaine, File "az.pos"] ; + Echo[ Str["v0 = PostProcessing.NbViews-1;", + "View[v0].IntervalsType = 1;", + "View[v0].NbIso = 40;", + "View[v0].LightLines = 0;"], + File "tmp.geo", LastTimeStepOnly ]; + Print[ f[Air], OnGlobal, Format Table, File > "F.dat" , + SendToServer "Modèle/Sorties/ Force [N]", Color "AliceBlue" ]; + } +