Restructuring the geometry and pushers

The geometry and push structure has been reworked to allow eassy adding
new pushers.

Documentation not updated yet.

Baseline for merging Cartesian pushers into one.
This commit is contained in:
Jorge Gonzalez 2022-04-08 19:06:12 +02:00
commit 5b5dadce39
18 changed files with 429 additions and 1052 deletions

View file

@ -6,7 +6,7 @@ SRCDIR := $(TOPDIR)/src# source folder
# compiler # compiler
# gfortran: # gfortran:
FC := gfortran FC := gfortran
JSONDIR := $(TOPDIR)/json-fortran-8.2.0/build-gfortran JSONDIR := $(TOPDIR)/json-fortran/build-gfortran
# ifort: # ifort:
# FC := ifort # FC := ifort
# JSONDIR := $(TOPDIR)/json-fortran-8.2.0/build-ifort # JSONDIR := $(TOPDIR)/json-fortran-8.2.0/build-ifort

View file

@ -1,7 +1,7 @@
{ {
"output": { "output": {
"path": "./runs/0D_test/", "path": "./runs/0D_Argon/",
"triggerOutput": 1, "triggerOutput": 1,
"numColl": true, "numColl": true,
"folder": "test" "folder": "test"
@ -13,21 +13,19 @@
"radius": 1.88e-10 "radius": 1.88e-10
}, },
"geometry": { "geometry": {
"type": "1DCart", "dimension": 0,
"meshType": "0D",
"volume": 1e-11 "volume": 1e-11
}, },
"species": [ "species": [
{"name": "Argon+", "type": "charged", "mass": 6.633e-26, "charge": 1.0, "weight": 1.0e0}, {"name": "Argon+", "type": "charged", "mass": 6.633e-26, "charge": 1.0, "weight": 1.0e0},
{"name": "Argon", "type": "neutral", "mass": 6.633e-26, "weight": 1.0e0} {"name": "Argon", "type": "neutral", "mass": 6.633e-26, "weight": 1.0e0}
], ],
"case": { "solver": {
"tau": [1.0e-6, 1.0e-6], "tau": [1.0e-6, 1.0e-6],
"time": 1.0e-3, "finalTime": 1.0e-3,
"pusher": ["0D", "0D"],
"initial": [ "initial": [
{"speciesName": "Argon+", "initialState": "Argon+_Initial.dat"}, {"species": "Argon+", "file": "Argon+_Initial.dat"},
{"speciesName": "Argon", "initialState": "Argon_Initial.dat"} {"species": "Argon", "file": "Argon_Initial.dat"}
] ]
}, },
"interactions": { "interactions": {

View file

@ -1,51 +0,0 @@
#Element Density(m^-3) Velocity (m/2) Temperature (K)
1 1.8672E+15 -4.2433E+04 0.0000E+00 0.0000E+00 1.7536E+03
2 1.7491E+15 -4.1621E+04 0.0000E+00 0.0000E+00 1.8298E+03
3 1.7130E+15 -4.0665E+04 0.0000E+00 0.0000E+00 1.6838E+03
4 1.7346E+15 -3.9729E+04 0.0000E+00 0.0000E+00 1.5787E+03
5 1.7565E+15 -3.8817E+04 0.0000E+00 0.0000E+00 1.5641E+03
6 1.7107E+15 -3.7924E+04 0.0000E+00 0.0000E+00 1.4574E+03
7 1.6611E+15 -3.7036E+04 0.0000E+00 0.0000E+00 1.3561E+03
8 1.6543E+15 -3.6166E+04 0.0000E+00 0.0000E+00 1.2648E+03
9 1.6850E+15 -3.5302E+04 0.0000E+00 0.0000E+00 1.1812E+03
10 1.7615E+15 -3.4449E+04 0.0000E+00 0.0000E+00 1.1669E+03
11 1.7123E+15 -3.3627E+04 0.0000E+00 0.0000E+00 1.1458E+03
12 1.6138E+15 -3.2791E+04 0.0000E+00 0.0000E+00 1.0411E+03
13 1.6308E+15 -3.1965E+04 0.0000E+00 0.0000E+00 9.6919E+02
14 1.6581E+15 -3.1161E+04 0.0000E+00 0.0000E+00 9.8432E+02
15 1.6576E+15 -3.0359E+04 0.0000E+00 0.0000E+00 9.8741E+02
16 1.6780E+15 -2.9560E+04 0.0000E+00 0.0000E+00 9.1285E+02
17 1.6906E+15 -2.8768E+04 0.0000E+00 0.0000E+00 8.5525E+02
18 1.6773E+15 -2.7987E+04 0.0000E+00 0.0000E+00 8.5787E+02
19 1.6571E+15 -2.7208E+04 0.0000E+00 0.0000E+00 8.3556E+02
20 1.6547E+15 -2.6431E+04 0.0000E+00 0.0000E+00 7.9246E+02
21 1.6878E+15 -2.5659E+04 0.0000E+00 0.0000E+00 7.6169E+02
22 1.7458E+15 -2.4887E+04 0.0000E+00 0.0000E+00 7.4698E+02
23 1.7634E+15 -2.4124E+04 0.0000E+00 0.0000E+00 7.5560E+02
24 1.8070E+15 -2.3350E+04 0.0000E+00 0.0000E+00 7.3385E+02
25 1.8616E+15 -2.2579E+04 0.0000E+00 0.0000E+00 7.1475E+02
26 1.8601E+15 -2.1822E+04 0.0000E+00 0.0000E+00 7.1208E+02
27 1.8291E+15 -2.1053E+04 0.0000E+00 0.0000E+00 6.8693E+02
28 1.8542E+15 -2.0280E+04 0.0000E+00 0.0000E+00 6.5924E+02
29 1.9410E+15 -1.9518E+04 0.0000E+00 0.0000E+00 6.4794E+02
30 1.9685E+15 -1.8749E+04 0.0000E+00 0.0000E+00 6.4988E+02
31 2.0048E+15 -1.7973E+04 0.0000E+00 0.0000E+00 6.2752E+02
32 2.1060E+15 -1.7194E+04 0.0000E+00 0.0000E+00 6.1567E+02
33 2.1705E+15 -1.6418E+04 0.0000E+00 0.0000E+00 6.1351E+02
34 2.1947E+15 -1.5629E+04 0.0000E+00 0.0000E+00 6.0244E+02
35 2.2625E+15 -1.4824E+04 0.0000E+00 0.0000E+00 6.0286E+02
36 2.4096E+15 -1.4023E+04 0.0000E+00 0.0000E+00 5.9199E+02
37 2.5632E+15 -1.3209E+04 0.0000E+00 0.0000E+00 5.8388E+02
38 2.6774E+15 -1.2384E+04 0.0000E+00 0.0000E+00 5.8875E+02
39 2.8107E+15 -1.1544E+04 0.0000E+00 0.0000E+00 5.8973E+02
40 2.9409E+15 -1.0692E+04 0.0000E+00 0.0000E+00 5.9631E+02
41 3.1254E+15 -9.8219E+03 0.0000E+00 0.0000E+00 5.9943E+02
42 3.4330E+15 -8.9344E+03 0.0000E+00 0.0000E+00 5.9491E+02
43 3.7218E+15 -8.0260E+03 0.0000E+00 0.0000E+00 5.9949E+02
44 4.0857E+15 -7.0817E+03 0.0000E+00 0.0000E+00 6.4591E+02
45 4.5046E+15 -6.1015E+03 0.0000E+00 0.0000E+00 5.9669E+02
46 5.4123E+15 -5.0997E+03 0.0000E+00 0.0000E+00 5.7835E+02
47 6.7144E+15 -4.2183E+03 0.0000E+00 0.0000E+00 4.7454E+02
48 9.1344E+15 -3.1141E+03 0.0000E+00 0.0000E+00 3.0000E+02
49 1.4157E+16 -1.8530E+03 0.0000E+00 0.0000E+00 3.0000E+02
50 2.3064E+16 -9.7547E+02 0.0000E+00 0.0000E+00 2.7186E+02

View file

@ -1,51 +0,0 @@
#Element Density(m^-3) Velocity (m/2) Temperature (K)
1 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
2 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
3 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
4 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
5 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
6 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
7 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
8 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
9 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
10 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
11 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
12 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
13 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
14 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
15 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
16 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
17 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
18 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
19 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
20 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
21 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
22 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
23 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
24 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
25 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
26 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
27 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
28 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
29 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
30 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
31 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
32 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
33 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
34 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
35 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
36 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
37 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
38 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
39 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
40 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
41 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
42 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
43 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
44 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
45 7.5916E+12 1.8413E+05 0.0000E+00 0.0000E+00 5.7527E+03
46 7.5916E+12 1.8413E+05 0.0000E+00 0.0000E+00 5.7527E+03
47 4.0201E+14 -2.3775E+04 0.0000E+00 0.0000E+00 1.1359E+04
48 4.0201E+14 -2.3775E+04 0.0000E+00 0.0000E+00 1.1359E+04
49 6.9489E+15 -8.8002E+03 0.0000E+00 0.0000E+00 9.5125E+03
50 6.9489E+15 -8.8002E+03 0.0000E+00 0.0000E+00 9.5125E+03

View file

@ -14,7 +14,8 @@
"temperature": 11604.0 "temperature": 11604.0
}, },
"geometry": { "geometry": {
"type": "1DCart", "dimension": 1,
"type": "Cart",
"meshType": "gmsh2", "meshType": "gmsh2",
"meshFile": "mesh.msh" "meshFile": "mesh.msh"
}, },
@ -43,15 +44,11 @@
{"name": "Plasma Cat e", "species": "Electron", "flow": 2.64e-5, "units": "A", "v": 180000.0, "T": [ 2300.0, 2300.0, 2300.0], {"name": "Plasma Cat e", "species": "Electron", "flow": 2.64e-5, "units": "A", "v": 180000.0, "T": [ 2300.0, 2300.0, 2300.0],
"velDist": ["Maxwellian", "Maxwellian", "Maxwellian"], "n": [ 1, 0, 0], "physicalSurface": 1} "velDist": ["Maxwellian", "Maxwellian", "Maxwellian"], "n": [ 1, 0, 0], "physicalSurface": 1}
], ],
"case": { "solver": {
"tau": [1.0e-11, 1.0e-11], "tau": [1.0e-11, 1.0e-11],
"time": 4.0e-6, "finalTime": 4.0e-6,
"pusher": ["1DCartCharged", "1DCartCharged"], "pusher": ["Electrostatic", "Electrostatic"],
"EMSolver": "Electrostatic", "EMSolver": "Electrostatic"
"initial": [
{"speciesName": "Argon+", "initialState": "Argon+_Background.dat"},
{"speciesName": "Electron", "initialState": "Electron_Background.dat"}
]
}, },
"parallel": { "parallel": {
"OpenMP":{ "OpenMP":{

View file

@ -14,7 +14,8 @@
"temperature": 11604.0 "temperature": 11604.0
}, },
"geometry": { "geometry": {
"type": "1DRad", "dimension": 1,
"type": "Cart",
"meshType": "gmsh2", "meshType": "gmsh2",
"meshFile": "mesh.msh" "meshFile": "mesh.msh"
}, },
@ -43,15 +44,11 @@
{"name": "Plasma Cat e", "species": "Electron", "flow": 2.64e-2, "units": "A", "v": 180000.0, "T": [ 2300.0, 2300.0, 2300.0], {"name": "Plasma Cat e", "species": "Electron", "flow": 2.64e-2, "units": "A", "v": 180000.0, "T": [ 2300.0, 2300.0, 2300.0],
"velDist": ["Maxwellian", "Maxwellian", "Maxwellian"], "n": [ 1, 0, 0], "physicalSurface": 1} "velDist": ["Maxwellian", "Maxwellian", "Maxwellian"], "n": [ 1, 0, 0], "physicalSurface": 1}
], ],
"case": { "solver": {
"tau": [1.0e-11, 1.0e-11], "tau": [1.0e-11, 1.0e-11],
"time": 3.0e-7, "finalTime": 3.0e-7,
"pusher": ["1DRadCharged", "1DRadCharged"], "pusher": ["Electrostatic", "Electrostatic"],
"EMSolver": "Electrostatic", "EMSolver": "Electrostatic"
"initial": [
{"speciesName": "Argon+", "initialState": "Argon+_Background.dat"},
{"speciesName": "Electron", "initialState": "Electron_Background.dat"}
]
}, },
"parallel": { "parallel": {
"OpenMP":{ "OpenMP":{

View file

@ -8,7 +8,8 @@
"folder": "base_case" "folder": "base_case"
}, },
"geometry": { "geometry": {
"type": "2DCyl", "dimension": 2,
"type": "Cyl",
"meshType": "gmsh2", "meshType": "gmsh2",
"meshFile": "mesh.msh" "meshFile": "mesh.msh"
}, },
@ -61,10 +62,10 @@
"temperature": 2500.0, "temperature": 2500.0,
"radius": 1.88e-10 "radius": 1.88e-10
}, },
"case": { "solver": {
"tau": [1.0e-9, 1.0e-11], "tau": [1.0e-9, 1.0e-11],
"time": 1.0e-6, "finalTime": 1.0e-6,
"pusher": ["2DCylCharged", "2DCylCharged"], "pusher": ["Electrostatic", "Electrostatic"],
"WeightingScheme": "Volume", "WeightingScheme": "Volume",
"EMSolver": "Electrostatic" "EMSolver": "Electrostatic"
}, },

View file

@ -8,7 +8,8 @@
"folder": "ionization_0.10mA" "folder": "ionization_0.10mA"
}, },
"geometry": { "geometry": {
"type": "2DCyl", "dimension": 2,
"type": "Cyl",
"meshType": "gmsh2", "meshType": "gmsh2",
"meshFile": "mesh.msh" "meshFile": "mesh.msh"
}, },
@ -58,10 +59,10 @@
"temperature": 2500.0, "temperature": 2500.0,
"radius": 1.88e-10 "radius": 1.88e-10
}, },
"case": { "solver": {
"tau": [1.0e-9, 1.0e-11], "tau": [1.0e-9, 1.0e-11],
"time": 1.0e-6, "finalTime": 1.0e-6,
"pusher": ["2DCylCharged", "2DCylCharged"], "pusher": ["Electrostatic", "Electrostatic"],
"WeightingScheme": "Volume", "WeightingScheme": "Volume",
"EMSolver": "Electrostatic" "EMSolver": "Electrostatic"
}, },

View file

@ -7,7 +7,8 @@
"folder": "CX_case" "folder": "CX_case"
}, },
"geometry": { "geometry": {
"type": "2DCyl", "dimension": 2,
"type": "Cyl",
"meshType": "gmsh2", "meshType": "gmsh2",
"meshFile": "mesh.msh" "meshFile": "mesh.msh"
}, },
@ -41,10 +42,10 @@
"temperature": 300.0, "temperature": 300.0,
"radius": 1.88e-10 "radius": 1.88e-10
}, },
"case": { "solver": {
"tau": [1.0e-6, 1.0e-6], "tau": [1.0e-6, 1.0e-6],
"time": 4.0e-3, "finalTime": 4.0e-3,
"pusher": ["2DCylNeutral", "2DCylNeutral"], "pusher": ["Neutral", "Neutral"],
"WeightingScheme": "Volume" "WeightingScheme": "Volume"
}, },
"interactions": { "interactions": {

View file

@ -7,7 +7,8 @@
"folder": "Elastic_case" "folder": "Elastic_case"
}, },
"geometry": { "geometry": {
"type": "2DCyl", "dimension": 2,
"type": "Cyl",
"meshType": "gmsh2", "meshType": "gmsh2",
"meshFile": "mesh.msh" "meshFile": "mesh.msh"
}, },
@ -41,10 +42,10 @@
"temperature": 300.0, "temperature": 300.0,
"radius": 1.88e-10 "radius": 1.88e-10
}, },
"case": { "solver": {
"tau": [1.0e-6, 1.0e-6], "tau": [1.0e-6, 1.0e-6],
"time": 4.0e-3, "finalTime": 4.0e-3,
"pusher": ["2DCylNeutral", "2DCylNeutral"], "pusher": ["Neutral", "Neutral"],
"WeightingScheme": "Volume" "WeightingScheme": "Volume"
}, },
"interactions": { "interactions": {

View file

@ -7,7 +7,8 @@
"folder": "Nocoll_case" "folder": "Nocoll_case"
}, },
"geometry": { "geometry": {
"type": "2DCyl", "dimension": 2,
"type": "Cyl",
"meshType": "gmsh2", "meshType": "gmsh2",
"meshFile": "mesh.msh" "meshFile": "mesh.msh"
}, },
@ -41,10 +42,10 @@
"temperature": 300.0, "temperature": 300.0,
"radius": 1.88e-10 "radius": 1.88e-10
}, },
"case": { "solver": {
"tau": [1.0e-6, 1.0e-6], "tau": [1.0e-6, 1.0e-6],
"time": 4.0e-3, "finalTime": 4.0e-3,
"pusher": ["2DCylNeutral", "2DCylNeutral"], "pusher": ["Neutral", "Neutral"],
"WeightingScheme": "Volume" "WeightingScheme": "Volume"
}, },
"parallel": { "parallel": {

View file

@ -6,7 +6,8 @@
"numColl": true "numColl": true
}, },
"geometry": { "geometry": {
"type": "2DCyl", "dimension": 2,
"type": "Cyl",
"meshType": "gmsh2", "meshType": "gmsh2",
"meshFile": "meshSingle.msh" "meshFile": "meshSingle.msh"
}, },
@ -40,10 +41,10 @@
"temperature": 300.0, "temperature": 300.0,
"radius": 1.88e-10 "radius": 1.88e-10
}, },
"case": { "solver": {
"tau": [5.0e-7], "tau": [5.0e-7],
"time": 1.0e-3, "finalTime": 1.0e-3,
"pusher": ["2DCylNeutral"], "pusher": ["Neutral"],
"WeightingScheme": "Volume" "WeightingScheme": "Volume"
}, },
"interactions": { "interactions": {

View file

@ -6,9 +6,11 @@
"numColl": true "numColl": true
}, },
"geometry": { "geometry": {
"type": "2DCyl", "dimension": 2,
"type": "Cyl",
"meshType": "gmsh2", "meshType": "gmsh2",
"meshFile": "mesh.msh" "meshFile": "mesh.msh",
"meshCollisions": "meshColl.msh"
}, },
"species": [ "species": [
{"name": "Argon", "type": "neutral", "mass": 6.633e-26, "weight": 5.0e8} {"name": "Argon", "type": "neutral", "mass": 6.633e-26, "weight": 5.0e8}
@ -40,15 +42,14 @@
"temperature": 300.0, "temperature": 300.0,
"radius": 1.88e-10 "radius": 1.88e-10
}, },
"case": { "solver": {
"tau": [5.0e-7], "tau": [5.0e-7],
"time": 1.0e-3, "finalTime": 1.0e-3,
"pusher": ["2DCylNeutral"], "pusher": ["Neutral"],
"WeightingScheme": "Volume" "WeightingScheme": "Volume"
}, },
"interactions": { "interactions": {
"folderCollisions": "./data/collisions/", "folderCollisions": "./data/collisions/",
"meshCollisions": "meshColl.msh",
"collisions": [ "collisions": [
{"species_i": "Argon", "species_j": "Argon", {"species_i": "Argon", "species_j": "Argon",
"cTypes": [ "cTypes": [

View file

@ -1,629 +0,0 @@
General.AxesFormatX = "%.3g";
General.AxesFormatY = "%.3g";
General.AxesFormatZ = "%.3g";
General.AxesLabelX = "z (m)";
General.AxesLabelY = "r (m)";
General.AxesLabelZ = "";
General.BackgroundImageFileName = "";
General.BuildOptions = " 64Bit ALGLIB Bamg Blas Blossom DIntegration Dlopen DomHex Fltk GMP Gmm[system] Hxt Hxt3D Jpeg Kbipack Lapack LinuxJoystick MathEx Mesh Metis[system] Mmg3d Mpeg NativeFileChooser Netgen ONELAB ONELABMetamodel OpenCASCADE OpenCASCADE-CAF OpenGL OpenMP OptHom Parser Plugins Png Post QuadTri Solver TetGen/BR Zlib";
General.DefaultFileName = "untitled.geo";
General.Display = "";
General.ErrorFileName = ".gmsh-errors";
General.ExecutableFileName = "/usr/bin/gmsh";
General.FileName = "/home/jorge/PPartiC/runs/cylFlow/mesh.msh";
General.FltkTheme = "";
General.GraphicsFont = "Helvetica";
General.GraphicsFontEngine = "Native";
General.GraphicsFontTitle = "Helvetica";
General.OptionsFileName = ".gmsh-options";
General.RecentFile0 = "/home/jorge/PPartiC/runs/cylFlow/mesh.msh";
General.RecentFile1 = "untitled.geo";
General.RecentFile2 = "mesh/Neutral_Expansion_Div.geo";
General.RecentFile3 = "mesh/Neutral_Expansion_Div.msh";
General.RecentFile4 = "Neutral_Expansion_Div.msh";
General.RecentFile5 = "Neutral_Expansion.geo";
General.RecentFile6 = "Neutral_Expansion_Div.geo";
General.RecentFile7 = "/home/jorge/Dropbox/UPMPlasmaLab/Post-Doc/Codes/PICCIL2D/PIC-FEM/Neutral_Expansion_Div.msh";
General.RecentFile8 = "Neutral_Expansion.msh";
General.RecentFile9 = "/home/jorge/Dropbox/UPMPlasmaLab/Post-Doc/Codes/PICCIL2D/PIC-FEM/Neutral_Expansion.msh";
General.TextEditor = "gedit '%s'";
General.TmpFileName = ".gmsh-tmp";
General.Version = "4.4.1";
General.WatchFilePattern = "";
General.AlphaBlending = 1;
General.Antialiasing = 0;
General.ArrowHeadRadius = 0.12;
General.ArrowStemLength = 0.5600000000000001;
General.ArrowStemRadius = 0.02;
General.Axes = 1;
General.AxesMikado = 0;
General.AxesAutoPosition = 1;
General.AxesForceValue = 0;
General.AxesMaxX = 1;
General.AxesMaxY = 1;
General.AxesMaxZ = 1;
General.AxesMinX = 0;
General.AxesMinY = 0;
General.AxesMinZ = 0;
General.AxesTicsX = 8;
General.AxesTicsY = 4;
General.AxesTicsZ = 5;
General.AxesValueMaxX = 1;
General.AxesValueMaxY = 1;
General.AxesValueMaxZ = 1;
General.AxesValueMinX = 0;
General.AxesValueMinY = 0;
General.AxesValueMinZ = 0;
General.BackgroundGradient = 1;
General.BackgroundImage3D = 0;
General.BackgroundImagePage = 0;
General.BackgroundImagePositionX = 0;
General.BackgroundImagePositionY = 0;
General.BackgroundImageWidth = -1;
General.BackgroundImageHeight = -1;
General.BoundingBoxSize = 0.07615773105863909;
General.Camera = 0;
General.CameraAperture = 40;
General.CameraEyeSeparationRatio = 1.5;
General.CameraFocalLengthRatio = 1;
General.Clip0A = 1;
General.Clip0B = 0;
General.Clip0C = 0;
General.Clip0D = 0;
General.Clip1A = 0;
General.Clip1B = 1;
General.Clip1C = 0;
General.Clip1D = 0;
General.Clip2A = 0;
General.Clip2B = 0;
General.Clip2C = 1;
General.Clip2D = 0;
General.Clip3A = -1;
General.Clip3B = 0;
General.Clip3C = 0;
General.Clip3D = 1;
General.Clip4A = 0;
General.Clip4B = -1;
General.Clip4C = 0;
General.Clip4D = 1;
General.Clip5A = 0;
General.Clip5B = 0;
General.Clip5C = -1;
General.Clip5D = 1;
General.ClipFactor = 5;
General.ClipOnlyDrawIntersectingVolume = 0;
General.ClipOnlyVolume = 0;
General.ClipPositionX = 650;
General.ClipPositionY = 150;
General.ClipWholeElements = 0;
General.ColorScheme = 1;
General.ConfirmOverwrite = 1;
General.ContextPositionX = 235;
General.ContextPositionY = 962;
General.DetachedMenu = 0;
General.DisplayBorderFactor = 0.2;
General.DoubleBuffer = 1;
General.DrawBoundingBoxes = 0;
General.ExpertMode = 0;
General.ExtraPositionX = 650;
General.ExtraPositionY = 350;
General.ExtraHeight = 100;
General.ExtraWidth = 100;
General.FastRedraw = 0;
General.FieldPositionX = 650;
General.FieldPositionY = 550;
General.FieldHeight = 488;
General.FieldWidth = 651;
General.FileChooserPositionX = 200;
General.FileChooserPositionY = 200;
General.FltkColorScheme = 0;
General.FontSize = -1;
General.GraphicsFontSize = 15;
General.GraphicsFontSizeTitle = 18;
General.GraphicsHeight = 1003;
General.GraphicsPositionX = 274;
General.GraphicsPositionY = 263;
General.GraphicsWidth = 1920;
General.HighOrderToolsPositionX = 650;
General.HighOrderToolsPositionY = 150;
General.HighResolutionGraphics = 1;
General.HighResolutionPointSizeFactor = 2;
General.InitialModule = 0;
General.InputScrolling = 1;
General.Light0 = 1;
General.Light0X = 0.65;
General.Light0Y = 0.65;
General.Light0Z = 1;
General.Light0W = 0;
General.Light1 = 0;
General.Light1X = 0.5;
General.Light1Y = 0.3;
General.Light1Z = 1;
General.Light1W = 0;
General.Light2 = 0;
General.Light2X = 0.5;
General.Light2Y = 0.3;
General.Light2Z = 1;
General.Light2W = 0;
General.Light3 = 0;
General.Light3X = 0.5;
General.Light3Y = 0.3;
General.Light3Z = 1;
General.Light3W = 0;
General.Light4 = 0;
General.Light4X = 0.5;
General.Light4Y = 0.3;
General.Light4Z = 1;
General.Light4W = 0;
General.Light5 = 0;
General.Light5X = 0.5;
General.Light5Y = 0.3;
General.Light5Z = 1;
General.Light5W = 0;
General.LineWidth = 1;
General.ManipulatorPositionX = 650;
General.ManipulatorPositionY = 150;
General.MaxX = 0.07000000000000001;
General.MaxY = 0.03;
General.MaxZ = 0;
General.MenuWidth = 219;
General.MenuHeight = 200;
General.MenuPositionX = 400;
General.MenuPositionY = 400;
General.MessageFontSize = -1;
General.MessageHeight = 300;
General.MinX = 0;
General.MinY = 0;
General.MinZ = 0;
General.MouseHoverMeshes = 0;
General.MouseSelection = 1;
General.MouseInvertZoom = 0;
General.NonModalWindows = 1;
General.NoPopup = 0;
General.NumThreads = 1;
General.OptionsPositionX = 827;
General.OptionsPositionY = 541;
General.Orthographic = 1;
General.PluginPositionX = 58;
General.PluginPositionY = 658;
General.PluginHeight = 488;
General.PluginWidth = 708;
General.PointSize = 3;
General.PolygonOffsetAlwaysOn = 0;
General.PolygonOffsetFactor = 1;
General.PolygonOffsetUnits = 1;
General.ProgressMeterStep = 20;
General.QuadricSubdivisions = 6;
General.RotationX = -0;
General.RotationY = 0;
General.RotationZ = -0;
General.RotationCenterGravity = 1;
General.RotationCenterX = 0;
General.RotationCenterY = 0;
General.RotationCenterZ = 0;
General.SaveOptions = 0;
General.SaveSession = 1;
General.ScaleX = 1;
General.ScaleY = 1;
General.ScaleZ = 1;
General.Shininess = 0.4;
General.ShininessExponent = 40;
General.ShowModuleMenu = 1;
General.ShowOptionsOnStartup = 0;
General.ShowMessagesOnStartup = 0;
General.SmallAxes = 1;
General.SmallAxesPositionX = -60;
General.SmallAxesPositionY = -40;
General.SmallAxesSize = 30;
General.StatisticsPositionX = 650;
General.StatisticsPositionY = 150;
General.Stereo = 0;
General.SystemMenuBar = 1;
General.Terminal = 0;
General.Tooltips = 1;
General.Trackball = 1;
General.TrackballHyperbolicSheet = 1;
General.TrackballQuaternion0 = 0;
General.TrackballQuaternion1 = 0;
General.TrackballQuaternion2 = 0;
General.TrackballQuaternion3 = 1;
General.TranslationX = 0;
General.TranslationY = 0;
General.TranslationZ = 0;
General.VectorType = 4;
General.Verbosity = 5;
General.VisibilityPositionX = 1118;
General.VisibilityPositionY = 464;
General.ZoomFactor = 4;
General.Color.Background = {255,255,255};
General.Color.BackgroundGradient = {208,215,255};
General.Color.Foreground = {85,85,85};
General.Color.Text = {0,0,0};
General.Color.Axes = {0,0,0};
General.Color.SmallAxes = {0,0,0};
General.Color.AmbientLight = {25,25,25};
General.Color.DiffuseLight = {255,255,255};
General.Color.SpecularLight = {255,255,255};
Geometry.DoubleClickedPointCommand = "";
Geometry.DoubleClickedLineCommand = "";
Geometry.DoubleClickedSurfaceCommand = "";
Geometry.DoubleClickedVolumeCommand = "";
Geometry.OCCTargetUnit = "";
Geometry.AutoCoherence = 1;
Geometry.Clip = 0;
Geometry.CopyMeshingMethod = 0;
Geometry.DoubleClickedEntityTag = 0;
Geometry.ExactExtrusion = 1;
Geometry.ExtrudeReturnLateralEntities = 1;
Geometry.ExtrudeSplinePoints = 5;
Geometry.HighlightOrphans = 0;
Geometry.LabelType = 0;
Geometry.Light = 1;
Geometry.LightTwoSide = 1;
Geometry.Lines = 1;
Geometry.LineNumbers = 0;
Geometry.LineSelectWidth = 3;
Geometry.LineType = 0;
Geometry.LineWidth = 2;
Geometry.MatchGeomAndMesh = 0;
Geometry.MatchMeshScaleFactor = 1;
Geometry.MatchMeshTolerance = 1e-06;
Geometry.Normals = 0;
Geometry.NumSubEdges = 40;
Geometry.OCCAutoFix = 1;
Geometry.OCCBooleanPreserveNumbering = 1;
Geometry.OCCDisableSTL = 0;
Geometry.OCCFixDegenerated = 0;
Geometry.OCCFixSmallEdges = 0;
Geometry.OCCFixSmallFaces = 0;
Geometry.OCCImportLabels = 1;
Geometry.OCCParallel = 0;
Geometry.OCCScaling = 1;
Geometry.OCCSewFaces = 0;
Geometry.OffsetX = 0;
Geometry.OffsetY = 0;
Geometry.OffsetZ = 0;
Geometry.OldCircle = 0;
Geometry.OldRuledSurface = 0;
Geometry.OldNewReg = 1;
Geometry.Points = 1;
Geometry.PointNumbers = 0;
Geometry.PointSelectSize = 6;
Geometry.PointSize = 4;
Geometry.PointType = 0;
Geometry.ReparamOnFaceRobust = 0;
Geometry.ScalingFactor = 1;
Geometry.OrientedPhysicals = 1;
Geometry.SnapX = 0.1;
Geometry.SnapY = 0.1;
Geometry.SnapZ = 0.1;
Geometry.Surfaces = 0;
Geometry.SurfaceNumbers = 0;
Geometry.SurfaceType = 0;
Geometry.Tangents = 0;
Geometry.Tolerance = 1e-08;
Geometry.ToleranceBoolean = 0;
Geometry.Transform = 0;
Geometry.TransformXX = 1;
Geometry.TransformXY = 0;
Geometry.TransformXZ = 0;
Geometry.TransformYX = 0;
Geometry.TransformYY = 1;
Geometry.TransformYZ = 0;
Geometry.TransformZX = 0;
Geometry.TransformZY = 0;
Geometry.TransformZZ = 1;
Geometry.Volumes = 0;
Geometry.VolumeNumbers = 0;
Geometry.Color.Points = {90,90,90};
Geometry.Color.Lines = {0,0,255};
Geometry.Color.Surfaces = {128,128,128};
Geometry.Color.Volumes = {255,255,0};
Geometry.Color.Selection = {255,0,0};
Geometry.Color.HighlightZero = {255,0,0};
Geometry.Color.HighlightOne = {255,150,0};
Geometry.Color.HighlightTwo = {255,255,0};
Geometry.Color.Tangents = {255,255,0};
Geometry.Color.Normals = {255,0,0};
Geometry.Color.Projection = {0,255,0};
Mesh.Algorithm = 2;
Mesh.Algorithm3D = 1;
Mesh.AngleSmoothNormals = 30;
Mesh.AngleToleranceFacetOverlap = 0.1;
Mesh.AnisoMax = 9.999999999999999e+32;
Mesh.AllowSwapAngle = 10;
Mesh.BdfFieldFormat = 1;
Mesh.Binary = 0;
Mesh.BoundaryLayerFanPoints = 5;
Mesh.CgnsImportOrder = 1;
Mesh.CgnsConstructTopology = 0;
Mesh.CharacteristicLengthExtendFromBoundary = 1;
Mesh.CharacteristicLengthFactor = 1;
Mesh.CharacteristicLengthMin = 0;
Mesh.CharacteristicLengthMax = 1e+22;
Mesh.CharacteristicLengthFromCurvature = 0;
Mesh.CharacteristicLengthFromPoints = 1;
Mesh.Clip = 0;
Mesh.ColorCarousel = 0;
Mesh.CompoundClassify = 1;
Mesh.CompoundCharacteristicLengthFactor = 0.5;
Mesh.CpuTime = 0;
Mesh.DrawSkinOnly = 0;
Mesh.Dual = 0;
Mesh.ElementOrder = 1;
Mesh.Explode = 1;
Mesh.FlexibleTransfinite = 0;
Mesh.NewtonConvergenceTestXYZ = 0;
Mesh.Format = 10;
Mesh.Hexahedra = 1;
Mesh.HighOrderIterMax = 100;
Mesh.HighOrderNumLayers = 6;
Mesh.HighOrderOptimize = 0;
Mesh.HighOrderPassMax = 25;
Mesh.HighOrderPeriodic = 0;
Mesh.HighOrderPoissonRatio = 0.33;
Mesh.HighOrderPrimSurfMesh = 0;
Mesh.HighOrderDistCAD = 0;
Mesh.HighOrderThresholdMin = 0.1;
Mesh.HighOrderThresholdMax = 2;
Mesh.LabelSampling = 1;
Mesh.LabelType = 0;
Mesh.LcIntegrationPrecision = 1e-09;
Mesh.Light = 1;
Mesh.LightLines = 2;
Mesh.LightTwoSide = 1;
Mesh.Lines = 1;
Mesh.LineNumbers = 0;
Mesh.LineWidth = 1;
Mesh.MaxNumThreads1D = 0;
Mesh.MaxNumThreads2D = 0;
Mesh.MaxNumThreads3D = 0;
Mesh.MeshOnlyVisible = 0;
Mesh.MetisAlgorithm = 1;
Mesh.MetisEdgeMatching = 2;
Mesh.MetisMaxLoadImbalance = -1;
Mesh.MetisObjective = 1;
Mesh.MetisMinConn = -1;
Mesh.MetisRefinementAlgorithm = 2;
Mesh.MinimumCirclePoints = 7;
Mesh.MinimumCurvePoints = 3;
Mesh.MshFileVersion = 4.1;
Mesh.MedFileMinorVersion = -1;
Mesh.MedImportGroupsOfNodes = 0;
Mesh.MedSingleModel = 0;
Mesh.PartitionHexWeight = -1;
Mesh.PartitionLineWeight = -1;
Mesh.PartitionPrismWeight = -1;
Mesh.PartitionPyramidWeight = -1;
Mesh.PartitionQuadWeight = -1;
Mesh.PartitionTrihedronWeight = 0;
Mesh.PartitionTetWeight = -1;
Mesh.PartitionTriWeight = -1;
Mesh.PartitionCreateTopology = 1;
Mesh.PartitionCreatePhysicals = 1;
Mesh.PartitionCreateGhostCells = 0;
Mesh.PartitionSplitMeshFiles = 0;
Mesh.PartitionTopologyFile = 0;
Mesh.PartitionOldStyleMsh2 = 1;
Mesh.NbHexahedra = 0;
Mesh.NbNodes = 27248;
Mesh.NbPartitions = 0;
Mesh.NbPrisms = 0;
Mesh.NbPyramids = 0;
Mesh.NbTrihedra = 0;
Mesh.NbQuadrangles = 26877;
Mesh.NbTetrahedra = 0;
Mesh.NbTriangles = 0;
Mesh.Normals = 0;
Mesh.NumSubEdges = 2;
Mesh.Optimize = 1;
Mesh.OptimizeThreshold = 0.3;
Mesh.OptimizeNetgen = 0;
Mesh.Points = 0;
Mesh.PointNumbers = 0;
Mesh.PointSize = 4;
Mesh.PointType = 0;
Mesh.Prisms = 1;
Mesh.Pyramids = 1;
Mesh.Trihedra = 1;
Mesh.Quadrangles = 1;
Mesh.QualityInf = 0;
Mesh.QualitySup = 0;
Mesh.QualityType = 2;
Mesh.RadiusInf = 0;
Mesh.RadiusSup = 0;
Mesh.RandomFactor = 1e-09;
Mesh.RandomFactor3D = 1e-12;
Mesh.RandomSeed = 1;
Mesh.PreserveNumberingMsh2 = 0;
Mesh.IgnorePeriodicity = 0;
Mesh.RecombinationAlgorithm = 1;
Mesh.RecombineAll = 0;
Mesh.RecombineOptimizeTopology = 5;
Mesh.Recombine3DAll = 0;
Mesh.Recombine3DLevel = 0;
Mesh.Recombine3DConformity = 0;
Mesh.RefineSteps = 10;
Mesh.Renumber = 1;
Mesh.SaveAll = 0;
Mesh.SaveElementTagType = 1;
Mesh.SaveTopology = 0;
Mesh.SaveParametric = 0;
Mesh.SaveGroupsOfNodes = 0;
Mesh.ScalingFactor = 1;
Mesh.SecondOrderExperimental = 0;
Mesh.SecondOrderIncomplete = 0;
Mesh.SecondOrderLinear = 0;
Mesh.Smoothing = 1;
Mesh.SmoothCrossField = 0;
Mesh.CrossFieldClosestPoint = 1;
Mesh.SmoothNormals = 0;
Mesh.SmoothRatio = 1.8;
Mesh.StlOneSolidPerSurface = 0;
Mesh.StlRemoveDuplicateTriangles = 0;
Mesh.SubdivisionAlgorithm = 0;
Mesh.SurfaceEdges = 0;
Mesh.SurfaceFaces = 0;
Mesh.SurfaceNumbers = 0;
Mesh.SwitchElementTags = 0;
Mesh.Tangents = 0;
Mesh.Tetrahedra = 1;
Mesh.ToleranceEdgeLength = 0;
Mesh.ToleranceInitialDelaunay = 1e-08;
Mesh.Triangles = 1;
Mesh.UnvStrictFormat = 1;
Mesh.VolumeEdges = 1;
Mesh.VolumeFaces = 0;
Mesh.VolumeNumbers = 0;
Mesh.Voronoi = 0;
Mesh.ZoneDefinition = 0;
Mesh.Color.Points = {0,0,255};
Mesh.Color.PointsSup = {255,0,255};
Mesh.Color.Lines = {0,0,0};
Mesh.Color.Triangles = {160,150,255};
Mesh.Color.Quadrangles = {130,120,225};
Mesh.Color.Tetrahedra = {160,150,255};
Mesh.Color.Hexahedra = {130,120,225};
Mesh.Color.Prisms = {232,210,23};
Mesh.Color.Pyramids = {217,113,38};
Mesh.Color.Trihedra = {20,255,0};
Mesh.Color.Tangents = {255,255,0};
Mesh.Color.Normals = {255,0,0};
Mesh.Color.Zero = {255,120,0};
Mesh.Color.One = {0,255,132};
Mesh.Color.Two = {255,160,0};
Mesh.Color.Three = {0,255,192};
Mesh.Color.Four = {255,200,0};
Mesh.Color.Five = {0,216,255};
Mesh.Color.Six = {255,240,0};
Mesh.Color.Seven = {0,176,255};
Mesh.Color.Eight = {228,255,0};
Mesh.Color.Nine = {0,116,255};
Mesh.Color.Ten = {188,255,0};
Mesh.Color.Eleven = {0,76,255};
Mesh.Color.Twelve = {148,255,0};
Mesh.Color.Thirteen = {24,0,255};
Mesh.Color.Fourteen = {108,255,0};
Mesh.Color.Fifteen = {84,0,255};
Mesh.Color.Sixteen = {68,255,0};
Mesh.Color.Seventeen = {104,0,255};
Mesh.Color.Eighteen = {0,255,52};
Mesh.Color.Nineteen = {184,0,255};
Solver.Executable0 = "";
Solver.Executable1 = "";
Solver.Executable2 = "";
Solver.Executable3 = "";
Solver.Executable4 = "";
Solver.Executable5 = "";
Solver.Executable6 = "";
Solver.Executable7 = "";
Solver.Executable8 = "";
Solver.Executable9 = "";
Solver.Name0 = "GetDP";
Solver.Name1 = "";
Solver.Name2 = "";
Solver.Name3 = "";
Solver.Name4 = "";
Solver.Name5 = "";
Solver.Name6 = "";
Solver.Name7 = "";
Solver.Name8 = "";
Solver.Name9 = "";
Solver.Extension0 = ".pro";
Solver.Extension1 = "";
Solver.Extension2 = "";
Solver.Extension3 = "";
Solver.Extension4 = "";
Solver.Extension5 = "";
Solver.Extension6 = "";
Solver.Extension7 = "";
Solver.Extension8 = "";
Solver.Extension9 = "";
Solver.OctaveInterpreter = "octave";
Solver.PythonInterpreter = "python";
Solver.RemoteLogin0 = "";
Solver.RemoteLogin1 = "";
Solver.RemoteLogin2 = "";
Solver.RemoteLogin3 = "";
Solver.RemoteLogin4 = "";
Solver.RemoteLogin5 = "";
Solver.RemoteLogin6 = "";
Solver.RemoteLogin7 = "";
Solver.RemoteLogin8 = "";
Solver.RemoteLogin9 = "";
Solver.SocketName = ".gmshsock";
Solver.AlwaysListen = 0;
Solver.AutoArchiveOutputFiles = 0;
Solver.AutoCheck = 1;
Solver.AutoLoadDatabase = 0;
Solver.AutoSaveDatabase = 1;
Solver.AutoMesh = 2;
Solver.AutoMergeFile = 1;
Solver.AutoShowViews = 2;
Solver.AutoShowLastStep = 1;
Solver.Plugins = 0;
Solver.ShowInvisibleParameters = 0;
Solver.Timeout = 5;
PostProcessing.DoubleClickedGraphPointCommand = "";
PostProcessing.GraphPointCommand = "";
PostProcessing.AnimationDelay = 0.1;
PostProcessing.AnimationCycle = 0;
PostProcessing.AnimationStep = 1;
PostProcessing.CombineRemoveOriginal = 1;
PostProcessing.DoubleClickedGraphPointX = 0;
PostProcessing.DoubleClickedGraphPointY = 0;
PostProcessing.DoubleClickedView = 0;
PostProcessing.ForceElementData = 0;
PostProcessing.ForceNodeData = 0;
PostProcessing.Format = 10;
PostProcessing.GraphPointX = 0;
PostProcessing.GraphPointY = 0;
PostProcessing.HorizontalScales = 1;
PostProcessing.Link = 0;
PostProcessing.NbViews = 0;
PostProcessing.Plugins = 1;
PostProcessing.SaveInterpolationMatrices = 1;
PostProcessing.SaveMesh = 1;
PostProcessing.Smoothing = 0;
Print.ParameterCommand = "Mesh.Clip=1; View.Clip=1; General.ClipWholeElements=1; General.Clip0D=Print.Parameter; SetChanged;";
Print.Parameter = 0;
Print.ParameterFirst = -1;
Print.ParameterLast = 1;
Print.ParameterSteps = 10;
Print.Background = 0;
Print.CompositeWindows = 0;
Print.PgfTwoDim = 1;
Print.PgfExportAxis = 0;
Print.PgfHorizontalBar = 0;
Print.DeleteTemporaryFiles = 1;
Print.EpsBestRoot = 1;
Print.EpsCompress = 0;
Print.EpsLineWidthFactor = 1;
Print.EpsOcclusionCulling = 1;
Print.EpsPointSizeFactor = 1;
Print.EpsPS3Shading = 0;
Print.EpsQuality = 1;
Print.Format = 10;
Print.GeoLabels = 1;
Print.GeoOnlyPhysicals = 0;
Print.GifDither = 0;
Print.GifInterlace = 0;
Print.GifSort = 1;
Print.GifTransparent = 0;
Print.Height = -1;
Print.JpegQuality = 100;
Print.JpegSmoothing = 0;
Print.PostElementary = 1;
Print.PostElement = 0;
Print.PostGamma = 0;
Print.PostEta = 0;
Print.PostSICN = 0;
Print.PostSIGE = 0;
Print.PostDisto = 0;
Print.TexAsEquation = 0;
Print.Text = 1;
Print.X3dCompatibility = 0;
Print.X3dPrecision = 1e-09;
Print.X3dRemoveInnerBorders = 0;
Print.X3dTransparency = 0;
Print.Width = -1;

View file

@ -67,24 +67,35 @@ MODULE moduleMeshInputGmsh2
!Read the nodes information !Read the nodes information
DO e = 1, self%numNodes DO e = 1, self%numNodes
READ(10, *) n, r(1), r(2), r(3) READ(10, *) n, r(1), r(2), r(3)
SELECT CASE(self%geometry) SELECT CASE(self%dimen)
CASE("3DCart") CASE(3)
ALLOCATE(meshNode3Dcart::self%nodes(n)%obj) ALLOCATE(meshNode3Dcart::self%nodes(n)%obj)
self%connectMesh => connectMesh3DCart
CASE("2DCyl") CASE(2)
SELECT CASE(self%geometry)
CASE("Cyl")
ALLOCATE(meshNode2DCyl:: self%nodes(n)%obj) ALLOCATE(meshNode2DCyl:: self%nodes(n)%obj)
r(3) = 0.D0 self%connectMesh => connectMesh2DCyl
CASE("2DCart") CASE("Cart")
ALLOCATE(meshNode2DCart:: self%nodes(n)%obj) ALLOCATE(meshNode2DCart:: self%nodes(n)%obj)
self%connectMesh => connectMesh2DCart
END SELECT
r(3) = 0.D0 r(3) = 0.D0
CASE("1DRad") CASE(1)
SELECT CASE(self%geometry)
CASE("Rad")
ALLOCATE(meshNode1DRad:: self%nodes(n)%obj) ALLOCATE(meshNode1DRad:: self%nodes(n)%obj)
r(2:3) = 0.D0 self%connectMesh => connectMesh1DRad
CASE("1DCart") CASE("Cart")
ALLOCATE(meshNode1DCart:: self%nodes(n)%obj) ALLOCATE(meshNode1DCart:: self%nodes(n)%obj)
self%connectMesh => connectMesh1DCart
END SELECT
r(2:3) = 0.D0 r(2:3) = 0.D0
END SELECT END SELECT
@ -92,7 +103,6 @@ MODULE moduleMeshInputGmsh2
END DO END DO
!Skip comments !Skip comments
READ(10, *) READ(10, *)
READ(10, *) READ(10, *)
@ -106,16 +116,16 @@ MODULE moduleMeshInputGmsh2
self%numEdges = 0 self%numEdges = 0
DO e = 1, totalNumElem DO e = 1, totalNumElem
READ(10, *) eTemp, elemType READ(10, *) eTemp, elemType
SELECT CASE(self%geometry) SELECT CASE(self%dimen)
CASE("3DCart") CASE(3)
!Element type 2 is triangle in gmsh !Element type 2 is triangle in gmsh
IF (elemType == 2) self%numEdges = e IF (elemType == 2) self%numEdges = e
CASE("2DCyl","2DCart") CASE(2)
!Element type 1 is segment in Gmsh !Element type 1 is segment in Gmsh
IF (elemType == 1) self%numEdges = e IF (elemType == 1) self%numEdges = e
CASE("1DRad","1DCart") CASE(1)
!Element type 15 is physical point in Gmsh !Element type 15 is physical point in Gmsh
IF (elemType == 15) self%numEdges = e IF (elemType == 15) self%numEdges = e
@ -148,8 +158,8 @@ MODULE moduleMeshInputGmsh2
!Reads edges !Reads edges
DO e=1, self%numEdges DO e=1, self%numEdges
!Reads the edge according to the geometry !Reads the edge according to the geometry
SELECT CASE(self%geometry) SELECT CASE(self%dimen)
CASE("3DCart") CASE(3)
READ(10, *) n, elemType, eTemp, boundaryType READ(10, *) n, elemType, eTemp, boundaryType
BACKSPACE(10) BACKSPACE(10)
@ -167,7 +177,9 @@ MODULE moduleMeshInputGmsh2
END SELECT END SELECT
CASE("2DCyl") CASE (2)
SELECT CASE(self%geometry)
CASE("Cyl")
ALLOCATE(p(1:2)) ALLOCATE(p(1:2))
READ(10,*) n, elemType, eTemp, boundaryType, eTemp, p(1:2) READ(10,*) n, elemType, eTemp, boundaryType, eTemp, p(1:2)
@ -176,7 +188,7 @@ MODULE moduleMeshInputGmsh2
ALLOCATE(meshEdge2DCyl:: self%edges(e)%obj) ALLOCATE(meshEdge2DCyl:: self%edges(e)%obj)
CASE("2DCart") CASE("Cart")
ALLOCATE(p(1:2)) ALLOCATE(p(1:2))
READ(10,*) n, elemType, eTemp, boundaryType, eTemp, p(1:2) READ(10,*) n, elemType, eTemp, boundaryType, eTemp, p(1:2)
@ -185,7 +197,11 @@ MODULE moduleMeshInputGmsh2
ALLOCATE(meshEdge2DCart:: self%edges(e)%obj) ALLOCATE(meshEdge2DCart:: self%edges(e)%obj)
CASE("1DRad") END SELECT
CASE(1)
SELECT CASE(self%geometry)
CASE("Rad")
ALLOCATE(p(1:1)) ALLOCATE(p(1:1))
READ(10, *) n, elemType, eTemp, boundaryType, eTemp, p(1) READ(10, *) n, elemType, eTemp, boundaryType, eTemp, p(1)
@ -194,7 +210,7 @@ MODULE moduleMeshInputGmsh2
ALLOCATE(meshEdge1DRad:: self%edges(e)%obj) ALLOCATE(meshEdge1DRad:: self%edges(e)%obj)
CASE("1DCart") CASE("Cart")
ALLOCATE(p(1:1)) ALLOCATE(p(1:1))
READ(10, *) n, elemType, eTemp, boundaryType, eTemp, p(1) READ(10, *) n, elemType, eTemp, boundaryType, eTemp, p(1)
@ -205,6 +221,8 @@ MODULE moduleMeshInputGmsh2
END SELECT END SELECT
END SELECT
CALL self%edges(e)%obj%init(n, p, bt, boundaryType) CALL self%edges(e)%obj%init(n, p, bt, boundaryType)
DEALLOCATE(p) DEALLOCATE(p)
@ -215,8 +233,8 @@ MODULE moduleMeshInputGmsh2
!Read and initialize volumes !Read and initialize volumes
DO e = 1, self%numVols DO e = 1, self%numVols
!Reads the volume according to the geometry !Reads the volume according to the geometry
SELECT CASE(self%geometry) SELECT CASE(self%dimen)
CASE("3DCart") CASE(3)
READ(10, *) n, elemType READ(10, *) n, elemType
BACKSPACE(10) BACKSPACE(10)
@ -229,7 +247,9 @@ MODULE moduleMeshInputGmsh2
END SELECT END SELECT
CASE("2DCyl") CASE(2)
SELECT CASE(self%geometry)
CASE("Cyl")
READ(10,*) n, elemType READ(10,*) n, elemType
BACKSPACE(10) BACKSPACE(10)
@ -248,7 +268,7 @@ MODULE moduleMeshInputGmsh2
END SELECT END SELECT
CASE("2DCart") CASE("Cart")
READ(10,*) n, elemType READ(10,*) n, elemType
BACKSPACE(10) BACKSPACE(10)
@ -267,13 +287,17 @@ MODULE moduleMeshInputGmsh2
END SELECT END SELECT
CASE("1DRad") END SELECT
CASE(1)
SELECT CASE(self%geometry)
CASE("Rad")
ALLOCATE(p(1:2)) ALLOCATE(p(1:2))
READ(10, *) n, elemType, eTemp, eTemp, eTemp, p(1:2) READ(10, *) n, elemType, eTemp, eTemp, eTemp, p(1:2)
ALLOCATE(meshVol1DRadSegm:: self%vols(e)%obj) ALLOCATE(meshVol1DRadSegm:: self%vols(e)%obj)
CASE("1DCart") CASE("Cart")
ALLOCATE(p(1:2)) ALLOCATE(p(1:2))
READ(10, *) n, elemType, eTemp, eTemp, eTemp, p(1:2) READ(10, *) n, elemType, eTemp, eTemp, eTemp, p(1:2)
@ -281,6 +305,8 @@ MODULE moduleMeshInputGmsh2
END SELECT END SELECT
END SELECT
CALL self%vols(e)%obj%init(n - numEdges, p, self%nodes) CALL self%vols(e)%obj%init(n - numEdges, p, self%nodes)
DEALLOCATE(p) DEALLOCATE(p)
@ -288,6 +314,9 @@ MODULE moduleMeshInputGmsh2
CLOSE(10) CLOSE(10)
!Call mesh connectivity
CALL self%connectMesh
END SUBROUTINE readGmsh2 END SUBROUTINE readGmsh2
!Reads the initial information from an output file for an species !Reads the initial information from an output file for an species

View file

@ -262,6 +262,8 @@ MODULE moduleMesh
!Generic mesh type !Generic mesh type
TYPE, ABSTRACT:: meshGeneric TYPE, ABSTRACT:: meshGeneric
!Dimension of the mesh
INTEGER:: dimen
!Geometry of the mesh !Geometry of the mesh
CHARACTER(:), ALLOCATABLE:: geometry CHARACTER(:), ALLOCATABLE:: geometry
!Number of elements !Number of elements

View file

@ -40,16 +40,6 @@ MODULE moduleInput
CALL readSpecies(config) CALL readSpecies(config)
CALL checkStatus(config, "readSpecies") CALL checkStatus(config, "readSpecies")
!Reads case parameters
CALL verboseError('Reading Case parameters...')
CALL readCase(config)
CALL checkStatus(config, "readCase")
!Read interactions between species
CALL verboseError('Reading interaction between species...')
CALL readInteractions(config)
CALL checkStatus(config, "readInteractions")
!Read boundaries !Read boundaries
CALL verboseError('Reading boundary conditions...') CALL verboseError('Reading boundary conditions...')
CALL readBoundary(config) CALL readBoundary(config)
@ -60,6 +50,16 @@ MODULE moduleInput
CALL readGeometry(config) CALL readGeometry(config)
CALL checkStatus(config, "readGeometry") CALL checkStatus(config, "readGeometry")
!Read solver parameters
CALL verboseError('Reading Solver parameters...')
CALL readSolver(config)
CALL checkStatus(config, "readSolver")
!Read interactions between species
CALL verboseError('Reading interaction between species...')
CALL readInteractions(config)
CALL checkStatus(config, "readInteractions")
!Read probes !Read probes
CALL verboseError('Reading Probes...') CALL verboseError('Reading Probes...')
CALL readProbes(config) CALL readProbes(config)
@ -85,12 +85,15 @@ MODULE moduleInput
!Copies input file to output folder !Copies input file to output folder
CALL EXECUTE_COMMAND_LINE('cp ' // inputFile // ' ' // path // folder) CALL EXECUTE_COMMAND_LINE('cp ' // inputFile // ' ' // path // folder)
!Copies particle mesh !Copies particle mesh
IF (mesh%dimen > 0) THEN
CALL EXECUTE_COMMAND_LINE('cp ' // pathMeshParticle // ' ' // path // folder) CALL EXECUTE_COMMAND_LINE('cp ' // pathMeshParticle // ' ' // path // folder)
IF (doubleMesh) THEN IF (doubleMesh) THEN
CALL EXECUTE_COMMAND_LINE('cp ' // pathMeshColl // ' ' // path // folder) CALL EXECUTE_COMMAND_LINE('cp ' // pathMeshColl // ' ' // path // folder)
END IF END IF
END IF
END SUBROUTINE readConfig END SUBROUTINE readConfig
!Checks the status of the JSON case file and, if failed, exits the execution. !Checks the status of the JSON case file and, if failed, exits the execution.
@ -156,7 +159,7 @@ MODULE moduleInput
END SUBROUTINE readReference END SUBROUTINE readReference
!Reads the specific case parameters !Reads the specific case parameters
SUBROUTINE readCase(config) SUBROUTINE readSolver(config)
USE moduleRefParam USE moduleRefParam
USE moduleErrors USE moduleErrors
USE moduleCaseParam USE moduleCaseParam
@ -164,6 +167,7 @@ MODULE moduleInput
USE moduleSpecies USE moduleSpecies
USE moduleCollisions USE moduleCollisions
USE moduleOutput USE moduleOutput
USE moduleMesh
USE json_module USE json_module
IMPLICIT NONE IMPLICIT NONE
@ -172,47 +176,67 @@ MODULE moduleInput
CHARACTER(:), ALLOCATABLE:: object CHARACTER(:), ALLOCATABLE:: object
!simulation final and initial times in [t] !simulation final and initial times in [t]
REAL(8):: finalTime, initialTime REAL(8):: finalTime, initialTime
CHARACTER(:), ALLOCATABLE:: pusherType, WSType CHARACTER(:), ALLOCATABLE:: pusherType, WSType, EMType
INTEGER:: nTau, nSolver INTEGER:: nTau, nSolver
INTEGER:: i INTEGER:: i
CHARACTER(2):: iString CHARACTER(2):: iString
CHARACTER(1):: tString CHARACTER(1):: tString
object = 'case' object = 'solver'
!Time parameters !Time parameters
CALL config%info(object // '.tau', found, n_children = nTau) CALL config%info(object // '.tau', found, n_children = nTau)
IF (.NOT. found .OR. nTau == 0) CALL criticalError('Required parameter tau not found','readCase') IF (.NOT. found .OR. nTau == 0) THEN
CALL criticalError('Required parameter tau not found','readSolver')
END IF
ALLOCATE(tau(1:nSpecies)) ALLOCATE(tau(1:nSpecies))
DO i = 1, nTau DO i = 1, nTau
WRITE(iString, '(I2)') i WRITE(iString, '(I2)') i
CALL config%get(object // '.tau(' // TRIM(iString) // ')', tau(i), found) CALL config%get(object // '.tau(' // TRIM(iString) // ')', tau(i), found)
END DO END DO
tauMin = MINVAL(tau(1:nTau))
IF (nTau < nSpecies) THEN IF (nTau < nSpecies) THEN
CALL warningError('Using minimum time step for some species') CALL warningError('Using minimum time step for some species')
tau(nTau+1:nSpecies) = MINVAL(tau(1:nTau)) tau(nTau+1:nSpecies) = tauMin
END IF END IF
tauMin = MINVAL(tau)
!Gets the simulation final time !Gets the simulation final time
CALL config%get(object // '.finalTime', finalTime, found) CALL config%get(object // '.finalTime', finalTime, found)
IF (.NOT. found) CALL criticalError('Required parameter finalTime not found','readCase') IF (.NOT. found) THEN
CALL criticalError('Required parameter finalTime not found','readSolver')
END IF
!Convert simulation time to number of iterations !Convert simulation time to number of iterations
tFinal = INT(finalTime / tauMin) tFinal = INT(finalTime / tauMin)
!Gets the simulation initial time !Gets the simulation initial time
CALL config%get(object // '.initialTime', initialTime, found) CALL config%get(object // '.initialTime', initialTime, found)
IF (found) tInitial = INT(initialTime / tauMin) IF (found) THEN
tInitial = INT(initialTime / tauMin)
END IF
!Gest the pusher for each species !Gest the pusher for each species
IF (mesh%dimen > 0) THEN
CALL config%info(object // '.pusher', found, n_children = nSolver) CALL config%info(object // '.pusher', found, n_children = nSolver)
IF (.NOT. found .OR. nSolver /= nSpecies) CALL criticalError('Required parameter pusher not found','readCase') IF (.NOT. found .OR. nSolver /= nSpecies) THEN
CALL criticalError('Required parameter pusher not found','readSolver')
END IF
END IF
!Allocates all the pushers for particles !Allocates all the pushers for particles
ALLOCATE(solver%pusher(1:nSpecies)) ALLOCATE(solver%pusher(1:nSpecies))
!Initialize pushers !Initialize pushers
DO i = 1, nSolver DO i = 1, nSpecies
WRITE(iString, '(I2)') i WRITE(iString, '(I2)') i
CALL config%get(object // '.pusher(' // TRIM(iString) // ')', pusherType, found) CALL config%get(object // '.pusher(' // TRIM(iString) // ')', pusherType, found)
@ -221,22 +245,38 @@ MODULE moduleInput
END DO END DO
!Gest the non-analogue scheme !Get the non-analogue scheme
CALL config%get(object // '.WeightingScheme', WSType, found) CALL config%get(object // '.WeightingScheme', WSType, found)
CALL solver%initWS(WSType) CALL solver%initWS(WSType)
!Makes tau(s) non-dimensional !Make tau(s) non-dimensional
tau = tau / ti_ref tau = tau / ti_ref
tauMin = tauMin / ti_ref tauMin = tauMin / ti_ref
!Sets the format of output files accordint to iteration number !Set the format of output files accordint to iteration number
iterationDigits = INT(LOG10(REAL(tFinal))) + 1 iterationDigits = INT(LOG10(REAL(tFinal))) + 1
WRITE(tString, '(I1)') iterationDigits WRITE(tString, '(I1)') iterationDigits
iterationFormat = "(I" // tString // "." // tString // ")" iterationFormat = "(I" // tString // "." // tString // ")"
END SUBROUTINE readCase !Get EM solver
CALL config%get(object // '.EMSolver', EMType, found)
IF (found) THEN
CALL solver%initEM(EMType)
SELECT CASE(EMType)
CASE("Electrostatic")
!Read BC
CALL readEMBoundary(config)
!Reads the initial information for the species CASE DEFAULT
CALL criticalError('EM Solver ' // EMType // ' not found', 'readSolver')
END SELECT
END IF
END SUBROUTINE readSolver
!Read the initial information for the species
SUBROUTINE readInitial(config) SUBROUTINE readInitial(config)
USE moduleSpecies USE moduleSpecies
USE moduleMesh USE moduleMesh
@ -270,13 +310,13 @@ MODULE moduleInput
REAL(8):: vTh REAL(8):: vTh
TYPE(lNode), POINTER:: partCurr, partNext TYPE(lNode), POINTER:: partCurr, partNext
CALL config%info('case.initial', found, n_children = nInitial) CALL config%info('solver.initial', found, n_children = nInitial)
IF (found) THEN IF (found) THEN
!Reads the information from initial species !Reads the information from initial species
DO i = 1, nInitial DO i = 1, nInitial
WRITE(iString, '(I2)') i WRITE(iString, '(I2)') i
object = 'case.initial(' // iString // ')' object = 'solver.initial(' // iString // ')'
CALL config%get(object // '.species', spName, found) CALL config%get(object // '.species', spName, found)
sp = speciesName2Index(spName) sp = speciesName2Index(spName)
CALL config%get(object // '.file', spFile, found) CALL config%get(object // '.file', spFile, found)
@ -372,7 +412,7 @@ MODULE moduleInput
END DO END DO
!Convert temporal list of particles into initial partOld array !Convert temporal list of particles into initial partOld array
!Deallocates the list of initial particles !Deallocate the list of initial particles
nNewPart = partInitial%amount nNewPart = partInitial%amount
IF (nNewPart > 0) THEN IF (nNewPart > 0) THEN
ALLOCATE(partOld(1:nNewPart)) ALLOCATE(partOld(1:nNewPart))
@ -504,13 +544,13 @@ MODULE moduleInput
END DO END DO
!Reads relations between species !Read relations between species
DO i = 1, nSpecies DO i = 1, nSpecies
WRITE(iString, '(I2)') i WRITE(iString, '(I2)') i
object = 'species(' // TRIM(iString) // ')' object = 'species(' // TRIM(iString) // ')'
SELECT TYPE(sp => species(i)%obj) SELECT TYPE(sp => species(i)%obj)
TYPE IS (speciesNeutral) TYPE IS (speciesNeutral)
!Gets species linked ion !Get species linked ion
CALL config%get(object // '.ion', linkName, found) CALL config%get(object // '.ion', linkName, found)
IF (found) THEN IF (found) THEN
linkID = speciesName2Index(linkName) linkID = speciesName2Index(linkName)
@ -519,7 +559,7 @@ MODULE moduleInput
END IF END IF
TYPE IS (speciesCharged) TYPE IS (speciesCharged)
!Gets species linked neutral !Get species linked neutral
CALL config%get(object // '.neutral', linkName, found) CALL config%get(object // '.neutral', linkName, found)
IF (found) THEN IF (found) THEN
linkID = speciesName2Index(linkName) linkID = speciesName2Index(linkName)
@ -580,19 +620,6 @@ MODULE moduleInput
!Checks if MC collisions have been defined !Checks if MC collisions have been defined
CALL config%info('interactions.collisions', found) CALL config%info('interactions.collisions', found)
IF (found) THEN IF (found) THEN
!Checks if a mesh for collisions has been defined
!The mesh will be initialized and reader in readGeometry
CALL config%info('interactions.meshCollisions', found)
IF (found) THEN
!Points meshForMCC to the specific mesh defined
meshForMCC => meshColl
ELSE
!Points the meshForMCC pointer to the Particles Mesh
meshForMCC => mesh
END IF
!Reads collision time step !Reads collision time step
CALL config%info('interactions.timeStep', found) CALL config%info('interactions.timeStep', found)
IF (found) THEN IF (found) THEN
@ -792,11 +819,6 @@ MODULE moduleInput
USE moduleMesh USE moduleMesh
USE moduleMeshInputGmsh2, ONLY: initGmsh2 USE moduleMeshInputGmsh2, ONLY: initGmsh2
USE moduleMeshInput0D, ONLY: init0D USE moduleMeshInput0D, ONLY: init0D
USE moduleMesh3DCart, ONLY: connectMesh3DCart
USE moduleMesh2DCyl, ONLY: connectMesh2DCyl
USE moduleMesh2DCart, ONLY: connectMesh2DCart
USE moduleMesh1DRad, ONLY: connectMesh1DRad
USE moduleMesh1DCart, ONLY: connectMesh1DCart
USE moduleErrors USE moduleErrors
USE moduleOutput USE moduleOutput
USE moduleRefParam USE moduleRefParam
@ -805,87 +827,123 @@ MODULE moduleInput
IMPLICIT NONE IMPLICIT NONE
TYPE(json_file), INTENT(inout):: config TYPE(json_file), INTENT(inout):: config
CHARACTER(:), ALLOCATABLE:: object
LOGICAL:: found LOGICAL:: found
CHARACTER(:), ALLOCATABLE:: meshFormat, meshFile, EMType CHARACTER(:), ALLOCATABLE:: meshFormat, meshFile
REAL(8):: volume REAL(8):: volume
!Firstly, indicates if a specific mesh for MC collisions is being use object = 'geometry'
doubleMesh = ASSOCIATED(meshForMCC, meshColl)
!Selects the type of geometry. !Checks if a mesh for collisions has been defined
CALL config%get('geometry.type', mesh%geometry, found) !The mesh will be initialized and reader in readGeometry
IF (doubleMesh) meshColl%geometry = mesh%geometry CALL config%info(object // '.meshCollisions', found)
IF (found) THEN
!Points meshForMCC to the specific mesh defined
meshForMCC => meshColl
doubleMesh = .TRUE.
!Gets the type of mesh ELSE
CALL config%get('geometry.meshType', meshFormat, found) CALL config%info('interactions', found)
SELECT CASE(meshFormat) IF (found) THEN
CASE ("gmsh2") !Points the meshForMCC pointer to the Particles Mesh
CALL initGmsh2(mesh) meshForMCC => mesh
IF (doubleMesh) CALL initGmsh2(meshColl)
CASE ("0D") END IF
CALL config%get('geometry.meshType', meshFormat, found) doubleMesh = .FALSE.
CALL init0D(mesh)
CASE DEFAULT
CALL criticalError("Mesh format " // meshFormat // " not recogniced", "readGeometry")
END SELECT
!Reads the mesh file
CALL config%get('geometry.meshFile', meshFile, found)
pathMeshParticle = path // meshFile
CALL mesh%readMesh(pathMeshParticle)
DEALLOCATE(meshFile)
IF (doubleMesh) THEN
!Reads the mesh file for collisions
CALL config%get('interactions.meshCollisions', meshFile, found)
pathMeshColl = path // meshFile
CALL meshColl%readMesh(pathMeshColl)
END IF END IF
!Gets the volume for a 0D mesh !Get the dimension of the geometry
!TODO: Try to constrain this to the inout for 0D CALL config%get(object // '.dimension', mesh%dimen, found)
IF (meshFormat == "0D") THEN IF (.NOT. found) THEN
CALL config%get('geometry.volume', volume, found) CALL criticalError('Required parameter geometry.dimension not found', 'readGeometry')
END IF
IF (doubleMesh) THEN
meshColl%dimen = mesh%dimen
END IF
SELECT CASE(mesh%dimen)
CASE (0)
CALL config%get(object // '.meshType', meshFormat, found)
CALL init0D(mesh)
!Read the 0D mesh
CALL mesh%readMesh(pathMeshParticle)
!Get the volumne
CALL config%get(object // '.volume', volume, found)
!Rescale the volumne
IF (found) THEN IF (found) THEN
mesh%vols(1)%obj%volume = mesh%vols(1)%obj%volume*volume / Vol_ref mesh%vols(1)%obj%volume = mesh%vols(1)%obj%volume*volume / Vol_ref
mesh%nodes(1)%obj%v = mesh%vols(1)%obj%volume mesh%nodes(1)%obj%v = mesh%vols(1)%obj%volume
END IF END IF
CASE (1:3)
!Select the type of geometry
CALL config%get(object // '.type', mesh%geometry, found)
IF (doubleMesh) THEN
meshColl%geometry = mesh%geometry
END IF END IF
!Creates the connectivity between elements !Check the consistency between geometry and dimension
SELECT CASE(mesh%geometry) SELECT CASE(mesh%dimen)
CASE("3DCart") CASE(3)
mesh%connectMesh => connectMesh3DCart IF (mesh%geometry /= 'Cart') THEN
CALL criticalError('No available geometry ' // mesh%geometry // ' in 3D', 'readGeometry')
CASE("2DCyl") END IF
mesh%connectMesh => connectMesh2DCyl
CASE("2DCart") CASE(2)
mesh%connectMesh => connectMesh2DCart IF (mesh%geometry /= 'Cart' .AND. &
mesh%geometry /= 'Cyl') THEN
CALL criticalError('No available geometry ' // mesh%geometry // ' in 2D', 'readGeometry')
CASE("1DRad") END IF
mesh%connectMesh => connectMesh1DRad
CASE("1DCart") CASE(1)
mesh%connectMesh => connectMesh1DCart IF (mesh%geometry /= 'Cart' .AND. &
mesh%geometry /= 'Rad') THEN
CALL criticalError('No available geometry ' // mesh%geometry // ' in 1D', 'readGeometry')
CASE("0D") END IF
mesh%connectMesh => NULL()
END SELECT END SELECT
IF (ASSOCIATED(mesh%connectMesh)) CALL mesh%connectMesh
!Get the type of mesh
CALL config%get(object // '.meshType', meshFormat, found)
SELECT CASE(meshFormat)
CASE ("gmsh2")
CALL initGmsh2(mesh)
IF (doubleMesh) THEN IF (doubleMesh) THEN
meshColl%connectMesh => mesh%connectMesh CALL initGmsh2(meshColl)
CALL meshColl%connectMesh
END IF END IF
END SELECT
!Reads the mesh file
CALL config%get(object // '.meshFile', meshFile, found)
pathMeshParticle = path // meshFile
CALL mesh%readMesh(pathMeshParticle)
DEALLOCATE(meshFile)
IF (doubleMesh) THEN
!Reads the mesh file for collisions
CALL config%get(object // '.meshCollisions', meshFile, found)
pathMeshColl = path // meshFile
CALL meshColl%readMesh(pathMeshColl)
END IF
CASE DEFAULT
CALL criticalError("Mesh dimension not recogniced", "readGeometry")
END SELECT
!Builds the K matrix for the Particles mesh !Builds the K matrix for the Particles mesh
CALL mesh%constructGlobalK() CALL mesh%constructGlobalK()
@ -898,16 +956,6 @@ MODULE moduleInput
END IF END IF
!Gest EM solver
CALL config%get('case.EMSolver', EMType, found)
CALL solver%initEM(EMType)
SELECT CASE(EMType)
CASE("Electrostatic")
!Reads BC
CALL readEMBoundary(config)
END SELECT
END SUBROUTINE readGeometry END SUBROUTINE readGeometry
SUBROUTINE readProbes(config) SUBROUTINE readProbes(config)
@ -1010,7 +1058,6 @@ MODULE moduleInput
END DO END DO
!TODO: Improve this
IF (ALLOCATED(boundEM)) THEN IF (ALLOCATED(boundEM)) THEN
DO e = 1, mesh%numEdges DO e = 1, mesh%numEdges
IF (ANY(mesh%edges(e)%obj%physicalSurface == boundEM(:)%physicalSurface)) THEN IF (ANY(mesh%edges(e)%obj%physicalSurface == boundEM(:)%physicalSurface)) THEN
@ -1026,7 +1073,10 @@ MODULE moduleInput
!Compute the PLU factorization of K once boundary conditions have been read !Compute the PLU factorization of K once boundary conditions have been read
CALL dgetrf(mesh%numNodes, mesh%numNodes, mesh%K, mesh%numNodes, mesh%IPIV, info) CALL dgetrf(mesh%numNodes, mesh%numNodes, mesh%K, mesh%numNodes, mesh%IPIV, info)
IF (info /= 0) CALL criticalError('Factorization of K matrix failed', 'readEMBoundary') IF (info /= 0) THEN
CALL criticalError('Factorization of K matrix failed', 'readEMBoundary')
END IF
END SUBROUTINE readEMBoundary END SUBROUTINE readEMBoundary

View file

@ -60,53 +60,90 @@ MODULE moduleSolver
!Init Pusher !Init Pusher
SUBROUTINE initPusher(self, pusherType, tau, tauSp) SUBROUTINE initPusher(self, pusherType, tau, tauSp)
USE moduleErrors USE moduleErrors
USE moduleMesh, ONLY: mesh
IMPLICIT NONE IMPLICIT NONE
CLASS(pusherGeneric), INTENT(out):: self CLASS(pusherGeneric), INTENT(out):: self
CHARACTER(:), ALLOCATABLE:: pusherType CHARACTER(:), ALLOCATABLE:: pusherType
REAL(8):: tau, tauSp REAL(8):: tau, tauSp
SELECT CASE(pusherType) !TODO: Reorganize if Cart pushers are combined
!3D Cartesian SELECT CASE(mesh%dimen)
CASE('3DCartNeutral') CASE(0)
self%pushParticle => push3DCartNeutral
CASE('3DCartCharged')
self%pushParticle => push3DCartCharged
!2D Cylindrical
CASE('2DCylNeutral')
self%pushParticle => push2DCylNeutral
CASE('2DCylCharged')
self%pushParticle => push2DCylCharged
!2D Cartesian
CASE('2DCartNeutral')
self%pushParticle => push2DCartNeutral
CASE('2DCartCharged')
self%pushParticle => push2DCartCharged
!1D Cartesian
CASE('1DCartNeutral')
self%pushParticle => push1DCartNeutral
CASE('1DCartCharged')
self%pushParticle => push1DCartCharged
!1D Radial
CASE('1DRadNeutral')
self%pushParticle => push1DRadNeutral
CASE('1DRadCharged')
self%pushParticle => push1DRadCharged
CASE('0D')
self%pushParticle => push0D self%pushParticle => push0D
CASE(3)
SELECT CASE(pusherType)
CASE('Neutral')
self%pushParticle => push3DCartNeutral
CASE('Electrostatic')
self%pushParticle => push3DCartCharged
CASE DEFAULT CASE DEFAULT
CALL criticalError('Pusher ' // pusherType // ' not found','initPusher') CALL criticalError('Pusher ' // pusherType // ' not found for 3D','initPusher')
END SELECT
CASE(2)
SELECT CASE(mesh%geometry)
CASE('Cyl')
SELECT CASE(pusherType)
CASE('Neutral')
self%pushParticle => push2DCylNeutral
CASE('Electrostatic')
self%pushParticle => push2DCylCharged
CASE DEFAULT
CALL criticalError('Pusher ' // pusherType // ' not found for 2D Cyl','initPusher')
END SELECT
CASE ('Cart')
SELECT CASE(pusherType)
CASE('Neutral')
self%pushParticle => push2DCartNeutral
CASE('Electrostatic')
self%pushParticle => push2DCartCharged
CASE DEFAULT
CALL criticalError('Pusher ' // pusherType // ' not found for 2D Cart','initPusher')
END SELECT
END SELECT
CASE(1)
SELECT CASE(mesh%geometry)
CASE('Rad')
SELECT CASE(pusherType)
CASE('Neutral')
self%pushParticle => push1DRadNeutral
CASE('Electrostatic')
self%pushParticle => push1DRadCharged
CASE DEFAULT
CALL criticalError('Pusher ' // pusherType // ' not found for 1D Rad','initPusher')
END SELECT
CASE('Cart')
SELECT CASE(pusherType)
CASE('Neutral')
self%pushParticle => push1DCartNeutral
CASE('Electrostatic')
self%pushParticle => push1DCartCharged
CASE DEFAULT
CALL criticalError('Pusher ' // pusherType // ' not found for 1D Cart','initPusher')
END SELECT
END SELECT
END SELECT END SELECT
@ -172,7 +209,7 @@ MODULE moduleSolver
END SUBROUTINE doPushes END SUBROUTINE doPushes
!Push neutral particles in 3D cartesian coordinates !Push neutral particles in cartesian coordinates
PURE SUBROUTINE push3DCartNeutral(part, tauIn) PURE SUBROUTINE push3DCartNeutral(part, tauIn)
USE moduleSPecies USE moduleSPecies
IMPLICIT NONE IMPLICIT NONE
@ -195,8 +232,6 @@ MODULE moduleSolver
part_temp%v(3) = part%v(3) part_temp%v(3) = part%v(3)
part_temp%r(3) = part%r(3) + part_temp%v(3)*tauIn part_temp%r(3) = part%r(3) + part_temp%v(3)*tauIn
part_temp%n_in = .FALSE.
part = part_temp part = part_temp
END SUBROUTINE push3DCartNeutral END SUBROUTINE push3DCartNeutral
@ -228,8 +263,6 @@ MODULE moduleSolver
part_temp%v(3) = part%v(3) + qmEFt(3) part_temp%v(3) = part%v(3) + qmEFt(3)
part_temp%r(3) = part%r(3) + part_temp%v(3)*tauIn part_temp%r(3) = part%r(3) + part_temp%v(3)*tauIn
part_temp%n_in = .FALSE.
part = part_temp part = part_temp
END SUBROUTINE push3DCartCharged END SUBROUTINE push3DCartCharged
@ -265,7 +298,7 @@ MODULE moduleSolver
END IF END IF
part_temp%v(2) = cos_alpha*v_p_oh_star(2)+sin_alpha*v_p_oh_star(3) part_temp%v(2) = cos_alpha*v_p_oh_star(2)+sin_alpha*v_p_oh_star(3)
part_temp%v(3) = -sin_alpha*v_p_oh_star(2)+cos_alpha*v_p_oh_star(3) part_temp%v(3) = -sin_alpha*v_p_oh_star(2)+cos_alpha*v_p_oh_star(3)
part_temp%n_in = .FALSE. !Assume particle is outside until cell is found
!Copy temporal particle to particle !Copy temporal particle to particle
part=part_temp part=part_temp
@ -306,7 +339,7 @@ MODULE moduleSolver
END IF END IF
part_temp%v(2) = cos_alpha*v_p_oh_star(2)+sin_alpha*v_p_oh_star(3) part_temp%v(2) = cos_alpha*v_p_oh_star(2)+sin_alpha*v_p_oh_star(3)
part_temp%v(3) = -sin_alpha*v_p_oh_star(2)+cos_alpha*v_p_oh_star(3) part_temp%v(3) = -sin_alpha*v_p_oh_star(2)+cos_alpha*v_p_oh_star(3)
part_temp%n_in = .FALSE. !Assume particle is outside until cell is found
!Copy temporal particle to particle !Copy temporal particle to particle
part=part_temp part=part_temp
@ -331,8 +364,6 @@ MODULE moduleSolver
part_temp%v(2) = part%v(2) part_temp%v(2) = part%v(2)
part_temp%r(2) = part%r(2) + part_temp%v(2)*tauIn part_temp%r(2) = part%r(2) + part_temp%v(2)*tauIn
part_temp%n_in = .FALSE.
part = part_temp part = part_temp
END SUBROUTINE push2DCartNeutral END SUBROUTINE push2DCartNeutral
@ -360,8 +391,6 @@ MODULE moduleSolver
part_temp%v(2) = part%v(2) + qmEFt(2) part_temp%v(2) = part%v(2) + qmEFt(2)
part_temp%r(2) = part%r(2) + part_temp%v(2)*tauIn part_temp%r(2) = part%r(2) + part_temp%v(2)*tauIn
part_temp%n_in = .FALSE.
part = part_temp part = part_temp
END SUBROUTINE push2DCartCharged END SUBROUTINE push2DCartCharged
@ -382,8 +411,6 @@ MODULE moduleSolver
part_temp%v(1) = part%v(1) part_temp%v(1) = part%v(1)
part_temp%r(1) = part%r(1) + part_temp%v(1)*tauIn part_temp%r(1) = part%r(1) + part_temp%v(1)*tauIn
part_temp%n_in = .FALSE.
part = part_temp part = part_temp
END SUBROUTINE push1DCartNeutral END SUBROUTINE push1DCartNeutral
@ -407,8 +434,6 @@ MODULE moduleSolver
part_temp%v(1) = part%v(1) + qmEFt(1) part_temp%v(1) = part%v(1) + qmEFt(1)
part_temp%r(1) = part%r(1) + part_temp%v(1)*tauIn part_temp%r(1) = part%r(1) + part_temp%v(1)*tauIn
part_temp%n_in = .FALSE.
part = part_temp part = part_temp
END SUBROUTINE push1DCartCharged END SUBROUTINE push1DCartCharged
@ -442,7 +467,7 @@ MODULE moduleSolver
END IF END IF
part_temp%v(1) = cos_alpha*v_p_oh_star(1)+sin_alpha*v_p_oh_star(2) part_temp%v(1) = cos_alpha*v_p_oh_star(1)+sin_alpha*v_p_oh_star(2)
part_temp%v(2) = -sin_alpha*v_p_oh_star(1)+cos_alpha*v_p_oh_star(2) part_temp%v(2) = -sin_alpha*v_p_oh_star(1)+cos_alpha*v_p_oh_star(2)
part_temp%n_in = .FALSE. !Assume particle is outside until cell is found
!Copy temporal particle to particle !Copy temporal particle to particle
part=part_temp part=part_temp
@ -480,7 +505,7 @@ MODULE moduleSolver
END IF END IF
part_temp%v(1) = cos_alpha*v_p_oh_star(1)+sin_alpha*v_p_oh_star(2) part_temp%v(1) = cos_alpha*v_p_oh_star(1)+sin_alpha*v_p_oh_star(2)
part_temp%v(2) = -sin_alpha*v_p_oh_star(1)+cos_alpha*v_p_oh_star(2) part_temp%v(2) = -sin_alpha*v_p_oh_star(1)+cos_alpha*v_p_oh_star(2)
part_temp%n_in = .FALSE. !Assume particle is outside until cell is found
!Copy temporal particle to particle !Copy temporal particle to particle
part=part_temp part=part_temp
@ -800,6 +825,9 @@ MODULE moduleSolver
TYPE(particle), INTENT(inout):: part TYPE(particle), INTENT(inout):: part
CLASS(meshVol), POINTER:: volOld, volNew CLASS(meshVol), POINTER:: volOld, volNew
!Assume that particle is outside the domain
part%n_in = .FALSE.
volOld => mesh%vols(part%vol)%obj volOld => mesh%vols(part%vol)%obj
CALL volOld%findCell(part) CALL volOld%findCell(part)
CALL findCellColl(part) CALL findCellColl(part)