Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PEUL_SendDummyConf.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: send values to dummy cells of the corresponding patch
26 ! of the adjacent region which is on another processor.
27 !
28 ! Description: none.
29 !
30 ! Input: region = current region
31 ! regionSrc = region to send data to
32 ! patch = current patch of region.
33 !
34 ! Output: patch%peul%SendBuff = send buffer.
35 !
36 ! Notes: intended for conforming grid boundaries only.
37 !
38 !******************************************************************************
39 !
40 ! $Id: PEUL_SendDummyConf.F90,v 1.4 2008/12/06 08:44:39 mtcampbe Exp $
41 !
42 ! Copyright: (c) 2003 by the University of Illinois
43 !
44 !******************************************************************************
45 
46 SUBROUTINE peul_senddummyconf( region,regionSrc,patch )
47 
48  USE moddatatypes
49  USE modparteul, ONLY : t_buffer_peul
50  USE modbndpatch, ONLY : t_patch
51  USE modglobal, ONLY : t_global
52  USE moddatastruct, ONLY : t_region
54  USE modparteul, ONLY : t_peul
55  USE moderror
56  USE modmpi
57  USE modparameters
59  IMPLICIT NONE
60 
61 #include "Indexing.h"
62 
63 ! ... parameters
64  TYPE(t_region), INTENT(INOUT) :: region,regionsrc
65  TYPE(t_patch), INTENT(INOUT) :: patch
66 
67 ! ... loop variables
68  INTEGER :: icv, idum, i, j, k, ijkbuff
69 
70 ! ... local variables
71  CHARACTER(CHRLEN) :: rcsidentstring
72 
73  INTEGER :: ilev, ibeg, iend, jbeg, jend, kbeg, kend, icoff, ijcoff, ijkc, &
74  n1, n2, ndim, dest, tagpeul
75  INTEGER :: lb, l1srcdir, l2srcdir, l1beg, l1end, l1step, l2beg, l2end, l2step
76 
77  INTEGER :: irequestpeul, ncv, ndimsendbuff
78 
79  LOGICAL :: align
80 
81  REAL(RFREAL), POINTER, DIMENSION(:) :: psendbuffeul
82  REAL(RFREAL), POINTER, DIMENSION(:,:) :: pcv
83 
84  TYPE(t_peul), POINTER :: ppeul
85  TYPE(t_global), POINTER :: global
86 
87 !******************************************************************************
88 
89  rcsidentstring = '$RCSfile: PEUL_SendDummyConf.F90,v $ $Revision: 1.4 $'
90 
91  global => region%global
92 
93  CALL registerfunction( global,'RFLO_SendDummyConf',&
94  'PEUL_SendDummyConf.F90' )
95 
96 ! check if the source region is active ----------------------------------------
97 
98  IF (regionsrc%active == off) THEN
99  CALL errorstop( global,err_srcregion_off,__line__ )
100  ENDIF
101 
102 ! get dimensions and pointers -------------------------------------------------
103 
104  ilev = region%currLevel
105 
106  CALL rflo_getpatchindices( region,patch,ilev,ibeg,iend, &
107  jbeg,jend,kbeg,kend )
108  CALL rflo_getcelloffset( region,ilev,icoff,ijcoff )
109 
110  ppeul => region%levels(ilev)%peul
111  pcv => ppeul%cv
112  psendbuffeul => patch%bufferPeul%sendBuff
113 
114  n1 = abs(patch%l1end-patch%l1beg) + 1 ! here, dimensions of current
115  n2 = abs(patch%l2end-patch%l2beg) + 1 ! and source patch are identical
116  ndim = n1*n2*regionsrc%nDumCells ! ... but not the # of dummy cells
117 
118  ncv = region%levels(ilev)%peul%nCv
119 
120  IF (ncv /= region%peulInput%nPtypes) &
121  CALL errorstop( region%global,err_peul_npmismatch,__line__ )
122 
123  ndimsendbuff = ncv*ndim
124 
125 ! mapping between patches -----------------------------------------------------
126 
127  l1srcdir = 1
128  IF (patch%srcL1beg > patch%srcL1end) l1srcdir = -1
129  l2srcdir = 1
130  IF (patch%srcL2beg > patch%srcL2end) l2srcdir = -1
131 
132  lb = patch%lbound
133  align = patch%align
134 
135 ! loop over interior cells of current patch -----------------------------------
136 
137  ijkbuff = 0
138 
139  DO icv = 1, ncv
140  DO idum=0,regionsrc%nDumCells-1
141 
142 ! - face i=const. -------------------------------------------------------------
143 
144  IF (lb==1 .OR. lb==2) THEN
145 
146  SELECT CASE(lb)
147  CASE(1)
148  i = ibeg + idum
149  CASE(2)
150  i = iend - idum
151  END SELECT ! lb
152 
153  IF (align) THEN
154  IF (l1srcdir > 0) THEN
155  l1beg = jbeg
156  l1end = jend
157  ELSE
158  l1beg = jend
159  l1end = jbeg
160  ENDIF ! l1SrcDir
161  l1step = l1srcdir
162 
163  IF (l2srcdir > 0) THEN
164  l2beg = kbeg
165  l2end = kend
166  ELSE
167  l2beg = kend
168  l2end = kbeg
169  ENDIF ! l2SrcDir
170  l2step = l2srcdir
171 
172  DO k=l2beg,l2end,l2step
173  DO j=l1beg,l1end,l1step
174  ijkc = indijk(i,j,k,icoff,ijcoff)
175  ijkbuff = ijkbuff + 1
176  psendbuffeul(ijkbuff) = pcv(icv,ijkc)
177  ENDDO ! j
178  ENDDO ! k
179 
180  ELSE ! align
181  IF (l1srcdir > 0) THEN
182  l1beg = kbeg
183  l1end = kend
184  ELSE
185  l1beg = kend
186  l1end = kbeg
187  ENDIF ! l1SrcDir
188  l1step = l1srcdir
189 
190  IF (l2srcdir > 0) THEN
191  l2beg = jbeg
192  l2end = jend
193  ELSE
194  l2beg = jend
195  l2end = jbeg
196  ENDIF ! l2SrcDir
197  l2step = l2srcdir
198 
199  DO j=l2beg,l2end,l2step
200  DO k=l1beg,l1end,l1step
201  ijkc = indijk(i,j,k,icoff,ijcoff)
202  ijkbuff = ijkbuff + 1
203  psendbuffeul(ijkbuff) = pcv(icv,ijkc)
204  ENDDO ! k
205  ENDDO ! j
206 
207  ENDIF ! align
208 
209 ! - face j=const. -------------------------------------------------------------
210 
211  ELSE IF (lb==3 .OR. lb==4) THEN
212 
213  SELECT CASE(lb)
214  CASE(3)
215  j = jbeg + idum
216  CASE(4)
217  j = jend - idum
218  END SELECT ! lb
219 
220  IF (align) THEN
221  IF (l1srcdir > 0) THEN
222  l1beg = kbeg
223  l1end = kend
224  ELSE
225  l1beg = kend
226  l1end = kbeg
227  ENDIF ! l1SrcDir
228  l1step = l1srcdir
229 
230  IF (l2srcdir > 0) THEN
231  l2beg = ibeg
232  l2end = iend
233  ELSE
234  l2beg = iend
235  l2end = ibeg
236  ENDIF ! l2SrcDir
237  l2step = l2srcdir
238 
239  DO i=l2beg,l2end,l2step
240  DO k=l1beg,l1end,l1step
241  ijkc = indijk(i,j,k,icoff,ijcoff)
242  ijkbuff = ijkbuff + 1
243  psendbuffeul(ijkbuff) = pcv(icv,ijkc)
244  ENDDO ! k
245  ENDDO ! i
246 
247  ELSE ! align
248  IF (l1srcdir > 0) THEN
249  l1beg = ibeg
250  l1end = iend
251  ELSE
252  l1beg = iend
253  l1end = ibeg
254  ENDIF ! l1SrcDir
255  l1step = l1srcdir
256 
257  IF (l2srcdir > 0) THEN
258  l2beg = kbeg
259  l2end = kend
260  ELSE
261  l2beg = kend
262  l2end = kbeg
263  ENDIF ! l2SrcDir
264  l2step = l2srcdir
265 
266  DO k=l2beg,l2end,l2step
267  DO i=l1beg,l1end,l1step
268  ijkc = indijk(i,j,k,icoff,ijcoff)
269  ijkbuff = ijkbuff + 1
270  psendbuffeul(ijkbuff) = pcv(icv,ijkc)
271  ENDDO ! i
272  ENDDO ! k
273 
274  ENDIF ! align
275 
276 ! - face k=const. -------------------------------------------------------------
277 
278  ELSE IF (lb==5 .OR. lb==6) THEN
279 
280  SELECT CASE(lb)
281  CASE(5)
282  k = kbeg + idum
283  CASE(6)
284  k = kend - idum
285  END SELECT ! lb
286 
287  IF (align) THEN
288  IF (l1srcdir > 0) THEN
289  l1beg = ibeg
290  l1end = iend
291  ELSE
292  l1beg = iend
293  l1end = ibeg
294  ENDIF ! l1SrcDir
295  l1step = l1srcdir
296 
297  IF (l2srcdir > 0) THEN
298  l2beg = jbeg
299  l2end = jend
300  ELSE
301  l2beg = jend
302  l2end = jbeg
303  ENDIF ! l2SrcDir
304  l2step = l2srcdir
305 
306  DO j=l2beg,l2end,l2step
307  DO i=l1beg,l1end,l1step
308  ijkc = indijk(i,j,k,icoff,ijcoff)
309  ijkbuff = ijkbuff + 1
310  psendbuffeul(ijkbuff) = pcv(icv,ijkc)
311  ENDDO ! i
312  ENDDO ! j
313 
314  ELSE ! align
315  IF (l1srcdir > 0) THEN
316  l1beg = jbeg
317  l1end = jend
318  ELSE
319  l1beg = jend
320  l1end = jbeg
321  ENDIF ! l1SrcDir
322  l1step = l1srcdir
323 
324  IF (l2srcdir > 0) THEN
325  l2beg = ibeg
326  l2end = iend
327  ELSE
328  l2beg = iend
329  l2end = ibeg
330  ENDIF ! l2SrcDir
331  l2step = l2srcdir
332 
333  DO i=l2beg,l2end,l2step
334  DO j=l1beg,l1end,l1step
335  ijkc = indijk(i,j,k,icoff,ijcoff)
336  ijkbuff = ijkbuff + 1
337  psendbuffeul(ijkbuff) = pcv(icv,ijkc)
338  ENDDO ! j
339  ENDDO ! i
340  ENDIF ! align
341 
342  ENDIF ! lb
343 
344  ENDDO ! idum
345  ENDDO ! iCv
346 
347 ! send data
348 
349 #ifdef MPI
350  dest = regionsrc%procid
351  tagpeul = regionsrc%localNumber + mpi_patchoff*patch%srcPatch &
352  * peul_tag_shift
353  irequestpeul = patch%bufferPeul%iRequest
354  CALL mpi_isend( psendbuffeul,ndimsendbuff,mpi_rfreal, &
355  dest,tagpeul,global%mpiComm, &
356  ppeul%requests(irequestpeul),global%mpierr )
357  IF (global%mpierr /= err_none) &
358  CALL errorstop( global,err_mpi_trouble,__line__ )
359 #endif
360 
361 ! finalize
362 
363  CALL deregisterfunction( global )
364 
365 END SUBROUTINE peul_senddummyconf
366 
367 !******************************************************************************
368 !
369 ! RCS Revision history:
370 !
371 ! $Log: PEUL_SendDummyConf.F90,v $
372 ! Revision 1.4 2008/12/06 08:44:39 mtcampbe
373 ! Updated license.
374 !
375 ! Revision 1.3 2008/11/19 22:17:52 mtcampbe
376 ! Added Illinois Open Source License/Copyright
377 !
378 ! Revision 1.2 2006/08/19 15:40:26 mparmar
379 ! Renamed patch variables
380 !
381 ! Revision 1.1 2004/12/01 21:09:56 haselbac
382 ! Initial revision after changing case
383 !
384 ! Revision 1.4 2004/04/15 16:04:03 jferry
385 ! minor formatting (removed trailing spaces)
386 !
387 ! Revision 1.3 2004/03/02 21:44:07 jferry
388 ! Added corner and edge cell data structures and routines
389 !
390 ! Revision 1.2 2003/05/15 02:57:05 jblazek
391 ! Inlined index function.
392 !
393 ! Revision 1.1 2003/04/09 14:34:25 fnajjar
394 ! Initial Import of MPI-based rocsmoke
395 !
396 !******************************************************************************
397 
398 
399 
400 
401 
402 
403 
**********************************************************************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 peul_senddummyconf(region, regionSrc, patch)
j indices k indices k
Definition: Indexing.h:6
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
subroutine rflo_getpatchindices(region, patch, iLev, ibeg, iend, jbeg, jend, kbeg, kend)
Definition: patch.h:74
**********************************************************************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
blockLoc i
Definition: read.cpp:79
subroutine rflo_getcelloffset(region, iLev, iCellOffset, ijCellOffset)
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
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
**********************************************************************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