[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

# 6. Complete examples

> 6.1 Electrostatic problem |  |
> 6.2 Magnetostatic problem |  |
> 6.3 Magnetodynamic problem |  |

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 6.1 Electrostatic problem

An elementary electrostatic problem is first considered. The formulation used is an electric scalar potential formulation (file ``EleSta_v.pro'`, including files ``Jacobian_Lib.pro'` and ``Integration_Lib.pro'`). It is applied to a microstrip line (file ``mStrip.pro'`), of which the geometry is defined in the file ``mStrip.geo'`: see C. Gmsh examples. The geometry is two-dimensional; one half of the structure is considered by symmetry.

The structure of the following files points out the separation of the data describing the particular problem and the method used to solve it, and therefore how it is possible to build black boxes adapted to well defined categories of problems. The files are commented (see section 1.3 Comments) and can be run without any modification.

    /* -------------------------------------------------------------------
       File "mStrip.pro"

       This file defines the problem dependent data structures for the
       microstrip problem.

       To compute the solution:
           getdp mStrip -solve EleSta_v

       To compute post-results:
           getdp mStrip -pos Map
        or getdp mStrip -pos Cut
       ------------------------------------------------------------------- */

    Group {

      /* Let's start by defining the interface (i.e. elementary groups)
         between the mesh file and GetDP (no mesh object is defined, so
         the default mesh will be assumed to be in GMSH format and located
         in "mStrip.msh") */

      Air = Region[101]; Diel1 = Region[111];
      Ground = Region[120]; Line = Region[121];
      SurfInf = Region[130];

      /* We can then define a global group (used in "EleSta_v.pro",
         the file containing the function spaces and formulations) */

      DomainCC_Ele = Region[{Air, Diel1}];

    }

    Function {

      /* The relative permittivity (needed in the formulation) is piecewise
         defined in elementary groups */

      epsr[Air] = 1.;
      epsr[Diel1] = 9.8;

    }

    Constraint {

      /* Now, some Dirichlet conditions are defined. The name
         'ElectricScalarPotential' refers to the constraint name given in
         the function space */

      { Name ElectricScalarPotential; Type Assign;
        Case {
          { Region Region[{Ground, SurfInf}]; Value 0.; }
          { Region Line; Value 1.e-3; }
        }
      }

    }

    /* The formulation used and its tools, considered as being
       in a black box, can now be included */

    Include "Jacobian_Lib.pro"
    Include "Integration_Lib.pro"
    Include "EleSta_v.pro"

    /* Finally, we can define some operations to output results */

    e = 1.e-7;

    PostOperation {
      { Name Map; NameOfPostProcessing EleSta_v;
         Operation {
           Print [ v, OnElementsOf DomainCC_Ele, File "mStrip_v.pos" ];
           Print [ e, OnElementsOf DomainCC_Ele, File "mStrip_e.pos" ];
         }
      }
      { Name Cut; NameOfPostProcessing EleSta_v;
         Operation {
           Print [ e, OnLine {{e,e,0}{10.e-3,e,0}} {500}, File "Cut_e" ];
         }
      }

    }

    /* -------------------------------------------------------------------
       File "EleSta_v.pro"

       Electrostatics - Electric scalar potential v formulation
       -------------------------------------------------------------------

       I N P U T
       ---------

       Global Groups :  (Extension '_Ele' is for Electric problem)
       -------------
       Domain_Ele               Whole electric domain (not used)
       DomainCC_Ele             Nonconducting regions
       DomainC_Ele              Conducting regions (not used)

       Function :
       --------
       epsr[]                   Relative permittivity

       Constraint :
       ----------
       ElectricScalarPotential  Fixed electric scalar potential
                                (classical boundary condition)

       Physical constants :
       ------------------                                               */

       eps0 = 8.854187818e-12;

    Group {
      DefineGroup[ Domain_Ele, DomainCC_Ele, DomainC_Ele ];
    }

    Function {
      DefineFunction[ epsr ];
    }

    FunctionSpace {
      { Name Hgrad_v_Ele; Type Form0;
        BasisFunction {
          // v = v  s   ,  for all nodes
          //      n  n
          { Name sn; NameOfCoef vn; Function BF_Node;
            Support DomainCC_Ele; Entity NodesOf[ All ]; }
        }
        Constraint {
          { NameOfCoef vn; EntityType NodesOf;
            NameOfConstraint ElectricScalarPotential; }
        }
      }
    }

    Formulation {
      { Name Electrostatics_v; Type FemEquation;
        Quantity {
          { Name v; Type Local; NameOfSpace Hgrad_v_Ele; }
        }
        Equation {
          Galerkin { [ epsr[] * Dof{d v} , {d v} ]; In DomainCC_Ele;
                     Jacobian Vol; Integration GradGrad; }
        }
      }
    }

    Resolution {
      { Name EleSta_v;
        System {
          { Name Sys_Ele; NameOfFormulation Electrostatics_v; }
        }
        Operation {
          Generate[Sys_Ele]; Solve[Sys_Ele]; SaveSolution[Sys_Ele];
        }
      }
    }

    PostProcessing {
      { Name EleSta_v; NameOfFormulation Electrostatics_v;
        Quantity {
          { Name v;
            Value {
              Local { [ {v} ]; In DomainCC_Ele; Jacobian Vol; }
            }
          }
          { Name e;
            Value {
              Local { [ -{d v} ]; In DomainCC_Ele; Jacobian Vol; }
            }
          }
          { Name d;
            Value {
              Local { [ -eps0*epsr[] * {d v} ]; In DomainCC_Ele;
                                                 Jacobian Vol; }
            }
          }
        }
      }
    }

    /* -------------------------------------------------------------------
       File "Jacobian_Lib.pro"

       Definition of a jacobian method
       -------------------------------------------------------------------

       I N P U T
       ---------

       GlobalGroup :
       -----------
       DomainInf                Regions with Spherical Shell Transformation

       Parameters :
       ----------
       Val_Rint, Val_Rext       Inner and outer radius of the Spherical Shell
                                of DomainInf
    */

    Group {
      DefineGroup[ DomainInf ] ;
      DefineVariable[ Val_Rint, Val_Rext ] ;
    }

    Jacobian {
      { Name Vol ;
        Case { { Region DomainInf ;
                 Jacobian VolSphShell {Val_Rint, Val_Rext} ; }
               { Region All ; Jacobian Vol ; }
        }
      }
    }

    /* -------------------------------------------------------------------
       File "Integration_Lib.pro"

       Definition of integration methods
       ------------------------------------------------------------------- */

    Integration {
      { Name GradGrad ;
        Case { {Type Gauss ;
                Case { { GeoElement Triangle    ; NumberOfPoints  4 ; }
                       { GeoElement Quadrangle  ; NumberOfPoints  4 ; }
                       { GeoElement Tetrahedron ; NumberOfPoints  4 ; }
                       { GeoElement Hexahedron  ; NumberOfPoints  6 ; }
                       { GeoElement Prism       ; NumberOfPoints  9 ; } }
               }
             }
      }
      { Name CurlCurl ;
        Case { {Type Gauss ;
                Case { { GeoElement Triangle    ; NumberOfPoints  4 ; }
                       { GeoElement Quadrangle  ; NumberOfPoints  4 ; }
                       { GeoElement Tetrahedron ; NumberOfPoints  4 ; }
                       { GeoElement Hexahedron  ; NumberOfPoints  6 ; }
                       { GeoElement Prism       ; NumberOfPoints  9 ; } }
               }
             }
      }
    }

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 6.2 Magnetostatic problem

A magnetostatic problem is considered. The formulation used is a 2D magnetic vector potential formulation (see file ``MagSta_a_2D.pro'`). It is applied to a core-inductor system (file ``CoreSta.pro'`), of which the geometry is defined in file ``Core.geo'` (see section C. Gmsh examples). The geometry is two-dimensional; one fourth of the structure is considered by symmetry.

The jacobian and integration methods used are the same as for the electrostatic problem presented in 6.1 Electrostatic problem.

    /* -------------------------------------------------------------------
       File "CoreSta.pro"

       This file defines the problem dependent data structures for the
       static core-inductor problem.

       To compute the solution:
           getdp CoreSta -msh Core.msh -solve MagSta_a_2D

       To compute post-results:
           getdp CoreSta -msh Core.msh -pos Map_a
       ------------------------------------------------------------------- */

    Group {

      Air    = Region[ 101 ];   Core   = Region[ 102 ];
      Ind    = Region[ 103 ];   AirInf = Region[ 111 ];

      SurfaceGh0  = Region[ 1100 ];  SurfaceGe0 = Region[ 1101 ];
      SurfaceGInf = Region[ 1102 ];

      Val_Rint = 200.e-3;
      Val_Rext = 250.e-3;

      DomainCC_Mag = Region[ {Air, AirInf, Core, Ind} ];
      DomainC_Mag  = Region[ {} ];
      DomainS_Mag  = Region[ {Ind} ]; // Stranded inductor
      DomainInf    = Region[ {AirInf} ];
      Domain_Mag   = Region[ {DomainCC_Mag, DomainC_Mag} ];

    }

    Function {

      mu0 = 4.e-7 * Pi;
      murCore = 100.;

      nu [ Region[{Air, Ind, AirInf}] ]  = 1. / mu0;
      nu [ Core ]  = 1. / (murCore * mu0);

      Sc[ Ind ] = 2.5e-2 * 5.e-2;

    }

    Constraint {

      { Name MagneticVectorPotential_2D;
        Case {
          { Region SurfaceGe0 ; Value 0.; }
          { Region SurfaceGInf; Value 0.; }
        }
      }

      Val_I_1_ = 0.01 * 1000.;

      { Name SourceCurrentDensityZ;
        Case {
          { Region Ind; Value Val_I_1_/Sc[]; }
        }
      }

    }

    Include "Jacobian_Lib.pro"
    Include "Integration_Lib.pro"
    Include "MagSta_a_2D.pro"

    e = 1.e-5;
    p1 = {e,e,0};
    p2 = {0.12,e,0};

    PostOperation {

      { Name Map_a; NameOfPostProcessing MagSta_a_2D;
        Operation {
          Print[ az, OnElementsOf Domain_Mag, File "CoreSta_a.pos" ];
          Print[ b, OnLine{{List[p1]}{List[p2]}} {1000}, File "k_a" ];
        }
      }

    }

    /* -------------------------------------------------------------------
       File "MagSta_a_2D.pro"

        Magnetostatics - Magnetic vector potential a formulation (2D)
       -------------------------------------------------------------------

       I N P U T
       ---------

       GlobalGroup :  (Extension '_Mag' is for Magnetic problem)
       -----------
       Domain_Mag               Whole magnetic domain
       DomainS_Mag              Inductor regions (Source)

       Function :
       --------
       nu[]                     Magnetic reluctivity

       Constraint :
       ----------
       MagneticVectorPotential_2D
                                Fixed magnetic vector potential (2D)
                                (classical boundary condition)
       SourceCurrentDensityZ    Fixed source current density (in Z direction)
    */

    Group {
      DefineGroup[ Domain_Mag, DomainS_Mag ];
    }

    Function {
      DefineFunction[ nu ];
    }

    FunctionSpace {

      // Magnetic vector potential a (b = curl a)
      { Name Hcurl_a_Mag_2D; Type Form1P;
        BasisFunction {
          // a = a  s
          //      e  e
          { Name se; NameOfCoef ae; Function BF_PerpendicularEdge;
            Support Domain_Mag; Entity NodesOf[ All ]; }
        }
        Constraint {
          { NameOfCoef ae; EntityType NodesOf;
            NameOfConstraint MagneticVectorPotential_2D; }
        }
      }

      // Source current density js (fully fixed space)
      { Name Hregion_j_Mag_2D; Type Vector;
        BasisFunction {
          { Name sr; NameOfCoef jsr; Function BF_RegionZ;
            Support DomainS_Mag; Entity DomainS_Mag; }
        }
        Constraint {
          { NameOfCoef jsr; EntityType Region;
            NameOfConstraint SourceCurrentDensityZ; }
        }
      }

    }

    Formulation {
      { Name Magnetostatics_a_2D; Type FemEquation;
        Quantity {
          { Name a ; Type Local; NameOfSpace Hcurl_a_Mag_2D; }
          { Name js; Type Local; NameOfSpace Hregion_j_Mag_2D; }
        }
        Equation {
          Galerkin { [ nu[] * Dof{d a} , {d a} ]; In Domain_Mag;
                     Jacobian Vol; Integration CurlCurl; }
          Galerkin { [ - Dof{js} , {a} ]; In DomainS_Mag;
                     Jacobian Vol; Integration CurlCurl; }
        }
      }
    }

    Resolution {
      { Name MagSta_a_2D;
        System {
          { Name Sys_Mag; NameOfFormulation Magnetostatics_a_2D; }
        }
        Operation {
          Generate[Sys_Mag]; Solve[Sys_Mag]; SaveSolution[Sys_Mag];
        }
      }
    }

    PostProcessing {
      { Name MagSta_a_2D; NameOfFormulation Magnetostatics_a_2D;
        Quantity {
          { Name a;
            Value {
              Local { [ {a} ]; In Domain_Mag; Jacobian Vol; }
            }
          }
          { Name az;
            Value {
              Local { [ CompZ[{a}] ]; In Domain_Mag; Jacobian Vol; }
            }
          }
          { Name b;
            Value {
              Local { [ {d a} ]; In Domain_Mag; Jacobian Vol; }
            }
          }
          { Name h;
            Value {
              Local { [ nu[] * {d a} ]; In Domain_Mag; Jacobian Vol; }
            }
          }
        }
      }
    }

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 6.3 Magnetodynamic problem

A magnetodynamic problem is considered. The formulation is a two-dimensional a-v formulation (see file ``MagDyn_av_2D.pro'`, which includes the same jacobian and integration library files as in the previous section). It is applied to a core-inductor system (defined in file ``CoreMassive.pro'`), of which the geometry has already been defined in file ``Core.geo'` (giving file ``Core.msh'` with Gmsh; see section 8.1 Input file format).

The jacobian and integration methods used are defined in the same file as in the electrostatic problem in 6.1 Electrostatic problem.

    /* -------------------------------------------------------------------
       File "CoreMassive.pro"

       This file defines the problem dependent data structures for the
       dynamic core-inductor problem.

       To compute the solution:
            getdp CoreMassive -msh Core.msh -solve MagDyn_av_2D

       To compute post-results:
            getdp CoreMassive -msh Core.msh -pos Map_a
            getdp CoreMassive -msh Core.msh -pos U_av
       ------------------------------------------------------------------- */

    Group {

      Air    = Region[ 101 ];   Core   = Region[ 102 ];
      Ind    = Region[ 103 ];   AirInf = Region[ 111 ];

      SurfaceGh0  = Region[ 1100 ];  SurfaceGe0 = Region[ 1101 ];
      SurfaceGInf = Region[ 1102 ];

      Val_Rint = 200.e-3;
      Val_Rext = 250.e-3;

      DomainCC_Mag = Region[ {Air, AirInf} ];
      DomainC_Mag  = Region[ {Ind, Core} ]; // Massive inductor + conducting core
      DomainB_Mag  = Region[ {} ];
      DomainS_Mag  = Region[ {} ];
      DomainInf    = Region[ {AirInf} ];
      Domain_Mag   = Region[ {DomainCC_Mag, DomainC_Mag} ];

    }

    Function {

      mu0 = 4.e-7 * Pi;

      murCore = 100.;

      nu [ #{Air, Ind, AirInf} ]  = 1. / mu0;
      nu [ Core ]  = 1. / (murCore * mu0);
      sigma [ Ind ] = 5.9e7;
      sigma [ Core ] = 2.5e7;

      Freq = 1.;

    }

    Constraint {

      { Name MagneticVectorPotential_2D;
        Case {
          { Region SurfaceGe0 ; Value 0.; }
          { Region SurfaceGInf; Value 0.; }
        }
      }

      { Name SourceCurrentDensityZ;
        Case {
        }
      }

      Val_I_ = 0.01 * 1000.;

      { Name Current_2D;
        Case {
          { Region Ind; Value Val_I_; }
        }
      }

      { Name Voltage_2D;
        Case {
          { Region Core; Value 0.; }
        }
      }

    }

    Include "Jacobian_Lib.pro"
    Include "Integration_Lib.pro"
    Include "MagDyn_av_2D.pro"

    PostOperation {
      { Name Map_a; NameOfPostProcessing MagDyn_av_2D;
        Operation {
          Print[ az, OnElementsOf Domain_Mag, File "Core_m_a.pos" ];
          Print[ j, OnElementsOf Domain_Mag, File "Core_m_j.pos" ];
        }
      }
      { Name U_av;  NameOfPostProcessing MagDyn_av_2D;
        Operation {
          Print[ U, OnRegion Ind ];
          Print[ I, OnRegion Ind ];
        }
      }
    }

    /* -------------------------------------------------------------------
       File "MagDyn_av_2D.pro"

        Magnetodynamics - Magnetic vector potential and electric scalar
                          potential a-v formulation (2D)
       -------------------------------------------------------------------

       I N P U T
       ---------

       GlobalGroup :  (Extension '_Mag' is for Magnetic problem)
       -----------
       Domain_Mag               Whole magnetic domain
       DomainCC_Mag             Nonconducting regions (not used)
       DomainC_Mag              Conducting regions
       DomainS_Mag              Inductor regions (Source)
       DomainV_Mag              All regions in movement (for speed term)

       Function :
       --------
       nu[]                     Magnetic reluctivity
       sigma[]                  Electric conductivity

       Velocity[]               Velocity of regions

       Constraint :
       ----------
       MagneticVectorPotential_2D
                                Fixed magnetic vector potential (2D)
                                (classical boundary condition)
       SourceCurrentDensityZ    Fixed source current density (in Z direction)

       Voltage_2D               Fixed voltage
       Current_2D               Fixed Current

       Parameters :
       ----------

       Freq                     Frequency (Hz)

       Parameters for time loop with theta scheme :
       Mag_Time0, Mag_TimeMax, Mag_DTime
                                Initial time, Maximum time, Time step  (s)
       Mag_Theta                Theta  (e.g. 1.  : Implicit Euler,
                                             0.5 : Cranck Nicholson)
    */

    Group {
      DefineGroup[ Domain_Mag, DomainCC_Mag, DomainC_Mag,
                   DomainS_Mag, DomainV_Mag ];
    }

    Function {
      DefineFunction[ nu, sigma ];
      DefineFunction[ Velocity ];
      DefineVariable[ Freq ];
      DefineVariable[ Mag_Time0, Mag_TimeMax, Mag_DTime, Mag_Theta ];
    }

    FunctionSpace {

      // Magnetic vector potential a (b = curl a)
      { Name Hcurl_a_Mag_2D; Type Form1P;
        BasisFunction {
          // a = a  s
          //      e  e
          { Name se; NameOfCoef ae; Function BF_PerpendicularEdge;
            Support Domain_Mag; Entity NodesOf[ All ]; }
        }
        Constraint {
          { NameOfCoef ae; EntityType NodesOf;
            NameOfConstraint MagneticVectorPotential_2D; }
        }
      }

      // Gradient of Electric scalar potential (2D)
      { Name Hregion_u_Mag_2D; Type Form1P;
        BasisFunction {
          { Name sr; NameOfCoef ur; Function BF_RegionZ;
            Support DomainC_Mag; Entity DomainC_Mag; }
        }
        GlobalQuantity {
          { Name U; Type AliasOf       ; NameOfCoef ur; }
          { Name I; Type AssociatedWith; NameOfCoef ur; }
        }
        Constraint {
          { NameOfCoef U; EntityType Region;
            NameOfConstraint Voltage_2D; }
          { NameOfCoef I; EntityType Region;
            NameOfConstraint Current_2D; }
        }
      }

      // Source current density js (fully fixed space)
      { Name Hregion_j_Mag_2D; Type Vector;
        BasisFunction {
          { Name sr; NameOfCoef jsr; Function BF_RegionZ;
            Support DomainS_Mag; Entity DomainS_Mag; }
        }
        Constraint {
          { NameOfCoef jsr; EntityType Region;
            NameOfConstraint SourceCurrentDensityZ; }
        }
      }

    }

    Formulation {
      { Name Magnetodynamics_av_2D; Type FemEquation;
        Quantity {
          { Name a ; Type Local ; NameOfSpace Hcurl_a_Mag_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 js; Type Local ; NameOfSpace Hregion_j_Mag_2D; }
        }
        Equation {
          Galerkin { [ nu[] * Dof{d a} , {d a} ]; In Domain_Mag;
                     Jacobian Vol; Integration CurlCurl; }

          Galerkin { DtDof [ sigma[] * Dof{a} , {a} ]; In DomainC_Mag;
                     Jacobian Vol; Integration CurlCurl; }
          Galerkin { [ sigma[] * Dof{ur} , {a} ]; In DomainC_Mag;
                     Jacobian Vol; Integration CurlCurl; }

          Galerkin { [ - sigma[] * (Velocity[] *^ Dof{d a}) , {a} ];
                     In DomainV_Mag;
                     Jacobian Vol; Integration CurlCurl; }

          Galerkin { [ - Dof{js} , {a} ]; In DomainS_Mag;
                     Jacobian Vol;
                     Integration CurlCurl; }

          Galerkin { DtDof [ sigma[] * Dof{a} , {ur} ]; In DomainC_Mag;
                     Jacobian Vol; Integration CurlCurl; }
          Galerkin { [ sigma[] * Dof{ur} , {ur} ]; In DomainC_Mag;
                     Jacobian Vol; Integration CurlCurl; }
          GlobalTerm { [ Dof{I} , {U} ]; In DomainC_Mag; }
        }
      }
    }

    Resolution {
      { Name MagDyn_av_2D;
        System {
          { Name Sys_Mag; NameOfFormulation Magnetodynamics_av_2D;
            Type ComplexValue; Frequency Freq; }
        }
        Operation {
          Generate[Sys_Mag]; Solve[Sys_Mag]; SaveSolution[Sys_Mag];
        }
      }

      { Name MagDyn_t_av_2D;
        System {
          { Name Sys_Mag; NameOfFormulation Magnetodynamics_av_2D; }
        }
        Operation {
          InitSolution[Sys_Mag]; SaveSolution[Sys_Mag];
          TimeLoopTheta[Mag_Time0, Mag_TimeMax, Mag_DTime, Mag_Theta] {
            Generate[Sys_Mag]; Solve[Sys_Mag]; SaveSolution[Sys_Mag];
          }
        }
      }

    }

    PostProcessing {
      { Name MagDyn_av_2D; NameOfFormulation Magnetodynamics_av_2D;
        Quantity {
          { Name a;
            Value {
              Local { [ {a} ]; In Domain_Mag; Jacobian Vol; }
            }
          }
          { Name az;
            Value {
              Local { [ CompZ[{a}] ]; In Domain_Mag; Jacobian Vol; }
            }
          }
          { Name b;
            Value {
              Local { [ {d a} ]; In Domain_Mag; Jacobian Vol; }
            }
          }
          { Name h;
            Value {
              Local { [ nu[] * {d a} ]; In Domain_Mag; Jacobian Vol; }
            }
          }
          { Name j;
            Value {
              Local { [ - sigma[]*(Dt[{a}]+{ur}) ]; In DomainC_Mag;
                      Jacobian Vol; }
            }
          }
          { Name jz;
            Value {
              Local { [ - sigma[]*CompZ[Dt[{a}]+{ur}] ]; In DomainC_Mag;
                      Jacobian Vol; }
            }
          }
          { Name roj2;
            Value {
              Local { [ sigma[]*SquNorm[Dt[{a}]+{ur}] ]; In DomainC_Mag;
                      Jacobian Vol; }
            }
          }
          { Name U; Value { Local { [ {U} ]; In DomainC_Mag; } } }
          { Name I; Value { Local { [ {I} ]; In DomainC_Mag; } } }
        }
      }
    }

[ << ] | [ >> ] |  |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

Back to geuz.org/getdp