Commit Graph

308 Commits

Author SHA1 Message Date
12f15239df
tests: check flux averages 2024-11-04 12:00:21 +01:00
Michele Guerini Rocco
bd6e1521b0
tests: check EC profiles 2024-11-04 12:00:20 +01:00
Michele Guerini Rocco
a4a39571ce
src/pec.f90: don't rely on P_inside, I_cd_inside
When combining multiple independent simulations with `gray -s`, the
statistics in sum-summary.txt are computed by summing the profiles
pointwise and calling `postproc_profiles` with their (supposedly common)
MHD equilibrium.

The subroutine assumes the normalisations of dP/dV⋅dV and J_φ⋅dA are
P_inside(ρ=1), I_cd_inside(ρ=1), however if the individual profiles have
been computed with different versions of Gray, built with different
compilers, or on different machines, the values may be very slightly off.
Further, due to the use of the relation Δρ² = ⟨ρ²⟩ - ⟨ρ⟩², the profile
widths are very sensible to the normalisation, producing wildly
incorrect values.

For example, due to the refactor of `magsurf_data`, a change of about
0.05% in dV resulted in Δρ² being off by 300%.
2024-11-04 12:00:20 +01:00
Michele Guerini Rocco
7477fffb43
move flux averages inside gray_equil 2024-11-04 12:00:20 +01:00
Michele Guerini Rocco
8c144c3892
make the sign of q consistent with cocos=3 2024-11-04 12:00:20 +01:00
Michele Guerini Rocco
fdf5ef72fe
src/magsurf_data.f90: cleanup 2024-11-04 12:00:20 +01:00
Michele Guerini Rocco
2e2ab16273
tests/01-ITER: fix G-EQDSK format 2024-11-04 12:00:19 +01:00
Michele Guerini Rocco
45017c417e
scripts/gray_visual.py: fix default of -k 2024-11-04 12:00:19 +01:00
Michele Guerini Rocco
10d65c1b8e
tests: remove workaround for empty files
Inactive tables no longer produce an empty file, even if requested
2024-11-04 12:00:19 +01:00
Michele Guerini Rocco
e5e471725c
tests: avoid scipy dependency
The χ² in test_error_biased can be easily minimised analytically
2024-11-04 12:00:19 +01:00
Michele Guerini Rocco
5c78af975a
add support for intel compilers 2024-11-04 12:00:19 +01:00
Michele Guerini Rocco
ee4183faa7
tests: update references with new tables format 2024-11-04 12:00:18 +01:00
Michele Guerini Rocco
3e853dd60f
tests/02-ITER-half-field: update reference
This was supposed to test an X mode polarisation, but due to the
issue in `read_beam2`, it was actually O mode.
2024-11-04 12:00:17 +01:00
Michele Guerini Rocco
03443f1195
src/beams.f90: add option to not change iox in read_beam2
The file format parsed by read_beam2 also includes the polarisation,
unlike those of read_beam0 and read_beam1.
When running gray standalone, however, we expect the mode to be set by
`antenna.iox` in gray.ini, not by the beam file.
2024-11-04 12:00:17 +01:00
Michele Guerini Rocco
cdac0ca361
fixup 15fc891 2024-11-04 12:00:17 +01:00
Michele Guerini Rocco
864cf23b78
scripts/gray_visual.py: rewrite and extend scope 2024-11-04 12:00:17 +01:00
Michele Guerini Rocco
24e0e6e472
src: remove unnecessary one, zero uses 2024-11-04 12:00:16 +01:00
Michele Guerini Rocco
80782a58fc
Makefile: add flag for loop parallelisation 2024-11-04 12:00:16 +01:00
Michele Guerini Rocco
d52e125d9c
src/gray_core: improve error reporting
- Avoid logging the same error over and over

- Make all the gray_errors actually warnings

- Replace `large_npl` error with `unstable_beam`, which is actually
  the root cause of the former

- Use the gray_main error as exit code
2024-11-04 12:00:16 +01:00
Michele Guerini Rocco
86d5b5a672
src/gray_core: refactor ic_gb 2024-11-03 09:19:22 +01:00
Michele Guerini Rocco
d5bbda1ea2
src/gray_tables: fix memory error with disabled table 2024-11-03 09:19:22 +01:00
Michele Guerini Rocco
10f783ca37
src/gray_errors.f90: avoid strange macro
Some compilers are not happy with this.
2024-11-03 09:19:22 +01:00
Michele Guerini Rocco
918d239b34
src/logger.f90: allow changing output unit and colors 2024-11-03 09:19:22 +01:00
Michele Guerini Rocco
52693be83e
tests/11-vacuum: use exp notation on colorbar 2024-11-03 09:19:21 +01:00
Michele Guerini Rocco
d5c81268de
src/utils.f90: clean up
- Replace the `get_free_unit` subroutine with the built-in
  `newutin` option of the `open` statement.

- Replace `locatex` with just `locate` + an index offset.

- Replace `inside` with `contour%contains`.

- Merge `vmaxmin` and `vmaxmini` into a single subroutine
  with optional arguments.

- Remove unused `range2rect`, `bubble`.
2024-11-03 09:19:21 +01:00
Michele Guerini Rocco
751cca3bfc
mark some procedures as pure 2024-11-03 09:19:18 +01:00
Michele Guerini Rocco
166086d369
replace equilibrium module with an object
Similarly to eb648039 this change replaces the `equilibrium` module with
a new `gray_equil` module providing the same functionality without using
global variables.

  - `read_eqdsk`, `read_equil_an` are replaced by a single `load_equil`
    routine that handles all equilibrium kind (analytical, numerical,
    and vacuum).

  - `scale_equil` is merged into `load_equil`, which besides reading
    the equilibrium from file peforms the rescaling and interpolation based
    on the `gray_parameters` settings and the equilibrium kind.

    To operate on G-EQDSK data specifically, the `change_cocors` and
    `scale_eqdsk` are still available. The numeric equilibrium must then
    be initialised manually by calling equil%init().

  - `set_equil_spline`, `set_equil_an`, `unset_equil_spline`
     are completely removed as the module no longer has any internal state.

  - `fq` is replaced by `equil%safety`; `bfield` by `equil%b_field`;
    `frhotor`, `frhopol` by `equil%pol2tor` and `equil%pol2tor`;
    and the remaining subroutines by other methods of `abstract_equil`
    retaining the old name.

  - the `contours_psi` subroutine is replaced by `equil%flux_contour`,
    with a slightly changed invocation but same functionality.

  - the `gray_data` type is no longer required ans has been removed: all
    the core subroutines now access the input data only though either
    `abstract_equil`, `abstract_plasma` or the `limiter` contour.
2024-11-03 09:18:33 +01:00
Michele Guerini Rocco
ae80fb4945
src/splines.f90: add spline_2d%init_nonreg
This adds a proper subroutine to initialise a spline_2d given
non-regular data using surfit.
2024-10-07 16:19:33 +02:00
Michele Guerini Rocco
15a1f866b4
src/equilibrium: rewrite points_tgo, points_ox
This change adds a bit of documentation and simplifies the two
(internal) subroutines used to find the horizontal tangent points
and the magnetic O/X point.

Using a closure we can avoid explicitly passing parameters (psi0) to
hybrj1. Previously this required a custom `hybrj1mv` subroutine in
fitpack with an identical interface, except for our extra parameter.
2024-10-07 16:19:33 +02:00
Michele Guerini Rocco
c44176a505
src/splines.f90: use do cocurrent for transform 2024-10-07 16:19:33 +02:00
Michele Guerini Rocco
2c441668bb
replace coreprofiles module with an object
This change replaces the `coreprofiles` module with a new `gray_plasma`
module providing the same functionality without using global variables.

  - `read_profiles`, `read_profiles_an` are replaced by a single `load_plasma`
    routines that handles both profiles kind (numerical, analytical).

  - `scale_profiles` is merged into `load_plasma`, which besides reading
    the profiles from file peforms the rescaling and interpolation based
    on the `gray_parameters` settings.

  - `set_profiles_spline`, `set_profiles_an`, `unset_profiles_spline`
     are completely removed as the module no longer has any internal state.

  - `density`, `ftemp`, `fzeff` are replaced by the `abstract_plasma`
    type which provides the `dens`, `temp` and `zeff` methods for
    either `numeric_plasma` or `analytic_plasma` subtypes.
2024-10-07 16:19:33 +02:00
Michele Guerini Rocco
a4ab741341
src/dispersion.f90: remove global variables
The extv and ttv arrays can be computed at compile-time and simply
defined as parameters.
2024-10-07 16:19:32 +02:00
Michele Guerini Rocco
3a10b45595
src/limiter.f90: remove
1. Use the `contour` type for limiter and plasma boundary
   (rlim, zlim, rbnd, zbnd)

2. Replace `inside` with `contour%contains`

3. Replace `range2rect` with a `contour` interface

4. Remove the limiter module which just re-exports the limiter
   as a global; instead just pass the contour object around
2024-10-07 16:19:32 +02:00
Michele Guerini Rocco
a4d44933e2
stop re-exporting gray parameters as globals
This is a first step in removing all the global variables from gray.
2024-10-07 16:19:32 +02:00
Michele Guerini Rocco
281f32f221
tests: add test for gray -s 2024-10-07 16:19:31 +02:00
Michele Guerini Rocco
bfd675d505
tests: use new file and column names 2024-10-07 16:19:31 +02:00
Michele Guerini Rocco
ba8fc001e5
fix memory errors and use automatic deallocation 2024-10-07 16:19:30 +02:00
Michele Guerini Rocco
f9c313323a
abstract the outputs units
This change replaces the output files (Fortran units) with a derived
type called table, that hold the data in memory until further
processing. The data stored in a table can be dumped to a file, as
before, or processed in other ways, for example converted to other
derived type.
2024-10-07 16:19:30 +02:00
1bcc4f968b src/gray_params.f90: replace misused findloc function 2024-05-30 18:00:06 +02:00
4f0e06ea71 Makefile: split install target for binaries and documentation 2024-05-30 17:52:40 +02:00
2b8ec53d70 Improve compatibility with some compilers 2024-05-30 17:40:05 +02:00
Michele Guerini Rocco
624fbe3ec1
Makefile: fix .d generation for vendored libraries 2024-05-21 13:57:16 +02:00
Michele Guerini Rocco
850dc3a737
doc/gray.ini.5: fix some typos 2024-05-21 13:57:16 +02:00
7ab3d52901 Remove unused imports 2024-05-17 11:01:14 +02:00
3ed93dbc9b Add option to read from stdin 2024-05-17 10:58:20 +02:00
1938aa23b7 Add first version of schemas describing I/O data models 2024-05-17 00:19:26 +02:00
Michele Guerini Rocco
60e30692cb
Makefile: stop at first syntax error
This flag prevents gcc from outputting a wall of text everytime you
forget a comma.
2024-04-29 10:08:16 +02:00
Michele Guerini Rocco
baf53b932b
simplify memory management
This change replaces pointers with automatic arrays to greatly simplify
the memory management in the main subroutine:

  - All arrays are defined in a single location and with their final
    dimension explicitely shown.

  - The allocation/deallocation is performed automatically when
    entering/leaving the gray_main routine.
2024-04-29 10:08:16 +02:00
Michele Guerini Rocco
3115e9e9f8
move vendored libraries to their own directory 2024-04-29 10:08:16 +02:00
Michele Guerini Rocco
27141d803c
move minpack license to minpack source 2024-04-22 19:09:30 +02:00