Contacts: David Eldon, David Green
This module manages SOLPS runs, including setting up a set of related runs, loading them with required input files, adjusting settings, monitoring progress toward convergence, analyzing output.
- Versions supported:
SOLPS5.1 (may be unstable but should work for plots and post-processing)
Create a family of related runs
Import files from disk and arrange them in the runs
Adjust settings such as boundary conditions
Check output to see if the run is converged
Extract data and plot
Classify runs as complete, detached, stable, reasonable, etc.
Compare runs & parameter space covered while filtering by classification flags
Load files from an existing run
Make customized plots
Run comparison workflow:
Load files from existing runs
Generate cross-run comparison plots and analysis
Can import the SCOPE module and use its database creator tool in a special SOLPS mode to plot relationships between data from different SOLPS runs. To get started, run root[‘SCRIPTS’][‘analysis’][‘set_up_scope_db’] or use the controls in the GUI during the “compare runs” phase.
The file b2fstate contains basic physics quantities like ne, te, … . The lines formatted like “*cf: real 55936 na “ are the headers for new quantities. na is ion density. Some are species-dependent 3D arrays, and some are species-independent 2D arrays. In order to properly interpret the x-y coordinates, one must look at b2fgmtry file (may be in the baserun folder), which has the mesh geometry. OMFIT’s OMFITsolps class should be able to parse these files and arrange the flat arrays into appropriately dimensioned arrays that are easier to work with. One can run the following commands in OMFIT’s command box to do the parsing:
OMFIT['geo'] = OMFITsolps('..../baserun/b2fgmtry') OMFIT['state'] = OMFITsolps('..../case..../b2fstate')
For example, to get thermal total pressure, one needs ne (m^-3), te (J), ti (J), and na (m^-3), where na has an extra dimension for species and the others are 2D. One could put together current from the flows. The parallel velocity is ua (m/s), and it is species dependent. Bundled charge states use zamin-zamax to give a range of charges, but they can also be set to be equal.
To get the X,Y coordinates of the mesh cells, one needs ‘nx,y’, ‘crx’ and ‘cry’ in b2fstate. Split ‘nx,ny’ into nx and ny. They do not include the guard cells at the edge of the mesh, whereas crx and cry do. So, add 2 to nx and ny. crx and cry have the coordinates of all four corners of each cell, so they’re 4 times larger than what one would expect from nx and ny. Here’s some code for unfolding that stuff:
b2fgmtry = OMFIT['geo'] # Get mesh dimensions nx, ny = b2fgmtry['nx,ny']+2 # +2 accounts for guard cells at the edges of the mesh nn = nx*ny # Get coordinates of the four corners. The arrays are 1D originally, so reshape them to the correct 2D mesh dimensions. x1, y1 = b2fgmtry['crx'][0*nn:1*nn].reshape((-1, nx)), b2fgmtry['cry'][0*nn:1*nn].reshape((-1, nx)) x2, y2 = b2fgmtry['crx'][1*nn:2*nn].reshape((-1, nx)), b2fgmtry['cry'][1*nn:2*nn].reshape((-1, nx)) x4, y4 = b2fgmtry['crx'][2*nn:3*nn].reshape((-1, nx)), b2fgmtry['cry'][2*nn:3*nn].reshape((-1, nx)) x3, y3 = b2fgmtry['crx'][3*nn:4*nn].reshape((-1, nx)), b2fgmtry['cry'][3*nn:4*nn].reshape((-1, nx)) # Average the corners. This is the part to replace with something better when the time comes. xc = (x1+x2+x3+x4)/4.0 yc = (y1+y2+y3+y4)/4.0
Doesn’t count code development, which may be inspected with git
Livia Casali: Contributed SOLPS5.*, SOLPS-ITER runs with variations in options, and sample commands for use in development and testing
Alberto Gallo: Contributed SOLPS-ITER runs for testing
Brent Covele: Shared SOLPS commands
Chaofeng Sang: Contributed SOLPS5.0 runs used in initial module development and testing
List of contributors sorted by number of lines authored:
12767 David Eldon 4569 Fusion Bot 123 David Green 62 Orso Meneghini 4 Sterling Smith
List of usernames sorted by number of module imports: eldond, casalil, greendl1, meneghini, duhl, luoyiming, sihang, yujh, coveleb, david, sciortinof, wangjun, halpernf, knolkerm, laggnerf, nelsonand, sangcf, chenji, guterlj, gwilkie, hongrongjie, jspark, lxj, orlov, shenders, zengxx, Guterl, binchen, bykovi, callahank, halfmoonm, huqiming, jgchen, jlchen, kongd, kyungjin, lao, luoc, marinoni, masliner, millerma, prattq, rmreksoatmodjo, sciortino, smithsp, solomon, soukhan, tanqingyi, wangy, xuemiao, zamperinis