SPEED
READ_SYSTEM_POSITION.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
23
25
26 use speed_par
27 use speed_sci, only : sdofnum, rot_sin, rot_cos
28
29 implicit none
30
31 include 'SPEED.MPI'
32
33 real*8, dimension(:), allocatable :: rot_theta
34
35 if (sys_lst.eq.1) then
36 if (nelem_loc .gt. 0) then
38 endif
42 endif
43
44
45 if (mpi_id.eq.0) then
46 write(*,'(A)')
47 write(*,'(A)') '--------------------SDOF System location--------------------'
48 endif
49
50
51!*****************************************************************************************
52! OSCILLATOR POSITION
53!*****************************************************************************************
54
55 sdofnum = 0
56
57 if (sys_lst .eq. 1) then
58
59 file_sys = 'SYS.input'
61
62 if (sdofnum.gt.0) then
63
66 allocate(rot_sin(sdofnum), rot_cos(sdofnum), rot_theta(sdofnum))
68
70
71 !Modified, so that In a simulation both types of Point sources (usual point sources and SDOF Oscillators) can be used (-SS)
72 ! do i=1,SDOFnum
73 ! do j=1,nload_poiX_el
74 ! if(system_label(i).eq.building_id_x(j)) then
75 ! val_poiX_el(j,1) = x_system_lst(i); val_poiX_el(j,2) = y_system_lst(i); val_poiX_el(j,3) = z_system_lst(i);
76 ! endif
77 ! enddo
78 ! do j=1,nload_poiY_el
79 ! if(system_label(i).eq.building_id_y(j)) then
80 ! val_poiY_el(j,1) = x_system_lst(i); val_poiY_el(j,2) = y_system_lst(i); val_poiY_el(j,3) = z_system_lst(i);
81 ! endif
82 ! enddo
83 ! do j=1,nload_poiZ_el
84 ! if(system_label(i).eq.building_id_z(j)) then
85 ! val_poiZ_el(j,1) = x_system_lst(i); val_poiZ_el(j,2) = y_system_lst(i); val_poiZ_el(j,3) = z_system_lst(i);
86 ! endif
87 ! enddo
88 ! enddo
89
90 if (file_sys_lst.eq.0) then ! NO input file with the position of oscillators
92
93 do i = 1,sdofnum
94
98
107
108
114
115 enddo
116
117 j = 1
118
119 do while(j .le. sdofnum)
123
124 call mpi_barrier(mpi_comm, mpi_ierr)
125 call mpi_allgather(dist_system_lst(j), 1, speed_double, dist_system_glo, 1, speed_double, mpi_comm, mpi_ierr)
126 call mpi_allgather(xr_system_lst(j), 1, speed_double, xr_system_glo, 1, speed_double, mpi_comm, mpi_ierr)
127 call mpi_allgather(yr_system_lst(j), 1, speed_double, yr_system_glo, 1, speed_double, mpi_comm, mpi_ierr)
128 call mpi_allgather(zr_system_lst(j), 1, speed_double, zr_system_glo, 1, speed_double, mpi_comm, mpi_ierr)
129 call mpi_allgather(n_system_lst(j), 1, speed_integer, n_system_glo, 1, speed_integer, mpi_comm, mpi_ierr)
130 call mpi_allgather(el_system_lst(j), 1, speed_integer, el_system_glo, 1, speed_integer, mpi_comm, mpi_ierr)
131 call mpi_allgather(x_system_real(j), 1, speed_double, x_system_glo_real, 1, speed_double, mpi_comm, mpi_ierr)
132 call mpi_allgather(y_system_real(j), 1, speed_double, y_system_glo_real, 1, speed_double, mpi_comm, mpi_ierr)
133 call mpi_allgather(z_system_real(j), 1, speed_double, z_system_glo_real, 1, speed_double, mpi_comm, mpi_ierr)
134
136
137 ! Do we really need this step? the partition containing nearest node is already saved in n_system_lst
139
147
148 j=j+1
149
152 enddo
153
154 deallocate(dist_system_lst)
155
156 if(mpi_id.eq. 0) then
157
158 file_syslst = 'SLST.input'
159 call write_file_mpgm_sys(file_syslst, sdofnum, n_system_lst, el_system_lst, &
161
162 sys_filename = 'SLST.position'
163 call write_file_mpgm_sys(sys_filename, sdofnum, n_system_lst, el_system_lst, &
165
166 endif
167
169
170 else ! YES, it exists an input file with the position of LST monitors
171
172 file_syslst = 'SLST.input'
175
176 endif
177
178 deallocate(highest_sys_lst_loc)
179
180 endif
181 else
182 write(*,'(A)') 'SYSLST key not found!'
183
184 endif
185
186 if (mpi_id.eq.0) then
187 write(*,'(A)')
188 write(*,'(A,I10)') 'SYStem positionLST: ',sdofnum
189 write(*,'(A,I2)') 'File SYSLST : ',file_sys_lst
190 endif
191
192 call mpi_barrier(mpi_comm, mpi_ierr)
193
194 do i=1,sdofnum
195 rot_sin(i) = dsin(rot_theta(i))
196 rot_cos(i) = dcos(rot_theta(i))
197 enddo
198 deallocate(rot_theta)
199
200 !-----------------------------------------------------------------------------------
201 ! Mapping SDOF oscillators to nearest LGL nodes
202 !------------------------------------------------------------------------------------
203 ! node_counter_sdof = number of partitions sharing the LGL node where SDOF point load is applied
208
209 !----------------------------------------------------------------------------------
210 ! WRITING SDOF_SYSTEM.INFO
211 !----------------------------------------------------------------------------------
212
213 if(mpi_id .eq. 0) then
214
215 allocate(system_files(mpi_np))
216 system_files = 0
217
218 do i = 1, sdofnum
219 !write(*,*) 'el_system_lst(i) ', el_system_lst(i), 'elem_domain ', elem_domain(el_system_lst(i)), 'system files ', system_files(elem_domain(el_system_lst(i))+1)
221 enddo
222
223 if(len_trim(monitor_file) .ne. 70) then
224 monitor_file_new = monitor_file(1:len_trim(monitor_file)) // '/SDOF_SYSTEM.INFO'
225 else
226 monitor_file_new = 'SDOF_SYSTEM.INFO'
227 endif
228
229
230 open(unit=50,file=monitor_file_new)
231 write(50,*) mpi_np
232 write(50,*) sdofnum
233 do i = 1, mpi_np
234 write(50,*) system_files(i)
235 enddo
236 close(50)
237
238 deallocate(system_files)
239 endif
240
241
242end subroutine read_system_position
subroutine get_highest_node(nn_loc, ne_loc, zz_loc, loc_n_num, nnz
Computes the highest node of the mesh (z-dir)
subroutine get_indloc_from_indglo(local_el, nel_loc, ie, ic)
Returns local id from global id.
subroutine get_minvalues(i_glo, v_glo, n_glo, i_loc, n_loc, np)
Computes positions of minimum values.
subroutine get_nearest_node_pgm(nloc, xs, ys, zs, xt, yt, zt, nt, dist_min
Computes the nearest node with respet to (xt,yt,zt) starting from a given elevation.
subroutine get_pnt_pos_pgm(nb_el, aa11, aa12, aa13, aa21, aa22, aa23, aa31, aa32, aa33, bb11, bb12, bb13, bb21, bb22, bb23, bb31, bb32, bb33, gg1, gg2, gg3, dd1, dd2, dd3, x_true, y_true, z_true, el, xref, yref, zref,
Findes node coordinates in the reference element.
subroutine make_system_position_lglnodes(nn_loc, local_node_num, cs_nnz_loc, cs_loc, xs_loc, ys_loc, zs_loc, nsdof, sys_label, x_system_lst, y_system_lst, z_system_lst, mpi_id, mpi_comm, mpi_np)
Reads oscillator position from SYS.input, and finds to which local-LGL node it should be applied.
subroutine read_dime_filepg(filec, num_nodes)
Reads dimension of monitor files.
subroutine read_filesys(filec, num_nodes, label, x, y, z, axis_rot)
Reads SYS.input file.
subroutine read_file_mpgm_sys(filec, sdofnum, n_monitor_pgm, el_monitor_pgm, xr_monitor_pgm, yr_monitor_pgm, zr_monitor_pgm, axi
Reads files such as MLST.input, MLST.position or MPGM.input.
subroutine read_system_position()
Reads oscillator position and writes SYSLST.input file.
Contains SPEED PARAMETERS used in (SPEED, READ_INPUT_FILES, MAKE_PARTION_AND_MPI_FILES,...
Definition MODULES.f90:207
real *8, dimension(:), allocatable yr_system_glo
Definition MODULES.f90:417
real *8, dimension(:), allocatable x_system_real
Definition MODULES.f90:417
real *8, dimension(:), allocatable delta2
Definition MODULES.f90:408
integer *4 nmat
Definition MODULES.f90:269
real *8, dimension(:), allocatable gamma3
Definition MODULES.f90:408
integer *4, dimension(:), allocatable local_el_num
Definition MODULES.f90:322
real *8, dimension(:), allocatable gamma2
Definition MODULES.f90:408
real *8, dimension(:), allocatable delta3
Definition MODULES.f90:408
real *8, dimension(:), allocatable alfa23
Definition MODULES.f90:408
real *8, dimension(:), allocatable z_system_glo_real
Definition MODULES.f90:417
real *8, dimension(:), allocatable beta13
Definition MODULES.f90:408
integer *4 j
Definition MODULES.f90:263
character *70 monitor_file_new
Definition MODULES.f90:243
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 sys_lst
Definition MODULES.f90:269
real *8, dimension(:), allocatable z_system_real
Definition MODULES.f90:417
real *8, dimension(:), allocatable zr_system_glo
Definition MODULES.f90:417
real *8, dimension(:), allocatable beta21
Definition MODULES.f90:408
real *8, dimension(:), allocatable delta1
Definition MODULES.f90:408
character *70 file_syslst
Definition MODULES.f90:243
real *8, dimension(:), allocatable beta23
Definition MODULES.f90:408
character *70 file_sys
Definition MODULES.f90:243
real *8, dimension(:), allocatable zz_spx_loc
Definition MODULES.f90:408
integer *4 i
Definition MODULES.f90:263
integer *4, dimension(:), allocatable el_system_lst
Definition MODULES.f90:358
real *8, dimension(:), allocatable y_system_lst
Definition MODULES.f90:417
real *8, dimension(:), allocatable yr_system_lst
Definition MODULES.f90:417
integer *4 ic
Definition MODULES.f90:263
real *8, dimension(:), allocatable yy_spx_loc
Definition MODULES.f90:408
integer *4, dimension(:), allocatable n_system_glo
Definition MODULES.f90:322
real *8, dimension(:), allocatable alfa13
Definition MODULES.f90:408
real *8, dimension(:), allocatable beta12
Definition MODULES.f90:408
character *70 monitor_file
Definition MODULES.f90:243
real *8, dimension(:), allocatable beta11
Definition MODULES.f90:408
real *8, dimension(:), allocatable alfa31
Definition MODULES.f90:408
integer *4 mpi_comm
Definition MODULES.f90:308
integer *4, dimension(:), allocatable local_node_num
Definition MODULES.f90:322
real *8, dimension(:), allocatable dist_system_glo
Definition MODULES.f90:417
integer *4 mpi_ierr
Definition MODULES.f90:298
real *8, dimension(:), allocatable zr_system_lst
Definition MODULES.f90:417
integer *4, dimension(:), allocatable system_files
Definition MODULES.f90:358
real *8 depth_search_sys_lst
Definition MODULES.f90:393
integer *4, dimension(:), allocatable sdeg_mat
Definition MODULES.f90:335
real *8, dimension(:), allocatable x_system_lst
Definition MODULES.f90:417
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
real *8, dimension(:), allocatable x_system_glo_real
Definition MODULES.f90:417
character *70 sys_filename
Definition MODULES.f90:243
integer *4, dimension(:), allocatable el_system_glo
Definition MODULES.f90:322
real *8, dimension(:), allocatable alfa22
Definition MODULES.f90:408
real *8, dimension(:), allocatable beta33
Definition MODULES.f90:408
integer *4, dimension(:), allocatable tag_mat
Definition MODULES.f90:335
real *8, dimension(:), allocatable xr_system_glo
Definition MODULES.f90:417
real *8, dimension(:), allocatable gamma1
Definition MODULES.f90:408
real *8, dimension(:), allocatable y_system_real
Definition MODULES.f90:417
real *8, dimension(:), allocatable xr_system_lst
Definition MODULES.f90:417
real *8, dimension(:), allocatable dist_system_lst
Definition MODULES.f90:417
integer *4 mpi_np
Definition MODULES.f90:308
real *8, dimension(:), allocatable y_system_glo_real
Definition MODULES.f90:417
integer *4 mpi_id
Definition MODULES.f90:308
real *8, dimension(:), allocatable alfa32
Definition MODULES.f90:408
integer *4 nnod_loc
Definition MODULES.f90:269
integer *4, dimension(:), allocatable system_label
Definition MODULES.f90:322
real *8, dimension(:), allocatable xx_spx_loc
Definition MODULES.f90:408
integer *4, dimension(:), allocatable n_system_lst
Definition MODULES.f90:358
real *8, dimension(:), allocatable beta32
Definition MODULES.f90:408
integer *4 file_sys_lst
Definition MODULES.f90:298
integer *4, dimension(:), allocatable elem_domain
Definition MODULES.f90:322
real *8, dimension(:), allocatable z_system_lst
Definition MODULES.f90:417
real *8, dimension(:), allocatable alfa12
Definition MODULES.f90:408
real *8, dimension(:), allocatable highest_sys_lst_loc
Definition MODULES.f90:417
Contains parameters for MDOF.
Definition MODULES.f90:725
real *8, dimension(:), allocatable rot_sin
Definition MODULES.f90:780
real *8, dimension(:), allocatable rot_cos
Definition MODULES.f90:780
integer *4 sdofnum
Definition MODULES.f90:772