Streamer fluid modeling - An overview of ARCoS  1.0
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
sprites.c
Go to the documentation of this file.
1 
12 #include <stdlib.h>
13 #include <stdio.h>
14 #include <math.h>
15 #include <string.h>
16 
17 #include "cdr.h"
18 #include "parameters.h"
19 #include "photo.h"
20 #include "proto.h"
21 #include "rz_array.h"
22 #include "species.h"
23 
24 static int var_max_axis (cdr_grid_t *grid, rz_array_t *var, int sign);
25 
29 
35 double
36 spr_density_at (double altitude)
37 {
38  return exp (-altitude / dens_decay_len);
39 }
40 
41 
47 void
49 {
50  /* We make the Courant numbers depend on the altitude: this is because
51  when we apply the Courant-Levy criterium we assume v = -E, which is not
52  true if the mobility now is != 1.0 */
53  spr_nu_a = nu_a;
54  spr_nu_d = nu_d;
55  spr_nu_rt = nu_rt;
56 
57  photo_copy_list (photo_terms, &spr_photo_terms);
58 }
59 
64 void
66 {
67  double altitude;
68 
69  altitude = spr_head_altitude (grid, sprite_sign);
70 
71  spr_update (altitude);
72 }
73 
77 void
78 spr_update (double altitude)
79 {
80  double back_dens = spr_density_at (altitude);
81  photo_term_t *p0, *p;
82 
83  nu_a = spr_nu_a;
84  nu_d = spr_nu_d * back_dens;
85  nu_rt = spr_nu_rt;
86 
87  for (p0 = spr_photo_terms, p = photo_terms; p0; p0 = p0->next, p = p->next) {
88  p->lambda = p0->lambda * back_dens * back_dens;
89  p->A = p0->A * (sprite_dens_0 + sprite_dens_q)
90  / (back_dens + sprite_dens_q);
91  }
92 
93 }
94 
100 double
101 spr_head_altitude (cdr_grid_t *grid, int sign)
102 {
103  int ih;
104  ih = var_max_axis (grid, grid->charge, sign);
105  if (0 == ih) ih = var_max_axis (grid, grid->dens[electrons], 1);
106  return z_at (ih, grid->level);
107 }
108 
110 static int
111 var_max_axis (cdr_grid_t *grid, rz_array_t *var, int sign)
112 {
113  int iz, iz_max = 0;
114  double var_max = 0.0;
115 
116  iter_grid_z (grid, iz) {
117  if (sign * RZT (var, 0, iz, 0) > var_max) {
118  iz_max = iz;
119  var_max = RZT (var, 0, iz, 0);
120  }
121  }
122 
123  return iz_max;
124 }