From e50cc3325bc617d9bfaa8cdca380dd5b40f94a2f Mon Sep 17 00:00:00 2001 From: Jorge Gonzalez Date: Fri, 25 Dec 2020 23:08:59 +0100 Subject: [PATCH] Implementation of ionization process. Now collisions can have a different time step. Added species name to output names as it was starting to get confusing in Gmsh for multiple species. Output filenames adapted to match any number of iterations. --- data/collisions/EL_Ar-Ar.dat | 600 +++++++++++++++--------------- data/collisions/IO_e-Ar.dat | 34 ++ runs/Argon_Expansion/CX_case.json | 2 +- src/fpakc.f90 | 3 +- src/modules/mesh/moduleMesh.f90 | 30 +- src/modules/moduleCollisions.f90 | 125 ++++++- src/modules/moduleInject.f90 | 9 +- src/modules/moduleInput.f90 | 78 +++- src/modules/moduleList.f90 | 3 + src/modules/moduleOutput.f90 | 9 +- src/modules/moduleSolver.f90 | 46 ++- src/modules/moduleSpecies.f90 | 1 - src/modules/moduleTable.f90 | 4 + 13 files changed, 569 insertions(+), 375 deletions(-) create mode 100644 data/collisions/IO_e-Ar.dat diff --git a/data/collisions/EL_Ar-Ar.dat b/data/collisions/EL_Ar-Ar.dat index 34a8118..02bcc85 100644 --- a/data/collisions/EL_Ar-Ar.dat +++ b/data/collisions/EL_Ar-Ar.dat @@ -1,302 +1,302 @@ # A. V. Phelps et. al, J. Phys. B, 33(2000) 2965-2981 # Relative energy (eV) cross section (m^2) -0.010 1.325E-17 -0.020 1.004E-17 -0.030 8.538E-18 -0.040 7.610E-18 -0.050 6.960E-18 -0.060 6.471E-18 -0.070 6.084E-18 -0.080 5.767E-18 -0.090 5.502E-18 -0.100 5.275E-18 -0.110 5.078E-18 -0.120 4.904E-18 -0.130 4.749E-18 -0.140 4.611E-18 -0.150 4.485E-18 -0.160 4.371E-18 -0.170 4.266E-18 -0.180 4.170E-18 -0.190 4.081E-18 -0.200 3.998E-18 -0.210 3.921E-18 -0.220 3.848E-18 -0.230 3.780E-18 -0.240 3.717E-18 -0.250 3.656E-18 -0.260 3.600E-18 -0.270 3.546E-18 -0.280 3.494E-18 -0.290 3.446E-18 -0.300 3.399E-18 -0.310 3.355E-18 -0.320 3.313E-18 -0.330 3.272E-18 -0.340 3.233E-18 -0.350 3.196E-18 -0.360 3.160E-18 -0.370 3.126E-18 -0.380 3.093E-18 -0.390 3.061E-18 -0.400 3.030E-18 -0.410 3.000E-18 -0.420 2.971E-18 -0.430 2.944E-18 -0.440 2.917E-18 -0.450 2.891E-18 -0.460 2.865E-18 -0.470 2.841E-18 -0.480 2.817E-18 -0.490 2.794E-18 -0.500 2.771E-18 -0.510 2.750E-18 -0.520 2.728E-18 -0.530 2.708E-18 -0.540 2.688E-18 -0.550 2.668E-18 -0.560 2.649E-18 -0.570 2.630E-18 -0.580 2.612E-18 -0.590 2.594E-18 -0.600 2.577E-18 -0.610 2.560E-18 -0.620 2.543E-18 -0.630 2.527E-18 -0.640 2.511E-18 -0.650 2.496E-18 -0.660 2.480E-18 -0.670 2.466E-18 -0.680 2.451E-18 -0.690 2.437E-18 -0.700 2.423E-18 -0.710 2.409E-18 -0.720 2.396E-18 -0.730 2.383E-18 -0.740 2.370E-18 -0.750 2.357E-18 -0.760 2.345E-18 -0.770 2.332E-18 -0.780 2.320E-18 -0.790 2.309E-18 -0.800 2.297E-18 -0.810 2.286E-18 -0.820 2.275E-18 -0.830 2.264E-18 -0.840 2.253E-18 -0.850 2.242E-18 -0.860 2.232E-18 -0.870 2.221E-18 -0.880 2.211E-18 -0.890 2.201E-18 -0.900 2.192E-18 -0.910 2.182E-18 -0.920 2.173E-18 -0.930 2.163E-18 -0.940 2.154E-18 -0.950 2.145E-18 -0.960 2.136E-18 -0.970 2.127E-18 -0.980 2.118E-18 -0.990 2.110E-18 -1.000 2.101E-18 -1.010 2.093E-18 -1.020 2.085E-18 -1.030 2.077E-18 -1.040 2.069E-18 -1.050 2.061E-18 -1.060 2.053E-18 -1.070 2.046E-18 -1.080 2.038E-18 -1.090 2.031E-18 -1.100 2.023E-18 -1.110 2.016E-18 -1.120 2.009E-18 -1.130 2.002E-18 -1.140 1.995E-18 -1.150 1.988E-18 -1.160 1.981E-18 -1.170 1.974E-18 -1.180 1.967E-18 -1.190 1.961E-18 -1.200 1.954E-18 -1.210 1.948E-18 -1.220 1.941E-18 -1.230 1.935E-18 -1.240 1.929E-18 -1.250 1.923E-18 -1.260 1.917E-18 -1.270 1.911E-18 -1.280 1.905E-18 -1.290 1.899E-18 -1.300 1.893E-18 -1.310 1.887E-18 -1.320 1.882E-18 -1.330 1.876E-18 -1.340 1.870E-18 -1.350 1.865E-18 -1.360 1.859E-18 -1.370 1.854E-18 -1.380 1.849E-18 -1.390 1.843E-18 -1.400 1.838E-18 -1.410 1.833E-18 -1.420 1.828E-18 -1.430 1.823E-18 -1.440 1.818E-18 -1.450 1.813E-18 -1.460 1.808E-18 -1.470 1.803E-18 -1.480 1.798E-18 -1.490 1.793E-18 -1.500 1.788E-18 -1.510 1.784E-18 -1.520 1.779E-18 -1.530 1.774E-18 -1.540 1.770E-18 -1.550 1.765E-18 -1.560 1.761E-18 -1.570 1.756E-18 -1.580 1.752E-18 -1.590 1.748E-18 -1.600 1.743E-18 -1.610 1.739E-18 -1.620 1.735E-18 -1.630 1.730E-18 -1.640 1.726E-18 -1.650 1.722E-18 -1.660 1.718E-18 -1.670 1.714E-18 -1.680 1.710E-18 -1.690 1.706E-18 -1.700 1.702E-18 -1.710 1.698E-18 -1.720 1.694E-18 -1.730 1.690E-18 -1.740 1.686E-18 -1.750 1.682E-18 -1.760 1.679E-18 -1.770 1.675E-18 -1.780 1.671E-18 -1.790 1.667E-18 -1.800 1.664E-18 -1.810 1.660E-18 -1.820 1.657E-18 -1.830 1.653E-18 -1.840 1.649E-18 -1.850 1.646E-18 -1.860 1.642E-18 -1.870 1.639E-18 -1.880 1.635E-18 -1.890 1.632E-18 -1.900 1.629E-18 -1.910 1.625E-18 -1.920 1.622E-18 -1.930 1.619E-18 -1.940 1.615E-18 -1.950 1.612E-18 -1.960 1.609E-18 -1.970 1.606E-18 -1.980 1.602E-18 -1.990 1.599E-18 -2.000 1.596E-18 -2.010 1.593E-18 -2.020 1.590E-18 -2.030 1.587E-18 -2.040 1.584E-18 -2.050 1.581E-18 -2.060 1.578E-18 -2.070 1.574E-18 -2.080 1.572E-18 -2.090 1.569E-18 -2.100 1.566E-18 -2.110 1.563E-18 -2.120 1.560E-18 -2.130 1.557E-18 -2.140 1.554E-18 -2.150 1.551E-18 -2.160 1.548E-18 -2.170 1.546E-18 -2.180 1.543E-18 -2.190 1.540E-18 -2.200 1.537E-18 -2.210 1.534E-18 -2.220 1.532E-18 -2.230 1.529E-18 -2.240 1.526E-18 -2.250 1.524E-18 -2.260 1.521E-18 -2.270 1.518E-18 -2.280 1.516E-18 -2.290 1.513E-18 -2.300 1.511E-18 -2.310 1.508E-18 -2.320 1.505E-18 -2.330 1.503E-18 -2.340 1.500E-18 -2.350 1.498E-18 -2.360 1.495E-18 -2.370 1.493E-18 -2.380 1.490E-18 -2.390 1.488E-18 -2.400 1.486E-18 -2.410 1.483E-18 -2.420 1.481E-18 -2.430 1.478E-18 -2.440 1.476E-18 -2.450 1.474E-18 -2.460 1.471E-18 -2.470 1.469E-18 -2.480 1.467E-18 -2.490 1.464E-18 -2.500 1.462E-18 -2.510 1.460E-18 -2.520 1.457E-18 -2.530 1.455E-18 -2.540 1.453E-18 -2.550 1.451E-18 -2.560 1.448E-18 -2.570 1.446E-18 -2.580 1.444E-18 -2.590 1.442E-18 -2.600 1.440E-18 -2.610 1.438E-18 -2.620 1.435E-18 -2.630 1.433E-18 -2.640 1.431E-18 -2.650 1.429E-18 -2.660 1.427E-18 -2.670 1.425E-18 -2.680 1.423E-18 -2.690 1.421E-18 -2.700 1.419E-18 -2.710 1.417E-18 -2.720 1.415E-18 -2.730 1.413E-18 -2.740 1.411E-18 -2.750 1.409E-18 -2.760 1.407E-18 -2.770 1.405E-18 -2.780 1.403E-18 -2.790 1.401E-18 -2.800 1.399E-18 -2.810 1.397E-18 -2.820 1.395E-18 -2.830 1.393E-18 -2.840 1.391E-18 -2.850 1.389E-18 -2.860 1.387E-18 -2.870 1.385E-18 -2.880 1.383E-18 -2.890 1.382E-18 -2.900 1.380E-18 -2.910 1.378E-18 -2.920 1.376E-18 -2.930 1.374E-18 -2.940 1.372E-18 -2.950 1.371E-18 -2.960 1.369E-18 -2.970 1.367E-18 -2.980 1.365E-18 -2.990 1.364E-18 -3.000 1.362E-18 +0.010 1.325E-17 +0.020 1.004E-17 +0.030 8.538E-18 +0.040 7.610E-18 +0.050 6.960E-18 +0.060 6.471E-18 +0.070 6.084E-18 +0.080 5.767E-18 +0.090 5.502E-18 +0.100 5.275E-18 +0.110 5.078E-18 +0.120 4.904E-18 +0.130 4.749E-18 +0.140 4.611E-18 +0.150 4.485E-18 +0.160 4.371E-18 +0.170 4.266E-18 +0.180 4.170E-18 +0.190 4.081E-18 +0.200 3.998E-18 +0.210 3.921E-18 +0.220 3.848E-18 +0.230 3.780E-18 +0.240 3.717E-18 +0.250 3.656E-18 +0.260 3.600E-18 +0.270 3.546E-18 +0.280 3.494E-18 +0.290 3.446E-18 +0.300 3.399E-18 +0.310 3.355E-18 +0.320 3.313E-18 +0.330 3.272E-18 +0.340 3.233E-18 +0.350 3.196E-18 +0.360 3.160E-18 +0.370 3.126E-18 +0.380 3.093E-18 +0.390 3.061E-18 +0.400 3.030E-18 +0.410 3.000E-18 +0.420 2.971E-18 +0.430 2.944E-18 +0.440 2.917E-18 +0.450 2.891E-18 +0.460 2.865E-18 +0.470 2.841E-18 +0.480 2.817E-18 +0.490 2.794E-18 +0.500 2.771E-18 +0.510 2.750E-18 +0.520 2.728E-18 +0.530 2.708E-18 +0.540 2.688E-18 +0.550 2.668E-18 +0.560 2.649E-18 +0.570 2.630E-18 +0.580 2.612E-18 +0.590 2.594E-18 +0.600 2.577E-18 +0.610 2.560E-18 +0.620 2.543E-18 +0.630 2.527E-18 +0.640 2.511E-18 +0.650 2.496E-18 +0.660 2.480E-18 +0.670 2.466E-18 +0.680 2.451E-18 +0.690 2.437E-18 +0.700 2.423E-18 +0.710 2.409E-18 +0.720 2.396E-18 +0.730 2.383E-18 +0.740 2.370E-18 +0.750 2.357E-18 +0.760 2.345E-18 +0.770 2.332E-18 +0.780 2.320E-18 +0.790 2.309E-18 +0.800 2.297E-18 +0.810 2.286E-18 +0.820 2.275E-18 +0.830 2.264E-18 +0.840 2.253E-18 +0.850 2.242E-18 +0.860 2.232E-18 +0.870 2.221E-18 +0.880 2.211E-18 +0.890 2.201E-18 +0.900 2.192E-18 +0.910 2.182E-18 +0.920 2.173E-18 +0.930 2.163E-18 +0.940 2.154E-18 +0.950 2.145E-18 +0.960 2.136E-18 +0.970 2.127E-18 +0.980 2.118E-18 +0.990 2.110E-18 +1.000 2.101E-18 +1.010 2.093E-18 +1.020 2.085E-18 +1.030 2.077E-18 +1.040 2.069E-18 +1.050 2.061E-18 +1.060 2.053E-18 +1.070 2.046E-18 +1.080 2.038E-18 +1.090 2.031E-18 +1.100 2.023E-18 +1.110 2.016E-18 +1.120 2.009E-18 +1.130 2.002E-18 +1.140 1.995E-18 +1.150 1.988E-18 +1.160 1.981E-18 +1.170 1.974E-18 +1.180 1.967E-18 +1.190 1.961E-18 +1.200 1.954E-18 +1.210 1.948E-18 +1.220 1.941E-18 +1.230 1.935E-18 +1.240 1.929E-18 +1.250 1.923E-18 +1.260 1.917E-18 +1.270 1.911E-18 +1.280 1.905E-18 +1.290 1.899E-18 +1.300 1.893E-18 +1.310 1.887E-18 +1.320 1.882E-18 +1.330 1.876E-18 +1.340 1.870E-18 +1.350 1.865E-18 +1.360 1.859E-18 +1.370 1.854E-18 +1.380 1.849E-18 +1.390 1.843E-18 +1.400 1.838E-18 +1.410 1.833E-18 +1.420 1.828E-18 +1.430 1.823E-18 +1.440 1.818E-18 +1.450 1.813E-18 +1.460 1.808E-18 +1.470 1.803E-18 +1.480 1.798E-18 +1.490 1.793E-18 +1.500 1.788E-18 +1.510 1.784E-18 +1.520 1.779E-18 +1.530 1.774E-18 +1.540 1.770E-18 +1.550 1.765E-18 +1.560 1.761E-18 +1.570 1.756E-18 +1.580 1.752E-18 +1.590 1.748E-18 +1.600 1.743E-18 +1.610 1.739E-18 +1.620 1.735E-18 +1.630 1.730E-18 +1.640 1.726E-18 +1.650 1.722E-18 +1.660 1.718E-18 +1.670 1.714E-18 +1.680 1.710E-18 +1.690 1.706E-18 +1.700 1.702E-18 +1.710 1.698E-18 +1.720 1.694E-18 +1.730 1.690E-18 +1.740 1.686E-18 +1.750 1.682E-18 +1.760 1.679E-18 +1.770 1.675E-18 +1.780 1.671E-18 +1.790 1.667E-18 +1.800 1.664E-18 +1.810 1.660E-18 +1.820 1.657E-18 +1.830 1.653E-18 +1.840 1.649E-18 +1.850 1.646E-18 +1.860 1.642E-18 +1.870 1.639E-18 +1.880 1.635E-18 +1.890 1.632E-18 +1.900 1.629E-18 +1.910 1.625E-18 +1.920 1.622E-18 +1.930 1.619E-18 +1.940 1.615E-18 +1.950 1.612E-18 +1.960 1.609E-18 +1.970 1.606E-18 +1.980 1.602E-18 +1.990 1.599E-18 +2.000 1.596E-18 +2.010 1.593E-18 +2.020 1.590E-18 +2.030 1.587E-18 +2.040 1.584E-18 +2.050 1.581E-18 +2.060 1.578E-18 +2.070 1.574E-18 +2.080 1.572E-18 +2.090 1.569E-18 +2.100 1.566E-18 +2.110 1.563E-18 +2.120 1.560E-18 +2.130 1.557E-18 +2.140 1.554E-18 +2.150 1.551E-18 +2.160 1.548E-18 +2.170 1.546E-18 +2.180 1.543E-18 +2.190 1.540E-18 +2.200 1.537E-18 +2.210 1.534E-18 +2.220 1.532E-18 +2.230 1.529E-18 +2.240 1.526E-18 +2.250 1.524E-18 +2.260 1.521E-18 +2.270 1.518E-18 +2.280 1.516E-18 +2.290 1.513E-18 +2.300 1.511E-18 +2.310 1.508E-18 +2.320 1.505E-18 +2.330 1.503E-18 +2.340 1.500E-18 +2.350 1.498E-18 +2.360 1.495E-18 +2.370 1.493E-18 +2.380 1.490E-18 +2.390 1.488E-18 +2.400 1.486E-18 +2.410 1.483E-18 +2.420 1.481E-18 +2.430 1.478E-18 +2.440 1.476E-18 +2.450 1.474E-18 +2.460 1.471E-18 +2.470 1.469E-18 +2.480 1.467E-18 +2.490 1.464E-18 +2.500 1.462E-18 +2.510 1.460E-18 +2.520 1.457E-18 +2.530 1.455E-18 +2.540 1.453E-18 +2.550 1.451E-18 +2.560 1.448E-18 +2.570 1.446E-18 +2.580 1.444E-18 +2.590 1.442E-18 +2.600 1.440E-18 +2.610 1.438E-18 +2.620 1.435E-18 +2.630 1.433E-18 +2.640 1.431E-18 +2.650 1.429E-18 +2.660 1.427E-18 +2.670 1.425E-18 +2.680 1.423E-18 +2.690 1.421E-18 +2.700 1.419E-18 +2.710 1.417E-18 +2.720 1.415E-18 +2.730 1.413E-18 +2.740 1.411E-18 +2.750 1.409E-18 +2.760 1.407E-18 +2.770 1.405E-18 +2.780 1.403E-18 +2.790 1.401E-18 +2.800 1.399E-18 +2.810 1.397E-18 +2.820 1.395E-18 +2.830 1.393E-18 +2.840 1.391E-18 +2.850 1.389E-18 +2.860 1.387E-18 +2.870 1.385E-18 +2.880 1.383E-18 +2.890 1.382E-18 +2.900 1.380E-18 +2.910 1.378E-18 +2.920 1.376E-18 +2.930 1.374E-18 +2.940 1.372E-18 +2.950 1.371E-18 +2.960 1.369E-18 +2.970 1.367E-18 +2.980 1.365E-18 +2.990 1.364E-18 +3.000 1.362E-18 diff --git a/data/collisions/IO_e-Ar.dat b/data/collisions/IO_e-Ar.dat new file mode 100644 index 0000000..4d2e032 --- /dev/null +++ b/data/collisions/IO_e-Ar.dat @@ -0,0 +1,34 @@ +# H. C. Straub et. al, Physical Review A, 55,2(1995) +# Relative energy (eV) cross section (m^2) +17 1.700E-22 +20 4.600E-21 +25 1.240E-20 +30 1.840E-20 +35 2.260E-20 +40 2.550E-20 +45 2.660E-20 +50 2.700E-20 +55 2.690E-20 +60 2.670E-20 +65 2.670E-20 +70 2.670E-20 +75 2.660E-20 +80 2.690E-20 +85 2.700E-20 +90 2.690E-20 +95 2.670E-20 +100 2.640E-20 +110 2.610E-20 +120 2.550E-20 +140 2.450E-20 +160 2.350E-20 +180 2.270E-20 +200 2.180E-20 +225 2.100E-20 +250 1.990E-20 +275 1.870E-20 +300 1.790E-20 +350 1.630E-20 +400 1.510E-20 +450 1.390E-20 +500 1.310E-20 diff --git a/runs/Argon_Expansion/CX_case.json b/runs/Argon_Expansion/CX_case.json index be5d059..94fc92f 100644 --- a/runs/Argon_Expansion/CX_case.json +++ b/runs/Argon_Expansion/CX_case.json @@ -62,7 +62,7 @@ }, "parallel": { "OpenMP":{ - "nThreads": 8 + "nThreads": 24 } } } diff --git a/src/fpakc.f90 b/src/fpakc.f90 index a24b492..0320d57 100644 --- a/src/fpakc.f90 +++ b/src/fpakc.f90 @@ -7,6 +7,7 @@ PROGRAM fpakc USE moduleSolver USE moduleOutput USE moduleCompTime + USE moduleCollisions USE moduleMesh IMPLICIT NONE @@ -59,7 +60,7 @@ PROGRAM fpakc tColl = omp_get_wtime() !$OMP END SINGLE - CALL doCollisions() + CALL doCollisions(t) !$OMP SINGLE tColl = omp_get_wtime() - tColl diff --git a/src/modules/mesh/moduleMesh.f90 b/src/modules/mesh/moduleMesh.f90 index 44d8307..a75c939 100644 --- a/src/modules/mesh/moduleMesh.f90 +++ b/src/modules/mesh/moduleMesh.f90 @@ -125,7 +125,7 @@ MODULE moduleMesh !Volume index INTEGER:: n = 0 !Maximum collision rate - REAL(8):: sigmaVrelMax = 1.D-17 + REAL(8):: sigmaVrelMax = 0.D0 !Volume REAL(8):: volume = 0.D0 !List of particles inside the volume @@ -392,7 +392,7 @@ MODULE moduleMesh self%nColl = 0 nPart = self%listPart_in%amount IF (nPart > 1) THEN - pMax = self%totalWeight*self%sigmaVrelMax*tauMin/self%volume + pMax = self%totalWeight*self%sigmaVrelMax*tauCollisions/self%volume self%nColl = INT(REAL(nPart)*pMax*0.5D0) !Converts the list of particles to an array for easy access @@ -428,9 +428,6 @@ MODULE moduleMesh self%totalWeight = 0.D0 - !Erase the list of particles inside the cell - CALL self%listPart_in%erase() - END SUBROUTINE collision SUBROUTINE printOutputGmsh(self, t) @@ -445,12 +442,12 @@ MODULE moduleMesh TYPE(outputFormat):: output(1:self%numNodes) REAL(8):: time CHARACTER(:), ALLOCATABLE:: fileName - CHARACTER (LEN=6):: tstring !TODO: Review to allow any number of iterations + CHARACTER (LEN=iterationDigits):: tstring time = DBLE(t)*tauMin*ti_ref DO i = 1, nSpecies - WRITE(tstring, '(I6.6)') t + WRITE(tstring, iterationFormat) t fileName='OUTPUT_' // tstring// '_' // species(i)%obj%name // '.msh' WRITE(*, "(6X,A15,A)") "Creating file: ", fileName OPEN (60, file = path // folder // '/' // fileName) @@ -459,7 +456,7 @@ MODULE moduleMesh WRITE(60, "(A)") '$EndMeshFormat' WRITE(60, "(A)") '$NodeData' WRITE(60, "(A)") '1' - WRITE(60, "(A)") '"Density (m^-3)"' + WRITE(60, "(A)") '"Density' // species(i)%obj%name // ' (m^-3)"' WRITE(60, *) 1 WRITE(60, *) time WRITE(60, *) 3 @@ -473,7 +470,7 @@ MODULE moduleMesh WRITE(60, "(A)") '$EndNodeData' WRITE(60, "(A)") '$NodeData' WRITE(60, "(A)") '1' - WRITE(60, "(A)") '"Velocity (m/s)"' + WRITE(60, "(A)") '"Velocity ' // species(i)%obj%name // ' (m/s)"' WRITE(60, *) 1 WRITE(60, *) time WRITE(60, *) 3 @@ -486,7 +483,7 @@ MODULE moduleMesh WRITE(60, "(A)") '$EndNodeData' WRITE(60, "(A)") '$NodeData' WRITE(60, "(A)") '1' - WRITE(60, "(A)") '"Pressure (Pa)"' + WRITE(60, "(A)") '"Pressure ' // species(i)%obj%name // ' (Pa)"' WRITE(60, *) 1 WRITE(60, *) time WRITE(60, *) 3 @@ -499,7 +496,7 @@ MODULE moduleMesh WRITE(60, "(A)") '$EndNodeData' WRITE(60, "(A)") '$NodeData' WRITE(60, "(A)") '1' - WRITE(60, "(A)") '"Temperature (K)"' + WRITE(60, "(A)") '"Temperature ' // species(i)%obj%name // ' (K)"' WRITE(60, *) 1 WRITE(60, *) time WRITE(60, *) 3 @@ -519,6 +516,7 @@ MODULE moduleMesh SUBROUTINE printCollGmsh(self, t) USE moduleRefParam USE moduleCaseParam + USE moduleCollisions USE moduleOutput IMPLICIT NONE @@ -527,12 +525,12 @@ MODULE moduleMesh INTEGER:: n REAL(8):: time CHARACTER(:), ALLOCATABLE:: fileName - CHARACTER (LEN=6):: tstring !TODO: Review to allow any number of iterations + CHARACTER (LEN=iterationDigits):: tstring - IF (collOutput) THEN + IF (collOutput .AND. MOD(t, everyCollisions) == 0) THEN time = DBLE(t)*tauMin*ti_ref - WRITE(tstring, '(I6.6)') t + WRITE(tstring, iterationFormat) t fileName='OUTPUT_' // tstring// '_Collisions.msh' WRITE(*, "(6X,A15,A)") "Creating file: ", fileName @@ -571,14 +569,14 @@ MODULE moduleMesh INTEGER:: n, e REAL(8):: time CHARACTER(:), ALLOCATABLE:: fileName - CHARACTER (LEN=6):: tstring !TODO: Review to allow any number of iterations + CHARACTER (LEN=iterationDigits):: tstring REAL(8):: xi(1:3) xi = (/ 0.D0, 0.D0, 0.D0 /) IF (emOutput) THEN time = DBLE(t)*tauMin*ti_ref - WRITE(tstring, '(I6.6)') t + WRITE(tstring, iterationFormat) t fileName='OUTPUT_' // tstring// '_EMField.msh' WRITE(*, "(6X,A15,A)") "Creating file: ", fileName diff --git a/src/modules/moduleCollisions.f90 b/src/modules/moduleCollisions.f90 index 0d10994..7816075 100644 --- a/src/modules/moduleCollisions.f90 +++ b/src/modules/moduleCollisions.f90 @@ -1,4 +1,5 @@ MODULE moduleCollisions + USE moduleSpecies USE moduleTable !Abstract type for collision between two particles @@ -11,14 +12,6 @@ MODULE moduleCollisions END TYPE collisionBinary ABSTRACT INTERFACE - SUBROUTINE initBinary_interface(self, crossSectionFilename, mass_i, mass_j) - IMPORT:: collisionBinary - CLASS(collisionBinary), INTENT(inout):: self - CHARACTER(:), ALLOCATABLE, INTENT(in):: crossSectionFilename - REAL(8), INTENT(in):: mass_i, mass_j - - END SUBROUTINE - SUBROUTINE collideBinary_interface(self, sigmaVRelMax, sigmaVrelMaxNew, part_i, part_j) USE moduleSpecies IMPORT:: collisionBinary @@ -26,7 +19,7 @@ MODULE moduleCollisions CLASS(collisionBinary), INTENT(in):: self REAL(8), INTENT(in):: sigmaVrelMax REAL(8), INTENT(inout):: sigmaVrelMaxNew - TYPE(particle), INTENT(inout):: part_i, part_j + TYPE(particle), INTENT(inout), TARGET:: part_i, part_j END SUBROUTINE @@ -51,6 +44,10 @@ MODULE moduleCollisions !Ionization binary interaction TYPE, EXTENDS(collisionBinary):: collisionBinaryIonization REAL(8):: eThreshold !Minimum energy (non-dimensional units) required for ionization + REAL(8):: deltaV !Change in velocity due to exchange of eThreshold + CLASS(speciesCharged), POINTER:: electron !Pointer to species considerer as electrons + REAL(8):: w_i = (1.D0+DSQRT(3.D0))/2.D0 + REAL(8):: w_j = (DSQRT(3.D0)-1.D0)/2.D0 CONTAINS PROCEDURE, PASS:: collide => collideBinaryIonization @@ -76,6 +73,10 @@ MODULE moduleCollisions TYPE(interactionsBinary), ALLOCATABLE, TARGET:: interactionMatrix(:) !Folder for collision cross section tables CHARACTER(:), ALLOCATABLE:: pathCollisions + !Time step for collisional process + REAL(8):: tauCollisions + !Number of iterations between collisional updates + INTEGER:: everyCollisions CONTAINS !Inits the interaction matrix @@ -152,7 +153,7 @@ MODULE moduleCollisions CLASS(collisionBinaryElastic), INTENT(in):: self REAL(8), INTENT(in):: sigmaVrelMax REAL(8), INTENT(inout):: sigmaVrelMaxNew - TYPE(particle), INTENT(inout):: part_i, part_j + TYPE(particle), INTENT(inout), TARGET:: part_i, part_j REAL(8):: sigmaVrel REAL(8):: vRel !relative velocity REAL(8):: eRel !relative energy @@ -176,12 +177,12 @@ MODULE moduleCollisions vp_i = v_ij*self%w_j CALL RANDOM_NUMBER(rnd) alpha = PI*rnd - part_i%v(1) = v_i*DCOS(alpha) - part_i%v(2) = v_i*DSIN(alpha) + part_i%v(1) = vp_i*DCOS(alpha) + part_i%v(2) = vp_i*DSIN(alpha) CALL RANDOM_NUMBER(rnd) alpha = PI*rnd - part_j%v(1) = v_j*DCOS(alpha) - part_j%v(2) = v_j*DSIN(alpha) + part_j%v(1) = vp_j*DCOS(alpha) + part_j%v(2) = vp_j*DSIN(alpha) END IF @@ -189,16 +190,20 @@ MODULE moduleCollisions !ELECTRON IMPACT IONIZATION !Inits electron impact ionization - SUBROUTINE initBinaryIonization(collision, crossSectionFilename, energyThreshold, mass_i, mass_j) + SUBROUTINE initBinaryIonization(collision, crossSectionFilename, energyThreshold, mass_i, mass_j, electron) USE moduleTable USE moduleRefParam USE moduleConstParam + USE moduleSpecies + USE moduleErrors IMPLICIT NONE CLASS(collisionBinary), INTENT(out), ALLOCATABLE:: collision CHARACTER(:), ALLOCATABLE, INTENT(in):: crossSectionFilename REAL(8), INTENT(in):: energyThreshold REAL(8), INTENT(in):: mass_i, mass_j + CHARACTER(:), ALLOCATABLE, INTENT(in):: electron + INTEGER:: electronIndex ALLOCATE(collisionBinaryIonization:: collision) @@ -211,10 +216,22 @@ MODULE moduleCollisions !Calculates reduced mass collision%rMass = (mass_i*mass_j)/(mass_i+mass_j) + !Specific parameters for ionization collision SELECT TYPE(collision) TYPE IS(collisionBinaryIonization) !Assign the energy threshold - collision%eThreshold = energyThreshold/(m_ref*v_ref**2) + !Input energy is in eV. Convert to J with ev2J and then to + !non-dimensional units. + collision%eThreshold = energyThreshold*eV2J/(m_ref*v_ref**2) + electronIndex = speciesName2Index(electron) + SELECT TYPE(sp => species(electronIndex)%obj) + TYPE IS(speciesCharged) + collision%electron => sp + + CLASS DEFAULT + CALL criticalError("Species " // sp%name // " chosen for ionization is not a charged species", 'initBinaryIonization') + + END SELECT END SELECT @@ -224,12 +241,84 @@ MODULE moduleCollisions SUBROUTINE collideBinaryIonization(self, sigmaVrelMax, sigmaVrelMaxNew, & part_i, part_j) USE moduleSpecies + USE moduleErrors + USE moduleList + USE moduleRefParam !TODO: DELETE + USE moduleConstParam !TODO: DELETE + USE OMP_LIB IMPLICIT NONE CLASS(collisionBinaryIonization), INTENT(in):: self REAL(8), INTENT(in):: sigmaVrelMax REAL(8), INTENT(inout):: sigmaVrelMaxNew - TYPE(particle), INTENT(inout):: part_i, part_j + TYPE(particle), INTENT(inout), TARGET:: part_i, part_j + TYPE(particle), POINTER:: electron, neutral + TYPE(particle), POINTER:: newElectron + REAL(8):: vRel, eRel + REAL(8):: sigmaVrel + REAL(8):: rnd + REAL(8), DIMENSION(1:3):: vp_e, vp_n + + !eRel (in units of [m][L]^2[t]^-2 + vRel = SUM(DABS(part_i%v-part_j%v)) !TODO make function of norm1 + eRel = self%rMass*vRel**2 + !Relative energy must be higher than threshold + IF (eRel > self%eThreshold) THEN + sigmaVrel = self%crossSec%get(eRel)*vRel + sigmaVrelMaxNew = sigmaVrelMaxNew + sigmaVrel + CALL RANDOM_NUMBER(rnd) + IF (sigmaVrelMaxNew/sigmaVrelMax > rnd) THEN + !Find which particle is the ionizing electron + IF (part_i%sp == self%electron%sp) THEN + electron => part_i + neutral => part_j + + ELSEIF(part_j%sp == self%electron%sp) THEN + electron => part_j + neutral => part_i + + ELSE + CALL criticalError("No matching between input particles and ionizing species", 'collideBinaryIonization') + + END IF + + !Exchange energy between + vp_e = electron%v*(1.D0 - self%deltaV/NORM2(electron%v)) + vp_n = neutral%v* (1.D0 + self%deltaV/NORM2(neutral%v) ) + + !Changes velocity of impacting electron + electron%v = vp_e + + !Creates a new electron from ionization + ALLOCATE(newElectron) + newElectron%sp = electron%sp + newElectron%v = vp_n + newElectron%r = neutral%r + newElectron%xi = neutral%xi + newElectron%n_in = .TRUE. + newElectron%vol = neutral%vol + newElectron%weight = neutral%weight + newElectron%qm = electron%qm + + !Ionize neutral particle + SELECT TYPE(sp => species(neutral%sp)%obj) + TYPE IS(speciesNeutral) + CALL sp%ionize(neutral) + + CLASS DEFAULT + CALL criticalError(sp%name // " is not a neutral", 'collideBinaryIonization') + + END SELECT + + !Adds new electron to list of new particles from collisions + CALL OMP_SET_LOCK(lockCollisions) + CALL partCollisions%add(newElectron) + CALL OMP_UNSET_LOCK(lockCollisions) + + END IF + + END IF + END SUBROUTINE collideBinaryIonization @@ -266,7 +355,7 @@ MODULE moduleCollisions CLASS(collisionBinaryChargeExchange), INTENT(in):: self REAL(8), INTENT(in):: sigmaVrelMax REAL(8), INTENT(inout):: sigmaVrelMaxNew - TYPE(particle), INTENT(inout):: part_i, part_j + TYPE(particle), INTENT(inout), TARGET:: part_i, part_j REAL(8):: sigmaVrel REAL(8):: vRel !relative velocity REAL(8):: eRel !relative energy diff --git a/src/modules/moduleInject.f90 b/src/modules/moduleInject.f90 index 47edbf0..d222cac 100644 --- a/src/modules/moduleInject.f90 +++ b/src/modules/moduleInject.f90 @@ -88,24 +88,23 @@ MODULE moduleInject self%vMod = v/v_ref self%n = n self%T = T/T_ref + self%sp = sp SELECT CASE(units) CASE ("sccm") !Standard cubic centimeter per minute - self%nParticles = INT(flow*sccm2atomPerS*tauMin*ti_ref/species(sp)%obj%weight) + self%nParticles = INT(flow*sccm2atomPerS*tau(self%sp)*ti_ref/species(sp)%obj%weight) CASE ("A") !Input current in Ampers - self%nParticles = INT(flow*tauMin*ti_ref/(qe*species(sp)%obj%weight)) + self%nParticles = INT(flow*tau(self%sp)*ti_ref/(qe*species(sp)%obj%weight)) CASE DEFAULT CALL criticalError("No support for units: " // units, 'initInject') END SELECT + !Scale particles for different species steps IF (self%nParticles == 0) CALL criticalError("The number of particles for inject is 0.", 'initInject') - self%nParticles = self%nParticles * solver%pusher(sp)%every - self%sp = sp - !Gets the edge elements from which particles are injected !TODO: Improve this A LOT DO e = 1, mesh%numEdges diff --git a/src/modules/moduleInput.f90 b/src/modules/moduleInput.f90 index 5dd69e1..4fd7188 100644 --- a/src/modules/moduleInput.f90 +++ b/src/modules/moduleInput.f90 @@ -67,7 +67,7 @@ MODULE moduleInput IMPLICIT NONE TYPE(json_file), INTENT(inout):: config - LOGICAL:: found, found_r + LOGICAL:: found CHARACTER(:), ALLOCATABLE:: object object = 'reference' @@ -81,24 +81,29 @@ MODULE moduleInput CALL config%get(object // '.temperature', T_ref, found) IF (.NOT. found) CALL criticalError('Reference temperature not found','readReference') - CALL config%get(object // '.radius', r_ref, found_r) - - !Derived parameters - v_ref = DSQRT(kb*T_ref/m_ref) !reference velocity - IF (found_r) THEN - sigma_ref = PI*(r_ref+r_ref)**2 !reference cross section - L_ref = 1.D0/(sigma_ref*n_ref) !mean free path + !If a reference cross section is given, it is used + CALL config%get(object // '.crossSection', sigma_ref, found) - ELSE - L_ref = DSQRT(kb*T_ref*eps_0/n_ref)/qe !Debye length - !TODO: Obtain right sigma_ref for PIC case - sigma_ref = PI*(4.D-10)**2 !reference cross section + !If not, the reference radius is searched + IF (.NOT. found) THEN + CALL config%get(object // '.radius', r_ref, found) + IF (found) THEN + sigma_ref = PI*(r_ref+r_ref)**2 !reference cross section + + ELSE + sigma_ref = 0.D0 !Assume no collisions + + END IF END IF - ti_ref = L_ref/v_ref !reference time - Vol_ref = L_ref**3 !reference volume - EF_ref = qe*n_ref*L_ref/eps_0 !reference electric field - Volt_ref = EF_ref*L_ref !reference voltage + + !Derived parameters + L_ref = DSQRT(kb*T_ref*eps_0/n_ref)/qe !reference length + v_ref = DSQRT(kb*T_ref/m_ref) !reference velocity + ti_ref = L_ref/v_ref !reference time + Vol_ref = L_ref**3 !reference volume + EF_ref = qe*n_ref*L_ref/eps_0 !reference electric field + Volt_ref = EF_ref*L_ref !reference voltage END SUBROUTINE readReference @@ -109,6 +114,8 @@ MODULE moduleInput USE moduleCaseParam USE moduleSolver USE moduleSpecies + USE moduleCollisions + USE moduleOutput USE json_module IMPLICIT NONE @@ -120,6 +127,7 @@ MODULE moduleInput INTEGER:: nTau, nSolver INTEGER:: i CHARACTER(2):: iString + CHARACTER(1):: tString object = 'case' @@ -139,6 +147,17 @@ MODULE moduleInput END IF tauMin = MINVAL(tau) + !Calculates iterations between collisions + IF (tauCollisions /= 0.D0) THEN + everyCollisions = INT(tauCollisions/tauMin) + + ELSE + CALL warningError('Using minimum time step for collisions') + tauCollisions = tauMin + everyCollisions = 1 + + END IF + !Gets the simulation time CALL config%get(object // '.time', time, found) IF (.NOT. found) CALL criticalError('Required parameter time not found','readCase') @@ -174,9 +193,15 @@ MODULE moduleInput CALL solver%initWS(WSType) - !Makes tau non-dimensional + !Makes tau(s) non-dimensional tau = tau / ti_ref tauMin = tauMin / ti_ref + tauCollisions = tauCollisions / ti_ref + + !Sets the format of output files accordint to iteration number + iterationDigits = INT(LOG10(REAL(tmax))) + 1 + WRITE(tString, '(I1)') iterationDigits + iterationFormat = "(I" // tString // "." // tString // ")" END SUBROUTINE readCase @@ -227,6 +252,7 @@ MODULE moduleInput USE moduleSpecies USE moduleErrors USE moduleRefParam + USE moduleList USE json_module IMPLICIT NONE @@ -262,6 +288,7 @@ MODULE moduleInput CASE ("charged") CALL config%get(object // '.charge', charge, found) + IF (.NOT. found) CALL criticalError("Required parameter charge not found for species " // object, 'readSpecies') ALLOCATE(species(i)%obj, source=speciesCharged(q = charge, & qm = charge/mass)) @@ -293,7 +320,7 @@ MODULE moduleInput TYPE IS (speciesCharged) !Gets species linked neutral - CALL config%get(object // '.neutral', linkName) + CALL config%get(object // '.neutral', linkName, found) IF (found) THEN linkID = speciesName2Index(linkName) sp%neutral => species(linkID)%obj @@ -324,8 +351,10 @@ MODULE moduleInput !Reads information about interactions between species SUBROUTINE readInteractions(config) USE moduleSpecies + USE moduleList USE moduleCollisions USE moduleErrors + USE OMP_LIB USE json_module IMPLICIT NONE @@ -341,10 +370,17 @@ MODULE moduleInput INTEGER:: i, k, ij INTEGER:: pt_i, pt_j REAL(8):: energyThreshold + CHARACTER(:), ALLOCATABLE:: electron CALL initInteractionMatrix(interactionMatrix) + !Path for collision cross-section data files CALL config%get('interactions.folderCollisions', pathCollisions, found) + !Collisional time step + CALL config%get('interactions.tauCollisions', tauCollisions, found) + + !Inits lock for list of particles + CALL OMP_INIT_LOCK(lockCollisions) CALL config%info('interactions.collisions', found, n_children = nInteractions) DO i = 1, nInteractions @@ -382,10 +418,12 @@ MODULE moduleInput CASE ('ionization') !Electorn impact ionization - CALL config%get(object // '.energyThreshold', found) + CALL config%get(object // '.energyThreshold', energyThreshold, found) IF (.NOT. found) CALL criticalError('energyThreshold not found for collision' // object, 'readInteractions') + CALL config%get(object // '.electron', electron, found) + IF (.NOT. found) CALL criticalError('electron not found for collision' // object, 'readInteractions') CALL initBinaryIonization(interactionMatrix(ij)%collisions(k)%obj, & - crossSecFilePath, energyThreshold, species(pt_i)%obj%m, species(pt_j)%obj%m) + crossSecFilePath, energyThreshold, species(pt_i)%obj%m, species(pt_j)%obj%m, electron) CASE DEFAULT CALL criticalError('Collision type' // cType // 'not defined yet', 'readInteractions') diff --git a/src/modules/moduleList.f90 b/src/modules/moduleList.f90 index db5688c..9ef1316 100644 --- a/src/modules/moduleList.f90 +++ b/src/modules/moduleList.f90 @@ -21,6 +21,9 @@ MODULE moduleList END TYPE listNode TYPE(listNode):: partWScheme !Particles comming from the nonAnalogue scheme + INTEGER(KIND=OMP_LOCK_KIND):: lockWScheme !Lock for the NA list of particles + TYPE(listNode):: partCollisions !Particles created in collisional process + INTEGER(KIND=OMP_LOCK_KIND):: lockCollisions !Lock for the NA list of particles TYPE pointerArray TYPE(particle), POINTER:: part diff --git a/src/modules/moduleOutput.f90 b/src/modules/moduleOutput.f90 index 92f747d..b4b8317 100644 --- a/src/modules/moduleOutput.f90 +++ b/src/modules/moduleOutput.f90 @@ -22,6 +22,8 @@ MODULE moduleOutput CHARACTER(:), ALLOCATABLE:: path CHARACTER(:), ALLOCATABLE:: folder + INTEGER:: iterationDigits + CHARACTER(:), ALLOCATABLE:: iterationFormat INTEGER:: triggerOutput, counterOutput = 0 INTEGER:: triggerCPUTime, counterCPUTime = 0 LOGICAL:: timeOutput = .FALSE. @@ -72,9 +74,6 @@ MODULE moduleOutput tempVol = 1.D0/(nodeVol*Vol_ref) IF (rawValues%den > 0.D0) THEN tempVel = rawValues%mom(:)/rawValues%den - IF ((tempVel(1) - 1.D0) .EQ. tempVel(1)) THEN - PRINT *, rawValues%mom - END IF tensorTemp = (rawValues%tensorS(:,:) - rawValues%den*outerProduct(tempVel,tempVel)) formatValues%density = rawValues%den*tempVol formatValues%velocity(:) = tempVel @@ -106,7 +105,7 @@ MODULE moduleOutput IF (PRESENT(first)) THEN IF (first) THEN OPEN(20, file = path // folder // '/' // fileName, action = 'write') - WRITE(20, "(A1, 8X, A1, 9X, A1, 5(A20))") "#","t","n","total","push","reset","collision","weighting" + WRITE(20, "(A1, 8X, A1, 9X, A1, 6(A20))") "#","t","n","total","push","reset","collision","weighting","EMField" WRITE(*, "(6X,A15,A)") "Creating file: ", fileName ELSE @@ -119,7 +118,7 @@ MODULE moduleOutput END IF - WRITE (20, "(I10, I10, 5(ES20.6E3))") t, nPartOld, tStep, tPush, tReset, tColl, tWeight + WRITE (20, "(I10, I10, 6(ES20.6E3))") t, nPartOld, tStep, tPush, tReset, tColl, tWeight, tEMField CLOSE(20) diff --git a/src/modules/moduleSolver.f90 b/src/modules/moduleSolver.f90 index b8c169b..801c8b3 100644 --- a/src/modules/moduleSolver.f90 +++ b/src/modules/moduleSolver.f90 @@ -295,17 +295,22 @@ MODULE moduleSolver END SUBROUTINE push1DRadCharged !Do the collisions in all the cells - SUBROUTINE doCollisions() + SUBROUTINE doCollisions(t) USE moduleMesh + USE moduleCollisions IMPLICIT NONE + INTEGER, INTENT(in):: t INTEGER:: e - !$OMP DO SCHEDULE(DYNAMIC) - DO e=1, mesh%numVols - CALL mesh%vols(e)%obj%collision() - END DO - !$OMP END DO + IF (MOD(t, everyCollisions) == 0) THEN + !$OMP DO SCHEDULE(DYNAMIC) + DO e=1, mesh%numVols + CALL mesh%vols(e)%obj%collision() + END DO + !$OMP END DO + + END IF END SUBROUTINE doCollisions @@ -317,7 +322,7 @@ MODULE moduleSolver INTEGER:: nn, n, e INTEGER, SAVE:: nPartNew - INTEGER, SAVE:: nInjIn, nOldIn, nWScheme + INTEGER, SAVE:: nInjIn, nOldIn, nWScheme, nCollisions TYPE(particle), ALLOCATABLE, SAVE:: partTemp(:) TYPE(lNode), POINTER:: partCurr, partNext @@ -336,13 +341,15 @@ MODULE moduleSolver END IF !$OMP SECTION nWScheme = partWScheme%amount + !$OMP SECTION + nCollisions = partCollisions%amount !$OMP END SECTIONS !$OMP BARRIER !$OMP SINGLE CALL MOVE_ALLOC(partOld, partTemp) - nPartNew = nInjIn + nOldIn + nWScheme + nPartNew = nInjIn + nOldIn + nWScheme + nCollisions ALLOCATE(partOld(1:nPartNew)) !$OMP END SINGLE @@ -385,12 +392,35 @@ MODULE moduleSolver IF (ASSOCIATED(partWScheme%tail)) NULLIFY(partWScheme%tail) partWScheme%amount = 0 + !$OMP SECTION + !Reset particles from collisional process + nn = nInjIn + nOldIn + nWScheme + partCurr => partCollisions%head + DO n = 1, nCollisions + partNext => partCurr%next + partOld(nn+n) = partCurr%part + DEALLOCATE(partCurr) + partCurr => partNext + + END DO + IF (ASSOCIATED(partCollisions%head)) NULLIFY(partCollisions%head) + IF (ASSOCIATED(partCollisions%tail)) NULLIFY(partCollisions%tail) + partCollisions%amount = 0 + !$OMP SECTION !Reset output in nodes DO e = 1, mesh%numNodes CALL mesh%nodes(e)%obj%resetOutput() END DO + + !$OMP SECTION + !Erase the list of particles inside the cell + DO e = 1, mesh%numVols + CALL mesh%vols(e)%obj%listPart_in%erase() + + END DO + !$OMP END SECTIONS !$OMP SINGLE diff --git a/src/modules/moduleSpecies.f90 b/src/modules/moduleSpecies.f90 index 8bfb84b..f2904f9 100644 --- a/src/modules/moduleSpecies.f90 +++ b/src/modules/moduleSpecies.f90 @@ -52,7 +52,6 @@ MODULE moduleSpecies !Arrays that contain the particles TYPE(particle), ALLOCATABLE, DIMENSION(:), TARGET:: partOld !array of particles from previous iteration TYPE(particle), ALLOCATABLE, DIMENSION(:), TARGET:: partInj !array of inject particles - INTEGER(KIND=OMP_LOCK_KIND):: lockWScheme !Lock for the NA list of particles CONTAINS FUNCTION speciesName2Index(speciesName) RESULT(sp) diff --git a/src/modules/moduleTable.f90 b/src/modules/moduleTable.f90 index 517c087..39097c0 100644 --- a/src/modules/moduleTable.f90 +++ b/src/modules/moduleTable.f90 @@ -113,7 +113,11 @@ MODULE moduleTable REAL(8):: data_x, data_f self%x = self%x * data_x + self%xMin = self%xMin * data_x + self%xMax = self%xMax * data_x self%f = self%f * data_f + self%fMin = self%fMin * data_f + self%fMax = self%fMax * data_f self%k = self%k * data_f / data_x END SUBROUTINE convertUnits