First commit of branch performance:
Bugs fixed: - Solved an issue with particles being injected with infinite velocity resulting in Inf velocity in some cells of the output files. - Particles are now equally distributed in cylindrical geometry along the radial direction. New features: - Particles now have their own weight that is recalculated when the particle moves to a new cell. This avoid the reduction of density at r = 0. Cases: - Added a case of Argon flow around a cylinder to measure performance and future improvements.
This commit is contained in:
parent
bd7e8b040b
commit
05f5adcfe1
10 changed files with 5003 additions and 28 deletions
42
runs/cylFlow/input.json
Normal file
42
runs/cylFlow/input.json
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
"output": {
|
||||||
|
"path": "./runs/cylFlow/",
|
||||||
|
"trigger": 100,
|
||||||
|
"cpuTime": false,
|
||||||
|
"numColl": false
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"type": "2DCyl",
|
||||||
|
"meshType": "gmsh",
|
||||||
|
"meshFile": "mesh.msh"
|
||||||
|
},
|
||||||
|
"species": [
|
||||||
|
{"name": "Argon", "type": "neutral", "mass": 6.633e-26, "weight": 5.0e6}
|
||||||
|
],
|
||||||
|
"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}
|
||||||
|
],
|
||||||
|
"inject": [
|
||||||
|
{"name": "Nozzle", "species": "Argon", "flow": 1.0, "units": "sccm", "v": 300.0, "T": [300.0, 300.0, 300.0], "n": [1, 0, 0], "physicalSurface": 1}
|
||||||
|
],
|
||||||
|
"reference": {
|
||||||
|
"density": 1.0e19,
|
||||||
|
"mass": 6.633e-26,
|
||||||
|
"temperature": 300.0,
|
||||||
|
"radius": 1.88e-10
|
||||||
|
},
|
||||||
|
"case": {
|
||||||
|
"tau": 6.e-7,
|
||||||
|
"time": 3.e-4
|
||||||
|
},
|
||||||
|
"interactions": {
|
||||||
|
"folderCollisions": "./data/collisions/",
|
||||||
|
"collisions": [
|
||||||
|
{"species_i": "Argon", "species_j": "Argon", "crossSections": ["Ar-Ar_Elastic.dat"]}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
79
runs/cylFlow/mesh.geo
Normal file
79
runs/cylFlow/mesh.geo
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
cl__1 = 1;
|
||||||
|
cyl_h = 0.005;
|
||||||
|
cyl_l = 0.02;
|
||||||
|
cyl_s = 0.03;
|
||||||
|
cyl_e = cyl_s + cyl_l;
|
||||||
|
dom_h = 0.03;
|
||||||
|
dom_l = 0.07;
|
||||||
|
|
||||||
|
Lcell = 0.001;
|
||||||
|
|
||||||
|
Point(1) = {0, 0, 0, cl__1};
|
||||||
|
Point(2) = {cyl_s, 0, 0, cl__1};
|
||||||
|
Point(3) = {cyl_s, cyl_h, 0, cl__1};
|
||||||
|
Point(4) = {cyl_e, cyl_h, 0, cl__1};
|
||||||
|
Point(5) = {cyl_e, 0, 0, cl__1};
|
||||||
|
Point(6) = {dom_l, 0, 0, cl__1};
|
||||||
|
Point(7) = {dom_l, cyl_h, 0, cl__1};
|
||||||
|
Point(8) = {dom_l, dom_h, 0, cl__1};
|
||||||
|
Point(9) = {cyl_e, dom_h, 0, cl__1};
|
||||||
|
Point(10) = {cyl_s, dom_h, 0, cl__1};
|
||||||
|
Point(11) = {0, dom_h, 0, cl__1};
|
||||||
|
Point(12) = {0, cyl_h, 0, cl__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, 1};
|
||||||
|
Line(13) = {12, 3};
|
||||||
|
Line(14) = {4, 7};
|
||||||
|
Line(15) = {4, 9};
|
||||||
|
Line(16) = {10, 3};
|
||||||
|
|
||||||
|
Line Loop(1) = {1, 2, -13, 12};
|
||||||
|
Plane Surface(1) = {1};
|
||||||
|
Line Loop(2) = {13, -16, 10, 11};
|
||||||
|
Plane Surface(2) = {2};
|
||||||
|
Line Loop(3) = {3, 15, 9, 16};
|
||||||
|
Plane Surface(3) = {3};
|
||||||
|
Line Loop(4) = {5, 6, -14, 4};
|
||||||
|
Plane Surface(4) = {4};
|
||||||
|
Line Loop(5) = {14, 7, 8, -15};
|
||||||
|
Plane Surface(5) = {5};
|
||||||
|
|
||||||
|
Physical Line(1) = {12, 11};
|
||||||
|
Physical Line(2) = {10, 9, 8};
|
||||||
|
Physical Line(3) = {7, 6};
|
||||||
|
Physical Line(4) = {2, 3, 4};
|
||||||
|
Physical Line(5) = {1, 5};
|
||||||
|
|
||||||
|
Physical Surface(1) = {1};
|
||||||
|
Physical Surface(2) = {2};
|
||||||
|
Physical Surface(3) = {3};
|
||||||
|
Physical Surface(4) = {4};
|
||||||
|
Physical Surface(5) = {5};
|
||||||
|
|
||||||
|
Transfinite Line {12, 2, 4, 6} = cyl_h/Lcell + 1 Using Progression 1;
|
||||||
|
Transfinite Line {1, 13, 10} = cyl_s/Lcell + 1 Using Progression 1;
|
||||||
|
Transfinite Line {11, 16, 15, 7} = (dom_h - cyl_h)/Lcell + 1 Using Progression 1;
|
||||||
|
Transfinite Line {3, 9} = cyl_l/Lcell + 1 Using Progression 1;
|
||||||
|
Transfinite Line {5, 14, 8} = (dom_l - cyl_e)/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};
|
||||||
4182
runs/cylFlow/mesh.msh
Normal file
4182
runs/cylFlow/mesh.msh
Normal file
File diff suppressed because it is too large
Load diff
629
runs/cylFlow/mesh.msh.opt
Normal file
629
runs/cylFlow/mesh.msh.opt
Normal file
|
|
@ -0,0 +1,629 @@
|
||||||
|
General.AxesFormatX = "%.3g";
|
||||||
|
General.AxesFormatY = "%.3g";
|
||||||
|
General.AxesFormatZ = "%.3g";
|
||||||
|
General.AxesLabelX = "z (m)";
|
||||||
|
General.AxesLabelY = "r (m)";
|
||||||
|
General.AxesLabelZ = "";
|
||||||
|
General.BackgroundImageFileName = "";
|
||||||
|
General.BuildOptions = " 64Bit ALGLIB Bamg Blas Blossom DIntegration Dlopen DomHex Fltk GMP Gmm[system] Hxt Hxt3D Jpeg Kbipack Lapack LinuxJoystick MathEx Mesh Metis[system] Mmg3d Mpeg NativeFileChooser Netgen ONELAB ONELABMetamodel OpenCASCADE OpenCASCADE-CAF OpenGL OpenMP OptHom Parser Plugins Png Post QuadTri Solver TetGen/BR Zlib";
|
||||||
|
General.DefaultFileName = "untitled.geo";
|
||||||
|
General.Display = "";
|
||||||
|
General.ErrorFileName = ".gmsh-errors";
|
||||||
|
General.ExecutableFileName = "/usr/bin/gmsh";
|
||||||
|
General.FileName = "/home/jorge/PPartiC/runs/cylFlow/mesh.msh";
|
||||||
|
General.FltkTheme = "";
|
||||||
|
General.GraphicsFont = "Helvetica";
|
||||||
|
General.GraphicsFontEngine = "Native";
|
||||||
|
General.GraphicsFontTitle = "Helvetica";
|
||||||
|
General.OptionsFileName = ".gmsh-options";
|
||||||
|
General.RecentFile0 = "/home/jorge/PPartiC/runs/cylFlow/mesh.msh";
|
||||||
|
General.RecentFile1 = "untitled.geo";
|
||||||
|
General.RecentFile2 = "mesh/Neutral_Expansion_Div.geo";
|
||||||
|
General.RecentFile3 = "mesh/Neutral_Expansion_Div.msh";
|
||||||
|
General.RecentFile4 = "Neutral_Expansion_Div.msh";
|
||||||
|
General.RecentFile5 = "Neutral_Expansion.geo";
|
||||||
|
General.RecentFile6 = "Neutral_Expansion_Div.geo";
|
||||||
|
General.RecentFile7 = "/home/jorge/Dropbox/UPMPlasmaLab/Post-Doc/Codes/PICCIL2D/PIC-FEM/Neutral_Expansion_Div.msh";
|
||||||
|
General.RecentFile8 = "Neutral_Expansion.msh";
|
||||||
|
General.RecentFile9 = "/home/jorge/Dropbox/UPMPlasmaLab/Post-Doc/Codes/PICCIL2D/PIC-FEM/Neutral_Expansion.msh";
|
||||||
|
General.TextEditor = "gedit '%s'";
|
||||||
|
General.TmpFileName = ".gmsh-tmp";
|
||||||
|
General.Version = "4.4.1";
|
||||||
|
General.WatchFilePattern = "";
|
||||||
|
General.AlphaBlending = 1;
|
||||||
|
General.Antialiasing = 0;
|
||||||
|
General.ArrowHeadRadius = 0.12;
|
||||||
|
General.ArrowStemLength = 0.5600000000000001;
|
||||||
|
General.ArrowStemRadius = 0.02;
|
||||||
|
General.Axes = 1;
|
||||||
|
General.AxesMikado = 0;
|
||||||
|
General.AxesAutoPosition = 1;
|
||||||
|
General.AxesForceValue = 0;
|
||||||
|
General.AxesMaxX = 1;
|
||||||
|
General.AxesMaxY = 1;
|
||||||
|
General.AxesMaxZ = 1;
|
||||||
|
General.AxesMinX = 0;
|
||||||
|
General.AxesMinY = 0;
|
||||||
|
General.AxesMinZ = 0;
|
||||||
|
General.AxesTicsX = 8;
|
||||||
|
General.AxesTicsY = 4;
|
||||||
|
General.AxesTicsZ = 5;
|
||||||
|
General.AxesValueMaxX = 1;
|
||||||
|
General.AxesValueMaxY = 1;
|
||||||
|
General.AxesValueMaxZ = 1;
|
||||||
|
General.AxesValueMinX = 0;
|
||||||
|
General.AxesValueMinY = 0;
|
||||||
|
General.AxesValueMinZ = 0;
|
||||||
|
General.BackgroundGradient = 1;
|
||||||
|
General.BackgroundImage3D = 0;
|
||||||
|
General.BackgroundImagePage = 0;
|
||||||
|
General.BackgroundImagePositionX = 0;
|
||||||
|
General.BackgroundImagePositionY = 0;
|
||||||
|
General.BackgroundImageWidth = -1;
|
||||||
|
General.BackgroundImageHeight = -1;
|
||||||
|
General.BoundingBoxSize = 0.07615773105863909;
|
||||||
|
General.Camera = 0;
|
||||||
|
General.CameraAperture = 40;
|
||||||
|
General.CameraEyeSeparationRatio = 1.5;
|
||||||
|
General.CameraFocalLengthRatio = 1;
|
||||||
|
General.Clip0A = 1;
|
||||||
|
General.Clip0B = 0;
|
||||||
|
General.Clip0C = 0;
|
||||||
|
General.Clip0D = 0;
|
||||||
|
General.Clip1A = 0;
|
||||||
|
General.Clip1B = 1;
|
||||||
|
General.Clip1C = 0;
|
||||||
|
General.Clip1D = 0;
|
||||||
|
General.Clip2A = 0;
|
||||||
|
General.Clip2B = 0;
|
||||||
|
General.Clip2C = 1;
|
||||||
|
General.Clip2D = 0;
|
||||||
|
General.Clip3A = -1;
|
||||||
|
General.Clip3B = 0;
|
||||||
|
General.Clip3C = 0;
|
||||||
|
General.Clip3D = 1;
|
||||||
|
General.Clip4A = 0;
|
||||||
|
General.Clip4B = -1;
|
||||||
|
General.Clip4C = 0;
|
||||||
|
General.Clip4D = 1;
|
||||||
|
General.Clip5A = 0;
|
||||||
|
General.Clip5B = 0;
|
||||||
|
General.Clip5C = -1;
|
||||||
|
General.Clip5D = 1;
|
||||||
|
General.ClipFactor = 5;
|
||||||
|
General.ClipOnlyDrawIntersectingVolume = 0;
|
||||||
|
General.ClipOnlyVolume = 0;
|
||||||
|
General.ClipPositionX = 650;
|
||||||
|
General.ClipPositionY = 150;
|
||||||
|
General.ClipWholeElements = 0;
|
||||||
|
General.ColorScheme = 1;
|
||||||
|
General.ConfirmOverwrite = 1;
|
||||||
|
General.ContextPositionX = 235;
|
||||||
|
General.ContextPositionY = 962;
|
||||||
|
General.DetachedMenu = 0;
|
||||||
|
General.DisplayBorderFactor = 0.2;
|
||||||
|
General.DoubleBuffer = 1;
|
||||||
|
General.DrawBoundingBoxes = 0;
|
||||||
|
General.ExpertMode = 0;
|
||||||
|
General.ExtraPositionX = 650;
|
||||||
|
General.ExtraPositionY = 350;
|
||||||
|
General.ExtraHeight = 100;
|
||||||
|
General.ExtraWidth = 100;
|
||||||
|
General.FastRedraw = 0;
|
||||||
|
General.FieldPositionX = 650;
|
||||||
|
General.FieldPositionY = 550;
|
||||||
|
General.FieldHeight = 488;
|
||||||
|
General.FieldWidth = 651;
|
||||||
|
General.FileChooserPositionX = 200;
|
||||||
|
General.FileChooserPositionY = 200;
|
||||||
|
General.FltkColorScheme = 0;
|
||||||
|
General.FontSize = -1;
|
||||||
|
General.GraphicsFontSize = 15;
|
||||||
|
General.GraphicsFontSizeTitle = 18;
|
||||||
|
General.GraphicsHeight = 1003;
|
||||||
|
General.GraphicsPositionX = 274;
|
||||||
|
General.GraphicsPositionY = 263;
|
||||||
|
General.GraphicsWidth = 1920;
|
||||||
|
General.HighOrderToolsPositionX = 650;
|
||||||
|
General.HighOrderToolsPositionY = 150;
|
||||||
|
General.HighResolutionGraphics = 1;
|
||||||
|
General.HighResolutionPointSizeFactor = 2;
|
||||||
|
General.InitialModule = 0;
|
||||||
|
General.InputScrolling = 1;
|
||||||
|
General.Light0 = 1;
|
||||||
|
General.Light0X = 0.65;
|
||||||
|
General.Light0Y = 0.65;
|
||||||
|
General.Light0Z = 1;
|
||||||
|
General.Light0W = 0;
|
||||||
|
General.Light1 = 0;
|
||||||
|
General.Light1X = 0.5;
|
||||||
|
General.Light1Y = 0.3;
|
||||||
|
General.Light1Z = 1;
|
||||||
|
General.Light1W = 0;
|
||||||
|
General.Light2 = 0;
|
||||||
|
General.Light2X = 0.5;
|
||||||
|
General.Light2Y = 0.3;
|
||||||
|
General.Light2Z = 1;
|
||||||
|
General.Light2W = 0;
|
||||||
|
General.Light3 = 0;
|
||||||
|
General.Light3X = 0.5;
|
||||||
|
General.Light3Y = 0.3;
|
||||||
|
General.Light3Z = 1;
|
||||||
|
General.Light3W = 0;
|
||||||
|
General.Light4 = 0;
|
||||||
|
General.Light4X = 0.5;
|
||||||
|
General.Light4Y = 0.3;
|
||||||
|
General.Light4Z = 1;
|
||||||
|
General.Light4W = 0;
|
||||||
|
General.Light5 = 0;
|
||||||
|
General.Light5X = 0.5;
|
||||||
|
General.Light5Y = 0.3;
|
||||||
|
General.Light5Z = 1;
|
||||||
|
General.Light5W = 0;
|
||||||
|
General.LineWidth = 1;
|
||||||
|
General.ManipulatorPositionX = 650;
|
||||||
|
General.ManipulatorPositionY = 150;
|
||||||
|
General.MaxX = 0.07000000000000001;
|
||||||
|
General.MaxY = 0.03;
|
||||||
|
General.MaxZ = 0;
|
||||||
|
General.MenuWidth = 219;
|
||||||
|
General.MenuHeight = 200;
|
||||||
|
General.MenuPositionX = 400;
|
||||||
|
General.MenuPositionY = 400;
|
||||||
|
General.MessageFontSize = -1;
|
||||||
|
General.MessageHeight = 300;
|
||||||
|
General.MinX = 0;
|
||||||
|
General.MinY = 0;
|
||||||
|
General.MinZ = 0;
|
||||||
|
General.MouseHoverMeshes = 0;
|
||||||
|
General.MouseSelection = 1;
|
||||||
|
General.MouseInvertZoom = 0;
|
||||||
|
General.NonModalWindows = 1;
|
||||||
|
General.NoPopup = 0;
|
||||||
|
General.NumThreads = 1;
|
||||||
|
General.OptionsPositionX = 827;
|
||||||
|
General.OptionsPositionY = 541;
|
||||||
|
General.Orthographic = 1;
|
||||||
|
General.PluginPositionX = 58;
|
||||||
|
General.PluginPositionY = 658;
|
||||||
|
General.PluginHeight = 488;
|
||||||
|
General.PluginWidth = 708;
|
||||||
|
General.PointSize = 3;
|
||||||
|
General.PolygonOffsetAlwaysOn = 0;
|
||||||
|
General.PolygonOffsetFactor = 1;
|
||||||
|
General.PolygonOffsetUnits = 1;
|
||||||
|
General.ProgressMeterStep = 20;
|
||||||
|
General.QuadricSubdivisions = 6;
|
||||||
|
General.RotationX = -0;
|
||||||
|
General.RotationY = 0;
|
||||||
|
General.RotationZ = -0;
|
||||||
|
General.RotationCenterGravity = 1;
|
||||||
|
General.RotationCenterX = 0;
|
||||||
|
General.RotationCenterY = 0;
|
||||||
|
General.RotationCenterZ = 0;
|
||||||
|
General.SaveOptions = 0;
|
||||||
|
General.SaveSession = 1;
|
||||||
|
General.ScaleX = 1;
|
||||||
|
General.ScaleY = 1;
|
||||||
|
General.ScaleZ = 1;
|
||||||
|
General.Shininess = 0.4;
|
||||||
|
General.ShininessExponent = 40;
|
||||||
|
General.ShowModuleMenu = 1;
|
||||||
|
General.ShowOptionsOnStartup = 0;
|
||||||
|
General.ShowMessagesOnStartup = 0;
|
||||||
|
General.SmallAxes = 1;
|
||||||
|
General.SmallAxesPositionX = -60;
|
||||||
|
General.SmallAxesPositionY = -40;
|
||||||
|
General.SmallAxesSize = 30;
|
||||||
|
General.StatisticsPositionX = 650;
|
||||||
|
General.StatisticsPositionY = 150;
|
||||||
|
General.Stereo = 0;
|
||||||
|
General.SystemMenuBar = 1;
|
||||||
|
General.Terminal = 0;
|
||||||
|
General.Tooltips = 1;
|
||||||
|
General.Trackball = 1;
|
||||||
|
General.TrackballHyperbolicSheet = 1;
|
||||||
|
General.TrackballQuaternion0 = 0;
|
||||||
|
General.TrackballQuaternion1 = 0;
|
||||||
|
General.TrackballQuaternion2 = 0;
|
||||||
|
General.TrackballQuaternion3 = 1;
|
||||||
|
General.TranslationX = 0;
|
||||||
|
General.TranslationY = 0;
|
||||||
|
General.TranslationZ = 0;
|
||||||
|
General.VectorType = 4;
|
||||||
|
General.Verbosity = 5;
|
||||||
|
General.VisibilityPositionX = 1118;
|
||||||
|
General.VisibilityPositionY = 464;
|
||||||
|
General.ZoomFactor = 4;
|
||||||
|
General.Color.Background = {255,255,255};
|
||||||
|
General.Color.BackgroundGradient = {208,215,255};
|
||||||
|
General.Color.Foreground = {85,85,85};
|
||||||
|
General.Color.Text = {0,0,0};
|
||||||
|
General.Color.Axes = {0,0,0};
|
||||||
|
General.Color.SmallAxes = {0,0,0};
|
||||||
|
General.Color.AmbientLight = {25,25,25};
|
||||||
|
General.Color.DiffuseLight = {255,255,255};
|
||||||
|
General.Color.SpecularLight = {255,255,255};
|
||||||
|
Geometry.DoubleClickedPointCommand = "";
|
||||||
|
Geometry.DoubleClickedLineCommand = "";
|
||||||
|
Geometry.DoubleClickedSurfaceCommand = "";
|
||||||
|
Geometry.DoubleClickedVolumeCommand = "";
|
||||||
|
Geometry.OCCTargetUnit = "";
|
||||||
|
Geometry.AutoCoherence = 1;
|
||||||
|
Geometry.Clip = 0;
|
||||||
|
Geometry.CopyMeshingMethod = 0;
|
||||||
|
Geometry.DoubleClickedEntityTag = 0;
|
||||||
|
Geometry.ExactExtrusion = 1;
|
||||||
|
Geometry.ExtrudeReturnLateralEntities = 1;
|
||||||
|
Geometry.ExtrudeSplinePoints = 5;
|
||||||
|
Geometry.HighlightOrphans = 0;
|
||||||
|
Geometry.LabelType = 0;
|
||||||
|
Geometry.Light = 1;
|
||||||
|
Geometry.LightTwoSide = 1;
|
||||||
|
Geometry.Lines = 1;
|
||||||
|
Geometry.LineNumbers = 0;
|
||||||
|
Geometry.LineSelectWidth = 3;
|
||||||
|
Geometry.LineType = 0;
|
||||||
|
Geometry.LineWidth = 2;
|
||||||
|
Geometry.MatchGeomAndMesh = 0;
|
||||||
|
Geometry.MatchMeshScaleFactor = 1;
|
||||||
|
Geometry.MatchMeshTolerance = 1e-06;
|
||||||
|
Geometry.Normals = 0;
|
||||||
|
Geometry.NumSubEdges = 40;
|
||||||
|
Geometry.OCCAutoFix = 1;
|
||||||
|
Geometry.OCCBooleanPreserveNumbering = 1;
|
||||||
|
Geometry.OCCDisableSTL = 0;
|
||||||
|
Geometry.OCCFixDegenerated = 0;
|
||||||
|
Geometry.OCCFixSmallEdges = 0;
|
||||||
|
Geometry.OCCFixSmallFaces = 0;
|
||||||
|
Geometry.OCCImportLabels = 1;
|
||||||
|
Geometry.OCCParallel = 0;
|
||||||
|
Geometry.OCCScaling = 1;
|
||||||
|
Geometry.OCCSewFaces = 0;
|
||||||
|
Geometry.OffsetX = 0;
|
||||||
|
Geometry.OffsetY = 0;
|
||||||
|
Geometry.OffsetZ = 0;
|
||||||
|
Geometry.OldCircle = 0;
|
||||||
|
Geometry.OldRuledSurface = 0;
|
||||||
|
Geometry.OldNewReg = 1;
|
||||||
|
Geometry.Points = 1;
|
||||||
|
Geometry.PointNumbers = 0;
|
||||||
|
Geometry.PointSelectSize = 6;
|
||||||
|
Geometry.PointSize = 4;
|
||||||
|
Geometry.PointType = 0;
|
||||||
|
Geometry.ReparamOnFaceRobust = 0;
|
||||||
|
Geometry.ScalingFactor = 1;
|
||||||
|
Geometry.OrientedPhysicals = 1;
|
||||||
|
Geometry.SnapX = 0.1;
|
||||||
|
Geometry.SnapY = 0.1;
|
||||||
|
Geometry.SnapZ = 0.1;
|
||||||
|
Geometry.Surfaces = 0;
|
||||||
|
Geometry.SurfaceNumbers = 0;
|
||||||
|
Geometry.SurfaceType = 0;
|
||||||
|
Geometry.Tangents = 0;
|
||||||
|
Geometry.Tolerance = 1e-08;
|
||||||
|
Geometry.ToleranceBoolean = 0;
|
||||||
|
Geometry.Transform = 0;
|
||||||
|
Geometry.TransformXX = 1;
|
||||||
|
Geometry.TransformXY = 0;
|
||||||
|
Geometry.TransformXZ = 0;
|
||||||
|
Geometry.TransformYX = 0;
|
||||||
|
Geometry.TransformYY = 1;
|
||||||
|
Geometry.TransformYZ = 0;
|
||||||
|
Geometry.TransformZX = 0;
|
||||||
|
Geometry.TransformZY = 0;
|
||||||
|
Geometry.TransformZZ = 1;
|
||||||
|
Geometry.Volumes = 0;
|
||||||
|
Geometry.VolumeNumbers = 0;
|
||||||
|
Geometry.Color.Points = {90,90,90};
|
||||||
|
Geometry.Color.Lines = {0,0,255};
|
||||||
|
Geometry.Color.Surfaces = {128,128,128};
|
||||||
|
Geometry.Color.Volumes = {255,255,0};
|
||||||
|
Geometry.Color.Selection = {255,0,0};
|
||||||
|
Geometry.Color.HighlightZero = {255,0,0};
|
||||||
|
Geometry.Color.HighlightOne = {255,150,0};
|
||||||
|
Geometry.Color.HighlightTwo = {255,255,0};
|
||||||
|
Geometry.Color.Tangents = {255,255,0};
|
||||||
|
Geometry.Color.Normals = {255,0,0};
|
||||||
|
Geometry.Color.Projection = {0,255,0};
|
||||||
|
Mesh.Algorithm = 2;
|
||||||
|
Mesh.Algorithm3D = 1;
|
||||||
|
Mesh.AngleSmoothNormals = 30;
|
||||||
|
Mesh.AngleToleranceFacetOverlap = 0.1;
|
||||||
|
Mesh.AnisoMax = 9.999999999999999e+32;
|
||||||
|
Mesh.AllowSwapAngle = 10;
|
||||||
|
Mesh.BdfFieldFormat = 1;
|
||||||
|
Mesh.Binary = 0;
|
||||||
|
Mesh.BoundaryLayerFanPoints = 5;
|
||||||
|
Mesh.CgnsImportOrder = 1;
|
||||||
|
Mesh.CgnsConstructTopology = 0;
|
||||||
|
Mesh.CharacteristicLengthExtendFromBoundary = 1;
|
||||||
|
Mesh.CharacteristicLengthFactor = 1;
|
||||||
|
Mesh.CharacteristicLengthMin = 0;
|
||||||
|
Mesh.CharacteristicLengthMax = 1e+22;
|
||||||
|
Mesh.CharacteristicLengthFromCurvature = 0;
|
||||||
|
Mesh.CharacteristicLengthFromPoints = 1;
|
||||||
|
Mesh.Clip = 0;
|
||||||
|
Mesh.ColorCarousel = 0;
|
||||||
|
Mesh.CompoundClassify = 1;
|
||||||
|
Mesh.CompoundCharacteristicLengthFactor = 0.5;
|
||||||
|
Mesh.CpuTime = 0;
|
||||||
|
Mesh.DrawSkinOnly = 0;
|
||||||
|
Mesh.Dual = 0;
|
||||||
|
Mesh.ElementOrder = 1;
|
||||||
|
Mesh.Explode = 1;
|
||||||
|
Mesh.FlexibleTransfinite = 0;
|
||||||
|
Mesh.NewtonConvergenceTestXYZ = 0;
|
||||||
|
Mesh.Format = 10;
|
||||||
|
Mesh.Hexahedra = 1;
|
||||||
|
Mesh.HighOrderIterMax = 100;
|
||||||
|
Mesh.HighOrderNumLayers = 6;
|
||||||
|
Mesh.HighOrderOptimize = 0;
|
||||||
|
Mesh.HighOrderPassMax = 25;
|
||||||
|
Mesh.HighOrderPeriodic = 0;
|
||||||
|
Mesh.HighOrderPoissonRatio = 0.33;
|
||||||
|
Mesh.HighOrderPrimSurfMesh = 0;
|
||||||
|
Mesh.HighOrderDistCAD = 0;
|
||||||
|
Mesh.HighOrderThresholdMin = 0.1;
|
||||||
|
Mesh.HighOrderThresholdMax = 2;
|
||||||
|
Mesh.LabelSampling = 1;
|
||||||
|
Mesh.LabelType = 0;
|
||||||
|
Mesh.LcIntegrationPrecision = 1e-09;
|
||||||
|
Mesh.Light = 1;
|
||||||
|
Mesh.LightLines = 2;
|
||||||
|
Mesh.LightTwoSide = 1;
|
||||||
|
Mesh.Lines = 1;
|
||||||
|
Mesh.LineNumbers = 0;
|
||||||
|
Mesh.LineWidth = 1;
|
||||||
|
Mesh.MaxNumThreads1D = 0;
|
||||||
|
Mesh.MaxNumThreads2D = 0;
|
||||||
|
Mesh.MaxNumThreads3D = 0;
|
||||||
|
Mesh.MeshOnlyVisible = 0;
|
||||||
|
Mesh.MetisAlgorithm = 1;
|
||||||
|
Mesh.MetisEdgeMatching = 2;
|
||||||
|
Mesh.MetisMaxLoadImbalance = -1;
|
||||||
|
Mesh.MetisObjective = 1;
|
||||||
|
Mesh.MetisMinConn = -1;
|
||||||
|
Mesh.MetisRefinementAlgorithm = 2;
|
||||||
|
Mesh.MinimumCirclePoints = 7;
|
||||||
|
Mesh.MinimumCurvePoints = 3;
|
||||||
|
Mesh.MshFileVersion = 4.1;
|
||||||
|
Mesh.MedFileMinorVersion = -1;
|
||||||
|
Mesh.MedImportGroupsOfNodes = 0;
|
||||||
|
Mesh.MedSingleModel = 0;
|
||||||
|
Mesh.PartitionHexWeight = -1;
|
||||||
|
Mesh.PartitionLineWeight = -1;
|
||||||
|
Mesh.PartitionPrismWeight = -1;
|
||||||
|
Mesh.PartitionPyramidWeight = -1;
|
||||||
|
Mesh.PartitionQuadWeight = -1;
|
||||||
|
Mesh.PartitionTrihedronWeight = 0;
|
||||||
|
Mesh.PartitionTetWeight = -1;
|
||||||
|
Mesh.PartitionTriWeight = -1;
|
||||||
|
Mesh.PartitionCreateTopology = 1;
|
||||||
|
Mesh.PartitionCreatePhysicals = 1;
|
||||||
|
Mesh.PartitionCreateGhostCells = 0;
|
||||||
|
Mesh.PartitionSplitMeshFiles = 0;
|
||||||
|
Mesh.PartitionTopologyFile = 0;
|
||||||
|
Mesh.PartitionOldStyleMsh2 = 1;
|
||||||
|
Mesh.NbHexahedra = 0;
|
||||||
|
Mesh.NbNodes = 27248;
|
||||||
|
Mesh.NbPartitions = 0;
|
||||||
|
Mesh.NbPrisms = 0;
|
||||||
|
Mesh.NbPyramids = 0;
|
||||||
|
Mesh.NbTrihedra = 0;
|
||||||
|
Mesh.NbQuadrangles = 26877;
|
||||||
|
Mesh.NbTetrahedra = 0;
|
||||||
|
Mesh.NbTriangles = 0;
|
||||||
|
Mesh.Normals = 0;
|
||||||
|
Mesh.NumSubEdges = 2;
|
||||||
|
Mesh.Optimize = 1;
|
||||||
|
Mesh.OptimizeThreshold = 0.3;
|
||||||
|
Mesh.OptimizeNetgen = 0;
|
||||||
|
Mesh.Points = 0;
|
||||||
|
Mesh.PointNumbers = 0;
|
||||||
|
Mesh.PointSize = 4;
|
||||||
|
Mesh.PointType = 0;
|
||||||
|
Mesh.Prisms = 1;
|
||||||
|
Mesh.Pyramids = 1;
|
||||||
|
Mesh.Trihedra = 1;
|
||||||
|
Mesh.Quadrangles = 1;
|
||||||
|
Mesh.QualityInf = 0;
|
||||||
|
Mesh.QualitySup = 0;
|
||||||
|
Mesh.QualityType = 2;
|
||||||
|
Mesh.RadiusInf = 0;
|
||||||
|
Mesh.RadiusSup = 0;
|
||||||
|
Mesh.RandomFactor = 1e-09;
|
||||||
|
Mesh.RandomFactor3D = 1e-12;
|
||||||
|
Mesh.RandomSeed = 1;
|
||||||
|
Mesh.PreserveNumberingMsh2 = 0;
|
||||||
|
Mesh.IgnorePeriodicity = 0;
|
||||||
|
Mesh.RecombinationAlgorithm = 1;
|
||||||
|
Mesh.RecombineAll = 0;
|
||||||
|
Mesh.RecombineOptimizeTopology = 5;
|
||||||
|
Mesh.Recombine3DAll = 0;
|
||||||
|
Mesh.Recombine3DLevel = 0;
|
||||||
|
Mesh.Recombine3DConformity = 0;
|
||||||
|
Mesh.RefineSteps = 10;
|
||||||
|
Mesh.Renumber = 1;
|
||||||
|
Mesh.SaveAll = 0;
|
||||||
|
Mesh.SaveElementTagType = 1;
|
||||||
|
Mesh.SaveTopology = 0;
|
||||||
|
Mesh.SaveParametric = 0;
|
||||||
|
Mesh.SaveGroupsOfNodes = 0;
|
||||||
|
Mesh.ScalingFactor = 1;
|
||||||
|
Mesh.SecondOrderExperimental = 0;
|
||||||
|
Mesh.SecondOrderIncomplete = 0;
|
||||||
|
Mesh.SecondOrderLinear = 0;
|
||||||
|
Mesh.Smoothing = 1;
|
||||||
|
Mesh.SmoothCrossField = 0;
|
||||||
|
Mesh.CrossFieldClosestPoint = 1;
|
||||||
|
Mesh.SmoothNormals = 0;
|
||||||
|
Mesh.SmoothRatio = 1.8;
|
||||||
|
Mesh.StlOneSolidPerSurface = 0;
|
||||||
|
Mesh.StlRemoveDuplicateTriangles = 0;
|
||||||
|
Mesh.SubdivisionAlgorithm = 0;
|
||||||
|
Mesh.SurfaceEdges = 0;
|
||||||
|
Mesh.SurfaceFaces = 0;
|
||||||
|
Mesh.SurfaceNumbers = 0;
|
||||||
|
Mesh.SwitchElementTags = 0;
|
||||||
|
Mesh.Tangents = 0;
|
||||||
|
Mesh.Tetrahedra = 1;
|
||||||
|
Mesh.ToleranceEdgeLength = 0;
|
||||||
|
Mesh.ToleranceInitialDelaunay = 1e-08;
|
||||||
|
Mesh.Triangles = 1;
|
||||||
|
Mesh.UnvStrictFormat = 1;
|
||||||
|
Mesh.VolumeEdges = 1;
|
||||||
|
Mesh.VolumeFaces = 0;
|
||||||
|
Mesh.VolumeNumbers = 0;
|
||||||
|
Mesh.Voronoi = 0;
|
||||||
|
Mesh.ZoneDefinition = 0;
|
||||||
|
Mesh.Color.Points = {0,0,255};
|
||||||
|
Mesh.Color.PointsSup = {255,0,255};
|
||||||
|
Mesh.Color.Lines = {0,0,0};
|
||||||
|
Mesh.Color.Triangles = {160,150,255};
|
||||||
|
Mesh.Color.Quadrangles = {130,120,225};
|
||||||
|
Mesh.Color.Tetrahedra = {160,150,255};
|
||||||
|
Mesh.Color.Hexahedra = {130,120,225};
|
||||||
|
Mesh.Color.Prisms = {232,210,23};
|
||||||
|
Mesh.Color.Pyramids = {217,113,38};
|
||||||
|
Mesh.Color.Trihedra = {20,255,0};
|
||||||
|
Mesh.Color.Tangents = {255,255,0};
|
||||||
|
Mesh.Color.Normals = {255,0,0};
|
||||||
|
Mesh.Color.Zero = {255,120,0};
|
||||||
|
Mesh.Color.One = {0,255,132};
|
||||||
|
Mesh.Color.Two = {255,160,0};
|
||||||
|
Mesh.Color.Three = {0,255,192};
|
||||||
|
Mesh.Color.Four = {255,200,0};
|
||||||
|
Mesh.Color.Five = {0,216,255};
|
||||||
|
Mesh.Color.Six = {255,240,0};
|
||||||
|
Mesh.Color.Seven = {0,176,255};
|
||||||
|
Mesh.Color.Eight = {228,255,0};
|
||||||
|
Mesh.Color.Nine = {0,116,255};
|
||||||
|
Mesh.Color.Ten = {188,255,0};
|
||||||
|
Mesh.Color.Eleven = {0,76,255};
|
||||||
|
Mesh.Color.Twelve = {148,255,0};
|
||||||
|
Mesh.Color.Thirteen = {24,0,255};
|
||||||
|
Mesh.Color.Fourteen = {108,255,0};
|
||||||
|
Mesh.Color.Fifteen = {84,0,255};
|
||||||
|
Mesh.Color.Sixteen = {68,255,0};
|
||||||
|
Mesh.Color.Seventeen = {104,0,255};
|
||||||
|
Mesh.Color.Eighteen = {0,255,52};
|
||||||
|
Mesh.Color.Nineteen = {184,0,255};
|
||||||
|
Solver.Executable0 = "";
|
||||||
|
Solver.Executable1 = "";
|
||||||
|
Solver.Executable2 = "";
|
||||||
|
Solver.Executable3 = "";
|
||||||
|
Solver.Executable4 = "";
|
||||||
|
Solver.Executable5 = "";
|
||||||
|
Solver.Executable6 = "";
|
||||||
|
Solver.Executable7 = "";
|
||||||
|
Solver.Executable8 = "";
|
||||||
|
Solver.Executable9 = "";
|
||||||
|
Solver.Name0 = "GetDP";
|
||||||
|
Solver.Name1 = "";
|
||||||
|
Solver.Name2 = "";
|
||||||
|
Solver.Name3 = "";
|
||||||
|
Solver.Name4 = "";
|
||||||
|
Solver.Name5 = "";
|
||||||
|
Solver.Name6 = "";
|
||||||
|
Solver.Name7 = "";
|
||||||
|
Solver.Name8 = "";
|
||||||
|
Solver.Name9 = "";
|
||||||
|
Solver.Extension0 = ".pro";
|
||||||
|
Solver.Extension1 = "";
|
||||||
|
Solver.Extension2 = "";
|
||||||
|
Solver.Extension3 = "";
|
||||||
|
Solver.Extension4 = "";
|
||||||
|
Solver.Extension5 = "";
|
||||||
|
Solver.Extension6 = "";
|
||||||
|
Solver.Extension7 = "";
|
||||||
|
Solver.Extension8 = "";
|
||||||
|
Solver.Extension9 = "";
|
||||||
|
Solver.OctaveInterpreter = "octave";
|
||||||
|
Solver.PythonInterpreter = "python";
|
||||||
|
Solver.RemoteLogin0 = "";
|
||||||
|
Solver.RemoteLogin1 = "";
|
||||||
|
Solver.RemoteLogin2 = "";
|
||||||
|
Solver.RemoteLogin3 = "";
|
||||||
|
Solver.RemoteLogin4 = "";
|
||||||
|
Solver.RemoteLogin5 = "";
|
||||||
|
Solver.RemoteLogin6 = "";
|
||||||
|
Solver.RemoteLogin7 = "";
|
||||||
|
Solver.RemoteLogin8 = "";
|
||||||
|
Solver.RemoteLogin9 = "";
|
||||||
|
Solver.SocketName = ".gmshsock";
|
||||||
|
Solver.AlwaysListen = 0;
|
||||||
|
Solver.AutoArchiveOutputFiles = 0;
|
||||||
|
Solver.AutoCheck = 1;
|
||||||
|
Solver.AutoLoadDatabase = 0;
|
||||||
|
Solver.AutoSaveDatabase = 1;
|
||||||
|
Solver.AutoMesh = 2;
|
||||||
|
Solver.AutoMergeFile = 1;
|
||||||
|
Solver.AutoShowViews = 2;
|
||||||
|
Solver.AutoShowLastStep = 1;
|
||||||
|
Solver.Plugins = 0;
|
||||||
|
Solver.ShowInvisibleParameters = 0;
|
||||||
|
Solver.Timeout = 5;
|
||||||
|
PostProcessing.DoubleClickedGraphPointCommand = "";
|
||||||
|
PostProcessing.GraphPointCommand = "";
|
||||||
|
PostProcessing.AnimationDelay = 0.1;
|
||||||
|
PostProcessing.AnimationCycle = 0;
|
||||||
|
PostProcessing.AnimationStep = 1;
|
||||||
|
PostProcessing.CombineRemoveOriginal = 1;
|
||||||
|
PostProcessing.DoubleClickedGraphPointX = 0;
|
||||||
|
PostProcessing.DoubleClickedGraphPointY = 0;
|
||||||
|
PostProcessing.DoubleClickedView = 0;
|
||||||
|
PostProcessing.ForceElementData = 0;
|
||||||
|
PostProcessing.ForceNodeData = 0;
|
||||||
|
PostProcessing.Format = 10;
|
||||||
|
PostProcessing.GraphPointX = 0;
|
||||||
|
PostProcessing.GraphPointY = 0;
|
||||||
|
PostProcessing.HorizontalScales = 1;
|
||||||
|
PostProcessing.Link = 0;
|
||||||
|
PostProcessing.NbViews = 0;
|
||||||
|
PostProcessing.Plugins = 1;
|
||||||
|
PostProcessing.SaveInterpolationMatrices = 1;
|
||||||
|
PostProcessing.SaveMesh = 1;
|
||||||
|
PostProcessing.Smoothing = 0;
|
||||||
|
Print.ParameterCommand = "Mesh.Clip=1; View.Clip=1; General.ClipWholeElements=1; General.Clip0D=Print.Parameter; SetChanged;";
|
||||||
|
Print.Parameter = 0;
|
||||||
|
Print.ParameterFirst = -1;
|
||||||
|
Print.ParameterLast = 1;
|
||||||
|
Print.ParameterSteps = 10;
|
||||||
|
Print.Background = 0;
|
||||||
|
Print.CompositeWindows = 0;
|
||||||
|
Print.PgfTwoDim = 1;
|
||||||
|
Print.PgfExportAxis = 0;
|
||||||
|
Print.PgfHorizontalBar = 0;
|
||||||
|
Print.DeleteTemporaryFiles = 1;
|
||||||
|
Print.EpsBestRoot = 1;
|
||||||
|
Print.EpsCompress = 0;
|
||||||
|
Print.EpsLineWidthFactor = 1;
|
||||||
|
Print.EpsOcclusionCulling = 1;
|
||||||
|
Print.EpsPointSizeFactor = 1;
|
||||||
|
Print.EpsPS3Shading = 0;
|
||||||
|
Print.EpsQuality = 1;
|
||||||
|
Print.Format = 10;
|
||||||
|
Print.GeoLabels = 1;
|
||||||
|
Print.GeoOnlyPhysicals = 0;
|
||||||
|
Print.GifDither = 0;
|
||||||
|
Print.GifInterlace = 0;
|
||||||
|
Print.GifSort = 1;
|
||||||
|
Print.GifTransparent = 0;
|
||||||
|
Print.Height = -1;
|
||||||
|
Print.JpegQuality = 100;
|
||||||
|
Print.JpegSmoothing = 0;
|
||||||
|
Print.PostElementary = 1;
|
||||||
|
Print.PostElement = 0;
|
||||||
|
Print.PostGamma = 0;
|
||||||
|
Print.PostEta = 0;
|
||||||
|
Print.PostSICN = 0;
|
||||||
|
Print.PostSIGE = 0;
|
||||||
|
Print.PostDisto = 0;
|
||||||
|
Print.TexAsEquation = 0;
|
||||||
|
Print.Text = 1;
|
||||||
|
Print.X3dCompatibility = 0;
|
||||||
|
Print.X3dPrecision = 1e-09;
|
||||||
|
Print.X3dRemoveInnerBorders = 0;
|
||||||
|
Print.X3dTransparency = 0;
|
||||||
|
Print.Width = -1;
|
||||||
|
|
@ -9,7 +9,10 @@ MODULE moduleInject
|
||||||
REAL(8):: n(1:3) !Direction of injection
|
REAL(8):: n(1:3) !Direction of injection
|
||||||
INTEGER:: nParticles !Number of particles to introduce each time step
|
INTEGER:: nParticles !Number of particles to introduce each time step
|
||||||
INTEGER:: pt !Species of injection
|
INTEGER:: pt !Species of injection
|
||||||
|
INTEGER:: nEdges
|
||||||
INTEGER, ALLOCATABLE:: edges(:) !Array with edges
|
INTEGER, ALLOCATABLE:: edges(:) !Array with edges
|
||||||
|
REAL(8), ALLOCATABLE:: weight(:) !weight of cells for injection
|
||||||
|
REAL(8):: sumWeight
|
||||||
CONTAINS
|
CONTAINS
|
||||||
PROCEDURE, PASS:: init => initInject
|
PROCEDURE, PASS:: init => initInject
|
||||||
PROCEDURE, PASS:: addParticles => addParticlesMaxwellian
|
PROCEDURE, PASS:: addParticles => addParticlesMaxwellian
|
||||||
|
|
@ -22,6 +25,7 @@ MODULE moduleInject
|
||||||
CONTAINS
|
CONTAINS
|
||||||
SUBROUTINE initInject(self, i, v, n, T, flow, pt, physicalSurface)
|
SUBROUTINE initInject(self, i, v, n, T, flow, pt, physicalSurface)
|
||||||
USE moduleMesh
|
USE moduleMesh
|
||||||
|
USE moduleMeshCyl
|
||||||
USE moduleRefParam
|
USE moduleRefParam
|
||||||
USE moduleConstParam
|
USE moduleConstParam
|
||||||
USE moduleSpecies
|
USE moduleSpecies
|
||||||
|
|
@ -32,7 +36,7 @@ MODULE moduleInject
|
||||||
REAL(8), INTENT(in):: v, n(1:3), T(1:3)
|
REAL(8), INTENT(in):: v, n(1:3), T(1:3)
|
||||||
INTEGER, INTENT(in):: pt, physicalSurface
|
INTEGER, INTENT(in):: pt, physicalSurface
|
||||||
REAL(8), INTENT(in):: flow
|
REAL(8), INTENT(in):: flow
|
||||||
INTEGER:: nEdges, e, et
|
INTEGER:: e, et
|
||||||
INTEGER:: phSurface(1:mesh%numEdges)
|
INTEGER:: phSurface(1:mesh%numEdges)
|
||||||
|
|
||||||
self%id = i
|
self%id = i
|
||||||
|
|
@ -49,17 +53,24 @@ MODULE moduleInject
|
||||||
|
|
||||||
END DO
|
END DO
|
||||||
|
|
||||||
nEdges = COUNT(phSurface == physicalSurface)
|
self%nEdges = COUNT(phSurface == physicalSurface)
|
||||||
ALLOCATE(inject(i)%edges(1:nEdges))
|
ALLOCATE(inject(i)%edges(1:self%nEdges))
|
||||||
|
ALLOCATE(inject(i)%weight(1:self%nEdges))
|
||||||
et = 0
|
et = 0
|
||||||
DO e=1, mesh%numEdges
|
DO e=1, mesh%numEdges
|
||||||
IF (mesh%edges(e)%obj%physicalSurface == physicalSurface) THEN
|
IF (mesh%edges(e)%obj%physicalSurface == physicalSurface) THEN
|
||||||
et = et + 1
|
et = et + 1
|
||||||
self%edges(et) = mesh%edges(e)%obj%n
|
self%edges(et) = mesh%edges(e)%obj%n
|
||||||
|
SELECT TYPE(edge => mesh%edges(e)%obj)
|
||||||
|
CLASS IS (meshEdgeCyl)
|
||||||
|
self%weight(et) = (edge%r(1)+edge%r(2))/2.D0
|
||||||
|
|
||||||
|
END SELECT
|
||||||
|
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
END DO
|
END DO
|
||||||
|
self%sumWeight = SUM(self%weight)
|
||||||
nPartInj = nPartInj + self%nParticles
|
nPartInj = nPartInj + self%nParticles
|
||||||
|
|
||||||
END SUBROUTINE
|
END SUBROUTINE
|
||||||
|
|
@ -70,8 +81,11 @@ MODULE moduleInject
|
||||||
REAL(8), INTENT (in):: u, vth
|
REAL(8), INTENT (in):: u, vth
|
||||||
REAL(8):: x, y
|
REAL(8):: x, y
|
||||||
vBC=0.D0
|
vBC=0.D0
|
||||||
|
x = 0.D0
|
||||||
|
|
||||||
x=RAND()
|
DO WHILE (x == 0.D0)
|
||||||
|
x=RAND()
|
||||||
|
END DO
|
||||||
y=RAND()
|
y=RAND()
|
||||||
|
|
||||||
vBC = u + vth*DSQRT(-2.D0*DLOG(x))*DCOS(2.D0*PI*y)
|
vBC = u + vth*DSQRT(-2.D0*DLOG(x))*DCOS(2.D0*PI*y)
|
||||||
|
|
@ -86,6 +100,8 @@ MODULE moduleInject
|
||||||
IMPLICIT NONE
|
IMPLICIT NONE
|
||||||
|
|
||||||
CLASS(injectGeneric), INTENT(in):: self
|
CLASS(injectGeneric), INTENT(in):: self
|
||||||
|
REAL(8):: randomX
|
||||||
|
INTEGER:: j
|
||||||
INTEGER:: randomEdge
|
INTEGER:: randomEdge
|
||||||
REAL(8):: randomPos
|
REAL(8):: randomPos
|
||||||
REAL(8):: vVec(1:3), vTh(1:3)
|
REAL(8):: vVec(1:3), vTh(1:3)
|
||||||
|
|
@ -93,15 +109,31 @@ MODULE moduleInject
|
||||||
INTEGER:: n1 = 0, n2 = 0
|
INTEGER:: n1 = 0, n2 = 0
|
||||||
!Edge nodes coordinates
|
!Edge nodes coordinates
|
||||||
REAL(8):: p1(1:3) = 0.D0, p2(1:3) = 0.D0
|
REAL(8):: p1(1:3) = 0.D0, p2(1:3) = 0.D0
|
||||||
|
INTEGER:: nMin, nMax !Min and Max index in part_inj array
|
||||||
INTEGER:: n
|
INTEGER:: n
|
||||||
|
|
||||||
vVec = self%v * self%n
|
vVec = self%v * self%n
|
||||||
vTh = DSQRT(self%T/species(self%pt)%obj%m)
|
vTh = DSQRT(self%T/species(self%pt)%obj%m)
|
||||||
|
|
||||||
!Insert particles
|
!Insert particles
|
||||||
DO n = 1, self%nParticles
|
!TODO: Adjust for multiple injections
|
||||||
|
nMin = 1
|
||||||
|
nMax = self%nParticles
|
||||||
|
!Assign particle type
|
||||||
|
part_inj(nMin:nMax)%pt = self%pt
|
||||||
|
!Assign weight to particle.
|
||||||
|
part_inj(nMin:nMax)%weight = species(self%pt)%obj%weight
|
||||||
|
part_inj(nMin:nMax)%n_in = .TRUE.
|
||||||
|
DO n = nMin, nMax
|
||||||
!Select edge randomly from which inject particle
|
!Select edge randomly from which inject particle
|
||||||
randomEdge = self%edges(INT(RAND()*(SIZE(self%edges)-1)+1))
|
randomX = RAND()*self%sumWeight
|
||||||
|
DO j = 1, self%nEdges
|
||||||
|
IF (randomX < self%weight(j)) EXIT
|
||||||
|
randomX = randomX - self%weight(j)
|
||||||
|
|
||||||
|
END DO
|
||||||
|
|
||||||
|
randomEdge = self%edges(j)
|
||||||
|
|
||||||
!Get coordinates of edge nodes
|
!Get coordinates of edge nodes
|
||||||
SELECT TYPE(edge => mesh%edges(randomEdge)%obj)
|
SELECT TYPE(edge => mesh%edges(randomEdge)%obj)
|
||||||
|
|
@ -132,8 +164,6 @@ MODULE moduleInject
|
||||||
|
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
part_inj(n)%pt = self%pt
|
|
||||||
part_inj(n)%n_in = .TRUE.
|
|
||||||
part_inj(n)%v = (/ vBC(vVec(1), vTh(1)), &
|
part_inj(n)%v = (/ vBC(vVec(1), vTh(1)), &
|
||||||
vBC(vVec(2), vTh(2)), &
|
vBC(vVec(2), vTh(2)), &
|
||||||
vBC(vVec(3), vTh(3)) /)
|
vBC(vVec(3), vTh(3)) /)
|
||||||
|
|
@ -145,6 +175,7 @@ MODULE moduleInject
|
||||||
part_inj(n)%r(2) = p1(2) + randomPos*(p2(2) - p1(2))
|
part_inj(n)%r(2) = p1(2) + randomPos*(p2(2) - p1(2))
|
||||||
part_inj(n)%r(3) = p1(3) + randomPos*(p2(3) - p1(3))
|
part_inj(n)%r(3) = p1(3) + randomPos*(p2(3) - p1(3))
|
||||||
|
|
||||||
|
|
||||||
!Push new particle
|
!Push new particle
|
||||||
CALL push(part_inj(n))
|
CALL push(part_inj(n))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,11 +74,11 @@ MODULE moduleInput
|
||||||
IF (.NOT. found) CALL criticalError('Reference radius not found','readReference')
|
IF (.NOT. found) CALL criticalError('Reference radius not found','readReference')
|
||||||
|
|
||||||
!Derived parameters
|
!Derived parameters
|
||||||
|
v_ref = DSQRT(kb*T_ref/m_ref) !reference velocity
|
||||||
sigma_ref = PI*(r_ref+r_ref)**2 !reference cross section
|
sigma_ref = PI*(r_ref+r_ref)**2 !reference cross section
|
||||||
L_ref = 1.D0/(sigma_ref*n_ref) !mean free path
|
L_ref = 1.D0/(sigma_ref*n_ref) !mean free path
|
||||||
ti_ref = L_ref/v_ref !reference time
|
ti_ref = L_ref/v_ref !reference time
|
||||||
Vol_ref = L_ref**3 !reference volume
|
Vol_ref = L_ref**3 !reference volume
|
||||||
v_ref = DSQRT(kb*T_ref/m_ref) !reference velocity
|
|
||||||
|
|
||||||
END SUBROUTINE readReference
|
END SUBROUTINE readReference
|
||||||
|
|
||||||
|
|
@ -104,7 +104,10 @@ MODULE moduleInput
|
||||||
IF (.NOT. found) CALL criticalError('Required parameter time not found','readCase')
|
IF (.NOT. found) CALL criticalError('Required parameter time not found','readCase')
|
||||||
|
|
||||||
!Convert simulation time to number of iterations
|
!Convert simulation time to number of iterations
|
||||||
tmax = INT(time/(ti_ref*tau))
|
tmax = INT(time/tau)
|
||||||
|
|
||||||
|
!Makes tau non-dimensional
|
||||||
|
tau = tau / ti_ref
|
||||||
|
|
||||||
END SUBROUTINE readCase
|
END SUBROUTINE readCase
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -124,11 +124,12 @@ MODULE moduleMesh
|
||||||
|
|
||||||
END SUBROUTINE collision_interface
|
END SUBROUTINE collision_interface
|
||||||
|
|
||||||
SUBROUTINE findCell_interface(self, part)
|
SUBROUTINE findCell_interface(self, part, oldCell)
|
||||||
USE moduleSpecies
|
USE moduleSpecies
|
||||||
|
|
||||||
IMPORT:: meshVol
|
IMPORT:: meshVol
|
||||||
CLASS(meshVol), INTENT(in):: self
|
CLASS(meshVol), INTENT(in):: self
|
||||||
|
CLASS(meshVol), OPTIONAL, INTENT(in):: oldCell
|
||||||
CLASS(particle), INTENT(inout):: part
|
CLASS(particle), INTENT(inout):: part
|
||||||
|
|
||||||
END SUBROUTINE findCell_interface
|
END SUBROUTINE findCell_interface
|
||||||
|
|
|
||||||
|
|
@ -404,43 +404,47 @@ MODULE moduleMeshCyl
|
||||||
tensorS = outerProduct(part%v, part%v)
|
tensorS = outerProduct(part%v, part%v)
|
||||||
|
|
||||||
vertex => self%n1%output(part%pt)
|
vertex => self%n1%output(part%pt)
|
||||||
vertex%den = vertex%den + w_p(1)
|
vertex%den = vertex%den + part%weight*w_p(1)
|
||||||
vertex%mom(:) = vertex%mom(:) + w_p(1)*part%v(:)
|
vertex%mom(:) = vertex%mom(:) + part%weight*w_p(1)*part%v(:)
|
||||||
vertex%tensorS(:,:) = vertex%tensorS(:,:) + w_p(1)*tensorS
|
vertex%tensorS(:,:) = vertex%tensorS(:,:) + part%weight*w_p(1)*tensorS
|
||||||
|
|
||||||
vertex => self%n2%output(part%pt)
|
vertex => self%n2%output(part%pt)
|
||||||
vertex%den = vertex%den + w_p(2)
|
vertex%den = vertex%den + part%weight*w_p(2)
|
||||||
vertex%mom(:) = vertex%mom(:) + w_p(2)*part%v(:)
|
vertex%mom(:) = vertex%mom(:) + part%weight*w_p(2)*part%v(:)
|
||||||
vertex%tensorS(:,:) = vertex%tensorS(:,:) + w_p(2)*tensorS
|
vertex%tensorS(:,:) = vertex%tensorS(:,:) + part%weight*w_p(2)*tensorS
|
||||||
|
|
||||||
vertex => self%n3%output(part%pt)
|
vertex => self%n3%output(part%pt)
|
||||||
vertex%den = vertex%den + w_p(3)
|
vertex%den = vertex%den + part%weight*w_p(3)
|
||||||
vertex%mom(:) = vertex%mom(:) + w_p(3)*part%v(:)
|
vertex%mom(:) = vertex%mom(:) + part%weight*w_p(3)*part%v(:)
|
||||||
vertex%tensorS(:,:) = vertex%tensorS(:,:) + w_p(3)*tensorS
|
vertex%tensorS(:,:) = vertex%tensorS(:,:) + part%weight*w_p(3)*tensorS
|
||||||
|
|
||||||
vertex => self%n4%output(part%pt)
|
vertex => self%n4%output(part%pt)
|
||||||
vertex%den = vertex%den + w_p(4)
|
vertex%den = vertex%den + part%weight*w_p(4)
|
||||||
vertex%mom(:) = vertex%mom(:) + w_p(4)*part%v(:)
|
vertex%mom(:) = vertex%mom(:) + part%weight*w_p(4)*part%v(:)
|
||||||
vertex%tensorS(:,:) = vertex%tensorS(:,:) + w_p(4)*tensorS
|
vertex%tensorS(:,:) = vertex%tensorS(:,:) + part%weight*w_p(4)*tensorS
|
||||||
|
|
||||||
|
|
||||||
END SUBROUTINE scatterQuad
|
END SUBROUTINE scatterQuad
|
||||||
|
|
||||||
RECURSIVE SUBROUTINE findCellCylQuad(self, part)
|
RECURSIVE SUBROUTINE findCellCylQuad(self, part, oldCell)
|
||||||
USE moduleSpecies
|
USE moduleSpecies
|
||||||
IMPLICIT NONE
|
IMPLICIT NONE
|
||||||
|
|
||||||
CLASS(meshVolCylQuad), INTENT(in):: self
|
CLASS(meshVolCylQuad), INTENT(in):: self
|
||||||
|
CLASS(meshVol), OPTIONAL, INTENT(in):: oldCell
|
||||||
CLASS(particle), INTENT(inout):: part
|
CLASS(particle), INTENT(inout):: part
|
||||||
REAL(8):: xLog(1:2)
|
REAL(8):: xLog(1:2)
|
||||||
REAL(8):: xLogArray(1:4)
|
REAL(8):: xLogArray(1:4)
|
||||||
CLASS(*), POINTER:: nextElement
|
CLASS(*), POINTER:: nextElement
|
||||||
INTEGER:: nextInt
|
INTEGER:: nextInt
|
||||||
|
|
||||||
|
|
||||||
xLog = self%phy2log(part%r(1:2))
|
xLog = self%phy2log(part%r(1:2))
|
||||||
IF (self%inside(xLog(1), xLog(2))) THEN
|
IF (self%inside(xLog(1), xLog(2))) THEN
|
||||||
!Checks if particle is inside of current cell
|
!Checks if particle is inside of current cell
|
||||||
|
IF (PRESENT(oldCell)) THEN
|
||||||
|
!If oldCell, recalculate particle weight, as particle has entered a new cell.
|
||||||
|
part%weight = part%weight*oldCell%volume/self%volume
|
||||||
|
END IF
|
||||||
part%e_p = self%n
|
part%e_p = self%n
|
||||||
part%xLog = xLog
|
part%xLog = xLog
|
||||||
ELSE
|
ELSE
|
||||||
|
|
@ -464,7 +468,7 @@ MODULE moduleMeshCyl
|
||||||
SELECT TYPE(nextElement)
|
SELECT TYPE(nextElement)
|
||||||
CLASS IS(meshVolCyl)
|
CLASS IS(meshVolCyl)
|
||||||
!Particle moved to new cell, repeat find procedure
|
!Particle moved to new cell, repeat find procedure
|
||||||
CALL nextElement%findCell(part)
|
CALL nextElement%findCell(part, self)
|
||||||
|
|
||||||
CLASS IS (meshEdgeCyl)
|
CLASS IS (meshEdgeCyl)
|
||||||
!Particle encountered an edge, execute boundary
|
!Particle encountered an edge, execute boundary
|
||||||
|
|
|
||||||
|
|
@ -60,9 +60,12 @@ MODULE moduleOutput
|
||||||
formatValues%velocity = 0.D0
|
formatValues%velocity = 0.D0
|
||||||
formatValues%pressure = 0.D0
|
formatValues%pressure = 0.D0
|
||||||
formatValues%temperature = 0.D0
|
formatValues%temperature = 0.D0
|
||||||
tempVol = speciesIn%weight/(nodeVol*Vol_ref)
|
tempVol = 1.D0/(nodeVol*Vol_ref)
|
||||||
IF (rawValues%den > 0.D0) THEN
|
IF (rawValues%den > 0.D0) THEN
|
||||||
tempVel = rawValues%mom(:)/rawValues%den
|
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))
|
tensorTemp = (rawValues%tensorS(:,:) - rawValues%den*outerProduct(tempVel,tempVel))
|
||||||
formatValues%density = rawValues%den*tempVol
|
formatValues%density = rawValues%den*tempVol
|
||||||
formatValues%velocity(:) = tempVel
|
formatValues%velocity(:) = tempVel
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ MODULE moduleSpecies
|
||||||
INTEGER:: e_p !Index of element in which the particle is located
|
INTEGER:: e_p !Index of element in which the particle is located
|
||||||
REAL(8):: xLog(1:2) !Logical coordinates of particle in element e_p.
|
REAL(8):: xLog(1:2) !Logical coordinates of particle in element e_p.
|
||||||
LOGICAL:: n_in !Flag that indicates if a particle is in the domain
|
LOGICAL:: n_in !Flag that indicates if a particle is in the domain
|
||||||
|
REAL(8):: weight=0.D0
|
||||||
|
|
||||||
END TYPE particle
|
END TYPE particle
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue