15 SUBROUTINE impurity_imas (EQUILIBRIUM_ITER, CORETRANSPORT_ITER, CORETRANSPORT_NEW , &
16 coreprofiles_old, coreprofiles_iter, coreprofiles_new , &
17 coresources_iter, coresources_new, coresolver_iter, &
18 coreradiation_iter, coreradiation_new, &
19 control_integer, control_double )
36 use ids_types, r8 => ids_real, itm_i4 => ids_int
40 use imas_constants_module
55 TYPE (ids_equilibrium
) :: equilibrium_iter
56 TYPE (ids_core_transport
) :: coretransport_iter
57 TYPE (ids_core_transport
) :: coretransport_new
58 TYPE (ids_core_profiles
) :: coreprofiles_old
59 TYPE (ids_core_profiles
) :: coreprofiles_iter
60 TYPE (ids_core_profiles
) :: coreprofiles_new
61 TYPE (ids_core_sources
) :: coresources_iter
62 TYPE (ids_core_sources
) :: coresources_new
63 TYPE (ids_transport_solver_numerics
) :: coresolver_iter
64 TYPE (ids_radiation
) :: coreradiation_iter
65 TYPE (ids_radiation
) :: coreradiation_new
91 INTEGER :: nimp_lin,nimp_brem,nimp_rec
93 INTEGER,
ALLOCATABLE :: nzimp(:)
94 INTEGER,
ALLOCATABLE :: nzimp_ct(:)
95 INTEGER,
ALLOCATABLE :: nzimp_cs(:)
96 INTEGER,
ALLOCATABLE :: nzimp_csol(:)
97 INTEGER,
ALLOCATABLE :: nzimp_lin(:),nzimp_brem(:),nzimp_rec(:)
98 INTEGER,
ALLOCATABLE :: nz_bnd_type(:)
100 INTEGER,
ALLOCATABLE :: ntype(:)
101 INTEGER,
ALLOCATABLE :: ncomp(:)
102 INTEGER,
PARAMETER :: nocur = 1
103 INTEGER,
ALLOCATABLE :: nrho_tr
104 INTEGER,
ALLOCATABLE :: nrho_sr(:)
105 INTEGER,
ALLOCATABLE :: nrho_lin(:),nrho_brem(:),nrho_rec(:)
112 INTEGER :: insource_imp
118 INTEGER :: inproces_lin
119 INTEGER :: inproces_brem
120 INTEGER :: inproces_rec
123 INTEGER :: irho, iimp, izimp,ineq
124 INTEGER :: ineut, itype, icomp
127 INTEGER :: iion,iion_ct,iion_csol,iion_cs
128 INTEGER :: iion_lin,iion_brem,iion_rec
129 INTEGER :: solver_type
131 REAL (R8) :: b0, b0prime
133 REAL (R8),
ALLOCATABLE :: rho(:)
134 REAL (R8),
ALLOCATABLE :: vol(:)
135 REAL (R8),
ALLOCATABLE :: vpr(:)
136 REAL (R8),
ALLOCATABLE :: vprm(:)
137 REAL (R8),
ALLOCATABLE :: g3(:)
138 REAL (R8),
ALLOCATABLE :: ne(:)
139 REAL (R8),
ALLOCATABLE :: te(:)
140 REAL (R8),
ALLOCATABLE :: dnz1(:,:)
141 REAL (R8),
ALLOCATABLE :: flux(:,:)
142 REAL (R8),
ALLOCATABLE :: flux_inter(:,:)
143 REAL (R8),
ALLOCATABLE :: nz1(:,:),aa(:,:)
144 REAL (R8),
ALLOCATABLE :: nzm1(:,:)
145 REAL (R8),
ALLOCATABLE :: zn(:)
146 REAL (R8),
ALLOCATABLE :: am(:)
150 REAL (R8),
ALLOCATABLE :: total_rad_int(:,:)
152 REAL (R8),
ALLOCATABLE :: tti(:)
154 REAL (R8),
ALLOCATABLE :: diff(:,:)
155 REAL (R8),
ALLOCATABLE :: vcon(:,:)
156 REAL (R8),
ALLOCATABLE :: imp_radiation(:,:)
157 REAL (R8),
ALLOCATABLE :: nzsource(:,:)
158 REAL (R8),
ALLOCATABLE :: nz_bnd(:,:)
159 REAL (R8),
ALLOCATABLE :: aneut(:)
162 REAL (R8),
ALLOCATABLE :: lin_rad1(:,:)
163 REAL (R8),
ALLOCATABLE :: brem_rad1(:,:)
164 REAL (R8),
ALLOCATABLE :: lin_rad(:)
165 REAL (R8),
ALLOCATABLE :: brem_rad(:)
166 REAL (R8),
ALLOCATABLE :: jon_en1(:,:)
167 REAL (R8),
ALLOCATABLE :: jon_en(:)
168 REAL (R8),
ALLOCATABLE :: rec_los1(:,:)
169 REAL (R8),
ALLOCATABLE :: rec_los(:)
170 REAL (R8),
ALLOCATABLE :: qrad(:)
171 REAL (R8),
ALLOCATABLE :: se_exp(:)
173 REAL (R8),
ALLOCATABLE :: fun(:)
174 REAL (R8),
ALLOCATABLE :: fun_in(:)
175 REAL (R8),
ALLOCATABLE :: fun_out(:)
176 REAL (R8),
ALLOCATABLE :: fun_out_tr(:)
178 REAL (R8) :: amix, tau
184 REAL (R8),
ALLOCATABLE ::r_lin_int(:)
185 REAL (R8),
ALLOCATABLE ::r_lin_int1(:,:)
186 REAL (R8),
ALLOCATABLE ::r_brem_int(:)
187 REAL (R8),
ALLOCATABLE ::r_brem_int1(:,:)
188 REAL (R8),
ALLOCATABLE ::r_sum_int(:)
189 REAL (R8),
ALLOCATABLE ::r_sum_int1(:,:)
190 REAL (R8),
ALLOCATABLE ::e_jon_int(:)
191 REAL (R8),
ALLOCATABLE ::e_jon_int1(:,:)
192 REAL (R8),
ALLOCATABLE ::e_rec_int(:)
193 REAL (R8),
ALLOCATABLE ::e_rec_int1(:,:)
194 REAL (R8),
ALLOCATABLE ::e_sum_int(:)
195 REAL (R8),
ALLOCATABLE ::e_sum_int1(:,:)
196 REAL (R8),
ALLOCATABLE ::sum_lin_int(:)
197 REAL (R8),
ALLOCATABLE ::sum_brem_int(:)
198 REAL (R8),
ALLOCATABLE ::sum_rad_int(:)
199 REAL (R8),
ALLOCATABLE ::sum_jon_int(:)
200 REAL (R8),
ALLOCATABLE ::sum_rec_int(:)
201 REAL (R8),
ALLOCATABLE ::sum_los_int(:)
203 INTEGER,
INTENT(IN) :: control_integer(2)
204 REAL (R8),
INTENT(IN) :: control_double(5)
205 CHARACTER (33) :: filename
210 TYPE (amns_handle_type
),
SAVE :: amns
211 TYPE (amns_handle_rx_type
),
ALLOCATABLE,
SAVE :: &
212 amns_ei(:,:), amns_eip(:,:),amns_rc(:,:), amns_lr(:,:), amns_br(:,:)
213 TYPE (amns_version_type
) :: amns_database
214 TYPE (amns_reaction_type
) :: ei_rx, eip_rx, rc_rx, lr_rx, br_rx
215 TYPE (amns_reactants_type
) :: species
216 TYPE (amns_query_type
) :: query
217 TYPE (amns_answer_type
) :: answer
218 TYPE (amns_set_type
) :: set
220 type (amns_version_type
) :: version
221 REAL (R8) :: zn_imp, am_imp
223 CHARACTER (len=80) :: format
227 WRITE (*,*)
'===========> IMPURITY started'
232 nrho =
SIZE (coreprofiles_iter%profiles_1d(1)%grid%rho_tor_norm)
233 neq =
SIZE (equilibrium_iter%time_slice(1)%profiles_1d%rho_tor_norm)
234 IF (
ASSOCIATED(coreprofiles_iter%profiles_1d(1)%ion))
THEN
235 nion =
SIZE (coreprofiles_iter%profiles_1d(1)%ion)
239 ALLOCATE (nzimp(nion))
244 nmod =
SIZE (coretransport_iter%MODEL)
248 nsource =
SIZE (coresources_iter%SOURCE)
252 nequal =
SIZE (coresolver_iter%solver_1d(1)%equation)
256 nproces =
SIZE (coreradiation_iter%PROCESS)
261 write(*,*)
'NRHO=',nrho,
'NEQ=',neq,
'NION=',nion,
'NSOURCE=', nsource,
'NMOD=',nmod,
'NEQUAL=',nequal
262 write(*,*)
'NPROCES=',nproces
266 ALLOCATE (coreprofiles_new%profiles_1d(1))
267 CALL ids_copy(coreprofiles_iter, coreprofiles_new)
270 ALLOCATE (coresources_new%SOURCE(nsource))
271 CALL ids_copy(coresources_iter, coresources_new)
274 ALLOCATE (coretransport_new%MODEL(nmod))
275 CALL ids_copy(coretransport_iter,coretransport_new)
279 IF (nproces.GT.0.)
THEN
281 CALL ids_copy(coreradiation_iter, coreradiation_new)
287 coreradiation_new%process(1)%identifier%name=
"line_radiation"
288 coreradiation_new%process(1)%identifier%index=10
289 coreradiation_new%process(1)%identifier%description=
"Emission from line radiation"
291 coreradiation_new%process(2)%identifier%name=
"bremsstrahlung"
292 coreradiation_new%process(2)%identifier%index=8
293 coreradiation_new%process(2)%identifier%description=
"Emission from bremsstrahlung+recombination"
295 coreradiation_new%process(3)%identifier%name=
"recombination"
296 coreradiation_new%process(3)%identifier%index=11
297 coreradiation_new%process(3)%identifier%description=
"Emission from bremsstrahlung+recombination"
299 DO inproces = 1,nproces
300 coreradiation_new%process(inproces)%profiles_1d(1)%emissivity_ion_total(:)=0.0_r8
301 coreradiation_new%process(inproces)%profiles_1d(1)%power_inside_ion_total(:)=0.0_r8
304 nzimp(iion)=
SIZE(coreprofiles_iter%profiles_1d(1)%ion(iion)%state)
305 coreradiation_new%process(inproces)%profiles_1d(1)%ion(iion)%multiple_states_flag = coreprofiles_iter%profiles_1d(1)%ion(iion)%multiple_states_flag
306 coreradiation_new%process(inproces)%profiles_1d(1)%grid%rho_tor_norm = coreprofiles_iter%profiles_1d(1)%grid%rho_tor_norm
307 coreradiation_new%process(inproces)%profiles_1d(1)%ion(iion)%element(1) = coreprofiles_iter%profiles_1d(1)%ion(iion)%element(1)
308 coreradiation_new%process(inproces)%profiles_1d(1)%ion(iion)%emissivity(:)=0.0_r8
309 coreradiation_new%process(inproces)%profiles_1d(1)%ion(iion)%power_inside(:)=0.0_r8
310 IF (coreradiation_new%process(inproces)%profiles_1d(1)%ion(iion)%multiple_states_flag.eq.1)
then
312 DO izimp=1, nzimp(iion)
314 coreradiation_new%process(inproces)%profiles_1d(1)%ion(iion)%state(izimp)%Z_MIN = izimp
315 coreradiation_new%process(inproces)%profiles_1d(1)%ion(iion)%state(izimp)%Z_MAX = izimp
316 coreradiation_new%process(inproces)%profiles_1d(1)%ion(iion)%state(izimp)%emissivity(:)=0.0_r8
317 coreradiation_new%process(inproces)%profiles_1d(1)%ion(iion)%state(izimp)%power_inside(:)=0.0_r8
325 coretransport_new%time(1) = coreprofiles_iter%time(1)
326 coreradiation_new%time(1) = coreprofiles_iter%time(1)
327 coreprofiles_new%time(1) = coreprofiles_iter%time(1)
328 coreradiation_new%time(1) = coreprofiles_iter%time(1)
333 DO inproces=1,nproces
334 IF (trim(adjustl(coreradiation_new%process(inproces)%identifier%name(1))).eq.
"line_radiation")
THEN
335 inproces_lin = inproces
336 write (*,*)
'INPROCES_LIN=',inproces_lin
339 IF (trim(adjustl(coreradiation_new%process(inproces)%identifier%name(1))).eq.
"bremsstrahlung")
THEN
340 inproces_brem = inproces
341 write (*,*)
'INPROCES_BREM=',inproces_brem
344 IF (trim(adjustl(coreradiation_new%process(inproces)%identifier%name(1))).eq.
"recombination")
THEN
345 inproces_rec = inproces
346 write (*,*)
'INPROCES_REC=',inproces_rec
349 ALLOCATE (nrho_lin(inproces_lin))
350 ALLOCATE (nrho_brem(inproces_brem))
351 ALLOCATE (nrho_rec(inproces_rec))
353 nrho_lin(inproces_lin) =
SIZE(coreradiation_new%process(inproces_lin)%PROFILES_1D(1)%GRID%rho_tor_norm)
354 write(*,*)
'NRHO_LIN(INPROCES_LIN)=',nrho_lin(inproces_lin),
'INPROCES_LIN=',inproces_lin
355 nion_lin =
SIZE(coreradiation_new%process(inproces_lin)%PROFILES_1D(1)%ion)
356 write(*,*)
'nion_lin=',nion_lin
357 IF (nion_lin.NE.nion)
THEN
358 write(*,*)
'warning different number on the ions between coreprofiles and line radiation'
361 nrho_brem(inproces_brem) =
SIZE(coreradiation_new%process(inproces_brem)%PROFILES_1D(1)%GRID%rho_tor_norm)
362 write(*,*)
'NRHO_BREM(INPROCES_BREM)=',nrho_brem(inproces_brem),
'INPROCES_BREM=',inproces_brem
363 nion_brem =
SIZE(coreradiation_new%process(inproces_brem)%PROFILES_1D(1)%ion)
364 IF (nion_brem.NE.nion)
THEN
365 write(*,*)
'warning different number on the ions between coreprofiles and bremsstrahlung'
368 nrho_rec(inproces_rec) =
SIZE(coreradiation_new%process(inproces_rec)%PROFILES_1D(1)%GRID%rho_tor_norm)
369 write(*,*)
'NRHO_REC(INPROCES_REC)=',nrho_rec(inproces_rec),
'INPROCES_REC=',inproces_rec
370 nion_rec =
SIZE(coreradiation_new%process(inproces_rec)%PROFILES_1D(1)%ion)
371 IF (nion_rec.NE.nion)
THEN
372 write(*,*)
'warning different number on the ions between coreprofiles and recombination'
377 IF (coreprofiles_iter%profiles_1d(1)%ion(iion)%multiple_states_flag.EQ.1)
THEN
383 DO iion_lin=1,nion_lin
384 IF (coreradiation_new%process(inproces_lin)%PROFILES_1D(1)%ion(iion_lin)%multiple_states_flag.EQ.1)
THEN
385 nimp_lin= nimp_lin + 1
388 write(*,*)
'nimp_rad_lin=',nimp_lin
390 IF (nimp_lin.NE.nimp)
THEN
391 write(*,*)
'warning different number on the impurity between coreprofile and line radiation'
394 ALLOCATE (nzimp_lin(nion_lin))
397 DO iion_brem=1,nion_brem
398 IF (coreradiation_new%process(inproces_brem)%PROFILES_1D(1)%ion(iion_brem)%multiple_states_flag.EQ.1)
THEN
399 nimp_brem= nimp_brem+1
402 write(*,*)
'nimp_rad_brem=',nimp_brem
404 IF (nimp_brem.NE.nimp)
THEN
405 write(*,*)
'warning different number on the impurity between coreprofile and brem. radiation'
408 ALLOCATE (nzimp_brem(nion_brem))
411 DO iion_rec = 1,nion_rec
412 IF (coreradiation_new%process(inproces_rec)%PROFILES_1D(1)%ion(iion_rec)%multiple_states_flag.EQ.1)
THEN
416 write(*,*)
'nimp_rad_rec=',nimp_rec
417 IF (nimp_rec.NE.nimp)
THEN
418 write(*,*)
'warning different number on the impurity between coreprofile and recombination'
421 ALLOCATE (nzimp_rec(nion_rec))
424 call
get_control_parameter(coresolver_iter%solver_1d(1)%control_parameters,
'mixing_ratio_kinetic_profiles', amix)
427 tau = coresolver_iter%time_step_average%data(1)
430 solver_type = coresolver_iter%solver%index
432 write(*,*)
'amix=',amix,
'tau=',tau,
'solver_type',solver_type
437 ALLOCATE (nrho_sr(nsource))
442 ALLOCATE (vprm(nrho))
446 ALLOCATE (fun_out(nrho))
447 ALLOCATE (qrad(nrho))
448 ALLOCATE (se_exp(nrho))
451 b0 = equilibrium_iter%vacuum_toroidal_field%B0(1)
452 r0 = equilibrium_iter%vacuum_toroidal_field%R0
453 ne = coreprofiles_iter%profiles_1d(1)%electrons%density
454 te = coreprofiles_iter%profiles_1d(1)%electrons%temperature
455 rho = coreprofiles_iter%profiles_1d(1)%grid%rho_tor_norm
462 CALL l3interp(equilibrium_iter%time_slice(1)%profiles_1d%volume, equilibrium_iter%time_slice(1)%profiles_1d%rho_tor_norm, neq, &
465 CALL l3deriv(equilibrium_iter%time_slice(1)%profiles_1d%volume, equilibrium_iter%time_slice(1)%profiles_1d%rho_tor_norm, neq, &
468 CALL l3deriv(equilibrium_iter%time_slice(1)%profiles_1d%volume, equilibrium_iter%time_slice(1)%profiles_1d%rho_tor_norm, neq, &
470 CALL l3interp(equilibrium_iter%time_slice(1)%profiles_1d%gm3, equilibrium_iter%time_slice(1)%profiles_1d%rho_tor_norm, neq, &
473 IF (vpr(1).LE.0.)
THEN
476 IF (vprm(1).LE.0.)
THEN
492 IF (coreprofiles_iter%profiles_1d(1)%ion(iion)%multiple_states_flag.EQ.1)
THEN
494 nzimp(iion)=
SIZE(coreprofiles_iter%profiles_1d(1)%ion(iion)%state)
495 IF(max_nzimp.LE.nzimp(iion))
THEN
496 max_nzimp=nzimp(iion)
498 write (*,*)
'nimp=',nimp,
'nzimp(iion)= ', nzimp(iion),max_nzimp
499 DO izimp=1,nzimp(iion)
500 IF (coreprofiles_iter%profiles_1d(1)%ion(iion)%state(izimp)%z_min.EQ.coreprofiles_iter%profiles_1d(1)%ion(iion)%state(izimp)%Z_MAX)
THEN
508 WRITE(*,*)
'ITM AMNSPROTO data used (via UAL)'
509 ALLOCATE(amns_ei(0:max_nzimp, nion), amns_rc(0:max_nzimp, nion), &
510 amns_eip(0:max_nzimp,nion), amns_lr(0:max_nzimp, nion), &
511 amns_br(0:max_nzimp, nion))
512 CALL imas_amns_setup(amns, version)
513 query%string =
'version'
514 CALL imas_amns_query(amns,query,answer)
515 WRITE(*,*)
'AMNS data base version = ',trim(answer%string)
517 eip_rx%string =
'EIP'
521 FORMAT =
'(''ZN = '',f5.2,'', IS = '',i2,'', RX = '',a,'', SRC = '',a)'
522 query%string =
'source'
526 zn_imp = coreprofiles_old%profiles_1d(1)%ion(iion)%element(1)%Z_N
527 am_imp = coreprofiles_old%profiles_1d(1)%ion(iion)%element(1)%a
528 write(*,*)
'AM_imp=',am_imp
531 DO izimp=0, nzimp(iion)-1
533 allocate(species%components(4))
534 species%components = &
535 (/ amns_reactant_type(zn_imp, izimp, am_imp, 0), &
536 amns_reactant_type(0, -1, 0, 0), &
537 amns_reactant_type(zn_imp, izimp+1, am_imp, 1), &
538 amns_reactant_type(0, -1, 0, 1) &
540 CALL imas_amns_setup_table(amns, ei_rx, species, amns_ei(izimp, iion))
542 deallocate(species%components)
545 allocate(species%components(2))
546 species%components = &
547 (/ amns_reactant_type(zn_imp, izimp, am_imp, 0), &
548 amns_reactant_type(zn_imp, izimp, am_imp, 1) &
550 CALL imas_amns_setup_table(amns, lr_rx, species, amns_lr(izimp, iion))
551 deallocate(species%components)
554 DO izimp=1, nzimp(iion)
556 allocate(species%components(4))
557 species%components = &
558 (/ amns_reactant_type(zn_imp, izimp, am_imp, 0), &
559 amns_reactant_type(0, -1, 0, 0), &
560 amns_reactant_type(zn_imp, izimp-1, am_imp, 1), &
561 amns_reactant_type(0, -1, 0, 1) &
563 CALL imas_amns_setup_table(amns, rc_rx, species, amns_rc(izimp, iion))
564 deallocate(species%components)
566 allocate(species%components(2))
567 species%components = &
568 (/ amns_reactant_type(zn_imp, izimp, am_imp, 0), &
569 amns_reactant_type(zn_imp, izimp, am_imp, 1) &
571 CALL imas_amns_setup_table(amns, br_rx, species, amns_br(izimp, iion))
572 deallocate(species%components)
575 DO izimp=0,nzimp(iion)
577 allocate(species%components(2))
578 species%components = &
579 (/ amns_reactant_type(zn_imp, izimp, am_imp, 0), &
580 amns_reactant_type(zn_imp, izimp, am_imp, 1) &
582 CALL imas_amns_setup_table(amns, eip_rx, species, amns_eip(izimp, iion))
583 deallocate(species%components)
586 write(*,*)
'after AMNS'
588 ALLOCATE (fun_in(
SIZE(coreprofiles_iter%profiles_1d(1)%grid%rho_tor_norm)))
597 IF (trim(adjustl(coretransport_iter%MODEL(inmod)%identifier%name(1))).eq.
"combined".and.&
598 coretransport_iter%MODEL(inmod)%flux_multiplier.eq.0)
THEN
603 write(*,*)
'WARNNING more on 1 combined transport model'
608 write (*,*)
'INMOD_IMP=',inmod_imp,
'in_TR=',in_tr
610 nrho_tr =
SIZE(coretransport_iter%MODEL(inmod_imp)%PROFILES_1D(1)%GRID_D%rho_tor_norm)
611 fun_in = coreprofiles_iter%profiles_1d(1)%grid%rho_tor_norm
612 write(*,*)
' NRHO_TR=', nrho_tr
613 nion_ct =
SIZE(coretransport_iter%MODEL(inmod_imp)%PROFILES_1D(1)%ion)
614 write(*,*)
'NION_CT=',nion_ct,
'nion=',nion
616 IF (nion_ct.NE.nion)
THEN
617 write(*,*)
'warning different number on the ions between coreprofiles and coretransport'
622 IF (coretransport_iter%MODEL(inmod_imp)%PROFILES_1D(1)%ion(iion_ct)%multiple_states_flag.EQ.1)
THEN
624 write(*,*)
'nimp_ct=',nimp_ct
628 IF (nimp_ct.NE.nimp)
THEN
629 write(*,*)
'warning different number on the impurity between coreprofiles and coretransport'
631 ALLOCATE(fun_out_tr(nrho_tr))
632 ALLOCATE (nzimp_ct(nion_ct))
635 DO insource=1,nsource
636 IF (trim(adjustl(coresources_iter%source(insource)%identifier%name(1))).eq.
"total")
THEN
637 insource_imp = insource
638 write (*,*)
'INSOURCE_IMP=',insource_imp
642 nrho_sr(insource_imp) =
SIZE(coresources_iter%SOURCE(insource_imp)%PROFILES_1D(1)%GRID%rho_tor_norm)
643 nion_cs =
SIZE(coresources_iter%SOURCE(insource_imp)%PROFILES_1D(1)%ion)
644 IF (nion_cs.NE.nion)
THEN
645 write(*,*)
'warning different number on the ions between coreprofiles and coresource'
651 IF (coresources_iter%SOURCE(insource_imp)%PROFILES_1D(1)%ion(iion_cs)%multiple_states_flag.EQ.1)
THEN
653 write(*,*)
'nimp_cs=',nimp_cs
657 IF (nimp_cs.NE.nimp)
THEN
658 write(*,*)
'warning different number on the impurity between coresource and coresource'
661 ALLOCATE (nzimp_cs(nion_cs))
662 ALLOCATE (coresources_new%source(insource_imp)%profiles_1d(1)%electrons%energy(nrho_sr(insource_imp)))
663 coresources_new%source(insource_imp)%profiles_1d(1)%electrons%energy = 0.0_r8
672 IF (coreprofiles_iter%profiles_1d(1)%ion(iion)%multiple_states_flag.EQ.1)
THEN
675 ALLOCATE (nz1(nrho,nzimp2))
676 ALLOCATE (nzm1(nrho,nzimp2))
677 ALLOCATE (dnz1(nrho,nzimp2))
678 ALLOCATE (flux(nrho,nzimp2))
679 ALLOCATE (flux_inter(nrho,nzimp2))
680 ALLOCATE (imp_radiation(nrho,nzimp2))
681 ALLOCATE (nz_bnd(3,nzimp2))
682 ALLOCATE (nz_bnd_type(nzimp2))
683 ALLOCATE (nzsource(nrho,nzimp2))
684 ALLOCATE (diff(nrho,nzimp2))
685 ALLOCATE (vcon(nrho,nzimp2))
686 ALLOCATE (total_rad_int(nrho,nzimp2))
694 imp_radiation = 0.0_r8
701 ALLOCATE (lin_rad1(nrho,nzimp2))
702 ALLOCATE (brem_rad1(nrho,nzimp2))
703 ALLOCATE (jon_en1(nrho,nzimp2))
704 ALLOCATE (rec_los1(nrho,nzimp2))
712 zn(iion) = coreprofiles_old%profiles_1d(1)%ion(iion)%element(1)%Z_N
713 am(iion) = coreprofiles_old%profiles_1d(1)%ion(iion)%element(1)%a
717 DO izimp = 1, nzimp(iion)
718 nz1(:,izimp+1) = coreprofiles_iter%profiles_1d(1)%ion(iion)%state(izimp)%density(:)
719 nzm1(:,izimp+1) = coreprofiles_old%profiles_1d(1)%ion(iion)%state(izimp)%density(:)
726 DO iion_ct = 1, nion_ct
727 IF (coretransport_iter%MODEL(inmod_imp)%PROFILES_1D(1)%ion(iion_ct)%multiple_states_flag.EQ.1.AND.&
728 zn(iion).EQ.coretransport_iter%MODEL(inmod_imp)%PROFILES_1D(1)%ion(iion_ct)%element(1)%Z_N.AND.&
729 am(iion).EQ.coretransport_iter%MODEL(inmod_imp)%PROFILES_1D(1)%ion(iion_ct)%element(1)%a)
THEN
731 nzimp_ct(iion_ct)=
SIZE(coretransport_iter%MODEL(inmod_imp)%profiles_1d(1)%ion(iion_ct)%state)
733 write(*,*)nzimp_ct(iion_ct)
735 IF (nzimp_ct(iion_ct).NE.nzimp(iion))
THEN
736 write(*,*)
'coretransport is no for evrything ionization state'
739 DO izimp=1,nzimp_ct(iion_ct)
740 CALL l3interp(coretransport_iter%model(inmod_imp)%profiles_1d(1)%ion(iion_ct)%state(izimp)%particles%d,&
741 coretransport_iter%MODEL(inmod_imp)%PROFILES_1D(1)%GRID_D%rho_tor, &
742 nrho_tr, fun_out, rho, nrho)
743 diff(:,izimp+1) = fun_out
745 CALL l3interp(coretransport_iter%model(inmod_imp)%profiles_1d(1)%ion(iion_ct)%state(izimp)%particles%v, &
746 coretransport_iter%MODEL(inmod_imp)%PROFILES_1D(1)%GRID_D%rho_tor, &
747 nrho_tr, fun_out, rho, nrho)
748 vcon(:,izimp+1) = fun_out
750 coretransport_new%model(inmod_imp)%profiles_1d(1)%ion(iion_ct)%state(izimp)%particles%flux= 0.0_r8
759 IF (coresolver_iter%solver_1d(1)%equation(inequal)%primary_quantity%ion_index.EQ.iion.AND. &
760 coreprofiles_iter%profiles_1d(1)%ion(iion)%multiple_states_flag.EQ.1)
THEN
761 write(*,*)
'nequal=',nequal
763 izimp = coresolver_iter%solver_1d(1)%equation(inequal)%primary_quantity%state_index
764 nz_bnd_type(izimp+1) = coresolver_iter%solver_1d(1)%equation(inequal)%boundary_condition(1)%type%index
766 IF (
ASSOCIATED(coresolver_iter%solver_1d(1)%equation(nequal)%boundary_condition(1)%value))
THEN
767 nz_bnd(:,izimp+1) = coresolver_iter%solver_1d(1)%equation(inequal)%boundary_condition(1)%value(:)
794 DO iion_cs = 1, nion_cs
795 IF (coresources_iter%SOURCE(insource_imp)%PROFILES_1D(1)%ion(iion_cs)%multiple_states_flag.EQ.1.AND. &
796 zn(iion).EQ.coresources_iter%SOURCE(insource_imp)%PROFILES_1D(1)%ion(iion_cs)%element(1)%Z_N.AND.&
797 am(iion).EQ.coresources_iter%SOURCE(insource_imp)%PROFILES_1D(1)%ion(iion_cs)%element(1)%a)
THEN
798 nzimp_cs(iion_cs)=
SIZE(coresources_iter%SOURCE(insource_imp)%PROFILES_1D(1)%ion(iion_cs)%state)
799 write(*,*)nzimp_cs(iion_cs)
801 IF (nzimp_cs(iion_cs).NE.nzimp(iion))
THEN
802 write(*,*)
' WARNING coresource is no for evrything ionization state'
807 DO izimp=1,nzimp_cs(iion_cs)
808 IF (
associated(coresources_iter%SOURCE(insource_imp)%PROFILES_1D(1)%ion(iion_cs)%state(izimp)%particles))
THEN
810 CALL l3interp(coresources_iter%SOURCE(insource_imp)%PROFILES_1D(1)%ion(iion_cs)%state(izimp)%particles, &
811 coresources_iter%SOURCE(insource_imp)%PROFILES_1D(1)%GRID%rho_tor_norm, &
812 nrho_sr(insource_imp), fun_out, rho, nrho)
813 nzsource(:,izimp+1) = fun_out
815 nzsource(:,izimp+1)= 0.0_r8
827 max_nzimp= nzimp(iion)
828 write(*,*)
'max_nzimp=',max_nzimp,
'nzimp2=',nzimp2
833 CALL
impurity_one(te, ne, nz1, nzm1, vpr, vprm, r0, b0, b0prime, diff, flux, flux_inter, rho, &
834 vcon, nrho, nzimp2, nzsource, nz_bnd, nz_bnd_type, &
835 g3, imp_radiation, se_exp, max_nzimp,amix,tau,solver_type, &
836 amns_ei(:,iion), amns_rc(:,iion), amns_lr(:,iion), amns_br(:,iion), &
837 amns_eip(:,iion), lin_rad1,brem_rad1,jon_en1,rec_los1, &
838 control_double, control_integer)
844 ALLOCATE (lin_rad(nrho))
845 ALLOCATE (brem_rad(nrho))
846 ALLOCATE (jon_en(nrho))
847 ALLOCATE (rec_los(nrho))
852 lin_rad(irho) = 0.0_r8
853 brem_rad(irho) = 0.0_r8
854 jon_en(irho) = 0.0_r8
855 rec_los(irho) = 0.0_r8
858 DO izimp = 1,nzimp(iion)
859 IF (nz1(nrho,izimp+1).LE.1.0d-200) nz1(nrho,izimp+1) = 0._r8
863 write (*,*)
'irena after ti'
867 DO izimp=1,nzimp(iion)
868 qrad(irho) = qrad(irho) + imp_radiation(irho,izimp+1)
870 coreprofiles_new%profiles_1d(1)%ion(iion)%state(izimp)%density(irho) = nz1(irho,izimp+1)
871 coreprofiles_new%profiles_1d(1)%ion(iion)%state(izimp)%Z_MIN = izimp
872 coreprofiles_new%profiles_1d(1)%ion(iion)%state(izimp)%Z_MAX = izimp
873 coreprofiles_new%profiles_1d(1)%ion(iion)%state(izimp)%Z_AVERAGE = izimp
874 coreprofiles_new%profiles_1d(1)%ion(iion)%state(izimp)%Z_SQUARE_AVERAGE = izimp**2
877 lin_rad(irho) = lin_rad(irho) + lin_rad1(irho,izimp+1)
878 brem_rad(irho) = brem_rad(irho) + brem_rad1(irho,izimp+1)
882 CALL l3interp(-qrad,rho, nrho, &
883 coresources_new%source(insource_imp)%profiles_1d(1)%electrons%energy,&
884 coresources_new%source(insource_imp)%PROFILES_1D(1)%GRID%rho_tor_norm, nrho_sr(insource_imp))
890 DO iion_lin = 1, nion_lin
891 write(*,*)
'NION_LIN=',nion_lin
892 IF (coreradiation_new%process(inproces_lin)%profiles_1d(1)%ion(iion_lin)%multiple_states_flag.EQ.1.AND. &
893 zn(iion).EQ.coreradiation_new%process(inproces_lin)%PROFILES_1D(1)%ion(iion_lin)%element(1)%Z_N.AND.&
894 am(iion).EQ.coreradiation_new%process(inproces_lin)%PROFILES_1D(1)%ion(iion_lin)%element(1)%a)
THEN
895 write(*,*)
'in radiation'
896 nzimp_lin(iion_lin)=
SIZE(coreradiation_new%process(inproces_lin)%PROFILES_1D(1)%ion(iion_lin)%state)
897 write(*,*)
'NZIMP_LIN(IION_LIN) = ',nzimp_lin(iion_lin)
899 IF (nzimp_lin(iion_lin).NE.nzimp(iion))
THEN
900 write(*,*)
' WARNING coresource is no for evrything ionization state'
905 CALL l3interp(-lin_rad,rho, nrho, &
906 coreradiation_new%process(inproces_lin)%profiles_1d(1)%ion(nimp_lin)%emissivity,&
907 coreradiation_new%process(inproces_lin)%PROFILES_1D(1)%GRID%rho_tor_norm, nrho_lin(inproces_lin))
909 DO izimp=1,nzimp(iion)
910 CALL l3interp(-lin_rad1(:,izimp+1),rho, nrho, &
911 coreradiation_new%process(inproces_lin)%profiles_1d(1)%ion(nimp_lin)%state(izimp)%emissivity,&
912 coreradiation_new%process(inproces_lin)%PROFILES_1D(1)%GRID%rho_tor_norm, nrho_lin(inproces_lin))
915 DO izimp=1,nzimp(iion)
916 total_rad_int(1,izimp)=rho(1)* lin_rad1(1,izimp)
918 total_rad_int(irho,izimp)= total_rad_int(irho-1,izimp)+ &
919 (vol(irho)-vol(irho-1))*0.5_r8 *(lin_rad1(irho,izimp)+ lin_rad1(irho-1,izimp))
923 DO izimp=1,nzimp(iion)
924 CALL l3interp(-total_rad_int(:,izimp+1),rho, nrho, &
925 coreradiation_new%process(inproces_lin)%profiles_1d(1)%ion(nimp_lin)%state(izimp)%power_inside, &
926 coreradiation_new%process(inproces_lin)%PROFILES_1D(1)%GRID%rho_tor_norm, nrho_lin(inproces_lin))
931 DO izimp=1,nzimp(iion)
932 coreradiation_new%process(inproces_lin)%profiles_1d(1)%ion(nimp_lin)%power_inside= &
933 coreradiation_new%process(inproces_lin)%profiles_1d(1)%ion(nimp_lin)%power_inside + total_rad_int(:,izimp)
941 DO iion_brem = 1, nion_brem
942 write(*,*)
'NION_BREM=',nion_brem
943 IF (coreradiation_new%process(inproces_brem)%profiles_1d(1)%ion(iion_brem)%multiple_states_flag.EQ.1.AND. &
944 zn(iion).EQ.coreradiation_new%process(inproces_brem)%PROFILES_1D(1)%ion(iion_brem)%element(1)%Z_N.AND.&
945 am(iion).EQ.coreradiation_new%process(inproces_brem)%PROFILES_1D(1)%ion(iion_brem)%element(1)%a)
THEN
946 write(*,*)
'in brem radiation'
947 nzimp_brem(iion_brem)=
SIZE(coreradiation_new%process(inproces_brem)%PROFILES_1D(1)%ion(iion_brem)%state)
948 write(*,*)
'NZIMP_BREM(IION_BREM) = ',nzimp_brem(iion_brem)
950 IF (nzimp_brem(iion_brem).NE.nzimp(iion))
THEN
951 write(*,*)
' WARNING coresource is no for evrything ionization state'
956 CALL l3interp(-brem_rad,rho, nrho, &
957 coreradiation_new%process(inproces_brem)%profiles_1d(1)%ion(nimp_brem)%emissivity,&
958 coreradiation_new%process(inproces_brem)%PROFILES_1D(1)%GRID%rho_tor_norm, nrho_brem(inproces_brem))
960 DO izimp=1,nzimp(iion)
961 CALL l3interp(-brem_rad1(:,izimp+1),rho, nrho, &
962 coreradiation_new%process(inproces_brem)%profiles_1d(1)%ion(nimp_brem)%state(izimp)%emissivity,&
963 coreradiation_new%process(inproces_brem)%PROFILES_1D(1)%GRID%rho_tor_norm, nrho_brem(inproces_brem))
967 DO izimp=1,nzimp(iion)
968 total_rad_int(1,izimp)=rho(1)* brem_rad1(1,izimp)
970 total_rad_int(irho,izimp)= total_rad_int(irho-1,izimp)+ &
971 (vol(irho)-vol(irho-1))*0.5_r8 *(brem_rad1(irho,izimp)+ brem_rad1(irho-1,izimp))
976 DO izimp=1,nzimp(iion)
977 CALL l3interp(-total_rad_int(:,izimp+1),rho, nrho, &
978 coreradiation_new%process(inproces_brem)%profiles_1d(1)%ion(nimp_brem)%state(izimp)%power_inside, &
979 coreradiation_new%process(inproces_brem)%PROFILES_1D(1)%GRID%rho_tor_norm, nrho_brem(inproces_brem))
984 DO izimp=1,nzimp(iion)
985 coreradiation_new%process(inproces_brem)%profiles_1d(1)%ion(nimp_brem)%power_inside= &
986 coreradiation_new%process(inproces_brem)%profiles_1d(1)%ion(nimp_brem)%power_inside + total_rad_int(:,izimp)
991 write (*,*)
'before write coretransp' , iion
993 DO izimp=1,nzimp(iion)
994 ALLOCATE (coretransport_new%model(inmod_imp)%profiles_1d(1)%ion(nimp_ct)%state(izimp)%particles%flux(irho))
995 coretransport_new%model(inmod_imp)%profiles_1d(1)%ion(nimp_ct)%state(izimp)%particles%flux(irho) = 0.0_r8
999 DO izimp=1,nzimp(iion)
1000 IF (zn(iion).EQ.coretransport_new%MODEL(inmod_imp)%PROFILES_1D(1)%ion(nimp_ct)%element(1)%Z_N.AND.&
1001 am(iion).EQ.coretransport_new%MODEL(inmod_imp)%PROFILES_1D(1)%ion(nimp_ct)%element(1)%a)
THEN
1003 CALL l3interp(flux(:,izimp+1),rho, nrho, &
1005 coretransport_iter%MODEL(inmod_imp)%PROFILES_1D(1)%GRID_D%rho_tor_norm, nrho_tr)
1006 coretransport_new%model(inmod_imp)%profiles_1d(1)%ion(nimp_ct)%state(izimp)%particles%flux(:) = fun_out_tr(:)
1020 DEALLOCATE (flux_inter)
1021 DEALLOCATE (imp_radiation)
1023 DEALLOCATE (nz_bnd_type)
1024 DEALLOCATE (nzsource)
1030 DEALLOCATE (lin_rad1)
1031 DEALLOCATE (brem_rad1)
1032 DEALLOCATE (jon_en1)
1033 DEALLOCATE (rec_los1)
1035 DEALLOCATE(total_rad_int)
1038 DEALLOCATE (lin_rad)
1039 DEALLOCATE (brem_rad)
1041 DEALLOCATE (rec_los)
1047 WRITE(*,*)
'END OF IMPURITY',iion
1052 DEALLOCATE (nrho_tr)
1053 DEALLOCATE (nrho_sr)
1061 DEALLOCATE (fun_out)
1062 DEALLOCATE (fun_out_tr)
1071 WRITE (*,*)
'IMPURITY finished <==========='
1076 entry impurity_finish
1078 DO iimp = 1,
SIZE(amns_ei, dim=2)
1079 DO izimp = 0,
SIZE(amns_ei, dim=1)-1
1081 CALL imas_amns_finish_table(amns_ei(izimp, iimp))
1085 DO iimp = 1,
SIZE(amns_rc, dim=2)
1086 DO izimp = 0,
SIZE(amns_rc, dim=1)-1
1088 CALL imas_amns_finish_table(amns_rc(izimp, iimp))
1092 DO iimp = 1,
SIZE(amns_eip, dim=2)
1093 DO izimp = 0,
SIZE(amns_eip, dim=1)-1
1095 CALL imas_amns_finish_table(amns_eip(izimp, iimp))
1099 DO iimp = 1,
SIZE(amns_lr, dim=2)
1100 DO izimp = 0,
SIZE(amns_lr, dim=1)-1
1102 CALL imas_amns_finish_table(amns_lr(izimp, iimp))
1106 DO iimp = 1,
SIZE(amns_br, dim=2)
1107 DO izimp = 0,
SIZE(amns_br, dim=1)-1
1109 CALL imas_amns_finish_table(amns_br(izimp, iimp))
1114 CALL imas_amns_finish(amns)
1120 DEALLOCATE(amns_eip)
1136 SUBROUTINE impurity_one (TE, NE, NZ1, NZM1, VPR, VPRM ,R0 ,BT, BTPRIME ,DIFF,FLUX, FLUX_INTER, RHO,&
1137 vconv, nrho, simp2, nsource, nz_bnd, nz_bnd_type, &
1138 g1,imp_radiation, se_exp, max_nzimp,amix,tau,solver_type, &
1139 amns_ei,amns_rc,amns_lr,amns_br, &
1140 amns_eip,lin_rad1,brem_rad1,jon_en1,rec_los1, &
1141 control_double, control_integer)
1158 use ids_types, r8 => ids_real, itm_i4 => ids_int
1161 use imas_constants_module
1178 INTEGER :: irho, nrho
1179 INTEGER :: iimp, simp2,simp,isimp
1180 INTEGER :: izimp, nzimp
1181 INTEGER :: nz_bnd_type(simp2)
1182 INTEGER :: max_nzimp
1184 REAL (R8) :: bt, btm, btprime
1186 REAL (R8) :: rho(nrho)
1187 real(r8) :: vpr(nrho)
1188 real(r8) :: vprm(nrho)
1189 REAL (R8) :: g1(nrho)
1190 REAL (R8) :: nz1(nrho,simp2)
1191 REAL (R8) :: nzm1(nrho,simp2)
1192 real(r8) :: flux(nrho,simp2)
1193 real(r8) :: flux_inter(nrho,simp2)
1194 REAL (R8) :: ne(nrho),te(nrho)
1195 REAL (R8) :: diff(nrho,simp2)
1196 REAL (R8) :: vconv(nrho,simp2)
1197 REAL (R8) :: nsource(nrho,simp2)
1198 REAL (R8) :: nz_bnd(3,simp2)
1201 REAL (R8) :: alfa(nrho,simp2)
1202 REAL (R8) :: beta(nrho,simp2)
1203 REAL (R8) :: gama(nrho,simp2)
1204 REAL (R8) :: slin(nrho,simp2)
1205 REAL (R8) :: imp_radiation(nrho,simp2)
1206 REAL (R8) :: potential(nrho,1:max_nzimp+2)
1207 REAL (R8) :: amix, tau
1210 REAL (R8) :: lin_rad1(nrho,simp2)
1211 REAL (R8) :: brem_rad1(nrho,simp2)
1212 REAL (R8) :: jon_en1(nrho,simp2)
1213 REAL (R8) :: rec_los1(nrho,simp2)
1215 REAL (R8) :: se_exp(nrho)
1220 INTEGER :: solver_type
1221 REAL (R8) :: y(nrho)
1222 REAL (R8) :: ym(nrho)
1223 REAL (R8) :: dy(nrho)
1224 REAL (R8) :: a(nrho)
1225 REAL (R8) :: b(nrho)
1226 REAL (R8) :: c(nrho)
1227 REAL (R8) :: d(nrho)
1228 REAL (R8) :: e(nrho)
1229 REAL (R8) :: f(nrho)
1230 REAL (R8) :: g(nrho)
1232 REAL (R8) :: v(2), u(2), w(2)
1234 REAL (R8) :: fun1(nrho), intfun1(nrho)
1237 INTEGER,
INTENT(IN) :: control_integer(2)
1238 REAL (R8),
INTENT(IN) :: control_double(5)
1240 REAL (R8) :: dnz(nrho)
1245 REAL :: densityfluxin(nrho)
1246 REAL :: fluxin, fluxout
1254 type (amns_handle_rx_type
) :: amns_ei(1:max_nzimp+1), amns_rc(1:max_nzimp+1),&
1255 amns_lr(1:max_nzimp+1), amns_br(1:max_nzimp+1),amns_eip(1:max_nzimp+1)
1271 amix = control_double(2)
1272 tau = control_double(1)
1273 solver_type = control_integer(1)
1293 write(*,*)
'on impurity one',
'nzimp=',nzimp
1296 if(izimp .ne. nzimp+1)
then
1297 call imas_amns_rx(amns_ei(izimp),alfa(:,izimp),te,ne)
1298 write(*,*)
'alfa(nrho,izimp)=',alfa(nrho,izimp)
1299 call imas_amns_rx(amns_lr(izimp),slin(:,izimp),te,ne)
1300 call imas_amns_rx(amns_eip(izimp+1),potential(:,izimp),te,ne)
1305 if(izimp .ne. 1)
then
1306 call imas_amns_rx(amns_rc(izimp),beta(:,izimp),te,ne)
1307 call imas_amns_rx(amns_br(izimp),gama(:,izimp),te,ne)
1328 imp_loop1:
DO isimp=2,simp+1
1352 rho_loop3:
DO irho=1,nrho
1354 y(irho) = nz1(irho,isimp)
1355 ym(irho) = nzm1(irho,isimp)
1357 b(irho) = vprm(irho)
1359 d(irho) = vpr(irho)*g1(irho)*diff(irho,isimp)
1360 e(irho) = vpr(irho)*g1(irho)*vconv(irho,isimp) &
1361 - btprime/2.d0/bt*rho(irho)*vpr(irho)
1362 f(irho) = vpr(irho)*nsource(irho,isimp)+vpr(irho)*( nz1(irho,isimp-1)*ne(irho)*alfa(irho,isimp-1) &
1363 + nz1(irho,isimp+1)*ne(irho)*beta(irho,isimp+1) )
1364 g(irho) = vpr(irho)*(ne(irho)*alfa(irho,isimp) + ne(irho)*beta(irho,isimp) )
1365 IF (irho.eq.nrho)
then
1380 IF(diff(1,isimp).GT.0.d0)
THEN
1381 v(1) = -diff(1,isimp)
1382 u(1) = vconv(1,isimp)
1394 IF(nz_bnd_type(isimp).EQ.1)
THEN
1397 w(2) = nz_bnd(1,isimp)
1401 IF(nz_bnd_type(isimp).EQ.2)
THEN
1404 w(2) = nz_bnd(1,isimp)
1408 IF(nz_bnd_type(isimp).EQ.3)
THEN
1409 v(2) = nz_bnd(1,isimp)
1415 IF(nz_bnd_type(isimp).EQ.4)
THEN
1416 v(2) = -g1(nrho)*diff(nrho,isimp)*vpr(nrho)
1417 u(2) = g1(nrho)*vconv(nrho,isimp)*vpr(nrho)
1418 w(2) = nz_bnd(1,isimp)
1422 IF(nz_bnd_type(isimp).EQ.5)
THEN
1423 v(2) = nz_bnd(1,isimp)
1424 u(2) = nz_bnd(2,isimp)
1425 w(2) = nz_bnd(3,isimp)
1430 IF(nz_bnd_type(isimp).EQ.0)
THEN
1436 rho_loop4:
DO irho=1,nrho
1455 solver%TYPE = solver_type
1456 solver%EQ_FLAG(ndim) = flag
1462 rho_loop5:
DO irho=1,nrho
1464 solver%RHO(irho) = rho(irho)
1465 solver%Y(ndim,irho) = y(irho)
1466 solver%DY(ndim,irho) = dy(irho)
1467 solver%YM(ndim,irho) = ym(irho)
1468 solver%A(ndim,irho) = a(irho)
1469 solver%B(ndim,irho) = b(irho)
1470 solver%C(ndim,irho) = c(irho)
1471 solver%D(ndim,irho) = d(irho)
1472 solver%E(ndim,irho) = e(irho)
1473 solver%F(ndim,irho) = f(irho)
1474 solver%G(ndim,irho) = g(irho)
1481 solver%V(ndim,1) = v(1)
1482 solver%U(ndim,1) = u(1)
1483 solver%W(ndim,1) = w(1)
1484 solver%V(ndim,2) = v(2)
1485 solver%U(ndim,2) = u(2)
1486 solver%W(ndim,2) = w(2)
1494 rho_loop6:
DO irho=1,nrho
1496 y(irho) = solver%Y(ndim,irho)
1497 dy(irho) = solver%DY(ndim,irho)
1502 pi=imas_constants%pi
1503 ev=imas_constants%ev
1507 rho_loop7:
DO irho=1,nrho
1509 nzm1(irho,isimp) = nz1(irho,isimp)
1510 nz1(irho,isimp) = y(irho)
1511 dnz(irho) = dy(irho)
1512 IF (rho(irho).NE.0.0d0)
THEN
1513 fun1(irho) = 1.d0/rho(irho)*(vpr(irho)*nsource(irho,isimp) &
1514 + vprm(irho)*nzm1(irho,isimp)/tau &
1515 - nz1(irho,isimp)*vpr(irho)*(1.d0/tau))
1516 ELSE IF (rho(irho).EQ.0.0d0)
THEN
1517 fun1(irho) = 4.d0*pi**2*r0* (nsource(irho,isimp) &
1518 + nzm1(irho,isimp)/tau - nz1(irho,isimp)*(1.d0/tau))
1528 rho_loop8:
DO irho=1,nrho
1529 flux_inter(irho,isimp) = intfun1(irho) &
1530 + btprime/2.d0/bt*rho(irho)*vpr(irho)*y(irho)
1533 flux(irho,isimp) = vpr(irho)*g1(irho)* &
1534 ( y(irho)*vconv(irho,isimp) - dy(irho)*diff(irho,isimp) )
1542 loop_change:
DO isimp=2,simp+1
1545 nzm1(irho,isimp)=nz1(irho,isimp)
1555 imp_loop21:
DO isimp=simp+1, 2, -1
1578 rho_loop23:
DO irho=1,nrho
1580 y(irho) = nz1(irho,isimp)
1581 ym(irho) = nzm1(irho,isimp)
1583 b(irho) = vprm(irho)
1585 d(irho) = vpr(irho)*g1(irho)*diff(irho,isimp)
1586 e(irho) = vpr(irho)*g1(irho)*vconv(irho,isimp) &
1587 - btprime/2.d0/bt*rho(irho)*vpr(irho)
1588 f(irho) = vpr(irho)*nsource(irho,isimp)+vpr(irho)*(nz1(irho,isimp-1)*ne(irho)*alfa(irho,isimp-1) &
1589 + nz1(irho,isimp+1)*ne(irho)*beta(irho,isimp+1) )
1590 g(irho) = vpr(irho)*(ne(irho)*alfa(irho,isimp) + ne(irho)*beta(irho,isimp) )
1604 IF(diff(1,isimp).GT.0.d0)
THEN
1605 v(1) = -diff(1,isimp)
1606 u(1) = vconv(1,isimp)
1618 IF(nz_bnd_type(isimp).EQ.1)
THEN
1621 w(2) = nz_bnd(1,isimp)
1625 IF(nz_bnd_type(isimp).EQ.2)
THEN
1628 w(2) = nz_bnd(1,isimp)
1632 IF(nz_bnd_type(isimp).EQ.3)
THEN
1633 v(2) = nz_bnd(1,isimp)
1639 IF(nz_bnd_type(isimp).EQ.4)
THEN
1640 v(2) = -g1(nrho)*diff(nrho,isimp)*vpr(nrho)
1641 u(2) = g1(nrho)*vconv(nrho,isimp)*vpr(nrho)
1642 w(2) = nz_bnd(1,isimp)
1646 IF(nz_bnd_type(isimp).EQ.5)
THEN
1647 v(2) = nz_bnd(1,isimp)
1648 u(2) = nz_bnd(2,isimp)
1649 w(2) = nz_bnd(3,isimp)
1653 IF(nz_bnd_type(isimp).EQ.0)
THEN
1659 rho_loop24:
DO irho=1,nrho
1676 solver%TYPE = solver_type
1677 solver%EQ_FLAG(ndim) = flag
1682 rho_loop25:
DO irho=1,nrho
1684 solver%RHO(irho) = rho(irho)
1685 solver%Y(ndim,irho) = y(irho)
1686 solver%DY(ndim,irho) = dy(irho)
1687 solver%YM(ndim,irho) = ym(irho)
1688 solver%A(ndim,irho) = a(irho)
1689 solver%B(ndim,irho) = b(irho)
1690 solver%C(ndim,irho) = c(irho)
1691 solver%D(ndim,irho) = d(irho)
1692 solver%E(ndim,irho) = e(irho)
1693 solver%F(ndim,irho) = f(irho)
1694 solver%G(ndim,irho) = g(irho)
1699 solver%V(ndim,1) = v(1)
1700 solver%U(ndim,1) = u(1)
1701 solver%W(ndim,1) = w(1)
1702 solver%V(ndim,2) = v(2)
1703 solver%U(ndim,2) = u(2)
1704 solver%W(ndim,2) = w(2)
1711 rho_loop26:
DO irho=1,nrho
1713 y(irho) = solver%Y(ndim,irho)
1714 dy(irho) = solver%DY(ndim,irho)
1719 rho_loop27:
DO irho=1,nrho
1721 nzm1(irho,isimp) = nz1(irho,isimp)
1722 nz1(irho,isimp) = y(irho)
1723 dnz(irho) = dy(irho)
1724 IF (rho(irho).NE.0.0d0)
THEN
1725 fun1(irho) = 1.d0/rho(irho)*(vpr(irho)*nsource(irho,isimp) &
1726 + vprm(irho)*nzm1(irho,isimp)/tau &
1727 - nz1(irho,isimp)*vpr(irho)*(1.d0/tau))
1728 ELSE IF (rho(irho).EQ.0.0d0)
THEN
1729 fun1(irho) = 4.0d0*pi**2*r0*(nsource(irho,isimp) &
1730 + nzm1(irho,isimp)/tau &
1731 - nz1(irho,isimp)*(1.d0/tau))
1741 rho_loop28:
DO irho=1,nrho
1744 flux_inter(irho,isimp) = intfun1(irho) &
1745 + btprime/2.d0/bt*rho(irho)*vpr(irho)*y(irho)
1748 flux(irho,isimp) = vpr(irho)*g1(irho)* &
1749 ( y(irho)*vconv(irho,isimp) - dy(irho)*diff(irho,isimp) )
1761 densityfluxin(irho) = alfa(irho,1)*vpr(irho)*nz1(irho,1)*ne(irho)-beta(irho,2)*vpr(irho)*nz1(irho,2)*ne(irho)
1766 fluxin =
calkatrapez( densityfluxin, nrho-1, rho(nrho)-rho(nrho-1) )
1770 fluxout = fluxout - vpr(nrho)*g1(nrho)*diff(nrho,isimp)*(nz1(nrho,isimp)-nz1(nrho-1,isimp))/(rho(nrho)-rho(nrho-1))
1780 y(irho)=nz1(irho,isimp)
1782 IF (rho(irho).NE.0.0d0)
THEN
1783 fun1(irho) = 1.d0/rho(irho)*(vpr(irho)*nsource(irho,isimp) &
1784 +vprm(irho)*nzm1(irho,isimp)/tau &
1785 -nz1(irho,isimp)*vpr(irho)*(1.d0/tau))
1786 ELSE IF (rho(irho).EQ.0.0d0)
THEN
1787 fun1(irho) = 4.d0*pi**2*r0*(nsource(irho,isimp) &
1788 +nzm1(irho,isimp)/tau &
1789 -nz1(irho,isimp)*(1.d0/tau))
1801 flux_inter(irho,isimp) = intfun1(irho) &
1802 + btprime/2.d0/bt*rho(irho)*vpr(irho)*y(irho)
1805 flux(irho,isimp) = vpr(irho)*g1(irho)* &
1806 ( y(irho)*vconv(irho,isimp) - dy(irho)*diff(irho,isimp) )
1821 lin_rad1(irho,isimp) = ne(irho)*nz1(irho,isimp)*slin(irho,isimp)
1822 brem_rad1(irho,isimp) = ne(irho)*nz1(irho,isimp)*gama(irho,isimp)
1823 jon_en1(irho,isimp) = ne(irho)*nz1(irho,isimp)*potential(irho,isimp)*alfa(irho,isimp)
1824 rec_los1(irho,isimp) = ne(irho)*nz1(irho,isimp)*potential(irho,isimp-1)*beta(irho,isimp)
1825 imp_radiation(irho,isimp) = lin_rad1(irho,isimp) + brem_rad1(irho,isimp) + jon_en1(irho,isimp)*ev &
1826 - rec_los1(irho,isimp)*ev
1833 se_exp(irho) = se_exp(irho) &
1834 + nz1(irho,isimp)*ne(irho)*alfa(irho,isimp) - nz1(irho,isimp)*ne(irho)*beta(irho,isimp)
1836 se_exp(irho) = se_exp(irho) - nz1(irho,simp+1)*ne(irho)*beta(irho,simp+1)
1855 REAL,
DIMENSION(n+1) :: wartosc
1871 SUBROUTINE integr2(N,X,Y,INTY) !AF 11.Oct.2011 - assumes that Y is zero f0r X.eq.0, just as INTEGR does too...
1877 use ids_types, r8 => ids_real, itm_i4 => ids_int
1884 REAL (R8) :: x(n), &
1888 inty(1)=y(1)*x(1)/2.e0_r8
1890 inty(i)=inty(i-1)+(y(i-1)+y(i))*(x(i)-x(i-1))/2.e0_r8
subroutine solution_interface(SOLVER, ifail)
The SOLVER_IO type includes variables that are used input and output to the nuermical solver of the t...
This module contains routines for allocation/deallocation if IDSs used in ETS.
REAL function calkatrapez(wartosc, n, dx)
subroutine allocate_solver(NDIM, NRHO, SOLVER, ifail)
Allocate variables in the SOLVER object.
subroutine deriv_fun(N, X, Y, DY)
subroutine get_prof_composition(COREPROFILES, COMPOSITION)
This routine detects composition of CORE_PROFILES IDS.
This module contains routines for detecting plasma composition in IDSs.
subroutine integr2(N, X, Y, INTY)
subroutine integr_fun(N, X, Y, INTY)
subroutine allocate_coreradiation_ids(NTIME, NPROCES, NRHO, COMPOSITION, CORERADIATION)
The module defines derived types used by ETS6-CoreActor and subroutines to allocate and deallocate in...
The module declares types of variables used by numerical solvers.
subroutine impurity_imas(EQUILIBRIUM_ITER, CORETRANSPORT_ITER, CORETRANSPORT_NEW, COREPROFILES_OLD, COREPROFILES_ITER, COREPROFILES_NEW, CORESOURCES_ITER, CORESOURCES_NEW, CORESOLVER_ITER, CORERADIATION_ITER, CORERADIATION_NEW, CONTROL_INTEGER, CONTROL_DOUBLE)
subroutine deallocate_solver(SOLVER, ifail)
Dellocate variables in the SOLVER object.
subroutine impurity_one(TE, NE, NZ1, NZM1, VPR, VPRM, R0, BT, BTPRIME, DIFF, FLUX, FLUX_INTER, RHO, VCONV, NRHO, SIMP2, NSOURCE, NZ_BND, NZ_BND_TYPE, G1, IMP_RADIATION, SE_EXP, MAX_NZIMP, AMIX, TAU, SOLVER_TYPE, amns_ei, amns_rc, amns_lr, amns_br, amns_eip, LIN_RAD1, BREM_RAD1, JON_EN1, REC_LOS1, CONTROL_DOUBLE, CONTROL_INTEGER)