Hi,
I have some trouble generating the mesh of a "slice" of our magnets
especially for the region "Air' defined in HR_New_Virtual_Sphere.geo.

The geometry is defined in HR_New_GMSH.geo which includes several files.
The construction is parametrized (see data in HR_New-DAT.dat) : first we
build the magnet (see functions defined in HR_New-GEO.geo) then we
define the air around (see HR_New_Virtual_Sphere.geo which defines Air
and AirInf ) to compute the magnetic field generated by the magnet. 

The trouble is that I cannot get a volumic mesh of the Air region...
I only have a mesh of the "Air" boundaries.

I must do something wrong in the definition of the Air region?
I would be grateful for any help to fix this problem

Best
C 


/// 2D mesh algorithm (1=MeshAdapt, 2=Automatic, 5=Delaunay, 6=Frontal, 7=bamg, 8=delquad)
Mesh.Algorithm=2;

// 3D mesh algorithm (1=Delaunay, 4=Frontal, 5=Frontal Delaunay, 6=Frontal Hex, 7=MMG3D)
Mesh.Algorithm3D=6;

// Remeshing algorithm (0=no split, 1=automatic, 2=automatic only with metis)
Mesh.RemeshAlgorithm=0;

// Remesh Parametrization (0=harmonic, 1=conformal, 2=rbf harmonic)
Mesh.RemeshParametrization=0;

// Mesh recombination algorithm (0=standard, 1=blossom)
Mesh.RecombinationAlgorithm=0;
    
// Mesh coloring (0=by element type, 1=by elementary entity, 2=by physical entity, 3=by partition)
Mesh.ColorCarousel=2;

//Mesh.NbPartitions = 1;
//Mesh.Smoothing = 5;
//Mesh.Optimize = 1;


/*-----------------------------------------------
-------------PARAMETRES UTILISATEURS-------------
------------------------------------------------*/


Include "HR_New-DAT.dat";

/*-----------------------------------------------
-------CONSTRUCTION SECTEUR AVEC KAPTON----------
------------------------------------------------*/
Include "HR_New-GEO.geo";

/*-----------------------------------------------
------------DEFINITIONS--------------------
------------------------------------------------*/


num_bord_r = 0;
Bord_RI[] = {};
Bord_RE[] = {};

num_n = 0;
Bord_Neumann[] = {};

num_h = 0;
Bord_RChannel[]={};

num_r = 0;
Bord_RChannel[]={};

num_i = 0;
Bord_Isolant[]={};

/*-----------------------------------------------
------------BOUCLE PRINCIPALE--------------------
------------------------------------------------*/
 
z=z0-Ep_Isolant;
t=0;
EpaisseurSpire=h[0];
Printf("-------------------------------");
Printf("spire=%g",t);Printf("h[%g]=%g (m)",t,h[t]);

t_end=Nb_spires-1;
If (ends)
   Call GeomSpire;
   t_end +=1;
EndIf

z=z0+EpaisseurSpire;
For t In {1:(t_end)} //Nb_spires
    EpaisseurSpire=h[t];
    If ( t >= Start_spire_number &&  t <= End_spire_number ) 
       Call GeomSpire;

       If(isolant)
	   Call GeomIsol;
       EndIf
       Coherence;
    EndIf
    z +=EpaisseurSpire+Ep_Isolant; // Printf("z=%g",z);
    If ( ends==0 && t == End_spire_number ) 
       If (isolant)
          Call GeomIsol;
       EndIf
       Coherence;
    EndIf

EndFor

Call Physical_Region;

/*-----------------------------------------------
------------Surrounding Air   --------------------
------------------------------------------------*/


If(sphere)
   LcAxis = 0.1*Unit ; 
   LcBox = 5*Unit ; 
   LcInf = 10*Unit ; 
   R=0.8*Height; //200*Unit;
   Delta_R=2*Height; //10*Unit;
   Include "HR_New_Virtual_Sphere.geo";
   Call Virtual_Sphere ;
EndIf


/******************************************************************************************
 PARAMETRES UTILISATEURS
*******************************************************************************************/

 hexas=0;        // Maillage Hexas -- to be implemented using blossom and quad. support
 isolant=0;      // Presence de l'isolant
 sphere=1;       // Precense de l'infini
 ends=1;         // Presence des extremites helices
 

/******************************************************************************************
 Definition unite de longueur 
*******************************************************************************************/

 Unit      = 1.e-3; //(conversion mm --> m)

/******************************************************************************************
 Definition de la geometrie
*******************************************************************************************/

 Rint      = 61.2*0.5*Unit ;  // Valeur du Rayon interieur (mm)
 Rext      = 106.4*0.5*Unit ; // Valeur du Rayon exterieur (mm)

 Nb_spires = 34; //34 ; // Nombres de spires
 Nb_isolants = 8 ; // Nombre d'isolants par spire

 Ep_Isolant = 0.2*Unit; // Valeur de l'epaisseur de l'isolant (mm)

 /* Eventually choose a specific spire from 0 to Nb_spires+1 */
 Start_spire_number = 0;
 End_spire_number = Nb_spires+1;


/******************************************************************************************
 Definition des hauteurs des spires 
*******************************************************************************************/

 h[1] = 4.61*Unit;h[2] = 4.61*Unit;h[3] = 4.96*Unit;h[4] = 5.33*Unit;h[5] = 5.11*Unit;
 h[6] = 4.61*Unit;h[7] = 4.61*Unit;h[8] = 4.61*Unit;h[9] = 4.61*Unit;h[10] = 4.61*Unit;
 h[11] = 4.61*Unit;h[12] = 4.61*Unit;h[13] = 4.61*Unit;h[14] = 4.61*Unit;h[15] = 4.61*Unit;
 h[16] = 4.61*Unit;h[17] = 4.61*Unit;h[18] = 4.61*Unit;h[19] = 4.61*Unit;h[20] = 4.61*Unit;
 h[21] = 4.61*Unit;h[22] = 4.61*Unit;h[23] = 4.61*Unit;h[24] = 4.61*Unit;h[25] = 4.61*Unit;
 h[26] = 4.61*Unit;h[27] = 4.61*Unit;h[28] = 4.61*Unit;h[29] = 4.61*Unit;h[30] = 4.75*Unit;
 h[31] = 5.33*Unit;h[32] = 5.32*Unit;h[33] = 4.61*Unit;h[34] = 4.61*Unit;

 // 1st Nth spire
 Nb_spires++;

 // Extremites

 If (ends) 
   h[0]=42.54*Unit;
   h[Nb_spires]=52.76*Unit;
 EndIf

 Spire_Milieu = (Nb_spires-1)/2+1;//18

 Height = 0;
 For i In {0:#h[]-1}
    Height += h[i]; 
 EndFor
 Height += (#h[]-1) * Ep_Isolant;
 Printf("Height=%g", Height);

 Active_Height = Height;
 If (!ends)
    Active_Height -= h[0]+h[Nb_spires]-2*Ep_Isolant);
 EndIf
 Printf("Active_Height = %g m", Active_Height);
 
 Z_Spire_Milieu =  Active_Height /2.;
 Printf("Z_Spire_Milieu = %g m", Z_Spire_Milieu);
 
 Printf("%g %g %g", End_spire_number, Start_spire_number, Nb_spires);
 If ( End_spire_number-Start_spire_number != Nb_spires )
    ends = 0;
    sphere = 0;
 EndIf

/*******************************************************************************************
 Definition de la "TUILE"

  Forme generique :
    


      AngleIsolant_Int
         <---->
	|____|..................
     ___/     \___...............|H_TUILE 
    |   |      |  |
    |   <------>  |
    | AngleIsolant_Mil
    |             |
    <------------->
 AngleIsolant_Ext=Longueur angulaire de l'isolant en degre
 
*******************************************************************************************/

 AngleIsolant_Ext= 10;   // Angle Exterieur de l'isolant (deg�)
 AngleIsolant_Mil= 7.5;    // Angle Mileu de l'isolant (deg�)
 AngleIsolant_Int= 4;   // Angle Interieur de l'isolant (deg�)

 TUILE=1;
 H_TUILE=0.9*Unit; //Valeur hauteur tuile (mm)

/*******************************************************************************************
 Definition du canal
 
******************************************************************************************/
 
 Canal = 1;
 H_canal= 0.2*Unit;    // Hauteur du canal de refroidissement
 lg_canal= 1.5*Unit; // Valeur Largeur du canal (mm)
 
 /* Position en z des spires*/
 z0 =0;

/*****************************************************************************************
  Caracteristiques du Maillage
*******************************************************************************************/

 LcSpire = 1*Unit ; 
 LcCanal = 0.5*Unit; 
 
/*****************************************************************************************
  Affichage caracteristiques Helices
*******************************************************************************************/


 Printf("Rayon Interieur (m) = %g",Rint);
 Printf("Rayon Exterieur(m) = %g",Rext);
 Printf("Nombre de spires = %g",Nb_spires);
 Printf("Nombre d'isolants par spire = %g",Nb_isolants);
 Printf("Epaisseur isolant (m) = %g",Ep_Isolant);
 /***
 For t In {0:#h[]-1}
     Printf("Spire[%g] h = %g m",t, h[t]);
 EndFor
 ****/
 Printf("Angle Exterieur de l'isolant (�) = %g",AngleIsolant_Ext);
 Printf("Angle Mileu de l'isolant (�) = %g",AngleIsolant_Mil);
 Printf("Angle Interieur de l'isolant (�) = %g",AngleIsolant_Int);
/*-------------------------------------------------
-----------------FONCTIONS------------------------
------------------------------------------------*/

 in_isolant = 0;

 /* Position en z des spires*/
 z0 = -Z_Spire_Milieu;
 
 TetaKapton_ext = (Pi*AngleIsolant_Ext)/180. ; // Angle Exterieur de l'isolant (rad)
 TetaKapton_mid = (Pi*AngleIsolant_Mil)/180. ; // Angle Mileu de l'isolant (rad)
 TetaKapton_int = (Pi*AngleIsolant_Int)/180. ; // Angle Mileu de l'isolant (rad)
 
 lg_canal2 = lg_canal+(0.1*Unit); // largeur du canal2----> points necessaires pour un maillage Transfinite
 
 /* Store angles into a table */
 alpha[] = {}; 
 is_tuile[] = {};
 is_canal[] = {};
 is_line[] = {};
 
 alpha[0] = -(2*Pi)/Nb_isolants /2.; is_tuile[0] = 0; is_canal[0] = 0; is_line[0] = 0; //P0
 alpha[1] = -(TetaKapton_ext/2); is_tuile[1] = 0; is_canal[1] = 0; is_line[1] = 0; //P1
 
 i=1;
 If ( TUILE )
    i++; alpha[i] = -(TetaKapton_mid/2); is_tuile[i] = 0; is_canal[i] = 0; is_line[i] = 0; //P2
    i++; alpha[i] = -(TetaKapton_int/2); is_tuile[i] = 1; is_canal[i] = 0; is_line[i] = 1; //P3

    If ( Canal ) 
       i++; alpha[i] = NaN; is_tuile[i] = 1; is_canal[i] = 1; is_line[i] = 0; //P4
       i++; alpha[i] = NaN; is_tuile[i] = 0; is_canal[i] = 1; is_line[i] = 1; //P5
    EndIf
 EndIf
     
 i++; alpha[i] = 0; mid_point = i;                           // P6    

 If ( TUILE )
    is_tuile[i] = 1; is_canal[i] = 0; is_line[i] = 0;
    
    If ( Canal )
       is_canal[i] = 1; 
       i++; alpha[i] = NaN; is_tuile[i] = 0; is_canal[i] = 1; is_line[i] = 0; // P7
       i++; alpha[i] = NaN; is_tuile[i] = 1; is_canal[i] = 1; is_line[i] = 1; // P8
    EndIf
    
    i++; alpha[i] = (TetaKapton_int/2); is_tuile[i] = 1; is_canal[i] = 0; is_line[i] = 0; // P9
    i++; alpha[i] = (TetaKapton_mid/2); is_tuile[i] = 0; is_canal[i] = 0; is_line[i] = 1; // P10
EndIf
     
i++; alpha[i] = (TetaKapton_ext/2); is_tuile[i] = 0; is_canal[i] = 0; is_line[i] = 0; //P11
i++; alpha[i] = -alpha[0]; is_tuile[i] = 0; is_canal[i] = 0; is_line[i] = 0; //P12

 /* Store dz for corresponding nodes */
 dz0[] = {};
 For j In {0 : #alpha[]-1}
   dz0[j] = 0;
   If ( is_tuile[j] || is_canal[j] ) 
      dz0[j] =  H_TUILE;
   EndIf   
 EndFor
 

 
 /* define Characteristic Length on Nodes */
 Lc[] = {};
 For j In {0 : #alpha[]-1}
   Lc[j] = LcSpire;
   If ( is_canal[j] )
      Lc[j] = LcCanal ;    
   EndIf
 EndFor

/* Create Quadrangle mesh*/
If (hexas)
   Mesh.RecombinationAlgorithm=1; // Activate Blossom support
   Mesh.RecombineAll=1;//recombine all defined surfaces
   Mesh.Algorithm=8;//delquad mesher
EndIf
If (!hexas)
   Mesh.RecombinationAlgorithm=0; // Deactivate Blossom support
   Mesh.RemeshAlgorithm=1; //(0=no split, 1=automatic, 2=automatic only with metis)
EndIf
 
/*----------------------------------------------
Update Dz depending on Spire postion     
----------------------------------------------*/     
 Function UpdateDz
   If(t < Spire_Milieu)
     For j In {0 : #dz0[]-1}
       dz[j] = -dz0[j];
     EndFor
   EndIf
   If (t==Spire_Milieu)
     For j In {0 : #dz0[]-1}
       dz[j] = bas ? -dz0[j] : dz0[j];
     EndFor
    EndIf
   If(t > Spire_Milieu)
     For j In {0 : #dz0[]-1}
       dz[j] = dz0[j];
     EndFor
   EndIf
   
   If (t==0)
     For j In {0 : #dz0[]-1}
       dz[j] = bas ? 0: -dz0[j];
     EndFor
   EndIf
   
   If (t==Nb_spires)
     For j In {0 : #dz0[]-1}
       dz[j] = bas ? dz0[j] : 0;
     EndFor
   EndIf
   
   
   For j In {0 : #dz0[]-1}
     If ( !in_isolant && (is_canal[j] && !is_tuile[j]) )
        dz[j]  -=  bas ? -H_canal : H_canal;
     EndIf
     If ( !in_isolant && (Canal && j==mid_point) )
        dz[j]  -=  bas ? -H_canal : H_canal;
     EndIf
   EndFor
   
Return  

/*----------------------------------------------
Create Points and Lines on Secteur Edge R,Z     
----------------------------------------------*/     
Function Lines

 step = 1;
 j0 = 0;
 jend = #alpha[]-1;
 
 If (in_isolant )
    j0 = 1;
    jend = #alpha[]-2;
 EndIf
  
 For j In {j0 : jend: step}
     If ( !is_canal[j] || j==mid_point ) 
        P[j] = newp; Point(P[j]) = {R*Cos[alpha[j]], R*Sin[alpha[j]], Z + dz[j], Lc[j]};
	//Printf("P[%g]=[%g]=[%g,%g,%g]", j, P[j],  R*Cos[alpha[j]], R*Sin[alpha[j]], Z + dz[j]);
     EndIf
     If ( is_canal[j] && j!=mid_point)
        If ( j < mid_point ) 
	   P[j] = newp; Point(P[j]) = {Sqrt[R*R-lg_canal/2.*lg_canal/2.], -lg_canal/2., Z + dz[j], Lc[j]};
	   //Printf("P[%g]=[%g]=[%g,%g,%g] *", j, P[j],  Sqrt[R*R-lg_canal/2.*lg_canal/2.], -lg_canal/2., Z + dz[j]);
        EndIf     
        If ( j >= mid_point ) 
	   P[j] = newp; Point(P[j]) = {Sqrt[R*R-lg_canal/2.*lg_canal/2.],  lg_canal/2., Z + dz[j], Lc[j]};
	   //Printf("P[%g]=[%g]=[%g,%g,%g] x", j, P[j],  Sqrt[R*R-lg_canal/2.*lg_canal/2.], lg_canal/2., Z + dz[j]);
        EndIf     
     EndIf     
 EndFor
 
 
 /* Point on Axis in plane z=Z */
 O = newp; Point(O) =  {0, 0, Z, 1*Unit};
 
 Nb_Line = #P[]-1;
 For j In {j0 : Nb_Line-1: step}
    L[j] = 0;
 EndFor
 
 i = -1;
 For j In {j0 : #P[]-2}
     If ( !is_line[j+1] )
        //Printf("P[%g]P[%g]=[%g, O, %g]", j, j+1, P[j], P[j+1]);
	i++; L[i] = newl; Circle(L[i]) = {P[j], O, P[j+1]};
     EndIf
     If ( is_line[j+1] )
        //Printf("P[%g]P[%g]=[%g, %g]", j, j+1, P[j], P[j+1]);
        i++; L[i] = newl; Line(L[i]) = {P[j], P[j+1]};
     EndIf
 EndFor    

//Printf("N_P=%g", #P[]);
//Printf("N_L=%g", #L[]);
  
 /***********
 If ( in_isolant)
    Printf("in isolant : Reset Points %g, %g, ", P[mid_point-1], P[mid_point+1]);
    Printf("in isolant : Reset Lines %g %g", L[mid_point-2], L[mid_point+1]);
    P[mid_point-1] = 0;
    P[mid_point+1] = 0;
    L[mid_point-2] = 0;
    L[mid_point+1] = 0;
 EndIf
 *****/ 
Return

/*------------------------------------------------
-------------------GEOMETRIE CUIVRE---------------
------------------------------------------------*/
Function GeomSpire   //FONCTION DE DUPLICATION
				
/*----------------------------------------------     
-   SCHEMA "HR_NEW"                            -
-     			                    - 
-   Identifications des elements:              - 
-					  - 
-      Points: pXX                             - 
-                                              -
-      Lignes:                                 - 
-         - suivant x : r_pXX_pXXX             -
-         - suivant y : c_pXX_pXXX		  -
-         - suivant z : h_pXX_pXXX             -
exemple: ligne entres points p20 & p30: c_p20_p30
-    					  - 
-      Faces:                                  - 
-        - Normale x: RXX                      - 
-        - Normale y: LXX                      - 
-        - Normale z: HXX ou BXX               - 
-  			                    -  
-      Volumes: VXX                            - 
------------------------------------------------
                           
     			           IH7_______________IH6               IH4_____________IH3
                                     /                  |               |                  \
                                    /                   |               |                   \
                                   /                   IH12_____IH5_____IH11                 \
                                  /                                                           \
  		                 /                                                             \
   IH10________IH9______________IH8                                                             \IH2_________IH1__________IH0
      |                                                                                                                    |
      |                                                                                                         	   |
      |		                                                                                                           |
      |	                                                                                                                   |
INLET |     	                                                                                                           |    OUTLET
      |                                                                                                                    |
      |                                                                                                                    |
      |                                                                                                                    |
      |                                                                                                                    |
      |                                                                                                                    |
      |___________ _____________                                                                 ______________ ___________|
    IB10         IB9            \IB8                     	                                /IB2          IB1         IB0
                                 \                                                             /
                                  \                    IB12____IB5_____ IB11                 /                                     
   z|                              \                    |               |                    /
    |                               \                   |               |                   /
    |____theta                      \  ________________|               |________________  /                                                         
                                      IB7              IB6             IB4               IB3
                                                         
			
                                       
                           
     			           EH7_______________EH6               EH4_____________EH3
                                     /                  |               |                  \
                                    /                   |               |                   \
                                   /                   EH12_____EH5_____EH11                 \
                                  /                                                           \
  		                 /                                                             \
   EH10________EH9______________EH8                                                             \EH2_________EH1__________EH0
      |                                                                                                                    |
      |                                                                                                         	   |
      |		                                                                                                           |
      |	                                                                                                                   |
INLET |     	                                                                                                           |    OUTLET
      |                                                                                                                    |
      |                                                                                                                    |
      |                                                                                                                    |
      |                                                                                                                    |
      |                                                                                                                    |
      |___________ _____________                                                                 ______________ ___________|
    EB10         EB9            \EB8                     	                                /EB2          EB1         EB0
                                 \                                                             /
                                  \                    EB12____EB5_____ EB11                  /                                     
   z|                              \                    |               |                    /
    |                               \                   |               |                   /
    |____theta                       \  ________________|               |________________  /                                                         
                                      EB7              EB6             EB4               EB3
                                                         
			
                                       
*/ 

   /*---------GEOMETRIE SPIRE--------------------*/
   // Face du haut
   Axe_Z = z+EpaisseurSpire+Ep_Isolant;
   Printf("Axe_Z (m) = %g",Axe_Z);

   bas = 0;
   dz[] = {};
   Call UpdateDz;

   sens = 1;
   R = Rint;
   Z = Axe_Z;
   IH[] = {};
   LIH[] = {};
   P[] = {};
   L[] = {};
   Call Lines;
   For j In {0 : #P[]-1}
       IH[j] = P[j];
   EndFor
   For j In {0 : #L[]-1}
       LIH[j] = L[j];
   EndFor
   N_IH=#IH[]-1; Printf("N_IH=%g", N_IH);
   If ( Canal )
      N_IH -=2; 
   EndIf
   
   sens = -1;
   R = Rext;
   Z = Axe_Z;
   EH[] = {};
   LEH[] = {};
   P[] = {};
   L[] = {};
   Call Lines;
   For j In {0 : #P[]-1}
       EH[j] = P[j];
   EndFor
   For j In {0 : #L[]-1}
       LEH[j] = L[j];
   EndFor
   N_EH=#EH[]-1;
   If ( Canal )
      N_EH -=2; 
   EndIf

   LIEH[] = {};
   For j In {0 : #IH[]-1}
       LIEH[j] = newl; Line(LIEH[j]) = {IH[j], EH[j]};
   EndFor
   
   // Face du bas
   Axe_Z = z+Ep_Isolant;
   Printf("Axe_Z (m) = %g",Axe_Z);

   bas = 1;
   dz[] = {};
   Call UpdateDz;

   sens = -1;
   R = Rint;
   Z = Axe_Z;
   IB[] = {};
   LIB[] = {};
   P[] = {};
   L[] = {};
   Call Lines;
   For j In {0 : #P[]-1}
       IB[j] = P[j];
   EndFor
   For j In {0 : #L[]-1}
       LIB[j] = L[j];
   EndFor
   N_IB=#IB[]-1;
   If ( Canal )
      N_IB -=2; 
   EndIf
   
   sens = 1;
   R = Rext;
   Z = Axe_Z;
   EB[] = {};
   LEB[] = {};
   P[] = {};
   L[] = {};
   Call Lines;
   For j In {0 : #P[]-1}
       EB[j] = P[j];
   EndFor
   For j In {0 : #L[]-1}
       LEB[j] = L[j];
   EndFor
   N_EB=#EB[]-1;
   If ( Canal )
      N_EB -=2; 
   EndIf

   LIEB[] = {};
   For j In {0 : #IB[]-1}
       LIEB[j] = newl; Line(LIEB[j]) = {IB[j], EB[j]};
   EndFor

   LIHIB[] = {};
   LEHEB[] = {};
   For j In {0 : #IB[]-1}
     LIHIB[j] = newl;   Line(LIHIB[j]) = {IH[j], IB[j]};
     LEHEB[j] = newl;   Line(LEHEB[j]) = {EH[j], EB[j]};
   EndFor
   
   /* Surfaces */   
   N_Surf = #IH[] -1;
   N_R_Surf = N_Surf;
   If ( Canal )
      N_R_Surf -=2;
      N_R_Surf += 3 * 2; 
   EndIf
   Printf("N_Surf = %g", N_Surf);
   Printf("N_R_Surf = %g", N_R_Surf);

   /*
   For j In {0 : #LIH[]-1}
       Printf("LIH[%g]=%g", j, LIH[j]);
   EndFor
   For j In {0 : #LIB[]-1}
       Printf("LIB[%g]=%g", j, LIB[j]);
   EndFor
   For j In {0 : #LIH[]-1}
       Printf("LIH[%g]=%g", j, LIH[j]);
       Printf("LEH[%g]=%g", j, LEH[j]);
   EndFor
   */
      
   SH[] = {};
   For j In {0 : #IH[]-2}
      //Printf("Line Loop = %g, %g, %g, %g", LIEH[j], LEH[j], -LIEH[j+1], -LIH[j]);
      IEH[j] = newl; Line Loop(IEH[j]) = {LIEH[j], LEH[j], -LIEH[j+1], -LIH[j]};
      SH[j]=newreg; Plane Surface(SH[j]) = {IEH[j]}; 
   EndFor
   //H = newreg; Compound Surface(H) = {SH[]}; 
     
   SB[] = {};
   For j In {0 : #IB[]-2}
      //Printf("Line Loop = %g, %g, %g, %g", LIEB[j], LEB[j], -LIEB[j+1], -LIB[j]);
      IEB[j] = newl; Line Loop(IEB[j]) = {LIEB[j], LEB[j], -LIEB[j+1], -LIB[j]};
      SB[j]=newreg; Plane Surface(SB[j]) = {IEB[j]}; 
   EndFor
   //B = newreg; Compound Surface(B) = {SB[]};
   
   SRI[] = {}; // Create Coumpound Surface
   i = 0;
   For j In {0 : #IB[]-2}
      //Printf("Line Loop = %g, %g, %g, %g", LIH[j], LIHIB[j+1], -LIB[j], -LIHIB[j]);
      dSRI[j] = newl; Line Loop(dSRI[j]) = {LIH[j], LIHIB[j+1], -LIB[j], -LIHIB[j]};
      If ( !Canal )
         SRI[i]=newreg; Ruled Surface(SRI[i]) = {dSRI[j]}; i++;
      EndIf 
      If ( Canal )
         /* Remove surface with 0 area */
         If ( j != 7 && j != 4)
            If ( j != 3 && j != 8)
	       SRI[i]=newreg; Ruled Surface(SRI[i]) = {dSRI[j]}; i++;
	    EndIf
	    /* Split the surface into 3 parts */
            If ( j == 3 )
	       L1 = newl; Line(L1) = {IB[3], IB[5]}; //Printf("L1=%g", L1);
	       L2 = newl; Line(L2) = {IH[3], IH[5]}; //Printf("L2=%g", L2);
	       dSRI_reg = newl; Line Loop(dSRI_reg) = {L2, LIHIB[5], -L1, -LIHIB[3]};
	       //Printf("Line Loop = %g, %g, %g, %g", L2, LIHIB[5], -L1, -LIHIB[3]);
	       SRI[i]=newreg; Ruled Surface(SRI[i]) = {dSRI_reg}; i++;
	       dSRI_reg = newl; Line Loop(dSRI_reg) = {L2, -LIH[4], -LIH[3]};
	       //Printf("Line Loop = %g, %g, %g", L2, -LIH[4], -LIH[3]);
	       SRI[i]=newreg; Ruled Surface(SRI[i]) = {dSRI_reg}; i++;
	       dSRI_reg = newl; Line Loop(dSRI_reg) = {L1, -LIB[4], -LIB[3]};
	       //Printf("Line Loop = %g, %g, %g", L1, -LIB[4], -LIB[3]);
	       SRI[i]=newreg; Ruled Surface(SRI[i]) = {dSRI_reg}; i++;
	    EndIf
            If ( j == 8 )
	       L1 = newl; Line(L1) = {IB[9], IB[7]}; //Printf("L1=%g", L1);
	       L2 = newl; Line(L2) = {IH[9], IH[7]}; //Printf("L2=%g", L2);
	       dSRI_reg = newl; Line Loop(dSRI_reg) = {-L2, LIHIB[9], L1, -LIHIB[7]};
	       //Printf("Line Loop = %g, %g, %g, %g", -L2, LIHIB[9], L1, -LIHIB[7]);
	       SRI[i]=newreg; Ruled Surface(SRI[i]) = {dSRI_reg}; i++;
	       dSRI_reg = newl; Line Loop(dSRI_reg) = {L2, LIH[7], LIH[8]};
	       //Printf("Line Loop = %g, %g, %g", L2, LIH[7], LIH[8]);
	       SRI[i]=newreg; Ruled Surface(SRI[i]) = {dSRI_reg}; i++;
	       dSRI_reg = newl; Line Loop(dSRI_reg) = {L1, LIB[7], LIB[8]};
	       //Printf("Line Loop = %g, %g, %g", L1, LIB[7], LIB[8]);
	       SRI[i]=newreg; Ruled Surface(SRI[i]) = {dSRI_reg}; i++;
	    EndIf
	    
	 EndIf
      EndIf 
   EndFor
   
   RI[] = {}; 
   If ( !Canal ) 
      RI[0] = newreg; Compound Surface(RI[0]) = {SRI[]};
   EndIf
   If ( Canal ) 
      RI[0] = newreg; Compound Surface(RI[0]) = {SRI[0], SRI[1], SRI[2], SRI[3], SRI[4], SRI[5]};
      RI[1] = newreg; Compound Surface(RI[1]) = {SRI[6]};
      RI[2] = newreg; Compound Surface(RI[2]) = {SRI[7]};
      RI[3] = newreg; Compound Surface(RI[3]) = {SRI[8], SRI[9], SRI[10], SRI[11], SRI[12], SRI[13]};
   EndIf
   
   
   SRE[] = {}; // Create Coumpound Surface
   i = 0;
   For j In {0 : #EB[]-2}
      //Printf("Line Loop = %g, %g, %g, %g", LEH[j], LEHEB[j+1], -LEB[j], -LEHEB[j]);
      dSRE[j] = newl; Line Loop(dSRE[j]) = {LEH[j], LEHEB[j+1], -LEB[j], -LEHEB[j]};
      If ( !Canal )
         SRE[i]=newreg; Ruled Surface(SRE[i]) = {dSRE[j]}; i++;
      EndIf 
      If ( Canal )
         /* Remove surface with 0 area */
         If ( j != 7 && j != 4 )
            If ( j != 3 && j != 8)
	       SRE[i]=newreg; Ruled Surface(SRE[i]) = {dSRE[j]}; i++;
	    EndIf
	    /* Split the surface into 3 parts */
            If ( j == 3 )
	       L1 = newl; Line(L1) = {EB[3], EB[5]}; //Printf("L1=%g", L1);
	       L2 = newl; Line(L2) = {EH[3], EH[5]}; //Printf("L2=%g", L2);
	       dSRE_reg = newl; Line Loop(dSRE_reg) = {L2, LEHEB[5], -L1, -LEHEB[3]};
	       //Printf("Line Loop = %g, %g, %g, %g", L2, LEHEB[5], -L1, -LEHEB[3]);
	       SRE[i]=newreg; Ruled Surface(SRE[i]) = {dSRE_reg}; i++;
	       dSRE_reg = newl; Line Loop(dSRE_reg) = {L2, -LEH[4], -LEH[3]};
	       //Printf("Line Loop = %g, %g, %g", L2, -LEH[4], -LEH[3]);
	       SRE[i]=newreg; Ruled Surface(SRE[i]) = {dSRE_reg}; i++;
	       dSRE_reg = newl; Line Loop(dSRE_reg) = {L1, -LEB[4], -LEB[3]};
	       //Printf("Line Loop = %g, %g, %g", L1, -LEB[4], -LEB[3]);
	       SRE[i]=newreg; Ruled Surface(SRE[i]) = {dSRE_reg}; i++;
	    EndIf
            If ( j == 8 )
	       L1 = newl; Line(L1) = {EB[9], EB[7]}; //Printf("L1=%g", L1);
	       L2 = newl; Line(L2) = {EH[9], EH[7]}; //Printf("L2=%g", L2);
	       dSRE_reg = newl; Line Loop(dSRE_reg) = {-L2, LEHEB[9], L1, -LEHEB[7]};
	       //Printf("Line Loop = %g, %g, %g, %g", -L2, LEHEB[9], L1, -LEHEB[7]);
	       SRE[i]=newreg; Ruled Surface(SRE[i]) = {dSRE_reg}; i++;
	       dSRE_reg = newl; Line Loop(dSRE_reg) = {L2, LEH[7], LEH[8]};
	       //Printf("Line Loop = %g, %g, %g", L2, LEH[7], LEH[8]);
	       SRE[i]=newreg; Ruled Surface(SRE[i]) = {dSRE_reg}; i++;
	       dSRE_reg = newl; Line Loop(dSRE_reg) = {L1, LEB[7], LEB[8]};
	       //Printf("Line Loop = %g, %g, %g", L1, LEB[7], LEB[8]);
	       SRE[i]=newreg; Ruled Surface(SRE[i]) = {dSRE_reg}; i++;
	    EndIf
	    
	 EndIf
      EndIf 
   EndFor
   Printf("SRI[] : %g", #SRI[]);
   Printf("SRE[] : %g", #SRE[]);
   
   RE[] = {}; 
   If ( !Canal ) 
      RE[0] = newreg; Compound Surface(RE[0]) = {SRE[]};
   EndIf
   If ( Canal ) 
      RE[0] = newreg; Compound Surface(RE[0]) = {SRE[0], SRE[1], SRE[2], SRE[3], SRE[4], SRE[5]};
      RE[1] = newreg; Compound Surface(RE[1]) = {SRE[6]};
      RE[2] = newreg; Compound Surface(RE[2]) = {SRE[7]};
      RE[3] = newreg; Compound Surface(RE[3]) = {SRE[8], SRE[9], SRE[10], SRE[11], SRE[12], SRE[13]};
   EndIf

   //Printf("Line Loop = %g, %g, %g, %g", LIEB[0], -LEHEB[0], -LIEH[0], LIHIB[0]);
   V0[t] = newl; Line Loop(V0[t]) = {LIEB[0], -LEHEB[0], -LIEH[0], LIHIB[0]};
   TOP[t] = newreg; Plane Surface(TOP[t]) = {V0[t]};
   
   //Printf("Line Loop = %g, %g, %g, %g", LIEB[#LIEB[]-1], -LEHEB[#LEHEB[]-1], -LIEH[#LIEH[]-1], LIHIB[#LIHIB[]-1]);
   V1[t] = newl; Line Loop(V1[t]) = {LIEB[#LIEB[]-1], -LEHEB[#LEHEB[]-1], -LIEH[#LIEH[]-1], LIHIB[#LIHIB[]-1]};
   BOTTOM[t] = newreg; Plane Surface(BOTTOM[t]) = {V1[t]};

   /* Create Volumes */
   Bord = newreg; Surface Loop(Bord) = {RI[], RE[], SB[], SH[], TOP[t], BOTTOM[t]};
   //Bord = newreg; Surface Loop(Bord) = {SRI[], SRE[], SB[], SH[], TOP[t], BOTTOM[t]};
   Copper[t] = newreg; Volume(Copper[t]) = {Bord};   
   Printf("Defining volume");  
   
    
   /* Update RI and RE Boundaries */
   //For j In {0:#SRI[]-1}
   //    Bord_RI[num_bord_r] = SRI[j];
   //    Bord_RE[num_bord_r] = SRE[j];
   //    num_bord_r++;
   //EndFor
   For j In {0:#RI[]-1}
       Bord_RI[num_bord_r] = RI[j];
       Bord_RE[num_bord_r] = RE[j];
       num_bord_r++;
   EndFor
   
   /* Update HChannels */
   If ( t!=0 && t!=Nb_spires) 
      Bord_HChannel[num_h] = SB[0]; num_h++;
      Bord_HChannel[num_h] = SB[#SB[]-1]; num_h++;
      Bord_HChannel[num_h] = SH[0]; num_h++;
      Bord_HChannel[num_h] = SH[#SH[]-1]; num_h++;
   EndIf
   If ( t==0) 
      For j In {0:#SB[]-1}
          Bord_Neumann[num_n] = SB[j]; num_n++;
      EndFor
      Bord_HChannel[num_h] = SH[0]; num_h++;
      Bord_HChannel[num_h] = SH[#SH[]-1]; num_h++;
   EndIf
   If ( t==Nb_spires) 
      For j In {0:#SB[]-1}
          Bord_Neumann[num_n] = SH[j]; num_n++;
      EndFor
      Bord_HChannel[num_h] = SB[0]; num_h++;
      Bord_HChannel[num_h] = SB[#SB[]-1]; num_h++;
   EndIf

   If ( !Canal ) 
      For j In {1 : #SB[]-2}
          Bord_Isolant[num_i] = SB[j]; num_i++;
          Bord_Isolant[num_i] = SH[j]; num_i++;
      EndFor
   EndIf
   
   If ( Canal ) 
      For j In {1 : 3}
          Bord_Isolant[num_i] = SB[j]; num_i++;
          Bord_Isolant[num_i] = SH[j]; num_i++;
      EndFor
      For j In {4 : 7}
          Bord_RChannel[num_r] = SB[j]; num_r++;
          Bord_RChannel[num_r] = SH[j]; num_r++;
      EndFor
      For j In {8 : #SB[]-2}
          Bord_Isolant[num_i] = SB[j]; num_i++;
          Bord_Isolant[num_i] = SH[j]; num_i++;
      EndFor
   EndIf
   
   Printf("GeomSpire done");
Return

/*------------------------------------------------
-------------------GEOMETRIE ISOLANT--------------
------------------------------------------------*/
/*----------------------------------------------     
-   SCHEMA "HR_NEW"                            -
-     			                    - 
-   Identifications des elements:              - 
-					  - 
-      Points: piXX                             - 
-                                              -
-      Lignes:                                 - 
-         - suivant x : ri_piXX_piXXX             -
-         - suivant y : ci_piXX_piXXX		  -
-         - suivant z : hi_piXX_piXXX             -
exemple: ligne entres points pi20 & pi30: ci_pi20_pi30
-    					  - 
-      Faces:                                  - 
-        - Normale x: RiXX                      - 
-        - Normale y: LiXX                      - 
-        - Normale z: HiXX ou BiXX               - 
-  			                    -  
-      Volumes: ViXX                            - 
------------------------------------------------
  
                                     IH7____________IH6___________________IH4_____________IH3
                                    /|               |                     |               |\
                                   / |               |                     |               | \
                                  /  |               |                     |               |  \   
                 IH9___________IH8   |               |                     |               |  IH2_____________IH1
                 |              |    |               |                     |               |   |               |  
                 |              |    |               |                     |               |   |               |
                 |              |    |               |                     |               |   |               |  
                 |              |    |               |                     |               |   |               |   
        INLET    |              |    IB7____________IB6___________________IB4_____________IB3  |               |    OUTLET
                 |              |   /                                                      \   |               |
                 |              |  /                                                        \  |               |
                 |              | /                                                          \ |               |
                 IB9___________IB8                                                            IB2_____________IB1


|z
|
|_____theta
                                                        
  
                                     EH7____________EH6___________________EH4_____________EH3
                                    /|               |                     |               |\
                                   / |               |                     |               | \
                                  /  |               |                     |               |  \   
                 EH9___________IH8   |               |                     |               |  EH2_____________EH1
                 |              |    |               |                     |               |   |               |  
                 |              |    |               |                     |               |   |               |
                 |              |    |               |                     |               |   |               |  
                 |              |    |               |                     |               |   |               |   
        INLET    |              |    EB7____________EB6___________________EB4_____________EB3  |               |    OUTLET
                 |              |   /                                                      \   |               |
                 |              |  /                                                        \  |               |
                 |              | /                                                          \ |               |
                 EB9___________EB8                                                            EB2_____________EB1


|z
|
|_____theta
                                                        
*/ 

Function GeomIsol   //FONCTION DE DUPLICATION
   
   in_isolant = 1;
   
   //face du haut
   Axe_Z = z;

   dz[] = {};
   Call UpdateDz;
   sens = 1;
   
   R = Rint;
   Z = Axe_Z;
   IH[] = {};
   LIH[] = {};
   P[] = {};
   L[] = {};
   Call Lines;

   //Printf("N_P=%g (Isolant)", #P[]-1);
   //Printf("N_L=%g (Isolant)", #L[]-1);
   
   i = 0;
   For j In {0 : #P[]-1}
       If ( P[j] != 0 ) 
          IH[i] = P[j]; i++;
       EndIf   
   EndFor
   
   i = 0;
   For j In {0 : #L[]-1}
       If ( L[j] != 0 ) 
          LIH[i] = L[j]; i++;
       EndIf   
   EndFor
   
   N_IH=#IH[]-1;
   //Printf("N_IH=%g (Isolant)", #IH[]);
   //Printf("N_LIH=%g (Isolant)", #LIH[]);
   
   
   sens = -1;
   R = Rext;
   EH[] = {};
   LEH[] = {};
   P[] = {};
   L[] = {};
   Call Lines;
   
   i = 0;
   For j In {0 : #P[]-1}
       If ( P[j] != 0 ) 
          EH[i] = P[j]; i++;
       EndIf   
   EndFor
   
   i = 0;
   For j In {0 : #L[]-1}
       If ( L[j] != 0 ) 
          LEH[i] = L[j]; i++;
       EndIf
   EndFor
   N_EH=#EH[]-1; 
   
   //Printf("N_IE=%g (Isolant)", #EH[]);
   //Printf("N_LEH=%g (Isolant)", #LEH[]);

   LIEH[] = {};
   For j In {0 : #IH[]-1}
       LIEH[j] = newl; Line(LIEH[j]) = {IH[j], EH[j]};
   EndFor
   //Printf("N_LIEH=%g (Isolant)", #LIEH[]);
   
   // Face du bas
   Axe_Z = z+Ep_Isolant;
   bas = 1;
   dz[] = {};
   Call UpdateDz;

   sens = -1;
   R = Rint;
   Z = Axe_Z;
   IB[] = {};
   LIB[] = {};
   P[] = {};
   L[] = {};
   Call Lines;
   
   i = 0;
   For j In {0 : #P[]-1}
       If ( P[j] != 0 ) 
          IB[i] = P[j]; i++;
       EndIf   
   EndFor
   
   i = 0;
   For j In {0 : #L[]-1}
       If ( L[j] != 0 ) 
          LIB[i] = L[j]; i++;
       EndIf
   EndFor
   N_IB=#IB[]-1; 
   
   //Printf("N_IB=%g (Isolant)", #IB[]);
   //Printf("N_LIB=%g (Isolant)", #LIB[]);

   sens = 1;
   R = Rext;
   Z = Axe_Z;
   EB[] = {};
   LEB[] = {};
   P[] = {};
   L[] = {};
   Call Lines;
   
   i = 0;
   For j In {0 : #P[]-1}
       If ( P[j] != 0 ) 
          EB[i] = P[j]; i++;
       EndIf   
   EndFor
   
   i = 0;
   For j In {0 : #L[]-1}
       If ( L[j] != 0 ) 
          LEB[i] = L[j]; //Printf("%g LEB[%g]=%g", j, i, LEB[i]); 
	  /*******************
	  If ( Canal )
             If ( j == 3 || j == 6)
	        LEB[i] = 0;
	     EndIf
	  EndIf 
	  ********************/
	  i++;
       EndIf
   EndFor
   N_EB=#EB[]-1; 
   
   //Printf("N_EB=%g (Isolant)", #EB[]);
   //Printf("N_LEB=%g (Isolant)", #LEB[]);
   
   LIEB[] = {};
   For j In {0 : #IB[]-1}
       LIEB[j] = newl; Line(LIEB[j]) = {IB[j], EB[j]};
   EndFor
   //Printf("N_LIEB=%g (Isolant)", #LIEB[]);

   LIHIB[] = {};
   LEHEB[] = {};
   For j In {0 : #IB[]-1}
     LIHIB[j] = newl;   Line(LIHIB[j]) = {IH[j], IB[j]};
     LEHEB[j] = newl;   Line(LEHEB[j]) = {EH[j], EB[j]};
   EndFor
   
   /* Surfaces */   
   iSH[] = {};
   i = 0;
   For j In {0 : #IH[]-2}
      If ( !Canal )
         //Printf("SH[%g]=%g, %g, %g, %g", j, LIEH[j], LEH[j], -LIEH[j+1], -LIH[j]);
         IEH[i] = newl; Line Loop(IEH[i]) = {LIEH[j], LEH[j], -LIEH[j+1], -LIH[j]};
	 iSH[i]=newreg; Plane Surface(iSH[i]) = {IEH[i]};  i++;
      EndIf
      If ( Canal )
         If ( j != 3 && j != 6) 
            //Printf("SH[%g]=%g, %g, %g, %g", j, LIEH[j], LEH[j], -LIEH[j+1], -LIH[j]);
            IEH[i] = newl; Line Loop(IEH[i]) = {LIEH[j], LEH[j], -LIEH[j+1], -LIH[j]};
	    iSH[i]=newreg; Plane Surface(iSH[i]) = {IEH[i]}; i++;
	 EndIf
      EndIf
   EndFor
   //Printf("SH Isolant=%g ", #iSH[]);
   
   iSB[] = {};
   i = 0;
   For j In {0 : #IB[]-2}
      If ( !Canal )
         //Printf("SB[%g]=%g, %g, %g, %g", j, LIEB[j], LEB[j], -LIEB[j+1], -LIB[j]);
         IEB[i] = newl; Line Loop(IEB[i]) = {LIEB[j], LEB[j], -LIEB[j+1], -LIB[j]};
	 iSB[i]=newreg; Plane Surface(iSB[i]) = {IEB[i]};  i++;
      EndIf
      If ( Canal )
         If ( j != 3 && j != 6) 
            //Printf("SB[%g]=%g, %g, %g, %g", j, LIEB[j], LEB[j], -LIEB[j+1], -LIB[j]);
            IEB[i] = newl; Line Loop(IEB[i]) = {LIEB[j], LEB[j], -LIEB[j+1], -LIB[j]};
	    iSB[i]=newreg; Plane Surface(iSB[i]) = {IEB[i]}; i++;
	 EndIf
      EndIf
   EndFor
   //Printf("SB Isolant=%g ", #iSB[]);
   //Printf("IB Isolant=%g ", #IB[]);
   
   SRI[] = {}; // Create Coumpound Surface
   i = 0;
   For j In {0 : #IB[]-2}
      dSRI[j] = newl; Line Loop(dSRI[j]) = {LIH[j], LIHIB[j+1], -LIB[j], -LIHIB[j]};
      If ( Canal ) 
         If ( j!= 3 && j!=6 )
             SRI[i]=newreg; Ruled Surface(SRI[i]) = {dSRI[j]}; //Printf("%g SRI[%g]=%g", j, i, SRI[i]);
	     i++;
	 EndIf
      EndIf
      If (!Canal)
         SRI[i]=newreg; Ruled Surface(SRI[i]) = {dSRI[j]}; //Printf("%g SRI[%g]=%g", j, i, SRI[i]);
	 i++;
      EndIf
   EndFor
   Printf("SRI Isolant=%g ", #SRI[]);

   SRE[] = {}; // Create Coumpound Surface
   i = 0;
   For j In {0 : #IB[]-2}
      dSRE[j] = newl; Line Loop(dSRE[j]) = {LEH[j], LEHEB[j+1], -LEB[j], -LEHEB[j]};
      If ( Canal ) 
         If ( j!= 3 && j!=6 )
            SRE[i]=newreg; Ruled Surface(SRE[i]) = {dSRE[j]}; i++;
	 EndIf
      EndIf
      If (!Canal)
         SRE[i]=newreg; Ruled Surface(SRE[i]) = {dSRE[j]}; i++;
      EndIf
   EndFor
   Printf("SRE Isolant=%g ", #SRE[]);
   
   //RI = newreg; Compound Surface(RI) = {SRI[]};
   //Printf("Line Loop = %g, %g, %g, %g", LIEB[0], -LEHEB[0], -LIEH[0], LIHIB[0]);
   iV0[t] = newl; Line Loop(iV0[t]) = {LIEB[0], -LEHEB[0], -LIEH[0], LIHIB[0]};
   ITOP[t] = newreg; Plane Surface(ITOP[t]) = {iV0[t]};
   Printf("ITOP Isolant=%g ", ITOP[t]);
   
   //Printf("Line Loop = %g, %g, %g, %g", LIEB[#LIEB[]-1], -LEHEB[#LEHEB[]-1], -LIEH[#LIEH[]-1], LIHIB[#LIHIB[]-1]);
   iV1[t] = newl; Line Loop(iV1[t]) = {LIEB[#LIEB[]-1], -LEHEB[#LEHEB[]-1], -LIEH[#LIEH[]-1], LIHIB[#LIHIB[]-1]};
   IBOTTOM[t] = newreg; Plane Surface(IBOTTOM[t]) = {iV1[t]};
   Printf("IBOTTOM Isolant=%g ", IBOTTOM[t]);
   
   /* Create Volumes */
   Bord = newreg; Surface Loop(Bord) = {SRI[], SRE[], iSB[], iSH[], ITOP[t], IBOTTOM[t]};
   Kapton[t] = newreg; Volume(Kapton[t]) = {Bord};   
   
   /* Update HChannels */
   Bord_HChannel[num_h] = ITOP[t]; num_h++;
   Bord_HChannel[num_h] = IBOTTOM[t]; num_h++;
   
   If ( Canal ) 
      For j In {3 : 4}
          Bord_RChannel[num_r] = iSB[j]; num_r++; //Printf("Bord_RChannel : %g", SB[j]);
          Bord_RChannel[num_r] = iSH[j]; num_r++; //Printf("Bord_RChannel : %g", SH[j]);
      EndFor
   EndIf

   For j In {0:#SRI[]-1}
       Bord_RI[num_bord_r] = SRI[j];
       Bord_RE[num_bord_r] = SRE[j];
       num_bord_r++;
   EndFor
   
   // reset isolant indicator
   in_isolant = 0;

   Printf("GeomIsolant done");
   
Return

/*-----------------------------------------------
 DEFINITION DES "PHYSICALS"
-------------------------------------------------*/

Function Physical_Region

  Printf("Defining Physical");
  
  // Rint and R_ext
  Physical Surface("Rint") = {Bord_RI[]} ; //Rint_Cuivre 
  Physical Surface("Rext") = {Bord_RE[]} ; //Rext_Cuivre

  // HChannels
  Physical Surface("Hchannels")={Bord_HChannel[]};
  If ( Canal )
     Physical Surface("Rchannels")={Bord_RChannel[]};
  EndIf
  
  If (ends)
     Physical Surface("Neumann")={Bord_Neumann[]};
  EndIf

  // Interface Isolants
  If(!isolant)
     Physical Surface("Isolants")={Bord_Isolant[]};
  EndIf

  Physical Volume("Copper") = {Copper[]};   // SPIRE 
  
  If ( isolant )
     Physical Volume("Kapton") = {Kapton[]};   // KAPTON 
  EndIf

  // Top_Cu
  TopCu=100;
  For t In {Start_spire_number:#TOP[]-1}
      Physical Surface(TopCu)={TOP[t]}; TopCu++;
  EndFor

  // Bottom_Cu
  BottomCu=200;
  For t In {Start_spire_number:#BOTTOM[]-1}
      Physical Surface(BottomCu)={BOTTOM[t]};BottomCu++;
  EndFor
  
Return


Function Virtual_Sphere

    Z_C = (z+z0)/2.;
    Printf("z0=%g", z0);
    Printf("z=%g", z);
    Printf("z+z0=%g", Fabs[z-z0]);
    Printf("Z_C=%g", (z+z0)/2.);
    
    // Define Points
    P0=newp; Point(P0) = {0, 0, Z_C, LcAxis};
    P1=newp; Point(P1) = {R * Cos[alpha[0]], R * Sin[alpha[0]], Z_C, LcBox};
    P2=newp; Point(P2) = {R * Cos[alpha[#alpha[]-1]], R * 
Sin[alpha[#alpha[]-1]], Z_C, LcBox};
    P3=newp; Point(P3) = {0, 0, Z_C+R, LcBox};
    P4=newp; Point(P4) = {0, 0, Z_C-R, LcBox};
    
    C12=newl; Circle(C12) = {P1, P0, P2};
    C23=newl; Circle(C23) = {P2, P0, P3};
    C31=newl; Circle(C31) = {P3, P0, P1};
    C14=newl; Circle(C14) = {P1, P0, P4};
    C24=newl; Circle(C24) = {P2, P0, P4};
    
    //L01=newl; Line(L01) = {P0, P1};
    //L02=newl; Line(L02) = {P0, P2};
    L03=newl; Line(L03) = {P0, P3};
    L04=newl; Line(L04) = {P0, P4};

    Hemi1=newl; Line Loop(Hemi1) = {C12, C23, C31};
    HemiS1=newl; Ruled Surface(HemiS1) = {Hemi1};
    Printf("HemiS1=%g", HemiS1);
    
    lb230=newreg; Line Loop(lb230)={-C31, -L03, L04, -C14}; 
    Lb230=newreg; Plane Surface(Lb230)={lb230, -V0[]}; 
    Printf("Lb230=%g", Lb230);

    Hemi2=newl; Line Loop(Hemi2) = {C12, C24, -C14};
    HemiS2=newl; Ruled Surface(HemiS2) = {Hemi2};
    Printf("HemiS2=%g", HemiS2);
    
    lb380=newreg; Line Loop(lb380)={-C23, C24, -L04, L03}; 
    Lb380=newreg; Plane Surface(Lb380)={lb380, -V1[]};
    Printf("Lb380=%g", Lb380);
   
    box = newreg ;
    If(isolant)
       Surface Loop(box) = {HemiS1, HemiS2, Lb230, Lb380, Bord_RI[], Bord_RE[], 
Bord_HChannel[], Bord_RChannel[], Bord_Neumann[], Bord_Isolant[]};
    EndIf
    If (!isolant)
       Surface Loop(box) = {HemiS1, HemiS2, Lb230, Lb380, Bord_RI[], Bord_RE[], 
Bord_HChannel[], Bord_RChannel[], Bord_Neumann[]};
    EndIf
    Printf("box=%g", box);
   
     
    Box = newreg ; Volume(Box) = {box} ;
    Printf("Box=%g", Box);
   
    Physical Volume("Air") = {Box}; //Volume Box1

    // Define Shell Points
    X_R_S = (R+Delta_R) * Cos[alpha[0]];
    Y_R_S = (R+Delta_R) * Sin[alpha[0]];

    P10=newp; Point(P10) =  {(R+Delta_R) * Cos[alpha[0]], (R+Delta_R) * 
Sin[alpha[0]], Z_C, LcInf};
    P20=newp; Point(P20) =  {(R+Delta_R) * Cos[alpha[#alpha[]-1]], (R+Delta_R) 
* Sin[alpha[#alpha[]-1]], Z_C, LcInf};
    P30=newp; Point(P30) = {0, 0, Z_C+(R+Delta_R), 5*LcInf};
    P40=newp; Point(P40) = {0, 0, Z_C-(R+Delta_R), 5*LcInf};

    C1020=newl; Circle(C1020) = {P10, P0, P20};
    C2030=newl; Circle(C2030) = {P20, P0, P30};
    C3010=newl; Circle(C3010) = {P30, P0, P10};
    C1040=newl; Circle(C1040) = {P10, P0, P40};
    C2040=newl; Circle(C2040) = {P20, P0, P40};

    L110=newl; Line(L110) = {P1, P10};
    L220=newl; Line(L220) = {P2, P20};
    L330=newl; Line(L330) = {P3, P30};
    L440=newl; Line(L440) = {P4, P40};

    HemiR1=newl; Line Loop(HemiR1) = {C1020, C2030, C3010};
    HemiRS1=newl; Ruled Surface(HemiRS1) = {HemiR1};
    
    HemiR2=newl; Line Loop(HemiR2) = {C1020, C2040, -C1040};
    HemiRS2=newl; Ruled Surface(HemiRS2) = {HemiR2};
    
    OxOz1=newl; Line Loop(OxOz1) = {C14, L440, -C1040, -L110};
    Sym_OxOz1=newl; Plane Surface(Sym_OxOz1) = {OxOz1};
    OxOz2=newl; Line Loop(OxOz2) = {C31, L110, -C3010, -L330};
    Sym_OxOz2=newl; Plane Surface(Sym_OxOz2) = {OxOz2};

    OyOz1=newl; Line Loop(OyOz1) = {-C24, L220, C2040, -L440};
    Sym_OyOz1=newl; Plane Surface(Sym_OyOz1) = {OyOz1};
    OyOz2=newl; Line Loop(OyOz2) = {C23, L330, -C2030, -L220};
    Sym_OyOz2=newl; Plane Surface(Sym_OyOz2) = {OyOz2};
    
    shell=newreg; Surface Loop(shell) = {Sym_OxOz1, Sym_OxOz2, HemiRS1, 
HemiRS2, HemiS1, HemiS2, Sym_OyOz1, Sym_OyOz2};
    Shell = newreg ; Volume(Shell) = {shell} ;
    
    ////////PHYSICAL REGION /////////
    
    Physical Surface("Infinity") = {HemiRS1, HemiRS2} ; // Infini
    Physical Surface("Symetrie1") = {Lb230, Sym_OxOz1, Sym_OxOz2} ; // Sym OxOz
    Physical Surface("Symetrie2") = {Lb380, Sym_OyOz1, Sym_OyOz2} ; // Sym 
OyOzFace Bas Box 2


    Physical Volume("AirInf") = {Shell}; //Volume Box2 
    
Return


_______________________________________________
gmsh mailing list
[email protected]
http://www.geuz.org/mailman/listinfo/gmsh

Reply via email to