Commit Graph

180 Commits

Author SHA1 Message Date
Michele Guerini Rocco
b1accf0ae3
simplify handling of splines
This adds a new `splines` module which implements a high-level interface
for creating and evaluating splines and rewrite almost all modules to
use it. Also, notably:

1. both `simplespline` and DIERCKX splines can now used with a uniform
   interface

2. most complexity due to handling working space arrays is gone

3. memory management has been significantly simplified too
2023-04-12 23:45:49 +02:00
Michele Guerini Rocco
1261860f40
add some useful debug messages 2023-04-12 23:45:49 +02:00
Michele Guerini Rocco
cc889bb5a0
use the logger everywhere
This converts the last remaining warnings to use the logging system.
Also drops `catand` and replace it with the intrinsic `atan`, which
supports complex as well as real numbers.

Note: before 3eab989d the `catand` function was actually incorrent!
The definition of arctan(z) can be obtained starting from the identity

  d/dz arctan(z) = 1/(1 + z²) = ½ [1/(1 + iz) + 1/(1 - iz)],

integrating and using the definition log(z) = ∫₁^z dz/z,

  arctan(z) = -i/2 [log(1 + iz) - log(1 - iz)].

If log is the principal branch, log(z) = log|z| + i arg(z), then

  arctan(z) = -i/2 log(w) = 1/2 arg(w) -i/2 log|w|

where w = (1 + iz)/(1 - iz). Finally, the real part is

  Re arctan(z) = 1/2 atan2(2Re(z), 1 - |z|²).

The term -|z|² is missing from the `catand` definition of GRAY,
but is present in the original Fortran 77 code from [SLATEC]:
it has probably been lost in the translation.

[SLATEC]: https://people.math.sc.edu/Burkardt/f_src/slatec/slatec.f90
2023-04-12 23:45:49 +02:00
Michele Guerini Rocco
0a63a20e73
src/dispersion.f90: cleanup
- merge branch with a method to control the speed of iteration and
  improve the convergence of `warmdisp` (thanks Thomas)

- unify `diel_tens_fr` and `diel_tens_wr` into a single subroutine,
  `dielectric_tensor`

- stay as close as possible to the notation of Daniela Farina's paper

- make `sox` an integer

- mark more subroutines as pure

- add more comments
2023-04-12 23:45:49 +02:00
Michele Guerini Rocco
c7d0d8370c
src/gray_core.f90: make some {disp,plas}_deriv outputs optional
Some of the outputs of disp_deriv and plas_deriv are only needed
when updating the local plasma quantities (ywppla_upd) and not when
integrating the raytracing equations (rkstep).

This change save some unnecessary computations and variable definitions.

Also add some comments to disp_deriv
2023-04-12 23:44:38 +02:00
Michele Guerini Rocco
658389f586
src/multipass.f90: improve error wording 2023-04-12 23:44:38 +02:00
Michele Guerini Rocco
69308901ee
src/beams.f90: document read_beam{0,1} formats 2023-04-12 23:44:38 +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
e6d864e63b Fix the summation mode + temporary fix for file unit numbers
- Add missing array allocations
- Add parameter for varying number of columns in input files
- Change output unit numbers (dirty fix. Original units created an empty
  named file, but wrote in default named fort.* files)
2022-11-24 23:37:29 +01:00
411c4ece48 Fix problem with long filenames not fitting the header width 2022-11-24 23:34:09 +01:00
5ff1d8cd10 Replace str_index function with intrinsic index 2022-11-14 16:57:57 +00:00
3eab989d7b Fix bug in catand (complex arc tangent)
Function catand returned an incorrect value for its real part. To be
possibly replaced with the intrinsic function atan.
2022-10-04 19:05:43 +02:00
8c3e246f25 Add missing iprof parameter initialization in GRAY/JINTRAC interface
Cherry-pick from commit 6627cb14
2022-10-04 18:43:13 +02:00
Michele Guerini Rocco
8f90cb21da
gray_jetto1beam: activate some debug units by defaults 2022-09-27 18:44:32 +02:00
Michele Guerini Rocco
45ef9c5eae
src/coreprofiles: make psnbnd fully automatic
1. Fix the mismatch between the psnbnd in coreprofiles and gray_core.
   This happens whenever gray overrides the externally provided one
   (i.e. the density tail would become negative before psnbnd and is so
   rescaled to end exactly on the zero).

2. Make psnbnd no longer required by always computing it as in 1.
   It hasn't been removed, because gray_params.data is sacrosant,
   but it no longer has any effect.

3. Cleanup: mark public functions, restructure the global variables into
   three categories; add comments explaining the analytical profiles
   format, formulae and how the polynomial tail is computed.
2022-05-22 04:06:21 +02:00
Michele Guerini Rocco
63e2bf0b04
convert remaining subroutines to derived types
- converts analytical profiles/equilibrium subroutines to derived types
- use less undecipherable and consistent names

The subroutine names have changed as follows:

    set_prfspl → set_profiles_spline
    set_prfan  → set_profiles_an
  unset_prfspl → unset_profiles_spline
  unset_prfan  → unset_profiles_an
  set_equian   → set_equil_an
  set_eqspl    → set_equil_spline
  unset_equian → unset_equil_an
  unset_eqspl  → unset_equil_spline
  unset_rhospl → unset_rho_spline
2022-05-22 01:18:08 +02: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
0a1a0b5ac8
src/gray_core.f90: use intrinsic linear algebra functions 2022-05-19 19:00:55 +02:00
Michele Guerini Rocco
0cf1ab2e8d
src/dispersion.f90: mark colddisp a pure function 2022-05-19 19:00:54 +02:00
Michele Guerini Rocco
3cee84690c
src/dispersion.f90: mark zetac as pure 2022-05-11 01:15:08 +02:00
Michele Guerini Rocco
3f79a6e9cd
skip print_headers with no active units 2022-05-11 01:15:07 +02:00
Michele Guerini Rocco
e81308d048
add option to set parameters from the command-line 2022-05-11 01:15:07 +02:00
Michele Guerini Rocco
3e49247d15
src/main.f90: fix typo 2022-05-11 01:15:06 +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
d3a87e1044
Close open units on exit to flush the buffer 2022-05-11 01:15:05 +02:00
Michele Guerini Rocco
a30cd09e8e
src/math.f90: use the intrinsic gamma function
- remove the `gamm` function
- rewrite `fact` in terms of `gamma`
2022-05-11 01:15:05 +02:00
Michele Guerini Rocco
98599b2b7d
src/dispersion.f90: compute factorials incrementally 2022-05-11 01:15:05 +02:00
Michele Guerini Rocco
91a2e6cf07
src: implement toggling of output units
This actually implements the --units option
2022-05-11 01:15:04 +02:00
Michele Guerini Rocco
96359bc3fd
src: use hypot and norm2 when possible 2022-05-11 01:15:04 +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
f2f41ec023
src/logger.f90: init
This change adds a minimal logging system. The log messages carry a
timestamp in μs, the identifier of the emitter (fortran module +
procedure) and a log level. For simplicity the format is hardcoded.
2022-05-11 01:15:04 +02:00
Michele Guerini Rocco
ed0917aa8c
src/conical.f90: eliminate dead code
Use the intrinsic functions when possible (bessel_j0, bessel_j1) and
remove other unused functions.
2022-05-11 01:15:03 +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
d18e05353a
src: remove unused parameters 2022-05-11 01:15:02 +02:00
Michele Guerini Rocco
7818ac731c
src/gray_jetto1beamf90: update for graycore changes 2022-05-11 01:15:01 +02:00
Michele Guerini Rocco
f56e1cbc05
src/coreprofiles.f90: use derived types 2022-05-11 01:15:01 +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
4f867bad14
src/magsurf_data.f90: fix memory leak 2022-05-11 01:15:01 +02:00
Michele Guerini Rocco
b1694bc575
src/pec.f90: fix uninitialised memory use
If the condition `sccsa > zero` is not met, ratj{a,b}mx remain
unitialised and print_finals may write them to fort.7.
2022-05-11 01:15:00 +02:00
Michele Guerini Rocco
861a723ebc
src/equilibrium.f90: fix mixed tab/spaces 2022-05-11 01:14:59 +02:00
Michele Guerini Rocco
bfbd479d20
src/const_and_precisions.f90: clean up
- formatting
  - remove commented out constants
  - remove constants not used anywhere in GRAY
2021-12-15 02:30:56 +01:00
Michele Guerini Rocco
693af2a763
merge graysum and gray
Note that graysum, now as sum_mode, still doesn't support multipass.
2021-12-15 02:30:55 +01:00
Michele Guerini Rocco
37ee881024
src/gray-externals.f90: remove
Apparently, this module only constains old unused routines.
2021-12-15 02:30:54 +01: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
Michele Guerini Rocco
cb873fbcf6
src/multipass.f90: fix file mode 2021-12-15 02:30:50 +01:00
4bb3841049 Modified test in density extrapolation at boundary 2020-03-06 10:48:12 +00:00
6892646623 updated makefile, added manpage, fixed few print statements 2019-12-09 14:49:37 +00:00
Daniele Micheletti
7609640347 trunk/graycore: fix to coupling calculation for on-screen print 2019-03-28 11:33:43 +00:00
Daniele Micheletti
f600108884 trunk/graycore: minor fixes 2019-03-28 09:50:28 +00:00
Daniele Micheletti
27f1793f14 trunk: added multiple passes calculation; added multipass module; graycore/gray_main: subroutine rewritten; equilibrium/read_equil_an: limiter coordinates read from equilibrium file for ipass>1; err_codes/check_err: istop=1 only for alpha<0; pec/pec_tab: fixed index assignements in loops; polarization/pol_limit: fixed ext,eyt normalization 2019-03-26 14:21:22 +00:00
Daniele Micheletti
2c46d3327e trunk/beams: fix to alpha0 value if outside table range in read_beam1 2018-09-26 12:58:54 +00:00
9fcc54804f added re-normalization of Pins and Currins in spec subroutine 2017-09-19 16:32:53 +00:00
d8fc72dd3e re-added routines to sum profiles (removed by mistake in rev 176) 2017-09-13 09:31:30 +00:00
0b3ea8991e added further output prints to fort.4 2017-09-12 19:37:06 +00:00
d92335c476 added routines to sum profiles from multiple runs 2017-06-27 14:30:07 +00:00
Daniele Micheletti
5b44c46e70 trunk/dispersion: added npra2 re-initialization if convergence fails 2017-06-21 09:16:10 +00:00
4f0cc7fb47 fixed wrong psi assignment if input profiles are given vs rhot. Added comment for ieccd flag in gray_params.data 2017-02-10 14:14:53 +00:00
526870458f fixed rhot print in central ray output (fort.4) 2017-02-10 10:41:24 +00:00
Daniela Farina
e2fac977ab fixed check for N// > 1 (bis) 2017-02-01 11:32:27 +00:00
Daniela Farina
72b682229c fixed check for N// > 1 2017-02-01 11:06:09 +00:00
4a2b5fc638 added missing allocation for simple limiter (when it is not read from eqdsk) 2016-12-19 16:38:07 +00:00
0f2ff9a5a7 fix: missing allocation for profiles given vs rhot 2016-11-29 08:45:18 +00:00
Daniele Micheletti
feaa736c0e fixed e330 calculation in dispersion module (trunk) 2016-06-09 07:41:23 +00:00
Daniele Micheletti
bede98b0ae fixed incompatibilities with allocatable arrays (pgf90 compiler, JETTO); fixed input/output scaling (gray/jetto interface); fixed error in read_beams2 for small beam tables 2016-06-01 13:49:35 +00:00
d7b09b92a2 added file headers with input parameters 2016-04-27 14:37:57 +00:00
a5199b1b24 some additional output prints (2D maps and Bcart, Ncart along central ray) 2016-02-12 16:49:00 +00:00
Daniele Micheletti
33f9dd6130 fixed bug in read_beams2 to correctly locate the position of a point outside the beam grid 2016-02-09 11:18:47 +00:00
88740ab232 Fixed computation of warm Nperp for low density 2016-01-25 11:37:17 +00:00
7654679ae1 fixed error code for bad warm Nperp 2015-12-04 15:47:05 +00:00
1cd0503476 fixed compilation for JETTO 2015-11-25 15:53:22 +00:00
59617c7a06 gray/jetto interface reverted to F77 (removed use of modules), adding an intermediate F90 subroutine handling the reading of parameters/beams files. pec_init now uses optional input rho grid 2015-11-24 16:36:20 +00:00
46e36a5792 re-added missing output files, file units specified in dedicated module, added option iequil=3 for partially filled psi(R,z) grid on input: required for integration in JETTO 2015-11-23 17:55:27 +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
Daniela Farina
f3fb3962d1 updated prfile subr, added comments and minor changes in ic_gb 2015-11-19 17:44:17 +00:00
ce10204479 nocommon branch merged back into trunk 2015-11-18 16:34:33 +00:00
Daniela Farina
9eb901015e corrected a bug in fwork for dbgr and in ic_gb for ypwrk0 2015-11-04 10:21:50 +00:00
Daniela Farina
75b77b01c1 frhotor_eq now is a function of rhop 2015-06-09 17:09:53 +00:00
a0275d8691 corrected merge errors in trunk. branch new-refl integrated in trunk and removed 2015-05-21 14:29:16 +00:00
c38f57b640 branch new-equinum reintegrated in trunk 2015-05-21 14:14:38 +00:00
Daniela Farina
94ed9ea51e new equinum and equian merged in branch new-equinum. branch new-equian removed 2015-05-21 13:23:26 +00:00
6b3a4a807d changed dimension of ext eyt polarization arrays to avoid out of bounds error. to be checked. 2015-05-21 09:09:16 +00:00
1df304f221 few fixes in pec plus other minor changes 2015-02-18 16:17:21 +00:00
608d63acfe fixed few out of bounds checks. added imx (dispersion) read from gray.data 2015-01-23 15:08:41 +00:00
94212dba99 added few missing dummy values in case of zero absorption 2015-01-09 15:05:20 +00:00
Daniela Farina
61f31fce7f corrected interpolation bug and updated outputs 2015-01-08 15:49:38 +00:00
Daniela Farina
3a798e9f4a added ipol option and computation of polarization parameters at all steps, added case imx negative to disable convergence in dispersion 2014-12-22 15:30:17 +00:00
8e593fdb1a corrected detection of turning point for rays missing inner wall 2014-10-14 14:14:31 +00:00
8f06be1281 fixed the computation of beam polarization at launch (used if the beam hits the wall before crossing the plasma) 2014-08-25 13:40:44 +00:00
d5a7ec1f80 Syntax errors in branch new-refl fixed. 2014-08-23 10:19:56 +00:00
cb55af3857 corrected psi grid leading dimension in JINTRAC interface. Committed new branch for updated wall reflection algorithm. 2014-08-23 09:57:40 +00:00
2309e974c7 fix to initialisation in reflections module propagated to other branches 2014-06-10 14:03:41 +00:00
469c37e098 rbmin, rbmax were not properly set when boundary description was absent 2014-06-10 08:17:35 +00:00
Daniela Farina
fb2729f9b7 corrected expression for gaussian dpdvp 2014-03-13 17:40:33 +00:00