New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
bfun1d.h90 in vendors/PPR/src – NEMO

source: vendors/PPR/src/bfun1d.h90 @ 15814

Last change on this file since 15814 was 14387, checked in by smasson, 3 years ago

PPR: suppress real*8 <-> real*16 compilation errors or implicit conversions, see #2617

File size: 8.2 KB
Line 
1
2    !
3    ! This program may be freely redistributed under the
4    ! condition that the copyright notices (including this
5    ! entire header) are not removed, and no compensation
6    ! is received through use of the software.  Private,
7    ! research, and institutional use is free.  You may
8    ! distribute modified versions of this code UNDER THE
9    ! CONDITION THAT THIS CODE AND ANY MODIFICATIONS MADE
10    ! TO IT IN THE SAME FILE REMAIN UNDER COPYRIGHT OF THE
11    ! ORIGINAL AUTHOR, BOTH SOURCE AND OBJECT CODE ARE
12    ! MADE FREELY AVAILABLE WITHOUT CHARGE, AND CLEAR
13    ! NOTICE IS GIVEN OF THE MODIFICATIONS.  Distribution
14    ! of this code as part of a commercial system is
15    ! permissible ONLY BY DIRECT ARRANGEMENT WITH THE
16    ! AUTHOR.  (If you are not directly supplying this
17    ! code to a customer, and you are instead telling them
18    ! how they can obtain it for free, then you are not
19    ! required to make any arrangement with me.)
20    !
21    ! Disclaimer:  Neither I nor: Columbia University, the
22    ! National Aeronautics and Space Administration, nor
23    ! the Massachusetts Institute of Technology warrant
24    ! or certify this code in any way whatsoever.  This
25    ! code is provided "as-is" to be used at your own risk.
26    !
27    !
28
29    !   
30    ! BFUN1D.h90: poly. basis-functions for reconstruction.
31    !
32    ! Darren Engwirda
33    ! 07-Sep-2016
34    ! de2363 [at] columbia [dot] edu
35    !
36    !
37
38    pure subroutine bfun1d(isel,ndof,sval,bfun)
39
40    !
41    ! ISEL  basis-function "order", -1 => integral-basis ,
42    !       +0 => function-basis, +1 => 1st deriv.-basis ,
43    !       +2 => 2nd deriv.-basis.
44    ! NDOF  no. degrees-of-freedom in basis.
45    ! SVAL  local coord. at which to evaluate basis-func.,
46    !       such that -1.0 <= SVAL <= +1.0 .
47    ! BFUN  basis-vector evaluated at SVAL .
48    !
49   
50        implicit none
51       
52    !------------------------------------------- arguments !
53        integer, intent( in) :: isel,ndof
54        real*8 , intent( in) :: sval
55        real*8 , intent(out) :: bfun(:)
56       
57        select case (isel)
58        case (-1)
59    !------------------------------------ -1th-order basis !
60            select case (ndof)
61            case (+1)
62                bfun(1) = sval**1 / 1.e0
63               
64            case (+2)
65                bfun(1) = sval**1 / 1.e0
66                bfun(2) = sval**2 / 2.e0
67               
68            case (+3)
69                bfun(1) = sval**1 / 1.e0
70                bfun(2) = sval**2 / 2.e0
71                bfun(3) = sval**3 / 3.e0
72               
73            case (+4)
74                bfun(1) = sval**1 / 1.e0
75                bfun(2) = sval**2 / 2.e0
76                bfun(3) = sval**3 / 3.e0
77                bfun(4) = sval**4 / 4.e0
78               
79            case (+5)
80                bfun(1) = sval**1 / 1.e0
81                bfun(2) = sval**2 / 2.e0
82                bfun(3) = sval**3 / 3.e0
83                bfun(4) = sval**4 / 4.e0
84                bfun(5) = sval**5 / 5.e0
85               
86            case (+6)
87                bfun(1) = sval**1 / 1.e0
88                bfun(2) = sval**2 / 2.e0
89                bfun(3) = sval**3 / 3.e0
90                bfun(4) = sval**4 / 4.e0
91                bfun(5) = sval**5 / 5.e0
92                bfun(6) = sval**6 / 6.e0
93               
94            case (+7)
95                bfun(1) = sval**1 / 1.e0
96                bfun(2) = sval**2 / 2.e0
97                bfun(3) = sval**3 / 3.e0
98                bfun(4) = sval**4 / 4.e0
99                bfun(5) = sval**5 / 5.e0
100                bfun(6) = sval**6 / 6.e0
101                bfun(7) = sval**7 / 7.e0
102           
103            end select
104
105        case (+0)
106    !------------------------------------ +0th-order basis !
107            select case (ndof)
108            case (+1)
109                bfun(1) =           1.e0
110               
111            case (+2)
112                bfun(1) =           1.e0
113                bfun(2) = sval**1 * 1.e0
114               
115            case (+3)
116                bfun(1) =           1.e0
117                bfun(2) = sval**1 * 1.e0
118                bfun(3) = sval**2 * 1.e0
119               
120            case (+4)
121                bfun(1) =           1.e0
122                bfun(2) = sval**1 * 1.e0
123                bfun(3) = sval**2 * 1.e0
124                bfun(4) = sval**3 * 1.e0
125               
126            case (+5)
127                bfun(1) =           1.e0
128                bfun(2) = sval**1 * 1.e0
129                bfun(3) = sval**2 * 1.e0
130                bfun(4) = sval**3 * 1.e0
131                bfun(5) = sval**4 * 1.e0
132               
133            case (+6)
134                bfun(1) =           1.e0
135                bfun(2) = sval**1 * 1.e0
136                bfun(3) = sval**2 * 1.e0
137                bfun(4) = sval**3 * 1.e0
138                bfun(5) = sval**4 * 1.e0
139                bfun(6) = sval**5 * 1.e0
140               
141            case (+7)
142                bfun(1) =           1.e0
143                bfun(2) = sval**1 * 1.e0
144                bfun(3) = sval**2 * 1.e0
145                bfun(4) = sval**3 * 1.e0
146                bfun(5) = sval**4 * 1.e0
147                bfun(6) = sval**5 * 1.e0
148                bfun(7) = sval**6 * 1.e0
149           
150            end select
151
152        case (+1)
153    !------------------------------------ +1st-order basis !
154            select case (ndof)
155            case (+1)
156                bfun(1) =           0.e0
157               
158            case (+2)
159                bfun(1) =           0.e0
160                bfun(2) =           1.e0
161               
162            case (+3)
163                bfun(1) =           0.e0
164                bfun(2) =           1.e0
165                bfun(3) = sval**1 * 2.e0
166               
167            case (+4)
168                bfun(1) =           0.e0
169                bfun(2) =           1.e0
170                bfun(3) = sval**1 * 2.e0
171                bfun(4) = sval**2 * 3.e0
172               
173            case (+5)
174                bfun(1) =           0.e0
175                bfun(2) =           1.e0
176                bfun(3) = sval**1 * 2.e0
177                bfun(4) = sval**2 * 3.e0
178                bfun(5) = sval**3 * 4.e0
179               
180            case (+6)
181                bfun(1) =           0.e0
182                bfun(2) =           1.e0
183                bfun(3) = sval**1 * 2.e0
184                bfun(4) = sval**2 * 3.e0
185                bfun(5) = sval**3 * 4.e0
186                bfun(6) = sval**4 * 5.e0
187               
188            case (+7)
189                bfun(1) =           0.e0
190                bfun(2) =           1.e0
191                bfun(3) = sval**1 * 2.e0
192                bfun(4) = sval**2 * 3.e0
193                bfun(5) = sval**3 * 4.e0
194                bfun(6) = sval**4 * 5.e0
195                bfun(7) = sval**5 * 6.e0
196           
197            end select
198
199        case (+2)
200    !------------------------------------ +2nd-order basis !
201            select case (ndof)
202            case (+1)
203                bfun(1) =           0.e0
204               
205            case (+2)
206                bfun(1) =           0.e0
207                bfun(2) =           0.e0
208               
209            case (+3)
210                bfun(1) =           0.e0
211                bfun(2) =           0.e0
212                bfun(3) =           2.e0
213               
214            case (+4)
215                bfun(1) =           0.e0
216                bfun(2) =           0.e0
217                bfun(3) =           2.e0
218                bfun(4) = sval**1 * 6.e0
219               
220            case (+5)
221                bfun(1) =           0.e0
222                bfun(2) =           0.e0
223                bfun(3) =           2.e0
224                bfun(4) = sval**1 * 6.e0
225                bfun(5) = sval**2 *12.e0
226               
227            case (+6)
228                bfun(1) =           0.e0
229                bfun(2) =           0.e0
230                bfun(3) =           2.e0
231                bfun(4) = sval**1 * 6.e0
232                bfun(5) = sval**2 *12.e0
233                bfun(6) = sval**3 *20.e0
234               
235            case (+7)
236                bfun(1) =           0.e0
237                bfun(2) =           0.e0
238                bfun(3) =           2.e0
239                bfun(4) = sval**1 * 6.e0
240                bfun(5) = sval**2 *12.e0
241                bfun(6) = sval**3 *20.e0
242                bfun(7) = sval**4 *30.e0
243           
244            end select
245
246        end select
247   
248    end subroutine
249   
250   
251   
Note: See TracBrowser for help on using the repository browser.