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 NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/ext/PPR/src – NEMO

source: NEMO/branches/2020/dev_r13312_AGRIF-03-04_jchanut_vinterp_tstep/ext/PPR/src/bfun1d.h90 @ 13926

Last change on this file since 13926 was 13926, checked in by jchanut, 4 years ago

#2222, add Piecewise Polynomial Reconstruction library

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.f90: 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.d0
63               
64            case (+2)
65                bfun(1) = sval**1 / 1.d0
66                bfun(2) = sval**2 / 2.d0
67               
68            case (+3)
69                bfun(1) = sval**1 / 1.d0
70                bfun(2) = sval**2 / 2.d0
71                bfun(3) = sval**3 / 3.d0
72               
73            case (+4)
74                bfun(1) = sval**1 / 1.d0
75                bfun(2) = sval**2 / 2.d0
76                bfun(3) = sval**3 / 3.d0
77                bfun(4) = sval**4 / 4.d0
78               
79            case (+5)
80                bfun(1) = sval**1 / 1.d0
81                bfun(2) = sval**2 / 2.d0
82                bfun(3) = sval**3 / 3.d0
83                bfun(4) = sval**4 / 4.d0
84                bfun(5) = sval**5 / 5.d0
85               
86            case (+6)
87                bfun(1) = sval**1 / 1.d0
88                bfun(2) = sval**2 / 2.d0
89                bfun(3) = sval**3 / 3.d0
90                bfun(4) = sval**4 / 4.d0
91                bfun(5) = sval**5 / 5.d0
92                bfun(6) = sval**6 / 6.d0
93               
94            case (+7)
95                bfun(1) = sval**1 / 1.d0
96                bfun(2) = sval**2 / 2.d0
97                bfun(3) = sval**3 / 3.d0
98                bfun(4) = sval**4 / 4.d0
99                bfun(5) = sval**5 / 5.d0
100                bfun(6) = sval**6 / 6.d0
101                bfun(7) = sval**7 / 7.d0
102           
103            end select
104
105        case (+0)
106    !------------------------------------ +0th-order basis !
107            select case (ndof)
108            case (+1)
109                bfun(1) =           1.d0
110               
111            case (+2)
112                bfun(1) =           1.d0
113                bfun(2) = sval**1 * 1.d0
114               
115            case (+3)
116                bfun(1) =           1.d0
117                bfun(2) = sval**1 * 1.d0
118                bfun(3) = sval**2 * 1.d0
119               
120            case (+4)
121                bfun(1) =           1.d0
122                bfun(2) = sval**1 * 1.d0
123                bfun(3) = sval**2 * 1.d0
124                bfun(4) = sval**3 * 1.d0
125               
126            case (+5)
127                bfun(1) =           1.d0
128                bfun(2) = sval**1 * 1.d0
129                bfun(3) = sval**2 * 1.d0
130                bfun(4) = sval**3 * 1.d0
131                bfun(5) = sval**4 * 1.d0
132               
133            case (+6)
134                bfun(1) =           1.d0
135                bfun(2) = sval**1 * 1.d0
136                bfun(3) = sval**2 * 1.d0
137                bfun(4) = sval**3 * 1.d0
138                bfun(5) = sval**4 * 1.d0
139                bfun(6) = sval**5 * 1.d0
140               
141            case (+7)
142                bfun(1) =           1.d0
143                bfun(2) = sval**1 * 1.d0
144                bfun(3) = sval**2 * 1.d0
145                bfun(4) = sval**3 * 1.d0
146                bfun(5) = sval**4 * 1.d0
147                bfun(6) = sval**5 * 1.d0
148                bfun(7) = sval**6 * 1.d0
149           
150            end select
151
152        case (+1)
153    !------------------------------------ +1st-order basis !
154            select case (ndof)
155            case (+1)
156                bfun(1) =           0.d0
157               
158            case (+2)
159                bfun(1) =           0.d0
160                bfun(2) =           1.d0
161               
162            case (+3)
163                bfun(1) =           0.d0
164                bfun(2) =           1.d0
165                bfun(3) = sval**1 * 2.d0
166               
167            case (+4)
168                bfun(1) =           0.d0
169                bfun(2) =           1.d0
170                bfun(3) = sval**1 * 2.d0
171                bfun(4) = sval**2 * 3.d0
172               
173            case (+5)
174                bfun(1) =           0.d0
175                bfun(2) =           1.d0
176                bfun(3) = sval**1 * 2.d0
177                bfun(4) = sval**2 * 3.d0
178                bfun(5) = sval**3 * 4.d0
179               
180            case (+6)
181                bfun(1) =           0.d0
182                bfun(2) =           1.d0
183                bfun(3) = sval**1 * 2.d0
184                bfun(4) = sval**2 * 3.d0
185                bfun(5) = sval**3 * 4.d0
186                bfun(6) = sval**4 * 5.d0
187               
188            case (+7)
189                bfun(1) =           0.d0
190                bfun(2) =           1.d0
191                bfun(3) = sval**1 * 2.d0
192                bfun(4) = sval**2 * 3.d0
193                bfun(5) = sval**3 * 4.d0
194                bfun(6) = sval**4 * 5.d0
195                bfun(7) = sval**5 * 6.d0
196           
197            end select
198
199        case (+2)
200    !------------------------------------ +2nd-order basis !
201            select case (ndof)
202            case (+1)
203                bfun(1) =           0.d0
204               
205            case (+2)
206                bfun(1) =           0.d0
207                bfun(2) =           0.d0
208               
209            case (+3)
210                bfun(1) =           0.d0
211                bfun(2) =           0.d0
212                bfun(3) =           2.d0
213               
214            case (+4)
215                bfun(1) =           0.d0
216                bfun(2) =           0.d0
217                bfun(3) =           2.d0
218                bfun(4) = sval**1 * 6.d0
219               
220            case (+5)
221                bfun(1) =           0.d0
222                bfun(2) =           0.d0
223                bfun(3) =           2.d0
224                bfun(4) = sval**1 * 6.d0
225                bfun(5) = sval**2 *12.d0
226               
227            case (+6)
228                bfun(1) =           0.d0
229                bfun(2) =           0.d0
230                bfun(3) =           2.d0
231                bfun(4) = sval**1 * 6.d0
232                bfun(5) = sval**2 *12.d0
233                bfun(6) = sval**3 *20.d0
234               
235            case (+7)
236                bfun(1) =           0.d0
237                bfun(2) =           0.d0
238                bfun(3) =           2.d0
239                bfun(4) = sval**1 * 6.d0
240                bfun(5) = sval**2 *12.d0
241                bfun(6) = sval**3 *20.d0
242                bfun(7) = sval**4 *30.d0
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.