SPEED
MAKE_DG_INTERFACE_CONDITIONS.f90
Go to the documentation of this file.
1! Copyright (C) 2012 The SPEED FOUNDATION
2! Author: Ilario Mazzieri
3!
4! This file is part of SPEED.
5!
6! SPEED is free software; you can redistribute it and/or modify it
7! under the terms of the GNU Affero General Public License as
8! published by the Free Software Foundation, either version 3 of the
9! License, or (at your option) any later version.
10!
11! SPEED is distributed in the hope that it will be useful, but
12! WITHOUT ANY WARRANTY; without even the implied warranty of
13! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14! Affero General Public License for more details.
15!
16! You should have received a copy of the GNU Affero General Public License
17! along with SPEED. If not, see <http://www.gnu.org/licenses/>.
18
19
24 subroutine make_dg_interface_conditions()
25
26
27 use max_var
28 use str_mesh
30 use dgjump
31
32 use speed_par
33 use speed_par_dg
34
35 implicit none
36
37 include 'SPEED.MPI'
38
39
40
41
42 nelem_dg = 0
43 nnode_dg = 0
44 allocate(i4count(nnod_loc))
45 i4count = 0
46
47
50
51
52 ! output: - number of dg local elements
53 ! - number of dg global elements
54
59
60 if (mpi_id.eq.0 .and. nelem_dg_glo .gt. 0) write(*,'(A)') '-------------Setup DG interface conditions-------------'
61
62 allocate(faces(3,nelem_dg), area_nodes(25,nelem_dg))
63 faces = 0; area_nodes = 0.d0
64
65 if(nelem_dg_glo .gt. 0) then
66
67 file_face = 'FACES.input'
68
80 delta1, delta2, delta3, &
82
83
84 write(*,'(A,I10,A4,I10)') 'DG Faces on Proc.', mpi_id, ' are', nelem_dg
85 allocate(count_faces(mpi_np))
86 call mpi_barrier(mpi_comm, mpi_ierr)
87 call mpi_allgather(nelem_dg, 1, speed_integer, count_faces, 1, speed_integer, mpi_comm, mpi_ierr)
88
89
90
91 inquire(file=file_face, exist=filefound)
92 if(filefound .eqv. .false.) then
93
94 if (mpi_id .eq. 0) write(*,'(A)') 'Writing FACES.input'
97 endif
98
99 deallocate(faces, area_nodes, count_faces)
100 allocate(faces(3,nelem_dg_glo), area_nodes(25,nelem_dg_glo))
101 faces = 0
102 area_nodes = 0.d0
103
104 file_face = 'FACES.input'
106
107 head_file = 'DGFS.input'
108 inquire(file=head_file, exist=filefound)
109 if(filefound .eqv. .false.) then
110
111 if (mpi_id .eq. 0) write(*,'(A)') 'Writing DGFS.input'
112
113 ! output: - write DG_INTERFACE.out file
114
115 allocate(dg_els(nelem_dg))
116 allocate(scratch_dg_els(nelem_dg))
117
123 alfa11, alfa12, alfa13, &
124 alfa21, alfa22, alfa23, &
125 alfa31, alfa32, alfa33, &
126 beta11, beta12, beta13, &
127 beta21, beta22, beta23, &
128 beta31, beta32, beta33, &
129 gamma1, gamma2, gamma3, &
130 delta1, delta2, delta3, &
133 tag_dg_link, &
136
137
143 alfa11, alfa12, alfa13, &
144 alfa21, alfa22, alfa23, &
145 alfa31, alfa32, alfa33, &
146 beta11, beta12, beta13, &
147 beta21, beta22, beta23, &
148 beta31, beta32, beta33, &
149 gamma1, gamma2, gamma3, &
150 delta1, delta2, delta3, &
153
154 deallocate(dg_els, scratch_dg_els)
155
156
157 endif
158
159 endif
160
161
162 if(nelem_dg_glo .gt. 0) then
163
164
165 allocate(el_new(nelem_dg))
166
167
168 if (mpi_id .eq. 0) write(*,'(A)')
169 if (mpi_id .eq. 0) write(*,'(A)') '-----------------Making DG interfaces------------------'
170
171
172
178 alfa11, alfa12, alfa13, &
179 alfa21, alfa22, alfa23, &
180 alfa31, alfa32, alfa33, &
181 beta11, beta12, beta13, &
182 beta21, beta22, beta23, &
183 beta31, beta32, beta33, &
184 gamma1, gamma2, gamma3, &
187
188 ! 0 - file DGCSXXXXXX.mpi contains spectral connectivity for interface elements
189
190 write(*,'(A,I6,A)') 'Proc:', mpi_id, ' Made.'
191
192 call mpi_barrier(mpi_comm, mpi_ierr)
193 if (mpi_id .eq. 0) write(*,'(A)') 'Made All.'
194
195!***********************************************************************************
196! START SETUP 4 MPI COMUNICATION (ONLY BETWEEN NON-CONFORMING REGIONS)
197!***********************************************************************************
198
199 if (mpi_id.eq.0) write(*,'(A)')
200 if (mpi_id.eq.0) write(*,'(A)')'----------Setting mpi parameters for DG jumps----------'
201
206
207 file_mpi = 'nodedomain.mpi'; unit_mpi = 40
208
209 if(len_trim(mpi_file) .ne. 70) then
210 file_mpi_new = mpi_file(1:len_trim(mpi_file)) // '/' // file_mpi
211 else
213 endif
214
215 open(unit_mpi,file=file_mpi_new)
216 read(unit_mpi,*) nnod
217
218 allocate(node_domain(nnod))
219 do i = 1, nnod
220 read(unit_mpi,*) node_domain(i)
221 enddo
222 close(unit_mpi)
223
224 nsend_jump = 0
225 nrecv_jump = 0
226
227 allocate(proc_send_jump(mpi_np))
228 allocate(proc_recv_jump(mpi_np))
229
230
235
236
237 allocate(node_send_jump(nsend_jump))
238 allocate(node_recv_jump(nrecv_jump))
239
240
245
246
247
248 deallocate(node_domain)
249
250 allocate(con_spx_dg(0:con_nnz_dg))
251 con_spx_dg = 0
253
254 torf = 0
255 if(torf .eq. 1) then
256 write(*,'(A)') 'ERROR: Repetitions on vector node_recv_jump'
257 else
259 do i = 1, nrecv_jump
262 enddo
263
266
267 endif
268
269 endif
270
271
272
273 deallocate(faces, area_nodes)
274
275
276 deallocate(i4count)
277 if (mpi_id.eq.0 .and. nelem_dg_glo .gt. 0) write(*,'(A)') 'Made.'
278
279
280 end subroutine make_dg_interface_conditions
281
subroutine get_dime_dg(nm, sd, tag_mat, cs_nnz_loc, cs_loc, nn_loc, local_n_num, ne_loc, local_el_num, xs, ys, zs, nel_dg_loc, nel_dg_glo, i4count, mpi_id, mpi_comm)
Counts number of DG elements (local and global)
subroutine get_node_from_face(nb_nodes, nb_nz, con_spc, nb_load, l
Computes total number of boundary nodes and second derivative on a given point x.
subroutine make_dg_interface(nm, sd, tag_mat, prop_mat, cs_nnz_loc, cs_loc, nn_loc, local_n_num, ne_loc, local_el_num, xs, ys, zs, nel_dg_loc, nel_dg_glo, i4count, mpi_id, mpi_comm, mpi_np, alfa11, alfa12, alfa13, alfa21, alfa22, alfa23, alfa31, alfa32, alfa33, beta11, beta12, beta13, beta21, beta22, beta23, beta31, beta32, beta33, gamma1, gamma2, gamma3, delta1, delta2, delta3, dg_cnst, penalty_c, faces, area_nodes, el_new, filename, testmode)
Creates data structure for dg elements.
subroutine make_dg_loc_numeration(nnloc, loc_n_num, cs_nnz, cs_loc, neloc, loc_el_num, mpi_
Local numeration for DG elements.
subroutine make_spx_con_dg(cs_dg, nnz_dg, tot_el, np, mpi_file)
Makes connectivity vector for DG elements.
subroutine read_faces(filename, fac, nodes, n, mpi_id, mpi_com)
Reads FACES.input.
subroutine setup_dg4mpi(el_new, nel_dg_loc, nel_dg_glo, mpi_id, mpi_comm, mpi_np, cs_nnz_loc, cs_loc, ne_loc, local_el_num, local_n_num, nn_loc, total_cs_nnz_mpi, total_el, mpi_file)
Writes DGCSXXXXXX.mpi files for DG connectivity.
subroutine setup_dg(nm, sd, tag_mat, cs_nnz_loc, cs_loc, nn_loc, local_n_num, ne_loc, local_el_num, xs, ys, zs, nel_dg_loc, nel_dg_glo, i4count, mpi_id, mpi_comm, alfa11, alfa12, alfa13, alfa21, alfa22, alfa23, alfa31, alfa32, alfa33, beta11, beta12, beta13, beta21, beta22, beta23, beta31, beta32, beta33, gamma1, gamma2, gamma3, delta1, delta2, delta3, faces, area_nodes)
Setup for DG faces.
Definition SETUP_DG.f90:115
subroutine setup_dg_elem(nm, sd, tag_mat, cs_nnz_loc, cs_loc, nn_loc, local_n_num, ne_loc, local_el_num, xs, ys, zs, nel_dg_loc, nel_dg_glo, i4count, mpi_id, mpi_comm, mpi_np, alfa11, alfa12, alfa13, alfa21, alfa22, alfa23, alfa31, alfa32, alfa33, beta11, beta12, beta13, beta21, beta22, beta23, beta31, beta32, beta33, gamma1, gamma2, gamma3, delta1, delta2, delta3, dg_els, scratch_dg_els, tag_dg_el, tag_dg_yn, tag_dg_link, tag_dg_frc, val_dg_frc, nload_dg, con_bc, nface, mpi_file)
Setup for DG data structure.
subroutine setup_mpi_jump(ne_dg_loc, el_new, nnode, node_proc, nel_loc, loc_el_num, nnloc, loc_n_num, ncs, cs, nsend_jump, node_send_jump, nrecv_jump, node_recv_jump, nproc, proc_send_jump, proc_recv_jump, id, mpi_file)
Routine used to setup the communication buffer structure.
subroutine write_file_dgfs(nm, sd, tag_mat, cs_nnz_loc, cs_loc, nn_loc, local_n_num, ne_loc, local_el_num, xs, ys, zs, nel_dg_loc, nel_dg_glo, mpi_id, mpi_comm, mpi_np, alfa11, alfa12, alfa13, alfa21, alfa22, alfa23, alfa31, alfa32, alfa33, beta11, beta12, beta13, beta21, beta22, beta23, beta31, beta32, beta33, gamma1, gamma2, gamma3, delta1, delta2, delta3, faces, area_nodes, dg_els, scratch_dg_els, filename, mpi_file)
Writes file DGFS.input, containing infos for computing integrals on DG interfaces.
subroutine write_file_faces(mpi_file, filename, faces, nodes, n, ng, mpi_id, mpi_com, cfaces, np)
Writes file FACSXXXXX.mpi and stores info about DG surfaces.
Contains structure for jump matrices.
Definition MODULES.f90:155
Set maximal bounds.
Definition MODULES.f90:54
Contains SPEED paramters (used in MAKE_DG_INTERFACE_CONDITIONS)
Definition MODULES.f90:498
type(el4loop), dimension(:), allocatable el_new
Definition MODULES.f90:507
type(element), dimension(:), allocatable dg_els
Definition MODULES.f90:508
type(scratch_element), dimension(:), allocatable scratch_dg_els
Definition MODULES.f90:509
Contains SPEED PARAMETERS used in (SPEED, READ_INPUT_FILES, MAKE_PARTION_AND_MPI_FILES,...
Definition MODULES.f90:207
integer *4 total_els
Definition MODULES.f90:269
integer *4 nelem_dg_glo
Definition MODULES.f90:269
real *8, dimension(:), allocatable delta2
Definition MODULES.f90:408
integer *4 nmat
Definition MODULES.f90:269
integer *4 unit_mpi
Definition MODULES.f90:308
real *8, dimension(:), allocatable gamma3
Definition MODULES.f90:408
integer *4, dimension(:), allocatable local_el_num
Definition MODULES.f90:322
integer *4 nrecv_jump
Definition MODULES.f90:269
real *8 dg_c
Definition MODULES.f90:393
integer *4, dimension(:), allocatable i4count
Definition MODULES.f90:375
integer *4 nnod
Definition MODULES.f90:269
real *8, dimension(:), allocatable gamma2
Definition MODULES.f90:408
integer *4 con_nnz_bc_loc
Definition MODULES.f90:269
integer *4, dimension(:), allocatable tag_dg_frc
Definition MODULES.f90:335
real *8, dimension(:), allocatable delta3
Definition MODULES.f90:408
real *8, dimension(:), allocatable alfa23
Definition MODULES.f90:408
integer *4, dimension(:), allocatable tag_dg_yn
Definition MODULES.f90:335
real *8, dimension(:), allocatable beta13
Definition MODULES.f90:408
integer *4 testmode
Definition MODULES.f90:308
character *70 file_mpi_new
Definition MODULES.f90:243
real *8, dimension(:,:), allocatable prop_mat
Definition MODULES.f90:463
real *8, dimension(:), allocatable alfa33
Definition MODULES.f90:408
real *8, dimension(:), allocatable alfa11
Definition MODULES.f90:408
integer *4 con_nnz_loc
Definition MODULES.f90:269
integer *4, dimension(:), allocatable local_node_num_dg
Definition MODULES.f90:322
real *8, dimension(:), allocatable beta21
Definition MODULES.f90:408
integer *4, dimension(:), allocatable count_faces
Definition MODULES.f90:322
integer *4, dimension(:), allocatable node_domain
Definition MODULES.f90:322
character *70 mpi_file
Definition MODULES.f90:243
real *8, dimension(:), allocatable delta1
Definition MODULES.f90:408
real *8, dimension(:), allocatable beta23
Definition MODULES.f90:408
integer *4 nsend_jump
Definition MODULES.f90:269
integer *4 nnode_dg
Definition MODULES.f90:269
real *8, dimension(:), allocatable zz_spx_loc
Definition MODULES.f90:408
integer *4 i
Definition MODULES.f90:263
integer *4, dimension(:,:), allocatable faces
Definition MODULES.f90:383
real *8, dimension(:), allocatable yy_spx_loc
Definition MODULES.f90:408
real *8, dimension(:), allocatable alfa13
Definition MODULES.f90:408
real *8, dimension(:), allocatable beta12
Definition MODULES.f90:408
integer *4, dimension(:), allocatable proc_recv_jump
Definition MODULES.f90:368
integer *4 nface
Definition MODULES.f90:269
integer *4, dimension(:), allocatable con_spx_bc_loc
Definition MODULES.f90:322
real *8, dimension(:), allocatable beta11
Definition MODULES.f90:408
character *70 file_face
Definition MODULES.f90:243
real *8, dimension(:), allocatable alfa31
Definition MODULES.f90:408
integer *4, dimension(:), allocatable proc_send_jump
Definition MODULES.f90:368
integer *4 torf
Definition MODULES.f90:298
integer *4 mpi_comm
Definition MODULES.f90:308
character *70 file_mpi
Definition MODULES.f90:243
integer *4, dimension(:), allocatable local_node_num
Definition MODULES.f90:322
integer *4 mpi_ierr
Definition MODULES.f90:298
real *8, dimension(:,:), allocatable val_dg_frc
Definition MODULES.f90:463
integer *4, dimension(:), allocatable sdeg_mat
Definition MODULES.f90:335
real *8, dimension(:), allocatable beta22
Definition MODULES.f90:408
real *8, dimension(:), allocatable beta31
Definition MODULES.f90:408
integer *4 nelem_loc
Definition MODULES.f90:269
integer *4, dimension(:), allocatable con_spx_loc
Definition MODULES.f90:322
real *8, dimension(:), allocatable alfa21
Definition MODULES.f90:408
logical filefound
Definition MODULES.f90:217
integer *4, dimension(:), allocatable tag_dg_el
Definition MODULES.f90:335
real *8, dimension(:), allocatable alfa22
Definition MODULES.f90:408
real *8, dimension(:), allocatable beta33
Definition MODULES.f90:408
integer *4, dimension(:), allocatable node_recv_jump
Definition MODULES.f90:368
real *8 pen_c
Definition MODULES.f90:393
integer *4, dimension(:), allocatable con_spx_dg
Definition MODULES.f90:322
integer *4, dimension(:), allocatable tag_mat
Definition MODULES.f90:335
integer *4, dimension(:), allocatable node_send_jump
Definition MODULES.f90:368
real *8, dimension(:), allocatable gamma1
Definition MODULES.f90:408
integer *4 con_nnz_dg
Definition MODULES.f90:269
integer *4 mpi_np
Definition MODULES.f90:308
integer *4 mpi_id
Definition MODULES.f90:308
real *8, dimension(:), allocatable alfa32
Definition MODULES.f90:408
integer *4, dimension(:,:), allocatable con_bc
Definition MODULES.f90:383
integer *4 nnod_loc
Definition MODULES.f90:269
real *8, dimension(:), allocatable xx_spx_loc
Definition MODULES.f90:408
character *70 head_file
Definition MODULES.f90:243
real *8, dimension(:), allocatable beta32
Definition MODULES.f90:408
integer *4, dimension(:), allocatable tag_dg_link
Definition MODULES.f90:335
integer *4 nload_dg_el
Definition MODULES.f90:269
real *8, dimension(:,:), allocatable area_nodes
Definition MODULES.f90:480
real *8, dimension(:), allocatable alfa12
Definition MODULES.f90:408
integer *4 nelem_dg
Definition MODULES.f90:269
Contains mesh structure (scratch)
Definition MODULES.f90:67
Contains mesh structure for DG interface elements.
Definition MODULES.f90:84