Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SPLT_SplitGrid.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: split single grid into multiple regions.
26 !
27 ! Description: none.
28 !
29 ! Input: splitDirection = direction (i,j,k) in which the grid is to be splitted
30 ! regionsOld = single grid and topology.
31 !
32 ! Output: regionsNew = splitted grid.
33 !
34 ! Notes: none.
35 !
36 !******************************************************************************
37 !
38 ! $Id: SPLT_SplitGrid.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 splitgrid( splitDirection,regionsOld,regionsNew )
45 
46  USE moddatatypes
47  USE moddatastruct, ONLY : t_region
48  USE modglobal, ONLY : t_global
49  USE modgrid, ONLY : t_grid
51  USE moderror
52  USE modparameters
53  IMPLICIT NONE
54 
55 #include "Indexing.h"
56 
57 ! ... parameters
58  INTEGER :: splitdirection
59 
60  TYPE(t_region), POINTER :: regionsold(:), regionsnew(:)
61 
62 ! ... loop variables
63  INTEGER :: ireg, i, j, k
64 
65 ! ... local variables
66  INTEGER :: idnbeg, idnend, jdnbeg, jdnend, kdnbeg, kdnend, inoff, ijnoff
67  INTEGER :: idnbegold, idnendold, jdnbegold, jdnendold, kdnbegold, kdnendold, &
68  inoffold, ijnoffold, errorflag
69  INTEGER :: ibn, ien, ijkn, ijknold, ii, jj, kk, ncells, npatches
70 
71  TYPE(t_global), POINTER :: globalnew
72  TYPE(t_grid), POINTER :: gridold, gridnew
73 
74 !******************************************************************************
75 
76  globalnew => regionsnew(1)%global
77 
78  CALL registerfunction( globalnew,'SplitGrid',&
79  'SPLT_SplitGrid.F90' )
80 
81 ! allocate memory for new grid; set dimensions --------------------------------
82 
83  gridold => regionsold(1)%levels(1)%grid
84  npatches = regionsold(1)%nPatches + 2 ! max. number of patches
85 
86  DO ireg=1,globalnew%nRegions
87 
88  ALLOCATE( regionsnew(ireg)%levels(1),stat=errorflag )
89  ALLOCATE( regionsnew(ireg)%levels(1)%patches(npatches),stat=errorflag )
90  globalnew%error = errorflag
91  IF (globalnew%error /= 0) CALL errorstop( globalnew,err_allocate,__line__ )
92 
93  gridnew => regionsnew(ireg)%levels(1)%grid
94 
95  IF (splitdirection == 1) THEN
96  gridnew%ipc = gridold%ipc/globalnew%nRegions
97  gridnew%jpc = gridold%jpc
98  gridnew%kpc = gridold%kpc
99  IF (ireg == globalnew%nRegions) THEN
100  gridnew%ipc = gridold%ipc - gridnew%ipc*(globalnew%nRegions-1)
101  ENDIF
102  ELSE IF (splitdirection == 2) THEN
103  gridnew%ipc = gridold%ipc
104  gridnew%jpc = gridold%jpc/globalnew%nRegions
105  gridnew%kpc = gridold%kpc
106  IF (ireg == globalnew%nRegions) THEN
107  gridnew%jpc = gridold%jpc - gridnew%jpc*(globalnew%nRegions-1)
108  ENDIF
109  ELSE
110  gridnew%ipc = gridold%ipc
111  gridnew%jpc = gridold%jpc
112  gridnew%kpc = gridold%kpc/globalnew%nRegions
113  IF (ireg == globalnew%nRegions) THEN
114  gridnew%kpc = gridold%kpc - gridnew%kpc*(globalnew%nRegions-1)
115  ENDIF
116  ENDIF
117  regionsnew(ireg)%nGridLevels = regionsold(1)%nGridLevels
118  regionsnew(ireg)%nDumCells = 0
119  regionsnew(ireg)%nPatches = 0
120 
121  CALL rflo_getdimensdummynodes( regionsnew(ireg),1,idnbeg,idnend, &
122  jdnbeg,jdnend,kdnbeg,kdnend )
123  CALL rflo_getnodeoffset( regionsnew(ireg),1,inoff,ijnoff )
124  ibn = indijk(idnbeg,jdnbeg,kdnbeg,inoff,ijnoff)
125  ien = indijk(idnend,jdnend,kdnend,inoff,ijnoff)
126  ALLOCATE( gridnew%xyz(3,ibn:ien),stat=errorflag )
127  globalnew%error = errorflag
128  IF (globalnew%error /= 0) CALL errorstop( globalnew,err_allocate,__line__ )
129 
130  ENDDO ! iReg
131 
132 ! copy grid to new regions ----------------------------------------------------
133 
134  gridold => regionsold(1)%levels(1)%grid
135  CALL rflo_getdimensdummynodes( regionsold(1),1,idnbegold,idnendold, &
136  jdnbegold,jdnendold,kdnbegold,kdnendold )
137  CALL rflo_getnodeoffset( regionsold(1),1,inoffold,ijnoffold )
138 
139  DO ireg=1,globalnew%nRegions
140 
141  gridnew => regionsnew(ireg)%levels(1)%grid
142  CALL rflo_getdimensdummynodes( regionsnew(ireg),1,idnbeg,idnend, &
143  jdnbeg,jdnend,kdnbeg,kdnend )
144  CALL rflo_getnodeoffset( regionsnew(ireg),1,inoff,ijnoff )
145 
146  DO k=kdnbeg,kdnend
147  DO j=jdnbeg,jdnend
148  DO i=idnbeg,idnend
149  ijkn = indijk(i,j,k,inoff,ijnoff)
150  IF (splitdirection == 1) THEN
151  ncells = gridold%ipc/globalnew%nRegions
152  ii = i + (ireg-1)*ncells
153  ijknold = indijk(ii,j,k,inoffold,ijnoffold)
154  ELSE IF (splitdirection == 2) THEN
155  ncells = gridold%jpc/globalnew%nRegions
156  jj = j + (ireg-1)*ncells
157  ijknold = indijk(i,jj,k,inoffold,ijnoffold)
158  ELSE
159  ncells = gridold%kpc/globalnew%nRegions
160  kk = k + (ireg-1)*ncells
161  ijknold = indijk(i,j,kk,inoffold,ijnoffold)
162  ENDIF
163  gridnew%xyz(xcoord,ijkn) = gridold%xyz(xcoord,ijknold)
164  gridnew%xyz(ycoord,ijkn) = gridold%xyz(ycoord,ijknold)
165  gridnew%xyz(zcoord,ijkn) = gridold%xyz(zcoord,ijknold)
166  ENDDO
167  ENDDO
168  ENDDO
169 
170  ENDDO ! iReg
171 
172 ! finalize --------------------------------------------------------------------
173 
174  CALL deregisterfunction( globalnew )
175 
176 END SUBROUTINE splitgrid
177 
178 !******************************************************************************
179 !
180 ! RCS Revision history:
181 !
182 ! $Log: SPLT_SplitGrid.F90,v $
183 ! Revision 1.4 2008/12/06 08:44:51 mtcampbe
184 ! Updated license.
185 !
186 ! Revision 1.3 2008/11/19 22:18:01 mtcampbe
187 ! Added Illinois Open Source License/Copyright
188 !
189 ! Revision 1.2 2004/12/03 03:33:31 wasistho
190 ! rflo_modinterfacessplit to splt_modinterfaces
191 !
192 ! Revision 1.1 2004/12/03 02:41:15 wasistho
193 ! added prefix
194 !
195 ! Revision 1.1 2004/12/03 00:45:30 wasistho
196 ! lower to upper case
197 !
198 ! Revision 1.6 2003/05/15 02:57:07 jblazek
199 ! Inlined index function.
200 !
201 ! Revision 1.5 2003/03/20 22:32:37 haselbac
202 ! Renamed ModInterfaces
203 !
204 ! Revision 1.4 2003/03/20 19:45:54 haselbac
205 ! Corrected mistake in phased check-in
206 !
207 ! Revision 1.3 2002/10/12 03:20:51 jblazek
208 ! Replaced [io]stat=global%error with local errorFlag for Rocflo.
209 !
210 ! Revision 1.2 2002/09/05 17:40:22 jblazek
211 ! Variable global moved into regions().
212 !
213 ! Revision 1.1 2002/07/12 21:50:08 jblazek
214 ! Added tool to split single grid into multiple regions.
215 !
216 !******************************************************************************
217 
218 
219 
220 
221 
222 
223 
j indices k indices k
Definition: Indexing.h:6
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 jdnbeg
**********************************************************************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 idnend
subroutine rflo_getnodeoffset(region, iLev, iNodeOffset, ijNodeOffset)
**********************************************************************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 jdnend
**********************************************************************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 idnbeg
blockLoc i
Definition: read.cpp:79
j indices j
Definition: Indexing.h:6
subroutine rflo_getdimensdummynodes(region, iLev, idnbeg, idnend, jdnbeg, jdnend, kdnbeg, kdnend)
subroutine splitgrid(splitDirection, regionsOld, regionsNew)
subroutine errorstop(global, errorCode, errorLine, addMessage)
Definition: ModError.F90:483
subroutine deregisterfunction(global)
Definition: ModError.F90:469
**********************************************************************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 kdnbeg