35 REAL(KIND=8),
PRIVATE,
PARAMETER :: pi = 3.14159265358979323846d0
36 REAL(KIND=8),
PRIVATE ,
PARAMETER ::
twopi=2*pi
46 REAL(KIND=8),
PARAMETER::
lw = 0.0125
87 un_m1, un, pn_m1, pn, phin_m1, phin)
90 REAL(KIND=8),
INTENT(OUT):: time
91 REAL(KIND=8),
INTENT(IN) :: dt
92 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
93 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(OUT):: un_m1, un
94 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(OUT):: pn_m1, pn, phin_m1, phin
96 REAL(KIND=8),
DIMENSION(mesh_c%np) :: pn_m2
99 DO i= 1,
SIZE(list_mode)
103 un_m1(:,j,i) =
vv_exact(j,mesh_f%rr,mode,time-dt)
104 un(:,j,i) =
vv_exact(j,mesh_f%rr,mode,time)
108 pn_m2(:) =
pp_exact(j,mesh_c%rr,mode,time-2*dt)
109 pn_m1(:,j,i) =
pp_exact(j,mesh_c%rr,mode,time-dt)
110 pn(:,j,i) =
pp_exact(j,mesh_c%rr,mode,time)
111 phin_m1(:,j,i) = pn_m1(:,j,i) - pn_m2(:)
112 phin(:,j,i) = pn(:,j,i) - pn_m1(:,j,i)
165 INTEGER ,
INTENT(IN) :: TYPE
166 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: rr
167 INTEGER ,
INTENT(IN) :: mode, i
168 REAL(KIND=8),
INTENT(IN) :: time
169 REAL(KIND=8),
INTENT(IN) :: Re
170 CHARACTER(LEN=2),
INTENT(IN) :: ty
171 REAL(KIND=8),
DIMENSION(:,:,:),
OPTIONAL,
INTENT(IN) :: opt_density
172 REAL(KIND=8),
DIMENSION(:,:,:),
OPTIONAL,
INTENT(IN) :: opt_tempn
173 REAL(KIND=8),
DIMENSION(SIZE(rr,2)) :: vv
176 CHARACTER(LEN=2) :: np
178 IF (
PRESENT(opt_density))
CALL error_petsc(
'density should not be present for test 29')
179 IF (
PRESENT(opt_tempn))
CALL error_petsc(
'temperature should not be present for test 29')
185 n=type; n=
SIZE(rr,1); n=mode; n=i; r=time; r=re; np=ty
218 FUNCTION vv_exact(TYPE,rr,m,t) RESULT(vv)
220 INTEGER ,
INTENT(IN) :: TYPE
221 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: rr
222 INTEGER,
INTENT(IN) :: m
223 REAL(KIND=8),
INTENT(IN) :: t
224 REAL(KIND=8),
DIMENSION(SIZE(rr,2)) :: vv
230 IF (type==3 .AND. m==0)
THEN 256 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: rr
257 REAL(KIND=8),
INTENT(IN) :: t
258 REAL(KIND=8),
DIMENSION(SIZE(rr,2),6) :: vv
284 FUNCTION pp_exact(TYPE,rr,m,t) RESULT (vv)
286 INTEGER ,
INTENT(IN) :: TYPE
287 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: rr
288 INTEGER ,
INTENT(IN) :: m
289 REAL(KIND=8),
INTENT(IN) :: t
290 REAL(KIND=8),
DIMENSION(SIZE(rr,2)) :: vv
298 n=type; n=
SIZE(rr,1); n=m; r=t
337 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: rr_gauss
338 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: angles
339 INTEGER,
INTENT(IN) :: nb_angles
340 INTEGER,
INTENT(IN) :: nb, ne
341 REAL(KIND=8),
INTENT(IN) :: time
342 REAL(KIND=8),
DIMENSION(nb_angles,ne-nb+1) :: vv
360 INTEGER ,
INTENT(IN) ::
TYPE, n_start
361 INTEGER,
INTENT(IN) :: mode
362 REAL(KIND=8),
INTENT(IN) :: t
363 REAL(KIND=8),
DIMENSION(H_Mesh%np) :: vv
371 n=h_mesh%np; r=t; n=type; n=mode; n=n_start
403 FUNCTION hexact(H_mesh,TYPE, rr, m, mu_H_field, t) RESULT(vv)
406 INTEGER ,
INTENT(IN) :: TYPE
407 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: rr
408 INTEGER ,
INTENT(IN) :: m
409 REAL(KIND=8),
INTENT(IN) :: t
410 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: mu_H_field
411 REAL(KIND=8),
DIMENSION(SIZE(rr,2)) :: vv
419 n=h_mesh%np; n=type; n=
SIZE(rr,1); n=m; r=mu_h_field(1); r=t
424 FUNCTION phiexact(TYPE, rr, m, mu_phi,t) RESULT(vv)
426 INTEGER ,
INTENT(IN) :: TYPE
427 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: rr
428 INTEGER ,
INTENT(IN) :: m
429 REAL(KIND=8),
INTENT(IN) :: mu_phi, t
430 REAL(KIND=8),
DIMENSION(SIZE(rr,2)) :: vv
438 n=type; n=
SIZE(rr,1); n=m; r=mu_phi; r=t
443 FUNCTION jexact_gauss(TYPE, rr, m, mu_phi, sigma, mu_H, t, mesh_id, opt_B_ext) RESULT(vv)
445 INTEGER ,
INTENT(IN) :: TYPE
446 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: rr
447 INTEGER ,
INTENT(IN) :: m
448 REAL(KIND=8),
INTENT(IN) :: mu_phi, sigma, mu_H, t
449 INTEGER ,
INTENT(IN) :: mesh_id
450 REAL(KIND=8),
DIMENSION(6),
OPTIONAL,
INTENT(IN) :: opt_B_ext
459 n=
SIZE(rr,1); r=mu_phi; r=sigma; r=mu_h; r=t; n=type; n=m; n=mesh_id
460 IF (
PRESENT(opt_b_ext)) r=opt_b_ext(1)
465 FUNCTION eexact_gauss(TYPE, rr, m, mu_phi, sigma, mu_H, t) RESULT(vv)
467 INTEGER,
INTENT(IN) :: TYPE
468 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: rr
469 INTEGER,
INTENT(IN) :: m
470 REAL(KIND=8),
INTENT(IN) :: mu_phi, sigma, mu_H, t
476 CALL error_petsc(
'Eexact: should not be called for this test')
479 n=
SIZE(rr,1); r=mu_phi; r=sigma; r=mu_h; r=t; n=type; n=m
483 FUNCTION hexact_init(TYPE, rr, m, mu_H_field, t) RESULT(vv)
485 INTEGER ,
INTENT(IN) :: TYPE
486 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: rr
487 INTEGER ,
INTENT(IN) :: m
488 REAL(KIND=8),
INTENT(IN) :: t
489 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: mu_H_field
490 REAL(KIND=8),
DIMENSION(SIZE(rr,2)) :: vv
505 ELSEIF (
TYPE == 4) then
512 n=
SIZE(rr,1); r=mu_h_field(1); r=t
517 SUBROUTINE init_maxwell(H_mesh, phi_mesh, time, dt, mu_H_field, mu_phi, &
518 list_mode, hn1, hn, phin1, phin)
521 REAL(KIND=8),
INTENT(OUT):: time
522 REAL(KIND=8),
INTENT(IN) :: dt
523 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: mu_H_field
524 REAL(KIND=8),
INTENT(IN) :: mu_phi
525 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
526 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(OUT):: Hn, Hn1
527 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(OUT):: phin, phin1
528 INTEGER :: i, k, mode, m_max_c
535 m_max_c =
SIZE(list_mode)
541 hn1(:,k,i) =
hexact_init(k, h_mesh%rr, mode, mu_h_field, time)
543 phin1(:,k,i) =
phiexact(k, phi_mesh%rr, mode, mu_phi, time)
551 hn(:,k,i) =
hexact_init(k, h_mesh%rr, mode, mu_h_field, time)
553 phin(:,k,i) =
phiexact(k, phi_mesh%rr, mode, mu_phi, time)
567 REAL(KIND=8),
DIMENSION(ne-nb+1) :: vv
568 INTEGER,
INTENT(IN) :: nb, ne
569 REAL(KIND=8),
DIMENSION(2,ne-nb+1),
OPTIONAL :: pts
570 INTEGER,
DIMENSION(ne-nb+1),
OPTIONAL :: pts_ids
572 REAL(KIND=8),
DIMENSION(ne-nb+1) :: r,z
574 IF(
PRESENT(pts) .AND.
PRESENT(pts_ids) )
THEN 582 DO n = 1, ne - nb + 1
594 REAL(KIND=8),
DIMENSION(2),
INTENT(IN):: pt
595 INTEGER,
DIMENSION(1),
INTENT(IN) :: pt_id
596 REAL(KIND=8),
DIMENSION(2) :: vv
611 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: angles
612 INTEGER,
INTENT(IN) :: nb_angles
613 INTEGER,
INTENT(IN) :: nb, ne
614 REAL(KIND=8),
INTENT(IN) :: time
615 REAL(KIND=8),
DIMENSION(nb_angles,ne-nb+1) :: vv
626 REAL(KIND=8) :: r,z,vv
646 REAL(KIND=8) :: r,z,vv
647 REAL(KIND=8) :: r2,r3,z0,z1
659 IF ( z .GE. z1 .AND. r .GE. r3 )
THEN 661 ELSE IF (r.LE.r2)
THEN 664 ELSE IF (z.GE.z1)
THEN 669 ELSE IF (r.GE.r2 .AND. r.LE.r3)
THEN 672 ELSE IF(z.LE.z0)
THEN 688 REAL(KIND=8) :: r,z,vv,psi
689 REAL(KIND=8) :: r2,r3,z2,z3
700 IF ( z .LE. z3 .AND. r .GE. r3)
THEN 702 ELSE IF(r.LE.r2)
THEN 705 ELSE IF (z.LE.z3)
THEN 710 ELSE IF (r.GE.r2 .AND. r.LE.r3)
THEN 713 ELSE IF(z.GE.z2)
THEN 730 REAL(KIND=8),
DIMENSION(2) :: vv
751 REAL(KIND=8),
DIMENSION(2) :: vv
752 REAL(KIND=8) :: r2,r3,z0,z1
753 REAL(KIND=8) :: DFr,DFz
766 IF ( z .GE. z1 .AND. r .GE. r3 )
THEN 769 ELSE IF (r.LE.r2)
THEN 773 ELSE IF (z.GE.z1)
THEN 780 ELSE IF (r.GE.r2 .AND. r.LE.r3)
THEN 784 ELSE IF(z.LE.z0)
THEN 804 REAL(KIND=8),
DIMENSION(2) :: vv
805 REAL(KIND=8) :: r2,r3,z2,z3
806 REAL(KIND=8) :: DFr,DFz
818 IF ( z .LE. z3 .AND. r .GE. r3)
THEN 821 ELSE IF(r.LE.r2)
THEN 825 ELSE IF (z.LE.z3)
THEN 832 ELSE IF (r.GE.r2 .AND. r.LE.r3)
THEN 836 ELSE IF(z.GE.z2)
THEN 859 REAL(KIND=8),
DIMENSION(:,:) :: rr_gauss
860 REAL(KIND=8),
DIMENSION(:) :: angles
863 REAL(KIND=8),
DIMENSION(nb_angles,ne-nb+1) :: vv
865 REAL(KIND=8) :: r,z,time
870 r = rr_gauss(1,n_loc)
871 z = rr_gauss(2,n_loc)
898 REAL(KIND=8) :: r,theta,z,time
899 REAL(KIND=8),
DIMENSION(:) :: angles
901 REAL(KIND=8),
DIMENSION(nb_angles) :: vv
903 REAL(KIND=8) :: g, a,alphaz,alphar
904 REAL(KIND=8) :: r0,r1,r2,r3,z0,z1,z2,z3
905 REAL(KIND=8) :: psi, tanhp,tanhm, tanhd, r_theta
911 IF(abs(psi) .LE. 1.d-8)
THEN 932 ELSE IF(z .LE. z0 .AND. z .GE. z1)
THEN 938 If ( r .LE. r0 )
THEN 940 ELSE IF(r .GE. r0 .AND. r .LE. r1)
THEN 964 tanhp = tanh(alphaz*(r*a+
lw+
lw*r))
965 tanhm = tanh(alphaz*(r*a-
lw-
lw*r))
966 tanhd = tanh(alphaz*(
lw+
lw*r))
967 g=(1+tanhp)*(1-tanhm)/(1+tanhd)**2
982 REAL(KIND=8) :: r,theta,z,time
983 REAL(KIND=8),
DIMENSION(:) :: angles
985 REAL(KIND=8),
DIMENSION(nb_angles) :: vv
987 REAL(KIND=8) :: g, a,alphaz,alphar
988 REAL(KIND=8) :: r0,r1,r2,r3,z0,z1,z2,z3
989 REAL(KIND=8) :: psi, tanhp,tanhm, tanhd, r_theta
996 IF(abs(psi) .LE. 1.d-8)
THEN 1017 IF (z .LE. z0 )
THEN 1019 ELSE IF(z .GE. z0 .AND. z .LE. z1)
THEN 1025 IF ( r .LE. r0 )
THEN 1027 ELSE IF(r .GE. r0 .AND. r .LE. r1)
THEN 1036 DO na = 1, nb_angles
1047 tanhp = tanh(alphaz*(r*a+
lw+
lw*r))
1048 tanhm = tanh(alphaz*(r*a-
lw-
lw*r))
1049 tanhd = tanh(alphaz*(
lw+
lw*r))
1050 g=(1+tanhp)*(1-tanhm)/(1+tanhd)**2
1065 REAL(KIND=8) :: r0,r1,r2,r3,z0,z1,z2,z3
1066 REAL(KIND=8) :: curve_1,curve_2,psi
1082 IF ( z .LE. z3 .AND. r .GE. r3)
THEN 1084 ELSE IF (r.LE.r0)
THEN 1087 ELSE IF (z.LE.z1)
THEN 1092 ELSE IF(r.GE.r0 .AND. r.LE.r1)
THEN 1095 IF(z.LE.curve_2)
THEN 1097 ELSE IF(z.GE.curve_1)
THEN 1102 ELSE IF(r.GE.r1 .AND. r.LE.r2)
THEN 1105 ELSE IF (z.LE.z3)
THEN 1110 ELSE IF (r.GE.r2 .AND. r.LE.r3)
THEN 1113 ELSE IF(z.GE.z2)
THEN 1133 REAL(KIND=8) :: r0,r1,r2,r3,z0,z1,z2,z3
1134 REAL(KIND=8) :: curve_1,curve_2,psi
1151 IF ( z .GE. z3 .AND. r .GE. r3)
THEN 1153 ELSE IF (r.LE.r0)
THEN 1156 ELSE IF (z.GE.z1)
THEN 1161 ELSE IF(r.GE.r0 .AND. r.LE.r1)
THEN 1164 IF(z.GE.curve_2)
THEN 1166 ELSE IF(z.LE.curve_1)
THEN 1171 ELSE IF(r.GE.r1 .AND. r.LE.r2)
THEN 1174 ELSE IF (z.GE.z3)
THEN 1179 ELSE IF (r.GE.r2 .AND. r.LE.r3)
THEN 1182 ELSE IF(z.LE.z2)
THEN 1196 REAL(KIND=8) :: x,x0,x1
1198 REAL(KIND=8) :: a0,a1,a2,a3
1201 a0 = x1**2*(3*x0-x1)/(x0-x1)**3;
1202 a1 = -6.0*x0*x1/(x0-x1)**3;
1203 a2 = (3.0*(x0+x1))/(x0-x1)**3;
1204 a3 = -2.0/(x0-x1)**3;
1205 vv = a0+a1*x+a2*x*x + a3*x*x*x
1212 REAL(KIND=8) :: x,x0,x1
1222 REAL(KIND=8) :: x,x0,x1
1224 REAL(KIND=8) :: a0,a1,a2,a3
1227 a0 = x1**2*(3*x0-x1)/(x0-x1)**3;
1228 a1 = -6.0*x0*x1/(x0-x1)**3;
1229 a2 = (3.0*(x0+x1))/(x0-x1)**3;
1230 a3 = -2.0/(x0-x1)**3;
1232 vv = a1+2.d0*a2*x + 3.d0*a3*x*x
1239 REAL(KIND=8) :: x,x0,x1
real(kind=8) function dsmooth_jump_down(x, x0, x1)
real(kind=8), parameter, private twopi
subroutine, public init_velocity_pressure(mesh_f, mesh_c, time, dt, list_mode, un_m1, un, pn_m1, pn, phin_m1, phin)
real(kind=8) function, public eexact_gauss(TYPE, rr, m, mu_phi, sigma, mu_H, t)
real(kind=8), parameter solid_vel
real(kind=8), parameter, public disk_r
real(kind=8) function, dimension(nb_angles, ne-nb+1) smooth_penal_in_real_space(mesh, rr_gauss, angles, nb_angles, nb, ne, time)
real(kind=8), parameter disk_top
real(kind=8), parameter, public disk_radius
real(kind=8) function, dimension(size(rr, 2)), public vv_exact(TYPE, rr, m, t)
real(kind=8), public omega_vol
real(kind=8) function, dimension(size(rr, 2)), public source_in_ns_momentum(TYPE, rr, mode, i, time, Re, ty, opt_density, opt_tempn)
real(kind=8), parameter wjump_hole
real(kind=8) function, dimension(nb_angles) smooth_bottom_propeller(r, z, angles, nb_angles, time)
real(kind=8) function, dimension(ne-nb+1), public mu_bar_in_fourier_space(H_mesh, nb, ne, pts, pts_ids)
real(kind=8), parameter ztop_bar_p
real(kind=8), parameter cyl_bott
real(kind=8) function dsmooth_jump_up(x, x0, x1)
real(kind=8) function, dimension(2) grad_bottom_mu_bar_func(r, z)
real(kind=8), parameter top_propeller_angle_offset
subroutine error_petsc(string)
real(kind=8) function, dimension(size(rr, 2), 6), public imposed_velocity_by_penalty(rr, t)
real(kind=8) function, dimension(nb_angles, ne-nb+1), public mu_in_real_space(H_mesh, angles, nb_angles, nb, ne, time)
real(kind=8) function mu_bar_func(r, z)
real(kind=8) function top_mu_bar_func(r, z)
real(kind=8), parameter top_of_disk_bot
real(kind=8) function smooth_jump_down(x, x0, x1)
logical, parameter if_bottom_prop
real(kind=8), parameter cyl_top
real(kind=8) function bottom_mu_bar_func(r, z)
real(kind=8), parameter disk_bot
real(kind=8) function smooth_bottom_supporting_disk(r, z)
real(kind=8), parameter alpha
real(kind=8), parameter hole_rp
real(kind=8), parameter lw
real(kind=8), parameter mu_disk
real(kind=8) function, dimension(size(rr, 2)), public hexact(H_mesh, TYPE, rr, m, mu_H_field, t)
real(kind=8), parameter ztop
real(kind=8) function, dimension(h_mesh%np), public extension_velocity(TYPE, H_mesh, mode, t, n_start)
real(kind=8) function, public jexact_gauss(TYPE, rr, m, mu_phi, sigma, mu_H, t, mesh_id, opt_B_ext)
real(kind=8), parameter wjump
real(kind=8), parameter, public disk_rp
logical, parameter if_top_prop
real(kind=8) function, dimension(size(rr, 2)), public pp_exact(TYPE, rr, m, t)
real(kind=8), parameter bot_of_blade_top
real(kind=8), parameter zbot_bar
real(kind=8), parameter ztop_p
real(kind=8), parameter bot_of_disk_top
real(kind=8), parameter zbot_p
real(kind=8) function, dimension(2), public grad_mu_bar_in_fourier_space(pt, pt_id)
real(kind=8), parameter, public hole_radius
real(kind=8) function smooth_top_supporting_disk(r, z)
real(kind=8), parameter bdisk_z
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, dimension(nb_angles, ne-nb+1), public penal_in_real_space(mesh, rr_gauss, angles, nb_angles, nb, ne, time)
real(kind=8), parameter hole_r
real(kind=8), parameter bdisk_z_p
real(kind=8), parameter tdisk_z
real(kind=8) function, dimension(size(rr, 2)), public phiexact(TYPE, rr, m, mu_phi, t)
real(kind=8) function smooth_jump_up(x, x0, x1)
real(kind=8) function, dimension(nb_angles) smooth_top_propeller(r, z, angles, nb_angles, time)
real(kind=8), parameter ztop_bar
real(kind=8) function, dimension(2) grad_mu_bar_func(r, z)
real(kind=8), parameter top_of_blade_bot
real(kind=8), parameter zbot
real(kind=8) function, dimension(size(rr, 2)) hexact_init(TYPE, rr, m, mu_H_field, t)
real(kind=8), parameter alpha_th
real(kind=8), parameter two_rp
real(kind=8), parameter zbot_bar_p
real(kind=8) function, dimension(2) grad_top_mu_bar_func(r, z)
real(kind=8), parameter tdisk_z_p