diff --git a/makefile b/makefile index 6516128..565f3f8 100644 --- a/makefile +++ b/makefile @@ -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 diff --git a/runs/0D_Argon/input.json b/runs/0D_Argon/input.json index 6940f77..6af25d0 100644 --- a/runs/0D_Argon/input.json +++ b/runs/0D_Argon/input.json @@ -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": { diff --git a/runs/1D_Cathode/Argon+_Background.dat b/runs/1D_Cathode/Argon+_Background.dat deleted file mode 100644 index b9128d9..0000000 --- a/runs/1D_Cathode/Argon+_Background.dat +++ /dev/null @@ -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 diff --git a/runs/1D_Cathode/Electron_Background.dat b/runs/1D_Cathode/Electron_Background.dat deleted file mode 100644 index 5243fab..0000000 --- a/runs/1D_Cathode/Electron_Background.dat +++ /dev/null @@ -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 diff --git a/runs/1D_Cathode/inputCart.json b/runs/1D_Cathode/inputCart.json index 74eb5f7..a2acdc3 100644 --- a/runs/1D_Cathode/inputCart.json +++ b/runs/1D_Cathode/inputCart.json @@ -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":{ diff --git a/runs/1D_Cathode/inputRadEmission.json b/runs/1D_Cathode/inputRadEmission.json index 14fb767..6f0e892 100644 --- a/runs/1D_Cathode/inputRadEmission.json +++ b/runs/1D_Cathode/inputRadEmission.json @@ -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":{ diff --git a/runs/ALPHIE_Grid/inputBaseCase.json b/runs/ALPHIE_Grid/inputBaseCase.json index 7cb1ba0..db58686 100644 --- a/runs/ALPHIE_Grid/inputBaseCase.json +++ b/runs/ALPHIE_Grid/inputBaseCase.json @@ -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" }, diff --git a/runs/ALPHIE_Grid/inputIonization_0.10mA.json b/runs/ALPHIE_Grid/inputIonization_0.10mA.json index e7664bd..d328139 100644 --- a/runs/ALPHIE_Grid/inputIonization_0.10mA.json +++ b/runs/ALPHIE_Grid/inputIonization_0.10mA.json @@ -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" }, diff --git a/runs/Argon_Expansion/CX_case.json b/runs/Argon_Expansion/CX_case.json index d382a5d..8081b94 100644 --- a/runs/Argon_Expansion/CX_case.json +++ b/runs/Argon_Expansion/CX_case.json @@ -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": { diff --git a/runs/Argon_Expansion/elastic_case.json b/runs/Argon_Expansion/elastic_case.json index ac9fcc7..dab4720 100644 --- a/runs/Argon_Expansion/elastic_case.json +++ b/runs/Argon_Expansion/elastic_case.json @@ -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": { diff --git a/runs/Argon_Expansion/nocoll_case.json b/runs/Argon_Expansion/nocoll_case.json index 55dceb5..094fb80 100644 --- a/runs/Argon_Expansion/nocoll_case.json +++ b/runs/Argon_Expansion/nocoll_case.json @@ -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": { diff --git a/runs/cylFlow/input.json b/runs/cylFlow/input.json index 88029a2..677206e 100644 --- a/runs/cylFlow/input.json +++ b/runs/cylFlow/input.json @@ -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": { diff --git a/runs/cylFlow/inputDualMesh.json b/runs/cylFlow/inputDualMesh.json index 1f2d146..42d539c 100644 --- a/runs/cylFlow/inputDualMesh.json +++ b/runs/cylFlow/inputDualMesh.json @@ -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": [ diff --git a/runs/cylFlow/mesh.msh.opt b/runs/cylFlow/mesh.msh.opt deleted file mode 100644 index b720b92..0000000 --- a/runs/cylFlow/mesh.msh.opt +++ /dev/null @@ -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; diff --git a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 index d6fe4d7..0a3a557 100644 --- a/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 +++ b/src/modules/mesh/inout/gmsh2/moduleMeshInputGmsh2.f90 @@ -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 diff --git a/src/modules/mesh/moduleMesh.f90 b/src/modules/mesh/moduleMesh.f90 index 77170da..19283b5 100644 --- a/src/modules/mesh/moduleMesh.f90 +++ b/src/modules/mesh/moduleMesh.f90 @@ -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 diff --git a/src/modules/moduleInput.f90 b/src/modules/moduleInput.f90 index 56f5f79..d250954 100644 --- a/src/modules/moduleInput.f90 +++ b/src/modules/moduleInput.f90 @@ -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 diff --git a/src/modules/moduleSolver.f90 b/src/modules/moduleSolver.f90 index 47d33ca..ba39d4d 100644 --- a/src/modules/moduleSolver.f90 +++ b/src/modules/moduleSolver.f90 @@ -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)