Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PLAG_RFLO_RecvMetrics.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: receives RFLO metrics to edge and corner cells of an adjacent
26 ! region.
27 !
28 ! Description: kernel is pertinent when the other region is located
29 ! on a different processor.
30 !
31 ! Input: regions = data of all regions
32 ! iReg = current region.
33 !
34 ! Output: new values of RFLO metrics variables.
35 !
36 ! Notes: none.
37 !
38 !******************************************************************************
39 !
40 ! $Id: PLAG_RFLO_RecvMetrics.F90,v 1.3 2008/12/06 08:44:34 mtcampbe Exp $
41 !
42 ! Copyright: (c) 2004 by the University of Illinois
43 !
44 !******************************************************************************
45 
46 SUBROUTINE plag_rflo_recvmetrics( regions,iReg )
47 
48  USE moddatatypes
49  USE modglobal, ONLY : t_global
50  USE moddatastruct, ONLY : t_region, t_level, t_dcelltransf
53  USE moderror
54  USE modmpi
55  USE modparameters
56  IMPLICIT NONE
57 
58 #include "Indexing.h"
59 
60 ! ... parameters
61  TYPE(t_region), POINTER :: regions(:)
62 
63  INTEGER, INTENT(IN) :: ireg
64 
65 ! ... loop variables
66  INTEGER :: ir, icorner, iedge, iface, i, j, k, ijk
67 
68 ! ... local variables
69 #ifdef MPI
70  INTEGER :: status(mpi_status_size)
71 #endif
72  INTEGER :: ibuff, icell, ilev, iregsrc, ndim, source, tag
73  INTEGER :: ibeg, iend, jbeg, jend, kbeg, kend, icoff, ijcoff
74  INTEGER :: nbuffsize, ncorners, nedges
75  INTEGER :: nfaces, nfacecentroidsize, nfacenormalsize
76  INTEGER :: inoff, ijnoff, ijkn
77  INTEGER :: ndumcellssrc
78  INTEGER :: nodecorn, nodeedge
79 
80  REAL(RFREAL), POINTER, DIMENSION(:,:) :: psi, psj, psk
81  REAL(RFREAL), POINTER, DIMENSION(:,:,:) :: pfc
82 
83  TYPE(t_region), POINTER :: pregion
84  TYPE(t_level), POINTER :: plevel
85  TYPE(t_dcelltransf), POINTER :: precveccell
86  TYPE(t_global), POINTER :: global
87 
88 !******************************************************************************
89 
90  global => regions(ireg)%global
91 
92  CALL registerfunction( global,'PLAG_RFLO_RecvMetrics',&
93  'PLAG_RFLO_RecvMetrics.F90' )
94 
95 ! Get dimensions --------------------------------------------------------------
96 
97  ilev = regions(ireg)%currLevel
98  ncorners = 8
99  nedges = 12
100  nfaces = 6
101 
102 ! Compute buffer size has to store information --------------------------------
103 ! on the total number of faces for each cell .
104 
105  nfacecentroidsize = zcoord*kcoord
106  nfacenormalsize = 3*kcoord
107  nbuffsize = (nfacecentroidsize + nfacenormalsize)
108 
109 ! Set pointers ----------------------------------------------------------------
110 
111  pregion => regions(ireg)
112  plevel => regions(ireg)%levels(ilev)
113  pfc => regions(ireg)%levels(ilev)%plag%fc
114  psi => regions(ireg)%levels(ilev)%plag%si
115  psj => regions(ireg)%levels(ilev)%plag%sj
116  psk => regions(ireg)%levels(ilev)%plag%sk
117 
118 ! Get node offset -------------------------------------------------------------
119 
120  CALL rflo_getnodeoffset( pregion,ilev,inoff,ijnoff )
121 
122 ! copy data from buffer to dummy cells
123 
124  DO ir=1,global%nRegions
125  IF (regions(ir)%procid /= global%myProcid) THEN
126  IF (plevel%recvEcCells(ir)%nCells > 0) THEN
127 
128  precveccell => plevel%recvEcCells(ir)
129  ndim = precveccell%nCells*nfaces
130  ibuff = 0
131 
132 ! - Receive buffers from source processor ---------------------------------------
133 
134 #ifdef MPI
135  source = regions(ir)%procid
136  tag = regions(ireg)%localNumber+ plag_tag_shift +mpi_patchoff +10
137 
138  CALL mpi_recv( precveccell%buffMetrics,nbuffsize*ndim,mpi_rfreal, &
139  source,tag,global%mpiComm,status,global%mpierr )
140  IF ( global%mpierr /= err_none ) &
141  CALL errorstop( global,err_mpi_trouble,__line__ )
142 #endif
143 
144 ! -- Load edges ---------------------------------------------------------------
145 
146  DO iedge=1,nedges
147 
148 ! --- Bypass for noninteracting regions ---------------------------------------
149 
150  IF( .NOT. plevel%edgeCells(iedge)%interact ) goto 1999
151 
152 ! -- Bypass for degenerate edge cells -----------------------------------------
153 
154  IF( plevel%edgeCells(iedge)%degenrt /= degenerat_none ) goto 1999
155 
156 ! --- Current region infrastructure -------------------------------------------
157 
158  CALL rflo_getedgecellsindices( pregion,ilev,iedge, &
159  ibeg,iend,jbeg,jend,kbeg,kend )
160 
161  ijk = 0
162  DO k=kbeg,kend
163  DO j=jbeg,jend
164  DO i=ibeg,iend
165  ijk = ijk + 1
166  ijkn = indijk(i,j,k,inoff, ijnoff)
167  iregsrc = plevel%edgeCells(iedge)%cells(ijk)%srcRegion
168  IF ( iregsrc == ir ) THEN
169 
170  IF ( plevel%edgeCells(iedge)%cells(ijk)%rotate ) THEN
171  ! rotational periodicity
172  ELSE
173 
174 ! --- Loop over all the Faces -------------------------------------------------
175 ! --- Note: assumes coordinate alignment between regions ----------------------
176 
177  DO iface = 1, nfaces
178  ibuff = ibuff + 1
179 
180  SELECT CASE (iface)
181  CASE(1,3,5)
182  nodeedge = indijk(i,j,k,inoff, ijnoff)
183 
184  CASE(2)
185  nodeedge = indijk(i+1,j,k,inoff, ijnoff)
186 
187  CASE(4)
188  nodeedge = indijk(i,j+1,k,inoff, ijnoff)
189 
190  CASE(6)
191  nodeedge = indijk(i,j,k+1,inoff, ijnoff)
192  END SELECT
193 
194 ! ---- Load face centroids -----------------------------------------------------
195 
196  pfc(xcoord,icoord,nodeedge) = precveccell%buffMetrics(ibuff )
197  pfc(xcoord,jcoord,nodeedge) = precveccell%buffMetrics(ibuff+ ndim)
198  pfc(xcoord,zcoord,nodeedge) = precveccell%buffMetrics(ibuff+ 2*ndim)
199 
200  pfc(ycoord,icoord,nodeedge) = precveccell%buffMetrics(ibuff+ 3*ndim)
201  pfc(ycoord,jcoord,nodeedge) = precveccell%buffMetrics(ibuff+ 4*ndim)
202  pfc(ycoord,zcoord,nodeedge) = precveccell%buffMetrics(ibuff+ 5*ndim)
203 
204  pfc(zcoord,icoord,nodeedge) = precveccell%buffMetrics(ibuff+ 6*ndim)
205  pfc(zcoord,jcoord,nodeedge) = precveccell%buffMetrics(ibuff+ 7*ndim)
206  pfc(zcoord,zcoord,nodeedge) = precveccell%buffMetrics(ibuff+ 8*ndim)
207 
208 ! --- Load face normals -------------------------------------------------------
209 
210  psi(xcoord,nodeedge) = precveccell%buffMetrics(ibuff+ 9*ndim)
211  psi(ycoord,nodeedge) = precveccell%buffMetrics(ibuff+10*ndim)
212  psi(zcoord,nodeedge) = precveccell%buffMetrics(ibuff+11*ndim)
213 
214  psj(xcoord,nodeedge) = precveccell%buffMetrics(ibuff+12*ndim)
215  psj(ycoord,nodeedge) = precveccell%buffMetrics(ibuff+13*ndim)
216  psj(zcoord,nodeedge) = precveccell%buffMetrics(ibuff+14*ndim)
217 
218  psk(xcoord,nodeedge) = precveccell%buffMetrics(ibuff+15*ndim)
219  psk(ycoord,nodeedge) = precveccell%buffMetrics(ibuff+16*ndim)
220  psk(zcoord,nodeedge) = precveccell%buffMetrics(ibuff+17*ndim)
221  ENDDO ! iFace
222 
223  ENDIF ! rotate
224  ENDIF !iRegSrc
225 
226  ENDDO ! i
227  ENDDO ! j
228  ENDDO ! k
229 
230 1999 CONTINUE
231  ENDDO ! iEdge
232 
233 ! --- Load corners ------------------------------------------------------------
234 
235  DO icorner=1,ncorners
236 
237 ! -- Bypass for noninteracting regions ----------------------------------------
238 
239  IF (.NOT. plevel%cornerCells(icorner)%interact) goto 2999
240 
241 ! -- Bypass for degenerate corner cells ---------------------------------------
242 
243  IF( plevel%cornerCells(icorner)%degenrt /= degenerat_none ) goto 2999
244 
245 ! -- Current region infrastructure ---------------------------------------------
246 
247  CALL rflo_getcornercellsindices( pregion,ilev,icorner, &
248  ibeg,iend,jbeg,jend,kbeg,kend )
249 
250  ijk = 0
251  DO k=kbeg,kend
252  DO j=jbeg,jend
253  DO i=ibeg,iend
254  ijk = ijk + 1
255  ijkn = indijk(i,j,k,inoff,ijnoff)
256  iregsrc = plevel%cornerCells(icorner)%cells(ijk)%srcRegion
257  IF ( iregsrc == ir ) THEN
258 
259  IF ( plevel%cornerCells(icorner)%cells(ijk)%rotate ) THEN
260  ! rotational periodicity
261  ELSE
262 
263 ! --- Loop over all the Faces -------------------------------------------------
264 ! --- Note: assumes coordinate alignment between regions ----------------------
265 
266  DO iface = 1, nfaces
267  ibuff = ibuff + 1
268 
269  SELECT CASE (iface)
270  CASE(1,3,5)
271  nodecorn = indijk(i,j,k,inoff, ijnoff)
272 
273  CASE(2)
274  nodecorn = indijk(i+1,j,k,inoff, ijnoff)
275 
276  CASE(4)
277  nodecorn = indijk(i,j+1,k,inoff, ijnoff)
278 
279  CASE(6)
280  nodecorn = indijk(i,j,k+1,inoff, ijnoff)
281  END SELECT
282 
283 ! ---- Load face centroids -----------------------------------------------------
284 
285  pfc(xcoord,icoord,nodecorn) = precveccell%buffMetrics(ibuff )
286  pfc(xcoord,jcoord,nodecorn) = precveccell%buffMetrics(ibuff+ ndim)
287  pfc(xcoord,zcoord,nodecorn) = precveccell%buffMetrics(ibuff+ 2*ndim)
288 
289  pfc(ycoord,icoord,nodecorn) = precveccell%buffMetrics(ibuff+ 3*ndim)
290  pfc(ycoord,jcoord,nodecorn) = precveccell%buffMetrics(ibuff+ 4*ndim)
291  pfc(ycoord,zcoord,nodecorn) = precveccell%buffMetrics(ibuff+ 5*ndim)
292 
293  pfc(zcoord,icoord,nodecorn) = precveccell%buffMetrics(ibuff+ 6*ndim)
294  pfc(zcoord,jcoord,nodecorn) = precveccell%buffMetrics(ibuff+ 7*ndim)
295  pfc(zcoord,zcoord,nodecorn) = precveccell%buffMetrics(ibuff+ 8*ndim)
296 
297 ! --- Load face normals -------------------------------------------------------
298 
299  psi(xcoord,nodecorn) = precveccell%buffMetrics(ibuff+ 9*ndim)
300  psi(ycoord,nodecorn) = precveccell%buffMetrics(ibuff+10*ndim)
301  psi(zcoord,nodecorn) = precveccell%buffMetrics(ibuff+11*ndim)
302  psj(xcoord,nodecorn) = precveccell%buffMetrics(ibuff+12*ndim)
303  psj(ycoord,nodecorn) = precveccell%buffMetrics(ibuff+13*ndim)
304  psj(zcoord,nodecorn) = precveccell%buffMetrics(ibuff+14*ndim)
305  psk(xcoord,nodecorn) = precveccell%buffMetrics(ibuff+15*ndim)
306  psk(ycoord,nodecorn) = precveccell%buffMetrics(ibuff+16*ndim)
307  psk(zcoord,nodecorn) = precveccell%buffMetrics(ibuff+17*ndim)
308  ENDDO ! iFace
309 
310  ENDIF ! rotate
311  ENDIF !iRegSrc
312 
313  ENDDO ! i
314  ENDDO ! j
315  ENDDO ! k
316 
317 2999 CONTINUE
318  ENDDO ! icorner
319 
320  ENDIF ! some cells to receive
321  ENDIF ! not my processor
322  ENDDO ! ir
323 
324 ! finalize
325 
326  CALL deregisterfunction( global )
327 
328 END SUBROUTINE plag_rflo_recvmetrics
329 
330 !******************************************************************************
331 !
332 ! RCS Revision history:
333 !
334 ! $Log: PLAG_RFLO_RecvMetrics.F90,v $
335 ! Revision 1.3 2008/12/06 08:44:34 mtcampbe
336 ! Updated license.
337 !
338 ! Revision 1.2 2008/11/19 22:17:47 mtcampbe
339 ! Added Illinois Open Source License/Copyright
340 !
341 ! Revision 1.1 2004/12/01 20:58:11 fnajjar
342 ! Initial revision after changing case
343 !
344 ! Revision 1.4 2004/11/29 19:22:39 fnajjar
345 ! Added bypass statement for dengerate cells
346 !
347 ! Revision 1.3 2004/03/21 00:43:32 fnajjar
348 ! Fixed tags to be smaller number since Frost run-time system complains about size
349 !
350 ! Revision 1.2 2004/03/06 21:25:05 fnajjar
351 ! Added PLAG_TAG_SHIFT to MPI-based communication tags
352 !
353 ! Revision 1.1 2004/01/15 21:16:48 fnajjar
354 ! Initial import for corner-edge cell metrics
355 !
356 !******************************************************************************
357 
358 
359 
360 
361 
362 
363 
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
j indices k indices k
Definition: Indexing.h:6
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
int status() const
Obtain the status of the attribute.
Definition: Attribute.h:240
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)
**********************************************************************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 icell
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
CGAL::Point_2< R > source() const
Definition: Ray_2.h:128
subroutine errorstop(global, errorCode, errorLine, addMessage)
Definition: ModError.F90:483
**********************************************************************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 plag_rflo_recvmetrics(regions, iReg)
**********************************************************************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