26 int* anum,
int* znum,
real* mass,
real* charge,
32 data->
anum = (
int*) malloc( nion*
sizeof(
int) );
33 data->
znum = (
int*) malloc( nion*
sizeof(
int) );
36 for(
int i = 0; i < data->
n_species; i++) {
38 data->
znum[i] = znum[i];
39 data->
anum[i] = anum[i];
41 data->
mass[i] = mass[i];
42 data->
charge[i] = charge[i];
47 data->
dens = (
real*) malloc( (nion+1)*nrho*
sizeof(
real) );
48 for(
int i = 0; i < data->
n_rho; i++) {
49 data->
rho[i] = rho[i];
50 data->
vtor[i] = vtor[i];
51 data->
temp[i] = Te[i];
52 data->
temp[nrho + i] = Ti[i];
53 data->
dens[i] = ne[i];
54 for(
int j = 0; j < nion; j++) {
55 data->
dens[(j+1) * nrho + i] = ni[j*nrho + i];
61 "Min rho = %1.2le, Max rho = %1.2le,"
62 " Number of rho grid points = %d,"
63 " Number of ion species = %d\n",
66 "Species Z/A charge [e]/mass [amu] Density [m^-3] at Min/Max rho"
67 " Temperature [eV] at Min/Max rho\n");
68 for(
int i=0; i < nion; i++) {
70 " %3d /%3d %3d /%7.3f %1.2le/%1.2le "
75 data->
dens[(i+1)*nrho], data->
dens[(i+1)*nrho - 1],
79 "[electrons] %3d /%7.3f %1.2le/%1.2le "
86 data->
vtor[0], data->
vtor[nrho - 1]);
87 real quasineutrality = 0;
88 for(
int k = 0; k < nrho; k++) {
91 for(
int i = 0; i < nion; i++) {
92 ion_qdens += data->
dens[(i+1)*nrho + k] * data->
charge[i+1];
94 quasineutrality = fmax( quasineutrality,
95 fabs( 1 - ion_qdens / ele_qdens ) );
98 " %.2f\n", 1+quasineutrality);
100 "%1.2le/%1.2le\n", data->
vtor[0], data->
vtor[nrho - 1]);
151 if(rho < pls_data->rho[0]) {
154 else if(rho >= pls_data->
rho[pls_data->
n_rho-1]) {
159 while(i_rho < pls_data->n_rho - 1 && pls_data->
rho[i_rho] <= rho) {
163 real t_rho = (rho - pls_data->
rho[i_rho])
164 / (pls_data->
rho[i_rho+1] - pls_data->
rho[i_rho]);
166 real p1 = pls_data->
temp[(species>0)*pls_data->
n_rho + i_rho];
167 real p2 = pls_data->
temp[(species>0)*pls_data->
n_rho + i_rho+1];
168 temp[0] = p1 + t_rho * (p2 - p1);
191 if(rho < pls_data->rho[0]) {
194 else if(rho >= pls_data->
rho[pls_data->
n_rho-1]) {
199 while(i_rho < pls_data->n_rho - 1 && pls_data->
rho[i_rho] <= rho) {
203 real t_rho = (rho - pls_data->
rho[i_rho])
204 / (pls_data->
rho[i_rho+1] - pls_data->
rho[i_rho]);
208 dens[0] = p1 + t_rho * (p2 - p1);
230 if(rho < pls_data->rho[0]) {
233 else if(rho >= pls_data->
rho[pls_data->
n_rho-1]) {
238 while(i_rho < pls_data->n_rho-1 && pls_data->
rho[i_rho] <= rho) {
243 real t_rho = (rho - pls_data->
rho[i_rho])
244 / (pls_data->
rho[i_rho+1] - pls_data->
rho[i_rho]);
247 for(
int i = 0; i < pls_data->
n_species; i++) {
248 p1 = pls_data->
dens[i*pls_data->
n_rho + i_rho];
249 p2 = pls_data->
dens[i*pls_data->
n_rho + i_rho+1];
250 dens[i] = p1 + t_rho * (p2 - p1);
254 p1 = pls_data->
temp[i*pls_data->
n_rho + i_rho];
255 p2 = pls_data->
temp[i*pls_data->
n_rho + i_rho+1];
256 temp[i] = p1 + t_rho * (p2 - p1);
279 if(rho < pls_data->rho[0]) {
282 else if(rho >= pls_data->
rho[pls_data->
n_rho-1]) {
287 while(i_rho < pls_data->n_rho-1 && pls_data->
rho[i_rho] <= rho) {
291 *vflow = pls_data->
vtor[i_rho];
Main header file for ASCOT5.
Header file containing physical and mathematical constants.
#define CONST_U
Atomic mass unit in kilograms [kg].
#define CONST_M_E
Electron mass [kg].
#define CONST_E
Elementary charge [C].
unsigned long int a5err
Simulation error flag.
static DECLARE_TARGET_SIMD a5err error_raise(error_type type, int line, error_file file)
Raise a new error.
a5err plasma_1D_eval_dens(real *dens, real rho, int species, plasma_1D_data *pls_data)
Evaluate plasma density.
a5err plasma_1D_eval_densandtemp(real *dens, real *temp, real rho, plasma_1D_data *pls_data)
Evaluate plasma density and temperature for all species.
void plasma_1D_free(plasma_1D_data *data)
Free allocated resources.
void plasma_1D_offload(plasma_1D_data *data)
Offload data to the accelerator.
int plasma_1D_init(plasma_1D_data *data, int nrho, int nion, real *rho, int *anum, int *znum, real *mass, real *charge, real *Te, real *Ti, real *ne, real *ni, real *vtor)
Initialize 1D plasma data and check inputs.
a5err plasma_1D_eval_flow(real *vflow, real rho, real r, plasma_1D_data *pls_data)
Evalate plasma flow along the field lines.
a5err plasma_1D_eval_temp(real *temp, real rho, int species, plasma_1D_data *pls_data)
Evaluate plasma temperature.
Header file for plasma_1D.c.
Macros for printing console output.
#define print_out(v,...)
Print to standard output.
1D plasma parameters on the target