12 INTEGER,
DIMENSION(:),
POINTER :: js_d
13 LOGICAL,
DIMENSION(mesh%dom_np) :: virgin
14 INTEGER:: nn, ms, n, p, n_D, nws
15 REAL(kind=8) :: eps=1.d-10
17 nws =
SIZE(mesh%jjs,1)
20 DO ms = 1, mesh%dom_mes
21 IF (maxval(abs(mesh%rr(1,mesh%jjs(:,ms)))).GT.eps) cycle
24 IF (p>mesh%dom_np) cycle
37 DO ms = 1, mesh%dom_mes
38 IF (maxval(abs(mesh%rr(1,mesh%jjs(:,ms)))).GT.eps) cycle
41 IF (p>mesh%dom_np) cycle
45 js_d(nn) = mesh%jjs(n,ms)
56 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_dirichlet_sides
57 INTEGER,
DIMENSION(:),
POINTER :: js_d
58 LOGICAL,
DIMENSION(:),
POINTER :: virgin
59 INTEGER:: nn, ms, n, p, n_D, nws
61 IF (
SIZE(list_dirichlet_sides)==0)
THEN 66 nws =
SIZE(mesh%jjs,1)
68 ALLOCATE(virgin(mesh%dom_np))
70 DO ms = 1, mesh%dom_mes
71 IF (minval(abs(mesh%sides(ms)-list_dirichlet_sides))/=0) cycle
74 IF (p>mesh%dom_np) cycle
85 DO ms = 1, mesh%dom_mes
86 IF (minval(abs(mesh%sides(ms)-list_dirichlet_sides))/=0) cycle
89 IF (p>mesh%dom_np) cycle
93 js_d(nn) = mesh%jjs(n,ms)
105 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_dirichlet_sides
106 INTEGER,
DIMENSION(:),
POINTER :: js_d
107 LOGICAL,
DIMENSION(:),
POINTER :: virgin
108 INTEGER:: nn, ms, n, p, n_D, nws
110 IF (
SIZE(list_dirichlet_sides)==0)
THEN 115 nws =
SIZE(mesh%jjs,1)
117 ALLOCATE(virgin(mesh%np))
119 DO ms = 1, mesh%dom_mes
120 IF (minval(abs(mesh%sides(ms)-list_dirichlet_sides))/=0) cycle
123 IF (p>mesh%np)
CALL error_petsc(
'BUG in dirichlet_nodes_local')
134 DO ms = 1, mesh%dom_mes
135 IF (minval(abs(mesh%sides(ms)-list_dirichlet_sides))/=0) cycle
138 IF (p>mesh%np)
CALL error_petsc(
'BUG in dirichlet_nodes_local')
142 js_d(nn) = mesh%jjs(n,ms)
150 #include "petsc/finclude/petsc.h" 153 INTEGER,
DIMENSION(:),
INTENT(IN) :: glob_js_D
155 INTEGER,
DIMENSION(:),
POINTER :: bubu_test
157 petscerrorcode :: ierr
158 n_d =
SIZE(glob_js_d)
159 ALLOCATE(bubu_test(n_d))
161 bubu_test = glob_js_d-1
165 CALL matzerorows(matrix, n_d, bubu_test, 1.d0, petsc_null_vec, petsc_null_vec, ierr)
166 CALL matassemblybegin(matrix,mat_final_assembly,ierr)
167 CALL matassemblyend(matrix,mat_final_assembly,ierr)
169 DEALLOCATE(bubu_test)
174 #include "petsc/finclude/petsc.h" 177 INTEGER,
DIMENSION(:) :: js_D
178 REAL(KIND=8),
DIMENSION(:) :: bs_D
181 petscerrorcode :: ierr
184 CALL vecsetvalues(b, n_d, js_d, bs_d, insert_values, ierr)
186 CALL vecassemblybegin(b,ierr)
187 CALL vecassemblyend(b,ierr)
191 SUBROUTINE vector_glob_js_d(vv_mesh, list_mode, vv_3_LA, vv_list_dirichlet_sides, vv_js_D, vv_mode_global_js_D)
195 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
197 TYPE(dyn_int_line),
DIMENSION(3),
INTENT(IN) :: vv_list_dirichlet_sides
198 TYPE(dyn_int_line),
DIMENSION(:),
POINTER :: vv_mode_global_js_D
199 TYPE(dyn_int_line),
DIMENSION(3),
INTENT(OUT):: vv_js_D
200 INTEGER,
DIMENSION(:),
POINTER :: vv_js_axis_D
201 INTEGER :: k, m_max_c, i, n1, n2, n3, n123, nalloc, nx
202 m_max_c =
SIZE(list_mode)
209 ALLOCATE(vv_mode_global_js_d(m_max_c))
211 n1 =
SIZE(vv_js_d(1)%DIL)
212 n2 =
SIZE(vv_js_d(2)%DIL)
213 n3 =
SIZE(vv_js_d(3)%DIL)
214 nx =
SIZE(vv_js_axis_d)
216 IF (list_mode(i)==0)
THEN 218 ELSE IF (list_mode(i)==1)
THEN 223 ALLOCATE(vv_mode_global_js_d(i)%DIL(nalloc))
224 vv_mode_global_js_d(i)%DIL(1:n1) = vv_3_la%loc_to_glob(1,vv_js_d(1)%DIL)
225 vv_mode_global_js_d(i)%DIL(n1+1:n1+n2) = vv_3_la%loc_to_glob(2,vv_js_d(2)%DIL)
226 vv_mode_global_js_d(i)%DIL(n1+n2+1:n123) = vv_3_la%loc_to_glob(3,vv_js_d(3)%DIL)
228 IF (list_mode(i)==0 .AND. nx>0)
THEN 229 vv_mode_global_js_d(i)%DIL(n123+1:n123+nx) = vv_3_la%loc_to_glob(1,vv_js_axis_d)
230 vv_mode_global_js_d(i)%DIL(n123+nx+1:) = vv_3_la%loc_to_glob(2,vv_js_axis_d)
231 ELSE IF (list_mode(i)==1 .AND. nx>0)
THEN 232 vv_mode_global_js_d(i)%DIL(n123+1:) = vv_3_la%loc_to_glob(3,vv_js_axis_d)
233 ELSE IF (list_mode(i).GE.2 .AND. nx>0)
THEN 234 vv_mode_global_js_d(i)%DIL(n123+1:n123+nx) = vv_3_la%loc_to_glob(1,vv_js_axis_d)
235 vv_mode_global_js_d(i)%DIL(n123+nx+1:n123+2*nx)= vv_3_la%loc_to_glob(2,vv_js_axis_d)
236 vv_mode_global_js_d(i)%DIL(n123+2*nx+1:) = vv_3_la%loc_to_glob(3,vv_js_axis_d)
246 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
248 TYPE(dyn_int_line),
DIMENSION(:),
POINTER :: vv_mode_global_js_D
249 INTEGER,
DIMENSION(:),
POINTER :: vv_js_axis_D
250 INTEGER :: m_max_c, i, nalloc, nx
252 m_max_c =
SIZE(list_mode)
254 ALLOCATE(vv_mode_global_js_d(m_max_c))
256 nx =
SIZE(vv_js_axis_d)
257 IF (list_mode(i)==0)
THEN 259 ELSE IF (list_mode(i)==1)
THEN 264 ALLOCATE(vv_mode_global_js_d(i)%DIL(nalloc))
266 IF (list_mode(i)==0 .AND. nx>0)
THEN 267 vv_mode_global_js_d(i)%DIL(1:nx) = vv_3_la%loc_to_glob(1,vv_js_axis_d)
268 vv_mode_global_js_d(i)%DIL(nx+1:) = vv_3_la%loc_to_glob(2,vv_js_axis_d)
269 ELSE IF (list_mode(i)==1 .AND. nx>0)
THEN 270 vv_mode_global_js_d(i)%DIL = vv_3_la%loc_to_glob(3,vv_js_axis_d)
271 ELSE IF (list_mode(i).GE.2 .AND. nx>0)
THEN 272 vv_mode_global_js_d(i)%DIL(1:nx) = vv_3_la%loc_to_glob(1,vv_js_axis_d)
273 vv_mode_global_js_d(i)%DIL(nx+1:2*nx)= vv_3_la%loc_to_glob(2,vv_js_axis_d)
274 vv_mode_global_js_d(i)%DIL(2*nx+1:) = vv_3_la%loc_to_glob(3,vv_js_axis_d)
285 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
287 TYPE(dyn_int_line),
DIMENSION(:),
POINTER :: pp_mode_global_js_D
288 INTEGER,
DIMENSION(:),
INTENT(IN) :: pp_js_D
289 INTEGER,
DIMENSION(:),
POINTER :: pp_js_axis_D
290 INTEGER :: m_max_c, i, n, nalloc, nx
292 m_max_c =
SIZE(list_mode)
295 ALLOCATE(pp_mode_global_js_d(m_max_c))
298 nx =
SIZE(pp_js_axis_d)
299 IF (list_mode(i)==0)
THEN 305 ALLOCATE(pp_mode_global_js_d(i)%DIL(nalloc))
306 pp_mode_global_js_d(i)%DIL(1:n) = pp_1_la%loc_to_glob(1,pp_js_d)
308 IF (list_mode(i).GE.1 .AND. nx>0)
THEN 309 pp_mode_global_js_d(i)%DIL(n+1:n+nx) = pp_1_la%loc_to_glob(1,pp_js_axis_d)
319 INTEGER,
DIMENSION(:),
INTENT(IN) :: list_mode
321 TYPE(dyn_int_line),
DIMENSION(:),
POINTER :: pp_mode_global_js_D
322 INTEGER,
DIMENSION(:),
POINTER :: pp_js_axis_D
323 INTEGER :: m_max_c, i, nalloc, nx
325 m_max_c =
SIZE(list_mode)
327 ALLOCATE(pp_mode_global_js_d(m_max_c))
329 nx =
SIZE(pp_js_axis_d)
330 IF (list_mode(i)==0)
THEN 335 ALLOCATE(pp_mode_global_js_d(i)%DIL(nalloc))
336 IF (list_mode(i).GE.1 .AND. nx>0)
THEN 337 pp_mode_global_js_d(i)%DIL = pp_1_la%loc_to_glob(1,pp_js_axis_d)
subroutine dir_axis_nodes_parallel(mesh, js_d)
subroutine vector_without_bc_glob_js_d(vv_mesh, list_mode, vv_3_LA, vv_mode_global_js_D)
subroutine error_petsc(string)
subroutine scalar_with_bc_glob_js_d(pp_mesh, list_mode, pp_1_LA, pp_js_D, pp_mode_global_js_D)
subroutine dirichlet_nodes_local(mesh, list_dirichlet_sides, js_d)
subroutine dirichlet_rhs(js_D, bs_D, b)
subroutine dirichlet_nodes_parallel(mesh, list_dirichlet_sides, js_d)
subroutine vector_glob_js_d(vv_mesh, list_mode, vv_3_LA, vv_list_dirichlet_sides, vv_js_D, vv_mode_global_js_D)
subroutine dirichlet_m_parallel(matrix, glob_js_D)
subroutine scalar_without_glob_js_d(pp_mesh, list_mode, pp_1_LA, pp_mode_global_js_D)