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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 F{{j_7i|qga 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