ETS  \$Id: Doxyfile 2162 2020-02-26 14:16:09Z g2dpc $
All Classes Files Functions Variables Pages
ets_wrapper_helena.f90
Go to the documentation of this file.
1 ! + + + + + + + + + + + + + + + + + + + + + + + + + + + +
7 ! + + + + + + + + + + + + + + + + + + + + + + + + + + + +
9 
10  use euitm_schemas
11  implicit none
12 
13 contains
14 
15  subroutine helena_wrapper(euitm_equilibrium_in, euitm_equilibrium_out)
16 
17  use xml_file_reader
18  use write_structures
19  use itm_types
20  implicit none
21 
22  type (type_equilibrium), pointer :: euitm_equilibrium_in(:)
23  type (type_equilibrium), pointer :: euitm_equilibrium_out(:)
24  type (type_param), save :: code_parameters
25  REAL (R8) :: maxabs
26  logical, save :: first = .true.
27  integer, save :: ncall = 0
28  character*32 :: filename = 'EQ_######'
29 
30  interface
31  subroutine helena (euitm_equilibrium_in, euitm_equilibrium_out, in_path, code_parameters)
32  use euitm_schemas
33  IMPLICIT NONE
34  type (type_equilibrium), pointer :: euitm_equilibrium_in(:)
35  type (type_equilibrium), pointer :: euitm_equilibrium_out(:)
36  character(len = 132), optional :: in_path
37  type (type_param) :: code_parameters
38  end SUBROUTINE helena
39  end interface
40 
41  if(first) then
42  call fill_param(code_parameters, 'XML/helena.xml', '', 'XML/helena.xsd')
43  first=.false.
44  endif
45 
46  if(associated(euitm_equilibrium_in(1)%profiles_1d%jparallel)) then
47  maxabs = maxval(abs(euitm_equilibrium_in(1)%profiles_1d%jphi))
48  write(*,*) 'max( | jphi | ) = ', maxabs
49  if(maxabs .EQ. 0.0_r8) then
50  write(*,*) 'helena_wrapper copied jparallel to jphi [ERROR]'
51  if(.not.associated(euitm_equilibrium_in(1)%profiles_1d%jphi)) &
52  allocate(euitm_equilibrium_in(1)%profiles_1d%jphi(size(euitm_equilibrium_in(1)%profiles_1d%jparallel)))
53  euitm_equilibrium_in(1)%profiles_1d%jphi = euitm_equilibrium_in(1)%profiles_1d%jparallel ! -? ToDo
54  endif
55  endif
56  if(associated(euitm_equilibrium_in(1)%profiles_1d%psi)) then
57  write(*,*) 'helena_wrapper set psi_bound and psi_ax [ERROR]'
58  write(*,*) euitm_equilibrium_in(1)%global_param%psi_ax, euitm_equilibrium_in(1)%profiles_1d%psi(1)
59  write(*,*) euitm_equilibrium_in(1)%global_param%psi_bound, euitm_equilibrium_in(1)%profiles_1d%psi(size(euitm_equilibrium_in(1)%profiles_1d%psi))
60  euitm_equilibrium_in(1)%global_param%psi_ax = euitm_equilibrium_in(1)%profiles_1d%psi(1)
61  euitm_equilibrium_in(1)%global_param%psi_bound = &
62  euitm_equilibrium_in(1)%profiles_1d%psi(size(euitm_equilibrium_in(1)%profiles_1d%psi))
63  endif
64 
65 ! the following is experimental
66  call f_par_axis(size(euitm_equilibrium_in(1)%profiles_1d%rho_tor), &
67  euitm_equilibrium_in(1)%profiles_1d%rho_tor,euitm_equilibrium_in(1)%profiles_1d%pressure)
68 ! end of the experiment
69 
70 
71  write(filename(4:9),'(I6.6)') ncall
72  write(*,*) 'Writing EQUILIBRIUM ', trim(filename)//'.IN'
73  call open_write_file(1, trim(filename)//'.IN')
74  call write_cpo(euitm_equilibrium_in(1), 'equilibrium')
75  call close_write_file
76  write(*,*) 'associated(euitm_equilibrium_out) ', associated(euitm_equilibrium_out)
77  CALL helena(euitm_equilibrium_in, euitm_equilibrium_out, code_parameters=code_parameters)
78  write(*,*) 'Writing EQUILIBRIUM ', trim(filename)//'.OUT'
79  call open_write_file(1, trim(filename)//'.OUT')
80  call write_cpo(euitm_equilibrium_out(1), 'equilibrium')
81  call close_write_file
82  if(.not.associated(euitm_equilibrium_out(1)%profiles_1d%jparallel)) then
83  write(*,*) 'helena_wrapper copied jphi to jparallel [ERROR]'
84  allocate(euitm_equilibrium_out(1)%profiles_1d%jparallel(size(euitm_equilibrium_out(1)%profiles_1d%jphi)))
85  euitm_equilibrium_out(1)%profiles_1d%jparallel = euitm_equilibrium_out(1)%profiles_1d%jphi
86  else
87  maxabs = maxval(abs(euitm_equilibrium_out(1)%profiles_1d%jparallel))
88  write(*,*) 'max( | jparallel | ) = ', maxabs
89  if(maxabs .EQ. 0.0_r8) then
90  write(*,*) 'helena_wrapper copied jphi to jparallel [ERROR]'
91  euitm_equilibrium_out(1)%profiles_1d%jparallel = euitm_equilibrium_out(1)%profiles_1d%jphi
92  endif
93  endif
94 
95  ncall=ncall+1
96 
97  return
98 
99  end subroutine helena_wrapper
100 
101 end module ets_wrapper_helena
subroutine helena(equilibrium_in, equilibrium_out, in_path, code_parameters)
Definition: helena.f90:1
wrapper for HELENA
subroutine helena_wrapper(euitm_equilibrium_in, euitm_equilibrium_out)
subroutine f_par_axis(n, r, f)
This subroutine finds f(r_1=0) from f(r_2), f(r_3) d/dr f(r_1)=0.