Choral
funcLib.f90
Go to the documentation of this file.
1 
24 
25 module funclib
26 
27  use real_type
28 
29  implicit none
30 
31  public :: one_r3
32  public :: emetric
33  public :: vector_field_e_x
35 
36  public :: f_c0, f_c2, f_c3
37  public :: f_c4, f_c5
38 
39 contains
40 
43 
44  !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
45  !!
46  !! FE_FUNC = Finite element functions
47  !!
48  !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
53 
55  function vector_field_e_x(x) result(res)
56  real(RP), dimension(3) :: res
57  real(RP), dimension(3), intent(in) :: x
58 
59  res = (/1._rp, 0._rp, 0._rp/)
60 
61  end function vector_field_e_x
62 
63 
66  function one_r3(x) result(res)
67  real(RP), dimension(3), intent(in) :: x
68  real(RP) :: res
69 
70  res = 1._rp
71 
72  end function one_r3
73 
79  function emetric(x, u, v) result(res)
80  real(RP), dimension(3), intent(in) :: x, u, v
81  real(RP) :: res
82 
83  res = dot_product( u, v )
84 
85  end function emetric
86 
88 
89 
90  !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
91  !!
92  !! f_ck = Ck FUNCTIONS with support [-1,1]
93  !!
94  !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
104  function f_c0(t) result(f)
106  real(RP) :: f
107  real(RP), intent(in) :: t
108 
109  real(RP) :: r
110 
111  r = abs(t)
112  if (r>1._rp) then
113  f = 0._rp
114  else
115  f = 1._rp - r
116  end if
117 
118  end function f_c0
119 
122  function f_c1(t) result(f)
123  real(RP) :: f
124  real(RP), intent(in) :: t
125 
126  real(RP), parameter :: scal = 15._rp / 16._rp
127  real(RP) :: r
128 
129  r = abs(t)
130  if (r>1._rp) then
131  f = 0._rp
132  else
133  f = t**2
134  f = f**2 - 2._rp*f + 1._rp
135  f = f * scal
136  end if
137 
138  end function f_c1
139 
142  function f_c2(t) result(f)
144  real(RP) :: f
145  real(RP), intent(in) :: t
146 
147  real(RP) :: r, r3, r4, r5
148 
149  r = abs(t)
150  if (r>1._rp) then
151  f = 0._rp
152  else
153  r3 = r**3
154  r4 = r*r3
155  r5 = r*r4
156  f = 1._rp - 6._rp*r5 + 15._rp*r4 - 10._rp*r3
157  end if
158 
159  end function f_c2
160 
163  function f_c3(t) result(f)
165  real(RP) :: f
166  real(RP), intent(in) :: t
167 
168  real(RP) :: r, r4, r5, r6, r7
169 
170  r = abs(t)
171  if (r>1._rp) then
172  f = 0._rp
173  else
174 
175  r4 = r**4
176  r5 = r4*r
177  r6 = r5*r
178  r7 = r6*r
179 
180  f = 1._rp + 20._rp*r7 -70._rp*r6 + 84._rp*r5 - 35._rp*r4
181 
182  end if
183 
184  end function f_c3
185 
188  function f_c4(t) result(f)
190  real(RP) :: f
191  real(RP), intent(in) :: t
192 
193  real(RP) :: r, r5, r6, r7, r8, r9
194 
195  r = abs(t)
196  if (r>1._rp) then
197  f = 0._rp
198  else
199 
200  r5 = r**5
201  r6 = r5*r
202  r7 = r6*r
203  r8 = r7*r
204  r9 = r8*r
205  f = 1._rp - 70._rp*r9 +315._rp*r8 - 540._rp*r7 + &
206  & 420._rp*r6 - 126._rp*r5
207 
208  end if
209 
210  end function f_c4
211 
212 
215  function f_c5(t) result(f)
217  real(RP) :: f
218  real(RP), intent(in) :: t
219 
220  real(RP) :: r, r2, r3, r4, r5
221 
222  f = 0._rp
223  r = abs(t)
224  if (r>1._rp) then
225  f = 0._rp
226  else
227  r2 = r*r
228  r3 = r2*r
229  r4 = r3*r
230  r5 = r4*r
231 
232  f = 2._rp * (1._rp-r)**6 * ( &
233  & 1._rp + 6._rp*r + 21._rp*r2 + &
234  & 56._rp*r3 + 126._rp*r4 + 252._rp*r5 )
235 
236  end if
237 
238  end function f_c5
241 
242 
243 end module funclib
244 
real(rp) function, public f_c3(t)
C3 function with support [-1,1].
Definition: funcLib.f90:164
real(rp) function, public one_r3(x)
The function .
Definition: funcLib.f90:67
real(rp) function, public f_c2(t)
C2 function with support [-1,1].
Definition: funcLib.f90:143
PRE-DEFINED NUMERIC FUNCTIONS
Definition: funcLib.f90:25
real(rp) function f_c1(t)
C1 function with support [-1,1].
Definition: funcLib.f90:123
real(rp) function, dimension(3), public vector_field_e_x(x)
constant vector field
Definition: funcLib.f90:56
REAL NUMBERS PRECISION IN CHORAL: selects simple/double/quad
Definition: real_type.F90:33
real(rp) function, public f_c5(t)
C5 function with support [-1,1].
Definition: funcLib.f90:216
real(rp) function, public f_c4(t)
C4 function with support [-1,1].
Definition: funcLib.f90:189
real(rp) function, public f_c0(t)
Definition: funcLib.f90:105
real(rp) function, public emetric(x, u, v)
Euclidian metric on : This is the isotropic homogeneous metric equal to the usual scalar product ...
Definition: funcLib.f90:80