Merge branch 'development' into 'master'
Development See merge request JorgeGonz/fpakc!2
This commit is contained in:
commit
3bb5ecd06e
51 changed files with 25131 additions and 1817 deletions
32
README.md
32
README.md
|
|
@ -13,8 +13,36 @@ The codefpakc makes use of finite elements to generate meshes in complex geometr
|
|||
|
||||
# User Manual
|
||||
|
||||
You will find the user manual in the *doc* folder.
|
||||
You will find the user manual in the *doc/user-manual/* folder. It contains information about the installation of fpkac, how to run the software, the example cases distributed with the code and how the code operates.
|
||||
|
||||
# Installation
|
||||
|
||||
To install the software ...
|
||||
Once you have been added to the fpakc gitlab repository, and have added an ssh key to your account, you will be able to clone the repository using:
|
||||
```
|
||||
git clone git@gitlab.com:<YourGitLabUsername>/fpakc.git
|
||||
```
|
||||
in which you have to substitute `<YourGitLabUsername>` for your gitlab username.
|
||||
|
||||
Go into the new downloaded directory with
|
||||
```
|
||||
cd fpakc
|
||||
```
|
||||
Clone the json-fortran repository with:
|
||||
```
|
||||
git clone https://github.com/jacobwilliams/json-fortran.git
|
||||
```
|
||||
This will create the `json-fortran-8.2.0` directory. Go into this new folder and create a new `build-gfortran` directory, enter it and execute:
|
||||
```
|
||||
cmake ../
|
||||
```
|
||||
Once it finish, just compile the json-fortran library with
|
||||
```
|
||||
make
|
||||
```
|
||||
This creates the `include` and `lib` folders that contain the required files for fpakc compilation.
|
||||
|
||||
Go back to the fpakc root folder and execute
|
||||
```
|
||||
make
|
||||
```
|
||||
to compile the code. If everything is correct, an executable named `fpakc` will be generated.
|
||||
|
|
|
|||
|
|
@ -1,302 +0,0 @@
|
|||
# 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
|
||||
302
data/collisions/CX_Ar-Ar+.dat
Normal file
302
data/collisions/CX_Ar-Ar+.dat
Normal file
|
|
@ -0,0 +1,302 @@
|
|||
#M. Lampe, et. al, Phys. Plasmas, 19(11):113703, 2012
|
||||
#Relative energy (eV) Cross Section (m^2)
|
||||
0.010 6.913E-19
|
||||
0.020 6.705E-19
|
||||
0.030 6.583E-19
|
||||
0.040 6.497E-19
|
||||
0.050 6.430E-19
|
||||
0.060 6.375E-19
|
||||
0.070 6.329E-19
|
||||
0.080 6.288E-19
|
||||
0.090 6.253E-19
|
||||
0.100 6.221E-19
|
||||
0.110 6.193E-19
|
||||
0.120 6.167E-19
|
||||
0.130 6.143E-19
|
||||
0.140 6.120E-19
|
||||
0.150 6.100E-19
|
||||
0.160 6.080E-19
|
||||
0.170 6.062E-19
|
||||
0.180 6.045E-19
|
||||
0.190 6.029E-19
|
||||
0.200 6.013E-19
|
||||
0.210 5.999E-19
|
||||
0.220 5.985E-19
|
||||
0.230 5.971E-19
|
||||
0.240 5.959E-19
|
||||
0.250 5.946E-19
|
||||
0.260 5.934E-19
|
||||
0.270 5.923E-19
|
||||
0.280 5.912E-19
|
||||
0.290 5.902E-19
|
||||
0.300 5.892E-19
|
||||
0.310 5.882E-19
|
||||
0.320 5.872E-19
|
||||
0.330 5.863E-19
|
||||
0.340 5.854E-19
|
||||
0.350 5.845E-19
|
||||
0.360 5.837E-19
|
||||
0.370 5.829E-19
|
||||
0.380 5.821E-19
|
||||
0.390 5.813E-19
|
||||
0.400 5.805E-19
|
||||
0.410 5.798E-19
|
||||
0.420 5.790E-19
|
||||
0.430 5.783E-19
|
||||
0.440 5.777E-19
|
||||
0.450 5.770E-19
|
||||
0.460 5.763E-19
|
||||
0.470 5.757E-19
|
||||
0.480 5.750E-19
|
||||
0.490 5.744E-19
|
||||
0.500 5.738E-19
|
||||
0.510 5.732E-19
|
||||
0.520 5.726E-19
|
||||
0.530 5.721E-19
|
||||
0.540 5.715E-19
|
||||
0.550 5.710E-19
|
||||
0.560 5.704E-19
|
||||
0.570 5.699E-19
|
||||
0.580 5.694E-19
|
||||
0.590 5.688E-19
|
||||
0.600 5.683E-19
|
||||
0.610 5.678E-19
|
||||
0.620 5.674E-19
|
||||
0.630 5.669E-19
|
||||
0.640 5.664E-19
|
||||
0.650 5.659E-19
|
||||
0.660 5.655E-19
|
||||
0.670 5.650E-19
|
||||
0.680 5.646E-19
|
||||
0.690 5.641E-19
|
||||
0.700 5.637E-19
|
||||
0.710 5.633E-19
|
||||
0.720 5.629E-19
|
||||
0.730 5.625E-19
|
||||
0.740 5.620E-19
|
||||
0.750 5.616E-19
|
||||
0.760 5.612E-19
|
||||
0.770 5.608E-19
|
||||
0.780 5.605E-19
|
||||
0.790 5.601E-19
|
||||
0.800 5.597E-19
|
||||
0.810 5.593E-19
|
||||
0.820 5.590E-19
|
||||
0.830 5.586E-19
|
||||
0.840 5.582E-19
|
||||
0.850 5.579E-19
|
||||
0.860 5.575E-19
|
||||
0.870 5.572E-19
|
||||
0.880 5.568E-19
|
||||
0.890 5.565E-19
|
||||
0.900 5.562E-19
|
||||
0.910 5.558E-19
|
||||
0.920 5.555E-19
|
||||
0.930 5.552E-19
|
||||
0.940 5.549E-19
|
||||
0.950 5.545E-19
|
||||
0.960 5.542E-19
|
||||
0.970 5.539E-19
|
||||
0.980 5.536E-19
|
||||
0.990 5.533E-19
|
||||
1.000 5.530E-19
|
||||
1.010 5.527E-19
|
||||
1.020 5.524E-19
|
||||
1.030 5.521E-19
|
||||
1.040 5.518E-19
|
||||
1.050 5.515E-19
|
||||
1.060 5.513E-19
|
||||
1.070 5.510E-19
|
||||
1.080 5.507E-19
|
||||
1.090 5.504E-19
|
||||
1.100 5.501E-19
|
||||
1.110 5.499E-19
|
||||
1.120 5.496E-19
|
||||
1.130 5.493E-19
|
||||
1.140 5.491E-19
|
||||
1.150 5.488E-19
|
||||
1.160 5.485E-19
|
||||
1.170 5.483E-19
|
||||
1.180 5.480E-19
|
||||
1.190 5.478E-19
|
||||
1.200 5.475E-19
|
||||
1.210 5.473E-19
|
||||
1.220 5.470E-19
|
||||
1.230 5.468E-19
|
||||
1.240 5.465E-19
|
||||
1.250 5.463E-19
|
||||
1.260 5.461E-19
|
||||
1.270 5.458E-19
|
||||
1.280 5.456E-19
|
||||
1.290 5.454E-19
|
||||
1.300 5.451E-19
|
||||
1.310 5.449E-19
|
||||
1.320 5.447E-19
|
||||
1.330 5.444E-19
|
||||
1.340 5.442E-19
|
||||
1.350 5.440E-19
|
||||
1.360 5.438E-19
|
||||
1.370 5.435E-19
|
||||
1.380 5.433E-19
|
||||
1.390 5.431E-19
|
||||
1.400 5.429E-19
|
||||
1.410 5.427E-19
|
||||
1.420 5.425E-19
|
||||
1.430 5.423E-19
|
||||
1.440 5.421E-19
|
||||
1.450 5.418E-19
|
||||
1.460 5.416E-19
|
||||
1.470 5.414E-19
|
||||
1.480 5.412E-19
|
||||
1.490 5.410E-19
|
||||
1.500 5.408E-19
|
||||
1.510 5.406E-19
|
||||
1.520 5.404E-19
|
||||
1.530 5.402E-19
|
||||
1.540 5.400E-19
|
||||
1.550 5.398E-19
|
||||
1.560 5.396E-19
|
||||
1.570 5.395E-19
|
||||
1.580 5.393E-19
|
||||
1.590 5.391E-19
|
||||
1.600 5.389E-19
|
||||
1.610 5.387E-19
|
||||
1.620 5.385E-19
|
||||
1.630 5.383E-19
|
||||
1.640 5.381E-19
|
||||
1.650 5.380E-19
|
||||
1.660 5.378E-19
|
||||
1.670 5.376E-19
|
||||
1.680 5.374E-19
|
||||
1.690 5.372E-19
|
||||
1.700 5.371E-19
|
||||
1.710 5.369E-19
|
||||
1.720 5.367E-19
|
||||
1.730 5.365E-19
|
||||
1.740 5.364E-19
|
||||
1.750 5.362E-19
|
||||
1.760 5.360E-19
|
||||
1.770 5.359E-19
|
||||
1.780 5.357E-19
|
||||
1.790 5.355E-19
|
||||
1.800 5.354E-19
|
||||
1.810 5.352E-19
|
||||
1.820 5.350E-19
|
||||
1.830 5.349E-19
|
||||
1.840 5.347E-19
|
||||
1.850 5.345E-19
|
||||
1.860 5.344E-19
|
||||
1.870 5.342E-19
|
||||
1.880 5.340E-19
|
||||
1.890 5.339E-19
|
||||
1.900 5.337E-19
|
||||
1.910 5.336E-19
|
||||
1.920 5.334E-19
|
||||
1.930 5.333E-19
|
||||
1.940 5.331E-19
|
||||
1.950 5.329E-19
|
||||
1.960 5.328E-19
|
||||
1.970 5.326E-19
|
||||
1.980 5.325E-19
|
||||
1.990 5.323E-19
|
||||
2.000 5.322E-19
|
||||
2.010 5.320E-19
|
||||
2.020 5.319E-19
|
||||
2.030 5.317E-19
|
||||
2.040 5.316E-19
|
||||
2.050 5.314E-19
|
||||
2.060 5.313E-19
|
||||
2.070 5.312E-19
|
||||
2.080 5.310E-19
|
||||
2.090 5.309E-19
|
||||
2.100 5.307E-19
|
||||
2.110 5.306E-19
|
||||
2.120 5.304E-19
|
||||
2.130 5.303E-19
|
||||
2.140 5.302E-19
|
||||
2.150 5.300E-19
|
||||
2.160 5.299E-19
|
||||
2.170 5.297E-19
|
||||
2.180 5.296E-19
|
||||
2.190 5.295E-19
|
||||
2.200 5.293E-19
|
||||
2.210 5.292E-19
|
||||
2.220 5.291E-19
|
||||
2.230 5.289E-19
|
||||
2.240 5.288E-19
|
||||
2.250 5.286E-19
|
||||
2.260 5.285E-19
|
||||
2.270 5.284E-19
|
||||
2.280 5.283E-19
|
||||
2.290 5.281E-19
|
||||
2.300 5.280E-19
|
||||
2.310 5.279E-19
|
||||
2.320 5.277E-19
|
||||
2.330 5.276E-19
|
||||
2.340 5.275E-19
|
||||
2.350 5.273E-19
|
||||
2.360 5.272E-19
|
||||
2.370 5.271E-19
|
||||
2.380 5.270E-19
|
||||
2.390 5.268E-19
|
||||
2.400 5.267E-19
|
||||
2.410 5.266E-19
|
||||
2.420 5.265E-19
|
||||
2.430 5.263E-19
|
||||
2.440 5.262E-19
|
||||
2.450 5.261E-19
|
||||
2.460 5.260E-19
|
||||
2.470 5.258E-19
|
||||
2.480 5.257E-19
|
||||
2.490 5.256E-19
|
||||
2.500 5.255E-19
|
||||
2.510 5.254E-19
|
||||
2.520 5.252E-19
|
||||
2.530 5.251E-19
|
||||
2.540 5.250E-19
|
||||
2.550 5.249E-19
|
||||
2.560 5.248E-19
|
||||
2.570 5.247E-19
|
||||
2.580 5.245E-19
|
||||
2.590 5.244E-19
|
||||
2.600 5.243E-19
|
||||
2.610 5.242E-19
|
||||
2.620 5.241E-19
|
||||
2.630 5.240E-19
|
||||
2.640 5.238E-19
|
||||
2.650 5.237E-19
|
||||
2.660 5.236E-19
|
||||
2.670 5.235E-19
|
||||
2.680 5.234E-19
|
||||
2.690 5.233E-19
|
||||
2.700 5.232E-19
|
||||
2.710 5.231E-19
|
||||
2.720 5.230E-19
|
||||
2.730 5.228E-19
|
||||
2.740 5.227E-19
|
||||
2.750 5.226E-19
|
||||
2.760 5.225E-19
|
||||
2.770 5.224E-19
|
||||
2.780 5.223E-19
|
||||
2.790 5.222E-19
|
||||
2.800 5.221E-19
|
||||
2.810 5.220E-19
|
||||
2.820 5.219E-19
|
||||
2.830 5.218E-19
|
||||
2.840 5.217E-19
|
||||
2.850 5.216E-19
|
||||
2.860 5.214E-19
|
||||
2.870 5.213E-19
|
||||
2.880 5.212E-19
|
||||
2.890 5.211E-19
|
||||
2.900 5.210E-19
|
||||
2.910 5.209E-19
|
||||
2.920 5.208E-19
|
||||
2.930 5.207E-19
|
||||
2.940 5.206E-19
|
||||
2.950 5.205E-19
|
||||
2.960 5.204E-19
|
||||
2.970 5.203E-19
|
||||
2.980 5.202E-19
|
||||
2.990 5.201E-19
|
||||
3.000 5.200E-19
|
||||
302
data/collisions/EL_Ar-Ar.dat
Normal file
302
data/collisions/EL_Ar-Ar.dat
Normal file
|
|
@ -0,0 +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
|
||||
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
|
||||
213
data/collisions/RE_e-Ar+.dat
Normal file
213
data/collisions/RE_e-Ar+.dat
Normal file
|
|
@ -0,0 +1,213 @@
|
|||
#Safdar Ali, Electron-ion recombination datafor plasma applications
|
||||
#Relative energy (eV) Cross Section (m^2)
|
||||
0.1 7.69985669590087E-19
|
||||
0.5 1.53997083398333E-19
|
||||
1.0 7.69985101243873E-20
|
||||
1.5 5.13323190330893E-20
|
||||
2.0 3.84992234874532E-20
|
||||
2.5 3.07993661600819E-20
|
||||
3.0 2.5666127941843E-20
|
||||
3.5 2.19995292145369E-20
|
||||
4.0 1.92495801690638E-20
|
||||
4.5 1.71107309114794E-20
|
||||
5.0 1.5399651505417E-20
|
||||
5.5 1.39996774459162E-20
|
||||
6.0 1.28330323963364E-20
|
||||
6.5 1.18458712005422E-20
|
||||
7.0 1.09997330327222E-20
|
||||
7.5 1.02664132872817E-20
|
||||
8.0 9.6247585100245E-21
|
||||
8.5 9.05859253009472E-21
|
||||
9.0 8.55533388127113E-21
|
||||
9.5 8.10504982706327E-21
|
||||
10.0 7.69979417827879E-21
|
||||
10.5 7.33313430557148E-21
|
||||
11.0 6.9998071485672E-21
|
||||
11.5 6.69546496173945E-21
|
||||
12.0 6.41648462381617E-21
|
||||
12.5 6.15982271292883E-21
|
||||
13.0 5.92290402595789E-21
|
||||
13.5 5.70353487135708E-21
|
||||
14.0 5.49983494208675E-21
|
||||
14.5 5.31018328380238E-21
|
||||
15.0 5.13317506940535E-21
|
||||
15.5 4.9675867398098E-21
|
||||
16.0 4.81234768081559E-21
|
||||
16.5 4.66651704964078E-21
|
||||
17.0 4.52926469088954E-21
|
||||
17.5 4.39985532406842E-21
|
||||
18.0 4.27763536651659E-21
|
||||
18.5 4.16202189315814E-21
|
||||
19.0 4.0524933394515E-21
|
||||
19.5 3.94858163465422E-21
|
||||
20.0 3.8498655150981E-21
|
||||
20.5 3.75596481600939E-21
|
||||
21.0 3.66653557878329E-21
|
||||
21.5 3.58126584096425E-21
|
||||
22.0 3.49987200031999E-21
|
||||
22.5 3.42209566370551E-21
|
||||
23.0 3.34770090694496E-21
|
||||
23.5 3.27647188451574E-21
|
||||
24.0 3.20821073802216E-21
|
||||
24.5 3.14273576077427E-21
|
||||
25.0 3.07987978261733E-21
|
||||
25.5 3.01948874478129E-21
|
||||
26.0 2.9614204391707E-21
|
||||
26.5 2.90554339037659E-21
|
||||
27.0 2.85173586190914E-21
|
||||
27.5 2.79988497084145E-21
|
||||
28.0 2.74988589731282E-21
|
||||
28.5 2.70164117724224E-21
|
||||
29.0 2.65506006820947E-21
|
||||
29.5 2.61005797982276E-21
|
||||
30.0 2.5665559610498E-21
|
||||
30.5 2.52448023797516E-21
|
||||
31.0 2.48376179629086E-21
|
||||
31.5 2.44433600354975E-21
|
||||
32.0 2.4061422668326E-21
|
||||
32.5 2.36912372201524E-21
|
||||
33.0 2.33322695128404E-21
|
||||
33.5 2.29840172594857E-21
|
||||
34.0 2.26460077194726E-21
|
||||
34.5 2.23177955574384E-21
|
||||
35.0 2.19989608857554E-21
|
||||
35.5 2.1689107472437E-21
|
||||
36.0 2.13878610983846E-21
|
||||
36.5 2.10948680496559E-21
|
||||
37.0 2.08097937319808E-21
|
||||
37.5 2.05323213961173E-21
|
||||
38.0 2.0262150963836E-21
|
||||
38.5 1.99989979453869E-21
|
||||
39.0 1.9742592440238E-21
|
||||
39.5 1.94926782137071E-21
|
||||
40.0 1.92490118428458E-21
|
||||
40.5 1.90113619255925E-21
|
||||
41.0 1.87795083477907E-21
|
||||
41.5 1.85532416031952E-21
|
||||
42.0 1.83323621620486E-21
|
||||
42.5 1.81166798842292E-21
|
||||
43.0 1.79060134733418E-21
|
||||
43.5 1.77001899684578E-21
|
||||
44.0 1.74990442705089E-21
|
||||
44.5 1.73024187006096E-21
|
||||
45.0 1.71101625878249E-21
|
||||
45.5 1.69221318841181E-21
|
||||
46.0 1.67381888044106E-21
|
||||
46.5 1.65582014898636E-21
|
||||
47.0 1.63820436926529E-21
|
||||
47.5 1.62095944806521E-21
|
||||
48.0 1.60407379605734E-21
|
||||
48.5 1.58753630182336E-21
|
||||
49.0 1.57133630747223E-21
|
||||
49.5 1.55546358573478E-21
|
||||
50.0 1.5399083184326E-21
|
||||
50.5 1.52466107622603E-21
|
||||
51.0 1.50971279955342E-21
|
||||
51.5 1.49505478068078E-21
|
||||
52.0 1.48067864678697E-21
|
||||
52.5 1.46657634401543E-21
|
||||
53.0 1.45274012242875E-21
|
||||
53.5 1.43916252180679E-21
|
||||
54.0 1.42583635823387E-21
|
||||
54.5 1.41275471142422E-21
|
||||
55.0 1.39991091273886E-21
|
||||
55.5 1.3872985338501E-21
|
||||
56.0 1.37491137601338E-21
|
||||
56.5 1.36274345990875E-21
|
||||
57.0 1.35078901601694E-21
|
||||
57.5 1.3390424754976E-21
|
||||
58.0 1.32749846153939E-21
|
||||
58.5 1.31615178115356E-21
|
||||
59.0 1.30499741738487E-21
|
||||
59.5 1.29403052191526E-21
|
||||
60.0 1.28324640803723E-21
|
||||
60.5 1.2726405439758E-21
|
||||
61.0 1.26220854653875E-21
|
||||
61.5 1.25194617507671E-21
|
||||
62.0 1.24184932573544E-21
|
||||
62.5 1.23191402598405E-21
|
||||
63.0 1.22213642940372E-21
|
||||
63.5 1.21251281072271E-21
|
||||
64.0 1.20303956108399E-21
|
||||
64.5 1.19371318353309E-21
|
||||
65.0 1.18453028871415E-21
|
||||
65.5 1.17548759076306E-21
|
||||
66.0 1.16658190338739E-21
|
||||
66.5 1.15781013612301E-21
|
||||
67.0 1.14916929075849E-21
|
||||
67.5 1.14065645791827E-21
|
||||
68.0 1.13226881379667E-21
|
||||
68.5 1.12400361703489E-21
|
||||
69.0 1.1158582057338E-21
|
||||
69.5 1.10782999459569E-21
|
||||
70.0 1.09991647218849E-21
|
||||
70.5 1.09211519832644E-21
|
||||
71.0 1.08442380156141E-21
|
||||
71.5 1.07683997677947E-21
|
||||
72.0 1.06936148289763E-21
|
||||
72.5 1.0619861406559E-21
|
||||
73.0 1.05471183050003E-21
|
||||
73.5 1.04753649055071E-21
|
||||
74.0 1.04045811465512E-21
|
||||
74.5 1.03347475051685E-21
|
||||
75.0 1.02658449790078E-21
|
||||
75.5 1.0197855069091E-21
|
||||
76.0 1.01307597632555E-21
|
||||
76.5 1.00645415202448E-21
|
||||
77.0 9.99918325441935E-22
|
||||
77.5 9.93466832105953E-22
|
||||
78.0 9.87098050223329E-22
|
||||
78.5 9.8081039932043E-22
|
||||
79.0 9.74602338935618E-22
|
||||
79.5 9.68472367361003E-22
|
||||
80.0 9.62419020431394E-22
|
||||
80.5 9.56440870358376E-22
|
||||
81.0 9.50536524607566E-22
|
||||
81.5 9.44704624817207E-22
|
||||
82.0 9.38943845756314E-22
|
||||
82.5 9.33252894320715E-22
|
||||
83.0 9.27630508565376E-22
|
||||
83.5 9.22075456771488E-22
|
||||
84.0 9.16586536546883E-22
|
||||
84.5 9.11162573958379E-22
|
||||
85.0 9.0580242269475E-22
|
||||
85.5 9.00504963259068E-22
|
||||
86.0 8.95269102189219E-22
|
||||
86.5 8.90093771305448E-22
|
||||
87.0 8.84977926983857E-22
|
||||
87.5 8.79920549454808E-22
|
||||
88.0 8.74920642125247E-22
|
||||
88.5 8.69977230923997E-22
|
||||
89.0 8.65089363669119E-22
|
||||
89.5 8.60256109456484E-22
|
||||
90.0 8.55476558068722E-22
|
||||
90.5 8.50749819403762E-22
|
||||
91.0 8.46075022922218E-22
|
||||
91.5 8.41451317112887E-22
|
||||
92.0 8.36877868975678E-22
|
||||
92.5 8.32353863521313E-22
|
||||
93.0 8.27878503287165E-22
|
||||
93.5 8.23451007868634E-22
|
||||
94.0 8.19070613465468E-22
|
||||
94.5 8.14736572442504E-22
|
||||
95.0 8.10448152904265E-22
|
||||
95.5 8.06204638282927E-22
|
||||
96.0 8.02005326939165E-22
|
||||
96.5 7.978495317754E-22
|
||||
97.0 7.93736579861012E-22
|
||||
97.5 7.89665812069088E-22
|
||||
98.0 7.85636582724286E-22
|
||||
98.5 7.81648259261419E-22
|
||||
99.0 7.77700221894398E-22
|
||||
99.5 7.73791863295145E-22
|
||||
100.0 7.69922588282143E-22
|
||||
100.5 7.66091813518285E-22
|
||||
101.0 7.62298967217692E-22
|
||||
101.5 7.58543488861201E-22
|
||||
102.0 7.54824828920225E-22
|
||||
102.5 7.51142448588681E-22
|
||||
103.0 7.47495819522743E-22
|
||||
103.5 7.43884423588128E-22
|
||||
104.0 7.4030775261467E-22
|
||||
104.5 7.36765308157954E-22
|
||||
105.0 7.33256601267738E-22
|
||||
Binary file not shown.
21
doc/user-manual/.gitignore
vendored
Normal file
21
doc/user-manual/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
*.dvi
|
||||
*.log
|
||||
*.pdf
|
||||
*.synctex.gz
|
||||
*.toc
|
||||
*.aux
|
||||
*.ps
|
||||
bibliography.bib.bak
|
||||
*.bbl
|
||||
*.blg
|
||||
*.out
|
||||
fpakc_UserManual-blx.bib
|
||||
*.acn
|
||||
*.acr
|
||||
*.alg
|
||||
*.bcf
|
||||
*.glg
|
||||
*.glo
|
||||
*.gls
|
||||
*.ist
|
||||
fpakc_UserManual.run.xml
|
||||
44
doc/user-manual/bibliography.bib
Normal file
44
doc/user-manual/bibliography.bib
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
% Encoding: UTF-8
|
||||
|
||||
@InProceedings{boris1970relativistic,
|
||||
author = {Boris, Jay P},
|
||||
booktitle = {Proc. Fourth Conf. Num. Sim. Plasmas},
|
||||
title = {Relativistic plasma simulation-optimization of a hybrid code},
|
||||
year = {1970},
|
||||
pages = {3--67},
|
||||
}
|
||||
|
||||
@Misc{gfortranURL,
|
||||
author = {GNU Project},
|
||||
title = {gfortran - the GNU Fortran compiler},
|
||||
howpublished = {\url{https://gcc.gnu.org/wiki/GFortran}},
|
||||
}
|
||||
|
||||
@Misc{ifortURL,
|
||||
author = {Intel\textsuperscript{\textregistered}},
|
||||
title = {Intel\textsuperscript{\textregistered} Fortran Compiler},
|
||||
howpublished = {\url{https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/fortran-compiler.html}},
|
||||
}
|
||||
|
||||
@Misc{openblasURL,
|
||||
title = {OpenBLAS, an optimized BLAS library},
|
||||
howpublished = {\url{https://www.openblas.net/}},
|
||||
}
|
||||
|
||||
@Misc{jsonfortranURL,
|
||||
title = {JSON-Fortran},
|
||||
howpublished = {\url{https://github.com/jacobwilliams/json-fortran}},
|
||||
}
|
||||
|
||||
@Misc{jsonURL,
|
||||
title = {JSON, JavaScript Object Notation},
|
||||
howpublished = {\url{https://www.json.org/json-en.html}},
|
||||
}
|
||||
|
||||
@Misc{gmshURL,
|
||||
author = {Christophe Geuzaine and Jean-François Remacle},
|
||||
title = {Gmsh},
|
||||
howpublished = {\url{https://gmsh.info/}},
|
||||
}
|
||||
|
||||
@Comment{jabref-meta: databaseType:bibtex;}
|
||||
177
doc/user-manual/figures/logos/PPartiC.eps
Normal file
177
doc/user-manual/figures/logos/PPartiC.eps
Normal file
|
|
@ -0,0 +1,177 @@
|
|||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%%Creator: cairo 1.16.0 (https://cairographics.org)
|
||||
%%CreationDate: Wed Oct 07 12:01:13 2020
|
||||
%%Pages: 1
|
||||
%%DocumentData: Clean7Bit
|
||||
%%LanguageLevel: 2
|
||||
%%BoundingBox: 6 7 205 57
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
50 dict begin
|
||||
/q { gsave } bind def
|
||||
/Q { grestore } bind def
|
||||
/cm { 6 array astore concat } bind def
|
||||
/w { setlinewidth } bind def
|
||||
/J { setlinecap } bind def
|
||||
/j { setlinejoin } bind def
|
||||
/M { setmiterlimit } bind def
|
||||
/d { setdash } bind def
|
||||
/m { moveto } bind def
|
||||
/l { lineto } bind def
|
||||
/c { curveto } bind def
|
||||
/h { closepath } bind def
|
||||
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
|
||||
0 exch rlineto 0 rlineto closepath } bind def
|
||||
/S { stroke } bind def
|
||||
/f { fill } bind def
|
||||
/f* { eofill } bind def
|
||||
/n { newpath } bind def
|
||||
/W { clip } bind def
|
||||
/W* { eoclip } bind def
|
||||
/BT { } bind def
|
||||
/ET { } bind def
|
||||
/BDC { mark 3 1 roll /BDC pdfmark } bind def
|
||||
/EMC { mark /EMC pdfmark } bind def
|
||||
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
|
||||
/Tj { show currentpoint cairo_store_point } bind def
|
||||
/TJ {
|
||||
{
|
||||
dup
|
||||
type /stringtype eq
|
||||
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
|
||||
} forall
|
||||
currentpoint cairo_store_point
|
||||
} bind def
|
||||
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
|
||||
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
|
||||
/Tf { pop /cairo_font exch def /cairo_font_matrix where
|
||||
{ pop cairo_selectfont } if } bind def
|
||||
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
|
||||
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
|
||||
/cairo_font where { pop cairo_selectfont } if } bind def
|
||||
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
|
||||
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
|
||||
/g { setgray } bind def
|
||||
/rg { setrgbcolor } bind def
|
||||
/d1 { setcachedevice } bind def
|
||||
/cairo_data_source {
|
||||
CairoDataIndex CairoData length lt
|
||||
{ CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def }
|
||||
{ () } ifelse
|
||||
} def
|
||||
/cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def
|
||||
/cairo_image { image cairo_flush_ascii85_file } def
|
||||
/cairo_imagemask { imagemask cairo_flush_ascii85_file } def
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
%%EndSetup
|
||||
%%Page: 1 1
|
||||
%%BeginPageSetup
|
||||
%%PageBoundingBox: 6 7 205 57
|
||||
%%EndPageSetup
|
||||
q 6 7 199 50 rectclip
|
||||
1 0 0 -1 0 71 cm q
|
||||
0 g
|
||||
49.766 27.305 m 49.766 29.898 49.078 31.813 47.703 33.039 c 46.328 34.27
|
||||
44.297 34.883 41.609 34.883 c 36.625 34.883 l 36.625 47.945 l 32.438 47.945
|
||||
l 32.438 14.352 l 41.516 14.352 l 44.234 14.352 46.285 14.953 47.672 16.148
|
||||
c 49.066 17.348 49.766 19.242 49.766 21.836 c h
|
||||
45.594 21.398 m 45.594 20.18 45.313 19.301 44.75 18.758 c 44.195 18.219
|
||||
43.313 17.945 42.094 17.945 c 36.625 17.945 l 36.625 31.289 l 42.094 31.289
|
||||
l 43.313 31.289 44.195 31.008 44.75 30.445 c 45.313 29.883 45.594 29 45.594
|
||||
27.789 c h
|
||||
45.594 21.398 m f
|
||||
75.641 27.305 m 75.641 29.898 74.953 31.813 73.578 33.039 c 72.203 34.27
|
||||
70.172 34.883 67.484 34.883 c 62.5 34.883 l 62.5 47.945 l 58.313 47.945
|
||||
l 58.313 14.352 l 67.391 14.352 l 70.109 14.352 72.16 14.953 73.547 16.148
|
||||
c 74.941 17.348 75.641 19.242 75.641 21.836 c h
|
||||
71.469 21.398 m 71.469 20.18 71.188 19.301 70.625 18.758 c 70.07 18.219
|
||||
69.188 17.945 67.969 17.945 c 62.5 17.945 l 62.5 31.289 l 67.969 31.289
|
||||
l 69.188 31.289 70.07 31.008 70.625 30.445 c 71.188 29.883 71.469 29 71.469
|
||||
27.789 c h
|
||||
71.469 21.398 m f
|
||||
99.891 47.945 m 99.473 47.945 99.016 47.82 98.516 47.57 c 98.023 47.313
|
||||
97.602 46.957 97.25 46.508 c 96.508 47.469 95.535 47.945 94.328 47.945
|
||||
c 90.047 47.945 l 87.617 47.945 85.852 47.461 84.75 46.492 c 83.645 45.516
|
||||
83.094 43.836 83.094 41.461 c 83.094 40.508 l 83.094 35.551 85.426 33.07
|
||||
90.094 33.07 c 96.047 33.07 l 96.047 30.664 l 96.047 29.676 95.742 28.91
|
||||
95.141 28.367 c 94.535 27.816 93.641 27.539 92.453 27.539 c 85.016 27.539
|
||||
l 85.016 23.945 l 91.969 23.945 l 94.75 23.945 96.801 24.555 98.125 25.773
|
||||
c 99.457 26.984 100.125 28.938 100.125 31.633 c 100.125 43.148 l 100.125
|
||||
43.629 100.305 43.988 100.672 44.227 c 101.047 44.469 101.664 44.586 102.531
|
||||
44.586 c 102.531 47.945 l h
|
||||
93.844 44.352 m 94.801 44.352 95.406 44.129 95.656 43.68 c 95.914 43.234
|
||||
96.047 42.656 96.047 41.945 c 96.047 36.664 l 90.047 36.664 l 89.211 36.664
|
||||
88.523 36.941 87.984 37.492 c 87.441 38.035 87.172 38.719 87.172 39.539
|
||||
c 87.172 41.945 l 87.172 42.781 87.363 43.391 87.75 43.773 c 88.133 44.16
|
||||
88.742 44.352 89.578 44.352 c h
|
||||
93.844 44.352 m f
|
||||
114.047 44.352 m 114.047 27.539 l 110.547 27.539 l 110.547 23.945 l 117.891
|
||||
23.945 l 117.891 25.242 l 118.953 24.379 120.234 23.945 121.734 23.945
|
||||
c 126.672 23.945 l 126.672 27.789 l 121.25 27.789 l 120.227 27.789 119.461
|
||||
28.117 118.953 28.773 c 118.441 29.43 118.172 30.094 118.141 30.758 c 118.141
|
||||
44.352 l 123.359 44.352 l 123.359 47.945 l 110.547 47.945 l 110.547 44.352
|
||||
l h
|
||||
114.047 44.352 m f
|
||||
146.359 47.945 m 144.723 47.945 143.473 47.422 142.609 46.367 c 141.754
|
||||
45.305 141.328 43.91 141.328 42.18 c 141.328 27.539 l 136.766 27.539 l
|
||||
136.766 23.945 l 141.328 23.945 l 141.328 18.18 l 145.406 18.18 l 145.406
|
||||
23.945 l 152.406 23.945 l 152.406 27.539 l 145.406 27.539 l 145.406 42.43
|
||||
l 145.406 43.129 145.578 43.625 145.922 43.914 c 146.273 44.207 146.82
|
||||
44.352 147.563 44.352 c 152.406 44.352 l 152.406 47.945 l h
|
||||
146.359 47.945 m f
|
||||
172.719 14.352 m 172.719 18.664 l 168.156 18.664 l 168.156 14.352 l h
|
||||
161.344 27.539 m 161.344 23.945 l 172.469 23.945 l 172.469 44.352 l 179.578
|
||||
44.352 l 179.578 47.945 l 168.391 47.945 l 168.391 27.539 l h
|
||||
161.344 27.539 m f
|
||||
197.25 47.945 m 194.469 47.945 192.332 47.27 190.844 45.914 c 189.352 44.551
|
||||
188.609 42.508 188.609 39.789 c 188.609 22.508 l 188.609 19.789 189.352
|
||||
17.754 190.844 16.398 c 192.332 15.035 194.469 14.352 197.25 14.352 c 204.063
|
||||
14.352 l 204.063 17.992 l 196.766 17.992 l 195.578 17.992 194.613 18.348
|
||||
193.875 19.055 c 193.145 19.754 192.781 20.598 192.781 21.586 c 192.781
|
||||
40.695 l 192.781 41.688 193.145 42.535 193.875 43.242 c 194.613 43.953
|
||||
195.578 44.305 196.766 44.305 c 204.063 44.305 l 204.063 47.945 l h
|
||||
197.25 47.945 m f
|
||||
0.831373 0 0 rg
|
||||
17.277 53.707 m 17.277 56.629 14.91 58.996 11.988 58.996 c 9.066 58.996
|
||||
6.695 56.629 6.695 53.707 c 6.695 50.785 9.066 48.414 11.988 48.414 c 14.91
|
||||
48.414 17.277 50.785 17.277 53.707 c f
|
||||
0 0 0.501961 rg
|
||||
23.906 61.84 m 23.906 62.969 22.992 63.883 21.863 63.883 c 20.734 63.883
|
||||
19.82 62.969 19.82 61.84 c 19.82 60.715 20.734 59.801 21.863 59.801 c 22.992
|
||||
59.801 23.906 60.715 23.906 61.84 c f
|
||||
0.596078 g
|
||||
0.751181 w
|
||||
0 J
|
||||
0 j
|
||||
[] 0.0 d
|
||||
4 M q 1 0 0 1 0 0 cm
|
||||
16.941 50.758 m 29.465 47.813 l S Q
|
||||
27.848 47.258 m 30.453 47.578 l 28.262 49.023 l 28.523 48.41 28.355 47.699
|
||||
27.848 47.258 c h
|
||||
27.848 47.258 m f*
|
||||
0.137102 w
|
||||
1 j
|
||||
q -1 0.235294 -0.235294 -1 0 0 cm
|
||||
-15.851 -50.987 m -18.248 -51.872 l -15.849 -52.753 l -16.234 -52.23 -16.233
|
||||
-51.519 -15.851 -50.987 c h
|
||||
-15.851 -50.987 m S Q
|
||||
0.6 g
|
||||
0.751178 w
|
||||
0 j
|
||||
q 1 0 0 1 0 0 cm
|
||||
23.234 59.613 m 30.398 49.301 l S Q
|
||||
28.824 49.969 m 30.973 48.461 l 30.313 51 l 30.098 50.375 29.496 49.957
|
||||
28.824 49.969 c h
|
||||
28.824 49.969 m f*
|
||||
0.115667 w
|
||||
1 j
|
||||
q -0.694805 1 -1 -0.694805 0 0 cm
|
||||
20.193 -42.855 m 18.17 -43.597 l 20.191 -44.342 l 19.87 -43.904 19.87 -43.302
|
||||
20.193 -42.855 c h
|
||||
20.193 -42.855 m S Q
|
||||
Q Q
|
||||
showpage
|
||||
%%Trailer
|
||||
end
|
||||
%%EOF
|
||||
159
doc/user-manual/figures/logos/PPartiC.svg
Normal file
159
doc/user-manual/figures/logos/PPartiC.svg
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="80mm"
|
||||
height="25mm"
|
||||
viewBox="0 0 80 25"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="PPartiC.svg">
|
||||
<defs
|
||||
id="defs2">
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mend"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="Arrow2Mend"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path881"
|
||||
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
|
||||
transform="scale(0.6) rotate(180) translate(0,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Send"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="Arrow2Send"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path887"
|
||||
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#989898;stroke-opacity:1;fill:#989898;fill-opacity:1"
|
||||
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
|
||||
transform="scale(0.3) rotate(180) translate(-2.3,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="Arrow1Mend"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path863"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||
transform="scale(0.4) rotate(180) translate(10,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path857"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||
transform="scale(0.8) rotate(180) translate(12.5,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="Arrow2Send-8"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow2Send">
|
||||
<path
|
||||
transform="matrix(-0.3,0,0,-0.3,0.69,0)"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
|
||||
id="path887-3" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.8"
|
||||
inkscape:cx="-108.81501"
|
||||
inkscape:cy="51.644646"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1378"
|
||||
inkscape:window-x="-9"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:16.9333px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||
x="9.921875"
|
||||
y="16.914433"
|
||||
id="text12"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan10"
|
||||
x="9.921875"
|
||||
y="16.914433"
|
||||
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.9333px;font-family:'Share Tech Mono';-inkscape-font-specification:'Share Tech Mono Italic';stroke-width:0.264583">PPartiC</tspan></text>
|
||||
<circle
|
||||
style="fill:#d40000;stroke-width:0.264583"
|
||||
id="path14"
|
||||
cx="4.2286086"
|
||||
cy="18.946056"
|
||||
r="1.8662573" />
|
||||
<circle
|
||||
style="fill:#000080;stroke-width:0.576413"
|
||||
id="path16"
|
||||
cx="7.7130766"
|
||||
cy="21.816313"
|
||||
r="0.7205171" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#989898;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Send)"
|
||||
d="M 5.9767484,17.906622 10.394345,16.867188"
|
||||
id="path18"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
id="path18-6"
|
||||
d="m 8.195956,21.029626 2.527716,-3.638021"
|
||||
style="fill:none;stroke:#999999;stroke-width:0.264999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Send-8)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.7 KiB |
294
doc/user-manual/figures/logos/fpakc.eps
Normal file
294
doc/user-manual/figures/logos/fpakc.eps
Normal file
|
|
@ -0,0 +1,294 @@
|
|||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%%Creator: cairo 1.16.0 (https://cairographics.org)
|
||||
%%CreationDate: Sat Nov 21 21:23:19 2020
|
||||
%%Pages: 1
|
||||
%%DocumentData: Clean7Bit
|
||||
%%LanguageLevel: 2
|
||||
%%BoundingBox: 8 15 191 78
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
50 dict begin
|
||||
/q { gsave } bind def
|
||||
/Q { grestore } bind def
|
||||
/cm { 6 array astore concat } bind def
|
||||
/w { setlinewidth } bind def
|
||||
/J { setlinecap } bind def
|
||||
/j { setlinejoin } bind def
|
||||
/M { setmiterlimit } bind def
|
||||
/d { setdash } bind def
|
||||
/m { moveto } bind def
|
||||
/l { lineto } bind def
|
||||
/c { curveto } bind def
|
||||
/h { closepath } bind def
|
||||
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
|
||||
0 exch rlineto 0 rlineto closepath } bind def
|
||||
/S { stroke } bind def
|
||||
/f { fill } bind def
|
||||
/f* { eofill } bind def
|
||||
/n { newpath } bind def
|
||||
/W { clip } bind def
|
||||
/W* { eoclip } bind def
|
||||
/BT { } bind def
|
||||
/ET { } bind def
|
||||
/BDC { mark 3 1 roll /BDC pdfmark } bind def
|
||||
/EMC { mark /EMC pdfmark } bind def
|
||||
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
|
||||
/Tj { show currentpoint cairo_store_point } bind def
|
||||
/TJ {
|
||||
{
|
||||
dup
|
||||
type /stringtype eq
|
||||
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
|
||||
} forall
|
||||
currentpoint cairo_store_point
|
||||
} bind def
|
||||
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
|
||||
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
|
||||
/Tf { pop /cairo_font exch def /cairo_font_matrix where
|
||||
{ pop cairo_selectfont } if } bind def
|
||||
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
|
||||
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
|
||||
/cairo_font where { pop cairo_selectfont } if } bind def
|
||||
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
|
||||
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
|
||||
/g { setgray } bind def
|
||||
/rg { setrgbcolor } bind def
|
||||
/d1 { setcachedevice } bind def
|
||||
/cairo_data_source {
|
||||
CairoDataIndex CairoData length lt
|
||||
{ CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def }
|
||||
{ () } ifelse
|
||||
} def
|
||||
/cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def
|
||||
/cairo_image { image cairo_flush_ascii85_file } def
|
||||
/cairo_imagemask { imagemask cairo_flush_ascii85_file } def
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
%%BeginResource: font f-0-0
|
||||
%!FontType1-1.1 f-0-0 1.0
|
||||
11 dict begin
|
||||
/FontName /f-0-0 def
|
||||
/PaintType 0 def
|
||||
/FontType 1 def
|
||||
/FontMatrix [0.001 0 0 0.001 0 0] readonly def
|
||||
/FontBBox {30 -240 640 735 } readonly def
|
||||
/Encoding 256 array
|
||||
0 1 255 {1 index exch /.notdef put} for
|
||||
dup 97 /a put
|
||||
dup 99 /c put
|
||||
dup 102 /f put
|
||||
dup 107 /k put
|
||||
dup 112 /p put
|
||||
readonly def
|
||||
currentdict end
|
||||
currentfile eexec
|
||||
f983ef0097ece636fb4a96c74d26ab84185f6dfa4a16a7a1c27bbe3f1156aea698df336d20b467
|
||||
b10e7f33846656653c5ac6962759d3056cbdb3190bac614b984bf5a132dc418192443014ba63de
|
||||
800d392b6fea026574bb2535fd7bb5338f35bf15a88ea328fdaa49670c7852e3d060f3c5d6b07f
|
||||
2ef6d0f22646c5d18e19a2ae3ee120390f6dd96f76dcf1e127de5e9299077a00c17c0d71e36e5b
|
||||
9d5ec58fceda57739a6a4214d4b79d6c48d2784b60c320323c7acddddf34db833cac0cf109f799
|
||||
69d114a330d372e5c978a66acc84e3fe5557f6240856a013ffaa0199444e5c5036f775eba4a5c5
|
||||
8cde66cf604b9aca2178431127b8a1ff7ed633a65c04600af5f573483112251caad907dcd8c61e
|
||||
23500065b1568be79a17d2379b63d656e8f7715cdfdf357f0e30d9ab91d113c88231d875d60897
|
||||
1dee27eb5da34a09d2f1b1a2e7ab8be1036393cd6ae53eff0d77f452e9bf45eccc9e4836ae77c5
|
||||
b74262fa43bfccfd9a147a18dcdae6e50cc518129a64f669a5fae69c8082dec571d7d01a4e9f05
|
||||
6d3e52de0ea004acdbd1b3bf9b19aa17f839a75365a77b7275442a967093ffdf1694a72f9978a2
|
||||
304ac331d401b48e3e62a3a92cd39516dd480f088980d1ad8993a1f6fefb07e0d86b6f0293bb41
|
||||
68ac465726267cacb7516a0e910fe67c2dbfef06d8b64a9811506650d32fa182a0adcab8e2e21e
|
||||
ca6d0dc81959c25ea2d3f7ccec13e0cb4a7ef88e97c36e74fa13010220d6835ebdcbabdb507d84
|
||||
239e5483e8a8b7a52d6e1ea4ea1f5e6bef4534710c4055265aaa86fb445f3b2fc62cfdd9e283d8
|
||||
8bd083d09f0971cde00f2031b58b304d5f647f02aabf7ba9062c33979cd391f692c72ee179b7a8
|
||||
16f9c9e668d20021bd2b6a0f0114898729c6228be2895a696aaef0ebbcc842e64d5e72cc1d9b75
|
||||
44314028987a238f8fc4c18a0db3546c9ea42194b6bbdc45587e36d605fe2b7608d9292ddc0c9b
|
||||
be3e420b36fd52f9aef97f13533e101f34d4f882848f4845a7a824da815a710abe11a1ec8363c1
|
||||
06daa18dffb5a451af7bf3b20d79a63c94e305050ea893b7a61cc8cfdb2e8a593a073c2021b298
|
||||
40863c70742ab1734e1d6811cf1927832da10f562f6895575b50044179588ddd9ec4c413f68c3e
|
||||
3063f9594dc94115af4d9d4d6259c2ebb5afa796131772de3d297a8cc04f7f10398acc9142b1aa
|
||||
2da9741ad314918ff1553dafe4751b4c0efdc9d6a549acbf1b3d209f6ebe8f6561d627f37bbce1
|
||||
7213b92bf332c27718ca9f868f1724cda0774ea4c3a5a2ba99509eb9128c456e5526f234dc3adc
|
||||
37ac61ead9dafba1b5d58a9443ceb92474535cd3515e9ce357420b230fe927e81f06b2363c70aa
|
||||
b6e00858a44972ad3f8759069235bba0b8ae2c65a59fe3ee5642f88a8550a765907eb4f9432ac4
|
||||
9e896114d0bc969bc2c14acd9a50c31e2095133b6b4fc11a1136dbba4b515eaabf0cba23ffe795
|
||||
3532a1fca89780a841f3a5fe2514d31fd6d41fbcb5b8caadd53c1fa7b06506963f37006269d0ae
|
||||
fc1d5d6bd7f6788544e01a77bdf35aaacdd41dd4fc16237759516c60ee9b57e7b56606e0fb5a25
|
||||
9e6cb3b2e22d3ac4db73c228fda1b327cace7cbe25594ea2a9445efeda7826604e3daf18ca977a
|
||||
9a2788cddcea95b5460b648c12bebc3c39302a07481fe18ceed4c9e12ac7d51f8104bd589cf9f6
|
||||
68371d3aa8510b5ff08c972b84fd4e48c356f9098b9d130085f59bc7e748ac59e9715060d29b38
|
||||
d828e479d8a85e0aaaa7b4ab34b547643b9c3417305b29be240ba9514cd4656079f26f378a6af9
|
||||
f7c694b1332a14baa203faa5c6745eea7c9cc0b3fc13f722ff941857d141db5665b32ada8b7831
|
||||
06f5c01361bd4b161450546ad8812d364b394658c4d3e1e2cf1daba58315787fbe299a27a387f2
|
||||
1545b5d4bc3022e6a6803e971698504ebc44c9f7c02256a5ae01c9fb3194baf05fb7c9cd862427
|
||||
95ca9cfd57ba76d6697fc842ee19ff35ce8b9d3299a185a4d28537058b5ea471a818f521183ffa
|
||||
4b171f078577707cfbb3b2c6de4659b6dbacb952a0213b0586bd5879096ec53540ad07463e5b25
|
||||
1a38d715de6a0bb6f92d3e20e1b25be654fe7aad2e057428b68e2d6830f2ee0ca384fb862813ba
|
||||
d48832ec89991fa5e6bf9d3135378f0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
cleartomark
|
||||
%%EndResource
|
||||
%%EndSetup
|
||||
%%Page: 1 1
|
||||
%%BeginPageSetup
|
||||
%%PageBoundingBox: 8 15 191 78
|
||||
%%EndPageSetup
|
||||
q 8 15 183 63 rectclip
|
||||
1 0 0 -1 0 86 cm q
|
||||
0 g
|
||||
BT
|
||||
56.000126 0 0 -56.000126 52.419201 52.791732 Tm
|
||||
/f-0-0 1 Tf
|
||||
[(fpak)10(c)]TJ
|
||||
ET
|
||||
0.749999 w
|
||||
0 J
|
||||
0 j
|
||||
[] 0.0 d
|
||||
4 M q 1 0 0 1 0 0 cm
|
||||
8.996 27.238 m 20.621 9.359 l 34.656 9.363 l 34.621 14.746 l 25.941 18.195
|
||||
l 17.332 33.629 l 17.41 55.852 l 9.316 55.785 l h
|
||||
8.996 27.238 m S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
21.156 69.262 m 21.156 38.387 l 40.305 38.387 l 40.305 53.027 l 27.457
|
||||
53.027 l 27.457 69.52 l h
|
||||
21.156 69.262 m S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
27.898 43.988 m 27.898 47.73 l 33.426 47.73 l 33.426 43.898 l h
|
||||
27.898 43.988 m S Q
|
||||
0.283465 w
|
||||
q 1 0 0 1 0 0 cm
|
||||
9.094 50.535 m 17.414 50.297 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
9.34 43.07 m 17.094 44.93 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
9.43 34.727 m 17.348 41.363 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
17.332 33.629 m 8.996 27.238 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
13.297 31.055 m 11.32 36.062 l 12.719 43.309 l 14.023 50.113 l 12.02 55.516
|
||||
l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
17.332 33.629 m 12.203 21.801 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
21.246 26.223 m 12.203 21.801 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
15.379 16.828 m 21.246 26.223 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
23.562 22.152 m 15.379 16.828 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
25.941 18.195 m 15.379 16.828 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
13.297 31.055 m 14.234 26.23 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
14.234 26.23 m 21.246 26.223 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
25.941 18.195 m 17.918 13.906 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
20.621 9.359 m 25.941 18.195 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
34.656 9.363 m 25.941 18.195 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
25.941 18.195 m 26.527 9.582 l S Q
|
||||
1 0 0 rg
|
||||
23.523 67.027 m 23.523 67.027 23.523 67.031 23.523 67.031 c 23.52 67.031
|
||||
23.52 67.027 23.52 67.027 c 23.52 67.027 23.52 67.027 23.523 67.027 c h
|
||||
23.523 67.027 m f
|
||||
0 g
|
||||
0.749999 w
|
||||
q 1 0 0 1 0 0 cm
|
||||
23.523 67.027 m 23.523 67.027 23.523 67.031 23.523 67.031 c 23.52 67.031
|
||||
23.52 67.027 23.52 67.027 c 23.52 67.027 23.52 67.027 23.523 67.027 c h
|
||||
23.523 67.027 m S Q
|
||||
1 0 0 rg
|
||||
24.66 63.297 m 24.66 63.297 24.656 63.297 24.656 63.297 c 24.656 63.293
|
||||
24.66 63.293 24.66 63.293 c 24.66 63.293 24.66 63.293 24.66 63.297 c h
|
||||
24.66 63.297 m f
|
||||
0 g
|
||||
q 1 0 0 1 0 0 cm
|
||||
24.66 63.297 m 24.66 63.297 24.656 63.297 24.656 63.297 c 24.656 63.293
|
||||
24.66 63.293 24.66 63.293 c 24.66 63.293 24.66 63.293 24.66 63.297 c h
|
||||
24.66 63.297 m S Q
|
||||
0 0 1 rg
|
||||
23.797 64.039 m 23.797 64.273 23.609 64.465 23.371 64.465 c 23.137 64.465
|
||||
22.949 64.273 22.949 64.039 c 22.949 63.805 23.137 63.613 23.371 63.613
|
||||
c 23.609 63.613 23.797 63.805 23.797 64.039 c h
|
||||
23.797 64.039 m f
|
||||
1 0 0 rg
|
||||
37.844 42.566 m 37.844 42.945 37.535 43.254 37.156 43.254 c 36.773 43.254
|
||||
36.465 42.945 36.465 42.566 c 36.465 42.184 36.773 41.875 37.156 41.875
|
||||
c 37.535 41.875 37.844 42.184 37.844 42.566 c h
|
||||
37.844 42.566 m f
|
||||
0 g
|
||||
0.141732 w
|
||||
q 1 0 0 1 0 0 cm
|
||||
35.977 42.188 m 31.02 39.777 l S Q
|
||||
31.531 40.027 m 31.91 39.895 l 30.895 39.715 l 31.66 40.406 l h
|
||||
31.531 40.027 m f*
|
||||
0.0679747 w
|
||||
q 1 0.486446 -0.486446 1 0 0 cm
|
||||
41.243 19.965 m 41.497 19.708 l 40.605 19.963 l 41.496 20.22 l h
|
||||
41.243 19.965 m S Q
|
||||
0.141732 w
|
||||
q 1 0 0 1 0 0 cm
|
||||
29.828 39.73 m 23.582 45.012 l S Q
|
||||
24.016 44.645 m 24.047 44.246 l 23.473 45.102 l 24.414 44.68 l h
|
||||
24.016 44.645 m f*
|
||||
0.0577315 w
|
||||
q 1 -0.845211 0.845211 1 0 0 cm
|
||||
-8.002 37.881 m -7.787 37.664 l -8.544 37.88 l -7.787 38.098 l h
|
||||
-8.002 37.881 m S Q
|
||||
0.141732 w
|
||||
q 1 0 0 1 0 0 cm
|
||||
23.82 46.355 m 25.027 51.145 l S Q
|
||||
24.887 50.594 m 24.543 50.387 l 25.059 51.281 l 25.094 50.25 l h
|
||||
24.887 50.594 m f*
|
||||
0.0732958 w
|
||||
q -0.252177 -1 1 -0.252177 0 0 cm
|
||||
-53.469 11.403 m -53.193 11.129 l -54.156 11.402 l -53.195 11.679 l h
|
||||
-53.469 11.403 m S Q
|
||||
0.141732 w
|
||||
q 1 0 0 1 0 0 cm
|
||||
23.453 63.156 m 26.16 58.465 l S Q
|
||||
25.875 58.953 m 25.98 59.34 l 26.23 58.34 l 25.488 59.059 l h
|
||||
25.875 58.953 m f*
|
||||
0.0654792 w
|
||||
q -0.576787 1 -1 -0.576787 0 0 cm
|
||||
33.038 -44.931 m 33.282 -45.177 l 32.424 -44.932 l 33.284 -44.686 l h
|
||||
33.038 -44.931 m S Q
|
||||
0.141732 w
|
||||
q 1 0 0 1 0 0 cm
|
||||
26.215 57.066 m 26.281 52.215 l S Q
|
||||
26.273 52.785 m 26.555 53.07 l 26.285 52.074 l 25.984 53.062 l h
|
||||
26.273 52.785 m f*
|
||||
0.0755832 w
|
||||
q -0.0137977 1 -1 -0.0137977 0 0 cm
|
||||
52.413 -26.997 m 52.694 -27.282 l 51.702 -26.999 l 52.694 -26.711 l h
|
||||
52.413 -26.997 m S Q
|
||||
0.141732 w
|
||||
q 1 0 0 1 0 0 cm
|
||||
26.5 50.707 m 34.664 48.957 l S Q
|
||||
34.109 49.074 m 33.895 49.41 l 34.805 48.926 l 33.773 48.859 l h
|
||||
34.109 49.074 m f*
|
||||
0.0739077 w
|
||||
q -1 0.214603 -0.214603 -1 0 0 cm
|
||||
-22.54 -53.911 m -22.266 -54.188 l -23.235 -53.912 l -22.263 -53.637 l
|
||||
h
|
||||
-22.54 -53.911 m S Q
|
||||
0.141732 w
|
||||
q 1 0 0 1 0 0 cm
|
||||
36.809 49.66 m 38.371 43.828 l S Q
|
||||
38.223 44.379 m 38.426 44.727 l 38.406 43.691 l 37.879 44.578 l h
|
||||
38.223 44.379 m f*
|
||||
0.0730145 w
|
||||
q -0.26796 1 -1 -0.26796 0 0 cm
|
||||
31.85 -46.757 m 32.123 -47.034 l 31.163 -46.757 l 32.122 -46.486 l h
|
||||
31.85 -46.757 m S Q
|
||||
Q Q
|
||||
showpage
|
||||
%%Trailer
|
||||
end
|
||||
%%EOF
|
||||
331
doc/user-manual/figures/logos/fpakc.svg
Normal file
331
doc/user-manual/figures/logos/fpakc.svg
Normal file
|
|
@ -0,0 +1,331 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="70mm"
|
||||
height="30mm"
|
||||
viewBox="0 0 69.999997 30.000002"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
sodipodi:docname="FPAKC.svg">
|
||||
<defs
|
||||
id="defs2">
|
||||
<marker
|
||||
style="overflow:visible;"
|
||||
id="Arrow1Mend"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
transform="scale(0.4) rotate(180) translate(10,0)"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
id="path913" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible;"
|
||||
id="Arrow1Lend"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
transform="scale(0.8) rotate(180) translate(12.5,0)"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
id="path907" />
|
||||
</marker>
|
||||
<rect
|
||||
x="3.7860464"
|
||||
y="3.0999611"
|
||||
width="63.507499"
|
||||
height="24.351779"
|
||||
id="rect12" />
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="Arrow1Mend-3"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path913-6" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="Arrow1Mend-5"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path913-3" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="Arrow1Mend-6"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path913-2" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="Arrow1Mend-1"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path913-27" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="Arrow1Mend-9"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path913-36" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="Arrow1Mend-2"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path913-61" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="Arrow1Mend-7"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
transform="matrix(-0.4,0,0,-0.4,-4,0)"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path913-9" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.6886206"
|
||||
inkscape:cx="106.77158"
|
||||
inkscape:cy="89.616578"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
units="mm"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1015"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="36"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
id="text10"
|
||||
style="font-style:normal;font-weight:normal;font-size:19.7556px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect12);fill:#000000;fill-opacity:1;stroke:none;"
|
||||
transform="translate(14.707173,-2.4509896)"><tspan
|
||||
x="3.7851562"
|
||||
y="21.07474"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:19.7556px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold'">fpakc</tspan></tspan></text>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 3.1729804,9.608885 4.1016578,-6.3077664 4.9514268,0.0018 -0.01253,1.8991752 -3.0624474,1.2171161 -3.037379,5.4436511 0.028466,7.839928 -2.8551595,-0.02263 z"
|
||||
id="path33" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="M 7.4633697,24.433471 V 13.541949 H 14.21897 v 5.164493 H 9.6864873 v 5.819075 z"
|
||||
id="path35" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 9.8420017,15.51818 v 1.320352 h 1.9500773 v -1.352325 z"
|
||||
id="path37" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 3.2083261,17.827837 6.1427947,17.74321"
|
||||
id="path39" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 3.2945559,15.194721 2.7350868,0.655961"
|
||||
id="path41" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 3.3269734,12.250098 2.7926774,2.342293"
|
||||
id="path43" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 6.1137085,11.862861 3.1729804,9.608885"
|
||||
id="path45" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 4.6901935,10.955262 -0.6964846,1.767319 0.493241,2.555186 0.4599465,2.401203 -0.7060603,1.905676"
|
||||
id="path47" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 6.1137085,11.862861 4.3050108,7.6915189"
|
||||
id="path49" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 7.4945353,9.2508325 4.3050108,7.6915189"
|
||||
id="path51" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 5.4251296,5.9372396 7.4945353,9.2508323"
|
||||
id="path53" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 8.3119022,7.8150153 5.4251296,5.9372396"
|
||||
id="path55" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 9.1510875,6.4192099 5.4251296,5.9372396"
|
||||
id="path57" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 4.6901935,10.955262 5.0213868,9.254038"
|
||||
id="path59" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 5.0213868,9.254038 7.4945353,9.250828"
|
||||
id="path61" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 9.1510875,6.4192099 6.3204965,4.9062245"
|
||||
id="path63" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 7.2746382,3.3011186 9.1510873,6.4192099"
|
||||
id="path65" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 12.226065,3.3029186 9.1510875,6.4192099"
|
||||
id="path67" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 9.1510873,6.4192099 9.3582383,3.3802534"
|
||||
id="path69" />
|
||||
<circle
|
||||
id="path894"
|
||||
style="fill:#ff0000;stroke:#000000;stroke-width:0.264583"
|
||||
cx="8.2981777"
|
||||
cy="23.645924"
|
||||
r="0.00058999716" />
|
||||
<circle
|
||||
id="path896"
|
||||
style="fill:#ff0000;stroke:#000000;stroke-width:0.264583"
|
||||
cx="8.6992016"
|
||||
cy="22.329088"
|
||||
r="0.00058999716" />
|
||||
<circle
|
||||
style="fill:#0000ff;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="path898"
|
||||
cx="8.2454529"
|
||||
cy="22.591675"
|
||||
r="0.14995678" />
|
||||
<circle
|
||||
style="fill:#ff0000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="path900"
|
||||
cx="13.107318"
|
||||
cy="15.016319"
|
||||
r="0.24327335" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
|
||||
d="M 12.692125,14.883263 10.943653,14.032725"
|
||||
id="path902" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.0499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-3)"
|
||||
d="M 10.522219,14.016626 8.3187793,15.878998"
|
||||
id="path902-7"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.0499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-5)"
|
||||
d="m 8.4027158,16.353504 0.4258407,1.688655"
|
||||
id="path902-5"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.0499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-6)"
|
||||
d="M 8.2730851,22.280302 9.2281395,20.624483"
|
||||
id="path902-9"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.0499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-1)"
|
||||
d="m 9.2478901,20.131094 0.023598,-1.710291"
|
||||
id="path902-0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.0499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-9)"
|
||||
d="M 9.3488198,17.888831 12.229152,17.270702"
|
||||
id="path902-06"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.0499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-7)"
|
||||
d="m 12.985376,17.518889 0.551109,-2.056684"
|
||||
id="path902-2"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
303
doc/user-manual/figures/scatteringQuad.eps
Normal file
303
doc/user-manual/figures/scatteringQuad.eps
Normal file
|
|
@ -0,0 +1,303 @@
|
|||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%%Creator: cairo 1.16.0 (https://cairographics.org)
|
||||
%%CreationDate: Thu Oct 08 15:41:58 2020
|
||||
%%Pages: 1
|
||||
%%DocumentData: Clean7Bit
|
||||
%%LanguageLevel: 2
|
||||
%%BoundingBox: 13 30 125 153
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
50 dict begin
|
||||
/q { gsave } bind def
|
||||
/Q { grestore } bind def
|
||||
/cm { 6 array astore concat } bind def
|
||||
/w { setlinewidth } bind def
|
||||
/J { setlinecap } bind def
|
||||
/j { setlinejoin } bind def
|
||||
/M { setmiterlimit } bind def
|
||||
/d { setdash } bind def
|
||||
/m { moveto } bind def
|
||||
/l { lineto } bind def
|
||||
/c { curveto } bind def
|
||||
/h { closepath } bind def
|
||||
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
|
||||
0 exch rlineto 0 rlineto closepath } bind def
|
||||
/S { stroke } bind def
|
||||
/f { fill } bind def
|
||||
/f* { eofill } bind def
|
||||
/n { newpath } bind def
|
||||
/W { clip } bind def
|
||||
/W* { eoclip } bind def
|
||||
/BT { } bind def
|
||||
/ET { } bind def
|
||||
/BDC { mark 3 1 roll /BDC pdfmark } bind def
|
||||
/EMC { mark /EMC pdfmark } bind def
|
||||
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
|
||||
/Tj { show currentpoint cairo_store_point } bind def
|
||||
/TJ {
|
||||
{
|
||||
dup
|
||||
type /stringtype eq
|
||||
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
|
||||
} forall
|
||||
currentpoint cairo_store_point
|
||||
} bind def
|
||||
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
|
||||
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
|
||||
/Tf { pop /cairo_font exch def /cairo_font_matrix where
|
||||
{ pop cairo_selectfont } if } bind def
|
||||
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
|
||||
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
|
||||
/cairo_font where { pop cairo_selectfont } if } bind def
|
||||
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
|
||||
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
|
||||
/g { setgray } bind def
|
||||
/rg { setrgbcolor } bind def
|
||||
/d1 { setcachedevice } bind def
|
||||
/cairo_data_source {
|
||||
CairoDataIndex CairoData length lt
|
||||
{ CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def }
|
||||
{ () } ifelse
|
||||
} def
|
||||
/cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def
|
||||
/cairo_image { image cairo_flush_ascii85_file } def
|
||||
/cairo_imagemask { imagemask cairo_flush_ascii85_file } def
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
%%EndSetup
|
||||
%%Page: 1 1
|
||||
%%BeginPageSetup
|
||||
%%PageBoundingBox: 13 30 125 153
|
||||
%%EndPageSetup
|
||||
q 13 30 112 123 rectclip
|
||||
1 0 0 -1 0 171 cm q
|
||||
0 0.784314 0 rg
|
||||
20.836 84.285 52.273 43.371 re f
|
||||
0 g
|
||||
0.751178 w
|
||||
0 J
|
||||
0 j
|
||||
[] 0.0 d
|
||||
4 M q 1 0 0 1 0 0 cm
|
||||
20.836 84.285 52.273 43.371 re S Q
|
||||
1 0.627451 0 rg
|
||||
73.109 84.285 43.184 43.371 re f
|
||||
0 g
|
||||
q 1 0 0 1 0 0 cm
|
||||
73.109 84.285 43.184 43.371 re S Q
|
||||
0.0431373 0 1 rg
|
||||
73.109 32.199 43.184 52.086 re f
|
||||
0 g
|
||||
q 1 0 0 1 0 0 cm
|
||||
73.109 32.199 43.184 52.086 re S Q
|
||||
1 0 0 rg
|
||||
20.836 32.199 52.273 52.086 re f
|
||||
0 g
|
||||
q 1 0 0 1 0 0 cm
|
||||
20.836 32.199 52.273 52.086 re S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
20.836 32.199 95.457 95.457 re S Q
|
||||
0 0 1 rg
|
||||
22.902 127.77 m 22.902 128.914 21.973 129.844 20.824 129.844 c 19.68 129.844
|
||||
18.75 128.914 18.75 127.77 c 18.75 126.621 19.68 125.691 20.824 125.691
|
||||
c 21.973 125.691 22.902 126.621 22.902 127.77 c h
|
||||
22.902 127.77 m f
|
||||
q 1 0 0 1 0 0 cm
|
||||
22.902 127.77 m 22.902 128.914 21.973 129.844 20.824 129.844 c 19.68 129.844
|
||||
18.75 128.914 18.75 127.77 c 18.75 126.621 19.68 125.691 20.824 125.691
|
||||
c 21.973 125.691 22.902 126.621 22.902 127.77 c h
|
||||
22.902 127.77 m S Q
|
||||
1 0 0 rg
|
||||
118.059 127.23 m 118.059 128.379 117.129 129.309 115.98 129.309 c 114.836
|
||||
129.309 113.906 128.379 113.906 127.23 c 113.906 126.086 114.836 125.156
|
||||
115.98 125.156 c 117.129 125.156 118.059 126.086 118.059 127.23 c f
|
||||
q 1 0 0 1 0 0 cm
|
||||
118.059 127.23 m 118.059 128.379 117.129 129.309 115.98 129.309 c 114.836
|
||||
129.309 113.906 128.379 113.906 127.23 c 113.906 126.086 114.836 125.156
|
||||
115.98 125.156 c 117.129 125.156 118.059 126.086 118.059 127.23 c S Q
|
||||
0 0.784314 0 rg
|
||||
117.789 32.41 m 117.789 33.559 116.859 34.488 115.715 34.488 c 114.566
|
||||
34.488 113.637 33.559 113.637 32.41 c 113.637 31.266 114.566 30.336 115.715
|
||||
30.336 c 116.859 30.336 117.789 31.266 117.789 32.41 c f
|
||||
q 1 0 0 1 0 0 cm
|
||||
117.789 32.41 m 117.789 33.559 116.859 34.488 115.715 34.488 c 114.566
|
||||
34.488 113.637 33.559 113.637 32.41 c 113.637 31.266 114.566 30.336 115.715
|
||||
30.336 c 116.859 30.336 117.789 31.266 117.789 32.41 c S Q
|
||||
1 0.627451 0 rg
|
||||
23.238 32.41 m 23.238 33.559 22.309 34.488 21.16 34.488 c 20.016 34.488
|
||||
19.086 33.559 19.086 32.41 c 19.086 31.266 20.016 30.336 21.16 30.336 c
|
||||
22.309 30.336 23.238 31.266 23.238 32.41 c f
|
||||
q 1 0 0 1 0 0 cm
|
||||
23.238 32.41 m 23.238 33.559 22.309 34.488 21.16 34.488 c 20.016 34.488
|
||||
19.086 33.559 19.086 32.41 c 19.086 31.266 20.016 30.336 21.16 30.336 c
|
||||
22.309 30.336 23.238 31.266 23.238 32.41 c S Q
|
||||
0 g
|
||||
76.465 84.191 m 76.465 86.262 74.785 87.941 72.715 87.941 c 70.645 87.941
|
||||
68.965 86.262 68.965 84.191 c 68.965 82.121 70.645 80.441 72.715 80.441
|
||||
c 74.785 80.441 76.465 82.121 76.465 84.191 c h
|
||||
76.465 84.191 m f
|
||||
q 1 0 0 1 0 0 cm
|
||||
76.465 84.191 m 76.465 86.262 74.785 87.941 72.715 87.941 c 70.645 87.941
|
||||
68.965 86.262 68.965 84.191 c 68.965 82.121 70.645 80.441 72.715 80.441
|
||||
c 74.785 80.441 76.465 82.121 76.465 84.191 c h
|
||||
76.465 84.191 m S Q
|
||||
0.749999 w
|
||||
q 1 0 0 1 0 0 cm
|
||||
20.355 84.105 m 115.98 84.105 l S Q
|
||||
q 1 0 0 1 0 0 cm
|
||||
72.922 127.277 m 72.922 32.008 l S Q
|
||||
14.742 139.539 m 16.68 139.539 l 16.68 132.867 l 14.57 133.289 l 14.57
|
||||
132.211 l 16.664 131.789 l 17.852 131.789 l 17.852 139.539 l 19.789 139.539
|
||||
l 19.789 140.539 l 14.742 140.539 l h
|
||||
14.742 139.539 m f
|
||||
120.676 136.695 m 124.816 136.695 l 124.816 137.695 l 119.254 137.695 l
|
||||
119.254 136.695 l 119.699 136.238 120.309 135.617 121.082 134.836 c 121.863
|
||||
134.047 122.352 133.535 122.551 133.305 c 122.934 132.891 123.199 132.535
|
||||
123.348 132.242 c 123.504 131.941 123.582 131.648 123.582 131.367 c 123.582
|
||||
130.898 123.414 130.52 123.082 130.227 c 122.758 129.938 122.336 129.789
|
||||
121.816 129.789 c 121.441 129.789 121.043 129.852 120.629 129.977 c 120.223
|
||||
130.102 119.785 130.301 119.316 130.57 c 119.316 129.367 l 119.793 129.18
|
||||
120.238 129.039 120.645 128.945 c 121.059 128.844 121.441 128.789 121.785
|
||||
128.789 c 122.691 128.789 123.414 129.02 123.957 129.477 c 124.496 129.926
|
||||
124.77 130.531 124.77 131.289 c 124.77 131.645 124.699 131.984 124.566
|
||||
132.305 c 124.43 132.629 124.184 133.008 123.832 133.445 c 123.727 133.563
|
||||
123.414 133.891 122.895 134.43 c 122.371 134.973 121.633 135.727 120.676
|
||||
136.695 c h
|
||||
120.676 136.695 m f
|
||||
122.875 24.07 m 123.438 24.195 123.875 24.453 124.188 24.836 c 124.508
|
||||
25.211 124.672 25.68 124.672 26.242 c 124.672 27.109 124.375 27.781 123.781
|
||||
28.258 c 123.188 28.727 122.344 28.961 121.25 28.961 c 120.883 28.961 120.504
|
||||
28.922 120.109 28.852 c 119.723 28.781 119.328 28.672 118.922 28.523 c
|
||||
118.922 27.383 l 119.242 27.57 119.598 27.719 119.984 27.82 c 120.379 27.914
|
||||
120.789 27.961 121.219 27.961 c 121.957 27.961 122.52 27.816 122.906 27.523
|
||||
c 123.301 27.234 123.5 26.805 123.5 26.242 c 123.5 25.734 123.316 25.332
|
||||
122.953 25.039 c 122.586 24.75 122.086 24.602 121.453 24.602 c 120.422
|
||||
24.602 l 120.422 23.633 l 121.5 23.633 l 122.07 23.633 122.516 23.52 122.828
|
||||
23.289 c 123.141 23.051 123.297 22.711 123.297 22.273 c 123.297 21.828
|
||||
123.133 21.484 122.813 21.242 c 122.5 21.004 122.047 20.883 121.453 20.883
|
||||
c 121.117 20.883 120.766 20.922 120.391 20.992 c 120.023 21.055 119.617
|
||||
21.16 119.172 21.305 c 119.172 20.258 l 119.629 20.133 120.051 20.039 120.438
|
||||
19.977 c 120.832 19.914 121.203 19.883 121.547 19.883 c 122.453 19.883
|
||||
123.164 20.086 123.688 20.492 c 124.207 20.898 124.469 21.453 124.469 22.148
|
||||
c 124.469 22.641 124.328 23.051 124.047 23.383 c 123.773 23.719 123.383
|
||||
23.945 122.875 24.07 c h
|
||||
122.875 24.07 m f
|
||||
17.223 19.746 m 14.238 24.418 l 17.223 24.418 l h
|
||||
16.91 18.715 m 18.41 18.715 l 18.41 24.418 l 19.66 24.418 l 19.66 25.402
|
||||
l 18.41 25.402 l 18.41 27.465 l 17.223 27.465 l 17.223 25.402 l 13.285
|
||||
25.402 l 13.285 24.262 l h
|
||||
16.91 18.715 m f
|
||||
39.906 47.727 m 38.297 52.07 l 41.516 52.07 l h
|
||||
39.234 46.555 m 40.578 46.555 l 43.906 55.305 l 42.672 55.305 l 41.875
|
||||
53.055 l 37.938 53.055 l 37.141 55.305 l 35.891 55.305 l h
|
||||
39.234 46.555 m f
|
||||
45.5 57.066 m 48.188 57.066 l 48.188 57.707 l 44.578 57.707 l 44.578 57.066
|
||||
l 44.867 56.766 45.266 56.359 45.766 55.848 c 46.266 55.34 46.582 55.012
|
||||
46.719 54.863 c 46.957 54.582 47.125 54.348 47.219 54.16 c 47.32 53.965
|
||||
47.375 53.777 47.375 53.598 c 47.375 53.297 47.266 53.051 47.047 52.863
|
||||
c 46.836 52.668 46.566 52.566 46.234 52.566 c 45.992 52.566 45.738 52.609
|
||||
45.469 52.691 c 45.195 52.777 44.91 52.902 44.609 53.066 c 44.609 52.301
|
||||
l 44.922 52.176 45.207 52.082 45.469 52.02 c 45.738 51.957 45.988 51.926
|
||||
46.219 51.926 c 46.801 51.926 47.27 52.074 47.625 52.363 c 47.977 52.656
|
||||
48.156 53.047 48.156 53.535 c 48.156 53.777 48.109 54 48.016 54.207 c 47.93
|
||||
54.418 47.773 54.66 47.547 54.941 c 47.484 55.016 47.281 55.23 46.938 55.582
|
||||
c 46.594 55.938 46.113 56.434 45.5 57.066 c h
|
||||
45.5 57.066 m f
|
||||
93.52 47.684 m 91.91 52.027 l 95.129 52.027 l h
|
||||
92.848 46.512 m 94.191 46.512 l 97.52 55.262 l 96.285 55.262 l 95.488 53.012
|
||||
l 91.551 53.012 l 90.754 55.262 l 89.504 55.262 l h
|
||||
92.848 46.512 m f
|
||||
98.582 57.02 m 99.832 57.02 l 99.832 52.676 l 98.473 52.957 l 98.473 52.254
|
||||
l 99.832 51.973 l 100.598 51.973 l 100.598 57.02 l 101.848 57.02 l 101.848
|
||||
57.66 l 98.582 57.66 l h
|
||||
98.582 57.02 m f
|
||||
45.98 98.063 m 44.371 102.406 l 47.59 102.406 l h
|
||||
45.309 96.891 m 46.652 96.891 l 49.98 105.641 l 48.746 105.641 l 47.949
|
||||
103.391 l 44.012 103.391 l 43.215 105.641 l 41.965 105.641 l h
|
||||
45.309 96.891 m f
|
||||
53.23 104.98 m 53.605 105.055 53.895 105.215 54.105 105.465 c 54.313 105.715
|
||||
54.418 106.023 54.418 106.387 c 54.418 106.949 54.219 107.387 53.824 107.699
|
||||
c 53.438 108.004 52.891 108.152 52.184 108.152 c 51.941 108.152 51.699
|
||||
108.125 51.449 108.074 c 51.199 108.035 50.938 107.965 50.668 107.871 c
|
||||
50.668 107.137 l 50.875 107.254 51.105 107.348 51.355 107.418 c 51.613 107.48
|
||||
51.887 107.512 52.168 107.512 c 52.645 107.512 53.012 107.418 53.262 107.23
|
||||
c 53.52 107.035 53.652 106.754 53.652 106.387 c 53.652 106.055 53.531 105.793
|
||||
53.293 105.605 c 53.051 105.418 52.723 105.324 52.309 105.324 c 51.652
|
||||
105.324 l 51.652 104.684 l 52.34 104.684 l 52.723 104.684 53.016 104.613
|
||||
53.215 104.465 c 53.41 104.309 53.512 104.09 53.512 103.809 c 53.512 103.52
|
||||
53.406 103.293 53.199 103.137 c 52.988 102.98 52.691 102.902 52.309 102.902
|
||||
c 52.098 102.902 51.875 102.93 51.637 102.98 c 51.395 103.023 51.129 103.09
|
||||
50.84 103.184 c 50.84 102.496 l 51.129 102.414 51.402 102.355 51.652 102.324
|
||||
c 51.91 102.285 52.156 102.262 52.387 102.262 c 52.969 102.262 53.426 102.398
|
||||
53.762 102.668 c 54.105 102.93 54.277 103.285 54.277 103.73 c 54.277 104.043
|
||||
54.184 104.309 53.996 104.527 c 53.816 104.746 53.563 104.898 53.23 104.98
|
||||
c h
|
||||
53.23 104.98 m f
|
||||
93.707 97.875 m 92.098 102.219 l 95.316 102.219 l h
|
||||
93.035 96.703 m 94.379 96.703 l 97.707 105.453 l 96.473 105.453 l 95.676
|
||||
103.203 l 91.738 103.203 l 90.941 105.453 l 89.691 105.453 l h
|
||||
93.035 96.703 m f
|
||||
100.754 102.836 m 98.801 105.867 l 100.754 105.867 l h
|
||||
100.551 102.164 m 101.52 102.164 l 101.52 105.867 l 102.316 105.867 l 102.316
|
||||
106.508 l 101.52 106.508 l 101.52 107.852 l 100.754 107.852 l 100.754 106.508
|
||||
l 98.176 106.508 l 98.176 105.773 l h
|
||||
100.551 102.164 m f
|
||||
27.949 77.395 m 27.949 80.301 l 27.043 80.301 l 27.043 72.754 l 27.949
|
||||
72.754 l 27.949 73.582 l 28.137 73.262 28.371 73.02 28.652 72.863 c 28.941
|
||||
72.707 29.293 72.629 29.699 72.629 c 30.363 72.629 30.902 72.895 31.309
|
||||
73.426 c 31.723 73.949 31.934 74.637 31.934 75.488 c 31.934 76.355 31.723
|
||||
77.051 31.309 77.582 c 30.902 78.105 30.363 78.363 29.699 78.363 c 29.293
|
||||
78.363 28.941 78.285 28.652 78.129 c 28.371 77.973 28.137 77.73 27.949
|
||||
77.395 c h
|
||||
31.012 75.488 m 31.012 74.832 30.871 74.316 30.59 73.941 c 30.316 73.566
|
||||
29.949 73.379 29.48 73.379 c 29 73.379 28.625 73.566 28.355 73.941 c 28.082
|
||||
74.316 27.949 74.832 27.949 75.488 c 27.949 76.156 28.082 76.676 28.355
|
||||
77.051 c 28.625 77.426 29 77.613 29.48 77.613 c 29.949 77.613 30.316 77.426
|
||||
30.59 77.051 c 30.871 76.676 31.012 76.156 31.012 75.488 c h
|
||||
31.012 75.488 m f
|
||||
35.578 70.629 m 35.148 71.379 34.828 72.125 34.609 72.863 c 34.398 73.594
|
||||
34.297 74.332 34.297 75.082 c 34.297 75.832 34.398 76.578 34.609 77.316
|
||||
c 34.828 78.059 35.148 78.793 35.578 79.535 c 34.797 79.535 l 34.316 78.773
|
||||
33.953 78.027 33.703 77.285 c 33.461 76.547 33.344 75.813 33.344 75.082
|
||||
c 33.344 74.355 33.461 73.625 33.703 72.895 c 33.941 72.156 34.305 71.402
|
||||
34.797 70.629 c h
|
||||
35.578 70.629 m f
|
||||
41.875 72.754 m 39.906 75.41 l 41.984 78.223 l 40.922 78.223 l 39.328 76.066
|
||||
l 37.734 78.223 l 36.672 78.223 l 38.797 75.363 l 36.859 72.754 l 37.922
|
||||
72.754 l 39.375 74.707 l 40.813 72.754 l h
|
||||
41.875 72.754 m f
|
||||
43.121 79.676 m 44.168 79.676 l 44.168 76.066 l 43.027 76.301 l 43.027
|
||||
75.707 l 44.152 75.488 l 44.793 75.488 l 44.793 79.676 l 45.84 79.676 l
|
||||
45.84 80.223 l 43.121 80.223 l h
|
||||
43.121 79.676 m f
|
||||
47.621 76.988 m 48.652 76.988 l 48.652 77.816 l 47.855 79.379 l 47.215
|
||||
79.379 l 47.621 77.816 l h
|
||||
47.621 76.988 m f
|
||||
55.117 72.754 m 53.148 75.41 l 55.227 78.223 l 54.164 78.223 l 52.57 76.066
|
||||
l 50.977 78.223 l 49.914 78.223 l 52.039 75.363 l 50.102 72.754 l 51.164
|
||||
72.754 l 52.617 74.707 l 54.055 72.754 l h
|
||||
55.117 72.754 m f
|
||||
56.801 79.676 m 59.035 79.676 l 59.035 80.223 l 56.02 80.223 l 56.02 79.676
|
||||
l 56.27 79.426 56.602 79.094 57.02 78.676 c 57.434 78.25 57.699 77.973
|
||||
57.816 77.848 c 58.023 77.621 58.164 77.426 58.238 77.27 c 58.32 77.105
|
||||
58.363 76.941 58.363 76.785 c 58.363 76.535 58.273 76.332 58.098 76.176
|
||||
c 57.918 76.02 57.691 75.941 57.41 75.941 c 57.211 75.941 56.996 75.98 56.77
|
||||
76.051 c 56.551 76.113 56.316 76.219 56.066 76.363 c 56.066 75.707 l 56.316
|
||||
75.605 56.551 75.527 56.77 75.473 c 56.996 75.422 57.207 75.395 57.395
|
||||
75.395 c 57.883 75.395 58.273 75.52 58.566 75.77 c 58.855 76.012 59.004
|
||||
76.34 59.004 76.754 c 59.004 76.941 58.965 77.125 58.895 77.301 c 58.82
|
||||
77.48 58.691 77.688 58.504 77.926 c 58.449 77.988 58.277 78.168 57.988 78.457
|
||||
c 57.707 78.75 57.309 79.156 56.801 79.676 c h
|
||||
56.801 79.676 m f
|
||||
60.484 70.629 m 61.266 70.629 l 61.754 71.402 62.117 72.156 62.359 72.895
|
||||
c 62.609 73.625 62.734 74.355 62.734 75.082 c 62.734 75.813 62.609 76.547
|
||||
62.359 77.285 c 62.117 78.027 61.754 78.773 61.266 79.535 c 60.484 79.535
|
||||
l 60.922 78.793 61.242 78.059 61.453 77.316 c 61.672 76.578 61.781 75.832
|
||||
61.781 75.082 c 61.781 74.332 61.672 73.594 61.453 72.863 c 61.242 72.125
|
||||
60.922 71.379 60.484 70.629 c h
|
||||
60.484 70.629 m f
|
||||
Q Q
|
||||
showpage
|
||||
%%Trailer
|
||||
end
|
||||
%%EOF
|
||||
241
doc/user-manual/figures/scatteringQuad.svg
Normal file
241
doc/user-manual/figures/scatteringQuad.svg
Normal file
|
|
@ -0,0 +1,241 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="scatteringQuad.svg"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
id="svg8"
|
||||
version="1.1"
|
||||
viewBox="0 0 50 60"
|
||||
height="60mm"
|
||||
width="50mm">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:window-y="190"
|
||||
inkscape:window-x="180"
|
||||
inkscape:window-height="1205"
|
||||
inkscape:window-width="1465"
|
||||
showgrid="false"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:cy="87.177663"
|
||||
inkscape:cx="72.599645"
|
||||
inkscape:zoom="3.959798"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Layer 1">
|
||||
<rect
|
||||
y="29.733734"
|
||||
x="7.3499122"
|
||||
height="15.301182"
|
||||
width="18.441597"
|
||||
id="rect887"
|
||||
style="fill:#00c800;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1" />
|
||||
<rect
|
||||
y="29.733734"
|
||||
x="25.79151"
|
||||
height="15.301182"
|
||||
width="15.234362"
|
||||
id="rect885"
|
||||
style="fill:#ffa000;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1" />
|
||||
<rect
|
||||
y="11.358955"
|
||||
x="25.79151"
|
||||
height="18.374779"
|
||||
width="15.234362"
|
||||
id="rect883"
|
||||
style="fill:#0b00ff;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1" />
|
||||
<rect
|
||||
y="11.358955"
|
||||
x="7.3499122"
|
||||
height="18.374779"
|
||||
width="18.441597"
|
||||
id="rect881"
|
||||
style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.264999;stroke-opacity:1" />
|
||||
<rect
|
||||
y="11.358955"
|
||||
x="7.3499122"
|
||||
height="33.675961"
|
||||
width="33.675961"
|
||||
id="rect844"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.264999" />
|
||||
<circle
|
||||
r="0.73232883"
|
||||
cy="45.073662"
|
||||
cx="7.3469119"
|
||||
id="path846"
|
||||
style="fill:#0000ff;stroke:#0000ff;stroke-width:0.264999;fill-opacity:1;stroke-opacity:1" />
|
||||
<circle
|
||||
style="fill:#ff0000;stroke:#ff0000;stroke-width:0.264999;stroke-opacity:1;fill-opacity:1"
|
||||
id="path846-5"
|
||||
cx="40.915924"
|
||||
cy="44.884674"
|
||||
r="0.73232883" />
|
||||
<circle
|
||||
style="fill:#00c800;stroke:#00c800;stroke-width:0.264999;fill-opacity:1;stroke-opacity:1"
|
||||
id="path846-4"
|
||||
cx="40.821426"
|
||||
cy="11.43378"
|
||||
r="0.73232883" />
|
||||
<circle
|
||||
style="fill:#ffa000;stroke:#ffa000;stroke-width:0.264999;stroke-opacity:1;fill-opacity:1"
|
||||
id="path846-3"
|
||||
cx="7.4650297"
|
||||
cy="11.43378"
|
||||
r="0.73232883" />
|
||||
<circle
|
||||
r="1.3229166"
|
||||
cy="29.700775"
|
||||
cx="25.651775"
|
||||
id="path875"
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.264999;stroke-opacity:1;fill-opacity:1" />
|
||||
<path
|
||||
id="path877"
|
||||
d="M 7.1815475,29.671131 H 40.915923"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path879"
|
||||
d="M 25.724692,44.901281 V 11.292137"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<text
|
||||
id="text891"
|
||||
y="49.578495"
|
||||
x="4.677217"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583"
|
||||
xml:space="preserve"><tspan
|
||||
style="stroke-width:0.264583"
|
||||
y="49.578495"
|
||||
x="4.677217"
|
||||
id="tspan889"
|
||||
sodipodi:role="line">1</tspan></text>
|
||||
<text
|
||||
id="text895"
|
||||
y="48.576237"
|
||||
x="41.76086"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583"
|
||||
xml:space="preserve"><tspan
|
||||
style="stroke-width:0.264583"
|
||||
y="48.576237"
|
||||
x="41.76086"
|
||||
id="tspan893"
|
||||
sodipodi:role="line">2</tspan></text>
|
||||
<text
|
||||
id="text899"
|
||||
y="10.156242"
|
||||
x="41.627232"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583"
|
||||
xml:space="preserve"><tspan
|
||||
style="stroke-width:0.264583"
|
||||
y="10.156242"
|
||||
x="41.627232"
|
||||
id="tspan897"
|
||||
sodipodi:role="line">3</tspan></text>
|
||||
<text
|
||||
id="text903"
|
||||
y="9.6885204"
|
||||
x="4.4767642"
|
||||
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583"
|
||||
xml:space="preserve"><tspan
|
||||
style="stroke-width:0.264583"
|
||||
y="9.6885204"
|
||||
x="4.4767642"
|
||||
id="tspan901"
|
||||
sodipodi:role="line">4</tspan></text>
|
||||
<text
|
||||
id="text907"
|
||||
y="19.510675"
|
||||
x="12.628486"
|
||||
style="font-size:4.23333px"
|
||||
xml:space="preserve"><tspan
|
||||
y="19.510675"
|
||||
x="12.628486"
|
||||
id="tspan905"
|
||||
sodipodi:role="line">A<tspan
|
||||
id="tspan911"
|
||||
style="font-size:65%;baseline-shift:sub">2</tspan></tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="31.541672"
|
||||
y="19.494503"
|
||||
id="text907-1"><tspan
|
||||
style="font-size:4.23333px;baseline-shift:baseline;stroke-width:1"
|
||||
sodipodi:role="line"
|
||||
id="tspan905-5"
|
||||
x="31.541672"
|
||||
y="19.494503">A<tspan
|
||||
id="tspan934"
|
||||
style="font-size:65%;baseline-shift:sub">1</tspan></tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;stroke-width:1"
|
||||
x="14.77051"
|
||||
y="37.267929"
|
||||
id="text907-0"><tspan
|
||||
style="stroke-width:1"
|
||||
sodipodi:role="line"
|
||||
id="tspan905-7"
|
||||
x="14.77051"
|
||||
y="37.267929">A<tspan
|
||||
id="tspan946"
|
||||
style="font-size:65%;baseline-shift:sub">3</tspan><tspan
|
||||
style="font-size:2.75167px;baseline-shift:sub;stroke-width:1"
|
||||
id="tspan911-2" /></tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:4.23333px;stroke-width:1"
|
||||
x="31.60849"
|
||||
y="37.201111"
|
||||
id="text907-9"><tspan
|
||||
style="stroke-width:1"
|
||||
sodipodi:role="line"
|
||||
id="tspan905-3"
|
||||
x="31.60849"
|
||||
y="37.201111">A<tspan
|
||||
id="tspan958"
|
||||
style="font-size:65%;baseline-shift:sub">4</tspan><tspan
|
||||
style="font-size:2.75167px;baseline-shift:sub;stroke-width:1"
|
||||
id="tspan911-1" /></tspan></text>
|
||||
<text
|
||||
id="text962"
|
||||
y="27.595581"
|
||||
x="9.2208014"
|
||||
style="font-size:3.52778px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:3.52778px"
|
||||
y="27.595581"
|
||||
x="9.2208014"
|
||||
id="tspan960"
|
||||
sodipodi:role="line">p(x<tspan
|
||||
id="tspan968"
|
||||
style="font-size:65%;baseline-shift:sub">1</tspan>,x<tspan
|
||||
id="tspan970"
|
||||
style="font-size:65%;baseline-shift:sub">2</tspan>)</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.5 KiB |
BIN
doc/user-manual/fpakc_UserManual.pdf
Normal file
BIN
doc/user-manual/fpakc_UserManual.pdf
Normal file
Binary file not shown.
613
doc/user-manual/fpakc_UserManual.tex
Normal file
613
doc/user-manual/fpakc_UserManual.tex
Normal file
|
|
@ -0,0 +1,613 @@
|
|||
\documentclass[10pt,a4paper,oneside]{book}
|
||||
\usepackage[latin1]{inputenc}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{amsfonts}
|
||||
\usepackage{amssymb}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{listings}
|
||||
\usepackage{wrapfig}
|
||||
\usepackage{units}
|
||||
\usepackage[block=ragged,backend=bibtex]{biblatex}
|
||||
\usepackage[acronym,toc,automake]{glossaries}
|
||||
\usepackage[hidelinks]{hyperref}
|
||||
\hypersetup{
|
||||
breaklinks = true, % Allows break links in lines
|
||||
colorlinks = true, % Colours links instead of ugly boxes
|
||||
urlcolor = blue, % Colour for external hyperlinks
|
||||
linkcolor = blue, % Colour of internal links
|
||||
citecolor = blue, % Colour of citations
|
||||
pdfinfo = {
|
||||
Title = {fpakc User Manual},
|
||||
Author = {Jorge Gonzalez}
|
||||
}
|
||||
}
|
||||
\makeglossaries
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
\newacronym{fpakc}{fpakc}{Finite Element PArticle Code}
|
||||
\newacronym{mpi}{MPI}{Message Passing Interface}
|
||||
\newacronym{gpu}{GPU}{Graphics Processing Unit}
|
||||
\newacronym{cpu}{CPU}{Central Processing Unit}
|
||||
\newacronym{json}{JSON}{JavaScript Object Notation}
|
||||
\newacronym{io}{I/O}{input/output}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\newglossaryentry{openmp}{name={OpenMP},description={Shared-memory parallelization}}
|
||||
\newglossaryentry{gfortran}{name={GFortran},description={Open-source compiler for fortran source code}}
|
||||
\newglossaryentry{ifort}{name={ifort},description={Intel\textsuperscript{\textregistered} Fortran compiler}}
|
||||
\newglossaryentry{opensource}{name={Open Source},description={Source code that is made freely available for possible modification and redistribution}}
|
||||
\newglossaryentry{openblas}{name={OpenBLAS},description={Open-source implementation of BLAS and LAPACK APIs}}
|
||||
\newglossaryentry{git}{name={Git},description={Git is a distributed version-control system for tracking changes in a set of files}}
|
||||
\newglossaryentry{gitlab}{name={GitLab},description={GitLab is a web-based lifecycle tool that provides a \Gls{git}-repository manager}}
|
||||
\newglossaryentry{gmsh}{name={Gmsh},description={A three-dimensional finite element mesh generator with built-in pre- and post-processing facilities.}}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\bibliography{bibliography}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{document}
|
||||
\title{\includegraphics{figures/logos/fpakc}\\\vspace{2cm}fpakc User Manual}
|
||||
\author{Jorge Gonzalez}
|
||||
\date{\today\\v0.1}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\maketitle
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\tableofcontents
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\chapter{Introduction}
|
||||
\section{About fpakc}
|
||||
The \Gls{fpakc} is a simulation tool that models species in plasmas (ions, electrons and neutrals) following the trajectories of macro-particles as they move and interact between them and the boundaries of the domain.
|
||||
The code is currently in very early steps of development and further improvements are expected very soon.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Main Guidelines}
|
||||
The \acrshort{fpakc} environment aims to be a fully functional tool for the simulation of plasmas from a kinetic point of view.
|
||||
The main guidelines in the creation of the code are:
|
||||
\begin{enumerate}
|
||||
\item The code is \Gls{opensource} and freely distributed. This means the code can be used and modified by anyone.
|
||||
Nevertheless, the official version distributed in the official repository will be managed by the developed team, which members have to be given direct permission by the lead developer.
|
||||
\acrshort{fpakc} is distributed with a GNU General Public License v3.0 that covers all files in the repository.
|
||||
Moreover, there should always be an open-source free alternative for external tools required by the program (post-processing, mesh generation, input file generation \ldots).
|
||||
\item \acrshort{fpakc} is coded in a \textit{understandable} way.
|
||||
This means that the code is required to be written in a clear way that is easy to understand and maintain.
|
||||
Variables and procedure names need to be self-understanding.
|
||||
This ease the process of fixing bugs and improving the codes by a large team of developers.
|
||||
For more information, please refer to the \acrshort{fpakc} Coding Style document.
|
||||
\item \acrshort{fpakc} requires to be ease to use.
|
||||
Input files are required to be in a \textit{human} format, meaning that the different options can be easily understander without constant reference to the user guide.
|
||||
\acrshort{fpakc} is aimed to be used in a wide range of applications and by a variety of scientist: from very established ones to newcomers to the field and students.
|
||||
\end{enumerate}
|
||||
|
||||
These are foundation stones of the code and code development and should always be followed, at least for the releases in the official repository.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{How to collaborate}
|
||||
Right now, development of \acrshort{fpakc} is closed to third parties until a stable version with the basic functionality is released.
|
||||
However, if you have a huge interest in the project please contact \href{mailto:jorge.gonzalez@upm.com}{jorge.gonzalez@upm.com}.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\chapter{Operation Scheme}
|
||||
\section{The Particle Method}
|
||||
\acrshort{fpakc} uses macro-particles to simulate the dynamics of different plasma species (mainly ions, electrons and neutrals).
|
||||
These macro-particles represent a large amount of real particles.
|
||||
For now own, macro-particles will be referred as just particles by abusing of language.
|
||||
In the evolution of these particles, external forces (as the electromagnetic field), interaction between particles (as collisions) and interaction with the boundaries of the domain are included.
|
||||
|
||||
At each time step, particles are first pushed accounting for possible acceleration by external forces.
|
||||
Then, the cell in which the particle ends up is located.
|
||||
If a boundary is encountered, the interaction between the particle and the boundary is calculated.
|
||||
Next, collisions for the particles in each cell are carried on.
|
||||
This may include different collision processes for each particle.
|
||||
Finally, the particles properties are scattered into the mesh nodes.
|
||||
These properties are density, momentum and the stress tensor.
|
||||
Non-dimensional units are used for this, but output files are converted into dimensional units.
|
||||
If requested, the electromagnetic field is computed.
|
||||
|
||||
More in depth explanation of the different steps are given in the following sections.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Injection of new particles}
|
||||
\acrshort{fpakc} has the capability of injecting particles at different velocities, temperatures, distributions and mass flows in boundary sections defined by the user.
|
||||
Particles are distributed uniformly along the edge.
|
||||
Their velocities are computed from the distribution function selected by the user.
|
||||
|
||||
The injection of particles is controlled in the \lstinline|moduleInject| module.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Pushing}
|
||||
Particles are pushed in the selected domain.
|
||||
Velocity and position are updated according to the old particle values and the external forces.
|
||||
All the push routines for the different geometries can be found in \lstinline|moduleSolver|.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{2D Cylindrical}
|
||||
When a 2D cylindrical geometry is used ($z$, $r$), a Boris solver\cite{boris1970relativistic} is used to move particles accounting for the effect of the symmetry axis.
|
||||
This pusher removes the issue with particles going to infinite velocity when $r \rightarrow 0$ by pushing the particles in Cartesian space and then converting it to $r-z$ geometry.
|
||||
Velocity in the $\theta$ direction is updated for collision processes, although the dynamic in the angular direction is assumed as symmetric.
|
||||
|
||||
Cross-sections are read from files.
|
||||
These files contains two columns: one for the relative energy (in $\unit{eV}$) and another one for the cross-section (in $\unit{m^{-2}}$).
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{1D Cartesian pusher}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{1D Radial pusher}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Find new cell}
|
||||
Once the position and velocity of the particle are updated, the new cell that contains the particle is searched.
|
||||
This is done by a neighbor search, starting from the previous cell containing the particle.
|
||||
In the process of finding the new cell, it is possible that a particle encounters a boundary.
|
||||
When the particle interacts with the boundary, the particle may continue its life in the simulation (reflected) or might be eliminated from it (absorbed).
|
||||
Once that the new cell is found or that the particle life has been terminated, the pushing is complete.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Variable Weighting Scheme\label{sec:weightingScheme}}
|
||||
One of the issues in particle simulations, specially for axisymmetrical cases, is that due to the disparate volume of cells, specially close to the axis, the statistics in some cells is usually poor.
|
||||
To try to fix that, the possibility to include a Variable Weighting Scheme in the simulations is available in \Gls{fpakc}.
|
||||
This schemes detect when a particle change cells and modify its weight accordingly.
|
||||
To avoid particles having a larger weight than the rest, particle can be split in multiple particles if weight become too large.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Reset of particle array}
|
||||
Once that the pushing is complete, the array of particles that remain inside the domain is copied to a new array.
|
||||
The new array containing only the particles inside the domain will be the one used in the next steps.
|
||||
In this section, particles are assigned to the list of particles inside each individual cell.
|
||||
Unfortunately, this is done right now without parallelisation and is very CPU consuming.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Interaction between species}\label{ssec:collisions}
|
||||
For each cell, interaction among the particles in it are carried out.
|
||||
The type of interaction between the different particles is defined by the user.
|
||||
In general, the maximum number of interaction in a cell is computed.
|
||||
For each collision, a pair of particles is selected.
|
||||
A loop over all possible collisions for the pair of particles is performed.
|
||||
If a random number generated is above the probability of collision for the type divided by the maximum one, the collision take place.
|
||||
|
||||
Collisions can change the velocity of the particles involved (elastic), create new particles (ionization-recombination) or change the type of particle (charge-exchange).
|
||||
|
||||
Below are described the type of collision process implemented between species.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{Elastic collision}
|
||||
In this type of collision, particles exchange energy due to hard-sphere model.
|
||||
Total energy is conserved.
|
||||
Resulting velocity directions are chosen from Maxwellian distribution functions.
|
||||
This interaction is useful for short-range collisions as neutral-neutral and charged-neutral elastic collisions.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{Charge Exchange}
|
||||
When an ion interacts with a neutral particle, an electron is exchanged between the two particles with no exchange of energy.
|
||||
This is called a resonant charge-exchange.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{Electron Impact Ionization}
|
||||
When the relative energy between a neutral and an electron is above the ionization threshold, there is a probability that the neutral particle will become ionized.
|
||||
This ionization emits and additional electron
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{Recombination}
|
||||
When an electron and an ion interact, there is a possibility for them to be recombined into a neutral particle.
|
||||
The photon emitted by this process is not modeled yet.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Scattering}
|
||||
The properties of each particle are deposited in the nodes from the containing cell.
|
||||
This process depend on the cell type, but in general, each node receive a proportional part of the particle properties as a function of the particle position inside the cell.
|
||||
Figure \ref{fig:scatteringQuad} shows how a particle at a generic position $p(x_1, x_2)$ inside the cell is scattered to the four nodes.
|
||||
\begin{wrapfigure}{l}{0.4\textwidth}
|
||||
\centering
|
||||
\includegraphics{figures/scatteringQuad}
|
||||
\caption{\label{fig:scatteringQuad}Example of how a particle is weighted in a quadrilateral cell.}
|
||||
\end{wrapfigure}
|
||||
Each node receives a proportional part of the area formed by dividing the cell in for rectangles using as an additional vertex the particle position.
|
||||
These properties are dimensionless, but they are converted to the correct units once the output is printed.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Electromagnetic field}
|
||||
WIP.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\chapter{Installation}
|
||||
\section{Required Packages}
|
||||
In order to properly compile \gls{fpakc}, the following packages are required.
|
||||
\subsection{Gfortran}
|
||||
The \Gls{opensource} free compiler \Gls{gfortran}\cite{gfortranURL} from GCC is the basic way to compile \acrshort{fpakc}.
|
||||
It is distributed with all GNU/Linux distributions.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{Ifort}
|
||||
The \Gls{ifort}\cite{ifortURL} compiler is a proprietary Fortran compiler developed by Intel\textsuperscript{\textregistered}.
|
||||
The makefile distributed with \Gls{fpakc} is prepared to be used with ifort with minor modifications.
|
||||
However, \Gls{gfortran} is recommended for compiling fpakc.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{OpenBlas}
|
||||
\Gls{openblas}\cite{openblasURL} is used by \acrshort{fpakc} to solve the electromagnetic field in the finite element mesh.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{JSON-Fortran}
|
||||
To read \acrshort{json}\cite{jsonURL} input files in Fortran, the API JSON-Fortran\cite{jsonfortranURL} is used.
|
||||
This needs to be compiled and placed in a folder accessible from the root directory of \Gls{fpakc}.
|
||||
The same compiler as the one used to compile \Gls{fpakc} needs to be used to generate a compatible library.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{Gmsh}
|
||||
Although \Gls{gmsh}\cite{gmshURL} is not required to compile and run \Gls{fpakc}, it is the default tool to generate finite element meshes and post-processing.
|
||||
Right now, the only \acrshort{io} format available in \Gls{fpakc} is the v2.0 .msh format.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Installation steps}
|
||||
Once you have been added to the \Gls{fpakc} \Gls{gitlab} repository, and have added an ssh key to your account, you will be able to clone the repository using:
|
||||
\begin{lstlisting}
|
||||
git clone git@gitlab.com:<YourGitLabUsername>/fpakc.git
|
||||
\end{lstlisting}
|
||||
in which you have to substitute \lstinline|<YourGitLabUsername>| for your \Gls{gitlab} username.
|
||||
|
||||
Go into the new downloaded directory with
|
||||
\begin{lstlisting}
|
||||
cd fpakc
|
||||
\end{lstlisting}
|
||||
Clone the json-fortran repository with:
|
||||
\begin{lstlisting}
|
||||
git clone https://github.com/jacobwilliams/json-fortran.git
|
||||
\end{lstlisting}
|
||||
This will create the \lstinline|json-fortran-8.2.0| directory.
|
||||
Go into this new folder and create a new \lstinline|build-gfortran| directory, enter it and execute:
|
||||
\begin{lstlisting}
|
||||
cmake ../
|
||||
\end{lstlisting}
|
||||
Once it finish, just compile the json-fortran library with
|
||||
\begin{lstlisting}
|
||||
make
|
||||
\end{lstlisting}
|
||||
This creates the \lstinline|include| and \lstinline|lib| folders that contain the required files for \acrshort{fpakc} compilation.
|
||||
|
||||
Go back to the \acrshort{fpakc} root folder and execute
|
||||
\begin{lstlisting}
|
||||
make
|
||||
\end{lstlisting}
|
||||
to compile the code.
|
||||
If everything is correct, an executable named \textit{fpakc} will be generated.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Running the code}
|
||||
To run a case, simply execute:
|
||||
\begin{lstlisting}
|
||||
./fpakc path/to/input-file.json
|
||||
\end{lstlisting}
|
||||
in a command line from the root \acrshort{fpakc} folder.
|
||||
Substitute \lstinline|path/to/input-file.json| with the path to the input file of the case you want to run.
|
||||
The examples in the run directory are presented in Chapter \ref{ch:exampleRuns}.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\chapter{Input File}\label{ch:input_file}
|
||||
The input files for \Gls{fpakc} is divided between to files: a mesh file and a case file.
|
||||
The mesh file contains the descriptions for the different elements composing a mesh (nodes, edges and volumes).
|
||||
The case file contains the required information to define a simulation case: reference parameters, initial state, injection of particles, boundary conditions, species, number of iterations\ldots
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Mesh file}
|
||||
\Gls{fpakc} accepts right now the version 2.0 of \Gls{gmsh} mesh format .msh in ASCII format.
|
||||
This file contains information about the nodes, edges and volumes that define the finite element mesh used by \Gls{fpakc} to scatter particle properties and compute the self-consistent electromagnetic field.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Case file}
|
||||
The required format for the case file is \Gls{json}.
|
||||
\Gls{json} is a case-sensitive format, so input must be written with the correct capitalisation.
|
||||
The basic structure and options available for the case file are explained below.
|
||||
The order of the objects and variables is irrelevant, but the structure needs to be maintained.
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{output}
|
||||
The object \textbf{output} in the \Gls{json} case file determines the different options to define how and when the simulation produces files:
|
||||
The available options are:
|
||||
\begin{itemize}
|
||||
\item \textbf{path}: Character.
|
||||
Path for the output files. This path is also used to locate the mesh input file.
|
||||
\item \textbf{triggerOutput}: Integer.
|
||||
Determines the number of iterations between writing output files for macroscopic quantities.
|
||||
\item \textbf{cpuTime}: Logical.
|
||||
Determines if the \Gls{cpu} time per iteration is written into a file.
|
||||
Each row in the file determine the iteration, number of particles in the simulation and the multiple times spend per action.
|
||||
Each action in the iteration (pushing, collisions, weighting\ldots) has its own column.
|
||||
\item \textbf{triggerCPUTime}: Integer.
|
||||
Determines the number of iterations between writing \Gls{cpu} time for macroscopic quantities.
|
||||
This option is irrelevant if \textbf{cpuTime} is set to \textit{false}.
|
||||
\item \textbf{numColl}: Logical.
|
||||
Determines if the number of collisions per cell are outputted in a separated file.
|
||||
Trigger between writings is the same as in \textbf{triggerOutput}.
|
||||
\item \textbf{EMField}: Logical.
|
||||
Determines if the electromagnetic field is printed.
|
||||
\end{itemize}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{geometry}
|
||||
The object \textbf{geometry} contains information about the type of geometry, the mesh file format and the mesh filename.
|
||||
The accepted parameters are:
|
||||
\begin{itemize}
|
||||
\item \textbf{type}: Character.
|
||||
Type of geometry.
|
||||
Current accepted vaules are
|
||||
\begin{itemize}
|
||||
\item \textbf{2DCyl}: Two-dimensional grid (z-r) with symmetry axis at $r = 0$.
|
||||
For \Gls{gmsh} mesh format, the coordinates $x$ and $y$ correspond to $z$ and $r$ respectively.
|
||||
\item \textbf{1DCart}: One-dimensional grid (x) in Cartesian coordinates
|
||||
For \Gls{gmsh} mesh format, the coordinates $x$ corresponds to $x$.
|
||||
\item \textbf{1DRad}: One-dimensional grid (r) in radial coordinates
|
||||
For \Gls{gmsh} mesh format, the coordinates $x$ corresponds to $r$.
|
||||
\end{itemize}
|
||||
\item \textbf{meshType}: Character.
|
||||
Format of mesh file.
|
||||
Currently, only the value \textbf{gmsh} is accepted, which makes reference to \Gls{gmsh} v2.0 output format.
|
||||
\item \textbf{meshFile}: Character.
|
||||
Mesh filename.
|
||||
This file is searched in the path \textbf{output.path} and must contain the file extension.
|
||||
\end{itemize}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{species}
|
||||
The array object \textbf{species} contains the data relevant to identify the different species in the simulation.
|
||||
Multiple species can be defined as elements in the array.
|
||||
For each species, the following parameters need to be defined:
|
||||
\begin{itemize}
|
||||
\item \textbf{name}: Character.
|
||||
Name of the species.
|
||||
\item \textbf{type}: Character.
|
||||
Defines the type of species.
|
||||
Current values are:
|
||||
\begin{itemize}
|
||||
\item \textbf{neutral}: Neutral species.
|
||||
\item \textbf{charged}: Charged species.
|
||||
The parameter \textbf{charge} is required for this type of species.
|
||||
\end{itemize}
|
||||
\item \textbf{mass}: Real.
|
||||
Particle mass in $\unit{kg}$.
|
||||
\item \textbf{charge}: Real.
|
||||
Particle charge in elementary charge units.
|
||||
This parameter is only relevant if \textbf{type} is \textbf{charged}.
|
||||
\item \textbf{ion}: Character.
|
||||
Name of species resulting of ionizing the current one.
|
||||
\item \textbf{neutral}: Character.
|
||||
Name of species resulting of neutralizing the current one.
|
||||
\end{itemize}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{boundary}
|
||||
The array object \textbf{boundary} determines the interaction between surfaces and particles.
|
||||
These boundaries need to be linked to a specific edge in the mesh.
|
||||
The accepted variables are:
|
||||
\begin{itemize}
|
||||
\item \textbf{name}: Character.
|
||||
Name of the boundary.
|
||||
\item \textbf{type}: Character.
|
||||
Type of boundary.
|
||||
Accepted values are:
|
||||
\begin{itemize}
|
||||
\item \textbf{reflection}: Elastic reflection of particles.
|
||||
\item \textbf{absorption}: Particle is eliminated from the domain.
|
||||
The particle is first moved into the edge and its properties are scattered among the edge nodes.
|
||||
\item \textbf{transparent}: Particle abandon the numerical domain.
|
||||
\item \textbf{axis}: Identifies the symmetry axis for 2D cylindrical simulations.
|
||||
It has no actual function.
|
||||
\end{itemize}
|
||||
\item \textbf{physicalSurface}: Integer.
|
||||
Identification of the edge in the mesh file.
|
||||
\end{itemize}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{boundaryEM}
|
||||
The array object \textbf{boundaryEM} determines the boundary conditions for the electromagnetic field.
|
||||
As with the \textbf{boundary} definition, these must be linked to an edge identified in the mesh file.
|
||||
The variables for each array element are:
|
||||
\begin{itemize}
|
||||
\item \textbf{name}: Character.
|
||||
Name of the boundary.
|
||||
\item \textbf{type}: Character.
|
||||
Type of boundary.
|
||||
Accepted values are:
|
||||
\begin{itemize}
|
||||
\item \textbf{dirichlet}: Elastic reflection of particles.
|
||||
\end{itemize}
|
||||
\item \textbf{potential}: Real.
|
||||
Fixed potential for Dirichlet boundary condition.
|
||||
\item \textbf{physicalSurface}: Integer.
|
||||
Identification of the edge in the mesh file.
|
||||
\end{itemize}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{inject}
|
||||
The array \textbf{inject} specifies the injection of particles from different surfaces.
|
||||
The injection of particles need to be associated to a physicalSurface in the mesh file.
|
||||
Multiple injections can be associated to the same surface.
|
||||
\begin{itemize}
|
||||
\item \textbf{name}: Character.
|
||||
Name of the injection.
|
||||
\item \textbf{species}: Character.
|
||||
Name of the species that is being injected.
|
||||
\item \textbf{flow}: Real.
|
||||
Flow of particles going through the surface.
|
||||
\item \textbf{units}: Character.
|
||||
Units for the \textbf{flow} parameter.
|
||||
Available values are:
|
||||
\begin{itemize}
|
||||
\item \textbf{A}: Ampere.
|
||||
\item \textbf{sccm}: Standard cubic centimeter.
|
||||
\end{itemize}
|
||||
\item \textbf{v}: Real.
|
||||
Module of velocity vector, in $\unitfrac{m}{s}$.
|
||||
\item \textbf{n}: Real.
|
||||
Array dimension $3$.
|
||||
Direction of injection.
|
||||
Norm of vector must be equal $1$.
|
||||
\item \textbf{velDist}: Character.
|
||||
Array dimension $3$.
|
||||
Type of distribution function used to obtain injected particle velocity:
|
||||
\begin{itemize}
|
||||
\item \textbf{Maxwellian}: Maxwellian distribution of temperature \textbf{T} and mean \textbf{v} times the value of \textbf{n} in the specified direction.
|
||||
\item \textbf{Delta}: Dirac's delta distribution function. All particles are injected with velocity \textbf{v} times the value of \textbf{n} in the specified direction.
|
||||
\end{itemize}
|
||||
\item \textbf{T}: Real.
|
||||
Array dimension $3$.
|
||||
Temperature in each direction.
|
||||
\item \textbf{physicalSurface}: Integer.
|
||||
Identification of the edge in the mesh file.
|
||||
\end{itemize}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{reference}
|
||||
This object indicates the reference values used by \Gls{fpakc} to scale the problem variables.
|
||||
The required parameters are:
|
||||
\begin{itemize}
|
||||
\item \textbf{density}: Real.
|
||||
Reference density in $\unit{m^-3}$.
|
||||
\item \textbf{mass}: Real.
|
||||
Reference particle mass in $\unit{kg}$.
|
||||
\item \textbf{temperature}: Real.
|
||||
Reference temperature in $\unit{K}$.
|
||||
\item \textbf{radius}: Real.
|
||||
Reference atomic radius in $\unit{m}$.
|
||||
\item \textbf{crossSection}: Real.
|
||||
Reference cross section in $\unit{m^2}$.
|
||||
If this value is present, radius is ignored.
|
||||
\end{itemize}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{case}
|
||||
This object determines the simulation time, time step, pushers, weighting scheme and solver for the electromagnetic field.
|
||||
Accepted variables are:
|
||||
\begin{itemize}
|
||||
\item \textbf{tau}: Real.
|
||||
Array dimension 'number of species'.
|
||||
Defines the different time steps for each species.
|
||||
Even if all time steps are equal, they need to be defined as an array.
|
||||
\item \textbf{time}: Real.
|
||||
Total simulation time in $\unit{s}$.
|
||||
\item \textbf{pusher}: Character.
|
||||
Array dimension 'number of species'.
|
||||
Indicates the type of pusher used for each species:
|
||||
\begin{itemize}
|
||||
\item \textbf{2DCylNeutral}: Pushes particles in a 2D z-r space without any external force.
|
||||
\item \textbf{2DCylCharged}: Pushes particles in a 2D z-r space including the effect of the electrostatic field.
|
||||
\item \textbf{1DCartCharged}: Pushes particles in a 1D Cartesian space accounting the the electrostatic field.
|
||||
\item \textbf{1DRadCharged}: Pushes particles in a 1D cylindrical space (r) accounting the the electrostatic field.
|
||||
\end{itemize}
|
||||
\item \textbf{WeightingScheme}: Character.
|
||||
Indicates the variable weighting scheme to be used in the simulation.
|
||||
Check Section \ref{sec:weightingScheme} for more information.
|
||||
If this variable is not present, no scheme is used.
|
||||
The current available schemes are:
|
||||
\begin{itemize}
|
||||
\item \textbf{Volume}: Modifies particle weight as a function of cell volume.
|
||||
\end{itemize}
|
||||
\item \textbf{EMSolver}: Character.
|
||||
Determines the solver for the electromagnetic field.
|
||||
If no value is supplied, no field is solved.
|
||||
\begin{itemize}
|
||||
\item \textbf{Electrostatic}: Solves the Poison equation to obtain the self-consistent electrostatic potential.
|
||||
\end{itemize}
|
||||
\item \textbf{initial}: Object.
|
||||
Array.
|
||||
Determines initial values for the species.
|
||||
Required values are:
|
||||
\begin{itemize}
|
||||
\item \textbf{speciesName}: Character.
|
||||
Name of species.
|
||||
\item \textbf{initialState}: Character.
|
||||
Plain text file that contains the information about the species macroscopic properties in the grid.
|
||||
Initial particles are assumed to be Maxwellian.
|
||||
File must be located at \textbf{output.path}.
|
||||
The file must contain the following columns in this specific order:
|
||||
\begin{itemize}
|
||||
\item \textit{Element}: Integer.
|
||||
Identifier of the volume in the mesh.
|
||||
It is not required to specify empty volumes.
|
||||
\item \textit{Density}: Real.
|
||||
Species density in $\unit{m^-3}$.
|
||||
\item \textit{Velocity}: Real.
|
||||
Three colums representing the initial velocity in each direction.
|
||||
Units are $\unit{m s^-1}$.
|
||||
\item \textit{Temperature}: Real.
|
||||
One column that represents the initial temperature in $\unit{K}$.
|
||||
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{interactions}\label{ssec:input_interactions}
|
||||
This object determine the different interactions among species.
|
||||
Acceptable values are:
|
||||
\begin{itemize}
|
||||
\item \textbf{folderCollisions}: Character.
|
||||
Indicates the path to in which the cross section tables are allocated.
|
||||
\item \textbf{collisions}: Object.
|
||||
Array.
|
||||
Contains the different binary collisions.
|
||||
Multiple collision types can be defined for each pair of species.
|
||||
Each object in the array is defined by:
|
||||
\begin{itemize}
|
||||
\item \textbf{species\_i}, \textbf{species\_j}: Character.
|
||||
Define the two species involved in the collision processes.
|
||||
Order is indiferent.
|
||||
\item \textbf{cTypes}: Object.
|
||||
Array.
|
||||
Defines all the collisions between \textbf{species\_i} and \textbf{species\_j}.
|
||||
Required values are:
|
||||
\begin{itemize}
|
||||
\item \textbf{type}: Character.
|
||||
Collision type.
|
||||
Accepted values are \textbf{elastic}, \textbf{chargeExchange}, \textbf{ionization} and \textbf{recombination}.
|
||||
Please refer to Sec. \ref{ssec:collisions} for a description of the different collision types.
|
||||
\item \textbf{crossSection}: Character.
|
||||
File in \textbf{interactions.folderCollisions} that contains the cross section data as a 1D table of relative energy (in $\unit{eV}$) and cross section (in $\unit{m^-2}$).
|
||||
\item \textbf{energyThreshold}: Real.
|
||||
Energy threshold of the collisional process in $\unit{eV}$.
|
||||
Only valid for \textbf{ionization} and \textbf{recombination} processes.
|
||||
\item \textbf{electron}: Character.
|
||||
Name of species designed as electrons.
|
||||
Only valid for \textbf{ionization} and \textbf{recombination} processes.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{parallel}
|
||||
This object contains the information related to parallelization of \Gls{fpakc}.
|
||||
Current values accepted are:
|
||||
\begin{itemize}
|
||||
\item \textbf{OpenMP}: Object.
|
||||
Defines the parameters for the \Gls{openmp} shared memory parallelization.
|
||||
\begin{itemize}
|
||||
\item \textbf{nThreads}: Integer.
|
||||
Number of threads to be used by \Gls{openmp}.
|
||||
Try to match this to the number of threads of the \acrshort{cpu} used.
|
||||
\end{itemize}
|
||||
|
||||
\end{itemize}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\chapter{Example runs\label{ch:exampleRuns}}
|
||||
\section{1D Cathode}
|
||||
Emission from a 1D cathond in both, cartesian and radial coordinates.
|
||||
Both cases insert the same amount of electrons from the minimum coordinate and have the same boundary conditions for particles and the electrostatic field.
|
||||
This case is useful to ilustrate hoy \acrshort{fpakc} can deal with different geometries by just modifiying some parameters in the input file.
|
||||
The same mesh file (\lstinline|mesh.msh|) is used for both cases.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{ALPHIE Grid system}
|
||||
Two-dimensional axialsymmetry case to study the counterflow of electrons and Argon ions going trhough the ALPHIE grid system.
|
||||
A \lstinline|mesh.geo| file is provided to easily modify the parameters of the grid system and generate a new mesh with \Gls{gmsh}.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\section{Flow around cylinder}
|
||||
Simple case of neutral Argon flow around a cylinder in a 2D axialsymmetry geometry.
|
||||
Elastic collisions between argon particles are included as default.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\printglossaries
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\printbibliography
|
||||
|
||||
\end{document}
|
||||
|
|
@ -21,16 +21,20 @@
|
|||
{"name": "Electron", "type": "charged", "mass": 9.109e-31, "charge":-1.0, "weight": 1.0e1}
|
||||
],
|
||||
"boundary": [
|
||||
{"name": "Cathode", "type": "absorption", "physicalSurface": 1},
|
||||
{"name": "Infinite", "type": "absorption", "physicalSurface": 2}
|
||||
{"name": "Cathode", "physicalSurface": 1, "bTypes": [
|
||||
{"type": "absorption"}
|
||||
]},
|
||||
{"name": "Infinite", "physicalSurface": 2, "bTypes": [
|
||||
{"type": "transparent"}
|
||||
]}
|
||||
],
|
||||
"boundaryEM": [
|
||||
{"name": "Cathode", "type": "dirichlet", "potential": -10.0, "physicalSurface": 1},
|
||||
{"name": "Infinit", "type": "dirichlet", "potential": 0.0, "physicalSurface": 2}
|
||||
{"name": "Infinite", "type": "dirichlet", "potential": 0.0, "physicalSurface": 2}
|
||||
],
|
||||
"inject": [
|
||||
{"name": "Cathode Electron", "species": "Electron", "flow": 9.0e-5, "units": "A", "v": 27500.0, "T": [2500.0, 2500.0, 2500.0],
|
||||
"velDist": ["Maxwellian", "Maxwellian", "Maxwellian"], "n": [ 1, 0, 0], "physicalSurface": 1}
|
||||
"velDist": ["Maxwellian", "Maxwellian", "Maxwellian"], "n": [ 1, 0, 0], "physicalSurface": 1}
|
||||
],
|
||||
"case": {
|
||||
"tau": [1.0e-11],
|
||||
|
|
|
|||
|
|
@ -21,8 +21,12 @@
|
|||
{"name": "Electron", "type": "charged", "mass": 9.109e-31, "charge":-1.0, "weight": 1.0e1}
|
||||
],
|
||||
"boundary": [
|
||||
{"name": "Cathode", "type": "absorption", "physicalSurface": 1},
|
||||
{"name": "Infinite", "type": "absorption", "physicalSurface": 2}
|
||||
{"name": "Cathode", "physicalSurface": 1, "bTypes": [
|
||||
{"type": "absorption"}
|
||||
]},
|
||||
{"name": "Infinite", "physicalSurface": 2, "bTypes": [
|
||||
{"type": "transparent"}
|
||||
]}
|
||||
],
|
||||
"boundaryEM": [
|
||||
{"name": "Cathode", "type": "dirichlet", "potential": -10.0, "physicalSurface": 1},
|
||||
|
|
|
|||
20004
runs/1D_Cathode/mesh.msh
20004
runs/1D_Cathode/mesh.msh
File diff suppressed because it is too large
Load diff
|
|
@ -17,12 +17,30 @@
|
|||
{"name": "Electron", "type": "charged", "mass": 9.109e-31, "charge":-1.0, "weight": 1.0e1}
|
||||
],
|
||||
"boundary": [
|
||||
{"name": "Ionization Chanber", "type": "absorption", "physicalSurface": 1},
|
||||
{"name": "Vacuum Chamber", "type": "absorption", "physicalSurface": 2},
|
||||
{"name": "Exterior", "type": "reflection", "physicalSurface": 3},
|
||||
{"name": "Grid Extraction", "type": "absorption", "physicalSurface": 4},
|
||||
{"name": "Grid Acceleration", "type": "absorption", "physicalSurface": 5},
|
||||
{"name": "Axis", "type": "axis", "physicalSurface": 6}
|
||||
{"name": "Ionization Chanber", "physicalSurface": 1, "bTypes": [
|
||||
{"type": "transparent"},
|
||||
{"type": "transparent"}
|
||||
]},
|
||||
{"name": "Vacuum Chamber", "physicalSurface": 2, "bTypes": [
|
||||
{"type": "transparent"},
|
||||
{"type": "transparent"}
|
||||
]},
|
||||
{"name": "Exterior", "physicalSurface": 3, "bTypes": [
|
||||
{"type": "reflection"},
|
||||
{"type": "reflection"}
|
||||
]},
|
||||
{"name": "Grid Extraction", "physicalSurface": 4, "bTypes": [
|
||||
{"type": "absorption"},
|
||||
{"type": "absorption"}
|
||||
]},
|
||||
{"name": "Grid Acceleration", "physicalSurface": 5, "bTypes": [
|
||||
{"type": "absorption"},
|
||||
{"type": "absorption"}
|
||||
]},
|
||||
{"name": "Axis", "physicalSurface": 6, "bTypes": [
|
||||
{"type": "axis"},
|
||||
{"type": "axis"}
|
||||
]}
|
||||
],
|
||||
"boundaryEM": [
|
||||
{"name": "Extraction Grid", "type": "dirichlet", "potential": -150.0, "physicalSurface": 4},
|
||||
|
|
|
|||
|
|
@ -17,12 +17,30 @@
|
|||
{"name": "Electron", "type": "charged", "mass": 9.109e-31, "charge":-1.0, "weight": 1.0e1}
|
||||
],
|
||||
"boundary": [
|
||||
{"name": "Ionization Chanber", "type": "absorption", "physicalSurface": 1},
|
||||
{"name": "Vacuum Chamber", "type": "absorption", "physicalSurface": 2},
|
||||
{"name": "Exterior", "type": "reflection", "physicalSurface": 3},
|
||||
{"name": "Grid Extraction", "type": "absorption", "physicalSurface": 4},
|
||||
{"name": "Grid Acceleration", "type": "absorption", "physicalSurface": 5},
|
||||
{"name": "Axis", "type": "axis", "physicalSurface": 6}
|
||||
{"name": "Ionization Chanber", "physicalSurface": 1, "bTypes": [
|
||||
{"type": "transparent"},
|
||||
{"type": "transparent"}
|
||||
]},
|
||||
{"name": "Vacuum Chamber", "physicalSurface": 2, "bTypes": [
|
||||
{"type": "transparent"},
|
||||
{"type": "transparent"}
|
||||
]},
|
||||
{"name": "Exterior", "physicalSurface": 3, "bTypes": [
|
||||
{"type": "reflection"},
|
||||
{"type": "reflection"}
|
||||
]},
|
||||
{"name": "Grid Extraction", "physicalSurface": 4, "bTypes": [
|
||||
{"type": "absorption"},
|
||||
{"type": "absorption"}
|
||||
]},
|
||||
{"name": "Grid Acceleration", "physicalSurface": 5, "bTypes": [
|
||||
{"type": "absorption"},
|
||||
{"type": "absorption"}
|
||||
]},
|
||||
{"name": "Axis", "physicalSurface": 6, "bTypes": [
|
||||
{"type": "axis"},
|
||||
{"type": "axis"}
|
||||
]}
|
||||
],
|
||||
"boundaryEM": [
|
||||
{"name": "Extraction Grid", "type": "dirichlet", "potential": -150.0, "physicalSurface": 4},
|
||||
114
runs/ALPHIE_Grid/mesh.geo
Normal file
114
runs/ALPHIE_Grid/mesh.geo
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
Lz = 0.0100;
|
||||
Lr = 0.0006;
|
||||
zg1 = 0.0025;
|
||||
tg1 = 0.0004;
|
||||
rg1 = 0.0005;
|
||||
dg = 0.0025;
|
||||
zg2 = zg1+tg1+dg;
|
||||
tg2 = tg1;
|
||||
rg2 = rg1;
|
||||
|
||||
Lcell = 0.0001;
|
||||
|
||||
Point(1) = { 0, 0, 0, 1};
|
||||
Point(2) = { zg1, 0, 0, 1};
|
||||
Point(3) = {zg1+tg1, 0, 0, 1};
|
||||
Point(4) = { zg2, 0, 0, 1};
|
||||
Point(5) = {zg2+tg2, 0, 0, 1};
|
||||
Point(6) = { Lz, 0, 0, 1};
|
||||
Point(7) = { Lz, rg2, 0, 1};
|
||||
Point(8) = { Lz, Lr, 0, 1};
|
||||
Point(9) = {zg2+tg2, Lr, 0, 1};
|
||||
Point(10) = {zg2+tg2, rg2, 0, 1};
|
||||
Point(11) = { zg2, rg2, 0, 1};
|
||||
Point(12) = { zg2, Lr, 0, 1};
|
||||
Point(13) = {zg1+tg1, Lr, 0, 1};
|
||||
Point(14) = {zg1+tg1, rg1, 0, 1};
|
||||
Point(15) = { zg1, rg1, 0, 1};
|
||||
Point(16) = { zg1, Lr, 0, 1};
|
||||
Point(17) = { 0, Lr, 0, 1};
|
||||
Point(18) = { 0, rg1, 0, 1};
|
||||
|
||||
Line(1) = {1, 2};
|
||||
Line(2) = {2, 3};
|
||||
Line(3) = {3, 4};
|
||||
Line(4) = {4, 5};
|
||||
Line(5) = {5, 6};
|
||||
Line(6) = {6, 7};
|
||||
Line(7) = {7, 8};
|
||||
Line(8) = {8, 9};
|
||||
Line(9) = {9, 10};
|
||||
Line(10) = {10, 11};
|
||||
Line(11) = {11, 12};
|
||||
Line(12) = {12, 13};
|
||||
Line(13) = {13, 14};
|
||||
Line(14) = {14, 15};
|
||||
Line(15) = {15, 16};
|
||||
Line(16) = {16, 17};
|
||||
Line(17) = {17, 18};
|
||||
Line(18) = {18, 1};
|
||||
Line(19) = {2, 15};
|
||||
Line(20) = {3, 14};
|
||||
Line(21) = {4, 11};
|
||||
Line(22) = {5, 10};
|
||||
Line(23) = {10, 7};
|
||||
Line(24) = {14, 11};
|
||||
Line(25) = {18, 15};
|
||||
|
||||
Line Loop(1) = {1, 19, -25, 18};
|
||||
Plane Surface(1) = {1};
|
||||
Line Loop(2) = {2, 20, 14,-19};
|
||||
Plane Surface(2) = {2};
|
||||
Line Loop(3) = {3, 21, -24,-20};
|
||||
Plane Surface(3) = {3};
|
||||
Line Loop(4) = {4, 22, 10,-21};
|
||||
Plane Surface(4) = {4};
|
||||
Line Loop(5) = {5, 6, -23,-22};
|
||||
Plane Surface(5) = {5};
|
||||
Line Loop(6) = {23, 7, 8, 9};
|
||||
Plane Surface(6) = {6};
|
||||
Line Loop(7) = {24, 11, 12, 13};
|
||||
Plane Surface(7) = {7};
|
||||
Line Loop(8) = {25, 15, 16, 17};
|
||||
Plane Surface(8) = {8};
|
||||
|
||||
Physical Line(1) = {18, 17};
|
||||
Physical Line(2) = {6, 7};
|
||||
Physical Line(3) = {16, 12, 8};
|
||||
Physical Line(4) = {15, 14, 13};
|
||||
Physical Line(5) = {11, 10, 9};
|
||||
Physical Line(6) = {1, 2, 3, 4, 5};
|
||||
|
||||
Physical Surface(1) = {1};
|
||||
Physical Surface(2) = {2};
|
||||
Physical Surface(3) = {3};
|
||||
Physical Surface(4) = {4};
|
||||
Physical Surface(5) = {5};
|
||||
Physical Surface(6) = {6};
|
||||
Physical Surface(7) = {7};
|
||||
Physical Surface(8) = {8};
|
||||
|
||||
Transfinite Line {1, 25, 16} = zg1/Lcell + 1 Using Progression 1;
|
||||
Transfinite Line {2, 14, 4, 10} = tg1/Lcell + 1 Using Progression 1;
|
||||
Transfinite Line {3, 24, 12} = dg/Lcell + 1 Using Progression 1;
|
||||
Transfinite Line {5, 23, 8} = (Lz-tg2-zg2)/Lcell + 1 Using Progression 1;
|
||||
Transfinite Line {18, 19, 20, 21, 22, 6} = rg1/Lcell + 1 Using Progression 1;
|
||||
Transfinite Line {17, 15, 13, 11, 9, 7} = (Lr-rg1)/Lcell + 1 Using Progression 1;
|
||||
|
||||
|
||||
#Transfinite Surface{1};
|
||||
#Recombine Surface {1};
|
||||
#Transfinite Surface{2};
|
||||
#Recombine Surface {2};
|
||||
#Transfinite Surface{3};
|
||||
#Recombine Surface {3};
|
||||
#Transfinite Surface{4};
|
||||
#Recombine Surface {4};
|
||||
#Transfinite Surface{5};
|
||||
#Recombine Surface {5};
|
||||
#Transfinite Surface{6};
|
||||
#Recombine Surface {6};
|
||||
#Transfinite Surface{7};
|
||||
#Recombine Surface {7};
|
||||
#Transfinite Surface{8};
|
||||
#Recombine Surface {8};
|
||||
68
runs/Argon_Expansion/CX_case.json
Normal file
68
runs/Argon_Expansion/CX_case.json
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
{
|
||||
"output": {
|
||||
"path": "./runs/Argon_Expansion/",
|
||||
"triggerOutput": 10,
|
||||
"cpuTime": false,
|
||||
"numColl": true
|
||||
},
|
||||
"geometry": {
|
||||
"type": "2DCyl",
|
||||
"meshType": "gmsh",
|
||||
"meshFile": "mesh.msh"
|
||||
},
|
||||
"species": [
|
||||
{"name": "Argon", "type": "neutral", "mass": 6.633e-26, "weight": 1.0e8, "ion": "Argon+"},
|
||||
{"name": "Argon+", "type": "charged", "mass": 6.633e-26, "weight": 1.0e8, "charge": 1.0, "neutral": "Argon"}
|
||||
],
|
||||
"boundary": [
|
||||
{"name": "Injection", "physicalSurface": 1, "bTypes": [
|
||||
{"type": "transparent"},
|
||||
{"type": "transparent"}
|
||||
]},
|
||||
{"name": "Exterior", "physicalSurface": 2, "bTypes": [
|
||||
{"type": "transparent"},
|
||||
{"type": "transparent"}
|
||||
]},
|
||||
{"name": "Axis", "physicalSurface": 3, "bTypes": [
|
||||
{"type": "axis"},
|
||||
{"type": "axis"}
|
||||
]}
|
||||
],
|
||||
"inject": [
|
||||
{"name": "Exhausts Ar", "species": "Argon", "flow": 0.7, "units": "sccm", "v": 300.0, "T": [300.0, 300.0, 300.0],
|
||||
"velDist": ["Maxwellian", "Maxwellian", "Maxwellian"], "n": [1, 0, 0], "physicalSurface": 1},
|
||||
{"name": "Exhausts Ar+", "species": "Argon+", "flow": 0.3, "units": "sccm", "v": 40000.0, "T": [300.0, 300.0, 300.0],
|
||||
"velDist": ["Maxwellian", "Maxwellian", "Maxwellian"], "n": [1, 0, 0], "physicalSurface": 1}
|
||||
],
|
||||
"reference": {
|
||||
"density": 1.0e19,
|
||||
"mass": 6.633e-26,
|
||||
"temperature": 300.0,
|
||||
"radius": 1.88e-10
|
||||
},
|
||||
"case": {
|
||||
"tau": [1.0e-6, 1.0e-6],
|
||||
"time": 4.0e-3,
|
||||
"pusher": ["2DCylNeutral", "2DCylNeutral"],
|
||||
"WeightingScheme": "Volume"
|
||||
},
|
||||
"interactions": {
|
||||
"folderCollisions": "./data/collisions/",
|
||||
"collisions": [
|
||||
{"species_i": "Argon", "species_j": "Argon",
|
||||
"cTypes": [
|
||||
{"type": "elastic", "crossSection": "EL_Ar-Ar.dat"}
|
||||
]},
|
||||
{"species_i": "Argon", "species_j": "Argon+",
|
||||
"cTypes": [
|
||||
{"type": "elastic", "crossSection": "EL_Ar-Ar.dat"},
|
||||
{"type": "chargeExchange", "crossSection": "CX_Ar-Ar+.dat"}
|
||||
]}
|
||||
]
|
||||
},
|
||||
"parallel": {
|
||||
"OpenMP":{
|
||||
"nThreads": 24
|
||||
}
|
||||
}
|
||||
}
|
||||
67
runs/Argon_Expansion/base_case.json
Normal file
67
runs/Argon_Expansion/base_case.json
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
"output": {
|
||||
"path": "./runs/Argon_Expansion/",
|
||||
"triggerOutput": 10,
|
||||
"cpuTime": false,
|
||||
"numColl": false
|
||||
},
|
||||
"geometry": {
|
||||
"type": "2DCyl",
|
||||
"meshType": "gmsh",
|
||||
"meshFile": "mesh.msh"
|
||||
},
|
||||
"species": [
|
||||
{"name": "Argon", "type": "neutral", "mass": 6.633e-26, "weight": 1.0e8, "ion": "Argon+"},
|
||||
{"name": "Argon+", "type": "charged", "mass": 6.633e-26, "weight": 1.0e8, "charge": 1.0, "neutral": "Argon"}
|
||||
],
|
||||
"boundary": [
|
||||
{"name": "Injection", "physicalSurface": 1, "bTypes": [
|
||||
{"type": "transparent"},
|
||||
{"type": "transparent"}
|
||||
]},
|
||||
{"name": "Exterior", "physicalSurface": 2, "bTypes": [
|
||||
{"type": "transparent"},
|
||||
{"type": "transparent"}
|
||||
]},
|
||||
{"name": "Axis", "physicalSurface": 3, "bTypes": [
|
||||
{"type": "axis"},
|
||||
{"type": "axis"}
|
||||
]}
|
||||
],
|
||||
"inject": [
|
||||
{"name": "Exhausts Ar", "species": "Argon", "flow": 0.7, "units": "sccm", "v": 300.0, "T": [300.0, 300.0, 300.0],
|
||||
"velDist": ["Maxwellian", "Maxwellian", "Maxwellian"], "n": [1, 0, 0], "physicalSurface": 1},
|
||||
{"name": "Exhausts Ar+", "species": "Argon+", "flow": 0.3, "units": "sccm", "v": 40000.0, "T": [300.0, 300.0, 300.0],
|
||||
"velDist": ["Maxwellian", "Maxwellian", "Maxwellian"], "n": [1, 0, 0], "physicalSurface": 1}
|
||||
],
|
||||
"reference": {
|
||||
"density": 1.0e19,
|
||||
"mass": 6.633e-26,
|
||||
"temperature": 300.0,
|
||||
"radius": 1.88e-10
|
||||
},
|
||||
"case": {
|
||||
"tau": [1.0e-6, 1.0e-6],
|
||||
"time": 4.0e-3,
|
||||
"pusher": ["2DCylNeutral", "2DCylNeutral"],
|
||||
"WeightingScheme": "Volume"
|
||||
},
|
||||
"interactions": {
|
||||
"folderCollisions": "./data/collisions/",
|
||||
"collisions": [
|
||||
{"species_i": "Argon", "species_j": "Argon",
|
||||
"cTypes": [
|
||||
{"type": "elastic", "crossSection": "EL_Ar-Ar.dat"}
|
||||
]},
|
||||
{"species_i": "Argon", "species_j": "Argon+",
|
||||
"cTypes": [
|
||||
{"type": "elastic", "crossSection": "EL_Ar-Ar.dat"}
|
||||
]}
|
||||
]
|
||||
},
|
||||
"parallel": {
|
||||
"OpenMP":{
|
||||
"nThreads": 8
|
||||
}
|
||||
}
|
||||
}
|
||||
1010
runs/Argon_Expansion/mesh.msh
Normal file
1010
runs/Argon_Expansion/mesh.msh
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -14,11 +14,21 @@
|
|||
{"name": "Argon", "type": "neutral", "mass": 6.633e-26, "weight": 5.0e8}
|
||||
],
|
||||
"boundary": [
|
||||
{"name": "Injection", "type": "absorption", "physicalSurface": 1},
|
||||
{"name": "Chamber Walls", "type": "reflection", "physicalSurface": 2},
|
||||
{"name": "Exterior", "type": "absorption", "physicalSurface": 3},
|
||||
{"name": "Cylinder Walls", "type": "reflection", "physicalSurface": 4},
|
||||
{"name": "Axis", "type": "axis", "physicalSurface": 5}
|
||||
{"name": "Injection", "physicalSurface": 1, "bTypes": [
|
||||
{"type": "transparent"}
|
||||
]},
|
||||
{"name": "Chamber Walls", "physicalSurface": 2, "bTypes": [
|
||||
{"type": "reflection"}
|
||||
]},
|
||||
{"name": "Exterior", "physicalSurface": 3, "bTypes": [
|
||||
{"type": "transparent"}
|
||||
]},
|
||||
{"name": "Cylinder Walls", "physicalSurface": 4, "bTypes": [
|
||||
{"type": "reflection"}
|
||||
]},
|
||||
{"name": "Axis", "physicalSurface": 5, "bTypes": [
|
||||
{"type": "axis"}
|
||||
]}
|
||||
],
|
||||
"inject": [
|
||||
{"name": "Nozzle", "species": "Argon", "flow": 10.0, "units": "sccm", "v": 300.0, "T": [300.0, 300.0, 300.0],
|
||||
|
|
@ -31,15 +41,18 @@
|
|||
"radius": 1.88e-10
|
||||
},
|
||||
"case": {
|
||||
"tau": [6.0e-7],
|
||||
"time": 3.0e-3,
|
||||
"tau": [5.0e-7],
|
||||
"time": 1.0e-3,
|
||||
"pusher": ["2DCylNeutral"],
|
||||
"WeightingScheme": "Volume"
|
||||
},
|
||||
"interactions": {
|
||||
"folderCollisions": "./data/collisions/",
|
||||
"collisions": [
|
||||
{"species_i": "Argon", "species_j": "Argon", "crossSections": ["Ar-Ar_Elastic.dat"]}
|
||||
{"species_i": "Argon", "species_j": "Argon",
|
||||
"cTypes": [
|
||||
{"type": "elastic", "crossSection": "EL_Ar-Ar.dat"}
|
||||
]}
|
||||
]
|
||||
},
|
||||
"parallel": {
|
||||
|
|
|
|||
|
|
@ -2,12 +2,11 @@
|
|||
PROGRAM fpakc
|
||||
USE moduleInput
|
||||
USE moduleErrors
|
||||
USE OMP_LIB
|
||||
USE moduleInject
|
||||
USE moduleSolver
|
||||
USE moduleOutput
|
||||
USE moduleCompTime
|
||||
USE moduleMesh
|
||||
USE moduleCaseParam
|
||||
USE OMP_LIB
|
||||
IMPLICIT NONE
|
||||
|
||||
! t = time step
|
||||
|
|
@ -27,8 +26,17 @@ PROGRAM fpakc
|
|||
!Reads the json configuration file
|
||||
CALL readConfig(inputFile)
|
||||
|
||||
!$OMP PARALLEL DEFAULT(SHARED)
|
||||
!$OMP SINGLE
|
||||
CALL verboseError("Initial scatter of particles...")
|
||||
!$OMP END SINGLE
|
||||
CALL doScatter()
|
||||
|
||||
!$OMP SINGLE
|
||||
CALL verboseError("Calculating initial EM field...")
|
||||
!$OMP END SINGLE
|
||||
CALL doEMField()
|
||||
!$OMP END PARALLEL
|
||||
|
||||
tStep = omp_get_wtime() - tStep
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ OBJECTS = $(OBJDIR)/moduleMesh.o $(OBJDIR)/moduleCompTime.o $(OBJDIR)/moduleSolv
|
|||
$(OBJDIR)/moduleErrors.o $(OBJDIR)/moduleList.o $(OBJDIR)/moduleOutput.o \
|
||||
$(OBJDIR)/moduleBoundary.o $(OBJDIR)/moduleCaseParam.o $(OBJDIR)/moduleRefParam.o \
|
||||
$(OBJDIR)/moduleCollisions.o $(OBJDIR)/moduleTable.o $(OBJDIR)/moduleParallel.o \
|
||||
$(OBJDIR)/moduleEM.o \
|
||||
$(OBJDIR)/moduleEM.o $(OBJDIR)/moduleRandom.o \
|
||||
$(OBJDIR)/moduleMeshCyl.o $(OBJDIR)/moduleMeshCylRead.o $(OBJDIR)/moduleMeshCylBoundary.o \
|
||||
$(OBJDIR)/moduleMesh1DCart.o $(OBJDIR)/moduleMesh1DCartRead.o $(OBJDIR)/moduleMesh1DCartBoundary.o \
|
||||
$(OBJDIR)/moduleMesh1DRad.o $(OBJDIR)/moduleMesh1DRadRead.o $(OBJDIR)/moduleMesh1DRadBoundary.o
|
||||
|
|
|
|||
|
|
@ -2,20 +2,20 @@
|
|||
OBJS = moduleCaseParam.o moduleCompTime.o moduleList.o \
|
||||
moduleOutput.o moduleInput.o moduleSolver.o \
|
||||
moduleCollisions.o moduleTable.o moduleParallel.o \
|
||||
moduleEM.o
|
||||
moduleEM.o moduleRandom.o
|
||||
|
||||
all: $(OBJS) mesh.o
|
||||
|
||||
mesh.o: moduleCollisions.o moduleBoundary.o
|
||||
$(MAKE) -C mesh all
|
||||
|
||||
moduleCollisions.o: moduleTable.o moduleSpecies.o moduleRefParam.o moduleConstParam.o moduleCollisions.f90
|
||||
moduleCollisions.o: moduleRandom.o moduleTable.o moduleSpecies.o moduleRefParam.o moduleConstParam.o moduleCollisions.f90
|
||||
$(FC) $(FCFLAGS) -c $(subst .o,.f90,$@) -o $(OBJDIR)/$@
|
||||
|
||||
moduleInput.o: moduleParallel.o moduleRefParam.o moduleCaseParam.o moduleSolver.o moduleInject.o moduleBoundary.o moduleErrors.o moduleSpecies.o moduleInput.f90
|
||||
$(FC) $(FCFLAGS) -c $(subst .o,.f90,$@) -o $(OBJDIR)/$@
|
||||
|
||||
moduleInject.o: moduleSpecies.o moduleSolver.o moduleInject.f90
|
||||
moduleInject.o: moduleRandom.o moduleSpecies.o moduleSolver.o moduleInject.f90
|
||||
$(FC) $(FCFLAGS) -c $(subst .o,.f90,$@) -o $(OBJDIR)/$@
|
||||
|
||||
moduleList.o: moduleSpecies.o moduleErrors.o moduleList.f90
|
||||
|
|
@ -24,6 +24,9 @@ moduleList.o: moduleSpecies.o moduleErrors.o moduleList.f90
|
|||
moduleOutput.o: moduleSpecies.o moduleRefParam.o moduleOutput.f90
|
||||
$(FC) $(FCFLAGS) -c $(subst .o,.f90,$@) -o $(OBJDIR)/$@
|
||||
|
||||
moduleRandom.o: moduleConstParam.o moduleRandom.f90
|
||||
$(FC) $(FCFLAGS) -c $(subst .o,.f90,$@) -o $(OBJDIR)/$@
|
||||
|
||||
moduleRefParam.o: moduleConstParam.o moduleRefParam.f90
|
||||
$(FC) $(FCFLAGS) -c $(subst .o,.f90,$@) -o $(OBJDIR)/$@
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ MODULE moduleMesh1DCart
|
|||
|
||||
END TYPE meshNode1DCart
|
||||
|
||||
TYPE, PUBLIC, ABSTRACT, EXTENDS(meshEdge):: meshEdge1DCart
|
||||
TYPE, PUBLIC, EXTENDS(meshEdge):: meshEdge1DCart
|
||||
!Element coordinates
|
||||
REAL(8):: x = 0.D0
|
||||
!Connectivity to nodes
|
||||
|
|
@ -23,10 +23,50 @@ MODULE moduleMesh1DCart
|
|||
CONTAINS
|
||||
PROCEDURE, PASS:: init => initEdge1DCart
|
||||
PROCEDURE, PASS:: getNodes => getNodes1DCart
|
||||
PROCEDURE, PASS:: randPos => randPos1DCart
|
||||
PROCEDURE, PASS:: randPos => randPosEdge
|
||||
|
||||
END TYPE meshEdge1DCart
|
||||
|
||||
!Boundary functions defined in the submodule Boundary
|
||||
INTERFACE
|
||||
MODULE SUBROUTINE reflection(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE reflection
|
||||
|
||||
MODULE SUBROUTINE absorption(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE absorption
|
||||
|
||||
MODULE SUBROUTINE transparent(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE transparent
|
||||
|
||||
MODULE SUBROUTINE wallTemperature(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE wallTemperature
|
||||
|
||||
END INTERFACE
|
||||
|
||||
TYPE, PUBLIC, ABSTRACT, EXTENDS(meshVol):: meshVol1DCart
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: detJac => detJ1DCart
|
||||
|
|
@ -70,6 +110,7 @@ MODULE moduleMesh1DCart
|
|||
REAL(8):: arNodes(1:2)
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: init => initVol1DCartSegm
|
||||
PROCEDURE, PASS:: randPos => randPos1DCartSeg
|
||||
PROCEDURE, PASS:: area => areaSegm
|
||||
PROCEDURE, NOPASS:: fPsi => fPsiSegm
|
||||
PROCEDURE, NOPASS:: dPsi => dPsiSegm
|
||||
|
|
@ -83,7 +124,6 @@ MODULE moduleMesh1DCart
|
|||
PROCEDURE, PASS:: getNodes => getNodesSegm
|
||||
PROCEDURE, PASS:: phy2log => phy2logSegm
|
||||
PROCEDURE, PASS:: nextElement => nextElementSegm
|
||||
PROCEDURE, PASS:: resetOutput => resetOutputSegm
|
||||
|
||||
END TYPE meshVol1DCartSegm
|
||||
|
||||
|
|
@ -122,6 +162,9 @@ MODULE moduleMesh1DCart
|
|||
!EDGE FUNCTIONS
|
||||
!Inits edge element
|
||||
SUBROUTINE initEdge1DCart(self, n, p, bt, physicalSurface)
|
||||
USE moduleSpecies
|
||||
USE moduleBoundary
|
||||
USE moduleErrors
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge1DCart), INTENT(out):: self
|
||||
|
|
@ -130,6 +173,7 @@ MODULE moduleMesh1DCart
|
|||
INTEGER, INTENT(in):: bt
|
||||
INTEGER, INTENT(in):: physicalSurface
|
||||
REAL(8), DIMENSION(1:3):: r1
|
||||
INTEGER:: s
|
||||
|
||||
self%n = n
|
||||
self%n1 => mesh%nodes(p(1))%obj
|
||||
|
|
@ -141,7 +185,30 @@ MODULE moduleMesh1DCart
|
|||
self%normal = (/ 1.D0, 0.D0, 0.D0 /)
|
||||
|
||||
!Boundary index
|
||||
self%bt = bt
|
||||
self%boundary => boundary(bt)
|
||||
ALLOCATE(self%fboundary(1:nSpecies))
|
||||
!Assign functions to boundary
|
||||
DO s = 1, nSpecies
|
||||
SELECT TYPE(obj => self%boundary%bTypes(s)%obj)
|
||||
TYPE IS(boundaryAbsorption)
|
||||
self%fBoundary(s)%apply => absorption
|
||||
|
||||
TYPE IS(boundaryReflection)
|
||||
self%fBoundary(s)%apply => reflection
|
||||
|
||||
TYPE IS(boundaryTransparent)
|
||||
self%fBoundary(s)%apply => transparent
|
||||
|
||||
TYPE IS(boundaryWallTemperature)
|
||||
self%fBoundary(s)%apply => wallTemperature
|
||||
|
||||
CLASS DEFAULT
|
||||
CALL criticalError("Boundary type not defined in this geometry", 'initEdge1DCart')
|
||||
|
||||
END SELECT
|
||||
|
||||
END DO
|
||||
|
||||
!Physical Surface
|
||||
self%physicalSurface = physicalSurface
|
||||
|
||||
|
|
@ -160,13 +227,13 @@ MODULE moduleMesh1DCart
|
|||
END FUNCTION getNodes1DCart
|
||||
|
||||
!Calculates a 'random' position in edge
|
||||
FUNCTION randPos1DCart(self) RESULT(r)
|
||||
FUNCTION randPosEdge(self) RESULT(r)
|
||||
CLASS(meshEdge1DCart), INTENT(in):: self
|
||||
REAL(8):: r(1:3)
|
||||
|
||||
r = (/ self%x, 0.D0, 0.D0 /)
|
||||
|
||||
END FUNCTION randPos1DCart
|
||||
END FUNCTION randPosEdge
|
||||
|
||||
!VOLUME FUNCTIONS
|
||||
!SEGMENT FUNCTIONS
|
||||
|
|
@ -199,6 +266,24 @@ MODULE moduleMesh1DCart
|
|||
|
||||
END SUBROUTINE initVol1DCartSegm
|
||||
|
||||
!Calculates a random position in 1D volume
|
||||
FUNCTION randPos1DCartSeg(self) RESULT(r)
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVol1DCartSegm), INTENT(in):: self
|
||||
REAL(8):: r(1:3)
|
||||
REAL(8):: xii(1:3)
|
||||
REAL(8), ALLOCATABLE:: fPsi(:)
|
||||
|
||||
xii(1) = random(-1.D0, 1.D0)
|
||||
xii(2:3) = 0.D0
|
||||
|
||||
fPsi = self%fPsi(xii)
|
||||
r(1) = DOT_PRODUCT(fPsi, self%x)
|
||||
|
||||
END FUNCTION randPos1DCartSeg
|
||||
|
||||
!Computes element area
|
||||
PURE SUBROUTINE areaSegm(self)
|
||||
IMPLICIT NONE
|
||||
|
|
@ -412,30 +497,8 @@ MODULE moduleMesh1DCart
|
|||
|
||||
END SUBROUTINE nextElementSegm
|
||||
|
||||
!Reset the output of nodes in element
|
||||
PURE SUBROUTINE resetOutputSegm(self)
|
||||
USE moduleSpecies
|
||||
USE moduleOutput
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVol1DCartSegm), INTENT(inout):: self
|
||||
INTEGER:: k
|
||||
|
||||
DO k = 1, nSpecies
|
||||
self%n1%output(k)%den = 0.D0
|
||||
self%n1%output(k)%mom = 0.D0
|
||||
self%n1%output(k)%tensorS = 0.D0
|
||||
|
||||
self%n2%output(k)%den = 0.D0
|
||||
self%n2%output(k)%mom = 0.D0
|
||||
self%n2%output(k)%tensorS = 0.D0
|
||||
|
||||
END DO
|
||||
|
||||
END SUBROUTINE resetOutputSegm
|
||||
|
||||
|
||||
!COMMON FUNCTIONS FOR 1D VOLUME ELEMENTS
|
||||
!Calculates a random position in 1D volume
|
||||
!Computes the element Jacobian determinant
|
||||
PURE FUNCTION detJ1DCart(self, xi, dPsi_in) RESULT(dJ)
|
||||
IMPLICIT NONE
|
||||
|
|
|
|||
|
|
@ -1,40 +1,91 @@
|
|||
MODULE moduleMesh1DCartBoundary
|
||||
SUBMODULE (moduleMesh1DCart) moduleMesh1DCartBoundary
|
||||
USE moduleMesh1DCart
|
||||
|
||||
TYPE, PUBLIC, EXTENDS(meshEdge1DCart):: meshEdge1DCartRef
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: fBoundary => reflection
|
||||
|
||||
END TYPE meshEdge1DCartRef
|
||||
|
||||
TYPE, PUBLIC, EXTENDS(meshEdge1DCart):: meshEdge1DCartAbs
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: fBoundary => absorption
|
||||
|
||||
END TYPE meshEdge1DCartAbs
|
||||
|
||||
CONTAINS
|
||||
SUBROUTINE reflection(self, part)
|
||||
SUBROUTINE reflection(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge1DCartRef), INTENT(inout):: self
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
part%v(1) = -part%v(1)
|
||||
part%r(1) = 2.D0*self%x - part%r(1)
|
||||
SELECT TYPE(edge)
|
||||
TYPE IS(meshEdge1DCart)
|
||||
part%v(1) = -part%v(1)
|
||||
part%r(1) = 2.D0*edge%x - part%r(1)
|
||||
|
||||
END SELECT
|
||||
|
||||
END SUBROUTINE reflection
|
||||
|
||||
SUBROUTINE absorption(self, part)
|
||||
SUBROUTINE absorption(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge1DCartAbs), INTENT(inout):: self
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
REAL(8):: rEdge(1) !Position of particle in the edge
|
||||
REAL(8):: d !Distance from particle to edge
|
||||
|
||||
SELECT TYPE(edge)
|
||||
TYPE IS(meshEdge1DCart)
|
||||
rEdge(1) = edge%x
|
||||
d = DABS(part%r(1) - rEdge(1))
|
||||
|
||||
IF (d > 0.D0) THEN
|
||||
part%weight = part%weight / d
|
||||
part%r(1) = rEdge(1)
|
||||
|
||||
END IF
|
||||
|
||||
IF (ASSOCIATED(edge%e1)) THEN
|
||||
CALL edge%e1%scatter(part)
|
||||
|
||||
ELSE
|
||||
CALL edge%e2%scatter(part)
|
||||
|
||||
END IF
|
||||
|
||||
END SELECT
|
||||
|
||||
part%n_in = .FALSE.
|
||||
|
||||
END SUBROUTINE absorption
|
||||
|
||||
END MODULE moduleMesh1DCartBoundary
|
||||
SUBROUTINE transparent(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
part%n_in = .FALSE.
|
||||
|
||||
END SUBROUTINE transparent
|
||||
|
||||
SUBROUTINE wallTemperature(edge, part)
|
||||
USE moduleSpecies
|
||||
USE moduleBoundary
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
!Modifies particle velocity according to wall temperature
|
||||
SELECT TYPE(bound => edge%boundary%bTypes(part%sp)%obj)
|
||||
TYPE IS(boundaryWallTemperature)
|
||||
part%v(1) = part%v(1) + bound%vTh*randomMaxwellian()
|
||||
|
||||
END SELECT
|
||||
|
||||
SELECT TYPE(edge)
|
||||
TYPE IS(meshEdge1DCart)
|
||||
part%v(1) = -part%v(1)
|
||||
part%r(1) = 2.D0*edge%x - part%r(1)
|
||||
|
||||
END SELECT
|
||||
|
||||
END SUBROUTINE wallTemperature
|
||||
|
||||
END SUBMODULE moduleMesh1DCartBoundary
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
MODULE moduleMesh1DCartRead
|
||||
USE moduleMesh
|
||||
USE moduleMesh1DCart
|
||||
USE moduleMesh1DCartBoundary
|
||||
|
||||
!TODO: make this abstract to allow different mesh formats
|
||||
TYPE, EXTENDS(meshGeneric):: mesh1DCartGeneric
|
||||
|
|
@ -107,14 +106,8 @@ MODULE moduleMesh1DCartRead
|
|||
READ(10, *) n, elemType, eTemp, boundaryType, eTemp, p(1)
|
||||
!Associate boundary condition
|
||||
bt = getBoundaryId(boundaryType)
|
||||
SELECT CASE(boundary(bt)%obj%boundaryType)
|
||||
CASE ('reflection')
|
||||
ALLOCATE(meshEdge1DCartRef:: self%edges(e)%obj)
|
||||
|
||||
CASE ('absorption')
|
||||
ALLOCATE(meshEdge1DCartAbs:: self%edges(e)%obj)
|
||||
|
||||
END SELECT
|
||||
ALLOCATE(meshEdge1DCart:: self%edges(e)%obj)
|
||||
|
||||
CALL self%edges(e)%obj%init(n, p(1:1), bt, boundaryType)
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ MODULE moduleMesh1DRad
|
|||
|
||||
END TYPE meshNode1DRad
|
||||
|
||||
TYPE, PUBLIC, ABSTRACT, EXTENDS(meshEdge):: meshEdge1DRad
|
||||
TYPE, PUBLIC, EXTENDS(meshEdge):: meshEdge1DRad
|
||||
!Element coordinates
|
||||
REAL(8):: r = 0.D0
|
||||
!Connectivity to nodes
|
||||
|
|
@ -27,6 +27,46 @@ MODULE moduleMesh1DRad
|
|||
|
||||
END TYPE meshEdge1DRad
|
||||
|
||||
!Boundary functions defined in the submodule Boundary
|
||||
INTERFACE
|
||||
MODULE SUBROUTINE reflection(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE reflection
|
||||
|
||||
MODULE SUBROUTINE absorption(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE absorption
|
||||
|
||||
MODULE SUBROUTINE transparent(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE transparent
|
||||
|
||||
MODULE SUBROUTINE wallTemperature(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE wallTemperature
|
||||
|
||||
END INTERFACE
|
||||
|
||||
TYPE, PUBLIC, ABSTRACT, EXTENDS(meshVol):: meshVol1DRad
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: detJac => detJ1DRad
|
||||
|
|
@ -35,7 +75,7 @@ MODULE moduleMesh1DRad
|
|||
PROCEDURE(dPsi_interface), DEFERRED, NOPASS:: dPsi
|
||||
PROCEDURE(partialDer_interface), DEFERRED, PASS:: partialDer
|
||||
|
||||
END TYPE meshVol1Drad
|
||||
END TYPE meshVol1DRad
|
||||
|
||||
ABSTRACT INTERFACE
|
||||
PURE FUNCTION fPsi_interface(xi) RESULT(fPsi)
|
||||
|
|
@ -71,6 +111,7 @@ MODULE moduleMesh1DRad
|
|||
REAL(8):: arNodes(1:2)
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: init => initVol1DRadSegm
|
||||
PROCEDURE, PASS:: randPos => randPos1DRadSeg
|
||||
PROCEDURE, PASS:: area => areaRad
|
||||
PROCEDURE, NOPASS:: fPsi => fPsiRad
|
||||
PROCEDURE, NOPASS:: dPsi => dPsiRad
|
||||
|
|
@ -84,7 +125,6 @@ MODULE moduleMesh1DRad
|
|||
PROCEDURE, PASS:: getNodes => getNodesRad
|
||||
PROCEDURE, PASS:: phy2log => phy2logRad
|
||||
PROCEDURE, PASS:: nextElement => nextElementRad
|
||||
PROCEDURE, PASS:: resetOutput => resetOutputRad
|
||||
|
||||
END TYPE meshVol1DRadSegm
|
||||
|
||||
|
|
@ -123,6 +163,9 @@ MODULE moduleMesh1DRad
|
|||
!EDGE FUNCTIONS
|
||||
!Inits edge element
|
||||
SUBROUTINE initEdge1DRad(self, n, p, bt, physicalSurface)
|
||||
USE moduleSpecies
|
||||
USE moduleBoundary
|
||||
USE moduleErrors
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge1DRad), INTENT(out):: self
|
||||
|
|
@ -131,6 +174,7 @@ MODULE moduleMesh1DRad
|
|||
INTEGER, INTENT(in):: bt
|
||||
INTEGER, INTENT(in):: physicalSurface
|
||||
REAL(8), DIMENSION(1:3):: r1
|
||||
INTEGER:: s
|
||||
|
||||
self%n = n
|
||||
self%n1 => mesh%nodes(p(1))%obj
|
||||
|
|
@ -142,7 +186,30 @@ MODULE moduleMesh1DRad
|
|||
self%normal = (/ 1.D0, 0.D0, 0.D0 /)
|
||||
|
||||
!Boundary index
|
||||
self%bt = bt
|
||||
self%boundary => boundary(bt)
|
||||
ALLOCATE(self%fboundary(1:nSpecies))
|
||||
!Assign functions to boundary
|
||||
DO s = 1, nSpecies
|
||||
SELECT TYPE(obj => self%boundary%bTypes(s)%obj)
|
||||
TYPE IS(boundaryAbsorption)
|
||||
self%fBoundary(s)%apply => absorption
|
||||
|
||||
TYPE IS(boundaryReflection)
|
||||
self%fBoundary(s)%apply => reflection
|
||||
|
||||
TYPE IS(boundaryTransparent)
|
||||
self%fBoundary(s)%apply => transparent
|
||||
|
||||
TYPE IS(boundaryWallTemperature)
|
||||
self%fBoundary(s)%apply => wallTemperature
|
||||
|
||||
CLASS DEFAULT
|
||||
CALL criticalError("Boundary type not defined in this geometry", 'initEdge1DRad')
|
||||
|
||||
END SELECT
|
||||
|
||||
END DO
|
||||
|
||||
!Physical Surface
|
||||
self%physicalSurface = physicalSurface
|
||||
|
||||
|
|
@ -200,6 +267,24 @@ MODULE moduleMesh1DRad
|
|||
|
||||
END SUBROUTINE initVol1DRadSegm
|
||||
|
||||
!Calculates a random position in 1D volume
|
||||
FUNCTION randPos1DRadSeg(self) RESULT(r)
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVol1DRadSegm), INTENT(in):: self
|
||||
REAL(8):: r(1:3)
|
||||
REAL(8):: xii(1:3)
|
||||
REAL(8), ALLOCATABLE:: fPsi(:)
|
||||
|
||||
xii(1) = random(-1.D0, 1.D0)
|
||||
xii(2:3) = 0.D0
|
||||
|
||||
fPsi = self%fPsi(xii)
|
||||
r(1) = DOT_PRODUCT(fPsi, self%r)
|
||||
|
||||
END FUNCTION randPos1DRadSeg
|
||||
|
||||
!Computes element area
|
||||
PURE SUBROUTINE areaRad(self)
|
||||
IMPLICIT NONE
|
||||
|
|
@ -267,7 +352,7 @@ MODULE moduleMesh1DRad
|
|||
|
||||
!Computes local stiffness matrix
|
||||
PURE FUNCTION elemKRad(self) RESULT(ke)
|
||||
USE moduleConstParam, ONLY: PI
|
||||
USE moduleConstParam, ONLY: PI2
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVol1DRadSegm), INTENT(in):: self
|
||||
|
|
@ -286,12 +371,12 @@ MODULE moduleMesh1DRad
|
|||
ke(1,:) = (/ dPsi(1,1)*dPsi(1,1), dPsi(1,1)*dPsi(1,2) /)
|
||||
ke(2,:) = (/ dPsi(1,2)*dPsi(1,1), dPsi(1,2)*dPsi(1,2) /)
|
||||
ke = 2.D0*ke*invJ
|
||||
ke = ke*r*2.D0*PI
|
||||
ke = ke*r*PI2
|
||||
|
||||
END FUNCTION elemKRad
|
||||
|
||||
PURE FUNCTION elemFRad(self, source) RESULT(localF)
|
||||
USE moduleConstParam, ONLY: PI
|
||||
USE moduleConstParam, ONLY: PI2
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVol1DRadSegm), INTENT(in):: self
|
||||
|
|
@ -308,7 +393,7 @@ MODULE moduleMesh1DRad
|
|||
r = DOT_PRODUCT(fPsi,self%r)
|
||||
ALLOCATE(localF(1:2))
|
||||
localF = 2.D0*DOT_PRODUCT(fPsi, source)*detJ
|
||||
localF = localF*r*2.D0*PI
|
||||
localF = localF*r*PI2
|
||||
|
||||
END FUNCTION elemFRad
|
||||
|
||||
|
|
@ -424,29 +509,6 @@ MODULE moduleMesh1DRad
|
|||
|
||||
END SUBROUTINE nextElementRad
|
||||
|
||||
!Reset the output of nodes in element
|
||||
PURE SUBROUTINE resetOutputRad(self)
|
||||
USE moduleSpecies
|
||||
USE moduleOutput
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVol1DRadSegm), INTENT(inout):: self
|
||||
INTEGER:: k
|
||||
|
||||
DO k = 1, nSpecies
|
||||
self%n1%output(k)%den = 0.D0
|
||||
self%n1%output(k)%mom = 0.D0
|
||||
self%n1%output(k)%tensorS = 0.D0
|
||||
|
||||
self%n2%output(k)%den = 0.D0
|
||||
self%n2%output(k)%mom = 0.D0
|
||||
self%n2%output(k)%tensorS = 0.D0
|
||||
|
||||
END DO
|
||||
|
||||
END SUBROUTINE resetOutputRad
|
||||
|
||||
|
||||
!COMMON FUNCTIONS FOR 1D VOLUME ELEMENTS
|
||||
!Computes the element Jacobian determinant
|
||||
PURE FUNCTION detJ1DRad(self, xi, dPsi_in) RESULT(dJ)
|
||||
|
|
|
|||
|
|
@ -1,40 +1,93 @@
|
|||
MODULE moduleMesh1DRadBoundary
|
||||
SUBMODULE (moduleMesh1DRad) moduleMesh1DRadBoundary
|
||||
USE moduleMesh1DRad
|
||||
|
||||
TYPE, PUBLIC, EXTENDS(meshEdge1DRad):: meshEdge1DRadRef
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: fBoundary => reflection
|
||||
|
||||
END TYPE meshEdge1DRadRef
|
||||
|
||||
TYPE, PUBLIC, EXTENDS(meshEdge1DRad):: meshEdge1DRadAbs
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: fBoundary => absorption
|
||||
|
||||
END TYPE meshEdge1DRadAbs
|
||||
|
||||
CONTAINS
|
||||
SUBROUTINE reflection(self, part)
|
||||
SUBROUTINE reflection(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge1DRadRef), INTENT(inout):: self
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
part%v(1) = -part%v(1)
|
||||
part%r(1) = 2.D0*self%r - part%r(1)
|
||||
SELECT TYPE(edge)
|
||||
TYPE IS(meshEdge1DRad)
|
||||
part%v(1) = -part%v(1)
|
||||
part%r(1) = 2.D0*edge%r - part%r(1)
|
||||
|
||||
END SELECT
|
||||
|
||||
part%n_in = .TRUE.
|
||||
|
||||
END SUBROUTINE reflection
|
||||
|
||||
SUBROUTINE absorption(self, part)
|
||||
SUBROUTINE absorption(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge1DRadAbs), INTENT(inout):: self
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
REAL(8):: rEdge(1) !Position of particle in the edge
|
||||
REAL(8):: d !Distance from particle to edge
|
||||
|
||||
SELECT TYPE(edge)
|
||||
TYPE IS(meshEdge1DRad)
|
||||
rEdge(1) = edge%r
|
||||
d = DABS(part%r(1) - rEdge(1))
|
||||
|
||||
IF (d > 0.D0) THEN
|
||||
part%weight = part%weight / d
|
||||
part%r(1) = rEdge(1)
|
||||
|
||||
END IF
|
||||
|
||||
IF (ASSOCIATED(edge%e1)) THEN
|
||||
CALL edge%e1%scatter(part)
|
||||
|
||||
ELSE
|
||||
CALL edge%e2%scatter(part)
|
||||
|
||||
END IF
|
||||
|
||||
END SELECT
|
||||
|
||||
part%n_in = .FALSE.
|
||||
|
||||
END SUBROUTINE absorption
|
||||
|
||||
END MODULE moduleMesh1DRadBoundary
|
||||
SUBROUTINE transparent(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
part%n_in = .FALSE.
|
||||
|
||||
END SUBROUTINE transparent
|
||||
|
||||
SUBROUTINE wallTemperature(edge, part)
|
||||
USE moduleSpecies
|
||||
USE moduleBoundary
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
!Modifies particle velocity according to wall temperature
|
||||
SELECT TYPE(bound => edge%boundary%bTypes(part%sp)%obj)
|
||||
TYPE IS(boundaryWallTemperature)
|
||||
part%v(1) = part%v(1) + bound%vTh*randomMaxwellian()
|
||||
|
||||
END SELECT
|
||||
|
||||
SELECT TYPE(edge)
|
||||
TYPE IS(meshEdge1DRad)
|
||||
part%v(1) = -part%v(1)
|
||||
part%r(1) = 2.D0*edge%r - part%r(1)
|
||||
|
||||
END SELECT
|
||||
|
||||
END SUBROUTINE wallTemperature
|
||||
|
||||
END SUBMODULE moduleMesh1DRadBoundary
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
MODULE moduleMesh1DRadRead
|
||||
USE moduleMesh
|
||||
USE moduleMesh1DRad
|
||||
USE moduleMesh1DRadBoundary
|
||||
|
||||
!TODO: make this abstract to allow different mesh formats
|
||||
TYPE, EXTENDS(meshGeneric):: mesh1DRadGeneric
|
||||
|
|
@ -107,14 +106,8 @@ MODULE moduleMesh1DRadRead
|
|||
READ(10, *) n, elemType, eTemp, boundaryType, eTemp, p(1)
|
||||
!Associate boundary condition
|
||||
bt = getBoundaryId(boundaryType)
|
||||
SELECT CASE(boundary(bt)%obj%boundaryType)
|
||||
CASE ('reflection')
|
||||
ALLOCATE(meshEdge1DRadRef:: self%edges(e)%obj)
|
||||
|
||||
CASE ('absorption')
|
||||
ALLOCATE(meshEdge1DRadAbs:: self%edges(e)%obj)
|
||||
|
||||
END SELECT
|
||||
ALLOCATE(meshEdge1DRad:: self%edges(e)%obj)
|
||||
|
||||
CALL self%edges(e)%obj%init(n, p(1:1), bt, boundaryType)
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ MODULE moduleMeshCyl
|
|||
|
||||
END TYPE meshNodeCyl
|
||||
|
||||
TYPE, PUBLIC, ABSTRACT, EXTENDS(meshEdge):: meshEdgeCyl
|
||||
TYPE, PUBLIC, EXTENDS(meshEdge):: meshEdgeCyl
|
||||
!Element coordinates
|
||||
REAL(8):: r(1:2) = 0.D0, z(1:2) = 0.D0
|
||||
!Connectivity to nodes
|
||||
|
|
@ -31,10 +31,59 @@ MODULE moduleMeshCyl
|
|||
CONTAINS
|
||||
PROCEDURE, PASS:: init => initEdgeCyl
|
||||
PROCEDURE, PASS:: getNodes => getNodesCyl
|
||||
PROCEDURE, PASS:: randPos => randPosCyl
|
||||
PROCEDURE, PASS:: randPos => randPosEdge
|
||||
|
||||
END TYPE meshEdgeCyl
|
||||
|
||||
!Boundary functions defined in the submodule Boundary
|
||||
INTERFACE
|
||||
MODULE SUBROUTINE reflection(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE reflection
|
||||
|
||||
MODULE SUBROUTINE absorption(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE absorption
|
||||
|
||||
MODULE SUBROUTINE wallTemperature(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE wallTemperature
|
||||
|
||||
MODULE SUBROUTINE transparent(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE transparent
|
||||
|
||||
MODULE SUBROUTINE symmetryAxis(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE symmetryAxis
|
||||
|
||||
END INTERFACE
|
||||
|
||||
TYPE, PUBLIC, ABSTRACT, EXTENDS(meshVol):: meshVolCyl
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: detJac => detJCyl
|
||||
|
|
@ -68,6 +117,7 @@ MODULE moduleMeshCyl
|
|||
|
||||
END INTERFACE
|
||||
|
||||
!Quadrilateral volume element
|
||||
TYPE, PUBLIC, EXTENDS(meshVolCyl):: meshVolCylQuad
|
||||
!Element coordinates
|
||||
REAL(8):: r(1:4) = 0.D0, z(1:4) = 0.D0
|
||||
|
|
@ -79,6 +129,7 @@ MODULE moduleMeshCyl
|
|||
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: init => initVolQuadCyl
|
||||
PROCEDURE, PASS:: randPos => randPosVolQuad
|
||||
PROCEDURE, PASS:: area => areaQuad
|
||||
PROCEDURE, NOPASS:: fPsi => fPsiQuad
|
||||
PROCEDURE, NOPASS:: dPsi => dPsiQuad
|
||||
|
|
@ -94,10 +145,10 @@ MODULE moduleMeshCyl
|
|||
PROCEDURE, PASS:: getNodes => getNodesQuad
|
||||
PROCEDURE, PASS:: phy2log => phy2logQuad
|
||||
PROCEDURE, PASS:: nextElement => nextElementQuad
|
||||
PROCEDURE, PASS:: resetOutput => resetOutputQuad
|
||||
|
||||
END TYPE meshVolCylQuad
|
||||
|
||||
!Triangular volume element
|
||||
TYPE, PUBLIC, EXTENDS(meshVolCyl):: meshVolCylTria
|
||||
!Element coordinates
|
||||
REAL(8):: r(1:3) = 0.D0, z(1:3) = 0.D0
|
||||
|
|
@ -111,6 +162,7 @@ MODULE moduleMeshCyl
|
|||
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: init => initVolTriaCyl
|
||||
PROCEDURE, PASS:: randPos => randPosVolTria
|
||||
PROCEDURE, PASS:: area => areaTria
|
||||
PROCEDURE, NOPASS:: fPsi => fPsiTria
|
||||
PROCEDURE, NOPASS:: dPsi => dPsiTria
|
||||
|
|
@ -126,12 +178,10 @@ MODULE moduleMeshCyl
|
|||
PROCEDURE, PASS:: getNodes => getNodesTria
|
||||
PROCEDURE, PASS:: phy2log => phy2logTria
|
||||
PROCEDURE, PASS:: nextElement => nextElementTria
|
||||
PROCEDURE, PASS:: resetOutput => resetOutputTria
|
||||
|
||||
END TYPE meshVolCylTria
|
||||
|
||||
CONTAINS
|
||||
|
||||
!NODE FUNCTIONS
|
||||
!Inits node element
|
||||
SUBROUTINE initNodeCyl(self, n, r)
|
||||
|
|
@ -154,6 +204,7 @@ MODULE moduleMeshCyl
|
|||
|
||||
END SUBROUTINE initNodeCyl
|
||||
|
||||
!Get coordinates from node
|
||||
PURE FUNCTION getCoordCyl(self) RESULT(r)
|
||||
IMPLICIT NONE
|
||||
|
||||
|
|
@ -167,6 +218,9 @@ MODULE moduleMeshCyl
|
|||
!EDGE FUNCTIONS
|
||||
!Inits edge element
|
||||
SUBROUTINE initEdgeCyl(self, n, p, bt, physicalSurface)
|
||||
USE moduleSpecies
|
||||
USE moduleBoundary
|
||||
USE moduleErrors
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdgeCyl), INTENT(out):: self
|
||||
|
|
@ -175,6 +229,7 @@ MODULE moduleMeshCyl
|
|||
INTEGER, INTENT(in):: bt
|
||||
INTEGER, INTENT(in):: physicalSurface
|
||||
REAL(8), DIMENSION(1:3):: r1, r2
|
||||
INTEGER:: s
|
||||
|
||||
self%n = n
|
||||
self%n1 => mesh%nodes(p(1))%obj
|
||||
|
|
@ -189,12 +244,60 @@ MODULE moduleMeshCyl
|
|||
self%z(2)-self%z(1), &
|
||||
0.D0 /)
|
||||
!Boundary index
|
||||
self%bt = bt
|
||||
!Phyiscal Surface
|
||||
self%boundary => boundary(bt)
|
||||
ALLOCATE(self%fboundary(1:nSpecies))
|
||||
!Assign functions to boundary
|
||||
DO s = 1, nSpecies
|
||||
SELECT TYPE(obj => self%boundary%bTypes(s)%obj)
|
||||
TYPE IS(boundaryAbsorption)
|
||||
self%fBoundary(s)%apply => absorption
|
||||
|
||||
TYPE IS(boundaryReflection)
|
||||
self%fBoundary(s)%apply => reflection
|
||||
|
||||
TYPE IS(boundaryTransparent)
|
||||
self%fBoundary(s)%apply => transparent
|
||||
|
||||
TYPE IS(boundaryWallTemperature)
|
||||
self%fBoundary(s)%apply => wallTemperature
|
||||
|
||||
TYPE IS(boundaryAxis)
|
||||
self%fBoundary(s)%apply => symmetryAxis
|
||||
|
||||
CLASS DEFAULT
|
||||
CALL criticalError("Boundary type not defined in this geometry", 'initEdgeCyl')
|
||||
|
||||
END SELECT
|
||||
|
||||
END DO
|
||||
|
||||
!Physical surface
|
||||
self%physicalSurface = physicalSurface
|
||||
|
||||
END SUBROUTINE initEdgeCyl
|
||||
|
||||
!Random position in quadrilateral volume
|
||||
FUNCTION randPosVolQuad(self) RESULT(r)
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVolCylQuad), INTENT(in):: self
|
||||
REAL(8):: r(1:3)
|
||||
REAL(8):: xii(1:3)
|
||||
REAL(8), ALLOCATABLE:: fPsi(:)
|
||||
|
||||
xii(1) = random(-1.D0, 1.D0)
|
||||
xii(2) = random(-1.D0, 1.D0)
|
||||
xii(3) = 0.D0
|
||||
|
||||
fPsi = self%fPsi(xii)
|
||||
|
||||
r(1) = DOT_PRODUCT(fPsi, self%z)
|
||||
r(2) = DOT_PRODUCT(fPsi, self%r)
|
||||
r(3) = 0.D0
|
||||
|
||||
END FUNCTION randposVolQuad
|
||||
|
||||
!Get nodes from edge
|
||||
PURE FUNCTION getNodesCyl(self) RESULT(n)
|
||||
IMPLICIT NONE
|
||||
|
|
@ -208,20 +311,23 @@ MODULE moduleMeshCyl
|
|||
END FUNCTION getNodesCyl
|
||||
|
||||
!Calculates a random position in edge
|
||||
FUNCTION randPosCyl(self) RESULT(r)
|
||||
FUNCTION randPosEdge(self) RESULT(r)
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdgeCyl), INTENT(in):: self
|
||||
REAL(8):: rnd
|
||||
REAL(8):: r(1:3)
|
||||
REAL(8):: p1(1:2), p2(1:2)
|
||||
|
||||
CALL RANDOM_NUMBER(rnd)
|
||||
rnd = random()
|
||||
|
||||
p1 = (/self%z(1), self%r(1) /)
|
||||
p2 = (/self%z(2), self%r(2) /)
|
||||
r(1:2) = (1.D0 - rnd)*p1 + rnd*p2
|
||||
r(3) = 0.D0
|
||||
|
||||
END FUNCTION randPosCyl
|
||||
END FUNCTION randPosEdge
|
||||
|
||||
!VOLUME FUNCTIONS
|
||||
!QUAD FUNCTIONS
|
||||
|
|
@ -263,7 +369,7 @@ MODULE moduleMeshCyl
|
|||
|
||||
!Computes element area
|
||||
PURE SUBROUTINE areaQuad(self)
|
||||
USE moduleConstParam
|
||||
USE moduleConstParam, ONLY: PI8
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVolCylQuad), INTENT(inout):: self
|
||||
|
|
@ -275,7 +381,7 @@ MODULE moduleMeshCyl
|
|||
self%arNodes = 0.D0
|
||||
!2D 1 point Gauss Quad Integral
|
||||
xi = 0.D0
|
||||
detJ = self%detJac(xi)*8.D0*PI !4*2*pi
|
||||
detJ = self%detJac(xi)*PI8 !4*2*pi
|
||||
fPsi = self%fPsi(xi)
|
||||
r = DOT_PRODUCT(fPsi,self%r)
|
||||
self%volume = r*detJ
|
||||
|
|
@ -360,7 +466,7 @@ MODULE moduleMeshCyl
|
|||
|
||||
!Computes element local stiffness matrix
|
||||
PURE FUNCTION elemKQuad(self) RESULT(ke)
|
||||
USE moduleConstParam, ONLY: PI
|
||||
USE moduleConstParam, ONLY: PI2
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVolCylQuad), INTENT(in):: self
|
||||
|
|
@ -387,13 +493,13 @@ MODULE moduleMeshCyl
|
|||
|
||||
END DO
|
||||
END DO
|
||||
ke = ke*2.D0*PI
|
||||
ke = ke*PI2
|
||||
|
||||
END FUNCTION elemKQuad
|
||||
|
||||
!Computes the local source vector for a force f
|
||||
PURE FUNCTION elemFQuad(self, source) RESULT(localF)
|
||||
USE moduleConstParam
|
||||
USE moduleConstParam, ONLY: PI2
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVolCylQuad), INTENT(in):: self
|
||||
|
|
@ -419,7 +525,7 @@ MODULE moduleMeshCyl
|
|||
|
||||
END DO
|
||||
END DO
|
||||
localF = localF*2.D0*PI
|
||||
localF = localF*PI2
|
||||
|
||||
END FUNCTION elemFQuad
|
||||
|
||||
|
|
@ -579,36 +685,6 @@ MODULE moduleMeshCyl
|
|||
|
||||
END SUBROUTINE nextElementQuad
|
||||
|
||||
!Reset the output of nodes in quad element
|
||||
PURE SUBROUTINE resetOutputQuad(self)
|
||||
USE moduleSpecies
|
||||
USE moduleOutput
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVolCylQuad), INTENT(inout):: self
|
||||
INTEGER:: k
|
||||
|
||||
DO k = 1, nSpecies
|
||||
self%n1%output(k)%den = 0.D0
|
||||
self%n1%output(k)%mom = 0.D0
|
||||
self%n1%output(k)%tensorS = 0.D0
|
||||
|
||||
self%n2%output(k)%den = 0.D0
|
||||
self%n2%output(k)%mom = 0.D0
|
||||
self%n2%output(k)%tensorS = 0.D0
|
||||
|
||||
self%n3%output(k)%den = 0.D0
|
||||
self%n3%output(k)%mom = 0.D0
|
||||
self%n3%output(k)%tensorS = 0.D0
|
||||
|
||||
self%n4%output(k)%den = 0.D0
|
||||
self%n4%output(k)%mom = 0.D0
|
||||
self%n4%output(k)%tensorS = 0.D0
|
||||
|
||||
END DO
|
||||
|
||||
END SUBROUTINE resetOutputQuad
|
||||
|
||||
!TRIA ELEMENT
|
||||
!Init tria element
|
||||
SUBROUTINE initVolTriaCyl(self, n, p)
|
||||
|
|
@ -660,9 +736,31 @@ MODULE moduleMeshCyl
|
|||
|
||||
END SUBROUTINE initVolTriaCyl
|
||||
|
||||
!Random position in quadrilateral volume
|
||||
FUNCTION randPosVolTria(self) RESULT(r)
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVolCylTria), INTENT(in):: self
|
||||
REAL(8):: r(1:3)
|
||||
REAL(8):: xii(1:3)
|
||||
REAL(8), ALLOCATABLE:: fPsi(:)
|
||||
|
||||
xii(1) = random( 0.D0, 1.D0)
|
||||
xii(2) = random( 0.D0, 1.D0)
|
||||
xii(3) = 0.D0
|
||||
|
||||
fPsi = self%fPsi(xii)
|
||||
|
||||
r(1) = DOT_PRODUCT(fPsi, self%z)
|
||||
r(2) = DOT_PRODUCT(fPsi, self%r)
|
||||
r(3) = 0.D0
|
||||
|
||||
END FUNCTION randposVolTria
|
||||
|
||||
!Calculates area for triangular element
|
||||
PURE SUBROUTINE areaTria(self)
|
||||
USE moduleConstParam
|
||||
USE moduleConstParam, ONLY: PI
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVolCylTria), INTENT(inout):: self
|
||||
|
|
@ -753,7 +851,7 @@ MODULE moduleMeshCyl
|
|||
|
||||
!Computes element local stiffness matrix
|
||||
PURE FUNCTION elemKTria(self) RESULT(ke)
|
||||
USE moduleConstParam
|
||||
USE moduleConstParam, ONLY: PI2
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVolCylTria), INTENT(in):: self
|
||||
|
|
@ -777,13 +875,13 @@ MODULE moduleMeshCyl
|
|||
ke = ke + MATMUL(TRANSPOSE(MATMUL(invJ,dPsi)),MATMUL(invJ,dPsi))*r*wTria(l)/detJ
|
||||
|
||||
END DO
|
||||
ke = ke*2.D0*PI
|
||||
ke = ke*PI2
|
||||
|
||||
END FUNCTION elemKTria
|
||||
|
||||
!Computes element local source vector
|
||||
PURE FUNCTION elemFTria(self, source) RESULT(localF)
|
||||
USE moduleConstParam
|
||||
USE moduleConstParam, ONLY: PI2
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVolCylTria), INTENT(in):: self
|
||||
|
|
@ -808,7 +906,7 @@ MODULE moduleMeshCyl
|
|||
localF = localF + r*f*fPsi*wTria(l)*detJ
|
||||
|
||||
END DO
|
||||
localF = localF*2.D0*PI
|
||||
localF = localF*PI2
|
||||
|
||||
END FUNCTION elemFTria
|
||||
|
||||
|
|
@ -942,33 +1040,6 @@ MODULE moduleMeshCyl
|
|||
|
||||
END SUBROUTINE nextElementTria
|
||||
|
||||
!Reset the output of nodes in tria element
|
||||
PURE SUBROUTINE resetOutputTria(self)
|
||||
USE moduleSpecies
|
||||
USE moduleOutput
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVolCylTria), INTENT(inout):: self
|
||||
INTEGER:: k
|
||||
|
||||
DO k = 1, nSpecies
|
||||
self%n1%output(k)%den = 0.D0
|
||||
self%n1%output(k)%mom = 0.D0
|
||||
self%n1%output(k)%tensorS = 0.D0
|
||||
|
||||
self%n2%output(k)%den = 0.D0
|
||||
self%n2%output(k)%mom = 0.D0
|
||||
self%n2%output(k)%tensorS = 0.D0
|
||||
|
||||
self%n3%output(k)%den = 0.D0
|
||||
self%n3%output(k)%mom = 0.D0
|
||||
self%n3%output(k)%tensorS = 0.D0
|
||||
|
||||
END DO
|
||||
|
||||
END SUBROUTINE resetOutputTria
|
||||
|
||||
|
||||
!COMMON FUNCTIONS FOR CYLINDRICAL VOLUME ELEMENTS
|
||||
!Computes element Jacobian determinant
|
||||
PURE FUNCTION detJCyl(self, xi, dPsi_in) RESULT(dJ)
|
||||
|
|
|
|||
|
|
@ -1,80 +1,164 @@
|
|||
!moduleMeshCylBoundary: Edge elements for Cylindrical mesh.
|
||||
MODULE moduleMeshCylBoundary
|
||||
!moduleMeshCylBoundary: Boundary functions for cylindrical coordinates
|
||||
SUBMODULE (moduleMeshCyl) moduleMeshCylBoundary
|
||||
USE moduleMeshCyl
|
||||
|
||||
TYPE, PUBLIC, EXTENDS(meshEdgeCyl):: meshEdgeCylRef
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: fBoundary => reflection
|
||||
|
||||
END TYPE meshEdgeCylRef
|
||||
|
||||
TYPE, PUBLIC, EXTENDS(meshEdgeCyl):: meshEdgeCylAbs
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: fBoundary => absorption
|
||||
|
||||
END TYPE meshEdgeCylAbs
|
||||
|
||||
TYPE, PUBLIC, EXTENDS(meshEdgeCyl):: meshEdgeCylAxis
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: fBoundary => symmetryAxis
|
||||
|
||||
END TYPE meshEdgeCylAxis
|
||||
|
||||
CONTAINS
|
||||
SUBROUTINE reflection(self, part)
|
||||
SUBROUTINE reflection(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdgeCylRef), INTENT(inout):: self
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
REAL(8):: edgeNorm, cosT, sinT, rp(1:2), rpp(1:2), vpp(1:2)
|
||||
|
||||
edgeNorm = DSQRT((self%r(2)-self%r(1))**2 + (self%z(2)-self%z(1))**2)
|
||||
cosT = (self%z(2)-self%z(1))/edgeNorm
|
||||
sinT = DSQRT(1-cosT**2)
|
||||
!TODO: Try to do this without select
|
||||
SELECT TYPE(edge)
|
||||
TYPE IS(meshEdgeCyl)
|
||||
edgeNorm = DSQRT((edge%r(2)-edge%r(1))**2 + (edge%z(2)-edge%z(1))**2)
|
||||
cosT = (edge%z(2)-edge%z(1))/edgeNorm
|
||||
sinT = DSQRT(1-cosT**2)
|
||||
|
||||
rp(1) = part%r(1) - self%z(1);
|
||||
rp(2) = part%r(2) - self%r(1);
|
||||
rp(1) = part%r(1) - edge%z(1);
|
||||
rp(2) = part%r(2) - edge%r(1);
|
||||
|
||||
rpp(1) = cosT*rp(1) - sinT*rp(2)
|
||||
rpp(2) = sinT*rp(1) + cosT*rp(2)
|
||||
rpp(2) = -rpp(2)
|
||||
rpp(1) = cosT*rp(1) - sinT*rp(2)
|
||||
rpp(2) = sinT*rp(1) + cosT*rp(2)
|
||||
rpp(2) = -rpp(2)
|
||||
|
||||
vpp(1) = cosT*part%v(1) - sinT*part%v(2)
|
||||
vpp(2) = sinT*part%v(1) + cosT*part%v(2)
|
||||
vpp(2) = -vpp(2)
|
||||
vpp(1) = cosT*part%v(1) - sinT*part%v(2)
|
||||
vpp(2) = sinT*part%v(1) + cosT*part%v(2)
|
||||
vpp(2) = -vpp(2)
|
||||
|
||||
part%r(1) = cosT*rpp(1) + sinT*rpp(2) + self%z(1);
|
||||
part%r(2) = -sinT*rpp(1) + cosT*rpp(2) + self%r(1);
|
||||
part%v(1) = cosT*vpp(1) + sinT*vpp(2)
|
||||
part%v(2) = -sinT*vpp(1) + cosT*vpp(2)
|
||||
part%r(1) = cosT*rpp(1) + sinT*rpp(2) + edge%z(1);
|
||||
part%r(2) = -sinT*rpp(1) + cosT*rpp(2) + edge%r(1);
|
||||
part%v(1) = cosT*vpp(1) + sinT*vpp(2)
|
||||
part%v(2) = -sinT*vpp(1) + cosT*vpp(2)
|
||||
|
||||
END SELECT
|
||||
|
||||
part%n_in = .TRUE.
|
||||
|
||||
END SUBROUTINE reflection
|
||||
|
||||
!Absoption in a surface
|
||||
SUBROUTINE absorption(self, part)
|
||||
SUBROUTINE absorption(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdgeCylAbs), INTENT(inout):: self
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
REAL(8):: rEdge(1:2) !Position of particle projected to the edge
|
||||
REAL(8):: a, b, c
|
||||
REAL(8):: a2b2
|
||||
REAL(8):: d !Distance from particle to edge
|
||||
|
||||
SELECT TYPE(edge)
|
||||
TYPE IS(meshEdgeCyl)
|
||||
a = (edge%z(1) - edge%z(2))
|
||||
b = (edge%r(1) - edge%r(2))
|
||||
c = edge%z(1)*edge%r(2) - edge%z(2)*edge%r(1)
|
||||
|
||||
!TODO: Add scatter to mesh nodes
|
||||
a2b2 = a**2 + b**2
|
||||
|
||||
rEdge(1) = (b*( b*part%r(1) - a*part%r(2)) - a*c)/a2b2
|
||||
rEdge(2) = (a*(-b*part%r(1) + a*part%r(2)) - b*c)/a2b2
|
||||
|
||||
d = NORM2(rEdge - part%r(1:2))
|
||||
!Reduce weight of particle by the distance to the edge and move it to the edge
|
||||
IF (d > 0.D0) THEN
|
||||
part%weight = part%weight / d
|
||||
part%r(1:2) = rEdge
|
||||
|
||||
END IF
|
||||
|
||||
!Scatter particle in associated volume
|
||||
IF (ASSOCIATED(edge%e1)) THEN
|
||||
CALL edge%e1%scatter(part)
|
||||
|
||||
ELSE
|
||||
CALL edge%e2%scatter(part)
|
||||
|
||||
END IF
|
||||
|
||||
END SELECT
|
||||
|
||||
!Remove particle from the domain
|
||||
part%n_in = .FALSE.
|
||||
|
||||
END SUBROUTINE absorption
|
||||
|
||||
SUBROUTINE symmetryAxis(self, part)
|
||||
!Transparent boundary condition
|
||||
SUBROUTINE transparent(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdgeCylAxis), INTENT(inout):: self
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
!Removes particle from domain
|
||||
part%n_in = .FALSE.
|
||||
|
||||
END SUBROUTINE transparent
|
||||
|
||||
!Wall with temperature
|
||||
SUBROUTINE wallTemperature(edge, part)
|
||||
USE moduleSpecies
|
||||
USE moduleBoundary
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
REAL(8):: edgeNorm, cosT, sinT, rp(1:2), rpp(1:2), vpp(1:2)
|
||||
INTEGER:: i
|
||||
|
||||
!Modifies particle velocity according to wall temperature
|
||||
SELECT TYPE(bound => edge%boundary%bTypes(part%sp)%obj)
|
||||
TYPE IS(boundaryWallTemperature)
|
||||
DO i = 1, 3
|
||||
part%v(i) = part%v(i) + bound%vTh*randomMaxwellian()
|
||||
|
||||
END DO
|
||||
|
||||
END SELECT
|
||||
|
||||
!Reflects particle in the edge
|
||||
SELECT TYPE(edge)
|
||||
TYPE IS(meshEdgeCyl)
|
||||
edgeNorm = DSQRT((edge%r(2)-edge%r(1))**2 + (edge%z(2)-edge%z(1))**2)
|
||||
cosT = (edge%z(2)-edge%z(1))/edgeNorm
|
||||
sinT = DSQRT(1-cosT**2)
|
||||
|
||||
rp(1) = part%r(1) - edge%z(1);
|
||||
rp(2) = part%r(2) - edge%r(1);
|
||||
|
||||
rpp(1) = cosT*rp(1) - sinT*rp(2)
|
||||
rpp(2) = sinT*rp(1) + cosT*rp(2)
|
||||
rpp(2) = -rpp(2)
|
||||
|
||||
vpp(1) = cosT*part%v(1) - sinT*part%v(2)
|
||||
vpp(2) = sinT*part%v(1) + cosT*part%v(2)
|
||||
vpp(2) = -vpp(2)
|
||||
|
||||
part%r(1) = cosT*rpp(1) + sinT*rpp(2) + edge%z(1);
|
||||
part%r(2) = -sinT*rpp(1) + cosT*rpp(2) + edge%r(1);
|
||||
part%v(1) = cosT*vpp(1) + sinT*vpp(2)
|
||||
part%v(2) = -sinT*vpp(1) + cosT*vpp(2)
|
||||
|
||||
END SELECT
|
||||
|
||||
part%n_in = .TRUE.
|
||||
|
||||
END SUBROUTINE wallTemperature
|
||||
|
||||
!Symmetry axis. Dummy function
|
||||
SUBROUTINE symmetryAxis(edge, part)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge), INTENT(inout):: edge
|
||||
CLASS(particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE symmetryAxis
|
||||
|
||||
|
||||
END MODULE moduleMeshCylBoundary
|
||||
END SUBMODULE moduleMeshCylBoundary
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
MODULE moduleMeshCylRead
|
||||
USE moduleMesh
|
||||
USE moduleMeshCyl
|
||||
USE moduleMeshCylBoundary
|
||||
|
||||
!TODO: make this abstract to allow different mesh formats
|
||||
TYPE, EXTENDS(meshGeneric):: meshCylGeneric
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: init => initCylMesh
|
||||
|
|
@ -104,17 +102,8 @@ MODULE moduleMeshCylRead
|
|||
READ(10,*) n, elemType, eTemp, boundaryType, eTemp, p(1:2)
|
||||
!Associate boundary condition procedure.
|
||||
bt = getBoundaryId(boundaryType)
|
||||
SELECT CASE(boundary(bt)%obj%boundaryType)
|
||||
CASE ('reflection')
|
||||
ALLOCATE(meshEdgeCylRef:: self%edges(e)%obj)
|
||||
|
||||
CASE ('absorption')
|
||||
ALLOCATE(meshEdgeCylAbs:: self%edges(e)%obj)
|
||||
|
||||
CASE ('axis')
|
||||
ALLOCATE(meshEdgeCylAxis:: self%edges(e)%obj)
|
||||
|
||||
END SELECT
|
||||
ALLOCATE(meshEdgeCyl:: self%edges(e)%obj)
|
||||
|
||||
CALL self%edges(e)%obj%init(n, p(1:2), bt, boundaryType)
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
MODULE moduleMesh
|
||||
USE moduleList
|
||||
USE moduleOutput
|
||||
USE moduleBoundary
|
||||
IMPLICIT NONE
|
||||
|
||||
!Parent of Node element
|
||||
|
|
@ -14,8 +15,9 @@ MODULE moduleMesh
|
|||
TYPE(outputNode), ALLOCATABLE:: output(:)
|
||||
TYPE(emNode):: emData
|
||||
CONTAINS
|
||||
PROCEDURE(initNode_interface), DEFERRED, PASS:: init
|
||||
PROCEDURE(getCoord_interface), DEFERRED, PASS:: getCoordinates
|
||||
PROCEDURE(initNode_interface), DEFERRED, PASS:: init
|
||||
PROCEDURE(getCoord_interface), DEFERRED, PASS:: getCoordinates
|
||||
PROCEDURE, PASS:: resetOutput
|
||||
|
||||
END TYPE meshNode
|
||||
|
||||
|
|
@ -45,6 +47,12 @@ MODULE moduleMesh
|
|||
|
||||
END TYPE meshNodeCont
|
||||
|
||||
!Type for array of boundary functions (one per species)
|
||||
TYPE, PUBLIC:: fBoundaryGeneric
|
||||
PROCEDURE(boundary_interface), POINTER, NOPASS:: apply => NULL()
|
||||
|
||||
END TYPE
|
||||
|
||||
!Parent of Edge element
|
||||
TYPE, PUBLIC, ABSTRACT:: meshEdge
|
||||
!Element index
|
||||
|
|
@ -53,15 +61,16 @@ MODULE moduleMesh
|
|||
CLASS(meshVol), POINTER:: e1 => NULL(), e2 => NULL()
|
||||
!Normal vector
|
||||
REAL(8):: normal(1:3)
|
||||
!Physical surface in mesh
|
||||
!Pointer to boundary element
|
||||
TYPE(boundaryCont), POINTER:: boundary
|
||||
!Array of functions for boundary conditions
|
||||
TYPE(fBoundaryGeneric), ALLOCATABLE:: fBoundary(:)
|
||||
!Physical surface for the edge
|
||||
INTEGER:: physicalSurface
|
||||
!id for boundary condition
|
||||
INTEGER:: bt = 0
|
||||
CONTAINS
|
||||
PROCEDURE(initEdge_interface), DEFERRED, PASS:: init
|
||||
PROCEDURE(boundary_interface), DEFERRED, PASS:: fBoundary
|
||||
PROCEDURE(getNodesEdge_interface), DEFERRED, PASS:: getNodes
|
||||
PROCEDURE(randPos_interface), DEFERRED, PASS:: randPos
|
||||
PROCEDURE(randPosEdge_interface), DEFERRED, PASS:: randPos
|
||||
|
||||
END TYPE meshEdge
|
||||
|
||||
|
|
@ -77,15 +86,6 @@ MODULE moduleMesh
|
|||
|
||||
END SUBROUTINE initEdge_interface
|
||||
|
||||
SUBROUTINE boundary_interface(self, part)
|
||||
USE moduleSpecies
|
||||
|
||||
IMPORT:: meshEdge
|
||||
CLASS (meshEdge), INTENT(inout):: self
|
||||
CLASS (particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE
|
||||
|
||||
PURE FUNCTION getNodesEdge_interface(self) RESULT(n)
|
||||
IMPORT:: meshEdge
|
||||
CLASS(meshEdge), INTENT(in):: self
|
||||
|
|
@ -93,12 +93,24 @@ MODULE moduleMesh
|
|||
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION randPos_interface(self) RESULT(r)
|
||||
FUNCTION randPosEdge_interface(self) RESULT(r)
|
||||
IMPORT:: meshEdge
|
||||
CLASS(meshEdge), INTENT(in):: self
|
||||
REAL(8):: r(1:3)
|
||||
|
||||
END FUNCTION randPos_interface
|
||||
END FUNCTION randPosEdge_interface
|
||||
|
||||
END INTERFACE
|
||||
|
||||
INTERFACE
|
||||
SUBROUTINE boundary_interface(edge, part)
|
||||
USE moduleSpecies
|
||||
|
||||
IMPORT:: meshEdge
|
||||
CLASS (meshEdge), INTENT(inout):: edge
|
||||
CLASS (particle), INTENT(inout):: part
|
||||
|
||||
END SUBROUTINE
|
||||
|
||||
END INTERFACE
|
||||
|
||||
|
|
@ -113,7 +125,7 @@ MODULE moduleMesh
|
|||
!Volume index
|
||||
INTEGER:: n = 0
|
||||
!Maximum collision rate
|
||||
REAL(8):: sigmaVrelMax = 1.D-15
|
||||
REAL(8):: sigmaVrelMax = 0.D0
|
||||
!Volume
|
||||
REAL(8):: volume = 0.D0
|
||||
!List of particles inside the volume
|
||||
|
|
@ -122,20 +134,22 @@ MODULE moduleMesh
|
|||
INTEGER(KIND=OMP_LOCK_KIND):: lock
|
||||
!Number of collisions per volume
|
||||
INTEGER:: nColl = 0
|
||||
!Collisional fraction
|
||||
REAL(8):: collFrac = 0.D0
|
||||
!Total weight of particles inside cell
|
||||
REAL(8):: totalWeight = 0.D0
|
||||
CONTAINS
|
||||
PROCEDURE(initVol_interface), DEFERRED, PASS:: init
|
||||
PROCEDURE(getNodesVol_interface), DEFERRED, PASS:: getNodes
|
||||
PROCEDURE(randPosVol_interface), DEFERRED, PASS:: randPos
|
||||
PROCEDURE(scatter_interface), DEFERRED, PASS:: scatter
|
||||
PROCEDURE(gatherEF_interface), DEFERRED, PASS:: gatherEF
|
||||
PROCEDURE(getNodesVol_interface), DEFERRED, PASS:: getNodes
|
||||
PROCEDURE(elemF_interface), DEFERRED, PASS:: elemF
|
||||
PROCEDURE, PASS:: findCell
|
||||
PROCEDURE(phy2log_interface), DEFERRED, PASS:: phy2log
|
||||
PROCEDURE(inside_interface), DEFERRED, NOPASS:: inside
|
||||
PROCEDURE(nextElement_interface), DEFERRED, PASS:: nextElement
|
||||
PROCEDURE, PASS:: collision
|
||||
PROCEDURE(resetOutput_interface), DEFERRED, PASS:: resetOutput
|
||||
|
||||
END TYPE meshVol
|
||||
|
||||
|
|
@ -204,17 +218,12 @@ MODULE moduleMesh
|
|||
|
||||
END FUNCTION inside_interface
|
||||
|
||||
SUBROUTINE collision_interface(self)
|
||||
FUNCTION randPosVol_interface(self) RESULT(r)
|
||||
IMPORT:: meshVol
|
||||
CLASS(meshVol), INTENT(inout):: self
|
||||
CLASS(meshVol), INTENT(in):: self
|
||||
REAL(8):: r(1:3)
|
||||
|
||||
END SUBROUTINE collision_interface
|
||||
|
||||
PURE SUBROUTINE resetOutput_interface(self)
|
||||
IMPORT:: meshVol
|
||||
CLASS(meshVol), INTENT(inout):: self
|
||||
|
||||
END SUBROUTINE resetOutput_interface
|
||||
END FUNCTION randPosVol_interface
|
||||
|
||||
END INTERFACE
|
||||
|
||||
|
|
@ -298,6 +307,24 @@ MODULE moduleMesh
|
|||
CLASS(meshGeneric), ALLOCATABLE, TARGET:: mesh
|
||||
|
||||
CONTAINS
|
||||
!Reset the output of node
|
||||
PURE SUBROUTINE resetOutput(self)
|
||||
USE moduleSpecies
|
||||
USE moduleOutput
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshNode), INTENT(inout):: self
|
||||
INTEGER:: k
|
||||
|
||||
DO k = 1, nSpecies
|
||||
self%output(k)%den = 0.D0
|
||||
self%output(k)%mom = 0.D0
|
||||
self%output(k)%tensorS = 0.D0
|
||||
|
||||
END DO
|
||||
|
||||
END SUBROUTINE resetOutput
|
||||
|
||||
!Find next cell for particle
|
||||
RECURSIVE SUBROUTINE findCell(self, part, oldCell)
|
||||
USE moduleSpecies
|
||||
|
|
@ -332,8 +359,8 @@ MODULE moduleMesh
|
|||
CALL nextElement%findCell(part, self)
|
||||
|
||||
CLASS IS (meshEdge)
|
||||
!Particle encountered an edge, execute boundary
|
||||
CALL nextElement%fBoundary(part)
|
||||
!Particle encountered an edge, apply boundary
|
||||
CALL nextElement%fBoundary(part%sp)%apply(nextElement,part)
|
||||
!If particle is still inside the domain, call findCell
|
||||
IF (part%n_in) THEN
|
||||
IF(PRESENT(oldCell)) THEN
|
||||
|
|
@ -359,38 +386,45 @@ MODULE moduleMesh
|
|||
USE moduleSpecies
|
||||
USE moduleList
|
||||
use moduleRefParam
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshVol), INTENT(inout):: self
|
||||
INTEGER:: modCollisions !Remain of current iteration and everyCollisions
|
||||
INTEGER:: iterToCollisions !Number of iterations from current to next collision
|
||||
INTEGER:: nPart !Number of particles inside the cell
|
||||
REAL(8):: pMax !Maximum probability of collision
|
||||
INTEGER:: nCollIter !Number of collisions to be computed in this iteration
|
||||
INTEGER:: rnd !random index
|
||||
REAL(8):: rndReal
|
||||
TYPE(particle), POINTER:: part_i, part_j
|
||||
INTEGER:: n !collision
|
||||
INTEGER:: ij, k
|
||||
REAL(8):: sigmaVrelMaxNew
|
||||
TYPE(pointerArray), ALLOCATABLE:: partTemp(:)
|
||||
|
||||
self%nColl = 0
|
||||
nPart = self%listPart_in%amount
|
||||
!Computes iterations if there is more than one particle in the cell
|
||||
IF (nPart > 1) THEN
|
||||
!Probability of collision
|
||||
pMax = self%totalWeight*self%sigmaVrelMax*tauMin/self%volume
|
||||
self%nColl = INT(REAL(nPart)*pMax*0.5D0)
|
||||
|
||||
!Converts the list of particles to an array for easy access
|
||||
!Increases the collisional fraction of the cell
|
||||
self%collFrac = self%collFrac + REAL(nPart)*pMax*0.5D0
|
||||
|
||||
!Number of collisions in the cell
|
||||
self%nColl = FLOOR(self%collFrac)
|
||||
|
||||
IF (self%nColl > 0) THEN
|
||||
!Converts the list of particles to an array for easy access
|
||||
partTemp = self%listPart_in%convert2Array()
|
||||
|
||||
END IF
|
||||
|
||||
DO n = 1, self%nColl
|
||||
!Select random numbers
|
||||
CALL RANDOM_NUMBER(rndReal)
|
||||
rnd = 1 + FLOOR(nPart*rndReal)
|
||||
rnd = random(1, nPart)
|
||||
part_i => partTemp(rnd)%part
|
||||
CALL RANDOM_NUMBER(rndReal)
|
||||
rnd = 1 + FLOOR(nPart*rndReal)
|
||||
rnd = random(1, nPart)
|
||||
part_j => partTemp(rnd)%part
|
||||
ij = interactionIndex(part_i%sp, part_j%sp)
|
||||
sigmaVrelMaxNew = 0.D0
|
||||
|
|
@ -404,19 +438,14 @@ MODULE moduleMesh
|
|||
self%sigmaVrelMax = sigmaVrelMaxNew
|
||||
|
||||
END IF
|
||||
|
||||
!Removes one collision from the collisional fraction
|
||||
self%collFrac = self%collFrac - 1.D0
|
||||
|
||||
END DO
|
||||
|
||||
END IF
|
||||
|
||||
self%totalWeight = 0.D0
|
||||
|
||||
!Reset output in nodes
|
||||
CALL self%resetOutput()
|
||||
|
||||
!Erase the list of particles inside the cell
|
||||
CALL self%listPart_in%erase()
|
||||
|
||||
END SUBROUTINE collision
|
||||
|
||||
SUBROUTINE printOutputGmsh(self, t)
|
||||
|
|
@ -431,12 +460,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)
|
||||
|
|
@ -445,7 +474,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
|
||||
|
|
@ -459,7 +488,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
|
||||
|
|
@ -472,7 +501,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
|
||||
|
|
@ -485,7 +514,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
|
||||
|
|
@ -505,6 +534,7 @@ MODULE moduleMesh
|
|||
SUBROUTINE printCollGmsh(self, t)
|
||||
USE moduleRefParam
|
||||
USE moduleCaseParam
|
||||
USE moduleCollisions
|
||||
USE moduleOutput
|
||||
IMPLICIT NONE
|
||||
|
||||
|
|
@ -513,12 +543,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
|
||||
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
|
||||
|
|
@ -557,14 +587,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,21 +1,61 @@
|
|||
MODULE moduleBoundary
|
||||
|
||||
!Generic type for boundaries
|
||||
TYPE, PUBLIC:: boundaryGeneric
|
||||
INTEGER:: id = 0
|
||||
CHARACTER(:), ALLOCATABLE:: name
|
||||
INTEGER:: physicalSurface = 0
|
||||
CHARACTER(:), ALLOCATABLE:: boundaryType
|
||||
CONTAINS
|
||||
|
||||
END TYPE boundaryGeneric
|
||||
|
||||
TYPE:: boundaryCont
|
||||
!Reflecting boundary
|
||||
TYPE, PUBLIC, EXTENDS(boundaryGeneric):: boundaryReflection
|
||||
CONTAINS
|
||||
|
||||
END TYPE boundaryReflection
|
||||
|
||||
!Absorption boundary
|
||||
TYPE, PUBLIC, EXTENDS(boundaryGeneric):: boundaryAbsorption
|
||||
CONTAINS
|
||||
|
||||
END TYPE boundaryAbsorption
|
||||
|
||||
!Transparent boundary
|
||||
TYPE, PUBLIC, EXTENDS(boundaryGeneric):: boundaryTransparent
|
||||
CONTAINS
|
||||
|
||||
END TYPE boundaryTransparent
|
||||
|
||||
!Transparent boundary
|
||||
TYPE, PUBLIC, EXTENDS(boundaryGeneric):: boundaryWallTemperature
|
||||
!Thermal velocity of the wall: square root(Wall temperature X specific heat)
|
||||
REAL(8):: vTh
|
||||
CONTAINS
|
||||
|
||||
END TYPE boundaryWallTemperature
|
||||
|
||||
!Symmetry axis
|
||||
TYPE, PUBLIC, EXTENDS(boundaryGeneric):: boundaryAxis
|
||||
CONTAINS
|
||||
|
||||
END TYPE boundaryAxis
|
||||
|
||||
TYPE:: bTypesCont
|
||||
CLASS(boundaryGeneric), ALLOCATABLE:: obj
|
||||
|
||||
END TYPE bTypesCont
|
||||
|
||||
TYPE:: boundaryCont
|
||||
INTEGER:: id = 0
|
||||
CHARACTER(:), ALLOCATABLE:: name
|
||||
INTEGER:: physicalSurface = 0
|
||||
CLASS(bTypesCont), ALLOCATABLE:: bTypes(:)
|
||||
CONTAINS
|
||||
|
||||
END TYPE boundaryCont
|
||||
|
||||
|
||||
!Number of boundaries
|
||||
INTEGER:: nBoundary = 0
|
||||
TYPE(boundaryCont), ALLOCATABLE:: boundary(:)
|
||||
!Array for boundary information
|
||||
TYPE(boundaryCont), ALLOCATABLE, TARGET:: boundary(:)
|
||||
|
||||
CONTAINS
|
||||
FUNCTION getBoundaryId(physicalSurface) RESULT(id)
|
||||
|
|
@ -27,10 +67,23 @@ MODULE moduleBoundary
|
|||
|
||||
id = 0
|
||||
DO i = 1, nBoundary
|
||||
IF (physicalSurface == boundary(i)%obj%physicalSurface) id = boundary(i)%obj%id
|
||||
IF (physicalSurface == boundary(i)%physicalSurface) id = boundary(i)%id
|
||||
|
||||
END DO
|
||||
|
||||
END FUNCTION getBoundaryId
|
||||
|
||||
SUBROUTINE initWallTemperature(boundary, T, c)
|
||||
USE moduleRefParam
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(boundaryGeneric), ALLOCATABLE, INTENT(out):: boundary
|
||||
REAL(8), INTENT(in):: T, c !Wall temperature and specific heat
|
||||
REAL(8):: vTh
|
||||
|
||||
vTh = DSQRT(c * T) / v_ref
|
||||
boundary = boundaryWallTemperature(vTh = vTh)
|
||||
|
||||
END SUBROUTINE initWallTemperature
|
||||
|
||||
END MODULE moduleBoundary
|
||||
|
|
|
|||
|
|
@ -1,24 +1,18 @@
|
|||
MODULE moduleCollisions
|
||||
USE moduleSpecies
|
||||
USE moduleTable
|
||||
|
||||
!Abstract type for collision between two particles
|
||||
TYPE, ABSTRACT:: collisionBinary
|
||||
REAL(8):: rMass !reduced mass
|
||||
REAL(8):: rMass !Reduced mass
|
||||
REAL(8):: sMass !Summed mass
|
||||
TYPE(table1D):: crossSec !cross section of collision
|
||||
CONTAINS
|
||||
PROCEDURE(initBinary_interface), PASS, DEFERRED:: init
|
||||
PROCEDURE(collideBinary_interface), PASS, DEFERRED:: collide
|
||||
|
||||
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 +20,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
|
||||
|
||||
|
|
@ -38,16 +32,39 @@ MODULE moduleCollisions
|
|||
|
||||
END TYPE collisionCont
|
||||
|
||||
!Binary elastic interaction
|
||||
TYPE, EXTENDS(collisionBinary):: collisionBinaryElastic
|
||||
!Weight distribution for Maxwellian function
|
||||
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:: init => initBinaryElastic
|
||||
PROCEDURE, PASS:: collide => collideBinaryElastic
|
||||
|
||||
END TYPE collisionBinaryElastic
|
||||
|
||||
!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
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: collide => collideBinaryIonization
|
||||
|
||||
END TYPE collisionBinaryIonization
|
||||
|
||||
TYPE, EXTENDS(collisionBinary):: collisionBinaryRecombination
|
||||
REAL(8):: eBinding !binding energy of free electron in recombining ion
|
||||
REAL(8):: deltaV !Change in velocity due to energy exchange
|
||||
CLASS(speciesCharged), POINTER:: electron !Pointer to species considerer as electrons
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: collide => collideBinaryRecombination
|
||||
|
||||
END TYPE collisionBinaryRecombination
|
||||
|
||||
!Resonant charge-exchange
|
||||
TYPE, EXTENDS(collisionBinary):: collisionBinaryChargeExchange
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: collide => collideBinaryChargeExchange
|
||||
|
||||
END TYPE collisionBinaryChargeExchange
|
||||
|
||||
!Type for interaction matrix
|
||||
TYPE:: interactionsBinary
|
||||
INTEGER:: amount
|
||||
|
|
@ -58,11 +75,41 @@ MODULE moduleCollisions
|
|||
END TYPE interactionsBinary
|
||||
|
||||
!Collision 'Matrix'. A symmetric 2D matrix put into a 1D array to save memory
|
||||
TYPE(interactionsBinary), ALLOCATABLE:: interactionMatrix(:)
|
||||
TYPE(interactionsBinary), ALLOCATABLE, TARGET:: interactionMatrix(:)
|
||||
!Folder for collision cross section tables
|
||||
CHARACTER(:), ALLOCATABLE:: pathCollisions
|
||||
|
||||
CONTAINS
|
||||
!Velocity of center of mass of two particles
|
||||
PURE FUNCTION velocityCM(m_i, v_i, m_j, v_j) RESULT(vCM)
|
||||
IMPLICIT NONE
|
||||
|
||||
REAL(8), INTENT(in):: m_i, m_j
|
||||
REAL(8), INTENT(in), DIMENSION(1:3):: v_i, v_j
|
||||
REAL(8):: vCM(1:3)
|
||||
|
||||
vCM = (m_i*v_i + m_j*v_j)/(m_i + m_j)
|
||||
|
||||
END FUNCTION velocityCM
|
||||
|
||||
!Random direction for hard sphere collisions
|
||||
FUNCTION randomDirectionVHS() RESULT(n)
|
||||
USE moduleConstParam
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
REAL(8):: n(1:3)
|
||||
REAL(8):: cosXii, sinXii, eps
|
||||
|
||||
cosXii = random(-1.D0, 1.D0)
|
||||
sinXii = DSQRT(1.D0 - cosXii**2)
|
||||
eps = random(0.D0, PI2)
|
||||
|
||||
n = (/ cosXii, sinXii*DCOS(eps), sinXii*DSIN(eps) /)
|
||||
|
||||
END FUNCTION randomDirectionVHS
|
||||
|
||||
!Inits the interaction matrix
|
||||
SUBROUTINE initInteractionMatrix(interactionMatrix)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
|
@ -75,6 +122,7 @@ MODULE moduleCollisions
|
|||
|
||||
END SUBROUTINE initInteractionMatrix
|
||||
|
||||
!Gets the interaction index from the collision matrix from index i,j
|
||||
FUNCTION interactionIndex(i,j) RESULT(k)
|
||||
|
||||
INTEGER:: i, j
|
||||
|
|
@ -87,89 +135,396 @@ MODULE moduleCollisions
|
|||
|
||||
END FUNCTION interactionIndex
|
||||
|
||||
!Inits the binary interaction
|
||||
SUBROUTINE initInteractionBinary(self, amount)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(interactionsBinary), INTENT(inout):: self
|
||||
INTEGER, INTENT(in):: amount
|
||||
INTEGER:: k
|
||||
|
||||
self%amount = amount
|
||||
|
||||
ALLOCATE(self%collisions(1:self%amount))
|
||||
DO k= 1, self%amount
|
||||
!TODO: make type dependent
|
||||
ALLOCATE(collisionBinaryElastic:: self%collisions(k)%obj)
|
||||
|
||||
END DO
|
||||
|
||||
END SUBROUTINE initInteractionBinary
|
||||
|
||||
SUBROUTINE initBinaryElastic(self, crossSectionFilename, mass_i, mass_j)
|
||||
!ELASTIC COLLISIONS
|
||||
!Inits binary elastic collision
|
||||
SUBROUTINE initBinaryElastic(collision, crossSectionFilename, mass_i, mass_j)
|
||||
USE moduleTable
|
||||
USE moduleRefParam
|
||||
USE moduleConstParam
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(collisionBinaryElastic), INTENT(inout):: self
|
||||
CLASS(collisionBinary), INTENT(out), ALLOCATABLE:: collision
|
||||
CHARACTER(:), ALLOCATABLE, INTENT(in):: crossSectionFilename
|
||||
REAL(8), INTENT(in):: mass_i, mass_j
|
||||
|
||||
ALLOCATE(collisionBinaryElastic:: collision)
|
||||
|
||||
!Reads data from file
|
||||
CALL self%crossSec%init(crossSectionFilename)
|
||||
CALL collision%crossSec%init(crossSectionFilename)
|
||||
|
||||
!Convert to no-dimensional units
|
||||
CALL self%crossSec%convert(eV2J/(m_ref*v_ref**2), 1.D0/L_ref**2)
|
||||
CALL collision%crossSec%convert(eV2J/(m_ref*v_ref**2), 1.D0/L_ref**2)
|
||||
|
||||
!Calculates reduced mass
|
||||
self%rMass = (mass_i*mass_j)/(mass_i+mass_j)
|
||||
collision%sMass = mass_i+mass_j
|
||||
collision%rMass = (mass_i*mass_j)/collision%sMass
|
||||
|
||||
END SUBROUTINE
|
||||
END SUBROUTINE initBinaryElastic
|
||||
|
||||
!Binary elastic process
|
||||
SUBROUTINE collideBinaryElastic(self, sigmaVrelMax, sigmaVrelMaxNew, &
|
||||
part_i, part_j)
|
||||
USE moduleConstParam
|
||||
USE moduleSpecies
|
||||
USE moduleTable
|
||||
USE moduleConstParam
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
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
|
||||
REAL(8):: vp_i, vp_j, v_i, v_j !post and pre-collision velocities
|
||||
REAL(8):: v_ij !sum of velocities modules
|
||||
REAL(8):: alpha !random angle of scattering
|
||||
REAL(8):: rnd
|
||||
REAL(8):: m_i, m_j
|
||||
REAL(8), DIMENSION(1:3):: vCM
|
||||
REAL(8):: vp(1:3)
|
||||
|
||||
!eRel (in units of [m][L]^2[s]^-2
|
||||
!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
|
||||
sigmaVrel = self%crossSec%get(eRel)*vRel
|
||||
sigmaVrelMaxNew = sigmaVrelMaxNew + sigmaVrel
|
||||
CALL RANDOM_NUMBER(rnd)
|
||||
IF (sigmaVrelMaxNew/sigmaVrelMax > rnd) THEN
|
||||
IF (sigmaVrelMaxNew/sigmaVrelMax > random()) THEN
|
||||
m_i = species(part_i%sp)%obj%m
|
||||
m_j = species(part_j%sp)%obj%m
|
||||
!Applies the collision
|
||||
v_i = NORM2(part_i%v)
|
||||
v_j = NORM2(part_j%v)
|
||||
v_ij = v_i+v_j
|
||||
vp_j = v_ij*self%w_i
|
||||
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)
|
||||
CALL RANDOM_NUMBER(rnd)
|
||||
alpha = PI*rnd
|
||||
part_j%v(1) = v_j*DCOS(alpha)
|
||||
part_j%v(2) = v_j*DSIN(alpha)
|
||||
vCM = velocityCM(m_i, part_i%v, m_j, part_j%v)
|
||||
vp = vRel*randomDirectionVHS()
|
||||
|
||||
!Assign velocities to particles
|
||||
part_i%v = vCM + m_j*vp/self%sMass
|
||||
part_j%v = vCM - m_i*vp/self%sMass
|
||||
|
||||
END IF
|
||||
|
||||
END SUBROUTINE collideBinaryElastic
|
||||
|
||||
END SUBROUTINE
|
||||
!ELECTRON IMPACT IONIZATION
|
||||
!Inits electron impact ionization
|
||||
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)
|
||||
|
||||
!Reads data from file
|
||||
CALL collision%crossSec%init(crossSectionFilename)
|
||||
|
||||
!Convert to no-dimensional units
|
||||
CALL collision%crossSec%convert(eV2J/(m_ref*v_ref**2), 1.D0/L_ref**2)
|
||||
|
||||
!Calculates reduced mass
|
||||
collision%sMass = mass_i+mass_j
|
||||
collision%rMass = (mass_i*mass_j)/collision%sMass
|
||||
|
||||
!Specific parameters for ionization collision
|
||||
SELECT TYPE(collision)
|
||||
TYPE IS(collisionBinaryIonization)
|
||||
!Assign the energy threshold
|
||||
!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
|
||||
|
||||
END SUBROUTINE initBinaryIonization
|
||||
|
||||
!Binary electron impact ionization process
|
||||
SUBROUTINE collideBinaryIonization(self, sigmaVrelMax, sigmaVrelMaxNew, &
|
||||
part_i, part_j)
|
||||
USE moduleSpecies
|
||||
USE moduleErrors
|
||||
USE moduleList
|
||||
USE moduleRandom
|
||||
USE OMP_LIB
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(collisionBinaryIonization), INTENT(in):: self
|
||||
REAL(8), INTENT(in):: sigmaVrelMax
|
||||
REAL(8), INTENT(inout):: sigmaVrelMaxNew
|
||||
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), 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
|
||||
IF (sigmaVrelMaxNew/sigmaVrelMax > random()) 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
|
||||
|
||||
!ELECTRON ION RESONANT RECOMBINATION
|
||||
!Inits electron ion recombination
|
||||
SUBROUTINE initBinaryRecombination(collision, crossSectionFilename, energyBinding, 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):: energyBinding
|
||||
REAL(8), INTENT(in):: mass_i, mass_j
|
||||
CHARACTER(:), ALLOCATABLE, INTENT(in):: electron
|
||||
INTEGER:: electronIndex
|
||||
|
||||
ALLOCATE(collisionBinaryRecombination:: collision)
|
||||
|
||||
!Reads data from file
|
||||
CALL collision%crossSec%init(crossSectionFilename)
|
||||
|
||||
!Convert to no-dimensional units
|
||||
CALL collision%crossSec%convert(eV2J/(m_ref*v_ref**2), 1.D0/L_ref**2)
|
||||
|
||||
!Calculates reduced mass
|
||||
collision%sMass = mass_i+mass_j
|
||||
collision%rMass = (mass_i*mass_j)/collision%sMass
|
||||
|
||||
!Specific parameters for ionization collision
|
||||
SELECT TYPE(collision)
|
||||
TYPE IS(collisionBinaryRecombination)
|
||||
!Assign the energy threshold
|
||||
!Input energy is in eV. Convert to J with ev2J and then to
|
||||
!non-dimensional units.
|
||||
collision%eBinding = energyBinding*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
|
||||
|
||||
END SUBROUTINE initBinaryRecombination
|
||||
|
||||
!Binary electron impact ionization process
|
||||
SUBROUTINE collideBinaryRecombination(self, sigmaVrelMax, sigmaVrelMaxNew, &
|
||||
part_i, part_j)
|
||||
USE moduleSpecies
|
||||
USE moduleErrors
|
||||
USE moduleList
|
||||
USE moduleRandom
|
||||
USE OMP_LIB
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(collisionBinaryRecombination), INTENT(in):: self
|
||||
REAL(8), INTENT(in):: sigmaVrelMax
|
||||
REAL(8), INTENT(inout):: sigmaVrelMaxNew
|
||||
TYPE(particle), INTENT(inout), TARGET:: part_i, part_j
|
||||
TYPE(particle), POINTER:: electron, ion
|
||||
REAL(8):: vRel, eRel
|
||||
REAL(8):: sigmaVrel
|
||||
REAL(8), DIMENSION(1:3):: vp_i
|
||||
|
||||
!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
|
||||
sigmaVrel = self%crossSec%get(eRel)*vRel
|
||||
sigmaVrelMaxNew = sigmaVrelMaxNew + sigmaVrel
|
||||
IF (sigmaVrelMaxNew/sigmaVrelMax > random()) THEN
|
||||
!Find which particle is the ionizing electron
|
||||
IF (part_i%sp == self%electron%sp) THEN
|
||||
electron => part_i
|
||||
ion => part_j
|
||||
|
||||
ELSEIF(part_j%sp == self%electron%sp) THEN
|
||||
electron => part_j
|
||||
ion => part_i
|
||||
|
||||
ELSE
|
||||
CALL criticalError("No matching between input particles and ionizing species", 'collideBinaryIonization')
|
||||
|
||||
END IF
|
||||
|
||||
!Excess energy
|
||||
!TODO: This energy should be transformed into photons
|
||||
vp_i = ion%v* (1.D0 - (vRel + self%deltaV)/NORM2(ion%v))
|
||||
|
||||
!Remove electron from simulation
|
||||
electron%n_in = .FALSE.
|
||||
|
||||
!Neutralize ion particle
|
||||
SELECT TYPE(sp => species(ion%sp)%obj)
|
||||
TYPE IS(speciesCharged)
|
||||
CALL sp%neutralize(ion)
|
||||
|
||||
CLASS DEFAULT
|
||||
CALL criticalError(sp%name // " is not a charge", 'collideBinaryRecombination')
|
||||
|
||||
END SELECT
|
||||
|
||||
END IF
|
||||
|
||||
END SUBROUTINE collideBinaryRecombination
|
||||
|
||||
!RESONANT CHARGE EXCHANGE
|
||||
!Inits resonant charge exchange
|
||||
SUBROUTINE initBinaryChargeExchange(collision, crossSectionFilename, mass_i, mass_j)
|
||||
USE moduleTable
|
||||
USE moduleRefParam
|
||||
USE moduleConstParam
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(collisionBinary), INTENT(out), ALLOCATABLE:: collision
|
||||
CHARACTER(:), ALLOCATABLE, INTENT(in):: crossSectionFilename
|
||||
REAL(8), INTENT(in):: mass_i, mass_j
|
||||
|
||||
ALLOCATE(collisionBinaryChargeExchange:: collision)
|
||||
|
||||
!Reads data from file
|
||||
CALL collision%crossSec%init(crossSectionFilename)
|
||||
|
||||
!Convert to no-dimensional units
|
||||
CALL collision%crossSec%convert(eV2J/(m_ref*v_ref**2), 1.D0/L_ref**2)
|
||||
|
||||
!Calculates reduced mass
|
||||
collision%sMass = mass_i+mass_j
|
||||
collision%rMass = (mass_i*mass_j)/collision%sMass
|
||||
|
||||
END SUBROUTINE initBinaryChargeExchange
|
||||
|
||||
SUBROUTINE collideBinaryChargeExchange(self, sigmaVrelMax, sigmaVrelMaxNew, &
|
||||
part_i, part_j)
|
||||
USE moduleSpecies
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(collisionBinaryChargeExchange), INTENT(in):: self
|
||||
REAL(8), INTENT(in):: sigmaVrelMax
|
||||
REAL(8), INTENT(inout):: sigmaVrelMaxNew
|
||||
TYPE(particle), INTENT(inout), TARGET:: part_i, part_j
|
||||
REAL(8):: sigmaVrel
|
||||
REAL(8):: vRel !relative velocity
|
||||
REAL(8):: eRel !relative energy
|
||||
|
||||
!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
|
||||
sigmaVrel = self%crossSec%get(eRel)*vRel
|
||||
sigmaVrelMaxNew = sigmaVrelMaxNew + sigmaVrel
|
||||
IF (sigmaVrelMaxNew/sigmaVrelMax > random()) THEN
|
||||
SELECT TYPE(sp => species(part_i%sp)%obj)
|
||||
TYPE IS (speciesNeutral)
|
||||
!Species i is neutral, ionize particle i
|
||||
CALL sp%ionize(part_i)
|
||||
|
||||
TYPE IS (speciesCharged)
|
||||
!Species i is charged, neutralize particle i
|
||||
CALL sp%neutralize(part_i)
|
||||
|
||||
END SELECT
|
||||
|
||||
SELECT TYPE(sp => species(part_j%sp)%obj)
|
||||
TYPE IS (speciesNeutral)
|
||||
!Species j is neutral, ionize particle j
|
||||
CALL sp%ionize(part_j)
|
||||
|
||||
TYPE IS (speciesCharged)
|
||||
!Species j is charged, neutralize particle j
|
||||
CALL sp%neutralize(part_j)
|
||||
|
||||
END SELECT
|
||||
|
||||
END IF
|
||||
|
||||
END SUBROUTINE collideBinaryChargeExchange
|
||||
|
||||
END MODULE moduleCollisions
|
||||
|
|
|
|||
|
|
@ -4,7 +4,9 @@ MODULE moduleConstParam
|
|||
|
||||
PUBLIC
|
||||
|
||||
REAL(8), PARAMETER:: PI = 4.D0*DATAN(1.D0) !number pi
|
||||
REAL(8), PARAMETER:: PI = 4.D0*DATAN(1.D0) !number pi
|
||||
REAL(8), PARAMETER:: PI2 = 2.D0*PI !2*pi
|
||||
REAL(8), PARAMETER:: PI8 = 8.D0*PI !2*pi
|
||||
REAL(8), PARAMETER:: sccm2atomPerS = 4.5D17 !sccm to atom s^-1
|
||||
REAL(8), PARAMETER:: qe = 1.60217662D-19 !Elementary charge
|
||||
REAL(8), PARAMETER:: kb = 1.38064852D-23 !Boltzmann constants SI
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ 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
|
||||
|
|
@ -101,13 +102,10 @@ MODULE moduleInject
|
|||
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
|
||||
phSurface(e) = mesh%edges(e)%obj%physicalSurface
|
||||
|
||||
|
|
@ -115,7 +113,6 @@ MODULE moduleInject
|
|||
|
||||
self%nEdges = COUNT(phSurface == physicalSurface)
|
||||
ALLOCATE(inject(i)%edges(1:self%nEdges))
|
||||
! ALLOCATE(inject(i)%weight(1:self%nEdges))
|
||||
et = 0
|
||||
DO e=1, mesh%numEdges
|
||||
IF (mesh%edges(e)%obj%physicalSurface == physicalSurface) THEN
|
||||
|
|
@ -125,7 +122,8 @@ MODULE moduleInject
|
|||
END IF
|
||||
|
||||
END DO
|
||||
! self%sumWeight = SUM(self%weight)
|
||||
|
||||
nPartInj = nPartInj + self%nParticles
|
||||
|
||||
END SUBROUTINE initInject
|
||||
|
||||
|
|
@ -138,17 +136,12 @@ MODULE moduleInject
|
|||
INTEGER:: i
|
||||
|
||||
!$OMP SINGLE
|
||||
nPartInj = 0
|
||||
DO i = 1, nInject
|
||||
IF (solver%pusher(inject(i)%sp)%pushSpecies) nPartInj = nPartInj + inject(i)%nParticles
|
||||
|
||||
END DO
|
||||
IF (ALLOCATED(partInj)) DEALLOCATE(partInj)
|
||||
ALLOCATE(partInj(1:nPartInj))
|
||||
!$OMP END SINGLE
|
||||
|
||||
DO i=1, nInject
|
||||
IF (solver%pusher(inject(i)%sp)%pushSpecies) CALL inject(i)%addParticles()
|
||||
CALL inject(i)%addParticles()
|
||||
END DO
|
||||
|
||||
END SUBROUTINE doInjects
|
||||
|
|
@ -175,21 +168,14 @@ MODULE moduleInject
|
|||
|
||||
!Random velocity from Maxwellian distribution
|
||||
FUNCTION randomVelMaxwellian(self) RESULT (v)
|
||||
USE moduleConstParam, ONLY: PI
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(velDistMaxwellian), INTENT(in):: self
|
||||
REAL(8):: v
|
||||
REAL(8):: x, y
|
||||
v = 0.D0
|
||||
x = 0.D0
|
||||
|
||||
DO WHILE (x == 0.D0)
|
||||
CALL RANDOM_NUMBER(x)
|
||||
END DO
|
||||
CALL RANDOM_NUMBER(y)
|
||||
|
||||
v = self%v + self%vTh*DSQRT(-2.D0*DLOG(x))*DCOS(2.D0*PI*y)
|
||||
v = self%v + self%vTh*randomMaxwellian()
|
||||
|
||||
END FUNCTION randomVelMaxwellian
|
||||
|
||||
|
|
@ -209,24 +195,18 @@ MODULE moduleInject
|
|||
USE moduleSpecies
|
||||
USE moduleSolver
|
||||
USE moduleMesh
|
||||
USE moduleRandom
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(injectGeneric), INTENT(in):: self
|
||||
INTEGER:: randomX
|
||||
INTEGER:: i!, j
|
||||
INTEGER, SAVE:: nMin, nMax !Min and Max index in partInj array
|
||||
INTEGER:: n
|
||||
REAL(8):: rnd
|
||||
CLASS(meshEdge), POINTER:: randomEdge
|
||||
|
||||
!Insert particles
|
||||
!$OMP SINGLE
|
||||
nMin = 0
|
||||
DO i = 1, self%id - 1
|
||||
IF (solver%pusher(inject(i)%sp)%pushSpecies) nMin = nMin + inject(i)%nParticles
|
||||
|
||||
END DO
|
||||
nMin = nMin + 1
|
||||
nMin = SUM(inject(1:(self%id-1))%nParticles) + 1
|
||||
nMax = nMin + self%nParticles - 1
|
||||
!Assign particle type
|
||||
partInj(nMin:nMax)%sp = self%sp
|
||||
|
|
@ -244,8 +224,7 @@ MODULE moduleInject
|
|||
|
||||
!$OMP DO
|
||||
DO n = nMin, nMax
|
||||
CALL RANDOM_NUMBER(rnd)
|
||||
randomX = INT(DBLE(self%nEdges-1)*rnd) + 1
|
||||
randomX = random(1, self%nEdges)
|
||||
|
||||
randomEdge => mesh%edges(self%edges(randomX))%obj
|
||||
!Random position in edge
|
||||
|
|
@ -263,8 +242,8 @@ MODULE moduleInject
|
|||
self%v(2)%obj%randomVel(), &
|
||||
self%v(3)%obj%randomVel() /)
|
||||
|
||||
!Push new particle
|
||||
CALL solver%pusher(self%sp)%pushParticle(partInj(n))
|
||||
!Push new particle with the minimum time step
|
||||
CALL solver%pusher(self%sp)%pushParticle(partInj(n), tauMin)
|
||||
!Assign cell to new particle
|
||||
CALL solver%updateParticleCell(partInj(n))
|
||||
|
||||
|
|
|
|||
|
|
@ -21,39 +21,67 @@ MODULE moduleInput
|
|||
!Loads the config file
|
||||
CALL verboseError('Loading input file...')
|
||||
CALL config%load(filename = inputFile)
|
||||
CALL checkStatus(config, "load")
|
||||
|
||||
!Reads reference parameters
|
||||
CALL verboseError('Reading Reference parameters...')
|
||||
CALL readReference(config)
|
||||
CALL checkStatus(config, "readReference")
|
||||
|
||||
!Reads output parameters
|
||||
CALL verboseError('Reading Output parameters...')
|
||||
CALL readOutput(config)
|
||||
CALL checkStatus(config, "readOutput")
|
||||
|
||||
!Read species
|
||||
CALL verboseError('Reading species information...')
|
||||
CALL readSpecies(config)
|
||||
CALL checkStatus(config, "readSpecies")
|
||||
|
||||
!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)
|
||||
CALL checkStatus(config, "readBoundary")
|
||||
|
||||
!Read Geometry
|
||||
CALL verboseError('Reading Geometry...')
|
||||
CALL readGeometry(config)
|
||||
CALL checkStatus(config, "readGeometry")
|
||||
|
||||
!Reads case parameters
|
||||
CALL verboseError('Reading Case Parameters...')
|
||||
CALL verboseError('Reading Case parameters...')
|
||||
CALL readCase(config)
|
||||
CALL checkStatus(config, "readCase")
|
||||
|
||||
!Read injection of particles
|
||||
CALL verboseError('Reading Interactions between species...')
|
||||
CALL readInject(config)
|
||||
CALL checkStatus(config, "readInject")
|
||||
|
||||
!Read parallel parameters
|
||||
CALL verboseError('Reading Parallel configuration...')
|
||||
CALL readParallel(config)
|
||||
CALL checkStatus(config, "readParallel")
|
||||
|
||||
END SUBROUTINE readConfig
|
||||
|
||||
!Checks the status of the JSON case file and, if failed, exits the execution.
|
||||
SUBROUTINE checkStatus(config, step)
|
||||
USE moduleErrors
|
||||
USE json_module
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE(json_file), INTENT(inout):: config
|
||||
CHARACTER(LEN=*), INTENT(in):: step
|
||||
|
||||
IF (config%failed()) CALL criticalError("Error reading the JSON input file", TRIM(step))
|
||||
|
||||
END SUBROUTINE checkStatus
|
||||
|
||||
!Reads the reference parameters
|
||||
SUBROUTINE readReference(config)
|
||||
|
|
@ -64,7 +92,7 @@ MODULE moduleInput
|
|||
IMPLICIT NONE
|
||||
|
||||
TYPE(json_file), INTENT(inout):: config
|
||||
LOGICAL:: found, found_r
|
||||
LOGICAL:: found
|
||||
CHARACTER(:), ALLOCATABLE:: object
|
||||
|
||||
object = 'reference'
|
||||
|
|
@ -78,25 +106,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
|
||||
!TODO: Make this solver dependent
|
||||
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
|
||||
|
||||
|
|
@ -107,6 +139,8 @@ MODULE moduleInput
|
|||
USE moduleCaseParam
|
||||
USE moduleSolver
|
||||
USE moduleSpecies
|
||||
USE moduleCollisions
|
||||
USE moduleOutput
|
||||
USE json_module
|
||||
IMPLICIT NONE
|
||||
|
||||
|
|
@ -118,6 +152,7 @@ MODULE moduleInput
|
|||
INTEGER:: nTau, nSolver
|
||||
INTEGER:: i
|
||||
CHARACTER(2):: iString
|
||||
CHARACTER(1):: tString
|
||||
|
||||
object = 'case'
|
||||
|
||||
|
|
@ -172,12 +207,136 @@ MODULE moduleInput
|
|||
CALL solver%initWS(WSType)
|
||||
|
||||
|
||||
!Makes tau non-dimensional
|
||||
!Makes tau(s) non-dimensional
|
||||
tau = tau / ti_ref
|
||||
tauMin = tauMin / 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 // ")"
|
||||
|
||||
!Read initial state for species
|
||||
CALL verboseError('Reading Initial state...')
|
||||
CALL readInitial(config)
|
||||
CALL checkStatus(config, "readInitial")
|
||||
|
||||
END SUBROUTINE readCase
|
||||
|
||||
!Reads the initial information for the species
|
||||
SUBROUTINE readInitial(config)
|
||||
USE moduleSpecies
|
||||
USE moduleMesh
|
||||
USE moduleOutput
|
||||
USE moduleRefParam
|
||||
USE moduleRandom
|
||||
USE json_module
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE(json_file), INTENT(inout):: config
|
||||
LOGICAL:: found
|
||||
CHARACTER(:), ALLOCATABLE:: object
|
||||
INTEGER:: nInitial
|
||||
INTEGER:: i, p, e
|
||||
CHARACTER(LEN=2):: iString
|
||||
CHARACTER(:), ALLOCATABLE:: spName
|
||||
INTEGER:: sp
|
||||
CHARACTER(:), ALLOCATABLE:: spFile
|
||||
INTEGER:: stat
|
||||
CHARACTER(100):: dummy
|
||||
REAL(8):: density, velocity(1:3), temperature
|
||||
INTEGER:: nNewPart = 0.D0
|
||||
TYPE(particle), POINTER:: partNew
|
||||
REAL(8):: vTh
|
||||
TYPE(lNode), POINTER:: partCurr, partNext
|
||||
|
||||
CALL config%info('case.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 // ')'
|
||||
CALL config%get(object // '.speciesName', spName, found)
|
||||
sp = speciesName2Index(spName)
|
||||
CALL config%get(object // '.initialState', spFile, found)
|
||||
OPEN (10, FILE = path // spFile, ACTION = 'READ')
|
||||
DO
|
||||
READ(10, '(A)', IOSTAT = stat) dummy
|
||||
!If EoF, exit reading
|
||||
IF (stat /= 0) EXIT
|
||||
!If comment, skip
|
||||
IF (INDEX(dummy,'#') /= 0) CYCLE
|
||||
!Go up one line
|
||||
BACKSPACE(10)
|
||||
!Read information
|
||||
READ(10, *) e, density, velocity, temperature
|
||||
!Scale variables
|
||||
!Particles in cell volume
|
||||
nNewPart = INT(density * (mesh%vols(e)%obj%volume*Vol_ref) / species(sp)%obj%weight)
|
||||
!Non-dimensional velocity
|
||||
velocity = velocity / v_ref
|
||||
!Non-dimensional temperature
|
||||
temperature = temperature / T_ref
|
||||
!Non-dimensional thermal temperature
|
||||
vTh = DSQRT(temperature/species(sp)%obj%m)
|
||||
!Allocate new particles
|
||||
DO p = 1, nNewPart
|
||||
ALLOCATE(partNew)
|
||||
partNew%sp = sp
|
||||
partNew%v(1) = velocity(1) + vTh*randomMaxwellian()
|
||||
partNew%v(2) = velocity(2) + vTh*randomMaxwellian()
|
||||
partNew%v(3) = velocity(3) + vTh*randomMaxwellian()
|
||||
partNew%vol = e
|
||||
partNew%r = mesh%vols(e)%obj%randPos()
|
||||
partNew%xi = mesh%vols(e)%obj%phy2log(partNew%r)
|
||||
partNew%n_in = .TRUE.
|
||||
partNew%weight = species(sp)%obj%weight
|
||||
!If charged species, add qm to particle
|
||||
SELECT TYPE(sp => species(sp)%obj)
|
||||
TYPE IS (speciesCharged)
|
||||
partNew%qm = sp%qm
|
||||
|
||||
CLASS DEFAULT
|
||||
partNew%qm = 0.D0
|
||||
|
||||
END SELECT
|
||||
|
||||
!Assign particle to temporal list of particles
|
||||
CALL partInitial%add(partNew)
|
||||
|
||||
END DO
|
||||
|
||||
END DO
|
||||
|
||||
END DO
|
||||
|
||||
!Convert temporal list of particles into initial partOld array
|
||||
!Deallocates the list of initial particles
|
||||
nNewPart = partInitial%amount
|
||||
IF (nNewPart > 0) THEN
|
||||
ALLOCATE(partOld(1:nNewPart))
|
||||
partCurr => partInitial%head
|
||||
DO p = 1, nNewPart
|
||||
partNext => partCurr%next
|
||||
partOld(p) = partCurr%part
|
||||
DEALLOCATE(partCurr)
|
||||
partCurr => partNext
|
||||
|
||||
END DO
|
||||
|
||||
IF (ASSOCIATED(partInitial%head)) NULLIFY(partInitial%head)
|
||||
IF (ASSOCIATED(partInitial%tail)) NULLIFY(partInitial%tail)
|
||||
partInitial%amount = 0
|
||||
|
||||
END IF
|
||||
|
||||
nPartOld = SIZE(partOld)
|
||||
|
||||
END IF
|
||||
|
||||
END SUBROUTINE readInitial
|
||||
|
||||
!Reads configuration for the output files
|
||||
SUBROUTINE readOutput(config)
|
||||
USE moduleErrors
|
||||
|
|
@ -225,6 +384,7 @@ MODULE moduleInput
|
|||
USE moduleSpecies
|
||||
USE moduleErrors
|
||||
USE moduleRefParam
|
||||
USE moduleList
|
||||
USE json_module
|
||||
IMPLICIT NONE
|
||||
|
||||
|
|
@ -235,6 +395,8 @@ MODULE moduleInput
|
|||
REAL(8):: mass, charge
|
||||
LOGICAL:: found
|
||||
INTEGER:: i
|
||||
CHARACTER(:), ALLOCATABLE:: linkName
|
||||
INTEGER:: linkID
|
||||
|
||||
!Gets the number of species
|
||||
CALL config%info('species', found, n_children = nSpecies)
|
||||
|
|
@ -258,6 +420,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))
|
||||
|
||||
|
|
@ -273,6 +436,41 @@ MODULE moduleInput
|
|||
|
||||
END DO
|
||||
|
||||
!Reads 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
|
||||
CALL config%get(object // '.ion', linkName, found)
|
||||
IF (found) THEN
|
||||
linkID = speciesName2Index(linkName)
|
||||
sp%ion => species(linkID)%obj
|
||||
|
||||
END IF
|
||||
|
||||
TYPE IS (speciesCharged)
|
||||
!Gets species linked neutral
|
||||
CALL config%get(object // '.neutral', linkName, found)
|
||||
IF (found) THEN
|
||||
linkID = speciesName2Index(linkName)
|
||||
sp%neutral => species(linkID)%obj
|
||||
|
||||
END IF
|
||||
|
||||
!Gets species linked ion
|
||||
CALL config%get(object // '.ion', linkName, found)
|
||||
IF (found) THEN
|
||||
linkID = speciesName2Index(linkName)
|
||||
sp%ion => species(linkID)%obj
|
||||
|
||||
END IF
|
||||
|
||||
END SELECT
|
||||
|
||||
END DO
|
||||
|
||||
!Set number of particles to 0 for init state
|
||||
!TODO: In a future, this should include the particles from init states
|
||||
nPartOld = 0
|
||||
|
|
@ -285,7 +483,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
|
||||
|
||||
|
|
@ -295,15 +496,22 @@ MODULE moduleInput
|
|||
CHARACTER(:), ALLOCATABLE:: species_i, species_j
|
||||
CHARACTER(:), ALLOCATABLE:: crossSecFile
|
||||
CHARACTER(:), ALLOCATABLE:: crossSecFilePath
|
||||
CHARACTER(:), ALLOCATABLE:: cType
|
||||
LOGICAL:: found
|
||||
INTEGER:: nInteractions, nCollisions
|
||||
INTEGER:: i, k, ij
|
||||
INTEGER:: pt_i, pt_j
|
||||
REAL(8):: energyThreshold, energyBinding
|
||||
CHARACTER(:), ALLOCATABLE:: electron
|
||||
|
||||
CALL initInteractionMatrix(interactionMatrix)
|
||||
|
||||
!Path for collision cross-section data files
|
||||
CALL config%get('interactions.folderCollisions', pathCollisions, 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
|
||||
WRITE(iString, '(I2)') i
|
||||
|
|
@ -312,15 +520,54 @@ MODULE moduleInput
|
|||
pt_i = speciesName2Index(species_i)
|
||||
CALL config%get(object // '.species_j', species_j, found)
|
||||
pt_j = speciesName2Index(species_j)
|
||||
CALL config%info(object // '.crossSections', found, n_children = nCollisions)
|
||||
CALL config%info(object // '.cTypes', found, n_children = nCollisions)
|
||||
ij = interactionIndex(pt_i,pt_j)
|
||||
!Allocates the required number of collisions per each pair of species ij
|
||||
CALL interactionMatrix(ij)%init(nCollisions)
|
||||
|
||||
DO k = 1, nCollisions
|
||||
WRITE (kString, '(I2)') k
|
||||
CALL config%get(object // '.crossSections(' // TRIM(kString)// ')', crossSecFile, found)
|
||||
object = 'interactions.collisions(' // TRIM(iString) // ').cTypes(' // TRIM(kString) // ')'
|
||||
!Reads the cross section file
|
||||
CALL config%get(object // '.crossSection', crossSecFile, found)
|
||||
crossSecFilePath = pathCollisions // crossSecFile
|
||||
CALL interactionMatrix(ij)%collisions(k)%obj%init(crossSecFilePath, species(pt_i)%obj%m, species(pt_j)%obj%m)
|
||||
IF (.NOT. found) CALL criticalError('crossSection not found for ' // object, 'readInteractions')
|
||||
!Reads the type of collision
|
||||
CALL config%get(object // '.type', cType, found)
|
||||
!Initialize collision type and reads required additional data
|
||||
SELECT CASE(cType)
|
||||
CASE ('elastic')
|
||||
!Elastic collision
|
||||
CALL initBinaryElastic(interactionMatrix(ij)%collisions(k)%obj, &
|
||||
crossSecFilePath, species(pt_i)%obj%m, species(pt_j)%obj%m)
|
||||
|
||||
CASE ('chargeExchange')
|
||||
!Resonant charge exchange
|
||||
CALL initBinaryChargeExchange(interactionMatrix(ij)%collisions(k)%obj, &
|
||||
crossSecFilePath, species(pt_i)%obj%m, species(pt_j)%obj%m)
|
||||
|
||||
CASE ('ionization')
|
||||
!Electorn impact ionization
|
||||
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, electron)
|
||||
|
||||
CASE ('recombination')
|
||||
!Electorn impact ionization
|
||||
CALL config%get(object // '.energyBinding', energyBinding, 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 initBinaryRecombination(interactionMatrix(ij)%collisions(k)%obj, &
|
||||
crossSecFilePath, energyBinding, species(pt_i)%obj%m, species(pt_j)%obj%m, electron)
|
||||
|
||||
CASE DEFAULT
|
||||
CALL criticalError('Collision type' // cType // 'not defined yet', 'readInteractions')
|
||||
|
||||
END SELECT
|
||||
|
||||
END DO
|
||||
|
||||
|
|
@ -332,26 +579,61 @@ MODULE moduleInput
|
|||
SUBROUTINE readBoundary(config)
|
||||
USE moduleBoundary
|
||||
USE moduleErrors
|
||||
USE moduleSpecies
|
||||
USE json_module
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE(json_file), INTENT(inout):: config
|
||||
CHARACTER(2):: istring
|
||||
CHARACTER(:), ALLOCATABLE:: object
|
||||
INTEGER:: i, s
|
||||
CHARACTER(2):: istring, sString
|
||||
CHARACTER(:), ALLOCATABLE:: object, bType
|
||||
REAL(8):: Tw, cw !Wall temperature and specific heat
|
||||
LOGICAL:: found
|
||||
INTEGER:: i
|
||||
INTEGER:: nTypes
|
||||
|
||||
CALL config%info('boundary', found, n_children = nBoundary)
|
||||
ALLOCATE(boundary(1:nBoundary))
|
||||
DO i = 1, nBoundary
|
||||
WRITE(istring, '(i2)') i
|
||||
object = 'boundary(' // trim(istring) // ')'
|
||||
object = 'boundary(' // TRIM(istring) // ')'
|
||||
|
||||
ALLOCATE(boundaryGeneric:: boundary(i)%obj)
|
||||
boundary(i)%id = i
|
||||
CALL config%get(object // '.name', boundary(i)%name, found)
|
||||
CALL config%get(object // '.physicalSurface', boundary(i)%physicalSurface, found)
|
||||
CALL config%info(object // '.bTypes', found, n_children = nTypes)
|
||||
IF (nTypes /= nSpecies) CALL criticalError('Not enough boundary types defined in ' // object, 'readBoundary')
|
||||
ALLOCATE(boundary(i)%bTypes(1:nSpecies))
|
||||
DO s = 1, nSpecies
|
||||
WRITE(sString,'(i2)') s
|
||||
object = 'boundary(' // TRIM(iString) // ').bTypes(' // TRIM(sString) // ')'
|
||||
CALL config%get(object // '.type', bType, found)
|
||||
SELECT CASE(bType)
|
||||
CASE('reflection')
|
||||
ALLOCATE(boundaryReflection:: boundary(i)%bTypes(s)%obj)
|
||||
|
||||
CALL config%get(object // '.type', boundary(i)%obj%boundaryType, found)
|
||||
CALL config%get(object // '.physicalSurface', boundary(i)%obj%physicalSurface, found)
|
||||
boundary(i)%obj%id = i
|
||||
CASE('absorption')
|
||||
ALLOCATE(boundaryAbsorption:: boundary(i)%bTypes(s)%obj)
|
||||
|
||||
CASE('transparent')
|
||||
ALLOCATE(boundaryTransparent:: boundary(i)%bTypes(s)%obj)
|
||||
|
||||
CASE('wallTemperature')
|
||||
CALL config%get(object // '.temperature', Tw, found)
|
||||
IF (.NOT. found) CALL criticalError("temperature not found for wallTemperature boundary type", 'readBoundary')
|
||||
CALL config%get(object // '.specificHeat', cw, found)
|
||||
IF (.NOT. found) CALL criticalError("specificHeat not found for wallTemperature boundary type", 'readBoundary')
|
||||
|
||||
CALL initWallTemperature(boundary(i)%bTypes(s)%obj, Tw, cw)
|
||||
|
||||
CASE('axis')
|
||||
ALLOCATE(boundaryAxis:: boundary(i)%bTypes(s)%obj)
|
||||
|
||||
CASE DEFAULT
|
||||
CALL criticalError('Boundary type ' // bType // ' undefined', 'readBoundary')
|
||||
|
||||
END SELECT
|
||||
|
||||
END DO
|
||||
|
||||
END DO
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,10 @@ 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(listNode):: partInitial !Initial distribution of particles
|
||||
|
||||
TYPE pointerArray
|
||||
TYPE(particle), POINTER:: part
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ MODULE moduleOutput
|
|||
IMPLICIT NONE
|
||||
!Output for each node
|
||||
TYPE outputNode
|
||||
REAL(8):: den, mom(1:3), tensorS(1:3,1:3)
|
||||
REAL(8):: den = 0.D0, mom(1:3) = 0.D0, tensorS(1:3,1:3) = 0.D0
|
||||
|
||||
END TYPE
|
||||
|
||||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
69
src/modules/moduleRandom.f90
Normal file
69
src/modules/moduleRandom.f90
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
MODULE moduleRandom
|
||||
!Interface for random number generator
|
||||
INTERFACE random
|
||||
MODULE PROCEDURE randomReal, randomRealAB, randomIntAB
|
||||
|
||||
END INTERFACE random
|
||||
|
||||
CONTAINS
|
||||
!Returns a Real random number between 0 and 1
|
||||
FUNCTION randomReal() RESULT(rnd)
|
||||
IMPLICIT NONE
|
||||
|
||||
REAL(8):: rnd
|
||||
|
||||
rnd = 0.D0
|
||||
CALL RANDOM_NUMBER(rnd)
|
||||
|
||||
END FUNCTION randomReal
|
||||
|
||||
!Returns a Real random number between a and b
|
||||
FUNCTION randomRealAB(a, b) RESULT(rnd)
|
||||
IMPLICIT NONE
|
||||
|
||||
REAL(8), INTENT(in):: a, b
|
||||
REAL(8):: rnd
|
||||
REAL(8):: rnd01 !random real between 0 and 1
|
||||
|
||||
rnd = 0.D0
|
||||
CALL RANDOM_NUMBER(rnd01)
|
||||
|
||||
rnd = (b - a) * rnd01 + a
|
||||
|
||||
END FUNCTION randomRealAB
|
||||
|
||||
!Returns an Integer random numnber between a and b
|
||||
FUNCTION randomIntAB(a, b) RESULT(rnd)
|
||||
IMPLICIT NONE
|
||||
|
||||
INTEGER, INTENT(in):: a, b
|
||||
INTEGER:: rnd
|
||||
REAL(8):: rnd01
|
||||
|
||||
rnd = 0.D0
|
||||
CALL RANDOM_NUMBER(rnd01)
|
||||
|
||||
rnd = INT(REAL(b - a) * rnd01) + 1
|
||||
|
||||
END FUNCTION randomIntAB
|
||||
|
||||
!Returns a random number in a Maxwellian distribution of mean 0 and width 1
|
||||
FUNCTION randomMaxwellian() RESULT(rnd)
|
||||
USE moduleConstParam, ONLY: PI
|
||||
IMPLICIT NONE
|
||||
|
||||
REAL(8):: rnd
|
||||
REAL(8):: x, y
|
||||
|
||||
rnd = 0.D0
|
||||
x = 0.D0
|
||||
DO WHILE (x == 0.D0)
|
||||
CALL RANDOM_NUMBER(x)
|
||||
END DO
|
||||
CALL RANDOM_NUMBER(y)
|
||||
|
||||
rnd = DSQRT(-2.D0*DLOG(x))*DCOS(2.D0*PI*y)
|
||||
|
||||
END FUNCTION randomMaxwellian
|
||||
|
||||
END MODULE moduleRandom
|
||||
|
|
@ -27,10 +27,11 @@ MODULE moduleSolver
|
|||
|
||||
INTERFACE
|
||||
!Push a particle
|
||||
PURE SUBROUTINE push_interafece(part)
|
||||
PURE SUBROUTINE push_interafece(part, tauIn)
|
||||
USE moduleSpecies
|
||||
|
||||
TYPE(particle), INTENT(inout):: part
|
||||
REAL(8), INTENT(in):: tauIn
|
||||
|
||||
END SUBROUTINE push_interafece
|
||||
|
||||
|
|
@ -134,7 +135,7 @@ MODULE moduleSolver
|
|||
!Checks if the species sp is update this iteration
|
||||
IF (solver%pusher(sp)%pushSpecies) THEN
|
||||
!Push particle
|
||||
CALL solver%pusher(sp)%pushParticle(partOld(n))
|
||||
CALL solver%pusher(sp)%pushParticle(partOld(n), tau(sp))
|
||||
!Find cell in wich particle reside
|
||||
CALL solver%updateParticleCell(partOld(n))
|
||||
|
||||
|
|
@ -146,27 +147,25 @@ MODULE moduleSolver
|
|||
END SUBROUTINE doPushes
|
||||
|
||||
!Push one particle. Boris pusher for 2D Cyl Neutral particle
|
||||
PURE SUBROUTINE pushCylNeutral(part)
|
||||
PURE SUBROUTINE pushCylNeutral(part, tauIn)
|
||||
USE moduleSpecies
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE(particle), INTENT(inout):: part
|
||||
REAL(8), INTENT(in):: tauIn
|
||||
TYPE(particle):: part_temp
|
||||
REAL(8):: tauSp
|
||||
REAL(8):: x_new, y_new, r, sin_alpha, cos_alpha
|
||||
REAL(8):: v_p_oh_star(2:3)
|
||||
|
||||
part_temp = part
|
||||
!Time step for the species
|
||||
tauSp = tau(part_temp%sp)
|
||||
!z
|
||||
part_temp%v(1) = part%v(1)
|
||||
part_temp%r(1) = part%r(1) + part_temp%v(1)*tauSp
|
||||
part_temp%r(1) = part%r(1) + part_temp%v(1)*tauIn
|
||||
!r,theta
|
||||
v_p_oh_star(2) = part%v(2)
|
||||
x_new = part%r(2) + v_p_oh_star(2)*tauSp
|
||||
x_new = part%r(2) + v_p_oh_star(2)*tauIn
|
||||
v_p_oh_star(3) = part%v(3)
|
||||
y_new = v_p_oh_star(3)*tauSp
|
||||
y_new = v_p_oh_star(3)*tauIn
|
||||
r = DSQRT(x_new**2+y_new**2)
|
||||
part_temp%r(2) = r
|
||||
IF (r > 0.D0) THEN
|
||||
|
|
@ -185,31 +184,29 @@ MODULE moduleSolver
|
|||
END SUBROUTINE pushCylNeutral
|
||||
|
||||
!Push one particle. Boris pusher for 2D Cyl Charged particle
|
||||
PURE SUBROUTINE pushCylCharged(part)
|
||||
PURE SUBROUTINE pushCylCharged(part, tauIn)
|
||||
USE moduleSpecies
|
||||
USE moduleEM
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE(particle), INTENT(inout):: part
|
||||
REAL(8), INTENT(in):: tauIn
|
||||
REAL(8):: v_p_oh_star(2:3)
|
||||
TYPE(particle):: part_temp
|
||||
REAL(8):: x_new, y_new, r, sin_alpha, cos_alpha
|
||||
REAL(8):: tauSp
|
||||
REAL(8):: qmEFt(1:3)!charge*tauSp*EF/mass
|
||||
REAL(8):: qmEFt(1:3)!charge*tauIn*EF/mass
|
||||
|
||||
part_temp = part
|
||||
!Time step for the species
|
||||
tauSp = tau(part_temp%sp)
|
||||
!Get electric field at particle position
|
||||
qmEFt = part_temp%qm*gatherElecField(part_temp)*tauSp
|
||||
qmEFt = part_temp%qm*gatherElecField(part_temp)*tauIn
|
||||
!z
|
||||
part_temp%v(1) = part%v(1) + qmEFt(1)
|
||||
part_temp%r(1) = part%r(1) + part_temp%v(1)*tauSp
|
||||
part_temp%r(1) = part%r(1) + part_temp%v(1)*tauIn
|
||||
!r,theta
|
||||
v_p_oh_star(2) = part%v(2) + qmEFt(2)
|
||||
x_new = part%r(2) + v_p_oh_star(2)*tauSp
|
||||
x_new = part%r(2) + v_p_oh_star(2)*tauIn
|
||||
v_p_oh_star(3) = part%v(3) + qmEFt(3)
|
||||
y_new = v_p_oh_star(3)*tauSp
|
||||
y_new = v_p_oh_star(3)*tauIn
|
||||
r = DSQRT(x_new**2+y_new**2)
|
||||
part_temp%r(2) = r
|
||||
IF (r > 0.D0) THEN
|
||||
|
|
@ -228,25 +225,23 @@ MODULE moduleSolver
|
|||
END SUBROUTINE pushCylCharged
|
||||
|
||||
!Push charged particles in 1D cartesian coordinates
|
||||
PURE SUBROUTINE push1DCartCharged(part)
|
||||
PURE SUBROUTINE push1DCartCharged(part, tauIn)
|
||||
USE moduleSPecies
|
||||
USE moduleEM
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE(particle), INTENT(inout):: part
|
||||
REAL(8), INTENT(in):: tauIn
|
||||
TYPE(particle):: part_temp
|
||||
REAL(8):: tauSp
|
||||
REAL(8):: qmEFt(1:3)
|
||||
|
||||
part_temp = part
|
||||
!Time step for particle species
|
||||
tauSp = tau(part_temp%sp)
|
||||
!Get the electric field at particle position
|
||||
qmEFt = part_temp%qm*gatherElecField(part_temp)*tauSp
|
||||
qmEFt = part_temp%qm*gatherElecField(part_temp)*tauIn
|
||||
|
||||
!x
|
||||
part_temp%v(1) = part%v(1) + qmEFt(1)
|
||||
part_temp%r(1) = part%r(1) + part_temp%v(1)*tauSp
|
||||
part_temp%r(1) = part%r(1) + part_temp%v(1)*tauIn
|
||||
|
||||
part_temp%n_in = .FALSE.
|
||||
|
||||
|
|
@ -255,28 +250,27 @@ MODULE moduleSolver
|
|||
END SUBROUTINE push1DCartCharged
|
||||
|
||||
!Push one particle. Boris pusher for 1D Radial Charged particle
|
||||
PURE SUBROUTINE push1DRadCharged(part)
|
||||
PURE SUBROUTINE push1DRadCharged(part, tauIn)
|
||||
USE moduleSpecies
|
||||
USE moduleEM
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE(particle), INTENT(inout):: part
|
||||
REAL(8), INTENT(in):: tauIn
|
||||
REAL(8):: v_p_oh_star(1:2)
|
||||
TYPE(particle):: part_temp
|
||||
REAL(8):: x_new, y_new, r, sin_alpha, cos_alpha
|
||||
REAL(8):: tauSp
|
||||
REAL(8):: qmEFt(1:3)!charge*tauSp*EF/mass
|
||||
REAL(8):: qmEFt(1:3)!charge*tauIn*EF/mass
|
||||
|
||||
part_temp = part
|
||||
!Time step for the species
|
||||
tauSp = tau(part_temp%sp)
|
||||
!Get electric field at particle position
|
||||
qmEFt = part_temp%qm*gatherElecField(part_temp)*tauSp
|
||||
qmEFt = part_temp%qm*gatherElecField(part_temp)*tauMin
|
||||
!r,theta
|
||||
v_p_oh_star(1) = part%v(1) + qmEFt(1)
|
||||
x_new = part%r(1) + v_p_oh_star(1)*tauSp
|
||||
x_new = part%r(1) + v_p_oh_star(1)*tauIn
|
||||
v_p_oh_star(2) = part%v(2) + qmEFt(2)
|
||||
y_new = v_p_oh_star(2)*tauSp
|
||||
y_new = v_p_oh_star(2)*tauIn
|
||||
r = DSQRT(x_new**2+y_new**2)
|
||||
part_temp%r(1) = r
|
||||
IF (r > 0.D0) THEN
|
||||
|
|
@ -311,12 +305,13 @@ MODULE moduleSolver
|
|||
|
||||
SUBROUTINE doReset()
|
||||
USE moduleSpecies
|
||||
USE moduleMesh
|
||||
USE moduleList
|
||||
IMPLICIT NONE
|
||||
|
||||
INTEGER:: nn, n
|
||||
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
|
||||
|
||||
|
|
@ -335,18 +330,21 @@ 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
|
||||
|
||||
!$OMP SECTIONS
|
||||
!$OMP SECTION
|
||||
!Reset particles from injection
|
||||
nn = 0
|
||||
DO n = 1, nPartInj
|
||||
IF (partInj(n)%n_in) THEN
|
||||
|
|
@ -358,6 +356,7 @@ MODULE moduleSolver
|
|||
END DO
|
||||
|
||||
!$OMP SECTION
|
||||
!Reset particles from previous iteration
|
||||
nn = nInjIn
|
||||
DO n = 1, nPartOld
|
||||
IF (partTemp(n)%n_in) THEN
|
||||
|
|
@ -368,6 +367,7 @@ MODULE moduleSolver
|
|||
|
||||
END DO
|
||||
!$OMP SECTION
|
||||
!Reset particles from weighting scheme
|
||||
nn = nInjIn + nOldIn
|
||||
partCurr => partWScheme%head
|
||||
DO n = 1, nWScheme
|
||||
|
|
@ -381,6 +381,36 @@ 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
|
||||
mesh%vols(e)%obj%totalWeight = 0.D0
|
||||
CALL mesh%vols(e)%obj%listPart_in%erase()
|
||||
|
||||
END DO
|
||||
|
||||
!$OMP END SECTIONS
|
||||
|
||||
!$OMP SINGLE
|
||||
|
|
@ -622,6 +652,5 @@ MODULE moduleSolver
|
|||
|
||||
END SUBROUTINE doOutput
|
||||
|
||||
|
||||
END MODULE moduleSolver
|
||||
|
||||
|
|
|
|||
|
|
@ -11,11 +11,18 @@ MODULE moduleSpecies
|
|||
END TYPE speciesGeneric
|
||||
|
||||
TYPE, EXTENDS(speciesGeneric):: speciesNeutral
|
||||
CLASS(speciesGeneric), POINTER:: ion => NULL()
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: ionize => ionizeNeutral
|
||||
|
||||
END TYPE speciesNeutral
|
||||
|
||||
TYPE, EXTENDS(speciesGeneric):: speciesCharged
|
||||
REAL(8):: q=0.D0, qm=0.D0
|
||||
CLASS(speciesGeneric), POINTER:: ion => NULL(), neutral => NULL()
|
||||
CONTAINS
|
||||
PROCEDURE, PASS:: ionize => ionizeCharged
|
||||
PROCEDURE, PASS:: neutralize => neutralizeCharged
|
||||
|
||||
END TYPE speciesCharged
|
||||
|
||||
|
|
@ -25,7 +32,7 @@ MODULE moduleSpecies
|
|||
END TYPE
|
||||
|
||||
INTEGER:: nSpecies
|
||||
TYPE(speciesCont), ALLOCATABLE:: species(:)
|
||||
TYPE(speciesCont), ALLOCATABLE, TARGET:: species(:)
|
||||
|
||||
TYPE particle
|
||||
REAL(8):: r(1:3) !Position
|
||||
|
|
@ -45,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)
|
||||
|
|
@ -68,4 +74,59 @@ MODULE moduleSpecies
|
|||
|
||||
END FUNCTION speciesName2Index
|
||||
|
||||
!Change particle type to corresponding ion (neutral species)
|
||||
SUBROUTINE ionizeNeutral(self, part)
|
||||
USE moduleErrors
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(speciesNeutral), INTENT(IN):: self
|
||||
TYPE(particle), INTENT(inout):: part
|
||||
|
||||
IF (ASSOCIATED(self%ion)) THEN
|
||||
part%sp = self%ion%sp
|
||||
|
||||
ELSE
|
||||
CALL criticalError('No ion defined for species' // self%name, 'ionizeNeutral')
|
||||
|
||||
END IF
|
||||
|
||||
END SUBROUTINE ionizeNeutral
|
||||
|
||||
!Change particle type to corresponding ion (charged species)
|
||||
SUBROUTINE ionizeCharged(self, part)
|
||||
USE moduleErrors
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(speciesCharged), INTENT(IN):: self
|
||||
TYPE(particle), INTENT(inout):: part
|
||||
|
||||
IF (ASSOCIATED(self%ion)) THEN
|
||||
part%sp = self%ion%sp
|
||||
|
||||
ELSE
|
||||
CALL criticalError('No ion defined for species' // self%name, 'ionizeCharged')
|
||||
|
||||
END IF
|
||||
|
||||
END SUBROUTINE ionizeCharged
|
||||
|
||||
!Change particle type to corresponding neutral
|
||||
SUBROUTINE neutralizeCharged(self, part)
|
||||
USE moduleErrors
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(speciesCharged), INTENT(in):: self
|
||||
TYPE(particle), INTENT(inout):: part
|
||||
|
||||
IF (ASSOCIATED(self%neutral)) THEN
|
||||
part%sp = self%neutral%sp
|
||||
|
||||
ELSE
|
||||
CALL criticalError('No neutral defined for species' // self%name, 'neutralizeCharged')
|
||||
|
||||
END IF
|
||||
|
||||
END SUBROUTINE neutralizeCharged
|
||||
|
||||
END MODULE moduleSpecies
|
||||
|
||||
|
|
|
|||
|
|
@ -28,10 +28,10 @@ MODULE moduleTable
|
|||
amount = 0
|
||||
DO
|
||||
READ(id, '(A)', iostat = stat) dummy
|
||||
!Skip comment
|
||||
IF (INDEX(dummy,'#') /= 0) CYCLE
|
||||
!If EOF or error, exit file
|
||||
IF (stat /= 0) EXIT
|
||||
!Skip comment
|
||||
IF (INDEX(dummy,'#') /= 0) CYCLE
|
||||
!Add row
|
||||
amount = amount + 1
|
||||
|
||||
|
|
@ -52,6 +52,7 @@ MODULE moduleTable
|
|||
i = 0
|
||||
DO
|
||||
READ(id, '(A)', iostat = stat) dummy
|
||||
!TODO: Make this a function
|
||||
IF (INDEX(dummy,'#') /= 0) CYCLE
|
||||
IF (stat /= 0) EXIT
|
||||
!Add data
|
||||
|
|
@ -62,7 +63,7 @@ MODULE moduleTable
|
|||
|
||||
END DO
|
||||
|
||||
CLOSE(10)
|
||||
CLOSE(id)
|
||||
|
||||
self%xMin = self%x(1)
|
||||
self%xMax = self%x(amount)
|
||||
|
|
@ -113,7 +114,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