From 24b7d8282a45649ea26b89146a37810085c6d96e Mon Sep 17 00:00:00 2001 From: Maxime Graulich <maxime.graulich@gmail.com> Date: Wed, 3 Jul 2013 11:16:21 +0000 Subject: [PATCH] Files used in native code are now in a zip file --- contrib/mobile/Android/res/raw/bh_pro | 59 -- .../Android/res/raw/machine_magstadyn_a_pro | 938 ------------------ .../mobile/Android/res/raw/magnet_data_pro | 16 - contrib/mobile/Android/res/raw/magnet_geo | 93 -- contrib/mobile/Android/res/raw/magnet_pro | 69 -- .../mobile/Android/res/raw/magnetostatics_pro | 209 ---- contrib/mobile/Android/res/raw/models.zip | Bin 0 -> 23732 bytes .../Android/res/raw/pmsm_8p_circuit_pro | 123 --- contrib/mobile/Android/res/raw/pmsm_data_geo | 104 -- contrib/mobile/Android/res/raw/pmsm_geo | 95 -- contrib/mobile/Android/res/raw/pmsm_geo_pro | 211 ---- contrib/mobile/Android/res/raw/pmsm_pro | 211 ---- contrib/mobile/Android/res/raw/pmsm_rotor_geo | 163 --- .../mobile/Android/res/raw/pmsm_stator_geo | 215 ---- .../src/org/geuz/onelab/ModelList.java | 2 +- .../src/org/geuz/onelab/SplashScreen.java | 46 +- 16 files changed, 17 insertions(+), 2537 deletions(-) delete mode 100644 contrib/mobile/Android/res/raw/bh_pro delete mode 100644 contrib/mobile/Android/res/raw/machine_magstadyn_a_pro delete mode 100644 contrib/mobile/Android/res/raw/magnet_data_pro delete mode 100644 contrib/mobile/Android/res/raw/magnet_geo delete mode 100644 contrib/mobile/Android/res/raw/magnet_pro delete mode 100644 contrib/mobile/Android/res/raw/magnetostatics_pro create mode 100644 contrib/mobile/Android/res/raw/models.zip delete mode 100644 contrib/mobile/Android/res/raw/pmsm_8p_circuit_pro delete mode 100644 contrib/mobile/Android/res/raw/pmsm_data_geo delete mode 100644 contrib/mobile/Android/res/raw/pmsm_geo delete mode 100644 contrib/mobile/Android/res/raw/pmsm_geo_pro delete mode 100644 contrib/mobile/Android/res/raw/pmsm_pro delete mode 100644 contrib/mobile/Android/res/raw/pmsm_rotor_geo delete mode 100644 contrib/mobile/Android/res/raw/pmsm_stator_geo diff --git a/contrib/mobile/Android/res/raw/bh_pro b/contrib/mobile/Android/res/raw/bh_pro deleted file mode 100644 index 1458d87c83..0000000000 --- a/contrib/mobile/Android/res/raw/bh_pro +++ /dev/null @@ -1,59 +0,0 @@ -Function{ - // nu = 100. + 10. * exp ( 1.8 * b * b ) - // analytical - nu_1a[] = 100. + 10. * Exp[1.8*SquNorm[$1]] ; - dnudb2_1a[] = 18. * Exp[1.8*SquNorm[$1]] ; - h_1a[] = nu_1a[$1]*$1 ; - dhdb_1a[] = TensorDiag[1,1,1] * nu_1a[$1#1] + 2*dnudb2_1a[#1] * SquDyadicProduct[#1] ; - dhdb_1a_NL[] = 2*dnudb2_1a[$1] * SquDyadicProduct[$1] ; - - // interpolated - Mat1_h = { - 0.0000e+00, 5.5023e+00, 1.1018e+01, 1.6562e+01, 2.2149e+01, 2.7798e+01, 3.3528e+01, - 3.9363e+01, 4.5335e+01, 5.1479e+01, 5.7842e+01, 6.4481e+01, 7.1470e+01, 7.8906e+01, - 8.6910e+01, 9.5644e+01, 1.0532e+02, 1.1620e+02, 1.2868e+02, 1.4322e+02, 1.6050e+02, - 1.8139e+02, 2.0711e+02, 2.3932e+02, 2.8028e+02, 3.3314e+02, 4.0231e+02, 4.9395e+02, - 6.1678e+02, 7.8320e+02, 1.0110e+03, 1.3257e+03, 1.7645e+03, 2.3819e+03, 3.2578e+03, - 4.5110e+03, 6.3187e+03, 8.9478e+03, 1.2802e+04, 1.8500e+04, 2.6989e+04, 3.9739e+04, - 5.9047e+04, 8.8520e+04, 1.3388e+05, 2.0425e+05, 3.1434e+05, 4.8796e+05, 7.6403e+05 - } ; - Mat1_b = { - 0.0000e+00, 5.0000e-02, 1.0000e-01, 1.5000e-01, 2.0000e-01, 2.5000e-01, 3.0000e-01, - 3.5000e-01, 4.0000e-01, 4.5000e-01, 5.0000e-01, 5.5000e-01, 6.0000e-01, 6.5000e-01, - 7.0000e-01, 7.5000e-01, 8.0000e-01, 8.5000e-01, 9.0000e-01, 9.5000e-01, 1.0000e+00, - 1.0500e+00, 1.1000e+00, 1.1500e+00, 1.2000e+00, 1.2500e+00, 1.3000e+00, 1.3500e+00, - 1.4000e+00, 1.4500e+00, 1.5000e+00, 1.5500e+00, 1.6000e+00, 1.6500e+00, 1.7000e+00, - 1.7500e+00, 1.8000e+00, 1.8500e+00, 1.9000e+00, 1.9500e+00, 2.0000e+00, 2.0500e+00, - 2.1000e+00, 2.1500e+00, 2.2000e+00, 2.2500e+00, 2.3000e+00, 2.3500e+00, 2.4000e+00 - } ; - Mat1_b2 = { - 0.0000e+00, 2.5000e-03, 1.0000e-02, 2.2500e-02, 4.0000e-02, 6.2500e-02, 9.0000e-02, - 1.2250e-01, 1.6000e-01, 2.0250e-01, 2.5000e-01, 3.0250e-01, 3.6000e-01, 4.2250e-01, - 4.9000e-01, 5.6250e-01, 6.4000e-01, 7.2250e-01, 8.1000e-01, 9.0250e-01, 1.0000e+00, - 1.1025e+00, 1.2100e+00, 1.3225e+00, 1.4400e+00, 1.5625e+00, 1.6900e+00, 1.8225e+00, - 1.9600e+00, 2.1025e+00, 2.2500e+00, 2.4025e+00, 2.5600e+00, 2.7225e+00, 2.8900e+00, - 3.0625e+00, 3.2400e+00, 3.4225e+00, 3.6100e+00, 3.8025e+00, 4.0000e+00, 4.2025e+00, - 4.4100e+00, 4.6225e+00, 4.8400e+00, 5.0625e+00, 5.2900e+00, 5.5225e+00, 5.7600e+00 - } ; - Mat1_nu = { - 1.1005e+02, 1.1005e+02, 1.1018e+02, 1.1041e+02, 1.1075e+02, 1.1119e+02, 1.1176e+02, - 1.1247e+02, 1.1334e+02, 1.1440e+02, 1.1568e+02, 1.1724e+02, 1.1912e+02, 1.2139e+02, - 1.2416e+02, 1.2752e+02, 1.3165e+02, 1.3671e+02, 1.4297e+02, 1.5076e+02, 1.6050e+02, - 1.7275e+02, 1.8829e+02, 2.0810e+02, 2.3356e+02, 2.6651e+02, 3.0947e+02, 3.6589e+02, - 4.4056e+02, 5.4014e+02, 6.7397e+02, 8.5528e+02, 1.1028e+03, 1.4436e+03, 1.9164e+03, - 2.5777e+03, 3.5104e+03, 4.8366e+03, 6.7381e+03, 9.4870e+03, 1.3494e+04, 1.9385e+04, - 2.8118e+04, 4.1172e+04, 6.0854e+04, 9.0779e+04, 1.3667e+05, 2.0764e+05, 3.1835e+05 - } ; - - Mat1_nu_b2 = ListAlt[Mat1_b2, Mat1_nu] ; - nu_1[] = InterpolationLinear[$1]{List[Mat1_nu_b2]} ; - dnudb2_1[] = dInterpolationLinear[$1]{List[Mat1_nu_b2]} ; - h_1[] = nu_1[(SquNorm[$1])] * $1 ; - dhdb_1[] = TensorDiag[1,1,1] * nu_1[SquNorm[$1]#1] + 2*dnudb2_1[#1] * SquDyadicProduct[$1] ; -} - - - - - - diff --git a/contrib/mobile/Android/res/raw/machine_magstadyn_a_pro b/contrib/mobile/Android/res/raw/machine_magstadyn_a_pro deleted file mode 100644 index f58a22b84a..0000000000 --- a/contrib/mobile/Android/res/raw/machine_magstadyn_a_pro +++ /dev/null @@ -1,938 +0,0 @@ -Group { - DefineGroup[ DomainM, DomainB, DomainS ]; - DefineGroup[ DomainL, DomainNL, Dummy ]; - DefineGroup[ Rotor_Inds, Rotor_IndsP, Rotor_IndsN, Rotor_Magnets, Rotor_Bars ]; - DefineGroup[ Surf_bn0, Rotor_Bnd_MBaux] ; - DefineGroup[ Resistance_Cir, Inductance_Cir, Capacitance_Cir, DomainZt_Cir, DomainSource_Cir ]; -} - -Function{ - - DefineConstant[ Flag_Cir, Flag_NL, Flag_ParkTransformation ]; - DefineConstant[ Term_vxb ]; - DefineConstant[ AxialLength = {1, Visible 0}, - FillFactor_Winding = {1, Visible 0}, - Factor_R_3DEffects = {1, Visible 0}, - SymmetryFactor = {1, Visible 0} ]; - - Flag_Symmetry = (SymmetryFactor==1) ? 0 : 1 ; - - DefineConstant[ Nb_max_iter = {20, Visible 0}, - relaxation_factor = {1, Visible 0}, - stop_criterion = {1e-5, Visible 0}, - reltol = {1e-7, Visible 0}, - abstol = {1e-5, Visible 0} ]; - - DefineConstant[ II, VV, pA, pB, pC, Ie, ID, IQ, I0 ]; - DefineFunction[ br, js, Resistance, Inductance, Capacitance ]; - DefineFunction[ Theta_Park, Theta_Park_deg, RotorPosition, RotorPosition_deg ] ; - - - DefineConstant[ Flag_SrcType_Rotor = {0, Visible 0} ]; - - DefineConstant[ Clean_Results = { 1, Choices {0,1}, - Label "Remove previous result files", - Path "Input/1", Visible 1 } ] ; - - DefineConstant[ Flag_SaveAllSteps = {0, Label "Save all time steps", - Path "Input/0", Choices {0,1}} ]; - - DefineConstant[ my_output={"Output/40T_rotor", Visible 0}]; - -} - -Include "bh.pro"; // nonlinear BH caracteristic of magnetic material - -Group { - - Inds = Region[ {Stator_Inds, Rotor_Inds} ] ; - - DomainB = Region[ {Inds} ] ; - DomainM = Region[ {Rotor_Magnets} ] ; - - Stator = Region[{ StatorC, StatorCC }] ; - Rotor = Region[{ RotorC, RotorCC }] ; - - Rotor_Moving = Region[{ Rotor, Rotor_Air, Rotor_Airgap, Rotor_Inds, Rotor_Bnd_MBaux} ] ; // Use in ChangeOfCoordinates - - MB = MovingBand2D[ MovingBand_PhysicalNb, Stator_Bnd_MB, Rotor_Bnd_MB, SymmetryFactor] ; - Air = Region[{ Rotor_Air, Rotor_Airgap, Stator_Air, Stator_Airgap, MB } ] ; - Inds = Region[{ Rotor_Inds, Stator_Inds } ] ; - - DomainV = Region[{}]; // Speed considered either with term v/\b - If(Term_vxb) // or not dynamics in time domain + mechanics - DomainV = Region[{ RotorC }]; - EndIf - - DomainCC = Region[{ Air, Inds, StatorCC, RotorCC }]; - DomainC = Region[{ StatorC, RotorC }]; - Domain = Region[{ DomainCC, DomainC }] ; - - If(Flag_NL) - DomainNL = Region[ {Stator_Fe, Rotor_Fe } ]; - DomainL = Region[ {Domain,-DomainNL} ]; - EndIf - - DomainKin = #1234 ; // Dummy region number for mechanical equation - DomainDummy = #12345 ; // Dummy region number for mechanical equation -} - -Function { - mu0 = 4.e-7 * Pi ; - - sigma_al = 3.72e7 ; // conductivity of aluminum [S/m] - sigma_cu = 5.9e7 ; // conductivity of copper [S/m] - - nu [#{Air, Inds, Stator_Al, Rotor_Al, Stator_Cu, Rotor_Cu, Rotor_Magnets, Rotor_Bars}] = 1. / mu0 ; - - If(!Flag_NL) - nu [#{Stator_Fe, Rotor_Fe }] = 1 / (mur_fe * mu0) ; - EndIf - If(Flag_NL) - nu [#{Stator_Fe, Rotor_Fe }] = nu_1a[$1] ; - EndIf - dhdb_NL [ DomainNL ] = dhdb_1a_NL[$1]; - - sigma[#{Rotor_Fe}] = sigma_fe ; - sigma[#{Rotor_Al, Stator_Al}] = sigma_al ; - sigma[#{Rotor_Cu, Stator_Cu}] = sigma_cu ; - sigma[#{Inds}] = sigma_cu ; - - rho[] = 1/sigma[] ; - - Rb[] = Factor_R_3DEffects*AxialLength*FillFactor_Winding*NbWires[]^2/SurfCoil[]/sigma[] ; - Resistance[#{Stator_Inds, Rotor_Inds}] = Rb[] ; - - T = 1/Freq ; // Fundamental period in s - - Idir[#{Stator_IndsP, Rotor_IndsP}] = 1 ; - Idir[#{Stator_IndsN, Rotor_IndsN}] = -1 ; - - // Functions for Park transformation - Idq0[] = Vector[ ID, IQ, I0 ] ; - Pinv[] = Tensor[ Sin[Theta_Park[]], Cos[Theta_Park[]], 1, - Sin[Theta_Park[]-2*Pi/3], Cos[Theta_Park[]-2*Pi/3], 1, - Sin[Theta_Park[]+2*Pi/3], Cos[Theta_Park[]+2*Pi/3], 1 ]; - - P[] = 2/3 * Tensor[ Sin[Theta_Park[]], Sin[Theta_Park[]-2*Pi/3], Sin[Theta_Park[]+2*Pi/3], - Cos[Theta_Park[]], Cos[Theta_Park[]-2*Pi/3], Cos[Theta_Park[]+2*Pi/3], - 1/2, 1/2, 1/2 ] ; - - Iabc[] = Pinv[] * Idq0[] ; - Flux_dq0[] = P[] * Vector[#11, #22, #33] ; - - If(Flag_ParkTransformation) - II = 1 ; - IA[] = CompX[ Iabc[] ] ; - IB[] = CompY[ Iabc[] ] ; - IC[] = CompZ[ Iabc[] ] ; - EndIf - If(!Flag_ParkTransformation) - IA[] = F_Sin_wt_p[]{2*Pi*Freq, pA} ; - IB[] = F_Sin_wt_p[]{2*Pi*Freq, pB} ; - IC[] = F_Sin_wt_p[]{2*Pi*Freq, pC} ; - - js[PhaseA] = II * NbWires[]/SurfCoil[] * IA[] * Idir[] * Vector[0, 0, 1] ; - js[PhaseB] = II * NbWires[]/SurfCoil[] * IB[] * Idir[] * Vector[0, 0, 1] ; - js[PhaseC] = II * NbWires[]/SurfCoil[] * IC[] * Idir[] * Vector[0, 0, 1] ; - EndIf - - Velocity[] = wr*XYZ[]/\Vector[0,0,1] ; - - // Maxwell stress tensor - T_max[] = ( SquDyadicProduct[$1] - SquNorm[$1] * TensorDiag[0.5, 0.5, 0.5] ) / mu0 ; - T_max_cplx[] = ( TensorV[CompX[$1]*Conj[$1],CompY[$1]*Conj[$1],CompZ[$1]*Conj[$1]] - $1*Conj[$1] * TensorDiag[0.5, 0.5, 0.5] ) / mu0 ; // Check if valid - - - AngularPosition[] = (Atan2[$Y,$X]#7 >= 0.)? #7 : #7+2*Pi ; - - RotatePZ[] = Rotate[ Vector[$X,$Y,$Z], 0, 0, $1 ] ;//Watch out: Do not use XYZ[]! - - // Kinematics - Inertia = 8.3e-3 ; //87 - Friction[] = 0 ; - - Fmag[] = #55 ; // Computed in postprocessing -} - -//------------------------------------------------------------------------------------- - -Jacobian { - { Name Vol; Case { { Region All ; Jacobian Vol; } } } -} - -Integration { - { Name I1 ; Case { - { Type Gauss ; - Case { - { GeoElement Triangle ; NumberOfPoints 6 ; } - { GeoElement Quadrangle ; NumberOfPoints 4 ; } - { GeoElement Line ; NumberOfPoints 13 ; } - } - } - } - } -} - -//------------------------------------------------------------------------------------- - -Constraint { - - { Name MVP_2D ; - Case { - { Region Surf_Inf ; Type Assign; Value 0. ; } - { Region Surf_bn0 ; Type Assign; Value 0. ; } - - If(Flag_Symmetry) - { Region Surf_cutA1; SubRegion Region[{Surf_Inf,Surf_bn0}]; Type Link; - RegionRef Surf_cutA0; SubRegionRef Region[{Surf_Inf,Surf_bn0}]; - Coefficient (NbrPoles%2)?-1:1 ; Function RotatePZ[-NbrPoles*2*Pi/NbrPolesTot]; } - { Region Surf_cutA1; Type Link; RegionRef Surf_cutA0; - Coefficient (NbrPoles%2)?-1:1 ; Function RotatePZ[-NbrPoles*2*Pi/NbrPolesTot]; } - - //For the moving band - For k In {1:SymmetryFactor-1} - { Region Rotor_Bnd_MB~{k+1} ; SubRegion Rotor_Bnd_MB~{(k!=SymmetryFactor-1)?k+2:1}; Type Link; - RegionRef Rotor_Bnd_MB_1; SubRegionRef Rotor_Bnd_MB_2; - Coefficient ((NbrPoles%2)?-1:1)^(k); Function RotatePZ[-k*NbrPoles*2*Pi/NbrPolesTot]; } - EndFor - - EndIf - } - } - - { Name Current_2D ; - Case { - If(Flag_SrcType_Stator==1) - { Region PhaseA ; Value II*Idir[] ; TimeFunction IA[]; } - { Region PhaseB ; Value II*Idir[] ; TimeFunction IB[]; } - { Region PhaseC ; Value II*Idir[] ; TimeFunction IC[]; } - EndIf - If(Flag_SrcType_Rotor==1) - { Region Rotor_Inds ; Value Ie*Idir[] ; } - EndIf - } - } - - { Name Voltage_2D ; - Case { - { Region RotorC ; Value 0. ; } // Not needed if Global equation not in formulation - { Region StatorC ; Value 0. ; } // Not needed if Global equation not in formulation - } - } - - { Name Current_Cir ; - Case { - If(Flag_Cir && Flag_SrcType_Stator==1) - { Region Input1 ; Value II ; TimeFunction IA[]; } - { Region Input2 ; Value II ; TimeFunction IB[]; } - { Region Input3 ; Value II ; TimeFunction IC[]; } - EndIf - } - } - - { Name Voltage_Cir ; // Example induction machine - Case { - If(Flag_Cir && Flag_SrcType_Stator==2 && !Flag_NL) - { Region Input1 ; Value VV ; TimeFunction IA[]; } - { Region Input2 ; Value VV ; TimeFunction IB[]; } - { Region Input3 ; Value VV ; TimeFunction IC[]; } - EndIf - If(Flag_Cir && Flag_SrcType_Stator==2 && Flag_NL) - { Region Input1 ; Value VV ; TimeFunction IA[]*Frelax[]; } - { Region Input2 ; Value VV ; TimeFunction IB[]*Frelax[]; } - { Region Input3 ; Value VV ; TimeFunction IC[]*Frelax[]; } - EndIf - } - } - - - //Kinetics - { Name CurrentPosition ; - Case { - { Region DomainKin ; Type Init ; Value 0.#66 ; } - } - } - - { Name CurrentVelocity ; - Case { - { Region DomainKin ; Type Init ; Value wr ; } // wr in [0,1200] rad/s - } - } - -} - -//----------------------------------------------------------------------------------------------- - -FunctionSpace { - - { Name Hcurl_a_2D ; Type Form1P ; - BasisFunction { - { Name se1 ; NameOfCoef ae1 ; Function BF_PerpendicularEdge ; - Support Region[{ Domain, Rotor_Bnd_MBaux }] ; Entity NodesOf [ All ] ; } - } - Constraint { - { NameOfCoef ae1 ; EntityType NodesOf ; NameOfConstraint MVP_2D ; } - } - } - - // Gradient of Electric scalar potential (2D) - { Name Hregion_u_Mag_2D ; Type Form1P ; - BasisFunction { - { Name sr ; NameOfCoef ur ; Function BF_RegionZ ; - Support DomainC ; Entity DomainC ; } - } - GlobalQuantity { - { Name U ; Type AliasOf ; NameOfCoef ur ; } - { Name I ; Type AssociatedWith ; NameOfCoef ur ; } - } - Constraint { - { NameOfCoef U ; EntityType GroupsOfNodesOf ; NameOfConstraint Voltage_2D ; } - { NameOfCoef I ; EntityType GroupsOfNodesOf ; NameOfConstraint Current_2D ; } - } - } - - { Name Hregion_i_Mag_2D ; Type Vector ; - BasisFunction { - { Name sr ; NameOfCoef ir ; Function BF_RegionZ ; - Support DomainB ; Entity DomainB ; } - } - GlobalQuantity { - { Name Ib ; Type AliasOf ; NameOfCoef ir ; } - { Name Ub ; Type AssociatedWith ; NameOfCoef ir ; } - } - Constraint { - { NameOfCoef Ub ; EntityType Region ; NameOfConstraint Voltage_2D ; } - { NameOfCoef Ib ; EntityType Region ; NameOfConstraint Current_2D ; } - } - } - - { Name Hregion_Z ; Type Scalar ; // Circuit equations - BasisFunction { - { Name sr ; NameOfCoef ir ; Function BF_Region ; - Support DomainZt_Cir ; Entity DomainZt_Cir ; } - } - GlobalQuantity { - { Name Iz ; Type AliasOf ; NameOfCoef ir ; } - { Name Uz ; Type AssociatedWith ; NameOfCoef ir ; } - } - Constraint { - { NameOfCoef Uz ; EntityType Region ; NameOfConstraint Voltage_Cir ; } - { NameOfCoef Iz ; EntityType Region ; NameOfConstraint Current_Cir ; } - } - } - - // For use in Mechanical equation - { Name Position ; Type Scalar ; - BasisFunction { - { Name sr ; NameOfCoef ir ; Function BF_Region ; - Support DomainKin ; Entity DomainKin ; } - } - GlobalQuantity { - { Name P ; Type AliasOf ; NameOfCoef ir ; } - } - Constraint { - { NameOfCoef P ; EntityType Region ; NameOfConstraint CurrentPosition ; } - } - } - - - { Name Velocity ; Type Scalar ; - BasisFunction { - { Name sr ; NameOfCoef ir ; Function BF_Region ; - Support DomainKin ; Entity DomainKin ; } } - GlobalQuantity { - { Name V ; Type AliasOf ; NameOfCoef ir ; } - } - Constraint { - { NameOfCoef V ; EntityType Region ; NameOfConstraint CurrentVelocity ; } - } - } - -} - -//----------------------------------------------------------------------------------------------- - -Formulation { - - { Name MagSta_a_2D ; Type FemEquation ; - Quantity { - { Name a ; Type Local ; NameOfSpace Hcurl_a_2D ; } - - { Name ir ; Type Local ; NameOfSpace Hregion_i_Mag_2D ; } - { Name Ub ; Type Global ; NameOfSpace Hregion_i_Mag_2D [Ub] ; } - { Name Ib ; Type Global ; NameOfSpace Hregion_i_Mag_2D [Ib] ; } - - { Name Uz ; Type Global ; NameOfSpace Hregion_Z [Uz] ; } - { Name Iz ; Type Global ; NameOfSpace Hregion_Z [Iz] ; } - } - - Equation { - Galerkin { [ nu[{d a}] * Dof{d a} , {d a} ] ; - In Domain ; Jacobian Vol ; Integration I1 ; } - Galerkin { JacNL [ dhdb_NL[{d a}] * Dof{d a} , {d a} ] ; - In DomainNL ; Jacobian Vol ; Integration I1 ; } - - Galerkin { [ 0*Dof{d a} , {d a} ] ; // DO NOT REMOVE!!! - Keeping track of Dofs in auxiliary line of MB if Symmetry=1 - In Rotor_Bnd_MBaux; Jacobian Vol; Integration I1; } - - Galerkin { [ -nu[] * br[] , {d a} ] ; - In DomainM ; Jacobian Vol ; Integration I1 ; } - - Galerkin { [ -js[] , {a} ] ; - In DomainS ; Jacobian Vol ; Integration I1 ; } - - Galerkin { [ -NbWires[]/SurfCoil[] * Dof{ir} , {a} ] ; - In DomainB ; Jacobian Vol ; Integration I1 ; } - Galerkin { DtDof [ AxialLength * NbWires[]/SurfCoil[] * Dof{a} , {ir} ] ; - In DomainB ; Jacobian Vol ; Integration I1 ; } - GlobalTerm { [ Dof{Ub}/SymmetryFactor, {Ib} ] ; In DomainB ; } - Galerkin { [ Rb[]/SurfCoil[]* Dof{ir} , {ir} ] ; - In DomainB ; Jacobian Vol ; Integration I1 ; } - - // GlobalTerm { [ Resistance[] * Dof{Ib} , {Ib} ] ; In DomainB ; } - // The above term can replace: - // Galerkin{ [ NbWires[]/SurfCoil[] / sigma[] * NbWires[]/SurfCoil[] * Dof{ir}, {ir} ] - // if we have an estimation of the resistance of DomainB, via e.g. measurements - - If(Flag_Cir) - GlobalTerm { NeverDt[ Dof{Uz} , {Iz} ] ; In Resistance_Cir ; } - GlobalTerm { NeverDt[ Resistance[] * Dof{Iz} , {Iz} ] ; In Resistance_Cir ; } - - GlobalTerm { [ 0. * Dof{Iz} , {Iz} ] ; In DomainSource_Cir ; } - GlobalTerm { [ 0. * Dof{Uz} , {Iz} ] ; In DomainZt_Cir ; } - - GlobalEquation { - Type Network ; NameOfConstraint ElectricalCircuit ; - { Node {Iz}; Loop {Uz}; Equation {Uz}; In DomainZt_Cir ; } - { Node {Ib}; Loop {Ub}; Equation {Ub}; In DomainB ; } - } - EndIf - } - } - - { Name MagDyn_a_2D ; Type FemEquation ; - Quantity { - { Name a ; Type Local ; NameOfSpace Hcurl_a_2D ; } - { Name ur ; Type Local ; NameOfSpace Hregion_u_Mag_2D ; } - { Name I ; Type Global ; NameOfSpace Hregion_u_Mag_2D [I] ; } - { Name U ; Type Global ; NameOfSpace Hregion_u_Mag_2D [U] ; } - - { Name ir ; Type Local ; NameOfSpace Hregion_i_Mag_2D ; } - { Name Ub ; Type Global ; NameOfSpace Hregion_i_Mag_2D [Ub] ; } - { Name Ib ; Type Global ; NameOfSpace Hregion_i_Mag_2D [Ib] ; } - - { Name Uz ; Type Global ; NameOfSpace Hregion_Z [Uz] ; } - { Name Iz ; Type Global ; NameOfSpace Hregion_Z [Iz] ; } - } - Equation { - Galerkin { [ nu[{d a}] * Dof{d a} , {d a} ] ; - In Domain ; Jacobian Vol ; Integration I1 ; } - Galerkin { JacNL [ dhdb_NL[{d a}] * Dof{d a} , {d a} ] ; - In DomainNL ; Jacobian Vol ; Integration I1 ; } - - Galerkin { [ 0*Dof{d a} , {d a} ] ; // DO NOT REMOVE!!! - Keeping track of Dofs in auxiliary line of MB if Symmetry=1 - In Rotor_Bnd_MBaux; Jacobian Vol; Integration I1; } - - Galerkin { [ -nu[] * br[] , {d a} ] ; - In DomainM ; Jacobian Vol ; Integration I1 ; } - - Galerkin { DtDof[ sigma[] * Dof{a} , {a} ] ; - In DomainC ; Jacobian Vol ; Integration I1 ; } - Galerkin { [ sigma[] * Dof{ur}, {a} ] ; - In DomainC ; Jacobian Vol ; Integration I1 ; } - - Galerkin { [ -sigma[] * (Velocity[] *^ Dof{d a}) , {a} ] ; - In DomainV ; Jacobian Vol ; Integration I1 ; } - - Galerkin { [ -js[] , {a} ] ; - In DomainS ; Jacobian Vol ; Integration I1 ; } - - Galerkin { DtDof[ sigma[] * Dof{a} , {ur} ] ; - In DomainC ; Jacobian Vol ; Integration I1 ; } - Galerkin { [ sigma[] * Dof{ur} , {ur} ] ; - In DomainC ; Jacobian Vol ; Integration I1 ; } - GlobalTerm { [ Dof{I} , {U} ] ; In DomainC ; } - - Galerkin { [ -NbWires[]/SurfCoil[] * Dof{ir} , {a} ] ; - In DomainB ; Jacobian Vol ; Integration I1 ; } - Galerkin { DtDof [ AxialLength * NbWires[]/SurfCoil[] * Dof{a} , {ir} ] ; - In DomainB ; Jacobian Vol ; Integration I1 ; } - GlobalTerm { [ Dof{Ub}/SymmetryFactor , {Ib} ] ; In DomainB ; } - Galerkin { [ Rb[]/SurfCoil[]* Dof{ir} , {ir} ] ; - In DomainB ; Jacobian Vol ; Integration I1 ; } // Resistance term - - // GlobalTerm { [ Resistance[] * Dof{Ib} , {Ib} ] ; In DomainB ; } - // The above term can replace the resistance term: - // if we have an estimation of the resistance of DomainB, via e.g. measurements - // which is better to account for the end windings... - - If(Flag_Cir) - GlobalTerm { NeverDt[ Dof{Uz} , {Iz} ] ; In Resistance_Cir ; } - GlobalTerm { NeverDt[ Resistance[] * Dof{Iz} , {Iz} ] ; In Resistance_Cir ; } - - GlobalTerm { [ Dof{Uz} , {Iz} ] ; In Inductance_Cir ; } - GlobalTerm { DtDof [ Inductance[] * Dof{Iz} , {Iz} ] ; In Inductance_Cir ; } - - GlobalTerm { NeverDt[ Dof{Iz} , {Iz} ] ; In Capacitance_Cir ; } - GlobalTerm { DtDof [ Capacitance[] * Dof{Uz} , {Iz} ] ; In Capacitance_Cir ; } - - GlobalTerm { [ 0. * Dof{Iz} , {Iz} ] ; In DomainZt_Cir ; } - GlobalTerm { [ 0. * Dof{Uz} , {Iz} ] ; In DomainZt_Cir ; } - - GlobalEquation { - Type Network ; NameOfConstraint ElectricalCircuit ; - { Node {I}; Loop {U}; Equation {I}; In DomainC ; } - { Node {Ib}; Loop {Ub}; Equation {Ub}; In DomainB ; } - { Node {Iz}; Loop {Uz}; Equation {Uz}; In DomainZt_Cir ; } - } - EndIf - } - } - - - //-------------------------------------------------------------------------- - // Mechanics - //-------------------------------------------------------------------------- - { Name Mechanical ; Type FemEquation ; - Quantity { - { Name V ; Type Global ; NameOfSpace Velocity [V] ; } // velocity - { Name P ; Type Global ; NameOfSpace Position [P] ; } // position - } - Equation { - GlobalTerm { DtDof [ Inertia * Dof{V} , {V} ] ; In DomainKin ; } - GlobalTerm { [ Friction[] * Dof{V} , {V} ] ; In DomainKin ; } - GlobalTerm { [ -Fmag[] , {V} ] ; In DomainKin ; } - - GlobalTerm { DtDof [ Dof{P} , {P} ] ; In DomainKin ; } - GlobalTerm { [-Dof{V} , {P} ] ; In DomainKin ; } - } - } - -} - -//----------------------------------------------------------------------------------------------- - -Resolution { - - { Name TimeDomain ; - System { - { Name A ; NameOfFormulation MagDyn_a_2D ; } - } - Operation { - CreateDir["res/"]; - If[ Clean_Results==1 ]{ - DeleteFile["res/temp.dat"]; - DeleteFile["res/Tr.dat"]; DeleteFile["res/Ts.dat"]; DeleteFile["res/Tmb.dat"]; - DeleteFile["res/Ua.dat"]; DeleteFile["res/Ub.dat"]; DeleteFile["res/Uc.dat"]; - DeleteFile["res/Ia.dat"]; DeleteFile["res/Ib.dat"]; DeleteFile["res/Ic.dat"]; - DeleteFile["res/Flux_a.dat"]; DeleteFile["res/Flux_b.dat"]; DeleteFile["res/Flux_c.dat"]; - DeleteFile["res/Flux_d.dat"]; DeleteFile["res/Flux_q.dat"]; DeleteFile["res/Flux_0.dat"]; - } - InitMovingBand2D[MB] ; - MeshMovingBand2D[MB] ; - InitSolution[A] ; - If[Flag_ParkTransformation && Flag_SrcType_Stator==1]{ PostOperation[ThetaPark_IABC] ; } - If[!Flag_NL]{ - Generate[A] ; Solve[A] ; - } - Else{ - //IterativeLoop[Nb_max_iter, stop_criterion, relaxation_factor] - // { GenerateJac[A] ; SolveJac[A] ; } - IterativeLoopN[ Nb_max_iter, relaxation_factor, - System { {A, reltol, abstol, Solution MeanL2Norm}} ] - { GenerateJac[A] ; SolveJac[A] ; } - } - SaveSolution[A] ; - PostOperation[Get_LocalFields] ; - PostOperation[Get_GlobalQuantities] ; - } - } - - { Name TimeDomain_Loop ; - System { - { Name A ; NameOfFormulation MagDyn_a_2D ; } - } - Operation { - CreateDir["res/"]; - If[ Clean_Results==1 ]{ - DeleteFile["res/temp.dat"]; - DeleteFile["res/Tr.dat"]; DeleteFile["res/Ts.dat"]; DeleteFile["res/Tmb.dat"]; - DeleteFile["res/Ua.dat"]; DeleteFile["res/Ub.dat"]; DeleteFile["res/Uc.dat"]; - DeleteFile["res/Ia.dat"]; DeleteFile["res/Ib.dat"]; DeleteFile["res/Ic.dat"]; - DeleteFile["res/Flux_a.dat"]; DeleteFile["res/Flux_b.dat"]; DeleteFile["res/Flux_c.dat"]; - DeleteFile["res/Flux_d.dat"]; DeleteFile["res/Flux_q.dat"]; DeleteFile["res/Flux_0.dat"]; - } - InitMovingBand2D[MB] ; - MeshMovingBand2D[MB] ; - InitSolution[A] ; - TimeLoopTheta[time0, timemax, delta_time, 1.]{ // Euler implicit (1) -- Crank-Nicolson (0.5) - If[Flag_ParkTransformation && Flag_SrcType_Stator==1]{ PostOperation[ThetaPark_IABC] ; } - If[!Flag_NL]{ - Generate[A]; Solve[A]; - } - Else{ - // IterativeLoop[Nb_max_iter, stop_criterion, relaxation_factor] { - // GenerateJac[A] ; SolveJac[A] ; } - IterativeLoopN[ - Nb_max_iter, relaxation_factor, System { {A, reltol, abstol, Solution MeanL2Norm}} ]{ - GenerateJac[A] ; SolveJac[A] ; } - } - SaveSolution[A]; - - PostOperation[Get_LocalFields] ; - If[ $TimeStep > 1 ]{ - PostOperation[Get_GlobalQuantities] ; - } - ChangeOfCoordinates[ NodesOf[Rotor_Moving], RotatePZ[delta_theta]] ; - MeshMovingBand2D[MB] ; - } - } - } - - { Name FrequencyDomain ; - System { - { Name A ; NameOfFormulation MagDyn_a_2D ; Type ComplexValue ; Frequency Freq ; } - } - Operation { - If[ Clean_Results==1 && wr == 0.]{ - DeleteFile["res/Tr.dat"]; DeleteFile["res/Ts.dat"]; DeleteFile["res/Tmb.dat"]; - DeleteFile["res/Ua.dat"]; DeleteFile["res/Ub.dat"]; DeleteFile["res/Uc.dat"]; - DeleteFile["res/Ia.dat"]; DeleteFile["res/Ib.dat"]; DeleteFile["res/Ic.dat"]; - } - SetTime[wr]; - InitMovingBand2D[MB] ; - MeshMovingBand2D[MB] ; - Generate[A] ; Solve[A] ; SaveSolution[A]; - PostOperation[Map_LocalFields] ; - PostOperation[Torque_Emf_Flux] ; - } - } - - /* - { Name MagDyn_Kin ; - System { - { Name A ; NameOfFormulation MagDyn_a_2D ; } - { Name M ; NameOfFormulation Mechanical ; } - } - Operation { - ChangeOfCoordinates [ NodesOf[Rotor_Moving], RotatePZ[theta0] ] ; // Initial position (supposing initial mesh with angleR=0) - InitMovingBand2D[MB] ; MeshMovingBand2D[MB] ; - - InitSolution[A] ; SaveSolution[A] ; - InitSolution[M] ; SaveSolution[M] ; - - TimeLoopTheta[time0, timemax, delta_time, 1.]{ - Generate[A] ; Solve[A] ; SaveSolution[A] ; - PostOperation[MagDyn_a_2D] ; - - Generate[M] ; Solve[M] ; SaveSolution[M] ; - PostOperation[Mechanical] ; - - ChangeOfCoordinates [ NodesOf[Rotor_Moving], RotatePZ[#77-#66] ] ; - Evaluate[ #77#66 ] ; //Keep track of previous angular position - MeshMovingBand2D[MB] ; - } - } - } - */ - -} - -//----------------------------------------------------------------------------------------------- - -PostProcessing { - - { Name MagSta_a_2D ; NameOfFormulation MagSta_a_2D ; - PostQuantity { - { Name a ; Value { Term { [ {a} ] ; In Domain ; Jacobian Vol ; } } } - { Name az ; Value { Term { [ CompZ[{a}] ] ; In Domain ; Jacobian Vol ; } } } - { Name b ; Value { Term { [ {d a} ] ; In Domain ; Jacobian Vol ; } } } - { Name boundary ; Value { Term { [ {d a} ] ; In Dummy ; Jacobian Vol ; } } } - { Name br ; Value { Term { [ br[] ] ; In DomainM ; Jacobian Vol ; } } } - - { Name Flux ; Value { Integral { [ SymmetryFactor*AxialLength*Idir[]*NbWires[]/SurfCoil[]* CompZ[{a}] ] ; - In Inds ; Jacobian Vol ; Integration I1 ; } } } - { Name Force_vw ; Value { - Integral { Type Global ; [ 0.5 * nu[] * VirtualWork [{d a}] * AxialLength ]; - In ElementsOf[Rotor_Airgap, OnOneSideOf Rotor_Bnd_MB]; - Jacobian Vol ; Integration I1 ; } } } - - { Name Torque_Maxwell ; Value { - Integral { - [ CompZ [ XYZ[] /\ (T_max[{d a}] * XYZ[]) ]*2*Pi*AxialLength/SurfaceArea[] ] ; - In Domain ; Jacobian Vol ; Integration I1; } } } - - { Name Torque_vw ; Value { - Integral { Type Global ; - [ CompZ[ 0.5 * nu[] * XYZ[] /\ VirtualWork[{d a}] ] * AxialLength ]; - In ElementsOf[Rotor_Airgap, OnOneSideOf Rotor_Bnd_MB]; - Jacobian Vol ; Integration I1 ; } } } - - { Name U ; Value { - Term { [ {Ub} ] ; In DomainB ; } - Term { [ {Uz} ] ; In DomainZt_Cir ; } - } } - - { Name I ; Value { - Term { [ {Ib} ] ; In DomainB ; } - Term { [ {Iz} ] ; In DomainZt_Cir ; } - } } - - } - } - - { Name MagDyn_a_2D ; NameOfFormulation MagDyn_a_2D ; - PostQuantity { - { Name a ; Value { Term { [ {a} ] ; In Domain ; Jacobian Vol ; } } } - { Name az ; Value { Term { [ CompZ[{a}] ] ; In Domain ; Jacobian Vol ; } } } - - { Name b ; Value { Term { [ {d a} ] ; In Domain ; Jacobian Vol ; } } } - { Name boundary ; Value { Term { [ 1 ] ; In Dummy ; Jacobian Vol ; } } } // Dummy quantity - { Name b_radial ; Value { Term { [ {d a}* Vector[ Cos[AngularPosition[]#4], Sin[#4], 0.] ] ; In Domain ; Jacobian Vol ; } } } - { Name b_tangent ; Value { Term { [ {d a}* Vector[ -Sin[AngularPosition[]#4], Cos[#4], 0.] ] ; In Domain ; Jacobian Vol ; } } } - - { Name js ; Value { Term { [ js[] ] ; In DomainS ; Jacobian Vol ; } } } - { Name br ; Value { Term { [ br[] ] ; In DomainM ; Jacobian Vol ; } } } - - { Name j ; Value { - Term { [ -sigma[]*(Dt[{a}]+{ur}) ] ; In DomainC ; Jacobian Vol ; } - Term { [ sigma[]*(Velocity[] *^ {d a}) ] ; In DomainV ; Jacobian Vol ; } - } - } - { Name ir ; Value { Term { [ {ir} ] ; In Inds ; Jacobian Vol ; } } } - - { Name jz ; Value { - Term { [ CompZ[-sigma[]*(Dt[{a}]+{ur})] ] ; In DomainC ; Jacobian Vol ; } - Term { [ CompZ[ sigma[]*(Velocity[]*^{d a}) ] ] ; In DomainV ; Jacobian Vol ; } - } - } - - { Name rhoj2 ; - Value { - Term { [ sigma[]*SquNorm[ Dt[{a}]+{ur}] ] ; In Region[{DomainC,-DomainV}] ; Jacobian Vol ; } - Term { [ sigma[]*SquNorm[ Dt[{a}]+{ur}-Velocity[]*^{d a} ] ] ; In DomainV ; Jacobian Vol ; } - Term { [ 1./sigma[]*SquNorm[ IA[]*{ir} ] ] ; In PhaseA ; Jacobian Vol ; } - Term { [ 1./sigma[]*SquNorm[ IB[]*{ir} ] ] ; In PhaseB ; Jacobian Vol ; } - Term { [ 1./sigma[]*SquNorm[ IC[]*{ir} ] ] ; In PhaseC ; Jacobian Vol ; } - } - } - - { Name JouleLosses ; - Value { - Integral { [ sigma[] * SquNorm[ Dt[{a}]+{ur}-Velocity[]*^{d a} ] ] ; In Region[{DomainC,-DomainV}] ; Jacobian Vol ; Integration I1 ; } - Integral { [ sigma[] * SquNorm[ Dt[{a}]+{ur}-Velocity[]*^{d a} ] ] ; In DomainV ; Jacobian Vol ; Integration I1 ; } - Integral { [ 1./sigma[]*SquNorm[ IA[]*{ir} ] ] ; In PhaseA ; Jacobian Vol ; Integration I1 ; } - Integral { [ 1./sigma[]*SquNorm[ IB[]*{ir} ] ] ; In PhaseB ; Jacobian Vol ; Integration I1 ; } - Integral { [ 1./sigma[]*SquNorm[ IC[]*{ir} ] ] ; In PhaseC ; Jacobian Vol ; Integration I1 ; } - } - } - - { Name Flux ; Value { Integral { [ SymmetryFactor*AxialLength*Idir[]*NbWires[]/SurfCoil[]* CompZ[{a}] ] ; - In Inds ; Jacobian Vol ; Integration I1 ; } } } - - { Name Force_vw ; // Force computation by Virtual Works - Value { - Integral { - Type Global ; [ 0.5 * nu[] * VirtualWork [{d a}] * AxialLength ]; - In ElementsOf[Rotor_Airgap, OnOneSideOf Rotor_Bnd_MB]; Jacobian Vol ; Integration I1 ; } - } - } - - { Name Torque_vw ; Value { // Torque computation via Virtual Works - Integral { Type Global ; - [ CompZ[ 0.5 * nu[] * XYZ[] /\ VirtualWork[{d a}] ] * AxialLength ]; - In ElementsOf[Rotor_Airgap, OnOneSideOf Rotor_Bnd_MB]; Jacobian Vol ; Integration I1 ; } - } - } - - - { Name Torque_Maxwell ; // Torque computation via Maxwell stress tensor - Value { - Integral { - [ CompZ [ XYZ[] /\ (T_max[{d a}] * XYZ[]) ] * 2*Pi*AxialLength/SurfaceArea[] ] ; - In Domain ; Jacobian Vol ; Integration I1; } - } - } - - { Name Torque_Maxwell_cplx ; // Torque computation via Maxwell stress tensor - Value { - Integral { - [ CompZ [ XYZ[] /\ (T_max_cplx[{d a}] * XYZ[]) ] * 2*Pi*AxialLength/SurfaceArea[] ] ; - In Domain ; Jacobian Vol ; Integration I1; } - } - } - - { Name ComplexPower ; // S = P + i*Q - Value { - Integral { [ Complex[ sigma[]*SquNorm[Dt[{a}]+{ur}], nu[]*SquNorm[{d a}] ] ] ; - In Region[{DomainC,-DomainV}] ; Jacobian Vol ; Integration I1 ; } - Integral { [ Complex[ sigma[]*SquNorm[Dt[{a}]+{ur}-Velocity[]*^{d a}], nu[]*SquNorm[{d a}] ] ] ; - In DomainV ; Jacobian Vol ; Integration I1 ; } - } - } - - { Name U ; Value { - Term { [ {U} ] ; In DomainC ; } - Term { [ {Ub} ] ; In DomainB ; } - Term { [ {Uz} ] ; In DomainZt_Cir ; } - } } - - { Name I ; Value { - Term { [ {I} ] ; In DomainC ; } - Term { [ {Ib} ] ; In DomainB ; } - Term { [ {Iz} ] ; In DomainZt_Cir ; } - } } - - { Name S ; Value { - Term { [ {U}*Conj[{I}] ] ; In DomainC ; } - Term { [ {Ub}*Conj[{Ib}] ] ; In DomainB ; } - Term { [ {Uz}*Conj[{Iz}] ] ; In DomainZt_Cir ; } - } } - - { Name Velocity ; Value { - Term { [ Velocity[] ] ; In Domain ; Jacobian Vol ; } - } - } - - // For getting the value of some functions: - { Name RotorPosition_deg ; Value { Term { Type Global; [ RotorPosition_deg[] ] ; In DomainDummy ; } } } - { Name Theta_Park_deg ; Value { Term { Type Global; [ Theta_Park_deg[] ] ; In DomainDummy ; } } } - { Name IA ; Value { Term { Type Global; [ IA[] ] ; In DomainDummy ; } } } - { Name IB ; Value { Term { Type Global; [ IB[] ] ; In DomainDummy ; } } } - { Name IC ; Value { Term { Type Global; [ IC[] ] ; In DomainDummy ; } } } - - { Name Flux_d ; Value { Term { Type Global; [ CompX[Flux_dq0[]] ] ; In DomainDummy ; } } } - { Name Flux_q ; Value { Term { Type Global; [ CompY[Flux_dq0[]] ] ; In DomainDummy ; } } } - { Name Flux_0 ; Value { Term { Type Global; [ CompZ[Flux_dq0[]] ] ; In DomainDummy ; } } } - } - } - - { Name Mechanical ; NameOfFormulation Mechanical ; - PostQuantity { - { Name P ; Value { Term { [ {P} ] ; In DomainKin ; } } } //Position - { Name V ; Value { Term { [ {V} ] ; In DomainKin ; } } } //Velocity - { Name Vrpm ; Value { Term { [ {V}*30/Pi ] ; In DomainKin ; } } } //Velocity in rpm - } - } - -} - -//----------------------------------------------------------------------------------------------- -//----------------------------------------------------------------------------------------------- - -If (Flag_ParkTransformation) -PostOperation ThetaPark_IABC UsingPost MagDyn_a_2D { - Print[ RotorPosition_deg, OnRegion DomainDummy, Format Table, LastTimeStepOnly, File StrCat[Dir, StrCat["temp",ExtGnuplot]], - SendToServer "Output/1RotorPosition", Color "LightYellow" ]; - Print[ Theta_Park_deg, OnRegion DomainDummy, Format Table, LastTimeStepOnly, File StrCat[Dir, StrCat["temp",ExtGnuplot]], - SendToServer "Output/1Theta_Park", Color "LightYellow" ]; - Print[ IA, OnRegion DomainDummy, Format Table, LastTimeStepOnly, File StrCat[Dir, StrCat["temp",ExtGnuplot]], SendToServer "Output/2IA", Color "Pink" ]; - Print[ IB, OnRegion DomainDummy, Format Table, LastTimeStepOnly, File StrCat[Dir, StrCat["temp",ExtGnuplot]], SendToServer "Output/2IB", Color "Yellow" ]; - Print[ IC, OnRegion DomainDummy, Format Table, LastTimeStepOnly, File StrCat[Dir, StrCat["temp",ExtGnuplot]], SendToServer "Output/2IC", Color "LightGreen" ]; -} -EndIf -PostOperation Get_LocalFields UsingPost MagDyn_a_2D { - Print[ ir, OnElementsOf Stator_Inds, File StrCat[Dir, StrCat["ir_stator",ExtGmsh]], LastTimeStepOnly, AppendTimeStepToFileName Flag_SaveAllSteps] ; - Print[ ir, OnElementsOf Rotor_Inds, File StrCat[Dir, StrCat["ir_rotor",ExtGmsh]], LastTimeStepOnly, AppendTimeStepToFileName Flag_SaveAllSteps] ; - //Print[ br, OnElementsOf #{DomainM}, File StrCat[Dir, StrCat["b",ExtGmsh]], LastTimeStepOnly, AppendTimeStepToFileName Flag_SaveAllSteps] ; - Print[ b, OnElementsOf Domain, File StrCat[Dir, StrCat["b",ExtGmsh]], LastTimeStepOnly, AppendTimeStepToFileName Flag_SaveAllSteps] ; - Print[ boundary, OnElementsOf Dummy, File StrCat[Dir, StrCat["bnd",ExtGmsh]], LastTimeStepOnly, AppendTimeStepToFileName Flag_SaveAllSteps] ; - Print[ az, OnElementsOf Domain, File StrCat[Dir, StrCat["a",ExtGmsh]], LastTimeStepOnly, AppendTimeStepToFileName Flag_SaveAllSteps ] ; -} - -PostOperation Get_GlobalQuantities UsingPost MagDyn_a_2D { - If(!Flag_Cir) - If(!Flag_ParkTransformation) - Print[ I, OnRegion PhaseA_pos, Format Table, - File > StrCat[Dir, StrCat["Ia",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/2IA", Color "Pink" ]; - Print[ I, OnRegion PhaseB_pos, Format Table, - File > StrCat[Dir, StrCat["Ib",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/2IB", Color "Yellow" ]; - Print[ I, OnRegion PhaseC_pos, Format Table, - File > StrCat[Dir, StrCat["Ic",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/2IC", Color "LightGreen" ]; - EndIf - - Print[ U, OnRegion PhaseA_pos, Format Table, - File > StrCat[Dir, StrCat["Ua",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/30UA", Color "Pink" ]; - Print[ U, OnRegion PhaseB_pos, Format Table, - File > StrCat[Dir, StrCat["Ub",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/31UB", Color "Yellow" ]; - Print[ U, OnRegion PhaseC_pos, Format Table, - File > StrCat[Dir, StrCat["Uc",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/32UC", Color "LightGreen" ]; - EndIf - If(Flag_Cir && Flag_SrcType_Stator==2) - Print[ I, OnRegion Input1, Format Table, - File > StrCat[Dir, StrCat["Ia",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/2IA", Color "Pink" ]; - Print[ I, OnRegion Input2, Format Table, - File > StrCat[Dir, StrCat["Ib",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/2IB", Color "Yellow" ]; - Print[ I, OnRegion Input3, Format Table, - File > StrCat[Dir, StrCat["Ic",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/2IC", Color "LightGreen" ]; - Print[ U, OnRegion Input1, Format Table, - File > StrCat[Dir, StrCat["Ua",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/30UA", Color "Pink" ]; - Print[ U, OnRegion Input2, Format Table, - File > StrCat[Dir, StrCat["Ub",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/31UB", Color "Yellow" ]; - Print[ U, OnRegion Input3, Format Table, - File > StrCat[Dir, StrCat["Uc",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/32UC", Color "LightGreen" ]; - EndIf - If(Flag_Cir && Flag_SrcType_Stator==0) - Print[ I, OnRegion R1, Format Table, - File > StrCat[Dir, StrCat["Ia",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/2IA", Color "Pink" ]; - Print[ I, OnRegion R2, Format Table, - File > StrCat[Dir, StrCat["Ib",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/2IB", Color "Yellow" ]; - Print[ I, OnRegion R3, Format Table, - File > StrCat[Dir, StrCat["Ic",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/2IC", Color "LightGreen" ]; - Print[ U, OnRegion R1, Format Table, - File > StrCat[Dir, StrCat["Ua",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/30UA", Color "Pink" ]; - Print[ U, OnRegion R2, Format Table, - File > StrCat[Dir, StrCat["Ub",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/31UB", Color "Yellow" ]; - Print[ U, OnRegion R3, Format Table, - File > StrCat[Dir, StrCat["Uc",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/32UC", Color "LightGreen" ]; - EndIf - - - Print[ I, OnRegion RotorC, Format Table, - File > StrCat[Dir, StrCat["Irotor",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/2Ir", Color "LightYellow" ]; - - Print[ Torque_Maxwell[Rotor_Airgap], OnGlobal, Format TimeTable, - File > StrCat[Dir, StrCat["Tr",ExtGnuplot]], LastTimeStepOnly, Store 54, SendToServer my_output, Color "LightYellow" ]; - Print[ Torque_Maxwell[Stator_Airgap], OnGlobal, Format TimeTable, - File > StrCat[Dir, StrCat["Ts",ExtGnuplot]], LastTimeStepOnly, Store 55, SendToServer "Output/41T_stator", Color "LightYellow" ]; - Print[ Torque_Maxwell[MB], OnGlobal, Format TimeTable, - File > StrCat[Dir, StrCat["Tmb",ExtGnuplot]], LastTimeStepOnly, Store 56, SendToServer "Output/42T_mb", Color "LightYellow" ]; - //Print[ Torque_vw, OnRegion NodesOf[Rotor_Bnd_MB], Format RegionValue, - // File > StrCat[Dir, StrCat["Tr_vw",ExtGnuplot]], LastTimeStepOnly, Store 54, SendToServer "Output/1T_rotor_vw" ]; - - If(Flag_SrcType_Stator) - Print[ Flux[PhaseA], OnGlobal, Format TimeTable, - File > StrCat[Dir, StrCat["Flux_a",ExtGnuplot]], LastTimeStepOnly, Store 11, SendToServer "Output/50Flux_a", Color "Pink" ]; - Print[ Flux[PhaseB], OnGlobal, Format TimeTable, - File > StrCat[Dir, StrCat["Flux_b",ExtGnuplot]], LastTimeStepOnly, Store 22, SendToServer "Output/51Flux_b", Color "Yellow" ]; - Print[ Flux[PhaseC], OnGlobal, Format TimeTable, - File > StrCat[Dir, StrCat["Flux_c",ExtGnuplot]], LastTimeStepOnly, Store 33, SendToServer "Output/52Flux_c", Color "LightGreen"]; - - If(Flag_ParkTransformation && Flag_SrcType_Stator) - Print[ Flux_d, OnRegion DomainDummy, Format TimeTable, - File > StrCat[Dir, StrCat["Flux_d",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/60Flux_d", Color "LightYellow" ]; - Print[ Flux_q, OnRegion DomainDummy, Format TimeTable, - File > StrCat[Dir, StrCat["Flux_q",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/61Flux_q", Color "LightYellow" ]; - Print[ Flux_0, OnRegion DomainDummy, Format TimeTable, - File > StrCat[Dir, StrCat["Flux_0",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/62Flux_0", Color "LightYellow" ]; - EndIf - EndIf -} - - -PostOperation Joule_Losses UsingPost MagDyn_a_2D { - Print[ JouleLosses[Rotor], OnGlobal, Format TimeTable, - File > StrCat[Dir, StrCat["P",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/3P_rotor" ]; - Print[ JouleLosses[Rotor_Fe], OnGlobal, Format TimeTable, - File > StrCat[Dir, StrCat["P_Fe",ExtGnuplot]], LastTimeStepOnly, SendToServer "Output/3P_rotor_fe" ]; -} - -/* -PostOperation Mechanical UsingPost Mechanical { - Print[ P, OnRegion DomainKin, File > StrCat[Dir, StrCat["P", ExtGnuplot]], - Format Table, Store 77, LastTimeStepOnly, SendToServer "Output/3Position"] ; - Print[ V, OnRegion DomainKin, File > StrCat[Dir, StrCat["V", ExtGnuplot]], - Format Table, LastTimeStepOnly, SendToServer "Output/4Velocity"] ; -} -*/ diff --git a/contrib/mobile/Android/res/raw/magnet_data_pro b/contrib/mobile/Android/res/raw/magnet_data_pro deleted file mode 100644 index 3e0a76ce52..0000000000 --- a/contrib/mobile/Android/res/raw/magnet_data_pro +++ /dev/null @@ -1,16 +0,0 @@ - -DefineConstant[ Val_Rint = {0.15, Min 0.2, Max 1, Step 0.1, - Path "Parameters/Geometry/1", - Label "Internal shell radius (m)"} ]; - -DefineConstant[ Val_Rext = {0.25, Min Val_Rint, Max 0.5, Step 0.1, - Path "Parameters/Geometry/2", - Label "External shell radius (m)"}]; - -AIR = 100; -AIR_INF = 101; -AIR_GAP = 102; -MAGNET = 103; -CORE = 104; -LINE_INF = 105; -LINE_X = 106; diff --git a/contrib/mobile/Android/res/raw/magnet_geo b/contrib/mobile/Android/res/raw/magnet_geo deleted file mode 100644 index c0c7815711..0000000000 --- a/contrib/mobile/Android/res/raw/magnet_geo +++ /dev/null @@ -1,93 +0,0 @@ -Include "magnet_data.pro"; - -DefineConstant[ h = {0.14, Min 0.1, Max 0.2, Step 0.01, - Path "Parameters/Geometry", - Label "Core height (m)"} ] ; - -DefineConstant[ l = {0.14, Min 0.05, Max 0.2, Step 0.01, - Path "Parameters/Geometry", - Label "Core width (m)"} ] ; - -DefineConstant[ d = {0.03, Min 0.01, Max 0.05, Step 0.002, - Path "Parameters/Geometry", - Label "Core tickness (m)"} ] ; - -DefineConstant[ e = {5e-3, Min 5e-4, Max d, Step 1e-3, - Path "Parameters/Geometry", - Label "Air gap (m)", Highlight "LightYellow"} ] ; - -DefineConstant[ ha = {0.03, Min 0.01, Max 0.1, Step 0.01, - Path "Parameters/Geometry", - Label "Magnet height (m)"} ] ; - -lc0 = d / 5 ; -lc1 = e / 2 ; -lc2 = (Val_Rext - Val_Rint) / 8. ; - -Point(1) = {0, 0, 0, lc0}; -Point(2) = {-l/2, 0, 0, lc0}; -Point(3) = {-l/2, h/2, 0, lc0}; -Point(4) = {l/2, 0, 0, lc1}; -Point(5) = {l/2, h/2, 0, lc0}; -Point(6) = {-l/2, ha/2, 0, lc0}; -Point(7) = {-l/2+d, ha/2, 0, lc0}; -Point(8) = {-l/2+d, 0, 0, lc0}; -Point(9) = {l/2-d, 0, 0, lc1}; -Point(10) = {l/2-d, h/2-d, 0, lc0}; -Point(11) = {-l/2+d, h/2-d, 0, lc0}; -Point(12) = {l/2, e/2, 0, lc1}; -Point(13) = {l/2-d, e/2, 0, lc1}; - -Point(30) = {Val_Rint, 0, 0, lc2}; -Point(31) = {Val_Rext, 0, 0, lc2}; -Point(32) = {0, Val_Rint, 0, lc2}; -Point(33) = {0, Val_Rext, 0, lc2}; -Point(34) = {-Val_Rext, 0, 0, lc2}; -Point(35) = {-Val_Rint, 0, 0, lc2}; - -Line(1) = {34, 35}; -Line(2) = {35, 2}; -Line(3) = {2, 8}; -Line(4) = {8, 1}; -Line(5) = {1, 9}; -Line(6) = {9, 4}; -Line(7) = {4, 30}; -Line(8) = {30, 31}; -Line(9) = {2, 6}; -Line(10) = {6, 3}; -Line(11) = {3, 5}; -Line(12) = {5, 12}; -Line(13) = {12, 4}; -Line(14) = {9, 13}; -Line(15) = {13, 10}; -Line(16) = {10, 11}; -Line(17) = {11, 7}; -Line(18) = {7, 8}; -Line(19) = {7, 6}; -Line(20) = {13, 12}; -Circle(21) = {35, 1, 32}; -Circle(22) = {32, 1, 30}; -Circle(23) = {34, 1, 33}; -Circle(24) = {33, 1, 31}; - -Line Loop(25) = {21, 22, 8, -24, -23, 1}; -Plane Surface(26) = {25}; -Line Loop(27) = - {22, -7, -13, -12, -11, -10, -9, -2, 21}; -Plane Surface(28) = {27}; -Line Loop(29) = - {11, 12, -20, 15, 16, 17, 19, 10}; -Plane Surface(30) = {29}; -Line Loop(31) = {19, -9, 3, -18}; -Plane Surface(32) = {31}; -Line Loop(33) = - {20, 13, -6, 14}; -Plane Surface(34) = {33}; -Line Loop(35) = {15, 16, 17, 18, 4, 5, 14}; -Plane Surface(36) = {35}; - -// physical entities (for which elements will be saved) -Physical Surface(AIR) = {28, 36}; -Physical Surface(AIR_INF) = {26}; -Physical Surface(AIR_GAP) = {34}; -Physical Surface(MAGNET) = {32}; -Physical Surface(CORE) = {30}; -Physical Line(LINE_INF) = {23, 24}; -Physical Line(LINE_X) = {1:8}; diff --git a/contrib/mobile/Android/res/raw/magnet_pro b/contrib/mobile/Android/res/raw/magnet_pro deleted file mode 100644 index a18c7cdf4f..0000000000 --- a/contrib/mobile/Android/res/raw/magnet_pro +++ /dev/null @@ -1,69 +0,0 @@ -/* - To solve the problem - with scalar potential, type 'getdp test -solve MagSta_phi -pos phi' - with vector potential, type 'getdp test -solve MagSta_a -pos a' -*/ - -Include "magnet_data.pro"; - -Group { - // AIR, AIR_INF, etc. are variables defined in core.txt, and correspond to the - // tags of physical regions in the mesh - Air = Region[ AIR ]; - AirInf = Region[ AIR_INF ]; - Core = Region[ CORE ]; - AirGap = Region[ AIR_GAP ]; - Magnet = Region[ MAGNET ]; - - // These are the generic group names that are used in "Magnetostatics.pro" - Domain_S = Region[ {} ] ; - Domain_Inf = Region[ AirInf ] ; - Domain_M = Region[ Magnet ] ; - Domain_Mag = Region[ {Air, Core, AirGap} ] ; - Dirichlet_a_0 = Region[ LINE_INF ] ; - Dirichlet_phi_0 = Region[ {LINE_X, LINE_INF} ] ; -} - -Function { - mu0 = 4.e-7 * Pi ; - - // DefineConstant is used to define a default value for murCore; this value - // can be changed interactively by the ONELAB server - DefineConstant[ murCore = {200., Min 1, Max 1000, Step 10, - Label "Core relative permeability", - Path "Parameters/Materials"} ]; - - nu [ Region[{Air, AirInf, AirGap, Magnet}] ] = 1. / mu0 ; - nu [ Core ] = 1. / (murCore * mu0) ; - - mu [ Region[{Air, AirInf, AirGap, Magnet}] ] = mu0 ; - mu [ Core ] = murCore * mu0; - - DefineConstant[ Hc = {920000, Label "Magnet coercive field (A/m)", - Path "Parameters/Materials"} ]; - hc [ Magnet ] = Vector[0., Hc, 0.] ; -} - -Include "magnetostatics.pro" - -eps = 1.e-5 ; - -Printf[ "murCore: %f",murCore ] ; - -PostOperation { - { Name phi ; NameOfPostProcessing MagSta_phi; - Operation { - Print[ phi, OnElementsOf Domain, File "phi.pos" ] ; - Print[ b, OnElementsOf Domain, File "b_phi.pos" ] ; - Print[ b, OnLine {{-0.07,eps,0}{0.09,eps,0}} {500}, File "b_phi.txt", Format Table ] ; - } - } - { Name a ; NameOfPostProcessing MagSta_a; - Operation { - Print[ a, OnElementsOf Domain, File "a.pos"] ; - Print[ b, OnElementsOf Domain, File "b_a.pos" ] ; - Print[ h, OnElementsOf Domain, File "h_a.pos" ] ; - Print[ b, OnLine {{-0.07,eps,0}{0.09,eps,0}} {500}, File "b_a.txt" , Format Table ] ; - } - } -} diff --git a/contrib/mobile/Android/res/raw/magnetostatics_pro b/contrib/mobile/Android/res/raw/magnetostatics_pro deleted file mode 100644 index 4c9c07d5c5..0000000000 --- a/contrib/mobile/Android/res/raw/magnetostatics_pro +++ /dev/null @@ -1,209 +0,0 @@ -Group { - // Input groups: - DefineGroup[ Domain_M = {{}, Label "Permanent magnets", - Path "Regions/0Sources"}, - Domain_S = {{}, Label "Inductor (imposed j_s)", - Path "Regions/0Sources"}, - Domain_Inf = {{}, Label "Infinite domain (spherical shell)", - Path "Regions/0Special regions", Closed "1"}, - Domain_Mag = {{}, Label "Passive magnetic regions", - Path "Regions/Other regions"}, - Dirichlet_phi_0 = {{}, Label "h_t = 0", Closed "1", - Path "Regions/0Boundary conditions"}, - Dirichlet_a_0 = {{}, Label "b_n = 0", - Path "Regions/0Boundary conditions"} ]; - - DefineGroup[ Domain = {{Domain_Mag, Domain_M, Domain_S, Domain_Inf}, - Label "Computational domain", Path "Regions", Visible 0} ]; -} - -Function{ - // Input constants: - DefineConstant[ Val_Rint, Val_Rext // interior/exterior radius of Domain_Inf - ]; - - // Input functions: - DefineFunction[ mu, // magnetic permeability - nu, // magnetic reluctivity - hc, // coercive magnetic field - js // source current density - ]; - - // remove this: only for demo - //DefineConstant[ hcx = {0, Label "Coercive field h_x", Path "Sources"}]; - //DefineConstant[ hcy = {1000, Label "Coercive field h_y", Path "Sources"}]; - //hc[] = Vector[hcx,hcy,0]; - //mu[] = 4*Pi*10^-7; - //nu[] = 1/mu[]; -} - -Jacobian { - { Name JVol ; - Case { - { Region Domain_Inf ; Jacobian VolSphShell{Val_Rint, Val_Rext} ; } - { Region All ; Jacobian Vol ; } - } - } -} - -Integration { - { Name I1 ; - Case { - { Type Gauss ; - Case { - { GeoElement Triangle ; NumberOfPoints 4 ; } - { GeoElement Quadrangle ; NumberOfPoints 4 ; } - } - } - } - } -} - - -/* -------------------------------------------------------------------------- - MagSta_phi : Magnetic scalar potential phi formulation - -------------------------------------------------------------------------- */ - -Constraint { - { Name phi ; - Case { - { Region Dirichlet_phi_0 ; Value 0. ; } - } - } -} - -FunctionSpace { - { Name Hgrad_phi ; Type Form0 ; - BasisFunction { - { Name sn ; NameOfCoef phin ; Function BF_Node ; - Support Domain ; Entity NodesOf[ All ] ; } - } - Constraint { - { NameOfCoef phin ; EntityType NodesOf ; NameOfConstraint phi ; } - } - } -} - -Formulation { - { Name MagSta_phi ; Type FemEquation ; - Quantity { - { Name phi ; Type Local ; NameOfSpace Hgrad_phi ; } - } - Equation { - Galerkin { [ - mu[] * Dof{d phi} , {d phi} ] ; - In Domain ; Jacobian JVol ; Integration I1 ; } - - Galerkin { [ - mu[] * hc[] , {d phi} ] ; - In Domain_M ; Jacobian JVol ; Integration I1 ; } - } - } -} - -Resolution { - { Name MagSta_phi ; - System { - { Name A ; NameOfFormulation MagSta_phi ; } - } - Operation { - Generate[A] ; Solve[A] ; SaveSolution[A] ; - } - } -} - -PostProcessing { - { Name MagSta_phi ; NameOfFormulation MagSta_phi ; - Quantity { - { Name b ; Value { Local { [ - mu[] * {d phi} ] ; In Domain ; Jacobian JVol ; } - Local { [ - mu[] * hc[] ] ; In Domain_M ; Jacobian JVol ; } } } - { Name h ; Value { Local { [ - {d phi} ] ; In Domain ; Jacobian JVol ; } } } - { Name phi ; Value { Local { [ {phi} ] ; In Domain ; Jacobian JVol ; } } } - } - } -} - -PostOperation { - { Name MagSta_phi ; NameOfPostProcessing MagSta_phi; - Operation { - Print[ b, OnElementsOf Domain, File "MagSta_phi_b.pos" ] ; - Print[ h, OnElementsOf Domain, File "MagSta_phi_h.pos" ] ; - Print[ phi, OnElementsOf Domain, File "MagSta_phi_phi.pos" ] ; - } - } -} - -/* -------------------------------------------------------------------------- - MagSta_a : Magnetic vector potential a formulation (2D) - -------------------------------------------------------------------------- */ - -Constraint { - { Name a ; - Case { - { Region Dirichlet_a_0 ; Value 0. ; } - } - } -} - -FunctionSpace { - - { Name Hcurl_a ; Type Form1P ; - BasisFunction { - { Name se ; NameOfCoef ae ; Function BF_PerpendicularEdge ; - Support Domain ; Entity NodesOf[ All ] ; } - } - Constraint { - { NameOfCoef ae ; EntityType NodesOf ; NameOfConstraint a ; } - } - } - -} - -Formulation { - { Name MagSta_a ; Type FemEquation ; - Quantity { - { Name a ; Type Local ; NameOfSpace Hcurl_a ; } - } - Equation { - Galerkin { [ nu[] * Dof{d a} , {d a} ] ; - In Domain ; Jacobian JVol ; Integration I1 ; } - - Galerkin { [ hc[] , {d a} ] ; - In Domain_M ; Jacobian JVol ; Integration I1 ; } - - Galerkin { [ -js[] , {a} ] ; - In Domain_S ; Jacobian JVol ; Integration I1 ; } - } - } -} - -Resolution { - { Name MagSta_a ; - System { - { Name A ; NameOfFormulation MagSta_a ; } - } - Operation { - Generate[A] ; Solve[A] ; SaveSolution[A]; - } - } -} - -PostProcessing { - { Name MagSta_a ; NameOfFormulation MagSta_a ; - Quantity { - { Name a ; Value { Local { [ CompZ[{a}] ] ; In Domain ; Jacobian JVol ; } } } - { Name b ; Value { Local { [ {d a} ] ; In Domain ; Jacobian JVol ; } } } - { Name a ; Value { Local { [ {a} ] ; In Domain ; Jacobian JVol ; } } } - { Name h ; Value { Local { [ nu[] * {d a} ] ; In Domain ; Jacobian JVol ; } - Local { [ hc[] ] ; In Domain_M ; Jacobian JVol ; } } } - } - } -} - -PostOperation { - { Name MagSta_a ; NameOfPostProcessing MagSta_a; - Operation { - Print[ b, OnElementsOf Domain, File "MagSta_a_b.pos" ] ; - Print[ h, OnElementsOf Domain, File "MagSta_a_h.pos" ] ; - Print[ a, OnElementsOf Domain, File "MagSta_a_a.pos" ] ; - } - } -} diff --git a/contrib/mobile/Android/res/raw/models.zip b/contrib/mobile/Android/res/raw/models.zip new file mode 100644 index 0000000000000000000000000000000000000000..de8f6ff724bec17b9e76ab05fdbd88d6f17e3578 GIT binary patch literal 23732 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 Q!@$FEoQZ+qdL&3W02M`x?EnA( literal 0 HcmV?d00001 diff --git a/contrib/mobile/Android/res/raw/pmsm_8p_circuit_pro b/contrib/mobile/Android/res/raw/pmsm_8p_circuit_pro deleted file mode 100644 index 37e1ac3756..0000000000 --- a/contrib/mobile/Android/res/raw/pmsm_8p_circuit_pro +++ /dev/null @@ -1,123 +0,0 @@ -// -// Circuit for Permanent Magnet Synchronous Generator - cbmag -// - -Group{ - // Dummy numbers for circuit definition - R1 = #55551 ; - R2 = #55552 ; - R3 = #55553 ; - - Input1 = #10001 ; - Input2 = #10002 ; - Input3 = #10003 ; - Input4 = #10004 ; - - Resistance_Cir = Region[{R1, R2, R3}]; - DomainZ_Cir = Region[ {Resistance_Cir} ]; - - DomainSource_Cir = Region[ {} ] ; - If(Flag_SrcType_Stator>1) - DomainSource_Cir += Region[ {Input1, Input2, Input3} ] ; - EndIf - - DomainZt_Cir = Region[ {DomainZ_Cir, DomainSource_Cir} ]; -} - -// -------------------------------------------------------------------------- -// -------------------------------------------------------------------------- - -Function { - // Open circuit - load - short circuit - DefineConstant[ ZR = {200, - Choices{1e-8, 200, 1e8}, Label "Load resistance", Path "Input/", Highlight "AliceBlue"} ]; - Resistance[#{R1, R2, R3}] = ZR ; -} - -// -------------------------------------------------------------------------- - -Constraint { - - If (SymmetryFactor<8) - If(Flag_SrcType_Stator==0) - { Name ElectricalCircuit ; Type Network ; - Case Circuit1 { - { Region Stator_Ind_Ap ; Branch {100,102} ; } - { Region Stator_Ind_Am ; Branch {103,102} ; } - { Region R1 ; Branch {103,100} ; } - } - Case Circuit2 { - { Region Stator_Ind_Bp ; Branch {200,202} ; } - { Region Stator_Ind_Bm ; Branch {203,202} ; } - { Region R2 ; Branch {203,200} ; } - } - Case Circuit3 { - { Region Stator_Ind_Cp ; Branch {300,302} ; } - { Region Stator_Ind_Cm ; Branch {303,302} ; } - { Region R3 ; Branch {303,300} ; } - } - } - EndIf - If (Flag_SrcType_Stator==2) - { Name ElectricalCircuit ; Type Network ; - Case Circuit1 { - { Region Input1 ; Branch {100,101} ; } - { Region Stator_Ind_Ap ; Branch {101,102} ; } - { Region Stator_Ind_Am ; Branch {103,102} ; } - { Region R1 ; Branch {103,100} ; } - } - Case Circuit2 { - { Region Input2 ; Branch {200,201} ; } - { Region Stator_Ind_Bp ; Branch {201,202} ; } - { Region Stator_Ind_Bm ; Branch {203,202} ; } - { Region R2 ; Branch {203,200} ; } - } - Case Circuit3 { - { Region Input3 ; Branch {300,301} ; } - { Region Stator_Ind_Cp ; Branch {301,302} ; } - { Region Stator_Ind_Cm ; Branch {303,302} ; } - { Region R3 ; Branch {303,300} ; } - } - } - EndIf - EndIf - - If(SymmetryFactor==8) - If(Flag_SrcType_Stator==0) // Only one physical region in geo allow per branch - { Name ElectricalCircuit ; Type Network ; - Case Circuit1 { - { Region PhaseA ; Branch {100,102} ; } - { Region R1 ; Branch {102,100} ; } - } - Case Circuit2 { - { Region PhaseB ; Branch {200,202} ; } - { Region R2 ; Branch {202,200} ; } - } - Case Circuit3 { - { Region PhaseC ; Branch {300,302} ; } - { Region R3 ; Branch {302,300} ; } - } - } - EndIf - If(Flag_SrcType_Stator==2) // Only one physical region in geo allow per branch - { Name ElectricalCircuit ; Type Network ; - Case Circuit1 { - { Region Input1 ; Branch {100,101} ; } - { Region PhaseA ; Branch {101,102} ; } - { Region R1 ; Branch {102,100} ; } - } - Case Circuit2 { - { Region Input2 ; Branch {200,201} ; } - { Region PhaseB ; Branch {201,202} ; } - { Region R2 ; Branch {202,200} ; } - } - Case Circuit3 { - { Region Input3 ; Branch {300,301} ; } - { Region PhaseC ; Branch {302,301} ; } - { Region R3 ; Branch {302,300} ; } - } - } - EndIf - EndIf -} - diff --git a/contrib/mobile/Android/res/raw/pmsm_data_geo b/contrib/mobile/Android/res/raw/pmsm_data_geo deleted file mode 100644 index c2760986cf..0000000000 --- a/contrib/mobile/Android/res/raw/pmsm_data_geo +++ /dev/null @@ -1,104 +0,0 @@ -// Permanent magnet synchronous machine -// Example of Prof. Dr. Mauricio Valencia Ferreira da Luz (Florianopolis, August 23, 2010) - -// Modified and customised for Onelab by Ruth V. Sabariego (February, 2013) - -mm = 1e-3 ; -deg2rad = Pi/180 ; - -DefineConstant[ NbrPoles = { 1, Choices {1="1", - 2="2", - 4="4", - 8="8"}, - Label "Number of poles in FE model", - Path "Input/1", Highlight "Blue", Visible 1} ] ; - -DefineConstant[ InitialRotorAngle_deg = {7.5, Label "Start rotor angle", Path "Input/20", Highlight "AliceBlue"} ]; - -//-------------------------------------------------------------------------------- - -InitialRotorAngle = InitialRotorAngle_deg*deg2rad ; // initial rotor angle, 0 if aligned - -AxialLength = 35*mm ; - -//------------------------------------------------ -//------------------------------------------------ -NbrPolesTot = 8 ; // number of poles in complete cross-section - -SymmetryFactor = NbrPolesTot/NbrPoles ; -Flag_Symmetry = (SymmetryFactor==1)?0:1 ; - -NbrSectTot = NbrPolesTot ; // number of "rotor teeth" -NbrSect = NbrSectTot*NbrPoles/NbrPolesTot ; // number of "rotor teeth" in FE model -//-------------------------------------------------------------------------------- - -//------------------------------------------------ -// Stator -//------------------------------------------------ -NbrSectTotStator = 24; // number of stator teeth -NbrSectStator = NbrSectTotStator*NbrPoles/NbrPolesTot; // number of stator teeth in FE model -//-------------------------------------------------------------------------------- - -lm = 2.352*mm ; // magnet height -Th_magnet = 32.67 *deg2rad ; // angle in degrees 0 < Th_magnet < 45 - -//-------------------------------------------------------------------------------- - -rRext = 25.6*mm; -rR1 = 10.5*mm; -rR2 = (rRext-lm); //23.243e-03; -rR3 = (rRext-0.7389*lm); //23.862e-03; -rR4 = (rRext-0.72278*lm); //23.9e-03; -rR5 = rRext; //25.6e-03; - -rS1 = 26.02*mm; -rS2 = 26.62*mm; -rS3 = 26.96*mm; -rS4 = 38.16*mm; -rS5 = 38.27*mm; -rS6 = 40.02*mm; -rS7 = 46.00*mm; - -Gap = rS1-rR5; - -rB1 = rR5+Gap/3; -rB1b = rB1; -rB2 = rR5+Gap*2/3; - - -A0 = 45 * deg2rad ; // with this choice, axis A of stator is at 30 degrees with regard to horizontal axis -A1 = 0 * deg2rad ; // Rotor initial aligned position, current position in angRot - -// ---------------------------------------------------- -// Numbers for physical regions in .geo and .pro files -// ---------------------------------------------------- -// Rotor -ROTOR_FE = 1000 ; -ROTOR_AIR = 1001 ; -ROTOR_AIRGAP = 1002 ; -ROTOR_MAGNET = 1010 ; // Index for first Magnet (1/8 model->1; full model->8) - -ROTOR_BND_MOVING_BAND = 1100 ; // Index for first line (1/8 model->1; full model->8) -ROTOR_BND_A0 = 1200 ; -ROTOR_BND_A1 = 1201 ; -SURF_INT = 1202 ; - -// Stator -STATOR_FE = 2000 ; -STATOR_AIR = 2001 ; -STATOR_AIRGAP = 2002 ; - -STATOR_BND_MOVING_BAND = 2100 ;// Index for first line (1/8 model->1; full model->8) -STATOR_BND_A0 = 2200 ; -STATOR_BND_A1 = 2201 ; - -STATOR_IND = 2300 ; //Index for first Ind (1/8 model->3; full model->24) -STATOR_IND_AP = STATOR_IND + 1 ; STATOR_IND_BM = STATOR_IND + 2 ;STATOR_IND_CP = STATOR_IND + 3 ; -STATOR_IND_AM = STATOR_IND + 4 ; STATOR_IND_BP = STATOR_IND + 5 ;STATOR_IND_CM = STATOR_IND + 6 ; - -SURF_EXT = 3000 ; // outer boundary - - -MOVING_BAND = 9999 ; - -NICEPOS = 111111 ; diff --git a/contrib/mobile/Android/res/raw/pmsm_geo b/contrib/mobile/Android/res/raw/pmsm_geo deleted file mode 100644 index efade112ec..0000000000 --- a/contrib/mobile/Android/res/raw/pmsm_geo +++ /dev/null @@ -1,95 +0,0 @@ -Include "pmsm_data.geo"; - -Mesh.Algorithm = 1; -Geometry.CopyMeshingMethod = 1; - -Mesh.CharacteristicLengthFactor = 1.5 ; - - -// Mesh characteristic lengths -s = 0.4 ; -pR1=(rR2-rR1)/6.*s; -pR2=(rR2-rR1)/6.*s; - -pS1=(rS7-rS1)/7.*s; -pS2=(rS7-rS1)/12.*s; -pS3=(rS6-rS3)/10.*s; - -NbrDivMB = 2*Ceil[2*Pi*rRext/8/pR1]; //1/8 Moving band - -//-------------------------------------------------------------------------------- -//-------------------------------------------------------------------------------- - -cen = newp ; Point(cen)={0,0,0,pR1}; -nicepos_rotor[] = {}; -nicepos_stator[] = {}; - -Include "pmsm_rotor.geo"; -Include "pmsm_stator.geo"; - - -// For nice visualisation... -Mesh.Light = 0 ; -//Mesh.SurfaceFaces = 1; Mesh.SurfaceEdges=0; - -Hide { Point{ Point '*' }; } -Hide { Line{ Line '*' }; } -Show { Line{ nicepos_rotor[], nicepos_stator[] }; } - -Physical Line(NICEPOS) = { nicepos_rotor[], nicepos_stator[] }; - -//For post-processing... -View[0].Light = 0; -View[0].NbIso = 25; // Number of intervals -View[0].IntervalsType = 1; - -DefineConstant[ Flag_AddInfo = {0, Choices{0,1}, - Label "Add info about phases and axis", - Path "Input/1"} ]; - -For i In {PostProcessing.NbViews-1 : 0 : -1} - If(StrFind(View[i].Attributes, "tmp")) - Delete View[i]; - EndIf -EndFor - -If(Flag_AddInfo) - rr = 1.25 * rS3 ; - For k In {0:NbrPoles-1} - xa[] += rr*Cos(1*Pi/24+k*Pi/4) ; ya[] += rr*Sin(1*Pi/24+k*Pi/4) ; - xb[] += rr*Cos(3*Pi/24+k*Pi/4) ; yb[] += rr*Sin(3*Pi/24+k*Pi/4) ; - xc[] += rr*Cos(5*Pi/24+k*Pi/4) ; yc[] += rr*Sin(5*Pi/24+k*Pi/4) ; - EndFor - - // Adding some axes - rr0 = 0.3 * rS7 ; - rr1 = 1.3 * rS7 ; - th_d = InitialRotorAngle ; - th_q = th_d + 22.5 * deg2rad ; - - th_a = 30 * deg2rad ; - th_b = (30 + 120/4) * deg2rad ; - th_c = (30 + 240/4) * deg2rad ; - - ff = 0.9; - - xd[0] = rr0*Cos(th_d) ; yd[0] = rr0*Sin(th_d) ; - xd[1] = ff*rr1*Cos(th_d) ; yd[1] = ff*rr1*Sin(th_d) ; - xq[0] = rr0*Cos(th_q) ; yq[0] = rr0*Sin(th_q) ; - xq[1] = ff*rr1*Cos(th_q) ; yq[1] = ff*rr1*Sin(th_q) ; - - xaa[0] = rr0*Cos(th_a) ; yaa[0] = rr0*Sin(th_a) ; - xaa[1] = rr1*Cos(th_a) ; yaa[1] = rr1*Sin(th_a) ; - xbb[0] = rr0*Cos(th_b) ; ybb[0] = rr0*Sin(th_b) ; - xbb[1] = rr1*Cos(th_b) ; ybb[1] = rr1*Sin(th_b) ; - xcc[0] = rr0*Cos(th_c) ; ycc[0] = rr0*Sin(th_c) ; - xcc[1] = rr1*Cos(th_c) ; ycc[1] = rr1*Sin(th_c) ; - - - Include "info_view.geo"; - -EndIf - - - - diff --git a/contrib/mobile/Android/res/raw/pmsm_geo_pro b/contrib/mobile/Android/res/raw/pmsm_geo_pro deleted file mode 100644 index 225b29dd4f..0000000000 --- a/contrib/mobile/Android/res/raw/pmsm_geo_pro +++ /dev/null @@ -1,211 +0,0 @@ -// -// Permanent Magnet Synchronous Generator -// - -Include "pmsm_data.geo"; - -DefineConstant[ Flag_NL = {0, - Choices{ 0="Linear", - 1="Nonlinear BH curve"}, - Label "Fe magnetic law", - Path "Input/3", Highlight "Blue"} ] ; - -DefineConstant[ Flag_SrcType_Stator = {0, - Choices{ 0="None", - 1="Current" }, - Label "Source Type in Stator", - Path "Input/4", Highlight "Blue", Visible 1} ] ; - -DefineConstant[ Flag_SrcType_Rotor = {0, - Choices{ 0="None", - 1="Current" }, - Label "Source Type in Rotor", - Path "Input/5", Highlight "Blue", Visible 0} ] ; - -DefineConstant[ Flag_Cir = {!Flag_SrcType_Stator, Choices{0,1}, - Label "Use circuit in Stator", ReadOnly 1, Visible 0} ] ; - -Group { - Stator_Fe = #STATOR_FE ; - Stator_Al = #{}; - Stator_Cu = #{}; - Stator_Air = #STATOR_AIR ; - Stator_Airgap = #STATOR_AIRGAP ; - - Stator_Bnd_A0 = #STATOR_BND_A0 ; - Stator_Bnd_A1 = #STATOR_BND_A1 ; - - Rotor_Fe = #ROTOR_FE ; - Rotor_Al = #{}; - Rotor_Cu = #{}; - Stator_Air = #STATOR_AIR ; - Stator_Airgap = #STATOR_AIRGAP ; - Stator_Bnd_MB = #STATOR_BND_MOVING_BAND ; - Stator_Bnd_A0 = #STATOR_BND_A0 ; - Stator_Bnd_A1 = #STATOR_BND_A1 ; - - Rotor_Fe = #ROTOR_FE ; - Rotor_Air = #ROTOR_AIR ; - Rotor_Airgap = #ROTOR_AIRGAP ; - - Rotor_Bnd_A0 = #ROTOR_BND_A0 ; - Rotor_Bnd_A1 = #ROTOR_BND_A1 ; - - MovingBand_PhysicalNb = #MOVING_BAND ; // Fictitious number for moving band, not in the geo file - Surf_Inf = #SURF_EXT ; - Surf_bn0 = #SURF_INT ; - Surf_cutA0 = #{STATOR_BND_A0, ROTOR_BND_A0}; - Surf_cutA1 = #{STATOR_BND_A1, ROTOR_BND_A1}; - - Dummy = #NICEPOS; - - nbMagnets = NbrPolesTot/SymmetryFactor ; - For k In {1:nbMagnets} - Rotor_Magnet~{k} = Region[ (ROTOR_MAGNET+k-1) ]; - Rotor_Magnets += Region[ Rotor_Magnet~{k} ]; - EndFor - - nbInds = (Flag_Symmetry) ? NbrPoles*NbrSectTotStator/NbrPolesTot : NbrSectTotStator ; - Printf("NbrPoles=%g, nbInds=%g SymmetryFactor=%g", NbrPoles, nbInds, SymmetryFactor); - - Stator_Ind_Ap = #{}; Stator_Ind_Am = #{STATOR_IND_AM}; - Stator_Ind_Bp = #{}; Stator_Ind_Bm = #{STATOR_IND_BM}; - Stator_Ind_Cp = #{STATOR_IND_CP}; Stator_Ind_Cm = #{}; - If(NbrPoles > 1) - Stator_Ind_Ap += #STATOR_IND_AP; - Stator_Ind_Bp += #STATOR_IND_BP; - Stator_Ind_Cm += #STATOR_IND_CM; - EndIf - - PhaseA = Region[{ Stator_Ind_Ap, Stator_Ind_Am }]; - PhaseB = Region[{ Stator_Ind_Bp, Stator_Ind_Bm }]; - PhaseC = Region[{ Stator_Ind_Cp, Stator_Ind_Cm }]; - - // Provisional: Just one physical region for nice graph in Onelab - PhaseA_pos = Region[{ Stator_Ind_Am }]; - PhaseB_pos = Region[{ Stator_Ind_Bm }]; - PhaseC_pos = Region[{ Stator_Ind_Cp }]; - - Stator_IndsP = Region[{ Stator_Ind_Ap, Stator_Ind_Bp, Stator_Ind_Cp }]; - Stator_IndsN = Region[{ Stator_Ind_Am, Stator_Ind_Bm, Stator_Ind_Cm }]; - - Stator_Inds = Region[ {PhaseA, PhaseB, PhaseC} ] ; - Rotor_Inds = Region[ {} ] ; - - StatorC = Region[{ }] ; - StatorCC = Region[{ Stator_Fe }] ; - RotorC = Region[{ }] ; - RotorCC = Region[{ Rotor_Fe, Rotor_Magnets }] ; - - // Moving band: with or without symmetry, these BND lines must be complete - Stator_Bnd_MB = #STATOR_BND_MOVING_BAND; - For k In {1:SymmetryFactor} - Rotor_Bnd_MB~{k} = Region[ (ROTOR_BND_MOVING_BAND+k-1) ]; - Rotor_Bnd_MB += Region[ Rotor_Bnd_MB~{k} ]; - EndFor - Rotor_Bnd_MBaux = Region[ {Rotor_Bnd_MB, -Rotor_Bnd_MB~{1}}]; - -} - -// -------------------------------------------------------------------------- -// -------------------------------------------------------------------------- - -Function { - - mur_fe = 1000 ; - sigma_fe = 0 ; - - NbrPhases = 3 ; - NbrPolePairs = NbrPolesTot/2 ; - - DefineConstant[ b_remanent = { 1.2, Label "Remanent induction", Path "Input/3", Highlight "AliceBlue"} ] ; - // For a radial remanent b - For k In {1:nbMagnets} - br[ Rotor_Magnet~{k} ] = (-1)^(k-1) * b_remanent * Vector[ Cos[Atan2[Y[],X[]]], Sin[Atan2[Y[],X[]]], 0 ]; - EndFor - - Inominal = 3.9 ; // Nominal current - Tnominal = 2.5 ; // Nominal torque - - //Data for modeling a stranded inductor - NbWires[] = 104 ; // Number of wires per slot - // STATOR_IND_AM comprises all the slots in that phase, we need thus to divide by the number of slots - nbSlots[] = Ceil[nbInds/NbrPhases/2] ; - SurfCoil[] = SurfaceArea[]{STATOR_IND_AM}/nbSlots[] ;//All inductors have the same surface - - FillFactor_Winding = 0.5 ; // percentage of Cu in the surface coil side, smaller than 1 - Factor_R_3DEffects = 1.5 ; // bigger than Adding 50% of resistance - - DefineConstant[ rpm = { 500, - Label "speed in rpm", - Path "Input/7", Highlight "AliceBlue"} ]; // speed in rpm - wr = rpm/60*2*Pi ; // speed in rad_mec/s - - // supply at fixed position - DefineConstant[ Freq = {wr*NbrPolePairs/(2*Pi), ReadOnly 1, - Path "Output/1", Highlight "LightYellow" } ]; - Omega = 2*Pi*Freq ; - T = 1/Freq ; - - DefineConstant[ thetaMax_deg = { 180, Label "End rotor angle (loop)", - Path "Input/21", Highlight "AliceBlue" } ]; - - theta0 = InitialRotorAngle + 0. ; - thetaMax = thetaMax_deg * deg2rad ; // end rotor angle (used in doing a loop) - - DefineConstant[ NbTurns = { (thetaMax-theta0)/(2*Pi), Label "Number of revolutions", - Path "Input/24", Highlight "LightGrey", ReadOnly 1} ]; - - DefineConstant[ delta_theta_deg = { 1., Label "step in degrees", - Path "Input/22", Highlight "AliceBlue"} ]; - - delta_theta = delta_theta_deg * deg2rad ; - - time0 = 0 ; // at initial rotor position - delta_time = delta_theta/wr; - timemax = thetaMax/wr; - - DefineConstant[ NbSteps = { Ceil[(timemax-time0)/delta_time], Label "Number of steps", - Path "Input/23", Highlight "LightGrey", ReadOnly 1} ]; - - RotorPosition[] = InitialRotorAngle + $Time * wr ; - RotorPosition_deg[] = RotorPosition[]*180/Pi; - - Flag_ParkTransformation = 1 ; - Theta_Park[] = ((RotorPosition[] + Pi/8) - Pi/6) * NbrPolePairs; // electrical degrees - Theta_Park_deg[] = Theta_Park[]*180/Pi; - - DefineConstant[ ID = { 0, Path "Input/60", Label "Id stator current", Highlight "AliceBlue"}, - IQ = { Inominal, Path "Input/61", Label "Iq stator current", Highlight "AliceBlue"}, - I0 = { 0, Visible 0} ] ; - - If(Flag_SrcType_Stator==0) - UndefineConstant["Input/60ID"]; - UndefineConstant["Input/61IQ"]; - EndIf -} - -// -------------------------------------------------------------------------- -// -------------------------------------------------------------------------- -// -------------------------------------------------------------------------- - -Dir="res/"; -ExtGmsh = ".pos"; -ExtGnuplot = ".dat"; - -// -------------------------------------------------------------------------- -// -------------------------------------------------------------------------- -// -------------------------------------------------------------------------- - -If(Flag_SrcType_Stator==1) - UndefineConstant["Input/ZR"]; -EndIf - -If(Flag_Cir) - Include "pmsm_8p_circuit.pro" ; -EndIf -Include "machine_magstadyn_a.pro" ; - -DefineConstant[ ResolutionChoices = {"TimeDomain_Loop", Path "GetDP/1"} ]; -DefineConstant[ PostOperationChoices = {"Map_LocalFields", Path "GetDP/2"} ]; -DefineConstant[ ComputeCommand = {"-solve -v 1 -v2", Path "GetDP/9"} ]; diff --git a/contrib/mobile/Android/res/raw/pmsm_pro b/contrib/mobile/Android/res/raw/pmsm_pro deleted file mode 100644 index b9ee5ce16a..0000000000 --- a/contrib/mobile/Android/res/raw/pmsm_pro +++ /dev/null @@ -1,211 +0,0 @@ -// -// Permanent Magnet Synchronous Generator -// - -Include "pmsm_data.geo"; - -DefineConstant[ Flag_NL = {0, - Choices{ 0="Linear", - 1="Nonlinear BH curve"}, - Label "Fe magnetic law", - Path "Input/3", Highlight "Blue"} ] ; - -DefineConstant[ Flag_SrcType_Stator = {1, - Choices{ 0="None", - 1="Current" }, - Label "Source Type in Stator", - Path "Input/4", Highlight "Blue", Visible 1} ] ; - -DefineConstant[ Flag_SrcType_Rotor = {0, - Choices{ 0="None", - 1="Current" }, - Label "Source Type in Rotor", - Path "Input/5", Highlight "Blue", Visible 0} ] ; - -DefineConstant[ Flag_Cir = {!Flag_SrcType_Stator, Choices{0,1}, - Label "Use circuit in Stator", ReadOnly 1, Visible 0} ] ; - -Group { - Stator_Fe = #STATOR_FE ; - Stator_Al = #{}; - Stator_Cu = #{}; - Stator_Air = #STATOR_AIR ; - Stator_Airgap = #STATOR_AIRGAP ; - - Stator_Bnd_A0 = #STATOR_BND_A0 ; - Stator_Bnd_A1 = #STATOR_BND_A1 ; - - Rotor_Fe = #ROTOR_FE ; - Rotor_Al = #{}; - Rotor_Cu = #{}; - Stator_Air = #STATOR_AIR ; - Stator_Airgap = #STATOR_AIRGAP ; - Stator_Bnd_MB = #STATOR_BND_MOVING_BAND ; - Stator_Bnd_A0 = #STATOR_BND_A0 ; - Stator_Bnd_A1 = #STATOR_BND_A1 ; - - Rotor_Fe = #ROTOR_FE ; - Rotor_Air = #ROTOR_AIR ; - Rotor_Airgap = #ROTOR_AIRGAP ; - - Rotor_Bnd_A0 = #ROTOR_BND_A0 ; - Rotor_Bnd_A1 = #ROTOR_BND_A1 ; - - MovingBand_PhysicalNb = #MOVING_BAND ; // Fictitious number for moving band, not in the geo file - Surf_Inf = #SURF_EXT ; - Surf_bn0 = #SURF_INT ; - Surf_cutA0 = #{STATOR_BND_A0, ROTOR_BND_A0}; - Surf_cutA1 = #{STATOR_BND_A1, ROTOR_BND_A1}; - - Dummy = #NICEPOS; - - nbMagnets = NbrPolesTot/SymmetryFactor ; - For k In {1:nbMagnets} - Rotor_Magnet~{k} = Region[ (ROTOR_MAGNET+k-1) ]; - Rotor_Magnets += Region[ Rotor_Magnet~{k} ]; - EndFor - - nbInds = (Flag_Symmetry) ? NbrPoles*NbrSectTotStator/NbrPolesTot : NbrSectTotStator ; - Printf("NbrPoles=%g, nbInds=%g SymmetryFactor=%g", NbrPoles, nbInds, SymmetryFactor); - - Stator_Ind_Ap = #{}; Stator_Ind_Am = #{STATOR_IND_AM}; - Stator_Ind_Bp = #{}; Stator_Ind_Bm = #{STATOR_IND_BM}; - Stator_Ind_Cp = #{STATOR_IND_CP}; Stator_Ind_Cm = #{}; - If(NbrPoles > 1) - Stator_Ind_Ap += #STATOR_IND_AP; - Stator_Ind_Bp += #STATOR_IND_BP; - Stator_Ind_Cm += #STATOR_IND_CM; - EndIf - - PhaseA = Region[{ Stator_Ind_Ap, Stator_Ind_Am }]; - PhaseB = Region[{ Stator_Ind_Bp, Stator_Ind_Bm }]; - PhaseC = Region[{ Stator_Ind_Cp, Stator_Ind_Cm }]; - - // Provisional: Just one physical region for nice graph in Onelab - PhaseA_pos = Region[{ Stator_Ind_Am }]; - PhaseB_pos = Region[{ Stator_Ind_Bm }]; - PhaseC_pos = Region[{ Stator_Ind_Cp }]; - - Stator_IndsP = Region[{ Stator_Ind_Ap, Stator_Ind_Bp, Stator_Ind_Cp }]; - Stator_IndsN = Region[{ Stator_Ind_Am, Stator_Ind_Bm, Stator_Ind_Cm }]; - - Stator_Inds = Region[ {PhaseA, PhaseB, PhaseC} ] ; - Rotor_Inds = Region[ {} ] ; - - StatorC = Region[{ }] ; - StatorCC = Region[{ Stator_Fe }] ; - RotorC = Region[{ }] ; - RotorCC = Region[{ Rotor_Fe, Rotor_Magnets }] ; - - // Moving band: with or without symmetry, these BND lines must be complete - Stator_Bnd_MB = #STATOR_BND_MOVING_BAND; - For k In {1:SymmetryFactor} - Rotor_Bnd_MB~{k} = Region[ (ROTOR_BND_MOVING_BAND+k-1) ]; - Rotor_Bnd_MB += Region[ Rotor_Bnd_MB~{k} ]; - EndFor - Rotor_Bnd_MBaux = Region[ {Rotor_Bnd_MB, -Rotor_Bnd_MB~{1}}]; - -} - -// -------------------------------------------------------------------------- -// -------------------------------------------------------------------------- - -Function { - - mur_fe = 1000 ; - sigma_fe = 0 ; - - NbrPhases = 3 ; - NbrPolePairs = NbrPolesTot/2 ; - - DefineConstant[ b_remanent = { 1.2, Label "Remanent induction", Path "Input/3", Highlight "AliceBlue"} ] ; - // For a radial remanent b - For k In {1:nbMagnets} - br[ Rotor_Magnet~{k} ] = (-1)^(k-1) * b_remanent * Vector[ Cos[Atan2[Y[],X[]]], Sin[Atan2[Y[],X[]]], 0 ]; - EndFor - - Inominal = 3.9 ; // Nominal current - Tnominal = 2.5 ; // Nominal torque - - //Data for modeling a stranded inductor - NbWires[] = 104 ; // Number of wires per slot - // STATOR_IND_AM comprises all the slots in that phase, we need thus to divide by the number of slots - nbSlots[] = Ceil[nbInds/NbrPhases/2] ; - SurfCoil[] = SurfaceArea[]{STATOR_IND_AM}/nbSlots[] ;//All inductors have the same surface - - FillFactor_Winding = 0.5 ; // percentage of Cu in the surface coil side, smaller than 1 - Factor_R_3DEffects = 1.5 ; // bigger than Adding 50% of resistance - - DefineConstant[ rpm = { 500, - Label "speed in rpm", - Path "Input/7", Highlight "AliceBlue"} ]; // speed in rpm - wr = rpm/60*2*Pi ; // speed in rad_mec/s - - // supply at fixed position - DefineConstant[ Freq = {wr*NbrPolePairs/(2*Pi), ReadOnly 1, - Path "Output/1", Highlight "LightYellow" } ]; - Omega = 2*Pi*Freq ; - T = 1/Freq ; - - DefineConstant[ thetaMax_deg = { 180, Label "End rotor angle (loop)", - Path "Input/21", Highlight "AliceBlue" } ]; - - theta0 = InitialRotorAngle + 0. ; - thetaMax = thetaMax_deg * deg2rad ; // end rotor angle (used in doing a loop) - - DefineConstant[ NbTurns = { (thetaMax-theta0)/(2*Pi), Label "Number of revolutions", - Path "Input/24", Highlight "LightGrey", ReadOnly 1} ]; - - DefineConstant[ delta_theta_deg = { 1., Label "step in degrees", - Path "Input/22", Highlight "AliceBlue"} ]; - - delta_theta = delta_theta_deg * deg2rad ; - - time0 = 0 ; // at initial rotor position - delta_time = delta_theta/wr; - timemax = thetaMax/wr; - - DefineConstant[ NbSteps = { Ceil[(timemax-time0)/delta_time], Label "Number of steps", - Path "Input/23", Highlight "LightGrey", ReadOnly 1} ]; - - RotorPosition[] = InitialRotorAngle + $Time * wr ; - RotorPosition_deg[] = RotorPosition[]*180/Pi; - - Flag_ParkTransformation = 1 ; - Theta_Park[] = ((RotorPosition[] + Pi/8) - Pi/6) * NbrPolePairs; // electrical degrees - Theta_Park_deg[] = Theta_Park[]*180/Pi; - - DefineConstant[ ID = { 0, Path "Input/60", Label "Id stator current", Highlight "AliceBlue"}, - IQ = { Inominal, Path "Input/61", Label "Iq stator current", Highlight "AliceBlue"}, - I0 = { 0, Visible 0} ] ; - - If(Flag_SrcType_Stator==0) - UndefineConstant["Input/60ID"]; - UndefineConstant["Input/61IQ"]; - EndIf -} - -// -------------------------------------------------------------------------- -// -------------------------------------------------------------------------- -// -------------------------------------------------------------------------- - -Dir="res/"; -ExtGmsh = ".pos"; -ExtGnuplot = ".dat"; - -// -------------------------------------------------------------------------- -// -------------------------------------------------------------------------- -// -------------------------------------------------------------------------- - -If(Flag_SrcType_Stator==1) - UndefineConstant["Input/ZR"]; -EndIf - -If(Flag_Cir) - Include "pmsm_8p_circuit.pro" ; -EndIf -Include "machine_magstadyn_a.pro" ; - -DefineConstant[ ResolutionChoices = {"TimeDomain_Loop", Path "GetDP/1"} ]; -DefineConstant[ PostOperationChoices = {"Map_LocalFields", Path "GetDP/2"} ]; -DefineConstant[ ComputeCommand = {"-solve -v 1 -v2", Path "GetDP/9"} ]; diff --git a/contrib/mobile/Android/res/raw/pmsm_rotor_geo b/contrib/mobile/Android/res/raw/pmsm_rotor_geo deleted file mode 100644 index c051cf1a6d..0000000000 --- a/contrib/mobile/Android/res/raw/pmsm_rotor_geo +++ /dev/null @@ -1,163 +0,0 @@ -//-------------------------------------------------------------------------------- -// Rotor PMSM -//-------------------------------------------------------------------------------- -A = InitialRotorAngle-45/2*deg2rad + A1; // with Theta_Park - -sinA = Sin(A); cosA = Cos(A); -pntR[]+=newp; Point(newp)={rR1*cosA, rR1*sinA, 0, pR1}; -pntR[]+=newp; Point(newp)={rR2*cosA, rR2*sinA, 0, pR1}; -pntR[]+=newp; Point(newp)={rR4*cosA, rR4*sinA, 0, pR1}; -pntR[]+=newp; Point(newp)={rR5*cosA, rR5*sinA, 0, pR1}; -pntR[]+=newp; Point(newp)={rB1*cosA, rB1*sinA, 0, pR2}; - -For k In {0:#pntR[]-2} - linR0[]+=newl; Line(newl) = {pntR[k], pntR[k+1]}; -EndFor - -Transfinite Line{linR0[0]} = Ceil[(rR2-rR1)/pR1] ; -Transfinite Line{linR0[1]} = Ceil[(rR4-rR2)/pR1] ; -Transfinite Line{linR0[2]} = Ceil[(rR5-rR4)/pR1] ; -Transfinite Line{linR0[3]} = Ceil[(rB1-rR5)/pR1] ; - -For k In {0:#linR0[]-1} - linR1[] += Rotate {{0, 0, 1}, {0, 0, 0}, A0+A1} { Duplicata{Line{linR0[k]};} }; -EndFor - -AA[] = {(A0-Th_magnet)/2+A1, Th_magnet, (A0-Th_magnet)/2+A1} ; - -lin[] = Extrude {{0, 0, 1}, {0, 0, 0}, AA[0]} { Point{pntR[0]}; }; -cirR[]+=lin[1]; -lin[] = Extrude {{0, 0, 1}, {0, 0, 0}, AA[1]} { Point{lin[0]}; }; -cirR[]+=lin[1]; -lin[] = Extrude {{0, 0, 1}, {0, 0, 0}, AA[2]} { Point{lin[0]}; }; -cirR[]+=lin[1]; - -surfint[]=cirR[{0,1,2}] ; // boundary conditions - -pMagnet[] = Rotate {{0, 0, 1}, {0, 0, 0}, AA[0]} { Duplicata{Point{pntR[1]};} }; -lin[] = Extrude {{0, 0, 1}, {0, 0, 0}, AA[1]} { Point{pMagnet[0]}; }; -pMagnet[] += lin[0]; -cirR[] += lin[1] ; - -lin[] = Extrude {{0, 0, 1}, {0, 0, 0}, AA[0]} { Point{pntR[2]}; }; -cirR[]+=lin[1]; pMagnet[] += lin[0]; -pMagnet[] += Rotate {{0, 0, 1}, {0, 0, 0}, AA[1]} { Duplicata{Point{lin[0]};} }; -lin[] = Extrude {{0, 0, 1}, {0, 0, 0}, AA[2]} { Point{pMagnet[3]}; }; -cirR[]+=lin[1]; - -lin[] = Extrude {{0, 0, 1}, {0, 0, 0}, AA[0]} { Point{pntR[3]}; }; -cirR[]+=lin[1]; -lin[] = Extrude {{0, 0, 1}, {0, 0, 0}, AA[1]} { Point{lin[0]}; }; -cirR[]+=lin[1]; -lin[] = Extrude {{0, 0, 1}, {0, 0, 0}, AA[2]} { Point{lin[0]}; }; -cirR[]+=lin[1]; - -lin[] = Extrude {{0, 0, 1}, {0, 0, 0}, A0+A1} { Point{pntR[4]}; }; -cirR[]+=lin[1]; - -linR2[] = Rotate {{0, 0, 1}, {0, 0, 0}, (A0-Th_magnet)/2+A1} { Duplicata{Line{linR0[{1,2}]};} }; -linR3[] = Rotate {{0, 0, 1}, {0, 0, 0},-(A0-Th_magnet)/2+A1} { Duplicata{Line{linR1[{1,2}]};} }; - -// surfaces rotor -Line Loop(newll) = {linR0[{0,1}], cirR[4], -linR2[0], cirR[3], linR3[0], cirR[5], -linR1[{1,0}], -cirR[{2,1,0}]}; -srotor[0]=news; Plane Surface(srotor[0]) = {newll-1}; - -Line Loop(newl) = {linR2[1], cirR[7], -linR3[{1,0}], -cirR[3], linR2[0]}; -smagnet[0]=news; Plane Surface(smagnet[0]) = {newll-1}; - -nn = #cirR[]-1 ; -Line Loop(newll) = {cirR[{nn-5}], linR2[1], -cirR[{nn-3}], -linR0[2]}; -sairrotor[]+=news; Plane Surface(news) = {newll-1}; -Line Loop(newll) = {cirR[{nn-4}], linR1[2], -cirR[{nn-1}], -linR3[1]}; -sairrotor[]+=news; Plane Surface(news) = {newll-1}; - -Line Loop(newll) = {linR0[3], cirR[nn], -linR1[3], -cirR[{nn-1:nn-3:-1}]}; -sairrotormb[]+=news; Plane Surface(news) = {newll-1}; - -// ------------------------------------------------------------------------------- -// Moving band == AirGap rotor side -// ------------------------------------------------------------------------------- -Transfinite Line{cirR[nn]} = NbrDivMB+1 ; - -//Filling the gap for the whole 2*Pi -lineMBrotor[]=cirR[{nn}]; -For k In {1:NbrPolesTot-1} - lineMBrotoraux[]+=Rotate {{0, 0, 1}, {0, 0, 0}, k*A0} { Duplicata{Line{lineMBrotor[]};} }; -EndFor - -// ------------------------------------------------------------------------------- -// ------------------------------------------------------------------------------- -If(SymmetryFactor<8) -// FULL MODEL ==> Rotation of NbrPolesTot*Pi/4 -// For simplicity: rotating first the interior and exterior boundaries - - If (SymmetryFactor>1) - For k In {0:#linR1[]-1} - linR1_[] += Rotate {{0, 0, 1}, {0, 0, 0}, 2*Pi/SymmetryFactor-Pi/4} { Duplicata{Line{linR1[k]};} }; - EndFor - linR1[] = linR1_[]; - EndIf - - For k In {1:NbrPoles-1} - surfint[] += Rotate {{0, 0, 1}, {0, 0, 0}, k*Pi/4} { Duplicata{ Line{surfint[{0:2}]};} }; - EndFor - For k In {1:NbrPoles-1} - srotor[] += Rotate {{0, 0, 1}, {0, 0, 0}, k*Pi/4} { Duplicata{ Surface{srotor[0]};} }; - smagnet[]+= Rotate {{0, 0, 1}, {0, 0, 0}, k*Pi/4} { Duplicata{ Surface{smagnet[0]};} }; - sairrotor[] += Rotate {{0, 0, 1}, {0, 0, 0}, k*Pi/4} { Duplicata{ Surface{sairrotor[{0,1}]};} }; - sairrotormb[]+= Rotate {{0, 0, 1}, {0, 0, 0}, k*Pi/4} { Duplicata{ Surface{sairrotormb[0]};} }; - EndFor -EndIf - - -// ------------------------------------------------------------------------------- -// Physical regions -// ------------------------------------------------------------------------------- - -Physical Surface(ROTOR_FE) = {srotor[]}; // Rotor -Physical Surface(ROTOR_AIR) = {sairrotor[]}; // AirRotor -Physical Surface(ROTOR_AIRGAP) = {sairrotormb[]};// AirRotor for possible torque computation with Maxwell stress tensor - -NN = (Flag_Symmetry)?NbrPoles:NbrPolesTot; -For k In {0:NN-1} - Physical Surface(ROTOR_MAGNET+k) = {smagnet[k]}; // Magnets -EndFor - -Physical Line(SURF_INT) = {surfint[]}; // SurfInt - - -If(Flag_Symmetry) //Lines for symmetry link - Physical Line(ROTOR_BND_A0) = linR0[]; - Physical Line(ROTOR_BND_A1) = linR1[]; -EndIf - -lineMBrotor[] += lineMBrotoraux[] ; -If(!Flag_Symmetry) - Physical Line(ROTOR_BND_MOVING_BAND) = {lineMBrotor[]}; -EndIf -If(Flag_Symmetry) - nr = #lineMBrotor[]; - nnp = nr/(NbrPolesTot/NbrSect) ; - For k In {1:Floor[NbrPolesTot/NbrSect]} - kk= ((k*nnp-1) > nr) ? nr-1 : k*nnp-1 ; - Physical Line(ROTOR_BND_MOVING_BAND+k-1) = lineMBrotor[{(k-1)*nnp:kk}] ; - EndFor - k1 = Floor[NbrPolesTot/NbrSect]; - k2 = Ceil[NbrPolesTot/NbrSect]; - If (k2 > k1) - Physical Line(ROTOR_BND_MOVING_BAND+k2-1) = lineMBrotor[{(k2-1)*nnp:#lineMBrotor[]-1}] ; - EndIf -EndIf - -// For nice visualisation... -linRotor[] = CombinedBoundary{Surface{srotor[]};}; -linMagnet[] = Boundary{Surface{smagnet[]};}; - -nicepos_rotor[] += { linRotor[], linMagnet[] }; - -Color SteelBlue {Surface{srotor[]};} -Color SkyBlue {Surface{sairrotor[], sairrotormb[]};} -Color Orchid {Surface{smagnet[{0:#smagnet[]-1:2}]};} -If(#smagnet[]>1) -Color Purple {Surface{smagnet[{1:#smagnet[]-1:2}]};} -EndIf diff --git a/contrib/mobile/Android/res/raw/pmsm_stator_geo b/contrib/mobile/Android/res/raw/pmsm_stator_geo deleted file mode 100644 index e928a4a055..0000000000 --- a/contrib/mobile/Android/res/raw/pmsm_stator_geo +++ /dev/null @@ -1,215 +0,0 @@ -// ------------------------------------------------------------------------------- -// Moving band == AirGap stator side -// ------------------------------------------------------------------------------- -pntG[]+=newp; Point(newp) = {rB2, 0., 0., pS1}; // aligned with the stator -circ[] = Extrude {{0, 0, 1}, {0, 0, 0}, A0} { Point{pntG[0]}; }; -pntG[]+=circ[0]; -lineMBstator[]=circ[1]; -Transfinite Line{lineMBstator[0]} = NbrDivMB+1 ; - -//Filling the gap for the whole 2*Pi -For k In {1:NbrPolesTot-1} - lineMBstatoraux[]+= Rotate {{0, 0, 1}, {0, 0, 0}, k*A0} { Duplicata{Line{lineMBstator[0]};} }; -EndFor - -// ------------------------------------------------------------------------------- -// Stator -// ------------------------------------------------------------------------------- - -pntS[] = newp; Point(newp)={rS1, 0, 0, pS1}; -linS[] = newl; Line(newl) = {pntG[0], pntS[0]}; -linS[]+= Rotate {{0, 0, 1}, {0, 0, 0}, A0} { Duplicata{Line{linS[0]};} }; - -pntS[]+=newp; Point(newp)={rS7,0,0,pS2}; -points[]=Boundary{Line{linS[1]};}; -pntS[]+=points[1]; - -lin[] = Extrude {{0, 0, 1}, {0, 0, 0}, A0} { Point{pntS[1]}; }; -cirS[]= lin[1]; pntS[]+=lin[0]; - -linS[]+=newl; Line(newl) = {pntS[0], pntS[1]}; -linS[]+=newl; Line(newl) = {pntS[2], pntS[3]}; - -// ------------------------------------------------------------------------------- -// Slots -// ------------------------------------------------------------------------------- - -A2 = 0.0; -AA[]=deg2rad*{2.77+A2, 4.0+A2, 5.52+A2, 5.56+A2, 5.65+A2, 9.35+A2, 9.44+A2, 9.48+A2, 11+A2, 12.23+A2} ; - -For k In {0:#AA[]-1} - cosAA[]+=Cos(AA[k]); sinAA[]+=Sin(AA[k]); -EndFor - -pntSlot[]+=newp; Point(newp)={rS5*cosAA[0], rS5*sinAA[0], 0., pS3}; -pntSlot[]+=newp; Point(newp)={rS3*cosAA[1], rS3*sinAA[1], 0., pS3}; -pntSlot[]+=newp; Point(newp)={rS1*cosAA[2], rS1*sinAA[2], 0., pS3}; -pntSlot[]+=newp; Point(newp)={rS2*cosAA[3], rS2*sinAA[3], 0., pS3}; -pntSlot[]+=newp; Point(newp)={rS4*cosAA[3], rS4*sinAA[3], 0., pS3}; -pntSlot[]+=newp; Point(newp)={rS6*cosAA[4], rS6*sinAA[4], 0., pS3}; -pntSlot[]+=newp; Point(newp)={rS6*cosAA[5], rS6*sinAA[5], 0., pS3}; -pntSlot[]+=newp; Point(newp)={rS4*cosAA[6], rS4*sinAA[6], 0., pS3}; -pntSlot[]+=newp; Point(newp)={rS2*cosAA[6], rS2*sinAA[6], 0., pS3}; -pntSlot[]+=newp; Point(newp)={rS1*cosAA[7], rS1*sinAA[7], 0., pS3}; -pntSlot[]+=newp; Point(newp)={rS3*cosAA[8], rS3*sinAA[8], 0., pS3}; -pntSlot[]+=newp; Point(newp)={rS5*cosAA[9], rS5*sinAA[9], 0., pS3}; - -// air slot 1 -linASlot[]+=newl ; Line(newl)={pntSlot[2], pntSlot[3]}; -linASlot[]+=newl ; Line(newl)={pntSlot[3], pntSlot[1]}; -linASlot[]+=newl ; Circle(newl)={pntSlot[1], cen, pntSlot[10]}; -linASlot[]+=newl ; Line(newl)={pntSlot[10], pntSlot[8]}; -linASlot[]+=newl ; Line(newl)={pntSlot[8], pntSlot[9]}; -linASlot[]+=newl ; Circle(newl)={pntSlot[9], cen, pntSlot[2]}; - -Line Loop(newll) = {linASlot[]}; -sairslot[] += news ; Plane Surface(sairslot[0]) = {newll-1}; - -// coil slot 1 -linSlot[]+=newl ; Line(newl)={pntSlot[1], pntSlot[0]}; -linSlot[]+=newl ; Circle(newl)= {pntSlot[0], pntSlot[4], pntSlot[5]}; -linSlot[]+=newl ; Line(newl)={pntSlot[5], pntSlot[6]}; -linSlot[]+=newl ; Circle(newl)={pntSlot[6], pntSlot[7],pntSlot[11]}; -linSlot[]+=newl ; Line(newl)={pntSlot[11], pntSlot[10]}; - -Line Loop(newll) = {-linASlot[2],linSlot[]}; -sslot[] += news ; Plane Surface(sslot[0]) = {newll-1}; - -// slots 2 and 3 -A2 = 15*deg2rad; - -pntSlot0[0] = pntSlot[2]; -pntSlot1[0] = pntSlot[9]; -For k In{1:2} - pntSlot0[] += Rotate {{0, 0, 1}, {0, 0, 0}, A2} { Duplicata{Point{pntSlot0[k-1]};} }; - pntSlot1[] += Rotate {{0, 0, 1}, {0, 0, 0}, A2} { Duplicata{Point{pntSlot1[k-1]};} }; -EndFor - -For k In{1:2} - sslot[] += Rotate {{0, 0, 1}, {0, 0, 0}, A2} { Duplicata{Surface{sslot[k-1]};} }; - sairslot[] += Rotate {{0, 0, 1}, {0, 0, 0}, A2} { Duplicata{Surface{sairslot[k-1]};} }; -EndFor - -cSlot[]+=newl; Circle(newl) = {pntS[0], cen, pntSlot[2]}; -cSlot[]+=newl; Circle(newl) = {pntSlot1[0], cen, pntSlot0[1]}; -cSlot[]+=newl; Circle(newl) = {pntSlot1[1], cen, pntSlot0[2]}; -cSlot[]+=newl; Circle(newl) = {pntSlot1[2], cen, pntS[2]}; - -linesslot0[] = CombinedBoundary{ Surface{ sslot[0], sairslot[0] } ;}; -linesslot1[] = CombinedBoundary{ Surface{ sslot[1], sairslot[1] } ;}; -linesslot2[] = CombinedBoundary{ Surface{ sslot[2], sairslot[2] } ;}; - -Line Loop(newll) = {-lineMBstator[0],linS[0], cSlot[0],-linesslot0[{4}], - cSlot[1],-linesslot1[{9}], - cSlot[2],-linesslot2[{9}], cSlot[3], -linS[1]}; -sairgapS[0]=news; Plane Surface(sairgapS[0]) = {newll-1}; - -linesslot0[] -= linesslot0[{4}]; -linesslot1[] -= linesslot1[{9}]; -linesslot2[] -= linesslot2[{9}]; -Line Loop(newll) = { cSlot[0], linesslot0[], - cSlot[1], linesslot1[], - cSlot[2], linesslot2[], - cSlot[3], linS[3], -cirS[0], -linS[2]}; -sstator[0]=news; Plane Surface(sstator[0]) = {newll-1}; - -// ------------------------------------------------------------------------------- -// ------------------------------------------------------------------------------- - -auxlink[]=linS[{1,3}]; // A1 - -If(SymmetryFactor<8) - // FULL MODEL ==> Rotation of NbrPolesTot*Pi/4 - // For simplicity: rotating the interior and exterior boundaries - - If (SymmetryFactor>1) - For k In {0:#auxlink[]-1} - auxlink_[] += Rotate {{0, 0, 1}, {0, 0, 0}, 2*Pi/SymmetryFactor-Pi/4} { Duplicata{Line{auxlink[k]};} }; - EndFor - auxlink[] = auxlink_[]; - EndIf - - For k In {1:NbrPoles-1} - cirS[] += Rotate {{0, 0, 1}, {0, 0, 0}, k*Pi/4} { Duplicata{ Line{cirS[{0}]};} }; - EndFor - For k In {1:NbrPoles-1} - sstator[]+= Rotate {{0, 0, 1}, {0, 0, 0}, k*Pi/4} { Duplicata{ Surface{sstator[0]};} }; - sairgapS[]+= Rotate {{0, 0, 1}, {0, 0, 0}, k*Pi/4} { Duplicata{ Surface{sairgapS[0]};} }; - sairslot[]+= Rotate {{0, 0, 1}, {0, 0, 0}, k*Pi/4} { Duplicata{ Surface{sairslot[{0:2}]};} }; - sslot[]+= Rotate {{0, 0, 1}, {0, 0, 0}, k*Pi/4} { Duplicata{ Surface{sslot[{0:2}]};} }; - EndFor -EndIf - - - -// ------------------------------------------------------------------------------- -// ------------------------------------------------------------------------------- -// Physical regions -// ------------------------------------------------------------------------------- -// ------------------------------------------------------------------------------- - -Physical Surface(STATOR_FE) = {sstator[]}; // Stator -Physical Surface(STATOR_AIR) = {sairslot[]}; // AirStator -Physical Surface(STATOR_AIRGAP) = {sairgapS[]}; // AirStator for possible torque computation with Maxwell stress tensor - -NN = (Flag_Symmetry)?NbrSectStator:NbrSectTotStator; -//For k In {0:NN-1} -// Physical Surface(STATOR_IND+k) = {sslot[k]}; //Inds -//EndFor - -Physical Surface(STATOR_IND_AM) = {sslot[{0:NN-1:6}]}; -Physical Surface(STATOR_IND_CP) = {sslot[{1:NN-1:6}]}; -Physical Surface(STATOR_IND_BM) = {sslot[{2:NN-1:6}]}; -If(NbrSectStator>2) - Physical Surface(STATOR_IND_AP) = {sslot[{3:NN-1:6}]}; - Physical Surface(STATOR_IND_CM) = {sslot[{4:NN-1:6}]}; - Physical Surface(STATOR_IND_BP) = {sslot[{5:NN-1:6}]}; -EndIf - -Color Pink {Surface{ sslot[{0:NN-1:6}] };} // A- -Color ForestGreen {Surface{ sslot[{1:NN-1:6}] };} // C+ -Color PaleGoldenrod{Surface{ sslot[{2:NN-1:6}] };} // B- -If (#sslot[]>=6) -Color Red {Surface{ sslot[{3:NN-1:6}] };} // A+ -Color SpringGreen{Surface{ sslot[{4:NN-1:6}] };} // C- -Color Gold {Surface{ sslot[{5:NN-1:6}] };} // B+ -EndIf - - -Physical Line(SURF_EXT) = {cirS[]}; // SurfExt - -If(Flag_Symmetry) //Lines for symmetry link - Physical Line(STATOR_BND_A0) = linS[{0,2}]; - Physical Line(STATOR_BND_A1) = auxlink[] ; -EndIf - - -lineMBstator[] += lineMBstatoraux[] ; -If(!Flag_Symmetry) - Physical Line(STATOR_BND_MOVING_BAND) = {lineMBstator[]}; -EndIf -If(Flag_Symmetry) -ns = #lineMBstator[]; -nns = ns/SymmetryFactor ; -For k In {1:SymmetryFactor} - kk= ((k*nns-1) > ns) ? ns-1 : k*nns-1 ; - Physical Line(STATOR_BND_MOVING_BAND+k-1) = {lineMBstator[{(k-1)*nns:kk}]}; -EndFor - k1 = Floor[NbrPolesTot/NbrSect]; - k2 = Ceil[NbrPolesTot/NbrSect]; - If (k2 > k1) - Physical Line(STATOR_BND_MOVING_BAND+k2-1) = lineMBstator[{(k2-1)*nns:#lineMBstator[]-1}] ; - EndIf -EndIf - - -// For nice visualisation... -linStator[] = CombinedBoundary{Surface{sstator[]};}; -linSlot[] = CombinedBoundary{Surface{sslot[]};}; - -nicepos_stator[] += {linStator[],linSlot[] }; - -Color SteelBlue {Surface{sstator[]};} -Color SkyBlue {Surface{sairslot[],sairgapS[]};} - - diff --git a/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java b/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java index 87f177f177..1f0a1c6d81 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java @@ -41,7 +41,7 @@ public class ModelList extends Activity { ListView list = new ListView(this); Button loadSD = new Button(this); loadSD.setText(R.string.button_open_external_file); - loadSD.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT)); + loadSD.setLayoutParams(new ListView.LayoutParams(LayoutParams.MATCH_PARENT, ListView.LayoutParams.WRAP_CONTENT)); loadSD.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { diff --git a/contrib/mobile/Android/src/org/geuz/onelab/SplashScreen.java b/contrib/mobile/Android/src/org/geuz/onelab/SplashScreen.java index 21c8bb7261..56653765f1 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/SplashScreen.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/SplashScreen.java @@ -1,9 +1,10 @@ package org.geuz.onelab; +import java.io.BufferedInputStream; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Field; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; import android.app.Activity; import android.content.Context; @@ -59,34 +60,19 @@ public class SplashScreen extends Activity{ */ private void loadNative() { - for( Field f : R.raw.class.getFields()) { - try { - int Msh = f.getInt(null), i; - String androidName = getResources().getResourceEntryName(Msh); - StringBuilder tmp = new StringBuilder(androidName); - tmp.setCharAt(androidName.lastIndexOf('_'), '.'); - String nativeName = tmp.toString(); - /*if(new File(getFilesDir().toString()+"/"+nativeName).exists()){ - //TODO check if the files are the same - continue; - }*/ - InputStream mshFile = getResources().openRawResource(Msh); - - FileOutputStream outputStream = openFileOutput(nativeName, Context.MODE_WORLD_READABLE); - byte[] buffer = new byte[2048]; - - while ((i = mshFile.read(buffer, 0, buffer.length)) > 0) + try { + ZipInputStream zipStream = new ZipInputStream(new BufferedInputStream(getResources().openRawResource(R.raw.models))); + ZipEntry entry; + while ((entry = zipStream.getNextEntry()) != null) { + FileOutputStream outputStream = openFileOutput(entry.getName(), Context.MODE_PRIVATE); + byte[] buffer = new byte[2048]; + for (int i = zipStream.read(buffer, 0, buffer.length); i > 0;i = zipStream.read(buffer, 0, buffer.length)) outputStream.write(buffer,0,i); - - } catch (IllegalArgumentException e) { - Log.e("Load files", "Error " + e.toString()); - - } catch (IllegalAccessException e) { - Log.e("Load files", "Error " + e.toString()); - - } catch (IOException e) { - Log.e("Load files", "Error " + e.toString()); - } - } + Log.d("Load files", "Add " + entry.getName() + " from the zip file"); + } + zipStream.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } } } -- GitLab