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.
This commit is contained in:
parent
159d1527e6
commit
e50cc3325b
13 changed files with 569 additions and 375 deletions
|
|
@ -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
|
||||
|
|
|
|||
34
data/collisions/IO_e-Ar.dat
Normal file
34
data/collisions/IO_e-Ar.dat
Normal file
|
|
@ -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
|
||||
|
|
@ -62,7 +62,7 @@
|
|||
},
|
||||
"parallel": {
|
||||
"OpenMP":{
|
||||
"nThreads": 8
|
||||
"nThreads": 24
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue