GCC Code Coverage Report


Directory: ./
File: phys/cv3_inip.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 27 30 90.0%
Branches: 7 10 70.0%

Line Branch Exec Source
1 19998 SUBROUTINE cv3_inip()
2 ! *******************************************************************
3 ! * *
4 ! CV3_INIP Input = choice of mixing probability laws *
5 ! Output = normalized coefficients of the probability laws. *
6 ! * *
7 ! written by : Jean-Yves Grandpeix, 06/06/2006, 19.39.27 *
8 ! modified by : *
9 ! *******************************************************************
10 !
11 !----------------------------------------------
12 ! INPUT (from Common YOMCST2 in "YOMCST2.h") :
13 ! iflag_mix
14 ! gammas
15 ! alphas
16 ! betas
17 ! Fmax
18 ! scut
19 !
20 !----------------------------------------------
21 ! INPUT/OUTPUT (from and to Common YOMCST2 in "YOMCST2.h") :
22 ! qqa1
23 ! qqa2
24 !
25 !----------------------------------------------
26 ! OUTPUT (to Common YOMCST2 in "YOMCST2.h") :
27 ! Qcoef1max
28 ! Qcoef2max
29 !
30 !----------------------------------------------
31
32 USE print_control_mod, ONLY: prt_level, lunout
33 IMPLICIT NONE
34
35 include "YOMCST2.h"
36
37 !----------------------------------------------
38 ! Local variables :
39 CHARACTER (LEN=20) :: modname = 'cv3_inip'
40 CHARACTER (LEN=80) :: abort_message
41
42 REAL :: sumcoef
43 REAL :: sigma, aire, pdf, mu, df
44 REAL :: ff
45
46
47 ! -- Mixing probability distribution functions
48
49 REAL qcoef1, qcoef2, qff, qfff, qmix, rmix, qmix1, rmix1, qmix2, rmix2, f
50
51 qcoef1(f) = tanh(f/gammas)
52 qcoef2(f) = (tanh(f/gammas)+gammas*log(cosh((1.-f)/gammas)/cosh(f/gammas)))
53 qff(f) = max(min(f,1.), 0.)
54 qfff(f) = min(qff(f), scut)
55 qmix1(f) = (tanh((qff(f)-fmax)/gammas)+qcoef1max)/qcoef2max
56 rmix1(f) = (gammas*log(cosh((qff(f)-fmax)/gammas))+qff(f)*qcoef1max)/ &
57 qcoef2max
58 qmix2(f) = -log(1.-qfff(f))/scut
59 rmix2(f) = (qfff(f)+(1.-qff(f))*log(1.-qfff(f)))/scut
60 qmix(f) = qqa1*qmix1(f) + qqa2*qmix2(f)
61 rmix(f) = qqa1*rmix1(f) + qqa2*rmix2(f)
62
63 ! cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
64
65
66 ! ===========================================================================
67 ! READ IN PARAMETERS FOR THE MIXING DISTRIBUTION
68 ! AND PASS THESE THROUGH A COMMON BLOCK TO SUBROUTINE CONVECT etc.
69 ! (Written by V.T.J. Phillips, 20-30/Jan/99)
70 ! ===========================================================================
71
72 ! line 1: a flag (0 or 1) to decide whether P(F) = 1 or the general P(F)
73 ! is to be
74 ! used, followed by SCUT, which is the cut-off value of F in CONVECT
75 ! line 2: blank
76 ! line 3: the coefficients for the linear combination of P(F)s to
77 ! make the general P(F)
78 ! line 4: blank
79 ! line 5: gammas, Fmax for the cosh^2 component of P(F)
80 ! line 6: blank
81 ! line 7: alphas for the 1st irrational P(F)
82 ! line 8: blank
83 ! line 9: betas for the 2nd irrational P(F)
84
85
86 ! c$$$ open(57,file='parameter_mix.data')
87 ! c$$$
88 ! c$$$ read(57,*) iflag_mix, scut
89 ! c$$$ read(57,*)
90 ! c$$$ if(iflag_mix .gt. 0) then
91 ! c$$$ read(57,*) qqa1, qqa2
92 ! c$$$ read(57,*)
93 ! c$$$ read(57,*) gammas, Fmax
94 ! c$$$ read(57,*)
95 ! c$$$ read(57,*) alphas
96 ! c$$$ endif
97 ! c$$$ close(57)
98
99
100
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 IF (iflag_mix>0) THEN
101
102 ! -- Normalize Pdf weights
103
104 1 sumcoef = qqa1 + qqa2
105 1 qqa1 = qqa1/sumcoef
106 1 qqa2 = qqa2/sumcoef
107
108 1 qcoef1max = qcoef1(fmax)
109 1 qcoef2max = qcoef2(fmax)
110
111 1 sigma = 0.
112 1 aire = 0.0
113 1 pdf = 0.0
114 1 mu = 0.0
115 df = 0.0001
116
117 ! do ff = 0.0 + df, 1.0 - 2.*df, df
118 1 ff = df
119
2/2
✓ Branch 0 taken 9998 times.
✓ Branch 1 taken 1 times.
9999 DO WHILE (ff<=1.0-2.*df)
120 9998 pdf = (qmix(ff+df)-qmix(ff))*(1.-ff)/df
121 9998 aire = aire + (qmix(ff+df)-qmix(ff))*(1.-ff)
122 9998 mu = mu + pdf*ff*df
123
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9998 times.
9998 IF (prt_level>9) WRITE (lunout, *) pdf, qmix(ff), aire, ff
124 9998 ff = ff + df
125 END DO
126
127 ! do ff=0.0+df,1.0 - 2.*df,df
128 1 ff = df
129
2/2
✓ Branch 0 taken 9998 times.
✓ Branch 1 taken 1 times.
9999 DO WHILE (ff<=1.0-2.*df)
130 9998 pdf = (qmix(ff+df)-qmix(ff))*(1.-ff)/df
131 9998 sigma = sigma + pdf*(ff-mu)*(ff-mu)*df
132 9998 ff = ff + df
133 END DO
134 1 sigma = sqrt(sigma)
135
136
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 IF (abs(aire-1.0)>0.02) THEN
137 WRITE (lunout, *) 'WARNING:: AREA OF MIXING PDF IS::', aire
138 abort_message = ''
139 CALL abort_physic(modname, abort_message, 1)
140 ELSE
141 1 PRINT *, 'Area, mean & std deviation are ::', aire, mu, sigma
142 END IF
143 END IF ! (iflag_mix .gt. 0)
144
145 1 RETURN
146 END SUBROUTINE cv3_inip
147