ETS  \$Id: Doxyfile 2162 2020-02-26 14:16:09Z g2dpc $
 All Classes Files Functions Variables Pages
fc2k_control_amix.f90
Go to the documentation of this file.
1 
2 ! + + + + + + + + + + + + + + + + + + + + + + + + + + + +
3 ! + + + + + + + + + + + + + + + + + + + + + + + + + + + +
4 
5  !-------------------------------------------------------!
6  ! This routine tunes the mixing factors !
7  ! depending on the convergence !
8  !-------------------------------------------------------!
9  ! Source: --- !
10  ! Developers: D.Kalupin !
11  ! Kontacts: Denis.Kalupin@efda.org !
12  ! !
13  ! Comments: created for ETS !
14  ! !
15  !-------------------------------------------------------!
16 
17  SUBROUTINE fc2k_control_amix(CONV, CONV_ITER, TOLERANCE, & !inputs
18  amix, amix_tr, amix_src, & !inputs/outputs
19  control) !input
20 
21  USE itm_constants
22 
23 
24  IMPLICIT NONE
25 
26 
27 ! +++ i/o parameters:
28  REAL (R8), INTENT (IN) :: conv
29  REAL (R8), INTENT (IN) :: conv_iter
30  REAL (R8), INTENT (IN) :: tolerance
31 
32  REAL (R8), INTENT (INOUT) :: amix
33  REAL (R8), INTENT (INOUT) :: amix_tr
34  REAL (R8), INTENT (INOUT) :: amix_src
35 
36  REAL (R8) :: p
37 
38  INTEGER, INTENT (IN) :: control(3)
39 
40 !+++++++++++++++++++++++++++++++++++++++++
41  p = 2.0_r8
42  IF (conv.LT.tolerance * 100._r8) &
43  p = 1.0_r8
44  IF (conv.LT.tolerance * 10._r8) &
45  p = 0.5_r8
46 
47 
48 ! +++ adjustment:
49  IF (conv.GT.conv_iter) THEN
50  IF (control(1).GT.0) &
51  amix = amix * (conv_iter / conv) **p
52  IF (control(2).GT.0) &
53  amix_tr = amix_tr * (conv_iter / conv) **p
54  IF (control(3).GT.0) &
55  amix_src = amix_src * (conv_iter / conv) **p
56  END IF
57 
58 
59  IF (conv.LT.conv_iter) THEN
60  IF (control(1).GT.0) &
61  amix = amix * 1.05_r8 **p
62  IF (control(2).GT.0) &
63  amix_tr = amix_tr * 1.05_r8 **p
64  IF (control(3).GT.0) &
65  amix_src = amix_src * 1.05_r8 **p
66  END IF
67 
68 
69 ! +++ check that values do not exceed some limits:
70  IF (control(1).GT.0) &
71  amix = max(tolerance * 100._r8, amix)
72  IF (control(2).GT.0) &
73  amix_tr = max(tolerance * 100._r8, amix_tr)
74  IF (control(3).GT.0) &
75  amix_src = max(tolerance * 100._r8, amix_src)
76 
77  IF (control(2).GT.0.AND.control(1).GT.0) &
78  amix_tr = max(amix**0.5, amix_tr)
79  IF (control(3).GT.0.AND.control(1).GT.0) &
80  amix_src = max(amix**0.5, amix_src)
81 
82 
83  IF (control(1).GT.0) &
84  amix = min(1.0_r8, amix)
85  IF (control(2).GT.0) &
86  amix_tr = min(1.0_r8, amix_tr)
87  IF (control(3).GT.0) &
88  amix_src = min(1.0_r8, amix_src)
89 
90  IF (control(1).EQ.0) &
91  amix = 1.0_r8
92  IF (control(2).EQ.0) &
93  amix_tr = 1.0_r8
94  IF (control(3).EQ.0) &
95  amix_src = 1.0_r8
96 
97  RETURN
98 
99 
100  END SUBROUTINE fc2k_control_amix
101 
102 
103 
real(r8) function p(a, x, xr, xs, yr, ys, psi, psir, F_dia)
subroutine fc2k_control_amix(CONV, CONV_ITER, TOLERANCE, AMIX, AMIX_TR, AMIX_SRC, CONTROL)