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
# gfortran:
FC := gfortran
JSONDIR := $(TOPDIR)/json-fortran-8.2.0/build-gfortran
JSONDIR := $(TOPDIR)/json-fortran/build-gfortran
# ifort:
# FC := ifort
# JSONDIR := $(TOPDIR)/json-fortran-8.2.0/build-ifort

View file

@ -1,7 +1,7 @@
{
"output": {
"path": "./runs/0D_test/",
"path": "./runs/0D_Argon/",
"triggerOutput": 1,
"numColl": true,
"folder": "test"
@ -13,21 +13,19 @@
"radius": 1.88e-10
},
"geometry": {
"type": "1DCart",
"meshType": "0D",
"dimension": 0,
"volume": 1e-11
},
"species": [
{"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}
],
"case": {
"solver": {
"tau": [1.0e-6, 1.0e-6],
"time": 1.0e-3,
"pusher": ["0D", "0D"],
"finalTime": 1.0e-3,
"initial": [
{"speciesName": "Argon+", "initialState": "Argon+_Initial.dat"},
{"speciesName": "Argon", "initialState": "Argon_Initial.dat"}
{"species": "Argon+", "file": "Argon+_Initial.dat"},
{"species": "Argon", "file": "Argon_Initial.dat"}
]
},
"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
},
"geometry": {
"type": "1DCart",
"dimension": 1,
"type": "Cart",
"meshType": "gmsh2",
"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],
"velDist": ["Maxwellian", "Maxwellian", "Maxwellian"], "n": [ 1, 0, 0], "physicalSurface": 1}
],
"case": {
"solver": {
"tau": [1.0e-11, 1.0e-11],
"time": 4.0e-6,
"pusher": ["1DCartCharged", "1DCartCharged"],
"EMSolver": "Electrostatic",
"initial": [
{"speciesName": "Argon+", "initialState": "Argon+_Background.dat"},
{"speciesName": "Electron", "initialState": "Electron_Background.dat"}
]
"finalTime": 4.0e-6,
"pusher": ["Electrostatic", "Electrostatic"],
"EMSolver": "Electrostatic"
},
"parallel": {
"OpenMP":{

View file

@ -14,7 +14,8 @@
"temperature": 11604.0
},
"geometry": {
"type": "1DRad",
"dimension": 1,
"type": "Cart",
"meshType": "gmsh2",
"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],
"velDist": ["Maxwellian", "Maxwellian", "Maxwellian"], "n": [ 1, 0, 0], "physicalSurface": 1}
],
"case": {
"solver": {
"tau": [1.0e-11, 1.0e-11],
"time": 3.0e-7,
"pusher": ["1DRadCharged", "1DRadCharged"],
"EMSolver": "Electrostatic",
"initial": [
{"speciesName": "Argon+", "initialState": "Argon+_Background.dat"},
{"speciesName": "Electron", "initialState": "Electron_Background.dat"}
]
"finalTime": 3.0e-7,
"pusher": ["Electrostatic", "Electrostatic"],
"EMSolver": "Electrostatic"
},
"parallel": {
"OpenMP":{

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -6,9 +6,11 @@
"numColl": true
},
"geometry": {
"type": "2DCyl",
"dimension": 2,
"type": "Cyl",
"meshType": "gmsh2",
"meshFile": "mesh.msh"
"meshFile": "mesh.msh",
"meshCollisions": "meshColl.msh"
},
"species": [
{"name": "Argon", "type": "neutral", "mass": 6.633e-26, "weight": 5.0e8}
@ -40,15 +42,14 @@
"temperature": 300.0,
"radius": 1.88e-10
},
"case": {
"solver": {
"tau": [5.0e-7],
"time": 1.0e-3,
"pusher": ["2DCylNeutral"],
"finalTime": 1.0e-3,
"pusher": ["Neutral"],
"WeightingScheme": "Volume"
},
"interactions": {
"folderCollisions": "./data/collisions/",
"meshCollisions": "meshColl.msh",
"collisions": [
{"species_i": "Argon", "species_j": "Argon",
"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
DO e = 1, self%numNodes
READ(10, *) n, r(1), r(2), r(3)
SELECT CASE(self%geometry)
CASE("3DCart")
SELECT CASE(self%dimen)
CASE(3)
ALLOCATE(meshNode3Dcart::self%nodes(n)%obj)
self%connectMesh => connectMesh3DCart
CASE("2DCyl")
ALLOCATE(meshNode2DCyl:: self%nodes(n)%obj)
CASE(2)
SELECT CASE(self%geometry)
CASE("Cyl")
ALLOCATE(meshNode2DCyl:: self%nodes(n)%obj)
self%connectMesh => connectMesh2DCyl
CASE("Cart")
ALLOCATE(meshNode2DCart:: self%nodes(n)%obj)
self%connectMesh => connectMesh2DCart
END SELECT
r(3) = 0.D0
CASE("2DCart")
ALLOCATE(meshNode2DCart:: self%nodes(n)%obj)
r(3) = 0.D0
CASE(1)
SELECT CASE(self%geometry)
CASE("Rad")
ALLOCATE(meshNode1DRad:: self%nodes(n)%obj)
self%connectMesh => connectMesh1DRad
CASE("1DRad")
ALLOCATE(meshNode1DRad:: self%nodes(n)%obj)
r(2:3) = 0.D0
CASE("Cart")
ALLOCATE(meshNode1DCart:: self%nodes(n)%obj)
self%connectMesh => connectMesh1DCart
CASE("1DCart")
ALLOCATE(meshNode1DCart:: self%nodes(n)%obj)
END SELECT
r(2:3) = 0.D0
END SELECT
@ -92,7 +103,6 @@ MODULE moduleMeshInputGmsh2
END DO
!Skip comments
READ(10, *)
READ(10, *)
@ -106,16 +116,16 @@ MODULE moduleMeshInputGmsh2
self%numEdges = 0
DO e = 1, totalNumElem
READ(10, *) eTemp, elemType
SELECT CASE(self%geometry)
CASE("3DCart")
SELECT CASE(self%dimen)
CASE(3)
!Element type 2 is triangle in gmsh
IF (elemType == 2) self%numEdges = e
CASE("2DCyl","2DCart")
CASE(2)
!Element type 1 is segment in Gmsh
IF (elemType == 1) self%numEdges = e
CASE("1DRad","1DCart")
CASE(1)
!Element type 15 is physical point in Gmsh
IF (elemType == 15) self%numEdges = e
@ -148,8 +158,8 @@ MODULE moduleMeshInputGmsh2
!Reads edges
DO e=1, self%numEdges
!Reads the edge according to the geometry
SELECT CASE(self%geometry)
CASE("3DCart")
SELECT CASE(self%dimen)
CASE(3)
READ(10, *) n, elemType, eTemp, boundaryType
BACKSPACE(10)
@ -167,41 +177,49 @@ MODULE moduleMeshInputGmsh2
END SELECT
CASE("2DCyl")
ALLOCATE(p(1:2))
CASE (2)
SELECT CASE(self%geometry)
CASE("Cyl")
ALLOCATE(p(1:2))
READ(10,*) n, elemType, eTemp, boundaryType, eTemp, p(1:2)
!Associate boundary condition procedure.
bt = getBoundaryId(boundaryType)
READ(10,*) n, elemType, eTemp, boundaryType, eTemp, p(1:2)
!Associate boundary condition procedure.
bt = getBoundaryId(boundaryType)
ALLOCATE(meshEdge2DCyl:: self%edges(e)%obj)
ALLOCATE(meshEdge2DCyl:: self%edges(e)%obj)
CASE("2DCart")
ALLOCATE(p(1:2))
CASE("Cart")
ALLOCATE(p(1:2))
READ(10,*) n, elemType, eTemp, boundaryType, eTemp, p(1:2)
!Associate boundary condition procedure.
bt = getBoundaryId(boundaryType)
READ(10,*) n, elemType, eTemp, boundaryType, eTemp, p(1:2)
!Associate boundary condition procedure.
bt = getBoundaryId(boundaryType)
ALLOCATE(meshEdge2DCart:: self%edges(e)%obj)
ALLOCATE(meshEdge2DCart:: self%edges(e)%obj)
CASE("1DRad")
ALLOCATE(p(1:1))
END SELECT
READ(10, *) n, elemType, eTemp, boundaryType, eTemp, p(1)
!Associate boundary condition
bt = getBoundaryId(boundaryType)
CASE(1)
SELECT CASE(self%geometry)
CASE("Rad")
ALLOCATE(p(1:1))
ALLOCATE(meshEdge1DRad:: self%edges(e)%obj)
READ(10, *) n, elemType, eTemp, boundaryType, eTemp, p(1)
!Associate boundary condition
bt = getBoundaryId(boundaryType)
CASE("1DCart")
ALLOCATE(p(1:1))
ALLOCATE(meshEdge1DRad:: self%edges(e)%obj)
READ(10, *) n, elemType, eTemp, boundaryType, eTemp, p(1)
!Associate boundary condition
bt = getBoundaryId(boundaryType)
CASE("Cart")
ALLOCATE(p(1:1))
ALLOCATE(meshEdge1DCart:: self%edges(e)%obj)
READ(10, *) n, elemType, eTemp, boundaryType, eTemp, p(1)
!Associate boundary condition
bt = getBoundaryId(boundaryType)
ALLOCATE(meshEdge1DCart:: self%edges(e)%obj)
END SELECT
END SELECT
@ -215,8 +233,8 @@ MODULE moduleMeshInputGmsh2
!Read and initialize volumes
DO e = 1, self%numVols
!Reads the volume according to the geometry
SELECT CASE(self%geometry)
CASE("3DCart")
SELECT CASE(self%dimen)
CASE(3)
READ(10, *) n, elemType
BACKSPACE(10)
@ -229,56 +247,64 @@ MODULE moduleMeshInputGmsh2
END SELECT
CASE("2DCyl")
READ(10,*) n, elemType
BACKSPACE(10)
CASE(2)
SELECT CASE(self%geometry)
CASE("Cyl")
READ(10,*) n, elemType
BACKSPACE(10)
SELECT CASE(elemType)
CASE (2)
!Triangular element
ALLOCATE(p(1:3))
READ(10,*) n, elemType, eTemp, eTemp, eTemp, p(1:3)
ALLOCATE(meshVol2DCylTria:: self%vols(e)%obj)
SELECT CASE(elemType)
CASE (2)
!Triangular element
ALLOCATE(p(1:3))
READ(10,*) n, elemType, eTemp, eTemp, eTemp, p(1:3)
ALLOCATE(meshVol2DCylTria:: self%vols(e)%obj)
CASE (3)
!Quadrilateral element
ALLOCATE(p(1:4))
READ(10,*) n, elemType, eTemp, eTemp, eTemp, p(1:4)
ALLOCATE(meshVol2DCylQuad:: self%vols(e)%obj)
CASE (3)
!Quadrilateral element
ALLOCATE(p(1:4))
READ(10,*) n, elemType, eTemp, eTemp, eTemp, p(1:4)
ALLOCATE(meshVol2DCylQuad:: self%vols(e)%obj)
END SELECT
CASE("Cart")
READ(10,*) n, elemType
BACKSPACE(10)
SELECT CASE(elemType)
CASE (2)
!Triangular element
ALLOCATE(p(1:3))
READ(10,*) n, elemType, eTemp, eTemp, eTemp, p(1:3)
ALLOCATE(meshVol2DCartTria:: self%vols(e)%obj)
CASE (3)
!Quadrilateral element
ALLOCATE(p(1:4))
READ(10,*) n, elemType, eTemp, eTemp, eTemp, p(1:4)
ALLOCATE(meshVol2DCartQuad:: self%vols(e)%obj)
END SELECT
END SELECT
CASE("2DCart")
READ(10,*) n, elemType
BACKSPACE(10)
CASE(1)
SELECT CASE(self%geometry)
CASE("Rad")
ALLOCATE(p(1:2))
SELECT CASE(elemType)
CASE (2)
!Triangular element
ALLOCATE(p(1:3))
READ(10,*) n, elemType, eTemp, eTemp, eTemp, p(1:3)
ALLOCATE(meshVol2DCartTria:: self%vols(e)%obj)
READ(10, *) n, elemType, eTemp, eTemp, eTemp, p(1:2)
ALLOCATE(meshVol1DRadSegm:: self%vols(e)%obj)
CASE (3)
!Quadrilateral element
ALLOCATE(p(1:4))
READ(10,*) n, elemType, eTemp, eTemp, eTemp, p(1:4)
ALLOCATE(meshVol2DCartQuad:: self%vols(e)%obj)
CASE("Cart")
ALLOCATE(p(1:2))
READ(10, *) n, elemType, eTemp, eTemp, eTemp, p(1:2)
ALLOCATE(meshVol1DCartSegm:: self%vols(e)%obj)
END SELECT
CASE("1DRad")
ALLOCATE(p(1:2))
READ(10, *) n, elemType, eTemp, eTemp, eTemp, p(1:2)
ALLOCATE(meshVol1DRadSegm:: self%vols(e)%obj)
CASE("1DCart")
ALLOCATE(p(1:2))
READ(10, *) n, elemType, eTemp, eTemp, eTemp, p(1:2)
ALLOCATE(meshVol1DCartSegm:: self%vols(e)%obj)
END SELECT
CALL self%vols(e)%obj%init(n - numEdges, p, self%nodes)
@ -288,6 +314,9 @@ MODULE moduleMeshInputGmsh2
CLOSE(10)
!Call mesh connectivity
CALL self%connectMesh
END SUBROUTINE readGmsh2
!Reads the initial information from an output file for an species

View file

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

View file

@ -40,16 +40,6 @@ MODULE moduleInput
CALL readSpecies(config)
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
CALL verboseError('Reading boundary conditions...')
CALL readBoundary(config)
@ -60,6 +50,16 @@ MODULE moduleInput
CALL readGeometry(config)
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
CALL verboseError('Reading Probes...')
CALL readProbes(config)
@ -85,9 +85,12 @@ MODULE moduleInput
!Copies input file to output folder
CALL EXECUTE_COMMAND_LINE('cp ' // inputFile // ' ' // path // folder)
!Copies particle mesh
CALL EXECUTE_COMMAND_LINE('cp ' // pathMeshParticle // ' ' // path // folder)
IF (doubleMesh) THEN
CALL EXECUTE_COMMAND_LINE('cp ' // pathMeshColl // ' ' // path // folder)
IF (mesh%dimen > 0) THEN
CALL EXECUTE_COMMAND_LINE('cp ' // pathMeshParticle // ' ' // path // folder)
IF (doubleMesh) THEN
CALL EXECUTE_COMMAND_LINE('cp ' // pathMeshColl // ' ' // path // folder)
END IF
END IF
@ -156,7 +159,7 @@ MODULE moduleInput
END SUBROUTINE readReference
!Reads the specific case parameters
SUBROUTINE readCase(config)
SUBROUTINE readSolver(config)
USE moduleRefParam
USE moduleErrors
USE moduleCaseParam
@ -164,6 +167,7 @@ MODULE moduleInput
USE moduleSpecies
USE moduleCollisions
USE moduleOutput
USE moduleMesh
USE json_module
IMPLICIT NONE
@ -172,47 +176,67 @@ MODULE moduleInput
CHARACTER(:), ALLOCATABLE:: object
!simulation final and initial times in [t]
REAL(8):: finalTime, initialTime
CHARACTER(:), ALLOCATABLE:: pusherType, WSType
CHARACTER(:), ALLOCATABLE:: pusherType, WSType, EMType
INTEGER:: nTau, nSolver
INTEGER:: i
CHARACTER(2):: iString
CHARACTER(1):: tString
object = 'case'
object = 'solver'
!Time parameters
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))
DO i = 1, nTau
WRITE(iString, '(I2)') i
CALL config%get(object // '.tau(' // TRIM(iString) // ')', tau(i), found)
END DO
tauMin = MINVAL(tau(1:nTau))
IF (nTau < nSpecies) THEN
CALL warningError('Using minimum time step for some species')
tau(nTau+1:nSpecies) = MINVAL(tau(1:nTau))
tau(nTau+1:nSpecies) = tauMin
END IF
tauMin = MINVAL(tau)
!Gets the simulation final time
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
tFinal = INT(finalTime / tauMin)
!Gets the simulation initial time
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
CALL config%info(object // '.pusher', found, n_children = nSolver)
IF (.NOT. found .OR. nSolver /= nSpecies) CALL criticalError('Required parameter pusher not found','readCase')
IF (mesh%dimen > 0) THEN
CALL config%info(object // '.pusher', found, n_children = nSolver)
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
ALLOCATE(solver%pusher(1:nSpecies))
!Initialize pushers
DO i = 1, nSolver
DO i = 1, nSpecies
WRITE(iString, '(I2)') i
CALL config%get(object // '.pusher(' // TRIM(iString) // ')', pusherType, found)
@ -220,23 +244,39 @@ MODULE moduleInput
CALL solver%pusher(i)%init(pusherType, tauMin, tau(i))
END DO
!Gest the non-analogue scheme
!Get the non-analogue scheme
CALL config%get(object // '.WeightingScheme', WSType, found)
CALL solver%initWS(WSType)
!Makes tau(s) non-dimensional
!Make tau(s) non-dimensional
tau = tau / 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
WRITE(tString, '(I1)') iterationDigits
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)
USE moduleSpecies
USE moduleMesh
@ -270,13 +310,13 @@ MODULE moduleInput
REAL(8):: vTh
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
!Reads the information from initial species
DO i = 1, nInitial
WRITE(iString, '(I2)') i
object = 'case.initial(' // iString // ')'
object = 'solver.initial(' // iString // ')'
CALL config%get(object // '.species', spName, found)
sp = speciesName2Index(spName)
CALL config%get(object // '.file', spFile, found)
@ -372,7 +412,7 @@ MODULE moduleInput
END DO
!Convert temporal list of particles into initial partOld array
!Deallocates the list of initial particles
!Deallocate the list of initial particles
nNewPart = partInitial%amount
IF (nNewPart > 0) THEN
ALLOCATE(partOld(1:nNewPart))
@ -504,13 +544,13 @@ MODULE moduleInput
END DO
!Reads relations between species
!Read relations between species
DO i = 1, nSpecies
WRITE(iString, '(I2)') i
object = 'species(' // TRIM(iString) // ')'
SELECT TYPE(sp => species(i)%obj)
TYPE IS (speciesNeutral)
!Gets species linked ion
!Get species linked ion
CALL config%get(object // '.ion', linkName, found)
IF (found) THEN
linkID = speciesName2Index(linkName)
@ -519,7 +559,7 @@ MODULE moduleInput
END IF
TYPE IS (speciesCharged)
!Gets species linked neutral
!Get species linked neutral
CALL config%get(object // '.neutral', linkName, found)
IF (found) THEN
linkID = speciesName2Index(linkName)
@ -580,19 +620,6 @@ MODULE moduleInput
!Checks if MC collisions have been defined
CALL config%info('interactions.collisions', found)
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
CALL config%info('interactions.timeStep', found)
IF (found) THEN
@ -792,11 +819,6 @@ MODULE moduleInput
USE moduleMesh
USE moduleMeshInputGmsh2, ONLY: initGmsh2
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 moduleOutput
USE moduleRefParam
@ -805,86 +827,122 @@ MODULE moduleInput
IMPLICIT NONE
TYPE(json_file), INTENT(inout):: config
CHARACTER(:), ALLOCATABLE:: object
LOGICAL:: found
CHARACTER(:), ALLOCATABLE:: meshFormat, meshFile, EMType
CHARACTER(:), ALLOCATABLE:: meshFormat, meshFile
REAL(8):: volume
!Firstly, indicates if a specific mesh for MC collisions is being use
doubleMesh = ASSOCIATED(meshForMCC, meshColl)
object = 'geometry'
!Selects the type of geometry.
CALL config%get('geometry.type', mesh%geometry, found)
IF (doubleMesh) meshColl%geometry = mesh%geometry
!Checks if a mesh for collisions has been defined
!The mesh will be initialized and reader in readGeometry
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
CALL config%get('geometry.meshType', meshFormat, found)
SELECT CASE(meshFormat)
CASE ("gmsh2")
CALL initGmsh2(mesh)
IF (doubleMesh) CALL initGmsh2(meshColl)
ELSE
CALL config%info('interactions', found)
IF (found) THEN
!Points the meshForMCC pointer to the Particles Mesh
meshForMCC => mesh
CASE ("0D")
CALL config%get('geometry.meshType', meshFormat, found)
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
doubleMesh = .FALSE.
END IF
!Gets the volume for a 0D mesh
!TODO: Try to constrain this to the inout for 0D
IF (meshFormat == "0D") THEN
CALL config%get('geometry.volume', volume, found)
!Get the dimension of the geometry
CALL config%get(object // '.dimension', mesh%dimen, found)
IF (.NOT. found) THEN
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
mesh%vols(1)%obj%volume = mesh%vols(1)%obj%volume*volume / Vol_ref
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
!Creates the connectivity between elements
SELECT CASE(mesh%geometry)
CASE("3DCart")
mesh%connectMesh => connectMesh3DCart
END IF
!Check the consistency between geometry and dimension
SELECT CASE(mesh%dimen)
CASE(3)
IF (mesh%geometry /= 'Cart') THEN
CALL criticalError('No available geometry ' // mesh%geometry // ' in 3D', 'readGeometry')
CASE("2DCyl")
mesh%connectMesh => connectMesh2DCyl
END IF
CASE("2DCart")
mesh%connectMesh => connectMesh2DCart
CASE(2)
IF (mesh%geometry /= 'Cart' .AND. &
mesh%geometry /= 'Cyl') THEN
CALL criticalError('No available geometry ' // mesh%geometry // ' in 2D', 'readGeometry')
CASE("1DRad")
mesh%connectMesh => connectMesh1DRad
END IF
CASE("1DCart")
mesh%connectMesh => connectMesh1DCart
CASE(1)
IF (mesh%geometry /= 'Cart' .AND. &
mesh%geometry /= 'Rad') THEN
CALL criticalError('No available geometry ' // mesh%geometry // ' in 1D', 'readGeometry')
CASE("0D")
mesh%connectMesh => NULL()
END IF
END SELECT
!Get the type of mesh
CALL config%get(object // '.meshType', meshFormat, found)
SELECT CASE(meshFormat)
CASE ("gmsh2")
CALL initGmsh2(mesh)
IF (doubleMesh) THEN
CALL initGmsh2(meshColl)
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
IF (ASSOCIATED(mesh%connectMesh)) CALL mesh%connectMesh
IF (doubleMesh) THEN
meshColl%connectMesh => mesh%connectMesh
CALL meshColl%connectMesh
END IF
!Builds the K matrix for the Particles mesh
CALL mesh%constructGlobalK()
@ -898,16 +956,6 @@ MODULE moduleInput
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
SUBROUTINE readProbes(config)
@ -1010,7 +1058,6 @@ MODULE moduleInput
END DO
!TODO: Improve this
IF (ALLOCATED(boundEM)) THEN
DO e = 1, mesh%numEdges
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
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

View file

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