17 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff, gg
18 REAL(KIND=8),
INTENT(OUT) ::
t
20 INTEGER :: m, l ,i ,ni
22 TYPE(mesh_type
),
TARGET :: mesh
23 INTEGER,
DIMENSION(:,:),
POINTER :: jj
24 INTEGER,
POINTER :: me
25 REAL(KIND=8) ,
DIMENSION(:,:),
POINTER :: rr
39 DO ni = 1, n_w; i = jj(ni,m)
40 ray = ray + rr(1,i)*ww(ni,l)
43 t =
t + sum(ff(jj(:,m)) * ww(:,l))*sum(gg(jj(:,m)) * ww(:,l))*rj(l,m)*ray
51 SUBROUTINE ns_0 (mesh, ff, t)
60 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
61 REAL(KIND=8),
INTENT(OUT) ::
t
63 INTEGER :: m, l ,i ,ni
65 TYPE(mesh_type
),
TARGET :: mesh
66 INTEGER,
DIMENSION(:,:),
POINTER :: jj
67 INTEGER,
POINTER :: me
68 REAL(KIND=8) ,
DIMENSION(:,:),
POINTER :: rr
82 DO ni = 1, n_w; i = jj(ni,m)
83 ray = ray + rr(1,i)*ww(ni,l)
86 t =
t + sum(ff(jj(:,m)) * ww(:,l))**2 * rj(l,m)*ray
104 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
105 REAL(KIND=8),
INTENT(OUT) ::
t
107 INTEGER :: m, l ,i ,ni
109 TYPE(mesh_type
),
TARGET :: mesh
110 INTEGER,
DIMENSION(:,:),
POINTER :: jj
111 INTEGER,
POINTER :: me
112 REAL(KIND=8) ,
DIMENSION(:,:),
POINTER :: rr
126 DO ni = 1, n_w; i = jj(ni,m)
127 ray = ray + rr(1,i)*ww(ni,l)
130 t =
t + sum(ff(jj(:,m)) * ww(:,l))* rj(l,m)*ray
146 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
147 REAL(KIND=8),
INTENT(OUT) ::
t
149 INTEGER :: m, l ,i ,ni
151 TYPE(mesh_type
),
TARGET :: mesh
152 INTEGER,
DIMENSION(:,:),
POINTER :: jj
153 INTEGER,
POINTER :: me
154 REAL(KIND=8) ,
DIMENSION(:,:),
POINTER :: rr
155 REAL(KIND=8) :: ray, vol
164 IF (
SIZE(ff)==mesh%np)
THEN
170 DO ni = 1, n_w; i = jj(ni,m)
171 ray = ray + rr(1,i)*ww(ni,l)
174 t =
t + sum(ff(jj(:,m)) * ww(:,l))* rj(l,m)*ray
175 vol = vol + rj(l,m)*ray
178 ELSE IF (
SIZE(ff)==mesh%me)
THEN
184 DO ni = 1, n_w; i = jj(ni,m)
185 ray = ray + rr(1,i)*ww(ni,l)
188 t =
t + ff(m)* rj(l,m)*ray
189 vol = vol + rj(l,m)*ray
193 WRITE(*,*)
' BUG in average '
209 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
210 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff_anal
211 REAL(KIND=8),
INTENT(OUT) ::
t
213 INTEGER :: m, l ,i , ni, index
215 TYPE(mesh_type
),
TARGET :: mesh
216 INTEGER,
DIMENSION(:,:),
POINTER :: jj
217 INTEGER,
POINTER :: me
218 REAL(KIND=8) ,
DIMENSION(:,:),
POINTER :: rr
219 REAL(KIND=8) :: ray, fl
229 DO l = 1, l_g; index = index + 1
234 DO ni = 1, n_w; i = jj(ni,m)
235 ray = ray + rr(1,i)*ww(ni,l)
236 fl = fl + ff(i) * ww(ni,l)
239 t =
t + (fl - ff_anal(index))**2 * ray* rj(l,m)
257 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: ff
258 REAL(KIND=8),
INTENT(OUT) ::
t
260 INTEGER :: m, l, k,i,ni
263 TYPE(mesh_type
),
TARGET :: mesh
264 INTEGER,
DIMENSION(:,:),
POINTER :: jj
265 INTEGER,
POINTER :: me
266 REAL(KIND=8) ,
DIMENSION(:,:),
POINTER :: rr
283 DO ni = 1, n_w; i = jj(ni,m)
284 ray = ray + rr(1,i)*ww(ni,l)
287 s = s + sum(ff(jj(:,m)) * dw(k,:,l,m))**2*ray
300 SUBROUTINE nv_1(mesh, mod_max, ff, t)
309 TYPE(mesh_type
),
TARGET :: mesh
310 INTEGER,
INTENT(IN) :: mod_max
311 REAL(KIND=8),
DIMENSION(6,mesh%np,0:mod_max),
INTENT(IN) :: ff
312 REAL(KIND=8),
INTENT(OUT) ::
t
314 INTEGER :: m, l,i,ni ,j
316 INTEGER,
DIMENSION(:,:),
POINTER :: jj
317 INTEGER,
POINTER :: me
318 REAL(KIND=8) ,
DIMENSION(:,:),
POINTER :: rr
320 REAL(KIND=8),
DIMENSION(2) :: div
335 DO ni = 1, n_w; i = jj(ni,m)
336 ray = ray + rr(1,i)*ww(ni,l)
339 div(1) = (sum(ff(1,jj(:,m),j) * dw(1,:,l,m)) + &
340 sum(ff(1,jj(:,m),j) * ww(:,l))/ray + &
341 j/ray * sum(ff(4,jj(:,m),j) * ww(:,l)) + &
342 sum(ff(5,jj(:,m),j) * dw(2,:,l,m)))* ray*rj(l,m)
345 div(2) = (sum(ff(2,jj(:,m),j) * dw(1,:,l,m)) + &
346 sum(ff(2,jj(:,m),j) * ww(:,l))/ray - &
347 j/ray * sum(ff(3,jj(:,m),j) * ww(:,l)) + &
348 sum(ff(6,jj(:,m),j) * dw(2,:,l,m)))* ray*rj(l,m)
351 t =
t +(div(1)**2+div(2)**2)
371 TYPE(mesh_type
),
TARGET :: mesh
372 REAL(KIND=8),
DIMENSION(mesh%np,6),
INTENT(IN) :: ff
373 REAL(KIND=8),
INTENT(OUT) ::
t, p
375 INTEGER :: m, l, i, ni
376 REAL(KIND=8) :: s, rp, rt
378 INTEGER,
DIMENSION(:,:),
POINTER :: jj
379 INTEGER,
POINTER :: me
380 REAL(KIND=8) ,
DIMENSION(:,:),
POINTER :: rr
395 DO ni = 1, n_w; i = jj(ni,m)
396 ray = ray + rr(1,i)*ww(ni,l)
399 rp = rp + sqrt(sum(ff(jj(:,m),1)* ww(:,l))**2 + sum(ff(jj(:,m),5)* ww(:,l))**2)*ray*rj(l,m)
400 rt = rt + abs(sum(ff(jj(:,m),3)* ww(:,l)))*ray*rj(l,m)
section doc_intro_frame_work_num_app Numerical approximation subsection doc_intro_fram_work_num_app_Fourier_FEM Fourier Finite element representation The SFEMaNS code uses a hybrid Fourier Finite element formulation The Fourier decomposition allows to approximate the problem’s solutions for each Fourier mode modulo nonlinear terms that are made explicit The variables are then approximated on a meridian section of the domain with a finite element method The numerical approximation of a function f $f f is written in the following generic t
subroutine ns_1(mesh, ff, t)
subroutine nv_1(mesh, mod_max, ff, t)
subroutine ns_0(mesh, ff, t)
subroutine dot_product(mesh, ff, gg, t)
subroutine nv_0_cn(mesh, ff, p, t)
subroutine ns_anal_0(mesh, ff, ff_anal, t)
subroutine ns_l1(mesh, ff, t)
subroutine average(mesh, visc)