Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SPLT_SplitTopology.F90
Go to the documentation of this file.
1 ! *********************************************************************
2 ! * Rocstar Simulation Suite *
3 ! * Copyright@2015, Illinois Rocstar LLC. All rights reserved. *
4 ! * *
5 ! * Illinois Rocstar LLC *
6 ! * Champaign, IL *
7 ! * www.illinoisrocstar.com *
8 ! * sales@illinoisrocstar.com *
9 ! * *
10 ! * License: See LICENSE file in top level of distribution package or *
11 ! * http://opensource.org/licenses/NCSA *
12 ! *********************************************************************
13 ! *********************************************************************
14 ! * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, *
15 ! * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES *
16 ! * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND *
17 ! * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR *
18 ! * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
19 ! * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
20 ! * Arising FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE *
21 ! * USE OR OTHER DEALINGS WITH THE SOFTWARE. *
22 ! *********************************************************************
23 !******************************************************************************
24 !
25 ! Purpose: generate new topology for the splitted grid.
26 !
27 ! Description: none.
28 !
29 ! Input: splitDirection = direction (i,j,k) in which the grid is to be splitted
30 ! regionsOld = old topology.
31 !
32 ! Output: regionsNew = new topology.
33 !
34 ! Notes: none.
35 !
36 !******************************************************************************
37 !
38 ! $Id: SPLT_SplitTopology.F90,v 1.4 2008/12/06 08:44:51 mtcampbe Exp $
39 !
40 ! Copyright: (c) 2001 by the University of Illinois
41 !
42 !******************************************************************************
43 
44 SUBROUTINE splittopology( splitDirection,regionsOld,regionsNew )
45 
46  USE moddatatypes
47  USE modbndpatch, ONLY : t_patch
48  USE moddatastruct, ONLY : t_region
49  USE modglobal, ONLY : t_global
50  USE modgrid, ONLY : t_grid
52  USE moderror
53  USE modparameters
54  IMPLICIT NONE
55 
56 ! ... parameters
57  INTEGER :: splitdirection
58 
59  TYPE(t_region), POINTER :: regionsold(:), regionsnew(:)
60 
61 ! ... loop variables
62  INTEGER :: ireg, ipatchold
63 
64 ! ... local variables
65  INTEGER :: lbound, l1beg, l1end, l2beg, l2end
66  INTEGER :: ibeg, iend, jbeg, jend, kbeg, kend, ipatch
67 
68  TYPE(t_global), POINTER :: globalnew
69  TYPE(t_grid) , POINTER :: gridold, gridnew
70  TYPE(t_patch), POINTER :: patchold, patchnew
71 
72 !******************************************************************************
73 
74  globalnew => regionsnew(1)%global
75 
76  CALL registerfunction( globalnew,'SplitTopology',&
77  'SPLT_SplitTopology.F90' )
78 
79 ! copy old patches ------------------------------------------------------------
80 
81  gridold => regionsold(1)%levels(1)%grid
82 
83  DO ipatchold=1,regionsold(1)%nPatches
84  patchold => regionsold(1)%levels(1)%patches(ipatchold)
85  lbound = patchold%lbound
86  l1beg = patchold%l1beg
87  l1end = patchold%l1end
88  l2beg = patchold%l2beg
89  l2end = patchold%l2end
90  ibeg = 1 ! offsets of new regions wrp. to old grid
91  jbeg = 1
92  kbeg = 1
93 
94 ! - loop over all new regions
95 
96  DO ireg=1,globalnew%nRegions
97 
98  gridnew => regionsnew(ireg)%levels(1)%grid
99  iend = ibeg + gridnew%ipc - 1
100  jend = jbeg + gridnew%jpc - 1
101  kend = kbeg + gridnew%kpc - 1
102 
103 ! --- i=const faces
104 
105  IF (lbound==1 .AND. ibeg==1) THEN
106  IF ((l1beg<=jend .AND. l1end>=jbeg) .AND. &
107  (l2beg<=kend .AND. l2end>=kbeg)) THEN
108  regionsnew(ireg)%nPatches = regionsnew(ireg)%nPatches + 1
109  CALL copypatchdata( regionsnew,patchold,splitdirection,ireg, &
110  jbeg,kbeg,gridnew%jpc,gridnew%kpc )
111  ENDIF
112 
113  ELSE IF (lbound==2 .AND. iend==gridold%ipc) THEN
114  IF ((l1beg<=jend .AND. l1end>=jbeg) .AND. &
115  (l2beg<=kend .AND. l2end>=kbeg)) THEN
116  regionsnew(ireg)%nPatches = regionsnew(ireg)%nPatches + 1
117  CALL copypatchdata( regionsnew,patchold,splitdirection,ireg, &
118  jbeg,kbeg,gridnew%jpc,gridnew%kpc )
119  ENDIF
120 
121 ! --- j=const. faces
122 
123  ELSE IF (lbound==3 .AND. jbeg==1) THEN
124  IF ((l1beg<=kend .AND. l1end>=kbeg) .AND. &
125  (l2beg<=iend .AND. l2end>=ibeg)) THEN
126  regionsnew(ireg)%nPatches = regionsnew(ireg)%nPatches + 1
127  CALL copypatchdata( regionsnew,patchold,splitdirection,ireg, &
128  kbeg,ibeg,gridnew%kpc,gridnew%ipc )
129  ENDIF
130 
131  ELSE IF (lbound==4 .AND. jend==gridold%jpc) THEN
132  IF ((l1beg<=kend .AND. l1end>=kbeg) .AND. &
133  (l2beg<=iend .AND. l2end>=ibeg)) THEN
134  regionsnew(ireg)%nPatches = regionsnew(ireg)%nPatches + 1
135  CALL copypatchdata( regionsnew,patchold,splitdirection,ireg, &
136  kbeg,ibeg,gridnew%kpc,gridnew%ipc )
137  ENDIF
138 
139 ! --- k=const. faces
140 
141  ELSE IF (lbound==5 .AND. kbeg==1) THEN
142  IF ((l1beg<=iend .AND. l1end>=ibeg) .AND. &
143  (l2beg<=jend .AND. l2end>=jbeg)) THEN
144  regionsnew(ireg)%nPatches = regionsnew(ireg)%nPatches + 1
145  CALL copypatchdata( regionsnew,patchold,splitdirection,ireg, &
146  ibeg,jbeg,gridnew%ipc,gridnew%jpc )
147  ENDIF
148 
149  ELSE IF (lbound==6 .AND. kend==gridold%kpc) THEN
150  IF ((l1beg<=iend .AND. l1end>=ibeg) .AND. &
151  (l2beg<=jend .AND. l2end>=jbeg)) THEN
152  regionsnew(ireg)%nPatches = regionsnew(ireg)%nPatches + 1
153  CALL copypatchdata( regionsnew,patchold,splitdirection,ireg, &
154  ibeg,jbeg,gridnew%ipc,gridnew%jpc )
155  ENDIF
156  ENDIF ! lbound
157 
158 ! --- increase offsets
159 
160  IF (splitdirection == 1) THEN
161  ibeg = ibeg + gridnew%ipc
162  ELSE IF (splitdirection == 2) THEN
163  jbeg = jbeg + gridnew%jpc
164  ELSE
165  kbeg = kbeg + gridnew%kpc
166  ENDIF
167 
168  ENDDO ! iReg
169 
170  ENDDO ! iPatchOld
171 
172 ! generate connections between regions ----------------------------------------
173 ! faces 2, 4, 6
174 
175  DO ireg=1,globalnew%nRegions-1
176  regionsnew(ireg)%nPatches = regionsnew(ireg)%nPatches + 1
177  ipatch = regionsnew(ireg)%nPatches
178  patchnew => regionsnew(ireg)%levels(1)%patches(ipatch)
179  gridnew => regionsnew(ireg)%levels(1)%grid
180  patchnew%bcType = bc_regionconf
181  patchnew%bcCoupled = 0
182  patchnew%align = .true.
183  patchnew%srcRegion = ireg + 1
184 
185  IF (splitdirection == 1) THEN
186  patchnew%lbound = 2
187  patchnew%l1beg = 1
188  patchnew%l1end = gridnew%jpc
189  patchnew%l2beg = 1
190  patchnew%l2end = gridnew%kpc
191  patchnew%srcLbound = 1
192  patchnew%srcL1beg = 1
193  patchnew%srcL1end = gridnew%jpc
194  patchnew%srcL2beg = 1
195  patchnew%srcL2end = gridnew%kpc
196  ELSE IF (splitdirection == 2) THEN
197  patchnew%lbound = 4
198  patchnew%l1beg = 1
199  patchnew%l1end = gridnew%kpc
200  patchnew%l2beg = 1
201  patchnew%l2end = gridnew%ipc
202  patchnew%srcLbound = 3
203  patchnew%srcL1beg = 1
204  patchnew%srcL1end = gridnew%kpc
205  patchnew%srcL2beg = 1
206  patchnew%srcL2end = gridnew%ipc
207  ELSE
208  patchnew%lbound = 6
209  patchnew%l1beg = 1
210  patchnew%l1end = gridnew%ipc
211  patchnew%l2beg = 1
212  patchnew%l2end = gridnew%jpc
213  patchnew%srcLbound = 5
214  patchnew%srcL1beg = 1
215  patchnew%srcL1end = gridnew%ipc
216  patchnew%srcL2beg = 1
217  patchnew%srcL2end = gridnew%jpc
218  ENDIF
219  ENDDO ! iReg
220 
221 ! faces 1, 3, 5
222 
223  DO ireg=2,globalnew%nRegions
224  regionsnew(ireg)%nPatches = regionsnew(ireg)%nPatches + 1
225  ipatch = regionsnew(ireg)%nPatches
226  patchnew => regionsnew(ireg)%levels(1)%patches(ipatch)
227  gridnew => regionsnew(ireg)%levels(1)%grid
228  patchnew%bcType = bc_regionconf
229  patchnew%bcCoupled = 0
230  patchnew%align = .true.
231  patchnew%srcRegion = ireg - 1
232 
233  IF (splitdirection == 1) THEN
234  patchnew%lbound = 1
235  patchnew%l1beg = 1
236  patchnew%l1end = gridnew%jpc
237  patchnew%l2beg = 1
238  patchnew%l2end = gridnew%kpc
239  patchnew%srcLbound = 2
240  patchnew%srcL1beg = 1
241  patchnew%srcL1end = gridnew%jpc
242  patchnew%srcL2beg = 1
243  patchnew%srcL2end = gridnew%kpc
244  ELSE IF (splitdirection == 2) THEN
245  patchnew%lbound = 3
246  patchnew%l1beg = 1
247  patchnew%l1end = gridnew%kpc
248  patchnew%l2beg = 1
249  patchnew%l2end = gridnew%ipc
250  patchnew%srcLbound = 4
251  patchnew%srcL1beg = 1
252  patchnew%srcL1end = gridnew%kpc
253  patchnew%srcL2beg = 1
254  patchnew%srcL2end = gridnew%ipc
255  ELSE
256  patchnew%lbound = 5
257  patchnew%l1beg = 1
258  patchnew%l1end = gridnew%ipc
259  patchnew%l2beg = 1
260  patchnew%l2end = gridnew%jpc
261  patchnew%srcLbound = 6
262  patchnew%srcL1beg = 1
263  patchnew%srcL1end = gridnew%ipc
264  patchnew%srcL2beg = 1
265  patchnew%srcL2end = gridnew%jpc
266  ENDIF
267  ENDDO ! iReg
268 
269 ! finalize --------------------------------------------------------------------
270 
271  CALL deregisterfunction( globalnew )
272 
273 END SUBROUTINE splittopology
274 
275 !******************************************************************************
276 !
277 ! RCS Revision history:
278 !
279 ! $Log: SPLT_SplitTopology.F90,v $
280 ! Revision 1.4 2008/12/06 08:44:51 mtcampbe
281 ! Updated license.
282 !
283 ! Revision 1.3 2008/11/19 22:18:01 mtcampbe
284 ! Added Illinois Open Source License/Copyright
285 !
286 ! Revision 1.2 2004/12/03 03:33:38 wasistho
287 ! rflo_modinterfacessplit to splt_modinterfaces
288 !
289 ! Revision 1.1 2004/12/03 02:41:15 wasistho
290 ! added prefix
291 !
292 ! Revision 1.1 2004/12/03 00:45:30 wasistho
293 ! lower to upper case
294 !
295 ! Revision 1.6 2003/05/15 02:57:07 jblazek
296 ! Inlined index function.
297 !
298 ! Revision 1.5 2003/03/20 22:32:37 haselbac
299 ! Renamed ModInterfaces
300 !
301 ! Revision 1.4 2003/03/20 19:45:54 haselbac
302 ! Corrected mistake in phased check-in
303 !
304 ! Revision 1.3 2002/09/27 00:57:11 jblazek
305 ! Changed makefiles - no makelinks needed.
306 !
307 ! Revision 1.2 2002/09/05 17:40:22 jblazek
308 ! Variable global moved into regions().
309 !
310 ! Revision 1.1 2002/07/12 21:50:08 jblazek
311 ! Added tool to split single grid into multiple regions.
312 !
313 !******************************************************************************
314 
315 
316 
317 
318 
319 
320 
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE ibeg
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE knode iend
subroutine splittopology(splitDirection, regionsOld, regionsNew)
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE knode jend
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE knode jbeg
subroutine copypatchdata(regionsNew, patchOld, splitDirection, iReg, l1Off, l2Off, l1Cells, l2Cells)
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE knode kbeg
subroutine deregisterfunction(global)
Definition: ModError.F90:469