ASCOT5
Toggle main menu visibility
Loading...
Searching...
No Matches
neutral
N0_1D.c
Go to the documentation of this file.
1
5
#include <stdlib.h>
6
#include <stdio.h>
7
#include <
math.h
>
8
#include <string.h>
9
#include "
../math.h
"
10
#include "
../ascot5.h
"
11
#include "
../error.h
"
12
#include "
../print.h
"
13
#include "
N0_1D.h
"
14
#include "
../linint/linint.h
"
15
30
int
N0_1D_init
(
N0_1D_data
* data,
int
n_rho,
real
rho_min,
real
rho_max,
31
int
n_species,
int
* anum,
int
* znum,
int
* maxwellian,
32
real
* density,
real
* temperature) {
33
34
data->
n_species
= n_species;
35
data->
anum
= (
int
*) malloc(n_species *
sizeof
(
int
));
36
data->
znum
= (
int
*) malloc(n_species *
sizeof
(
int
));
37
data->
maxwellian
= (
int
*) malloc(n_species *
sizeof
(
int
));
38
data->
n0
= (
linint1D_data
*) malloc( n_species *
sizeof
(
linint1D_data
) );
39
data->
t0
= (
linint1D_data
*) malloc( n_species *
sizeof
(
linint1D_data
) );
40
for
(
int
i = 0; i < data->
n_species
; i++) {
41
data->
anum
[i] = anum[i];
42
data->
znum
[i] = znum[i];
43
data->
maxwellian
[i] = maxwellian[i];
44
45
real
* c = (
real
*) malloc(n_rho *
sizeof
(
real
));
46
for
(
int
i = 0; i < n_rho; i++) {
47
c[i] = density[i];
48
}
49
linint1D_init
(&data->
n0
[i], c, n_rho,
NATURALBC
, rho_min, rho_max);
50
c = (
real
*) malloc(n_rho *
sizeof
(
real
));
51
for
(
int
i = 0; i < n_rho; i++) {
52
c[i] = temperature[i];
53
}
54
linint1D_init
(&data->
t0
[i], c, n_rho,
NATURALBC
, rho_min, rho_max);
55
}
56
57
print_out
(
VERBOSE_IO
,
"\n1D neutral density and temperature (N0_1D)\n"
);
58
print_out
(
VERBOSE_IO
,
59
"Grid: nrho = %4.d rhomin = %3.3f rhomax = %3.3f\n"
,
60
n_rho, rho_min, rho_max);
61
print_out
(
VERBOSE_IO
,
" Number of neutral species = %d\n"
, data->
n_species
);
62
print_out
(
VERBOSE_IO
,
"Species Z/A (Maxwellian)\n"
);
63
for
(
int
i=0; i < data->
n_species
; i++) {
64
print_out
(
VERBOSE_IO
,
65
" %3d/%3d (%1d) \n"
,
66
(
int
)(data->
znum
[i]),
67
(
int
)(data->
anum
[i]),
68
(
int
)(data->
maxwellian
[i]));
69
}
70
71
return
0;
72
}
73
79
void
N0_1D_free
(
N0_1D_data
* data) {
80
free(data->
anum
);
81
free(data->
znum
);
82
free(data->
maxwellian
);
83
for
(
int
i = 0; i < data->
n_species
; i++) {
84
free(data->
n0
->
c
);
85
free(data->
t0
->
c
);
86
}
87
free(data->
n0
);
88
free(data->
t0
);
89
}
90
96
void
N0_1D_offload
(
N0_1D_data
* data) {
97
//TODO: Implement
98
}
99
112
a5err
N0_1D_eval_n0
(
real
* n0,
real
rho,
N0_1D_data
* ndata) {
113
a5err
err = 0;
114
int
interperr = 0;
/* If error happened during interpolation */
115
for
(
int
i=0; i<ndata->
n_species
; i++) {
116
interperr +=
linint1D_eval_f
(&n0[i], &ndata->
n0
[i], rho);
117
}
118
119
if
(interperr) {
120
return
error_raise(
ERR_INPUT_EVALUATION
, __LINE__,
EF_N0_1D
);
121
}
122
123
return
err;
124
}
125
138
a5err
N0_1D_eval_t0
(
real
* t0,
real
rho,
N0_1D_data
* ndata) {
139
a5err
err = 0;
140
int
interperr = 0;
/* If error happened during interpolation */
141
for
(
int
i=0; i<ndata->
n_species
; i++) {
142
interperr +=
linint1D_eval_f
(&t0[i], &ndata->
t0
[i], rho);
143
}
144
145
if
(interperr) {
146
return
error_raise(
ERR_INPUT_EVALUATION
, __LINE__,
EF_N0_1D
);
147
}
148
149
return
err;
150
}
151
159
int
N0_1D_get_n_species
(
N0_1D_data
* ndata) {
160
return
ndata->
n_species
;
161
}
N0_1D_offload
void N0_1D_offload(N0_1D_data *data)
Offload data to the accelerator.
Definition
N0_1D.c:96
N0_1D_init
int N0_1D_init(N0_1D_data *data, int n_rho, real rho_min, real rho_max, int n_species, int *anum, int *znum, int *maxwellian, real *density, real *temperature)
Initialize data.
Definition
N0_1D.c:30
N0_1D_free
void N0_1D_free(N0_1D_data *data)
Free allocated resources.
Definition
N0_1D.c:79
N0_1D_eval_n0
a5err N0_1D_eval_n0(real *n0, real rho, N0_1D_data *ndata)
Evaluate neutral density.
Definition
N0_1D.c:112
N0_1D_eval_t0
a5err N0_1D_eval_t0(real *t0, real rho, N0_1D_data *ndata)
Evaluate neutral temperature.
Definition
N0_1D.c:138
N0_1D_get_n_species
int N0_1D_get_n_species(N0_1D_data *ndata)
Return number of neutral species.
Definition
N0_1D.c:159
N0_1D.h
Header file for N0_1D.c.
ascot5.h
Main header file for ASCOT5.
real
double real
Definition
ascot5.h:85
error.h
Error module for ASCOT5.
a5err
unsigned long int a5err
Simulation error flag.
Definition
error.h:17
EF_N0_1D
@ EF_N0_1D
Definition
error.h:33
ERR_INPUT_EVALUATION
@ ERR_INPUT_EVALUATION
Definition
error.h:65
NATURALBC
@ NATURALBC
Definition
interp.h:37
linint.h
Linear interpolation library.
linint1D_eval_f
int linint1D_eval_f(real *f, linint1D_data *str, real x)
Evaluate interpolated value of 1D scalar field.
Definition
linint1D.c:47
linint1D_init
void linint1D_init(linint1D_data *str, real *c, int n_x, int bc_x, real x_min, real x_max)
Initialize linear interpolation struct for scalar 1D data.
Definition
linint1D.c:22
math.h
Header file for math.c.
print.h
Macros for printing console output.
print_out
#define print_out(v,...)
Print to standard output.
Definition
print.h:31
VERBOSE_IO
@ VERBOSE_IO
Definition
print.h:20
N0_1D_data
1D neutral parameters on the target
Definition
N0_1D.h:14
N0_1D_data::n_species
int n_species
Definition
N0_1D.h:15
N0_1D_data::anum
int * anum
Definition
N0_1D.h:16
N0_1D_data::n0
linint1D_data * n0
Definition
N0_1D.h:20
N0_1D_data::znum
int * znum
Definition
N0_1D.h:17
N0_1D_data::t0
linint1D_data * t0
Definition
N0_1D.h:21
N0_1D_data::maxwellian
int * maxwellian
Definition
N0_1D.h:18
linint1D_data
1D interpolation struct.
Definition
linint.h:21
linint1D_data::c
real * c
Definition
linint.h:27
Generated on
for ASCOT5 by
1.18.0