SFEMaNS  version 4.1 (work in progress)
Reference documentation for SFEMaNS
 All Classes Files Functions Variables Groups Pages
condlim_test_12.f90
Go to the documentation of this file.
2  USE my_util
3  USE def_type_mesh
4  USE input_data
5 !!$ATTENTION
6 !!$Some subroutines have been commented to avoid warning messages when compiling executable.
7 !!$It can not be done in the module boundary_generic that expects all subroutines to be present.
8 !!$END ATTENTION
9 !!$ PUBLIC :: init_velocity_pressure
10 !!$ PUBLIC :: init_temperature
11 !!$ PUBLIC :: init_level_set
12 !!$ PUBLIC :: source_in_NS_momentum
13 !!$ PUBLIC :: source_in_temperature
14 !!$ PUBLIC :: source_in_level_set
15 !!$ PUBLIC :: vv_exact
16 !!$ PUBLIC :: imposed_velocity_by_penalty
17 !!$ PUBLIC :: pp_exact
18 !!$ PUBLIC :: temperature_exact
19 !!$ PUBLIC :: level_set_exact
20 !!$ PUBLIC :: penal_in_real_space
21 !!$ PUBLIC :: extension_velocity
22  PUBLIC :: vexact
23 !!$ PUBLIC :: H_B_quasi_static
24  PUBLIC :: hexact
25  PUBLIC :: phiexact
26  PUBLIC :: jexact_gauss
27  PUBLIC :: eexact_gauss
28  PUBLIC :: init_maxwell
29 !!$ PUBLIC :: mu_bar_in_fourier_space
30 !!$ PUBLIC :: grad_mu_bar_in_fourier_space
31 !!$ PUBLIC :: mu_in_real_space
32  PRIVATE
33 
34 CONTAINS
35  !===============================================================================
36  ! Boundary conditions for Navier-Stokes
37  !===============================================================================
38 
39 !!$ !===Initialize velocity, pressure
40 !!$ SUBROUTINE init_velocity_pressure(mesh_f, mesh_c, time, dt, list_mode, &
41 !!$ un_m1, un, pn_m1, pn, phin_m1, phin)
42 !!$ IMPLICIT NONE
43 !!$ TYPE(mesh_type) :: mesh_f, mesh_c
44 !!$ REAL(KIND=8), INTENT(OUT):: time
45 !!$ REAL(KIND=8), INTENT(IN) :: dt
46 !!$ INTEGER, DIMENSION(:), INTENT(IN) :: list_mode
47 !!$ REAL(KIND=8), DIMENSION(:,:,:), INTENT(OUT):: un_m1, un
48 !!$ REAL(KIND=8), DIMENSION(:,:,:), INTENT(OUT):: pn_m1, pn, phin_m1, phin
49 !!$ INTEGER :: mode, i, j
50 !!$ REAL(KIND=8), DIMENSION(mesh_c%np) :: pn_m2
51 !!$
52 !!$ time = 0.d0
53 !!$ DO i= 1, SIZE(list_mode)
54 !!$ mode = list_mode(i)
55 !!$ DO j = 1, 6
56 !!$ !===velocity
57 !!$ un_m1(:,j,i) = vv_exact(j,mesh_f%rr,mode,time-dt)
58 !!$ un (:,j,i) = vv_exact(j,mesh_f%rr,mode,time)
59 !!$ END DO
60 !!$ DO j = 1, 2
61 !!$ !===pressure
62 !!$ pn_m2(:) = pp_exact(j,mesh_c%rr,mode,time-2*dt)
63 !!$ pn_m1 (:,j,i) = pp_exact(j,mesh_c%rr,mode,time-dt)
64 !!$ pn (:,j,i) = pp_exact(j,mesh_c%rr,mode,time)
65 !!$ phin_m1(:,j,i) = pn_m1(:,j,i) - pn_m2(:)
66 !!$ phin (:,j,i) = Pn (:,j,i) - pn_m1(:,j,i)
67 !!$ ENDDO
68 !!$ ENDDO
69 !!$ END SUBROUTINE init_velocity_pressure
70 
71 !!$ !===Initialize temperature
72 !!$ SUBROUTINE init_temperature(mesh, time, dt, list_mode, tempn_m1, tempn)
73 !!$ IMPLICIT NONE
74 !!$ TYPE(mesh_type) :: mesh
75 !!$ REAL(KIND=8), INTENT(OUT):: time
76 !!$ REAL(KIND=8), INTENT(IN) :: dt
77 !!$ INTEGER, DIMENSION(:), INTENT(IN) :: list_mode
78 !!$ REAL(KIND=8), DIMENSION(:,:,:), INTENT(OUT):: tempn_m1, tempn
79 !!$ INTEGER :: mode, i, j
80 !!$
81 !!$ time = 0.d0
82 !!$ DO i= 1, SIZE(list_mode)
83 !!$ mode = list_mode(i)
84 !!$ DO j = 1, 2
85 !!$ tempn_m1(:,j,i) = temperature_exact(j, mesh%rr, mode, time-dt)
86 !!$ tempn (:,j,i) = temperature_exact(j, mesh%rr, mode, time)
87 !!$ ENDDO
88 !!$ ENDDO
89 !!$ END SUBROUTINE init_temperature
90 
91 !!$ !===Initialize level_set
92 !!$ SUBROUTINE init_level_set(vv_mesh, time, &
93 !!$ dt, list_mode, level_set_m1, level_set)
94 !!$ IMPLICIT NONE
95 !!$ TYPE(mesh_type) :: vv_mesh
96 !!$ REAL(KIND=8), INTENT(OUT):: time
97 !!$ REAL(KIND=8), INTENT(IN) :: dt
98 !!$ INTEGER, DIMENSION(:), INTENT(IN) :: list_mode
99 !!$ REAL(KIND=8), DIMENSION(:,:,:,:), INTENT(OUT):: level_set, level_set_m1
100 !!$ INTEGER :: mode, i, j, n
101 !!$
102 !!$ time = 0.d0
103 !!$ DO i= 1, SIZE(list_mode)
104 !!$ mode = list_mode(i)
105 !!$ DO j = 1, 2
106 !!$ !===level_set
107 !!$ DO n = 1, inputs%nb_fluid -1
108 !!$ level_set_m1(n,:,j,i) = level_set_exact(n,j,vv_mesh%rr,mode,time-dt)
109 !!$ level_set (n,:,j,i) = level_set_exact(n,j,vv_mesh%rr,mode,time)
110 !!$ END DO
111 !!$ END DO
112 !!$ END DO
113 !!$
114 !!$ END SUBROUTINE init_level_set
115 
116 !!$ !===Source in momemtum equation. Always called.
117 !!$ FUNCTION source_in_NS_momentum(TYPE, rr, mode, i, time, Re, ty, opt_density, opt_tempn) RESULT(vv)
118 !!$ IMPLICIT NONE
119 !!$ INTEGER , INTENT(IN) :: TYPE
120 !!$ REAL(KIND=8), DIMENSION(:,:), INTENT(IN) :: rr
121 !!$ INTEGER , INTENT(IN) :: mode, i
122 !!$ REAL(KIND=8), INTENT(IN) :: time
123 !!$ REAL(KIND=8), INTENT(IN) :: Re
124 !!$ CHARACTER(LEN=2), INTENT(IN) :: ty
125 !!$ REAL(KIND=8), DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: opt_density
126 !!$ REAL(KIND=8), DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: opt_tempn
127 !!$ REAL(KIND=8), DIMENSION(SIZE(rr,2)) :: vv
128 !!$
129 !!$ vv = 0.d0
130 !!$ CALL error_petsc('source_in_NS_momentum: should not be called for this test')
131 !!$ RETURN
132 !!$ END FUNCTION source_in_NS_momentum
133 
134 !!$ !===Extra source in temperature equation. Always called.
135 !!$ FUNCTION source_in_temperature(TYPE, rr, m, t)RESULT(vv)
136 !!$ IMPLICIT NONE
137 !!$ INTEGER , INTENT(IN) :: TYPE
138 !!$ REAL(KIND=8), DIMENSION(:,:), INTENT(IN) :: rr
139 !!$ INTEGER , INTENT(IN) :: m
140 !!$ REAL(KIND=8), INTENT(IN) :: t
141 !!$ REAL(KIND=8), DIMENSION(SIZE(rr,2)) :: vv
142 !!$
143 !!$ vv = 0.d0
144 !!$ CALL error_petsc('source_in_temperature: should not be called for this test')
145 !!$ RETURN
146 !!$ END FUNCTION source_in_temperature
147 
148 !!$ !===Extra source in level set equation. Always called.
149 !!$ FUNCTION source_in_level_set(interface_nb,TYPE, rr, m, t)RESULT(vv)
150 !!$ IMPLICIT NONE
151 !!$ INTEGER , INTENT(IN) :: TYPE
152 !!$ REAL(KIND=8), DIMENSION(:,:), INTENT(IN) :: rr
153 !!$ INTEGER , INTENT(IN) :: m, interface_nb
154 !!$ REAL(KIND=8), INTENT(IN) :: t
155 !!$ REAL(KIND=8), DIMENSION(SIZE(rr,2)) :: vv
156 !!$
157 !!$ vv=0.d0
158 !!$ CALL error_petsc('sourece_in_temperature: should not be called for this test')
159 !!$ END FUNCTION source_in_level_set
160 
161 !!$ !===Velocity for boundary conditions in Navier-Stokes.
162 !!$ !===Can be used also to initialize velocity in: init_velocity_pressure_temperature
163 !!$ FUNCTION vv_exact(TYPE,rr,m,t) RESULT(vv)
164 !!$
165 !!$ IMPLICIT NONE
166 !!$ INTEGER , INTENT(IN) :: TYPE
167 !!$ REAL(KIND=8), DIMENSION(:,:), INTENT(IN) :: rr
168 !!$ INTEGER, INTENT(IN) :: m
169 !!$ REAL(KIND=8), INTENT(IN) :: t
170 !!$ REAL(KIND=8), DIMENSION(SIZE(rr,2)) :: vv
171 !!$
172 !!$ vv(:) = 0.d0
173 !!$ CALL error_petsc('vv_exact: should not be called for this test')
174 !!$ RETURN
175 !!$ END FUNCTION vv_exact
176 
177 !!$ !===Solid velocity imposed when using penalty technique
178 !!$ !===Defined in Fourier space on mode 0 only.
179 !!$ FUNCTION imposed_velocity_by_penalty(rr,t) RESULT(vv)
180 !!$ IMPLICIT NONE
181 !!$ REAL(KIND=8), DIMENSION(:,:), INTENT(IN) :: rr
182 !!$ REAL(KIND=8), INTENT(IN) :: t
183 !!$ REAL(KIND=8), DIMENSION(SIZE(rr,2),6) :: vv
184 !!$
185 !!$ vv=0.d0
186 !!$ RETURN
187 !!$ END FUNCTION imposed_velocity_by_penalty
188 
189 !!$ !===Pressure for boundary conditions in Navier-Stokes.
190 !!$ !===Can be used also to initialize pressure in the subroutine init_velocity_pressure.
191 !!$ !===Use this routine for outflow BCs only.
192 !!$ !===CAUTION: Do not enfore BCs on pressure where normal component
193 !!$ ! of velocity is prescribed.
194 !!$ FUNCTION pp_exact(TYPE,rr,m,t) RESULT (vv)
195 !!$ IMPLICIT NONE
196 !!$ INTEGER , INTENT(IN) :: TYPE
197 !!$ REAL(KIND=8), DIMENSION(:,:), INTENT(IN) :: rr
198 !!$ INTEGER , INTENT(IN) :: m
199 !!$ REAL(KIND=8), INTENT(IN) :: t
200 !!$ REAL(KIND=8), DIMENSION(SIZE(rr,2)) :: vv
201 !!$
202 !!$ vv=0.d0
203 !!$ CALL error_petsc('pp_exact: should not be called for this test')
204 !!$ RETURN
205 !!$ END FUNCTION pp_exact
206 
207 !!$ !===Temperature for boundary conditions in temperature equation.
208 !!$ FUNCTION temperature_exact(TYPE,rr,m,t) RESULT (vv)
209 !!$ IMPLICIT NONE
210 !!$ INTEGER , INTENT(IN) :: TYPE
211 !!$ REAL(KIND=8), DIMENSION(:,:), INTENT(IN) :: rr
212 !!$ INTEGER , INTENT(IN) :: m
213 !!$ REAL(KIND=8), INTENT(IN) :: t
214 !!$ REAL(KIND=8), DIMENSION(SIZE(rr,2)) :: vv
215 !!$
216 !!$ vv = 0.d0
217 !!$ CALL error_petsc('temperature_exact: should not be called for this test')
218 !!$ RETURN
219 !!$ END FUNCTION temperature_exact
220 
221 !!$ !===Can be used to initialize level set in the subroutine init_level_set.
222 !!$ FUNCTION level_set_exact(interface_nb,TYPE,rr,m,t) RESULT (vv)
223 !!$ IMPLICIT NONE
224 !!$ INTEGER , INTENT(IN) :: TYPE
225 !!$ REAL(KIND=8), DIMENSION(:,:), INTENT(IN) :: rr
226 !!$ INTEGER , INTENT(IN) :: m, interface_nb
227 !!$ REAL(KIND=8), INTENT(IN) :: t
228 !!$ REAL(KIND=8), DIMENSION(SIZE(rr,2)) :: vv
229 !!$
230 !!$ vv = 0.d0
231 !!$ CALL error_petsc('level_set_exact: should not be called for this test')
232 !!$ RETURN
233 !!$
234 !!$ END FUNCTION level_set_exact
235 
236 !!$ !===Penalty coefficient (if needed)
237 !!$ !===This coefficient is equal to zero in subdomain
238 !!$ !===where penalty is applied (penalty is zero in solid)
239 !!$ FUNCTION penal_in_real_space(mesh,rr_gauss,angles,nb_angles,nb,ne,time) RESULT(vv)
240 !!$ IMPLICIT NONE
241 !!$ TYPE(mesh_type) :: mesh
242 !!$ REAL(KIND=8), DIMENSION(:,:), INTENT(IN) :: rr_gauss
243 !!$ REAL(KIND=8), DIMENSION(:), INTENT(IN) :: angles
244 !!$ INTEGER, INTENT(IN) :: nb_angles
245 !!$ INTEGER, INTENT(IN) :: nb, ne
246 !!$ REAL(KIND=8), INTENT(IN) :: time
247 !!$ REAL(KIND=8), DIMENSION(nb_angles,ne-nb+1) :: vv
248 !!$
249 !!$ vv = 1.d0
250 !!$ CALL error_petsc('penal_in_real_space: should not be called for this test')
251 !!$ RETURN
252 !!$ END FUNCTION penal_in_real_space
253 
254 !!$ !===Extension of the velocity field in the solid.
255 !!$ !===Used when temperature or Maxwell equations are solved.
256 !!$ !===It extends the velocity field on the Navier-Stokes domain to a
257 !!$ !===velocity field on the temperature and the Maxwell domain.
258 !!$ !===It is also used if problem type=mxw and restart velocity
259 !!$ !===is set to true in data (type problem denoted mxx in the code).
260 !!$ FUNCTION extension_velocity(TYPE, H_mesh, mode, t, n_start) RESULT(vv)
261 !!$ IMPLICIT NONE
262 !!$ TYPE(mesh_type), INTENT(IN) :: H_mesh
263 !!$ INTEGER , INTENT(IN) :: TYPE, n_start
264 !!$ INTEGER, INTENT(IN) :: mode
265 !!$ REAL(KIND=8), INTENT(IN) :: t
266 !!$ REAL(KIND=8), DIMENSION(H_Mesh%np) :: vv
267 !!$
268 !!$ vv = 0.d0
269 !!$ RETURN
270 !!$
271 !!$ END FUNCTION extension_velocity
272 
273  !===============================================================================
274  ! Boundary conditions for Maxwell
275  !===============================================================================
276  !===Velocity used in the induction equation.
277  !===Used only if problem type is mxw and restart velocity is false
278  FUNCTION vexact(m, H_mesh) RESULT(vv) !Set uniquement a l'induction
279  IMPLICIT NONE
280  TYPE(mesh_type), INTENT(IN) :: h_mesh
281  INTEGER, INTENT(IN) :: m
282  REAL(KIND=8), DIMENSION(H_mesh%np,6) :: vv
283  INTEGER :: n
284 
285  vv = 0.d0
286  RETURN
287 
288  !===Dummies variables to avoid warning
289  n=m
290  !===Dummies variables to avoid warning
291  END FUNCTION vexact
292 
293 !!$ !===Magnetic field and magnetic induction for quasi-static approximation
294 !!$ !===if needed
295 !!$ FUNCTION H_B_quasi_static(char_h_b, rr, m) RESULT(vv)
296 !!$ IMPLICIT NONE
297 !!$ CHARACTER(LEN=1), INTENT(IN) :: char_h_b
298 !!$ REAL(KIND=8), DIMENSION(:,:), INTENT(IN) :: rr
299 !!$ INTEGER, INTENT(IN) :: m
300 !!$ REAL(KIND=8), DIMENSION(SIZE(rr,2),6) :: vv
301 !!$
302 !!$ vv = 0.d0
303 !!$ RETURN
304 !!$ END FUNCTION H_B_quasi_static
305 
306  !===Magnetic field for boundary conditions in the Maxwell equations.
307  FUNCTION hexact(H_mesh,TYPE, rr, m, mu_H_field, t) RESULT(vv)
308  IMPLICIT NONE
309  TYPE(mesh_type), INTENT(IN) :: h_mesh
310  INTEGER , INTENT(IN) :: type
311  REAL(KIND=8), DIMENSION(:,:), INTENT(IN) :: rr
312  INTEGER , INTENT(IN) :: m
313  REAL(KIND=8), INTENT(IN) :: t
314  REAL(KIND=8), DIMENSION(:), INTENT(IN) :: mu_h_field
315  REAL(KIND=8), DIMENSION(SIZE(rr,2)) :: vv
316  REAL(KIND=8) :: r
317  INTEGER :: n
318 
319  IF (m==1) THEN
320  IF (type==4) THEN
321  vv = -rr(1,:)**2
322  ELSE IF (type==5) THEN
323  vv = rr(1,:)*rr(2,:)
324  ELSE
325  vv = 0.d0
326  END IF
327  ELSE IF (m==0) THEN
328  IF (type==3) THEN
329  vv = rr(1,:)
330  ELSE IF (type==5) THEN
331  vv = 0.d0
332  ELSE
333  vv = 0.d0
334  END IF
335  ELSE
336  vv = 0.d0
337  END IF
338  RETURN
339 
340  !===Dummies variables to avoid warning
341  n=h_mesh%np; r=mu_h_field(1); r=t
342  !===Dummies variables to avoid warning
343  END FUNCTION hexact
344 
345  !===Scalar potential for boundary conditions in the Maxwell equations.
346  FUNCTION phiexact(TYPE, rr, m, mu_phi,t) RESULT(vv)
347  IMPLICIT NONE
348  INTEGER , INTENT(IN) :: type
349  REAL(KIND=8), DIMENSION(:,:), INTENT(IN) :: rr
350  INTEGER , INTENT(IN) :: m
351  REAL(KIND=8), INTENT(IN) :: mu_phi, t
352  REAL(KIND=8), DIMENSION(SIZE(rr,2)) :: vv
353  REAL(KIND=8) :: r
354  INTEGER :: n
355 
356  vv=0.d0
357  CALL error_petsc('Phiexact: should not be called for this test')
358  RETURN
359 
360  !===Dummies variables to avoid warning
361  n=type; n=m; r=rr(1,1); r=mu_phi; r=t
362  !===Dummies variables to avoid warning
363  END FUNCTION phiexact
364 
365  !===Current in Ohm's law. Curl(H) = sigma(E + uxB) + current
366  FUNCTION jexact_gauss(TYPE, rr, m, mu_phi, sigma, mu_H, t, mesh_id, opt_B_ext) RESULT(vv)
367  IMPLICIT NONE
368  INTEGER , INTENT(IN) :: type
369  REAL(KIND=8), DIMENSION(:), INTENT(IN) :: rr
370  INTEGER , INTENT(IN) :: m
371  REAL(KIND=8), INTENT(IN) :: mu_phi, sigma, mu_h, t
372  INTEGER , INTENT(IN) :: mesh_id
373  REAL(KIND=8), DIMENSION(6), OPTIONAL,INTENT(IN) :: opt_b_ext
374  REAL(KIND=8) :: vv
375  REAL(KIND=8) :: r
376  INTEGER :: n
377 
378  IF (m==1) THEN
379  IF (type==2) THEN
380  vv = -rr(2)
381  ELSE IF (type==3) THEN
382  vv = -rr(2)
383  ELSE IF (type==6) THEN
384  vv = -3*rr(1)
385  ELSE
386  vv = 0.d0
387  END IF
388  ELSE
389  vv = 0.d0
390  END IF
391  RETURN
392 
393  !===Dummies variables to avoid warning
394  r=mu_phi; r=sigma; r=mu_h; r=t; n=mesh_id
395  IF (present(opt_b_ext)) r=opt_b_ext(1)
396  !===Dummies variables to avoid warning
397  END FUNCTION jexact_gauss
398 
399  !===Electric field for Neumann BC (cf. doc)
400  FUNCTION eexact_gauss(TYPE, rr, m, mu_phi, sigma, mu_H, t) RESULT(vv)
401  IMPLICIT NONE
402  INTEGER, INTENT(IN) :: type
403  REAL(KIND=8), DIMENSION(:), INTENT(IN) :: rr
404  INTEGER, INTENT(IN) :: m
405  REAL(KIND=8), INTENT(IN) :: mu_phi, sigma, mu_h, t
406  REAL(KIND=8) :: vv
407  REAL(KIND=8) :: r
408 
409  IF (m/=0) THEN
410  vv = 0
411  ELSE
412  IF (type==5) THEN
413  vv = 2.d0
414  ELSE
415  vv = 0.d0
416  END IF
417  END IF
418  RETURN
419 
420  !===Dummies variables to avoid warning
421  r=rr(1); r=mu_phi; r=sigma; r=mu_h; r=t
422  !===Dummies variables to avoid warning
423  END FUNCTION eexact_gauss
424 
425  !===Initialization of magnetic field and scalar potential (if present)
426  SUBROUTINE init_maxwell(H_mesh, phi_mesh, time, dt, mu_H_field, mu_phi, &
427  list_mode, hn1, hn, phin1, phin)
428  IMPLICIT NONE
429  TYPE(mesh_type) :: h_mesh, phi_mesh
430  REAL(KIND=8), INTENT(OUT):: time
431  REAL(KIND=8), INTENT(IN) :: dt
432  REAL(KIND=8), DIMENSION(:), INTENT(IN) :: mu_h_field
433  REAL(KIND=8), INTENT(IN) :: mu_phi
434  INTEGER, DIMENSION(:), INTENT(IN) :: list_mode
435  REAL(KIND=8), DIMENSION(:,:,:), INTENT(OUT):: hn, hn1
436  REAL(KIND=8), DIMENSION(:,:,:), INTENT(OUT):: phin, phin1
437  INTEGER :: i, k
438 
439  time = -dt
440  DO k=1,6
441  DO i=1, SIZE(list_mode)
442  hn1(:,k,i) = hexact(h_mesh,k, h_mesh%rr, list_mode(i), mu_h_field, time)
443  IF (inputs%nb_dom_phi>0) THEN
444  IF (k<3) THEN
445  phin1(:,k,i) = phiexact(k, phi_mesh%rr, list_mode(i) , mu_phi, time)
446  ENDIF
447  END IF
448  ENDDO
449  ENDDO
450 
451  time = time + dt
452  DO k=1,6
453  DO i=1, SIZE(list_mode)
454  hn(:,k,i) = hexact(h_mesh, k, h_mesh%rr, list_mode(i), mu_h_field, time)
455  IF (inputs%nb_dom_phi>0) THEN
456  IF (k<3) THEN
457  phin(:,k,i) = phiexact(k, phi_mesh%rr, list_mode(i), mu_phi, time)
458  ENDIF
459  END IF
460  ENDDO
461  ENDDO
462  END SUBROUTINE init_maxwell
463 
464 !!$ !===Analytical permeability (if needed)
465 !!$ !===This function is not needed unless the flag
466 !!$ !=== ===Use FEM Interpolation for magnetic permeability (true/false)
467 !!$ !===is activated and set to .FALSE. in the data data file. Default is .TRUE.
468 !!$ FUNCTION mu_bar_in_fourier_space(H_mesh,nb,ne,pts,pts_ids) RESULT(vv)
469 !!$ IMPLICIT NONE
470 !!$ TYPE(mesh_type), INTENT(IN) :: H_mesh
471 !!$ REAL(KIND=8), DIMENSION(ne-nb+1) :: vv
472 !!$ INTEGER, INTENT(IN) :: nb, ne
473 !!$ REAL(KIND=8),DIMENSION(2,ne-nb+1),OPTIONAL :: pts
474 !!$ INTEGER, DIMENSION(ne-nb+1), OPTIONAL :: pts_ids
475 !!$
476 !!$ vv = 1.d0
477 !!$ CALL error_petsc('mu_bar_in_fourier_space: should not be called for this test')
478 !!$ RETURN
479 !!$ END FUNCTION mu_bar_in_fourier_space
480 
481 !!$ !===Analytical mu_in_fourier_space (if needed)
482 !!$ !===This function is not needed unless the flag
483 !!$ !=== ===Use FEM Interpolation for magnetic permeability (true/false)
484 !!$ !===is activated and set to .FALSE. in the data data file. Default is .TRUE.
485 !!$ FUNCTION grad_mu_bar_in_fourier_space(pt,pt_id) RESULT(vv)
486 !!$ IMPLICIT NONE
487 !!$ REAL(KIND=8),DIMENSION(2), INTENT(in):: pt
488 !!$ INTEGER,DIMENSION(1), INTENT(in) :: pt_id
489 !!$ REAL(KIND=8),DIMENSION(2) :: vv
490 !!$
491 !!$ vv=0.d0
492 !!$ CALL error_petsc('grad_mu_bar_in_fourier_space: should not be called for this test')
493 !!$ RETURN
494 !!$ END FUNCTION grad_mu_bar_in_fourier_space
495 
496 !!$ !===Analytical permeability, mu in real space (if needed)
497 !!$ FUNCTION mu_in_real_space(H_mesh,angles,nb_angles,nb,ne,time) RESULT(vv)
498 !!$ IMPLICIT NONE
499 !!$ TYPE(mesh_type), INTENT(IN) :: H_mesh
500 !!$ REAL(KIND=8), DIMENSION(:), INTENT(IN) :: angles
501 !!$ INTEGER, INTENT(IN) :: nb_angles
502 !!$ INTEGER, INTENT(IN) :: nb, ne
503 !!$ REAL(KIND=8), INTENT(IN) :: time
504 !!$ REAL(KIND=8), DIMENSION(nb_angles,ne-nb+1) :: vv
505 !!$
506 !!$ vv = 1.d0
507 !!$ CALL error_petsc('mu_in_real_space: should not be called for this test')
508 !!$ RETURN
509 !!$ END FUNCTION mu_in_real_space
510 
511 END MODULE boundary_test_12
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
Definition: doc_intro.h:199
subroutine, public init_maxwell(H_mesh, phi_mesh, time, dt, mu_H_field, mu_phi, list_mode, Hn1, Hn, phin1, phin)
real(kind=8) function, public jexact_gauss(TYPE, rr, m, mu_phi, sigma, mu_H, t, mesh_id, opt_B_ext)
real(kind=8) function, dimension(h_mesh%np, 6), public vexact(m, H_mesh)
real(kind=8) function, dimension(size(rr, 2)), public phiexact(TYPE, rr, m, mu_phi, t)
real(kind=8) function, public eexact_gauss(TYPE, rr, m, mu_phi, sigma, mu_H, t)
subroutine error_petsc(string)
Definition: my_util.f90:15
real(kind=8) function, dimension(size(rr, 2)), public hexact(H_mesh, TYPE, rr, m, mu_H_field, t)