Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PLAG_CECellsFaceCentroids.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: copy face centroids in corner and edge cells from an adjacent
26 ! region on the same processor
27 !
28 ! Description: none.
29 !
30 ! Input: regions = data of all regions,
31 ! iReg = current region number.
32 !
33 ! Output: plag%fc = face centroids.
34 !
35 ! Notes: None.
36 !
37 !******************************************************************************
38 !
39 ! $Id: PLAG_CECellsFaceCentroids.F90,v 1.4 2008/12/06 08:44:33 mtcampbe Exp $
40 !
41 ! Copyright: (c) 2003 by the University of Illinois
42 !
43 !******************************************************************************
44 
45 SUBROUTINE plag_cecellsfacecentroids( regions, iReg )
46 
47  USE moddatatypes
48  USE moddatastruct, ONLY : t_region, t_level, t_dcell
49  USE modglobal, ONLY : t_global
50  USE modpartlag, ONLY : t_plag
51  USE modindexing, ONLY : getijk
52  USE modinterfaces, ONLY : rflo_getcelloffset, &
56  USE moderror
57  USE modparameters
60  IMPLICIT NONE
61 
62 #include "Indexing.h"
63 
64 ! ... parameters
65  TYPE(t_region), POINTER :: regions(:)
66 
67  INTEGER, INTENT(IN) :: ireg
68 
69 ! ... loop variables
70  INTEGER :: i, icorner, iedge, iface, ijk, j, k
71 
72 ! ... local variables
73  CHARACTER(CHRLEN) :: rcsidentstring
74 
75  INTEGER :: ilev, ncorners, nedges, nfaces
76  INTEGER :: icoff, ijcoff, inoff, ijnoff
77  INTEGER :: icoffsrc, ijcoffsrc, iregsrc
78  INTEGER :: ibeg, iend, jbeg, jend, kbeg, kend
79  INTEGER :: ijkc, ijkccsrc, ijkecsrc
80 
81  INTEGER :: iccsrc, jccsrc, kccsrc
82  INTEGER :: iecsrc, jecsrc, kecsrc
83  INTEGER :: ndumcellssrc
84 
85  INTEGER :: inoffsrc, ijnoffsrc, ijkn, ijkcnsrc, ijkensrc
86  INTEGER :: icnsrc, jcnsrc, kcnsrc
87  INTEGER :: iensrc, jensrc, kensrc
88  INTEGER :: nodecorn, nodecornsrc, nodeedge, nodeedgesrc
89  INTEGER :: ifacesrc, idirsrc, jdirsrc, kdirsrc
90  INTEGER :: srcdir(3),srcface(6)
91  INTEGER :: srcindexmapmat(3,4)
92 
93  REAL(RFREAL), POINTER, DIMENSION(:,:,:) :: pfc, pfcsrc
94 
95  TYPE(t_region), POINTER :: pregion
96  TYPE(t_level), POINTER :: plevel
97  TYPE(t_global), POINTER :: global
98 
99 !******************************************************************************
100 
101  rcsidentstring = &
102  '$RCSfile: PLAG_CECellsFaceCentroids.F90,v $ $Revision: 1.4 $'
103 
104  global => regions(ireg)%global
105 
106  CALL registerfunction( global, 'PLAG_CECellsFaceCentroids',&
107  'PLAG_CECellsFaceCentroids.F90' )
108 
109 ! Get dimensions --------------------------------------------------------------
110 
111  ilev = regions(ireg)%currLevel
112  ncorners = 8
113  nedges = 12
114  nfaces = 6
115 
116 ! Set pointers ----------------------------------------------------------------
117 
118  pregion => regions(ireg)
119  plevel => regions(ireg)%levels(ilev)
120  pfc => regions(ireg)%levels(ilev)%plag%fc
121 
122 ! Get node offset ------------------------------------------------------------
123 
124  CALL rflo_getnodeoffset( pregion,ilev,inoff,ijnoff )
125 
126 ! Loop over edges -------------------------------------------------------------
127 
128  DO iedge=1,nedges
129 
130 ! - Bypass for noninteracting regions -----------------------------------------
131 
132  IF( .NOT. plevel%edgeCells(iedge)%interact ) goto 1999
133 
134 ! -- Bypass for degenerate edge cells -----------------------------------------
135 
136  IF( plevel%edgeCells(iedge)%degenrt /= degenerat_none ) goto 1999
137 
138 ! - Loop over edge cell indices -----------------------------------------------
139 
140  CALL rflo_getedgecellsindices( pregion,ilev,iedge, &
141  ibeg,iend,jbeg,jend,kbeg,kend )
142 
143  ijk = 0
144  DO k=kbeg,kend
145  DO j=jbeg,jend
146  DO i=ibeg,iend
147  ijk = ijk + 1
148  ijkn = indijk(i,j,k,inoff, ijnoff)
149 
150 ! -- Source region infrastructure ----------------------------------------
151 
152  iregsrc = plevel%edgeCells(iedge)%cells(ijk)%srcRegion
153 
154  IF ( iregsrc > 0 ) THEN
155  ijkecsrc = plevel%edgeCells(iedge)%cells(ijk)%srcCell
156  ndumcellssrc = regions(iregsrc)%nDumCells
157 
158  CALL rflo_getcelloffset( regions(iregsrc),ilev,icoffsrc,ijcoffsrc )
159  CALL getijk( ijkecsrc,icoffsrc,ijcoffsrc,ndumcellssrc, &
160  iecsrc,jecsrc,kecsrc )
161 
162  CALL rflo_getnodeoffset( regions(iregsrc),ilev,inoffsrc,ijnoffsrc )
163  ijkensrc = indijk(iecsrc,jecsrc,kecsrc,inoffsrc,ijnoffsrc)
164 
165 ! -- Find face mapping for source region --------------------------------------
166 
167  srcindexmapmat= plevel%edgeCells(iedge)%cells(ijk)%srcIndexMapMat
168 
169  CALL plag_rflo_getfacemapping(srcindexmapmat,srcdir,srcface)
170 
171  idirsrc = srcdir(1); jdirsrc = srcdir(2); kdirsrc = srcdir(3);
172 
173 ! -- Check if both regions are on the same processor --------------------------
174 
175  IF ( regions(iregsrc)%procid == global%myProcid ) THEN
176 
177 ! --- Set pointer for edge cells ----------------------------------------------
178 
179  pfcsrc => regions(iregsrc)%levels(ilev)%plag%fc
180 
181 ! --- Loop over all the Faces -------------------------------------------------
182 ! --- Note: assumption of coordinate alignment between regions removed --------
183 
184  DO iface = 1, nfaces
185  SELECT CASE (iface)
186  CASE(1,3,5)
187  nodeedge = indijk(i,j,k,inoff, ijnoff)
188 
189  CASE(2)
190  nodeedge = indijk(i+1,j,k,inoff, ijnoff)
191 
192  CASE(4)
193  nodeedge = indijk(i,j+1,k,inoff, ijnoff)
194 
195  CASE(6)
196  nodeedge = indijk(i,j,k+1,inoff, ijnoff)
197  END SELECT ! iFace
198 
199  ifacesrc = srcface(iface)
200  SELECT CASE (ifacesrc)
201  CASE(1,3,5)
202  nodeedgesrc = indijk(iecsrc,jecsrc,kecsrc,inoffsrc,ijnoffsrc)
203 
204  CASE(2)
205  nodeedgesrc = indijk(iecsrc+1,jecsrc,kecsrc,inoffsrc,ijnoffsrc)
206 
207  CASE(4)
208  nodeedgesrc = indijk(iecsrc,jecsrc+1,kecsrc,inoffsrc,ijnoffsrc)
209 
210  CASE(6)
211  nodeedgesrc = indijk(iecsrc,jecsrc,kecsrc+1,inoffsrc,ijnoffsrc)
212  END SELECT ! iFaceSrc
213 
214  pfc(1:3,icoord,nodeedge) = pfcsrc(1:3,idirsrc,nodeedgesrc)
215  pfc(1:3,jcoord,nodeedge) = pfcsrc(1:3,jdirsrc,nodeedgesrc)
216  pfc(1:3,kcoord,nodeedge) = pfcsrc(1:3,kdirsrc,nodeedgesrc)
217 
218  ENDDO ! iFace
219 
220  END IF ! procid
221  END IF ! iRegSrc
222 
223  ENDDO ! i
224  ENDDO ! j
225  ENDDO ! k
226 
227 1999 CONTINUE
228 
229  ENDDO ! iEdge
230 
231 ! Loop over corners -----------------------------------------------------------
232 
233  DO icorner=1,ncorners
234 
235 ! - Bypass for noninteracting regions -----------------------------------------
236 
237  IF( .NOT. plevel%cornerCells(icorner)%interact ) goto 2999
238 
239 ! -- Bypass for degenerate corner cells ---------------------------------------
240 
241  IF( plevel%cornerCells(icorner)%degenrt /= degenerat_none ) goto 2999
242 
243 ! - Loop over corner cell indices ---------------------------------------------
244 
245  CALL rflo_getcornercellsindices( pregion,ilev,icorner, &
246  ibeg,iend,jbeg,jend,kbeg,kend )
247 
248  ijk = 0
249  DO k=kbeg,kend
250  DO j=jbeg,jend
251  DO i=ibeg,iend
252  ijk = ijk + 1
253  ijkn = indijk(i,j,k,inoff, ijnoff)
254 
255 ! - Source region infrastructure -----------------------------------------
256 
257  iregsrc = plevel%cornerCells(icorner)%cells(ijk)%srcRegion
258 
259  IF ( iregsrc > 0 ) THEN
260  ijkccsrc = plevel%cornerCells(icorner)%cells(ijk)%srcCell
261  ndumcellssrc = regions(iregsrc)%nDumCells
262 
263  CALL rflo_getcelloffset( regions(iregsrc),ilev,icoffsrc,ijcoffsrc )
264  CALL getijk( ijkccsrc,icoffsrc,ijcoffsrc,ndumcellssrc, &
265  iccsrc,jccsrc,kccsrc )
266 
267  CALL rflo_getnodeoffset( regions(iregsrc),ilev,inoffsrc,ijnoffsrc )
268  ijkcnsrc = indijk(iccsrc,jccsrc,kccsrc,inoffsrc,ijnoffsrc)
269 
270 ! -- Find face mapping for source region --------------------------------------
271 
272  srcindexmapmat= plevel%cornerCells(icorner)%cells(ijk)%srcIndexMapMat
273 
274  CALL plag_rflo_getfacemapping(srcindexmapmat,srcdir,srcface)
275 
276  idirsrc = srcdir(1); jdirsrc = srcdir(2); kdirsrc = srcdir(3);
277 
278 ! -- Check if both regions are on the same processor --------------------------
279 
280  IF ( regions(iregsrc)%procid == global%myProcid ) THEN
281 
282 ! --- Set pointer for corner cells --------------------------------------------
283 
284  pfcsrc => regions(iregsrc)%levels(ilev)%plag%fc
285 
286 ! --- Loop over all the Faces -------------------------------------------------
287 ! --- Note: assumption of coordinate alignment between regions removed --------
288 
289  DO iface = 1, nfaces
290  SELECT CASE (iface)
291  CASE(1,3,5)
292  nodecorn = indijk(i,j,k,inoff, ijnoff)
293 
294  CASE(2)
295  nodecorn = indijk(i+1,j,k,inoff, ijnoff)
296 
297  CASE(4)
298  nodecorn = indijk(i,j+1,k,inoff, ijnoff)
299 
300  CASE(6)
301  nodecorn = indijk(i,j,k+1,inoff, ijnoff)
302  END SELECT ! iFace
303 
304  ifacesrc = srcface(iface)
305  SELECT CASE (ifacesrc)
306  CASE(1,3,5)
307  nodecornsrc = indijk(iccsrc,jccsrc,kccsrc,inoffsrc,ijnoffsrc)
308 
309  CASE(2)
310  nodecornsrc = indijk(iccsrc+1,jccsrc,kccsrc,inoffsrc,ijnoffsrc)
311 
312  CASE(4)
313  nodecornsrc = indijk(iccsrc,jccsrc+1,kccsrc,inoffsrc,ijnoffsrc)
314 
315  CASE(6)
316  nodecornsrc = indijk(iccsrc,jccsrc,kccsrc+1,inoffsrc,ijnoffsrc)
317  END SELECT ! iFaceSrc
318 
319  pfc(1:3,icoord,nodecorn) = pfcsrc(1:3,idirsrc,nodecornsrc)
320  pfc(1:3,jcoord,nodecorn) = pfcsrc(1:3,jdirsrc,nodecornsrc)
321  pfc(1:3,kcoord,nodecorn) = pfcsrc(1:3,kdirsrc,nodecornsrc)
322 
323  ENDDO ! iFace
324 
325  END IF ! procid
326  END IF ! iRegSrc
327 
328  ENDDO ! i
329  ENDDO ! j
330  ENDDO ! k
331 
332 2999 CONTINUE
333 
334  ENDDO ! iCorner
335 
336 ! finalize --------------------------------------------------------------------
337 
338  CALL deregisterfunction( global )
339 
340 END SUBROUTINE plag_cecellsfacecentroids
341 
342 !******************************************************************************
343 !
344 ! RCS Revision history:
345 !
346 ! $Log: PLAG_CECellsFaceCentroids.F90,v $
347 ! Revision 1.4 2008/12/06 08:44:33 mtcampbe
348 ! Updated license.
349 !
350 ! Revision 1.3 2008/11/19 22:17:45 mtcampbe
351 ! Added Illinois Open Source License/Copyright
352 !
353 ! Revision 1.2 2006/04/07 15:19:23 haselbac
354 ! Removed tabs
355 !
356 ! Revision 1.1 2004/12/01 20:57:11 fnajjar
357 ! Initial revision after changing case
358 !
359 ! Revision 1.7 2004/11/29 19:24:50 fnajjar
360 ! Added bypass statement for dengerate cells
361 !
362 ! Revision 1.6 2004/02/11 23:12:35 fnajjar
363 ! Included RFLO_GetNodeOffset in ModInterfaces call
364 !
365 ! Revision 1.5 2004/02/10 21:46:37 fnajjar
366 ! Added capability to remove coordinate alignment between corner-edge regions
367 !
368 ! Revision 1.4 2004/01/28 16:10:28 fnajjar
369 ! Moved statements inside IF iReg for correct syntax
370 !
371 ! Revision 1.3 2004/01/14 21:27:24 fnajjar
372 ! Included definition of nFaces
373 !
374 ! Revision 1.2 2003/12/05 23:45:30 fnajjar
375 ! Fixed metrics for edge and corner cells based on face looping
376 !
377 ! Revision 1.1 2003/11/12 21:37:59 fnajjar
378 ! Initial import of Corner-Edge cells Infrastructure
379 !
380 !******************************************************************************
381 
382 
383 
384 
385 
386 
387 
subroutine plag_rflo_getfacemapping(mapMat, srcDir, srcFace)
subroutine rflo_getedgecellsindices(region, iLev, iedge, iebeg, ieend, jebeg, jeend, kebeg, keend)
**********************************************************************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 plag_cecellsfacecentroids(regions, iReg)
j indices k indices k
Definition: Indexing.h:6
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
IndexType nedges() const
Definition: Mesh.H:564
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 knode iend
IndexType nfaces() const
Definition: Mesh.H:641
blockLoc i
Definition: read.cpp:79
subroutine rflo_getcelloffset(region, iLev, iCellOffset, ijCellOffset)
**********************************************************************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 icorner
subroutine rflo_getcornercellsindices(region, iLev, icorner, icbeg, icend, jcbeg, jcend, kcbeg, kcend)
j indices j
Definition: Indexing.h:6
**********************************************************************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
**********************************************************************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
subroutine getijk(ijk, iOffset, ijOffset, nDumCells, i, j, k)
Definition: ModIndexing.F90:54