Contacts: David Eldon, David Green

Short Description

Runs the SOLPS code, displays output, and compares runs


Scrape-Off-Layer, B2, IRENE, 2D fluid, kinetic Monte Carlo neutrals

Long Description

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.0

  • SOLPS5.1 (may be unstable but should work for plots and post-processing)


Typical workflows

Basic workflow:

  • Create a family of related runs

  • Import files from disk and arrange them in the runs

  • Adjust settings such as boundary conditions

  • Launch run(s)

  • Check output to see if the run is converged

  • Continue running

  • Extract data and plot

  • Classify runs as complete, detached, stable, reasonable, etc.

  • Compare runs & parameter space covered while filtering by classification flags

Plot-only workflow:

  • 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.


  • Tutorial on making plots from existing runs (Google docs)

Technical info

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:

12746 David Eldon
 4569 Fusion Bot
  118 David Green
   78 Orso Meneghini
   19 Nikolas Logan
    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