ASCOT5
Loading...
Searching...
No Matches
plasma_2D.c
Go to the documentation of this file.
1
8#include <stdio.h>
9#include <stdlib.h>
10#include <math.h>
11#include "../ascot5.h"
12#include "../error.h"
13#include "../consts.h"
14#include "../print.h"
15#include "../linint/linint.h"
16#include "plasma_2D.h"
17
25int plasma_2D_init(plasma_2D_data* data, int nr, int nz, int nion,
26 real r_min, real r_max, real z_min, real z_max,
27 int* anum, int* znum, real* mass, real* charge,
28 real* Te, real* Ti, real* ne, real* ni, real* vtor) {
29
30 data->n_species = nion + 1;
31 data->anum = (int*) malloc( nion*sizeof(int) );
32 data->znum = (int*) malloc( nion*sizeof(int) );
33 data->mass = (real*) malloc( (nion+1)*sizeof(real) );
34 data->charge = (real*) malloc( (nion+1)*sizeof(real) );
35 for(int i = 0; i < data->n_species; i++) {
36 if(i < nion) {
37 data->znum[i] = znum[i];
38 data->anum[i] = anum[i];
39 }
40 data->mass[i] = mass[i];
41 data->charge[i] = charge[i];
42 }
43
44 data->dens = (linint2D_data*) malloc( (nion + 1) * sizeof(linint2D_data) );
45 data->temp = (linint2D_data*) malloc( 2 * sizeof(linint2D_data) );
46 data->vtor = (linint2D_data*) malloc( sizeof(linint2D_data) );
47 real* c = (real*) malloc(nr * nz * sizeof(real));
48 for(int j = 0; j < nr * nz; j++) {
49 c[j] = ne[j];
50 }
52 &data->dens[0], c, nr, nz, NATURALBC, NATURALBC, r_min, r_max,
53 z_min, z_max);
54
55 c = (real*) malloc(nr * nz * sizeof(real));
56 for(int j = 0; j < nr * nz; j++) {
57 c[j] = Te[j];
58 }
60 &data->temp[0], c, nr, nz, NATURALBC, NATURALBC, r_min, r_max,
61 z_min, z_max);
62
63 c = (real*) malloc(nr * nz * sizeof(real));
64 for(int j = 0; j < nr * nz; j++) {
65 c[j] = Ti[j];
66 }
68 &data->temp[1], c, nr, nz, NATURALBC, NATURALBC, r_min, r_max,
69 z_min, z_max);
70
71 c = (real*) malloc(nr * nz * sizeof(real));
72 for(int j = 0; j < nr * nz; j++) {
73 c[j] = vtor[j];
74 }
76 &data->vtor[0], c, nr, nz, NATURALBC, NATURALBC, r_min, r_max,
77 z_min, z_max);
78
79 for(int i = 0; i < nion; i++) {
80
81 c = (real*) malloc(nr * nz * sizeof(real));
82 for(int j = 0; j < nr * nz; j++) {
83 c[j] = ni[i * (nr * nz) + j];
84 }
86 &data->dens[i+1], c, nr, nz, NATURALBC, NATURALBC, r_min, r_max,
87 z_min, z_max);
88 }
89
90 return 0;
91}
92
99 free(data->anum);
100 free(data->znum);
101 free(data->mass);
102 free(data->charge);
103 for(int i = 0; i < data->n_species; i++) {
104 free(data->dens[i].c);
105 }
106 free(data->temp[0].c);
107 free(data->temp[1].c);
108 free(data->vtor[0].c);
109 free(data->dens);
110 free(data->temp);
111 free(data->vtor);
112}
113
120 //TODO: Implement
121}
122
137a5err plasma_2D_eval_temp(real* temp, real r, real z, int species,
138 plasma_2D_data* pls_data) {
139 a5err err = 0;
140 int i = species > 0;
141 int interperr = linint2D_eval_f(temp, &pls_data->temp[i], r, z);
142 if(interperr) {
143 err = error_raise(ERR_INPUT_EVALUATION, __LINE__, EF_PLASMA_2D);
144 }
145 return err;
146}
147
162a5err plasma_2D_eval_dens(real* dens, real r, real z, int species,
163 plasma_2D_data* pls_data) {
164 a5err err = 0;
165 int interperr = linint2D_eval_f(dens, &pls_data->dens[species], r, z);
166 if(interperr) {
167 err = error_raise(ERR_INPUT_EVALUATION, __LINE__, EF_PLASMA_2D);
168 }
169 return err;
170}
171
187 plasma_2D_data* pls_data) {
188 int interperr = 0;
189 for(int i = 0; i < pls_data->n_species; i++) {
190 int ision = i > 0;
191 interperr += linint2D_eval_f(&temp[i], &pls_data->temp[ision], r, z);
192 interperr += linint2D_eval_f(&dens[i], &pls_data->dens[i], r, z);
193 }
194 a5err err = 0;
195 if(interperr) {
196 err = error_raise(ERR_INPUT_EVALUATION, __LINE__, EF_PLASMA_2D);
197 }
198 return err;
199}
200
210 plasma_2D_data* pls_data) {
211 a5err err = 0;
212 int interperr = linint2D_eval_f(vflow, pls_data->vtor, r, z);
213 if(interperr) {
214 err = error_raise(ERR_INPUT_EVALUATION, __LINE__, EF_PLASMA_2D);
215 }
216 *vflow *= r;
217 return err;
218}
Main header file for ASCOT5.
double real
Definition ascot5.h:85
Header file containing physical and mathematical constants.
Error module for ASCOT5.
unsigned long int a5err
Simulation error flag.
Definition error.h:17
@ EF_PLASMA_2D
Definition error.h:54
@ ERR_INPUT_EVALUATION
Definition error.h:65
@ NATURALBC
Definition interp.h:37
Linear interpolation library.
void linint2D_init(linint2D_data *str, real *c, int n_x, int n_y, int bc_x, int bc_y, real x_min, real x_max, real y_min, real y_max)
Initialize linear interpolation struct for scalar 2D data.
Definition linint2D.c:25
DECLARE_TARGET_END int linint2D_eval_f(real *f, linint2D_data *str, real x, real y)
Evaluate interpolated value of 2D scalar field.
Definition linint2D.c:60
Header file for math.c.
void plasma_2D_free(plasma_2D_data *data)
Free allocated resources.
Definition plasma_2D.c:98
a5err plasma_2D_eval_densandtemp(real *dens, real *temp, real r, real z, plasma_2D_data *pls_data)
Evaluate plasma density and temperature for all species.
Definition plasma_2D.c:186
a5err plasma_2D_eval_temp(real *temp, real r, real z, int species, plasma_2D_data *pls_data)
Evaluate plasma temperature.
Definition plasma_2D.c:137
void plasma_2D_offload(plasma_2D_data *data)
Offload data to the accelerator.
Definition plasma_2D.c:119
int plasma_2D_init(plasma_2D_data *data, int nr, int nz, int nion, real r_min, real r_max, real z_min, real z_max, int *anum, int *znum, real *mass, real *charge, real *Te, real *Ti, real *ne, real *ni, real *vtor)
Initialize 2D plasma data and check inputs.
Definition plasma_2D.c:25
a5err plasma_2D_eval_dens(real *dens, real r, real z, int species, plasma_2D_data *pls_data)
Evaluate plasma density.
Definition plasma_2D.c:162
a5err plasma_2D_eval_flow(real *vflow, real r, real z, plasma_2D_data *pls_data)
Evalate plasma flow along the field lines.
Definition plasma_2D.c:209
Header file for plasma_2D.c.
Macros for printing console output.
2D interpolation struct.
Definition linint.h:33
real * c
Definition linint.h:44
1D plasma parameters on the target
Definition plasma_2D.h:15
linint2D_data * temp
Definition plasma_2D.h:21
linint2D_data * vtor
Definition plasma_2D.h:23
real * charge
Definition plasma_2D.h:18
linint2D_data * dens
Definition plasma_2D.h:22