36 INTEGER,
INTENT (INOUT) :: ifail
71 INTEGER :: neu_bnd_type
72 REAL (R8) :: neu_bnd(3)
80 REAL (R8) :: source_n02(
profiles%nrho)
101 REAL (R8) :: source_n020
104 REAL (R8) :: amix, tau
108 INTEGER :: solver_type
120 REAL (R8) :: v(2), u(2), w(2)
138 solver_type = control%SOLVER_TYPE
143 rho_loop1:
DO irho=1,nrho
144 rho(irho) = geometry%RHO(irho)
145 vpr(irho) = geometry%VPR(irho)
154 IF(rho(1).EQ.0.0_r8 .AND. vpr(1).EQ.0.0_r8)
THEN
155 vpr(1) = vpr(2) / 1e6_r8
162 ion_loop1:
DO iion=1,nion
170 neu_bnd_type =
neutrals%NEU_BND_TYPE(iion)
171 neu_bnd(1) =
neutrals%NEU_BND(1,iion)
172 neu_bnd(2) =
neutrals%NEU_BND(2,iion)
173 neu_bnd(3) =
neutrals%NEU_BND(3,iion)
178 rho_loop2:
DO irho = 1,nrho
187 CALL
const_atom(te(irho), ti(irho), c_ion, c_cx, c_rec)
189 nu_ion(irho) = c_ion * ne(irho)
190 nu_cx(irho) = c_cx * ni(irho)
191 nu_n(irho) = nu_ion(irho) + nu_cx(irho)
192 s_rec(irho) = c_rec * ne(irho) * ni(irho)
201 v01 = 9.58d7 * t01 / aion
228 rho_loop3:
DO irho = 1,nrho
232 d(irho) = vpr(irho) / nu_n(irho)
233 g(irho) = nu_n(irho) / v01
250 IF(neu_bnd_type.EQ.1)
THEN
258 IF(neu_bnd_type.EQ.2)
THEN
260 u(2) = dsqrt(v01)/nu_n(nrho)
261 w(2) = 2.d0 * neu_bnd(1) / dsqrt(v01)
265 IF(neu_bnd_type.EQ.3)
THEN
275 solver%EQ_FLAG(ndim) = flag
281 rho_loop4:
DO irho=1,nrho
283 solver%RHO(irho) = rho(irho)
285 solver%Y(ndim,irho) = y(irho)
286 solver%DY(ndim,irho) = dy(irho)
287 solver%YM(ndim,irho) = ym(irho)
289 solver%A(ndim,irho) = a(irho)
290 solver%B(ndim,irho) = b(irho)
291 solver%C(ndim,irho) = c(irho)
292 solver%D(ndim,irho) = d(irho)
293 solver%E(ndim,irho) = e(irho)
294 solver%F(ndim,irho) = f(irho)
295 solver%G(ndim,irho) = g(irho)
315 rho_loop5:
DO irho=1,nrho
317 y(irho) =
solver%Y(ndim,irho)
318 dy(irho) =
solver%DY(ndim,irho)
324 dn01(irho) = dy(irho)
327 flux_n01(irho) = - dn01(irho) / nu_n(irho) * v01 * vpr(irho)
337 source_n02(irho) = s_rec(irho) + nu_cx(irho) * n01(irho)
343 iter_loop1:
DO iter = 1,5
365 rho_loop6:
DO irho = 1,nrho
367 v02(irho) = 9.58d7 * t02(irho) / aion
377 d(irho) = vpr(irho) / nu_n(irho)
378 f(irho) = source_n02(irho) / v02(irho) * t02(irho)*1.6d-12
379 g(irho) = nu_ion(irho) / v02(irho)
392 v(2) = (1.d0+rec) / nu_n(nrho)
393 u(2) = (1.d0-rec) / dsqrt(v02(nrho))
401 solver%EQ_FLAG(ndim) = flag
406 rho_loop7:
DO irho=1,nrho
408 solver%RHO(irho) = rho(irho)
410 solver%Y(ndim,irho) = y(irho)
411 solver%DY(ndim,irho) = dy(irho)
412 solver%YM(ndim,irho) = ym(irho)
414 solver%A(ndim,irho) = a(irho)
415 solver%B(ndim,irho) = b(irho)
416 solver%C(ndim,irho) = c(irho)
417 solver%D(ndim,irho) = d(irho)
418 solver%E(ndim,irho) = e(irho)
419 solver%F(ndim,irho) = f(irho)
420 solver%G(ndim,irho) = g(irho)
440 rho_loop8:
DO irho=1,nrho
442 y(irho) =
solver%Y(ndim,irho)
443 dy(irho) =
solver%DY(ndim,irho)
448 dp02(irho) = dy(irho)
452 n02(irho) = p02(irho) / (1.6d-12*t02(irho))
453 flux_n02(irho) = - dp02(irho) * v02(irho) / (1.6d-12*t02(irho)) &
454 / nu_n(irho) * vpr(irho)
462 rho_loop9:
DO irho = nrho, 2, -1
464 IF (flux_n02(irho) * flux_n02(irho-1).LE.0.d0) goto 10
468 r0 = ( flux_n02(i0)/vpr(i0)*rho(i0-1) &
469 - flux_n02(i0-1)/vpr(i0-1)*rho(i0) ) &
470 / (flux_n02(i0)/vpr(i0) - flux_n02(i0-1)/vpr(i0-1))
471 t020 = ( ti(i0) * (r0 - rho(i0-1)) &
472 + ti(i0-1)*(rho(i0)-r0)) &
473 / (rho(i0)-rho(i0-1))
474 source_n020 = (source_n02(i0)*(r0-rho(i0-1)) &
475 + source_n02(i0-1) * (rho(i0)-r0)) &
476 / (rho(i0)-rho(i0-1))
481 hla = (r0-rho(i0)) * (source_n020+source_n02(i0)) &
482 / flux_n02(i0) * vpr(i0)
483 tx = (t020+ti(i0)) / 2.d0
485 CALL
step_t02(hla, tx, t020, tn02(i0))
487 rho_loop10:
DO irho = i0,nrho-1
488 hla = (rho(irho)-rho(irho+1)) &
489 * (source_n02(irho)+source_n02(irho+1)) &
490 / (flux_n02(irho)/vpr(irho)+flux_n02(irho+1)/vpr(irho+1))
491 tx = (ti(irho)+ti(irho+1)) / 2.d0
493 CALL
step_t02(hla, tx, tn02(irho),tn02(irho+1))
502 hla = (r0-rho(i0-1)) * (source_n020+source_n02(i0-1)) &
503 / flux_n02(i0-1) * vpr(i0-1)
504 tx = (t020+ti(i0-1)) / 2.d0
506 CALL
step_t02(hla, tx, t020, tn02(i0-1))
508 rho_loop11:
DO irho = i0-1, 2, -1
509 hla = (rho(irho)-rho(irho-1)) &
510 * (source_n02(irho)+source_n02(irho-1)) &
511 / (flux_n02(irho)/vpr(irho)+flux_n02(irho-1)/vpr(irho-1))
512 tx = (ti(irho)+ti(irho-1))/2.d0
514 tn02(irho-1) = ti(irho-1)
516 IF (hla.LT.0.d0) CALL
step_t02(hla, tx, tn02(irho), tn02(irho-1))
525 rho_loop12:
DO irho = 2, nrho
526 t02(irho) = (1.d0-amix)*t02(irho) + amix*tn02(irho)
534 rho_loop13:
DO irho = 1, nrho
536 si(irho) = (n01(irho)+n02(irho)) * nu_ion(irho) - s_rec(irho)
537 qe(irho) = qe(irho) - 30.d0 * (n01(irho)+n02(irho)) &
538 * nu_ion(irho) - 1.5d0*te(irho) * s_rec(irho)
539 qi(irho) = 1.5d0 * (t01*n01(irho) + t02(irho)*n02(irho)) &
540 * nu_n(irho) - 1.5d0*ti(irho) &
541 * ((n01(irho)+n02(irho)) * nu_cx(irho) + s_rec(irho))
545 neutrals%N0(irho,iion,1) = n01(irho)
546 neutrals%FLUX_N0(irho,iion,1) = flux_n01(irho)
549 neutrals%N0(irho,iion,2) = n02(irho)
550 neutrals%FLUX_N0(irho,iion,2) = flux_n02(irho)
551 neutrals%T0(irho,iion,2) = t02(irho)
554 sources%SI_EXP(irho,iion) = si(irho)
555 sources%QI_EXP(irho,iion) = qi(irho) * itm_ev
556 sources%QE_EXP(irho) = qe(irho) * itm_ev
592 REAL (R8) ::
fun, tx, t0, t1
595 t1 = tx + (t0-tx) * dexp(
fun)
634 REAL (R8) :: fun1, fun2
637 c_ion = 0.73d-14 * dsqrt(te) * dexp(-13.6d0/te) &
639 c_cx = 1.d-14*ti**0.3d0
643 IF (fun1.GT.0.d0.AND.fun1.LE.1.d0) &
644 fun2 = fun1 *dexp(-fun1) * ( -0.58d0 -dlog(fun1) &
645 +fun1 -0.25d0*fun1**2 +0.055d0*fun1**3 )
648 fun2 = (fun1**2 +2.33d0*fun1 +0.25d0) &
649 / (fun1**2 +3.33d0*fun1 +1.68d0)
651 c_rec = 5.2d-20*dsqrt(fun1)*fun2
subroutine solution_interface(SOLVER, ifail)
INTERFACE TO NUMERICAL SOLVER.
subroutine profiles(p0, rbphi, dp0, drbphi, a)
subroutine const_atom(TE, TI, C_ION, C_CX, C_REC)
??
subroutine allocate_numerics(NDIM, NRHO, SOLVER, ifail)
subroutine step_t02(FUN, TX, T0, T1)
??
The module declares types of variables used in ETS (transport code)
subroutine main_neutrals(GEOMETRY, PROFILES, NEUTRALS, SOURCES, CONTROL, ifail)
??