Commit Graph

37 Commits

Author SHA1 Message Date
Michele Guerini Rocco
c55e866ba6
src/gray_plasma.f90: use mollifier to interpolate density
This methods ensures n_e(ψ) is everywhere positive and C²-continuous.

The density boundary is now dependent on the width w of the mollifier,
which also controls the smoothness of the curve, specifically:
  ψ_bnd = ψ_last + w
where ψ_last = 1.01 currently is an extra point added to improve the
convergence of the mollified density to the original data as w→0.
2025-03-17 16:32:36 +01:00
Michele Guerini Rocco
6f66317541
replace pec module with an object
This was the final module with global variables to be rewritten.
The functionaly of pec: `pec_init`, `spec`, `postproc_profiles` has been
replaced by the `ray_projector` object in `gray_project.f90` with the
following methods: `projector%init`, `projector%project` and
`projector%statistics`.

The new code is functionally identically with only breaking change being
in Δρ_J, the full-width at max/e of the current density.
Before this change Δρ_J could be negative to signal the J_φ profile had
at least one positive and one negative peak, after the value is always
positive. Note: in either case Δρ_J was given by the largest peak only.
2024-11-04 12:05:26 +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
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
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
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
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
6a91eaa3a8
src/gray_params.f90: handle missing mandatory parameters 2024-02-09 11:16:21 +01:00
Michele Guerini Rocco
c5a4b180bc
src/gray_params.f90: replace magic numbers with enums
1. Introduces enumerations (and some booleans) intended to replace all
   the magic numbers used throughout the code to represent multiple
   choices.

2. Replace the gray_params.sh script a new one that automatically
   generates code for all the GRAY parameters by parsing
   gray_params.f90.

3. Also generate extra code to accept the enum identifiers as valid
   values in the configuration files and command line arguments.

4. Set sensible default values for parameters that are rarely changes.
2024-02-09 11:16:18 +01:00
Michele Guerini Rocco
73bd010458
remove unnecessary implicit statements
Only a single `implicit none` at the start of each module is required.
2024-02-09 11:16:18 +01:00
621c725948 Fix unsafe use of merge and missing igrad override 2023-10-20 15:19:56 +02:00
Michele Guerini Rocco
f75cedbf2b
src/gray_params.f90: fix comment 2023-09-21 14:21:25 +02:00
Michele Guerini Rocco
62c3045a7f
src/ini_parser.f90: avoid procedure pointer
In this case a normal procedure dummy argument works as well.
2023-09-20 16:14:21 +02:00
Michele Guerini Rocco
7ed76959d4
call exit on errors only in main 2023-09-14 11:26:56 +02:00
Michele Guerini Rocco
038864a84f
src/gray_params.f90: remove unused variable 2023-04-12 23:44:37 +02:00
Michele Guerini Rocco
018fd8eea2
improve some comments 2023-04-12 23:44:37 +02:00
411c4ece48 Fix problem with long filenames not fitting the header width 2022-11-24 23:34:09 +01:00
Michele Guerini Rocco
f5ab40f54f
src/gray_core.f90: cleanup
- add some comments
- annotate loops
- indent comments
- remove trailing whitespace
- reduce usage of opaque global variables
- use Fortran 90 logical operators
- use Fortran 2003 array syntax
2022-05-22 01:02:19 +02:00
Michele Guerini Rocco
6010a9361b
add INI configuration file
This adds a new configuration file based on the INI format.
The new format will allow adding GRAY parameters without breaking
compatibility with existing configurations, unlike as of the old
gray_params.data.
2022-05-22 01:02:19 +02:00
Michele Guerini Rocco
e81308d048
add option to set parameters from the command-line 2022-05-11 01:15:07 +02:00
9a6063389e
Add wave frequency to parameters stored in file headers 2022-05-11 01:15:06 +02:00
efd4fc51e5
src/gray_params.f90: improve handling of absolute paths 2022-05-11 01:15:06 +02:00
Michele Guerini Rocco
18c1126d28
src/gray_params.f90: improve print_parameters
- add all missing parameters (not *data*)
- use shorter formatting
2022-05-11 01:15:04 +02:00
Michele Guerini Rocco
add59dbdda
src: use the logging system everywhere 2022-05-11 01:15:04 +02:00
Michele Guerini Rocco
ef1617713f
src: simplify handling of free units
This changes the behavior of `get_free_unit` to simplify the handling of
optional unit numbers.
2022-05-11 01:15:03 +02:00
Michele Guerini Rocco
01a6f9145c
initial gray CLI work
This lays down the basis for the gray command-line interface.
All options works but currently --units and -v/-q have no effect.
2022-05-11 01:15:02 +02:00
Michele Guerini Rocco
2bee7be103
src/graycore.f90 -> src/gray_core.f90
Rename for consistency with other modules.
2022-05-11 01:15:02 +02:00
Michele Guerini Rocco
948a512254
src: use derived type arguments (work in progress)
This change structures the arguments of most functions, in particular
gray_main, into well-defined categories using derived types.

All types are defined in the gray_params.f90 (location subject to
change) and are organised as follows:

  gray_parameters (statically allocated data)
  ├── antenna_parameters
  ├── ecrh_cd_parameters
  ├── equilibrium_parameters
  ├── misc_parameters
  ├── output_parameters
  ├── profiles_parameters
  └── raytracing_parameters

  gray_data - inputs of gray_main (dynamically-allocated arrays)
  ├── equilibrium_data
  └── profiles_data

  gray_results - outputs of gray_main (dynamically-allocated arrays)
2022-05-11 01:15:01 +02:00
Michele Guerini Rocco
1648a7878a
src/gray_params.f90: handle file not found error 2021-12-15 02:30:53 +01:00
Michele Guerini Rocco
023facac6b
src/gray_params.f90: formatting 2021-12-15 02:30:52 +01:00
526870458f fixed rhot print in central ray output (fort.4) 2017-02-10 10:41:24 +00:00
d7b09b92a2 added file headers with input parameters 2016-04-27 14:37:57 +00:00
68e8217ff3 * reduced arrays required for dI/ds,dP/ds integration
* new module for error handling
* input parameters collected in a single file
* fixed uninitialized pabs,icd
2015-11-19 18:20:58 +00:00
ce10204479 nocommon branch merged back into trunk 2015-11-18 16:34:33 +00:00