ASCOT5
Loading...
Searching...
No Matches
plasma.c
Go to the documentation of this file.
1
23#include <stdio.h>
24#include <stdlib.h>
25#include "ascot5.h"
26#include "error.h"
27#include "print.h"
28#include "plasma.h"
29#include "plasma/plasma_1D.h"
30#include "plasma/plasma_2D.h"
31#include "plasma/plasma_1Dt.h"
32#include "plasma/plasma_1DS.h"
33#include "consts.h"
34
41 switch(data->type) {
42 case plasma_type_1D:
44 break;
45 case plasma_type_2D:
47 break;
48 case plasma_type_1Dt:
50 break;
51 case plasma_type_1DS:
53 break;
54 }
55}
56
63 switch(data->type) {
64 case plasma_type_1D:
66 break;
67 case plasma_type_2D:
69 break;
70 case plasma_type_1Dt:
72 break;
73 case plasma_type_1DS:
75 break;
76 }
77}
78
98a5err plasma_eval_temp(real* temp, real rho, real r, real phi, real z, real t,
99 int species, plasma_data* pls_data) {
100 a5err err = 0;
101
102 switch(pls_data->type) {
103 case plasma_type_1D:
104 err = plasma_1D_eval_temp(temp, rho, species,
105 &(pls_data->plasma_1D));
106 break;
107
108 case plasma_type_2D:
109 err = plasma_2D_eval_temp(temp, r, z, species,
110 &(pls_data->plasma_2D));
111 break;
112
113 case plasma_type_1Dt:
114 err = plasma_1Dt_eval_temp(temp, rho, t, species,
115 &(pls_data->plasma_1Dt));
116 break;
117
118 case plasma_type_1DS:
119 err = plasma_1DS_eval_temp(temp, rho, species,
120 &(pls_data->plasma_1DS));
121 break;
122 }
123 if(err) {
124 /* In case of error, return some reasonable value to avoid further
125 complications */
126 temp[0] = 1e20;
127 }
128
129 return err;
130}
131
151a5err plasma_eval_dens(real* dens, real rho, real r, real phi, real z, real t,
152 int species, plasma_data* pls_data) {
153 a5err err = 0;
154
155 switch(pls_data->type) {
156 case plasma_type_1D:
157 err = plasma_1D_eval_dens(dens, rho, species,
158 &(pls_data->plasma_1D));
159 break;
160
161 case plasma_type_2D:
162 err = plasma_2D_eval_dens(dens, r, z, species,
163 &(pls_data->plasma_2D));
164 break;
165
166 case plasma_type_1Dt:
167 err = plasma_1Dt_eval_dens(dens, rho, t, species,
168 &(pls_data->plasma_1Dt));
169 break;
170
171 case plasma_type_1DS:
172 err = plasma_1DS_eval_dens(dens, rho, species,
173 &(pls_data->plasma_1DS));
174 break;
175 }
176
177 if(err) {
178 /* In case of error, return some reasonable value to avoid further
179 complications */
180 dens[0] = 1e20;
181 }
182 return err;
183}
184
205 real r, real phi, real z, real t,
206 plasma_data* pls_data) {
207 a5err err = 0;
208
209 switch(pls_data->type) {
210 case plasma_type_1D:
211 err = plasma_1D_eval_densandtemp(dens, temp,
212 rho, &(pls_data->plasma_1D));
213 break;
214
215 case plasma_type_2D:
216 err = plasma_2D_eval_densandtemp(dens, temp,
217 r, z, &(pls_data->plasma_2D));
218 break;
219
220 case plasma_type_1Dt:
221 err = plasma_1Dt_eval_densandtemp(dens, temp,
222 rho, t, &(pls_data->plasma_1Dt));
223 break;
224
225 case plasma_type_1DS:
226 err = plasma_1DS_eval_densandtemp(dens, temp,
227 rho, &(pls_data->plasma_1DS));
228 break;
229
230 default:
231 /* Unregonized input. Produce error. */
232 err = error_raise( ERR_UNKNOWN_INPUT, __LINE__, EF_PLASMA );
233 break;
234 }
235 if(err) {
236 /* In case of error, return some reasonable values to avoid further
237 complications */
238 for(int i=0; i<MAX_SPECIES; i++) {
239 dens[i] = 1e20;
240 temp[i] = 1e3;
241 }
242 }
243
244 return err;
245}
246
259 real* vflow, real rho, real r, real phi, real z, real t,
260 plasma_data* pls_data) {
261 a5err err = 0;
262
263 switch(pls_data->type) {
264 case plasma_type_1D:
266 vflow, rho, r, &(pls_data->plasma_1D));
267 break;
268
269 case plasma_type_2D:
271 vflow, r, z, &(pls_data->plasma_2D));
272 break;
273
274 case plasma_type_1DS:
276 vflow, rho, r, &(pls_data->plasma_1DS));
277 break;
278
279 case plasma_type_1Dt:
281 vflow, rho, t, r, &(pls_data->plasma_1Dt));
282 break;
283
284 default:
285 /* Unregonized input. Produce error. */
286 err = error_raise( ERR_UNKNOWN_INPUT, __LINE__, EF_PLASMA );
287 break;
288 }
289
290 if(err) {
291 /* In case of error, return some reasonable values to avoid further
292 complications */
293 *vflow = 0;
294 }
295
296 return err;
297}
298
312 int n = 0;
313 switch(pls_data->type) {
314 case plasma_type_1D:
315 n = pls_data->plasma_1D.n_species;
316 break;
317
318 case plasma_type_2D:
319 n = pls_data->plasma_2D.n_species;
320 break;
321
322 case plasma_type_1Dt:
323 n = pls_data->plasma_1Dt.n_species;
324 break;
325
326 case plasma_type_1DS:
327 n = pls_data->plasma_1DS.n_species;
328 break;
329 }
330
331 return n;
332}
333
346 const real* mass = NULL;
347 switch(pls_data->type) {
348 case plasma_type_1D:
349 mass = pls_data->plasma_1D.mass;
350 break;
351
352 case plasma_type_2D:
353 mass = pls_data->plasma_2D.mass;
354 break;
355
356 case plasma_type_1Dt:
357 mass = pls_data->plasma_1Dt.mass;
358 break;
359
360 case plasma_type_1DS:
361 mass = pls_data->plasma_1DS.mass;
362 break;
363 }
364
365 return mass;
366}
367
380 const real* charge = NULL;
381 switch(pls_data->type) {
382 case plasma_type_1D:
383 charge = pls_data->plasma_1D.charge;
384 break;
385
386 case plasma_type_2D:
387 charge = pls_data->plasma_2D.charge;
388 break;
389
390 case plasma_type_1Dt:
391 charge = pls_data->plasma_1Dt.charge;
392 break;
393
394 case plasma_type_1DS:
395 charge = pls_data->plasma_1DS.charge;
396 break;
397 }
398
399 return charge;
400}
401
412 const int* znum = NULL;
413 switch(pls_data->type) {
414 case plasma_type_1D:
415 znum = pls_data->plasma_1D.znum;
416 break;
417
418 case plasma_type_2D:
419 znum = pls_data->plasma_2D.znum;
420 break;
421
422 case plasma_type_1Dt:
423 znum = pls_data->plasma_1Dt.znum;
424 break;
425
426 case plasma_type_1DS:
427 znum = pls_data->plasma_1DS.znum;
428 break;
429 }
430
431 return znum;
432}
433
444 const int* anum = NULL;
445 switch(pls_data->type) {
446 case plasma_type_1D:
447 anum = pls_data->plasma_1D.anum;
448 break;
449
450 case plasma_type_2D:
451 anum = pls_data->plasma_2D.anum;
452 break;
453
454 case plasma_type_1Dt:
455 anum = pls_data->plasma_1Dt.anum;
456 break;
457
458 case plasma_type_1DS:
459 anum = pls_data->plasma_1DS.anum;
460 break;
461 }
462
463 return anum;
464}
Main header file for ASCOT5.
double real
Definition ascot5.h:85
#define MAX_SPECIES
Maximum number of plasma species.
Definition ascot5.h:95
Header file containing physical and mathematical constants.
Error module for ASCOT5.
unsigned long int a5err
Simulation error flag.
Definition error.h:17
@ EF_PLASMA
Definition error.h:42
@ ERR_UNKNOWN_INPUT
Definition error.h:66
void plasma_free(plasma_data *data)
Free allocated resources.
Definition plasma.c:40
const real * plasma_get_species_mass(plasma_data *pls_data)
Get mass of all plasma species.
Definition plasma.c:345
const int * plasma_get_species_znum(plasma_data *pls_data)
Get charge number of ion species.
Definition plasma.c:411
int plasma_get_n_species(plasma_data *pls_data)
Get the number of plasma species.
Definition plasma.c:311
a5err plasma_eval_flow(real *vflow, real rho, real r, real phi, real z, real t, plasma_data *pls_data)
Evalate plasma flow along the field lines.
Definition plasma.c:258
const real * plasma_get_species_charge(plasma_data *pls_data)
Get charge of all plasma species.
Definition plasma.c:379
a5err plasma_eval_temp(real *temp, real rho, real r, real phi, real z, real t, int species, plasma_data *pls_data)
Evaluate plasma temperature.
Definition plasma.c:98
a5err plasma_eval_densandtemp(real *dens, real *temp, real rho, real r, real phi, real z, real t, plasma_data *pls_data)
Evaluate plasma density and temperature for all species.
Definition plasma.c:204
void plasma_offload(plasma_data *data)
Offload data to the accelerator.
Definition plasma.c:62
a5err plasma_eval_dens(real *dens, real rho, real r, real phi, real z, real t, int species, plasma_data *pls_data)
Evaluate plasma density.
Definition plasma.c:151
const int * plasma_get_species_anum(plasma_data *pls_data)
Get atomic mass number of ion species.
Definition plasma.c:443
Header file for plasma.c.
@ plasma_type_1D
Definition plasma.h:22
@ plasma_type_1Dt
Definition plasma.h:24
@ plasma_type_1DS
Definition plasma.h:25
@ plasma_type_2D
Definition plasma.h:23
a5err plasma_1DS_eval_densandtemp(real *dens, real *temp, real rho, plasma_1DS_data *plasma_data)
Evaluate plasma density and temperature for all species.
Definition plasma_1DS.c:302
a5err plasma_1DS_eval_dens(real *dens, real rho, int species, plasma_1DS_data *plasma_data)
Evaluate plasma density.
Definition plasma_1DS.c:267
a5err plasma_1DS_eval_flow(real *vflow, real rho, real r, plasma_1DS_data *pls_data)
Evalate plasma flow along the field lines.
Definition plasma_1DS.c:350
void plasma_1DS_free(plasma_1DS_data *data)
Free allocated resources.
Definition plasma_1DS.c:196
a5err plasma_1DS_eval_temp(real *temp, real rho, int species, plasma_1DS_data *plasma_data)
Evaluate plasma temperature.
Definition plasma_1DS.c:236
void plasma_1DS_offload(plasma_1DS_data *data)
Offload data to the accelerator.
Definition plasma_1DS.c:212
Header file for plasma_1DS.c.
a5err plasma_1D_eval_dens(real *dens, real rho, int species, plasma_1D_data *pls_data)
Evaluate plasma density.
Definition plasma_1D.c:187
a5err plasma_1D_eval_densandtemp(real *dens, real *temp, real rho, plasma_1D_data *pls_data)
Evaluate plasma density and temperature for all species.
Definition plasma_1D.c:227
void plasma_1D_free(plasma_1D_data *data)
Free allocated resources.
Definition plasma_1D.c:109
void plasma_1D_offload(plasma_1D_data *data)
Offload data to the accelerator.
Definition plasma_1D.c:124
a5err plasma_1D_eval_flow(real *vflow, real rho, real r, plasma_1D_data *pls_data)
Evalate plasma flow along the field lines.
Definition plasma_1D.c:276
a5err plasma_1D_eval_temp(real *temp, real rho, int species, plasma_1D_data *pls_data)
Evaluate plasma temperature.
Definition plasma_1D.c:147
Header file for plasma_1D.c.
void plasma_1Dt_offload(plasma_1Dt_data *data)
Offload data to the accelerator.
Definition plasma_1Dt.c:140
void plasma_1Dt_free(plasma_1Dt_data *data)
Free allocated resources.
Definition plasma_1Dt.c:124
a5err plasma_1Dt_eval_densandtemp(real *dens, real *temp, real rho, real t, plasma_1Dt_data *pls_data)
Evaluate plasma density and temperature for all species.
Definition plasma_1Dt.c:220
a5err plasma_1Dt_eval_flow(real *vflow, real rho, real t, real r, plasma_1Dt_data *pls_data)
Evalate plasma flow along the field lines.
Definition plasma_1Dt.c:320
a5err plasma_1Dt_eval_temp(real *temp, real rho, real t, int species, plasma_1Dt_data *pls_data)
Evaluate plasma temperature.
Definition plasma_1Dt.c:165
a5err plasma_1Dt_eval_dens(real *dens, real rho, real t, int species, plasma_1Dt_data *pls_data)
Evaluate plasma density.
Definition plasma_1Dt.c:193
Header file for plasma_1Dt.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
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.
real * charge
Definition plasma_1D.h:18
real * charge
Definition plasma_2D.h:18
Plasma simulation data.
Definition plasma.h:34
plasma_1D_data plasma_1D
Definition plasma.h:36
plasma_1Dt_data plasma_1Dt
Definition plasma.h:38
plasma_1DS_data plasma_1DS
Definition plasma.h:39
plasma_type type
Definition plasma.h:35
plasma_2D_data plasma_2D
Definition plasma.h:37