Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PLAG_RFLO_ModStats.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: Collection of routines for particle statistics on Eulerian grid.
26 !
27 ! Description: None.
28 !
29 ! Notes: None.
30 !
31 ! ******************************************************************************
32 !
33 ! $Id: PLAG_RFLO_ModStats.F90,v 1.9 2009/03/02 00:19:36 mtcampbe Exp $
34 !
35 ! Copyright: (c) 2004 by the University of Illinois
36 !
37 ! ******************************************************************************
38 
40 
41  USE modparameters
42  USE moddatatypes
43  USE modglobal, ONLY: t_global
44  USE modpartlag, ONLY: t_buffer_plag
45  USE modbndpatch, ONLY: t_patch
46  USE modgrid, ONLY: t_grid
47  USE modpartlag, ONLY: t_plag
48  USE moddatastruct, ONLY: t_region
49  USE moderror
50  USE modmpi
52 
53 #include "Indexing.h"
54  USE modindexing, ONLY: indijkmap
55  USE modinterfaces, ONLY: rflo_getcelloffset, &
64 
65  IMPLICIT NONE
66 
67 ! ******************************************************************************
68 ! Definitions and declarations
69 ! ******************************************************************************
70 
71 ! ==============================================================================
72 ! Private data
73 ! ==============================================================================
74 
75  CHARACTER(CHRLEN), PRIVATE :: &
76  RCSIdentString = '$RCSfile: PLAG_RFLO_ModStats.F90,v $ $Revision: 1.9 $'
77 
78 ! ==============================================================================
79 ! Public functions
80 ! ==============================================================================
81 
82  PUBLIC :: plag_rflo_createstatbuff, &
86 
87 ! ==============================================================================
88 ! Private functions
89 ! ==============================================================================
90 
91 ! ******************************************************************************
92 ! Routines
93 ! ******************************************************************************
94 
95  CONTAINS
96 
97 
98 
99 
100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
111 
112 
113 !******************************************************************************
114 !
115 ! Purpose: Clear communication requests.
116 !
117 ! Description: none.
118 !
119 ! Input: regions = data of all regions
120 ! iReg = index of current region.
121 !
122 ! Output: none.
123 !
124 ! Notes: none.
125 !
126 !******************************************************************************
127 
128  SUBROUTINE plag_rflo_clearreqstatbuff( regions,iReg )
129 
130  IMPLICIT NONE
131 
132 ! ******************************************************************************
133 ! Declarations and definitions
134 ! ******************************************************************************
135 
136 ! ==============================================================================
137 ! Arguments
138 ! ==============================================================================
139 
140  TYPE(t_region), POINTER :: regions(:)
141  INTEGER :: ireg
142 
143 ! ==============================================================================
144 ! Locals
145 ! ==============================================================================
146 
147  INTEGER :: bctype,ilev,ipatch,iregsrc,irequeststat,npatches
148 #ifdef MPI
149  INTEGER :: status(mpi_status_size)
150 #endif
151  LOGICAL :: dowait
152 
153  TYPE(t_patch), POINTER :: ppatch
154  TYPE(t_plag), POINTER :: pplag
155  TYPE(t_region), POINTER :: pregion
156  TYPE(t_global), POINTER :: global
157 
158 ! ******************************************************************************
159 ! Start, set pointers and variables
160 ! ******************************************************************************
161 
162  global => regions(ireg)%global
163 
164  CALL registerfunction( global,'PLAG_RFLO_ClearReqStatBuff',&
165  'PLAG_RFLO_ModStats.F90' )
166 
167 ! ******************************************************************************
168 ! Set dimensions, variables, pointers
169 ! ******************************************************************************
170 
171 #ifdef MPI
172  ilev = regions(ireg)%currLevel
173  npatches = regions(ireg)%nPatches
174 
175  pplag => regions(ireg)%levels(ilev)%plag
176 
177 ! ******************************************************************************
178 ! Wait for patch data being received by other processors
179 ! ******************************************************************************
180 
181  DO ipatch=1,npatches
182  ppatch => regions(ireg)%levels(ilev)%patches(ipatch)
183 
184  bctype = ppatch%bcType
185  iregsrc = ppatch%srcRegion
186  irequeststat = ppatch%bufferPlag%iRequestStat
187 
188  dowait = ((bctype>=bc_regionconf .AND. bctype<=bc_regionconf+bc_range) .OR. &
189  (bctype>=bc_regionint .AND. bctype<=bc_regionint +bc_range) .OR. &
190  (bctype>=bc_regnonconf .AND. bctype<=bc_regnonconf+bc_range) .OR. &
191  (bctype>=bc_tra_peri .AND. bctype<=bc_tra_peri +bc_range) .OR. &
192  (bctype>=bc_rot_peri .AND. bctype<=bc_rot_peri +bc_range))
193 
194  IF ( iregsrc > 0 ) THEN
195  IF ( (dowait .EQV. .true.) .AND. &
196  (regions(iregsrc)%procid /= global%myProcid) ) THEN
197  CALL mpi_wait( pplag%requestsStat(irequeststat),status,global%mpierr )
198  IF ( global%mpierr /= err_none ) &
199  CALL errorstop( global,err_mpi_trouble,__line__ )
200  ENDIF ! doWait
201  ENDIF ! iRegSrc
202 
203  ENDDO ! iPatch
204 #endif
205 
206 ! ******************************************************************************
207 ! Finalize
208 ! ******************************************************************************
209 
210 ! ******************************************************************************
211 ! End
212 ! ******************************************************************************
213 
214  CALL deregisterfunction( global )
215 
216  END SUBROUTINE plag_rflo_clearreqstatbuff
217 
218 
219 
220 
221 
222 
223 ! ******************************************************************************
224 !
225 ! Purpose: Create buffer arrays for statistics.
226 !
227 ! Description: None.
228 !
229 ! Input: regions = dimensions of all regions
230 ! iReg = current region
231 !
232 ! Output: None.
233 !
234 ! Notes: None.
235 !
236 ! ******************************************************************************
237 
238  SUBROUTINE plag_rflo_createstatbuff(regions,iReg)
239 
240  IMPLICIT NONE
241 
242 ! ******************************************************************************
243 ! Declarations and definitions
244 ! ******************************************************************************
245 
246 ! ==============================================================================
247 ! Arguments
248 ! ==============================================================================
249 
250  TYPE(t_region), POINTER :: regions(:)
251  INTEGER :: ireg
252 
253 ! ==============================================================================
254 ! Locals
255 ! ==============================================================================
256 
257  INTEGER :: bctype,errorflag,ilev,ipatch,iregsrc,n1,n2,n1src,n2src,ndc,&
258  ndcsrc,ndim,ndimsrc,neqs,neqssrc,nev,ntav
259 
260  TYPE(t_patch), POINTER :: ppatch
261  TYPE(t_buffer_plag), POINTER :: pbuffplag
262  TYPE(t_plag), POINTER :: pplag
263  TYPE(t_global), POINTER :: global
264 
265 ! ******************************************************************************
266 ! Start, set pointers and variables
267 ! ******************************************************************************
268 
269  global => regions(ireg)%global
270 
271  CALL registerfunction( global,'PLAG_RFLO_CreateStatBuff',&
272  'PLAG_RFLO_ModStats.F90' )
273 
274  IF ( global%myProcid == masterproc .AND. &
275  global%verbLevel > verbose_none ) THEN
276  WRITE(stdout,'(A,3X,A)') solver_name,&
277  'Allocating Statistics Data Buffers for PLAG...'
278  END IF ! global%verbLevel
279 
280  ntav = global%plagNStat
281 
282 ! ******************************************************************************
283 ! Allocate buffer data arrays for statistics
284 ! ******************************************************************************
285 
286  DO ilev=1,regions(ireg)%nGridLevels
287  pplag => regions(ireg)%levels(ilev)%plag
288  pplag%nRequestsStat = 0
289 
290  nev = pplag%nEv
291 
292  DO ipatch=1,regions(ireg)%nPatches
293 
294  ppatch => regions(ireg)%levels(ilev)%patches(ipatch)
295  pbuffplag => ppatch%bufferPlag
296 
297  bctype = ppatch%bcType
298 
299  IF ( (bctype>=bc_regionconf .AND. bctype<=bc_regionconf+bc_range) .OR. &
300  (bctype>=bc_tra_peri .AND. bctype<=bc_tra_peri +bc_range) .OR. &
301  (bctype>=bc_rot_peri .AND. bctype<=bc_rot_peri +bc_range)) THEN
302  iregsrc = ppatch%srcRegion
303 
304  IF ( regions(iregsrc)%procid /= global%myProcid ) THEN ! other processor
305  n1 = abs(ppatch%l1end -ppatch%l1beg ) + 2 ! large enough
306  n2 = abs(ppatch%l2end -ppatch%l2beg ) + 2 ! for NODES!
307  n1src = abs(ppatch%srcL1end-ppatch%srcL1beg) + 2
308  n2src = abs(ppatch%srcL2end-ppatch%srcL2beg) + 2
309  neqs = ntav +nev
310  neqssrc = ntav +nev
311  ndc = regions(ireg )%nDumCells
312  ndcsrc = regions(iregsrc)%nDumCells
313  ndim = n1*n2*neqs*ndc
314  ndimsrc = n1src*n2src*neqssrc*ndcsrc
315 
316  ALLOCATE( pbuffplag%sendBuffStat(ndimsrc),stat=errorflag )
317  global%error = errorflag
318  IF (global%error /= err_none) THEN
319  CALL errorstop( global, err_allocate,__line__,'pBuffPlag%sendBuffStat' )
320  END IF ! global%error
321 
322  ALLOCATE( pbuffplag%recvBuffStat(ndim ),stat=errorflag )
323  global%error = errorflag
324  IF (global%error /= err_none) THEN
325  CALL errorstop( global, err_allocate,__line__,'pBuffPlag%recvBuffStat' )
326  END IF ! global%error
327 
328  pbuffplag%nSendBuffStat = ndimsrc
329  pbuffplag%nRecvBuffStat = ndim
330  pplag%nRequestsStat = pplag%nRequestsStat + 1
331  pbuffplag%iRequestStat = pplag%nRequestsStat
332 
333  ENDIF ! regions(iRegSrc)%procid
334 
335  ELSE IF ( (bctype>=bc_regionint .AND. bctype<=bc_regionint +bc_range) .OR. &
336  (bctype>=bc_regnonconf .AND. bctype<=bc_regnonconf+bc_range)) THEN
337  CALL errorstop( global,err_unknown_bc,__line__ ) ! #### TEMPORARY ####
338 
339  ELSE
340  nullify(pbuffplag%sendBuffStat)
341  nullify(pbuffplag%recvBuffStat)
342  ENDIF ! bcType
343 
344  ENDDO ! iPatch
345 
346 ! ==============================================================================
347 ! Allocate array for send requests
348 ! ==============================================================================
349 
350  ALLOCATE( pplag%requestsStat(pplag%nRequestsStat),stat=errorflag )
351  global%error = errorflag
352  IF (global%error /= err_none) THEN
353  CALL errorstop( global, err_allocate,__line__,'pPlag%requests' )
354  END IF ! global%error
355 
356  ENDDO ! iLev
357 
358 ! ******************************************************************************
359 ! Finalize
360 ! ******************************************************************************
361 
362  IF ( global%myProcid == masterproc .AND. &
363  global%verbLevel > verbose_none ) THEN
364  WRITE(stdout,'(A,3X,A)') solver_name,&
365  'Allocating Statistics Data Buffers for PLAG done...'
366  END IF ! global%verbLevel
367 
368 ! ******************************************************************************
369 ! End
370 ! ******************************************************************************
371 
372  CALL deregisterfunction( global )
373 
374  END SUBROUTINE plag_rflo_createstatbuff
375 
376 
377 
378 
379 
380 
381 
382 ! ******************************************************************************
383 !
384 ! Purpose: Communicate buffer arrays for statistics.
385 !
386 ! Description: None.
387 !
388 ! Input: regions = dimensions of all regions
389 !
390 ! Output: None.
391 !
392 ! Notes: None.
393 !
394 ! ******************************************************************************
395 
396  SUBROUTINE plag_rflo_commstatbuffwrapper(regions)
397 
398  IMPLICIT NONE
399 
400 ! ******************************************************************************
401 ! Declarations and definitions
402 ! ******************************************************************************
403 
404 ! ==============================================================================
405 ! Arguments
406 ! ==============================================================================
407 
408  TYPE(t_region), POINTER :: regions(:)
409 
410 ! ==============================================================================
411 ! Locals
412 ! ==============================================================================
413 
414  INTEGER :: bctype,ilev,ipatch,ipatchsrc,ireg,iregsrc,npatches
415 
416  TYPE(t_patch), POINTER :: ppatch,ppatchsrc
417  TYPE(t_region), POINTER :: pregion,pregionsrc
418  TYPE(t_global), POINTER :: global
419 
420 ! ******************************************************************************
421 ! Start, set pointers and variables
422 ! ******************************************************************************
423 
424  global => regions(1)%global
425 
426  CALL registerfunction( global,'PLAG_RFLO_CommStatBuffWrapper',&
427  'PLAG_RFLO_ModStats.F90' )
428 
429  IF (.NOT. global%plagUsed) goto 999
430 
431 ! ******************************************************************************
432 ! Copy statistics for regions on the same processor
433 ! ******************************************************************************
434 
435  DO ireg=1,global%nRegions
436  pregion => regions(ireg)
437 
438  IF ( pregion%procid==global%myProcid .AND. & ! region active and
439  pregion%active==active ) THEN ! on my processor
440 
441 ! ==============================================================================
442 ! Set dimensions and pointers
443 ! ==============================================================================
444 
445  ilev = pregion%currLevel
446  npatches = pregion%nPatches
447 
448 
449 ! ==============================================================================
450 ! Loop over patches
451 ! ==============================================================================
452 
453  DO ipatch=1,npatches
454  ppatch => pregion%levels(ilev)%patches(ipatch)
455 
456  bctype = ppatch%bcType
457  iregsrc = ppatch%srcRegion
458  ipatchsrc = ppatch%srcPatch
459 
460  SELECT CASE (bctype)
461 
462 ! ------------------------------------------------------------------------------
463 ! Conforming region interface
464 ! ------------------------------------------------------------------------------
465 
466  CASE( bc_regionconf:bc_regionconf+bc_range )
467  pregionsrc => regions(iregsrc)
468  ppatchsrc => pregionsrc%levels(ilev)%patches(ipatchsrc)
469 
470  IF ( regions(iregsrc)%procid == global%myProcid ) THEN
471  CALL plag_rflo_copystatbuff( pregion,pregionsrc, &
472  ppatch,ppatchsrc )
473  ENDIF ! regions(iRegSrc)%procid
474 
475 ! ------------------------------------------------------------------------------
476 ! Non-conforming region interface (integer)
477 ! ------------------------------------------------------------------------------
478 
479  CASE( bc_regionint:bc_regionint+bc_range )
480  CALL errorstop( global,err_unknown_bc,__line__ )
481 
482 ! ------------------------------------------------------------------------------
483 ! Non-conforming region interface (irregular)
484 ! ------------------------------------------------------------------------------
485 
486  CASE( bc_regnonconf:bc_regnonconf+bc_range)
487  CALL errorstop( global,err_unknown_bc,__line__ )
488 
489  END select! bcType
490 
491  END DO ! iPatch
492  END IF ! pRegion%procid
493  END DO ! iReg
494 
495 ! ******************************************************************************
496 ! Communicate buffer for off-processor regions
497 ! ******************************************************************************
498 
499 ! ==============================================================================
500 ! Send buffer data
501 ! ==============================================================================
502 
503 #ifdef MPI
504  DO ireg = 1, global%nRegions
505  IF ( regions(ireg)%procid==global%myProcid .AND. & ! region active and
506  regions(ireg)%active==active ) THEN ! on my processor
507  CALL plag_rflo_sendstatbuffwrapper( regions, ireg )
508  ENDIF ! regions
509  ENDDO ! iReg
510 
511 ! ==============================================================================
512 ! Receive buffer data
513 ! ==============================================================================
514 
515  DO ireg = 1, global%nRegions
516  IF ( regions(ireg)%procid==global%myProcid .AND. & ! region active and
517  regions(ireg)%active==active ) THEN ! on my processor
518  CALL plag_rflo_recvstatbuffwrapper( regions, ireg )
519  ENDIF ! regions
520  ENDDO ! iReg
521 
522 ! ==============================================================================
523 ! wait for data being received by other processors ----------------------------
524 ! ==============================================================================
525 
526  DO ireg = 1, global%nRegions
527  IF ( regions(ireg)%procid==global%myProcid .AND. & ! region active and
528  regions(ireg)%active==active ) THEN ! on my processor
529  CALL plag_rflo_clearreqstatbuff( regions, ireg )
530  ENDIF ! regions
531  ENDDO ! iReg
532 #endif
533 
534 ! ******************************************************************************
535 ! Finalize
536 ! ******************************************************************************
537 
538 ! ******************************************************************************
539 ! End
540 ! ******************************************************************************
541 
542 999 CONTINUE
543  CALL deregisterfunction( global )
544 
545  END SUBROUTINE plag_rflo_commstatbuffwrapper
546 
547 
548 
549 
550 
551 
552 
553 ! ******************************************************************************
554 !
555 ! Purpose: Copy buffer statistics arrays for on-processor regions.
556 !
557 ! Description: None.
558 !
559 ! Input: pRegion = current region
560 ! pRegionSrc = source region
561 ! pPatch = current patch
562 ! pPatchSrc = source patch
563 !
564 ! Output: None.
565 !
566 ! Notes: None.
567 !
568 ! ******************************************************************************
569 
570  SUBROUTINE plag_rflo_copystatbuff( pRegion,pRegionSrc,pPatch,pPatchSrc )
571 
572  IMPLICIT NONE
573 
574 ! ******************************************************************************
575 ! Declarations and definitions
576 ! ******************************************************************************
577 
578 ! ==============================================================================
579 ! Arguments
580 ! ==============================================================================
581 
582  TYPE(t_patch), POINTER :: ppatch,ppatchsrc
583  TYPE(t_region), POINTER :: pregion,pregionsrc
584 
585 ! ==============================================================================
586 ! Locals
587 ! ==============================================================================
588 
589  INTEGER :: idum,iv,i,j,k,ii,jj,kk
590  INTEGER :: ibeg, iend, jbeg, jend, kbeg, kend, idir, jdir, kdir, &
591  icoff, ijcoff, ijkd, ilev
592  INTEGER :: ibegsrc, iendsrc, jbegsrc, jendsrc, kbegsrc, kendsrc, &
593  idirsrc, jdirsrc, kdirsrc, icoffsrc, ijcoffsrc, ijkcsrc
594  INTEGER :: lb, lbs, l1srcdir, l2srcdir, mapmat(3,4)
595  INTEGER :: ivevbeg,ivevend,ivtavbeg,ivtavend
596 
597  LOGICAL :: align
598 
599  REAL(KIND=RFREAL), DIMENSION(:,:), POINTER :: ev,evsrc,tav,tavsrc
600 
601  TYPE(t_plag), POINTER :: pplag
602  TYPE(t_global), POINTER :: global
603 
604 ! ******************************************************************************
605 ! Start, set pointers and variables
606 ! ******************************************************************************
607 
608  global => pregion%global
609 
610  CALL registerfunction( global,'PLAG_RFLO_CopyStatBuff',&
611  'PLAG_RFLO_ModStats.F90' )
612 
613 ! ******************************************************************************
614 ! Check if the source region is active
615 ! ******************************************************************************
616 
617  IF ( pregionsrc%active == off ) THEN
618  CALL errorstop( global,err_srcregion_off,__line__ )
619  ENDIF
620 
621 ! ******************************************************************************
622 ! Set dimensions and pointers
623 ! ******************************************************************************
624 
625  ilev = pregion%currLevel
626 
627  CALL rflo_getpatchindices( pregion,ppatch,ilev,ibeg,iend, &
628  jbeg,jend,kbeg,kend )
629  CALL rflo_getpatchindices( pregionsrc,ppatchsrc,ilev,ibegsrc,iendsrc, &
630  jbegsrc,jendsrc,kbegsrc,kendsrc )
631  CALL rflo_getpatchdirection( ppatch ,idir ,jdir, kdir )
632  CALL rflo_getpatchdirection( ppatchsrc,idirsrc,jdirsrc,kdirsrc )
633  CALL rflo_getcelloffset( pregion ,ilev,icoff ,ijcoff )
634  CALL rflo_getcelloffset( pregionsrc,ilev,icoffsrc,ijcoffsrc )
635 
636  ev => pregion%levels(ilev)%plag%ev
637  evsrc => pregionsrc%levels(ilev)%plag%ev
638 
639  ivevbeg = 1
640  ivevend = SIZE(ev,dim=1)
641 
642  tav => pregion%levels(ilev)%plag%tav
643  tavsrc => pregionsrc%levels(ilev)%plag%tav
644 
645  ivtavbeg = 1
646  ivtavend = SIZE(tav,dim=1)
647 
648 ! ******************************************************************************
649 ! Mapping between patches
650 ! ******************************************************************************
651 
652  l1srcdir = 1
653  IF (ppatch%srcL1beg > ppatch%srcL1end) l1srcdir = -1
654  l2srcdir = 1
655  IF (ppatch%srcL2beg > ppatch%srcL2end) l2srcdir = -1
656 
657  lb = ppatch%lbound
658  lbs = ppatch%srcLbound
659  align = ppatch%align
660 
661  CALL rflo_getpatchmapping( lb,lbs,l1srcdir,l2srcdir,align, &
662  idir,jdir,kdir,idirsrc,jdirsrc,kdirsrc, &
663  ibeg,iend,jbeg,jend,kbeg,kend, &
664  ibegsrc,iendsrc,jbegsrc,jendsrc,kbegsrc,kendsrc, &
665  mapmat )
666 
667 ! ******************************************************************************
668 ! Loop over dummy nodes of current patch
669 ! ******************************************************************************
670 
671  DO idum=1,pregion%nDumCells
672  DO k=kbeg,kend
673  DO j=jbeg,jend
674  DO i=ibeg,iend
675  ii = i - idum*idir
676  jj = j - idum*jdir
677  kk = k - idum*kdir
678  ijkd = indijk(ii,jj,kk,icoff,ijcoff)
679  ijkcsrc = indijkmap(ii,jj,kk,mapmat,icoffsrc,ijcoffsrc)
680 
681  DO iv=ivevbeg,ivevend
682  ev(iv,ijkd) = evsrc(iv,ijkcsrc)
683  END DO ! iVar
684 
685  DO iv=ivtavbeg,ivtavend
686  tav(iv,ijkd) = tavsrc(iv,ijkcsrc)
687  END DO ! iVar
688  ENDDO ! i
689  ENDDO ! j
690  ENDDO ! k
691  ENDDO ! idum
692 
693 ! ******************************************************************************
694 ! Finalize
695 ! ******************************************************************************
696 
697 ! ******************************************************************************
698 ! End
699 ! ******************************************************************************
700 
701  CALL deregisterfunction( global )
702 
703  END SUBROUTINE plag_rflo_copystatbuff
704 
705 
706 
707 
708 
709 
710 
711 
712 ! ******************************************************************************
713 !
714 ! Purpose: Read in time averaged statistics of the Lagrangian particles
715 ! on Eulerian grid.
716 !
717 ! Description: the following solution formats are supported:
718 ! - RocfloMP ASCII
719 ! - RocfloMP binary
720 !
721 ! Input: regions = dimensions of all regions
722 !
723 ! Output: region%levels%plag%tav = time avg Lagrangian particle variables
724 ! global%integrTime = integrated averaging time
725 !
726 ! Notes: time averaged solution is read in only for the current grid level;
727 ! it is also read in for all dummy cells
728 !
729 ! ******************************************************************************
730 
731  SUBROUTINE plag_rflo_readstat(regions)
732 
733  IMPLICIT NONE
734 
735 ! ******************************************************************************
736 ! Declarations and definitions
737 ! ******************************************************************************
738 
739 ! ==============================================================================
740 ! Arguments
741 ! ==============================================================================
742 
743  TYPE(t_region), POINTER :: regions(:)
744 
745 ! ==============================================================================
746 ! Locals
747 ! ==============================================================================
748 
749  CHARACTER(2*CHRLEN+17) :: fname
750  CHARACTER(CHRLEN) :: msg
751 
752  INTEGER :: ireg, i, j, k, l, n, ind
753 
754 #ifdef MPI
755  INTEGER :: status(mpi_status_size)
756 #endif
757  INTEGER :: ilev,iregfile,ipc,jpc,kpc,ndumcells,ndim,ioff,ijoff,ijk
758  INTEGER :: idcbeg,jdcbeg,kdcbeg,idcend,jdcend,kdcend,ijkbeg,ijkend
759  INTEGER :: errorflag,ntav,ntavvar
760 
761  INTEGER, ALLOCATABLE, DIMENSION (:,:) :: ivar,jvar,plagvarid
762 
763  REAL(RFREAL), POINTER, DIMENSION(:,:) :: tav
764  REAL(RFREAL), ALLOCATABLE, DIMENSION(:,:) :: rvar, tavfile
765 
766  TYPE(t_global), POINTER :: global
767 
768 ! ******************************************************************************
769 ! Start, set pointers and variables
770 ! ******************************************************************************
771 
772  global => regions(1)%global
773 
774  CALL registerfunction( global,'PLAG_RFLO_ReadStat',&
775  'PLAG_RFLO_ModStats.F90' )
776 
777 ! ******************************************************************************
778 ! Allocate temporary data arrays
779 ! ******************************************************************************
780 
781  ALLOCATE( ivar(5,1),stat=errorflag )
782  global%error = errorflag
783  IF ( global%error /= err_none ) &
784  CALL errorstop( global,err_allocate,__line__,'ivar' )
785 
786  ALLOCATE( rvar(2,1),stat=errorflag )
787  global%error = errorflag
788  IF ( global%error /= err_none ) &
789  CALL errorstop( global,err_allocate,__line__,'rvar' )
790 
791  ALLOCATE( jvar(global%plagNStat+1,1),stat=errorflag )
792  global%error = errorflag
793  IF ( global%error /= err_none ) &
794  CALL errorstop( global,err_allocate,__line__,'jvar' )
795 
796  ALLOCATE( plagvarid(2,global%plagNStat+1),stat=errorflag )
797  global%error = errorflag
798  IF ( global%error /= err_none ) &
799  CALL errorstop( global,err_allocate,__line__,'plagVarId' )
800 
801 ! ******************************************************************************
802 ! Open statistics file (only master proc.)
803 ! ******************************************************************************
804 
805  IF (global%myProcid == masterproc) THEN
806 
807  SELECT CASE( global%solutFormat )
808  CASE ( format_ascii )
809  WRITE(fname,'(A,1PE11.5)') &
810  trim(global%inDir)//trim(global%casename)//'.plag_stata_', &
811  global%timeStamp
812  OPEN( if_plag_stats,file=fname,form='formatted',status='old', &
813  iostat=errorflag )
814 
815  CASE ( format_binary )
816  WRITE(fname,'(A,1PE11.5)') &
817  trim(global%inDir)//trim(global%casename)//'.plag_stat_', &
818  global%timeStamp
819  OPEN( if_plag_stats,file=fname,form='unformatted',status='old', &
820  iostat=errorflag )
821 
822  CASE default
823  CALL errorstop( global,err_reached_default,__line__ )
824 
825  END SELECT ! solutFormat
826 
827  global%error = errorflag
828  IF ( global%error /= err_none ) &
829  CALL errorstop( global,err_file_open,__line__,'File: '//trim(fname) )
830 
831  ENDIF ! global%myProcid
832 
833 ! ******************************************************************************
834 ! Read & broadcast current and integrated time in file, and stats ID
835 ! ******************************************************************************
836 
837  IF ( global%myProcid == masterproc ) THEN
838  CALL rflo_readdatafilereal( global,if_plag_stats,global%solutFormat,2,1,rvar )
839  ENDIF ! global%myProcid
840 
841 #ifdef MPI
842  CALL mpi_bcast( rvar,2,mpi_rfreal,masterproc,global%mpiComm,global%mpierr )
843  IF (global%mpierr /= err_none ) &
844  CALL errorstop( global,err_mpi_trouble,__line__ )
845 #endif
846 
847 ! ==============================================================================
848 ! Trap error for inconsistent variables in header
849 ! ==============================================================================
850 
851  IF ( global%flowType==flow_unsteady .AND. global%currentTime>0._rfreal ) THEN
852  IF ( global%currentTime /= rvar(1,1) ) THEN
853  WRITE(msg,1000) rvar(1,1),global%currentTime
854  CALL errorstop( global,err_time_solution,__line__,msg//' File: '//trim(fname) )
855  ENDIF ! currentTime
856 
857  IF ( global%integrTime /= rvar(2,1) ) THEN
858  WRITE(msg,2000) rvar(2,1),global%integrTime
859  CALL errorstop( global,err_time_solution,__line__,msg//' File: '//trim(fname) )
860  ENDIF ! integrTime
861 
862  ENDIF ! global%flowType
863 
864 ! ******************************************************************************
865 ! Read plagNStat and plagStatId from file
866 ! ******************************************************************************
867 
868  IF ( global%myProcid == masterproc ) THEN
869  IF (global%plagNStat > 0) THEN
870  CALL rflo_readdatafileint( global,if_plag_stats,global%solutFormat, &
871  global%plagNStat+1,1,jvar )
872  ntavvar = jvar(1,1)
873  IF ( ntavvar /= global%plagNStat ) THEN
874  CALL errorstop( global,err_stats_restart,__line__ )
875  END IF ! nTavVar
876 
877  plagvarid(1,:) = jvar(2:global%plagNStat+1,1)
878  plagvarid(2,:) = mod(plagvarid(1,:),10)
879  plagvarid(1,:) = (plagvarid(1,:)-plagvarid(2,:))/10
880 
881  DO ind=1,2
882  DO l=1,global%plagNStat
883  IF ( plagvarid(ind,l) /= global%plagStatId(ind,l) ) &
884  CALL errorstop( global,err_stats_restart,__line__ )
885  END DO ! l
886  END DO ! ind
887  ENDIF ! plagNStat
888 
889  ENDIF ! myProcid
890 
891 ! ******************************************************************************
892 ! Read statistics data from all regions
893 ! ******************************************************************************
894 
895  DO ireg=1,global%nRegions
896 
897 ! ==============================================================================
898 ! Get dimensions and pointers
899 ! ==============================================================================
900 
901  ilev = regions(ireg)%currLevel
902  CALL rflo_getdimensdummy( regions(ireg),ilev,idcbeg,idcend, &
903  jdcbeg,jdcend,kdcbeg,kdcend )
904  CALL rflo_getcelloffset( regions(ireg),ilev,ioff,ijoff )
905  ijkbeg = indijk(idcbeg,jdcbeg,kdcbeg,ioff,ijoff)
906  ijkend = indijk(idcend,jdcend,kdcend,ioff,ijoff)
907  ndim = ijkend - ijkbeg + 1
908 
909  ntav =global%plagNStat
910 
911 ! ==============================================================================
912 ! Read region number and dimensions (only master)
913 ! ==============================================================================
914 
915  IF (global%myProcid == masterproc) THEN
916  CALL rflo_readdatafileint( global,if_plag_stats,global%solutFormat,5,1,ivar )
917  iregfile = ivar(1,1)
918  ipc = ivar(2,1)
919  jpc = ivar(3,1)
920  kpc = ivar(4,1)
921  ndumcells = ivar(5,1)
922 
923  IF (iregfile /= ireg) &
924  CALL errorstop( global,err_region_number,__line__,'File: '//trim(fname) )
925 
926  IF ( (ipc /= regions(ireg)%levels(ilev)%grid%ipc) .OR. &
927  (jpc /= regions(ireg)%levels(ilev)%grid%jpc) .OR. &
928  (kpc /= regions(ireg)%levels(ilev)%grid%kpc) ) THEN
929  WRITE(msg,1005) ireg,ipc,jpc,kpc
930  CALL errorstop( global,err_grid_dimensions,__line__,msg )
931  ENDIF ! ipc
932 
933  IF ( ndumcells /= regions(ireg)%nDumCells ) THEN
934  WRITE(msg,1010) ireg,ndumcells,regions(ireg)%nDumCells
935  CALL errorstop( global,err_grid_dumcells,__line__,msg )
936  ENDIF ! nDumCells
937 
938 ! ==============================================================================
939 ! Master reads & sends data, others receive them
940 ! ==============================================================================
941 
942  ALLOCATE( tavfile(ntav,ndim),stat=errorflag )
943  global%error = errorflag
944  IF ( global%error /= err_none ) &
945  CALL errorstop( global,err_allocate,__line__ )
946 
947  CALL rflo_readdatafilereal( global,if_plag_stats,global%solutFormat, &
948  ntav,ndim,tavfile )
949 
950 #ifdef MPI
951  IF ( regions(ireg)%procid /= masterproc ) THEN
952  CALL mpi_send( tavfile,ntav*ndim,mpi_rfreal, &
953  regions(ireg)%procid,ireg, &
954  global%mpiComm,global%mpierr )
955  IF (global%mpierr /= err_none ) &
956  CALL errorstop( global,err_mpi_trouble,__line__ )
957  ENDIF ! regions(iReg)%procid
958 #endif
959  ELSE ! not the master
960 
961  IF ( regions(ireg)%procid == global%myProcid ) THEN
962  ALLOCATE( tavfile(ntav,ndim),stat=errorflag )
963  global%error = errorflag
964  IF ( global%error /= err_none ) &
965  CALL errorstop( global,err_allocate,__line__ )
966 
967 #ifdef MPI
968  CALL mpi_recv( tavfile,ntav*ndim,mpi_rfreal,masterproc, &
969  ireg,global%mpiComm,status,global%mpierr )
970  IF ( global%mpierr /= err_none ) &
971  CALL errorstop( global,err_mpi_trouble,__line__ )
972 #endif
973  ENDIF ! regions(iReg)%procid
974 
975  ENDIF ! global%myProcid
976 
977 ! ==============================================================================
978 ! Copy statistics into data structure
979 ! ==============================================================================
980 
981  IF ( regions(ireg)%procid == global%myProcid ) THEN
982  tav => regions(ireg)%levels(ilev)%plag%tav
983 
984  n = 0
985  DO k=kdcbeg,kdcend
986  DO j=jdcbeg,jdcend
987  DO i=idcbeg,idcend
988  n = n + 1
989  ijk = indijk(i,j,k,ioff,ijoff)
990  DO l=1,ntav
991  tav(l,ijk) = tavfile(l,n)
992  ENDDO ! l
993  ENDDO ! i
994  ENDDO ! j
995  ENDDO ! k
996  ENDIF ! regions(iReg)%procid
997 
998 ! ==============================================================================
999 ! Deallocate local array
1000 ! ==============================================================================
1001 
1002  IF ( ALLOCATED(tavfile) ) THEN
1003  DEALLOCATE( tavfile,stat=errorflag )
1004  global%error = errorflag
1005  IF ( global%error /= err_none ) &
1006  CALL errorstop( global,err_deallocate,__line__,'tavFile' )
1007  ENDIF ! tavFile
1008 
1009  ENDDO ! iReg
1010 
1011 ! ******************************************************************************
1012 ! Deallocate temporary data arrays
1013 ! ******************************************************************************
1014 
1015  DEALLOCATE( ivar,stat=errorflag )
1016  global%error = errorflag
1017  IF ( global%error /= err_none ) &
1018  CALL errorstop( global,err_deallocate,__line__,'ivar' )
1019 
1020  DEALLOCATE( rvar,stat=errorflag )
1021  global%error = errorflag
1022  IF ( global%error /= err_none ) &
1023  CALL errorstop( global,err_deallocate,__line__,'rvar' )
1024 
1025  DEALLOCATE( jvar,stat=errorflag )
1026  global%error = errorflag
1027  IF ( global%error /= err_none ) &
1028  CALL errorstop( global,err_deallocate,__line__,'jvar' )
1029 
1030  DEALLOCATE( plagvarid,stat=errorflag )
1031  global%error = errorflag
1032  IF ( global%error /= err_none ) &
1033  CALL errorstop( global,err_deallocate,__line__,'plagVarId' )
1034 
1035 ! ******************************************************************************
1036 ! Finalize
1037 ! ******************************************************************************
1038 
1039  IF ( global%myProcid == masterproc ) THEN
1040  CLOSE(if_plag_stats,iostat=errorflag)
1041  global%error = errorflag
1042  IF ( global%error /= err_none ) &
1043  CALL errorstop( global,err_file_close,__line__,'File: '//trim(fname) )
1044  ENDIF
1045 
1046 ! ******************************************************************************
1047 ! End
1048 ! ******************************************************************************
1049 
1050  CALL deregisterfunction( global )
1051 
1052 ! ******************************************************************************
1053 ! Formats
1054 ! ******************************************************************************
1055 
1056 1000 FORMAT('Time in file is= ',1pe12.5,' but it should be= ',e12.5,'.')
1057 1005 FORMAT('Region ',i5,', ipc= ',i6,', jpc= ',i6,', kpc= ',i6,'.')
1058 1010 FORMAT('Region ',i5,', # dummy cells=',i2,' but should be= ',i1)
1059 2000 FORMAT('Integration Time in file is= ',1pe12.5,' but it should be= ',e12.5,'.')
1060 
1061  END SUBROUTINE plag_rflo_readstat
1062 
1063 
1064 
1065 
1066 
1067 
1068 !******************************************************************************
1069 !
1070 ! Purpose: Wrapper to receive data.
1071 !
1072 ! Description: none.
1073 !
1074 ! Input: regions = data of all regions
1075 ! iReg = index of current region.
1076 !
1077 ! Output: regions(iReg)%levels%plag%tav = updated plag statitics values
1078 ! in dummy cells of current region.
1079 !
1080 ! Notes: none.
1081 !
1082 !******************************************************************************
1083 
1084  SUBROUTINE plag_rflo_recvstatbuffwrapper( regions,iReg )
1085 
1086  IMPLICIT NONE
1087 
1088 ! ******************************************************************************
1089 ! Declarations and definitions
1090 ! ******************************************************************************
1091 
1092 ! ==============================================================================
1093 ! Arguments
1094 ! ==============================================================================
1095 
1096  TYPE(t_region), POINTER :: regions(:)
1097 
1098 ! ==============================================================================
1099 ! Locals
1100 ! ==============================================================================
1101 
1102  INTEGER :: bctype,ilev,ipatch,ipatchsrc,ireg,iregsrc,npatches
1103 
1104  REAL(KIND=RFREAL), DIMENSION(:,:), POINTER :: tav
1105 
1106  TYPE(t_patch), POINTER :: ppatch,ppatchsrc
1107  TYPE(t_region), POINTER :: pregion,pregionsrc
1108  TYPE(t_global), POINTER :: global
1109 
1110 ! ******************************************************************************
1111 ! Start, set pointers and variables
1112 ! ******************************************************************************
1113 
1114  global => regions(1)%global
1115 
1116  CALL registerfunction( global,'PLAG_RFLO_RecvStatBuffWrapper',&
1117  'PLAG_RFLO_ModStats.F90' )
1118 
1119 ! ******************************************************************************
1120 ! Set dimensions, variables, pointers
1121 ! ******************************************************************************
1122 
1123  pregion => regions(ireg)
1124 
1125  ilev = pregion%currLevel
1126  npatches = pregion%nPatches
1127 
1128 ! ******************************************************************************
1129 ! Receive data (regular cells) from other processors
1130 ! ******************************************************************************
1131 
1132  DO ipatch=1,npatches
1133  ppatch => pregion%levels(ilev)%patches(ipatch)
1134 
1135  bctype = ppatch%bcType
1136  iregsrc = ppatch%srcRegion
1137  ipatchsrc = ppatch%srcPatch
1138 
1139  IF ((bctype>=bc_regionconf .AND. bctype<=bc_regionconf+bc_range) .OR. &
1140  (bctype>=bc_regionint .AND. bctype<=bc_regionint +bc_range) .OR. &
1141  (bctype>=bc_regnonconf .AND. bctype<=bc_regnonconf+bc_range) .OR. &
1142  (bctype>=bc_tra_peri .AND. bctype<=bc_tra_peri +bc_range) .OR. &
1143  (bctype>=bc_rot_peri .AND. bctype<=bc_rot_peri +bc_range)) THEN
1144  IF (regions(iregsrc)%procid /= regions(ireg)%global%myProcid) THEN
1145  pregionsrc => regions(iregsrc)
1146  ppatchsrc => pregionsrc%levels(ilev)%patches(ipatchsrc)
1147 
1148  CALL plag_rflo_recvstatbuff( pregion,pregionsrc,ppatch,ppatchsrc )
1149  ENDIF ! procid
1150 
1151  ENDIF ! bcType
1152  ENDDO ! iPatch
1153 
1154 ! ******************************************************************************
1155 ! Finalize
1156 ! ******************************************************************************
1157 
1158 ! ******************************************************************************
1159 ! End
1160 ! ******************************************************************************
1161 
1162  CALL deregisterfunction( global )
1163 
1164  END SUBROUTINE plag_rflo_recvstatbuffwrapper
1165 
1166 
1167 
1168 
1169 
1170 !******************************************************************************
1171 !
1172 ! Purpose: receive data for dummy cells from adjacent regions being
1173 ! on another processor.
1174 !
1175 ! Description: none.
1176 !
1177 ! Input: pRegion = current region
1178 ! pRegionSrc = source region
1179 ! pPatch = current patch
1180 ! pPatchSrc = source patch
1181 !
1182 ! Output: pRegion%levels%plag%tav = updated statistics values
1183 ! in dummy cells of current region.
1184 !
1185 ! Notes: none.
1186 !
1187 !******************************************************************************
1188 
1189  SUBROUTINE plag_rflo_recvstatbuff( pRegion,pRegionSrc,pPatch,pPatchSrc )
1190 
1191  IMPLICIT NONE
1192 
1193 ! ******************************************************************************
1194 ! Declarations and definitions
1195 ! ******************************************************************************
1196 
1197 ! ==============================================================================
1198 ! Arguments
1199 ! ==============================================================================
1200 
1201  TYPE(t_patch), POINTER :: ppatch,ppatchsrc
1202  TYPE(t_region), POINTER :: pregion,pregionsrc
1203 
1204 ! ==============================================================================
1205 ! Locals
1206 ! ==============================================================================
1207 
1208  INTEGER :: bctype,ilev,ipatch,ipatchsrc,ireg,iregsrc,neqs,npatches
1209  INTEGER :: ijkbuff,ijkvbuff,ijkd,iv,ivs,lb,n1,n2,ndim
1210  INTEGER :: i,j,k,idum
1211  INTEGER :: ibeg, iend, jbeg, jend, kbeg, kend, icoff, ijcoff, source, tag
1212  INTEGER :: ivevbeg,ivevend,ivtavbeg,ivtavend,nev,ntav
1213 #ifdef MPI
1214  INTEGER :: status(mpi_status_size)
1215 #endif
1216 
1217  REAL(KIND=RFREAL), DIMENSION(:,:), POINTER :: ev,tav
1218 
1219  TYPE(t_buffer_plag), POINTER :: pbuffplag
1220  TYPE(t_global), POINTER :: global
1221 
1222 ! ******************************************************************************
1223 ! Start, set pointers and variables
1224 ! ******************************************************************************
1225 
1226  global => pregion%global
1227 
1228  CALL registerfunction( global,'PLAG_RFLO_RecvStatBuff',&
1229  'PLAG_RFLO_ModStats.F90' )
1230 
1231 ! ******************************************************************************
1232 ! Check if the source region is active
1233 ! ******************************************************************************
1234 
1235  IF ( pregionsrc%active == off ) THEN
1236  CALL errorstop( global,err_srcregion_off,__line__ )
1237  ENDIF
1238 
1239 ! ******************************************************************************
1240 ! Set pointers
1241 ! ******************************************************************************
1242 
1243  ilev = pregion%currLevel
1244 
1245  ev => pregion%levels(ilev)%plag%ev
1246  tav => pregion%levels(ilev)%plag%tav
1247  pbuffplag => ppatch%bufferPlag
1248 
1249 ! ******************************************************************************
1250 ! Set dimensions
1251 ! ******************************************************************************
1252 
1253  CALL rflo_getpatchindices( pregion,ppatch,ilev,ibeg,iend, &
1254  jbeg,jend,kbeg,kend )
1255  CALL rflo_getcelloffset( pregion,ilev,icoff,ijcoff )
1256 
1257  n1 = abs(ppatch%l1end-ppatch%l1beg) + 1 ! here, dimensions of current
1258  n2 = abs(ppatch%l2end-ppatch%l2beg) + 1 ! and source patch are identical
1259  ndim = n1*n2*pregion%nDumCells ! ... but not the # of dummy cells
1260 
1261  ntav = global%plagNStat
1262  nev = pregion%levels(ilev)%plag%nEv
1263  neqs = nev +ntav
1264 
1265  ivevbeg = 1
1266  ivevend = SIZE(ev,dim=1)
1267 
1268  ivtavbeg = 1
1269  ivtavend = SIZE(tav,dim=1)
1270 
1271 ! ******************************************************************************
1272 ! Receive data
1273 ! ******************************************************************************
1274 
1275 #ifdef MPI
1276  source = pregionsrc%procid
1277  tag = pregion%localNumber + mpi_patchoff*ppatchsrc%srcPatch
1278  IF(tag .gt. global%mpiTagMax) tag = mod(tag,global%mpiTagMax)
1279 
1280  CALL mpi_recv( pbuffplag%recvBuffStat,neqs*ndim,mpi_rfreal, &
1281  source,tag,global%mpiComm,status,global%mpierr )
1282  IF (global%mpierr /= err_none) &
1283  CALL errorstop( global,err_mpi_trouble,__line__ )
1284 #endif
1285 
1286 ! ******************************************************************************
1287 ! Copy from buffer to dummy nodes
1288 ! ******************************************************************************
1289 
1290  lb = ppatch%lbound
1291  ijkbuff = 0
1292  ijkvbuff = 0
1293 
1294  DO idum=1,pregion%nDumCells
1295 
1296  SELECT CASE(lb)
1297 
1298 ! ==============================================================================
1299 ! face i=const.
1300 ! ==============================================================================
1301 
1302  CASE(1:2)
1303  IF (lb == 1) i = ibeg - idum
1304  IF (lb == 2) i = iend + idum
1305  DO k=kbeg,kend
1306  DO j=jbeg,jend
1307  ijkd = indijk(i,j,k,icoff,ijcoff)
1308  ijkbuff = ijkbuff + 1
1309  ivs = 0
1310  DO iv=ivevbeg,ivevend
1311  ivs = ivs+1
1312  ijkvbuff = ijkbuff +(ivs-1)*ndim
1313  ev(iv,ijkd) = pbuffplag%recvBuffStat(ijkvbuff)
1314  ENDDO ! iv
1315  DO iv=ivtavbeg,ivtavend
1316  ivs = ivs+1
1317  ijkvbuff = ijkbuff +(ivs-1)*ndim
1318  tav(iv,ijkd) = pbuffplag%recvBuffStat(ijkvbuff)
1319  ENDDO ! iv
1320  ENDDO ! j
1321  ENDDO ! k
1322 
1323 ! ==============================================================================
1324 ! face j=const.
1325 ! ==============================================================================
1326 
1327  CASE(3:4)
1328  IF (lb == 3) j = jbeg - idum
1329  IF (lb == 4) j = jend + idum
1330  DO i=ibeg,iend
1331  DO k=kbeg,kend
1332  ijkd = indijk(i,j,k,icoff,ijcoff)
1333  ijkbuff = ijkbuff + 1
1334  ivs = 0
1335  DO iv=ivevbeg,ivevend
1336  ivs = ivs+1
1337  ijkvbuff = ijkbuff +(ivs-1)*ndim
1338  ev(iv,ijkd) = pbuffplag%recvBuffStat(ijkvbuff)
1339  ENDDO ! iv
1340  DO iv=ivtavbeg,ivtavend
1341  ivs = ivs+1
1342  ijkvbuff = ijkbuff +(ivs-1)*ndim
1343  tav(iv,ijkd) = pbuffplag%recvBuffStat(ijkvbuff)
1344  ENDDO ! iv
1345  ENDDO ! k
1346  ENDDO ! i
1347 
1348 ! ==============================================================================
1349 ! face k=const.
1350 ! ==============================================================================
1351 
1352  CASE(5:6)
1353  IF (lb == 5) k = kbeg - idum
1354  IF (lb == 6) k = kend + idum
1355  DO j=jbeg,jend
1356  DO i=ibeg,iend
1357  ijkd = indijk(i,j,k,icoff,ijcoff)
1358  ijkbuff = ijkbuff + 1
1359  ivs = 0
1360  DO iv=ivevbeg,ivevend
1361  ivs = ivs+1
1362  ijkvbuff = ijkbuff +(ivs-1)*ndim
1363  ev(iv,ijkd) = pbuffplag%recvBuffStat(ijkvbuff)
1364  ENDDO ! iv
1365  DO iv=ivtavbeg,ivtavend
1366  ivs = ivs+1
1367  ijkvbuff = ijkbuff +(ivs-1)*ndim
1368  tav(iv,ijkd) = pbuffplag%recvBuffStat(ijkvbuff)
1369  ENDDO ! iv
1370  ENDDO ! i
1371  ENDDO ! j
1372  END SELECT ! lb
1373 
1374  ENDDO ! idum
1375 
1376 ! ******************************************************************************
1377 ! Finalize
1378 ! ******************************************************************************
1379 
1380 ! ******************************************************************************
1381 ! End
1382 ! ******************************************************************************
1383 
1384  CALL deregisterfunction( global )
1385 
1386  END SUBROUTINE plag_rflo_recvstatbuff
1387 
1388 
1389 
1390 
1391 
1392 
1393 ! ******************************************************************************
1394 !
1395 ! Purpose: Wrapper to send buffer statistics arrays.
1396 !
1397 ! Description: None.
1398 !
1399 ! Input: regions = dimensions of all regions
1400 ! iReg = current region
1401 !
1402 ! Output: None.
1403 !
1404 ! Notes: None.
1405 !
1406 ! ******************************************************************************
1407 
1408  SUBROUTINE plag_rflo_sendstatbuffwrapper( regions,iReg )
1409 
1410  IMPLICIT NONE
1411 
1412 ! ******************************************************************************
1413 ! Declarations and definitions
1414 ! ******************************************************************************
1415 
1416 ! ==============================================================================
1417 ! Arguments
1418 ! ==============================================================================
1419 
1420  TYPE(t_region), POINTER :: regions(:)
1421 
1422  INTEGER :: ireg
1423 
1424 ! ==============================================================================
1425 ! Locals
1426 ! ==============================================================================
1427 
1428  INTEGER :: bctype,ilev,ipatch,ipatchsrc,iregsrc,npatches
1429 
1430  REAL(RFREAL), POINTER, DIMENSION(:,:) :: tav
1431 
1432  TYPE(t_patch), POINTER :: ppatch
1433  TYPE(t_region), POINTER :: pregion,pregionsrc
1434  TYPE(t_global), POINTER :: global
1435 
1436 ! ******************************************************************************
1437 ! Start, set pointers and variables
1438 ! ******************************************************************************
1439 
1440  global => regions(ireg)%global
1441 
1442  CALL registerfunction( global,'PLAG_RFLO_SendStatBuffWrapper',&
1443  'PLAG_RFLO_ModStats.F90' )
1444 
1445 ! ******************************************************************************
1446 ! Load communication buffers
1447 ! ******************************************************************************
1448 
1449  pregion => regions(ireg)
1450 
1451  IF ( pregion%procid==global%myProcid .AND. & ! region active and
1452  pregion%active==active ) THEN ! on my processor
1453 
1454 ! ==============================================================================
1455 ! Set dimensions and pointers
1456 ! ==============================================================================
1457 
1458  ilev = pregion%currLevel
1459  npatches = pregion%nPatches
1460 
1461 ! ==============================================================================
1462 ! Loop over patches
1463 ! ==============================================================================
1464 
1465  DO ipatch=1,npatches
1466  ppatch => pregion%levels(ilev)%patches(ipatch)
1467 
1468  bctype = ppatch%bcType
1469  iregsrc = ppatch%srcRegion
1470  ipatchsrc = ppatch%srcPatch
1471 
1472  SELECT CASE (bctype)
1473 
1474 ! ------------------------------------------------------------------------------
1475 ! Conforming region interface
1476 ! ------------------------------------------------------------------------------
1477 
1478  CASE( bc_regionconf:bc_regionconf+bc_range )
1479  pregionsrc => regions(iregsrc)
1480 
1481  IF ( pregionsrc%procid /= global%myProcid ) THEN
1482  CALL plag_rflo_sendstatbuffconf( pregion,pregionsrc,ppatch )
1483  ENDIF ! regions(iRegSrc)%procid
1484 
1485 ! ------------------------------------------------------------------------------
1486 ! Non-conforming region interface (integer)
1487 ! ------------------------------------------------------------------------------
1488 
1489  CASE( bc_regionint:bc_regionint+bc_range )
1490  CALL errorstop( global,err_unknown_bc,__line__ )
1491 
1492 ! ------------------------------------------------------------------------------
1493 ! Non-conforming region interface (irregular)
1494 ! ------------------------------------------------------------------------------
1495 
1496  CASE( bc_regnonconf:bc_regnonconf+bc_range)
1497  CALL errorstop( global,err_unknown_bc,__line__ )
1498 
1499  END select! bcType
1500 
1501  END DO ! iPatch
1502  END IF ! pRegion%procid
1503 
1504 ! ******************************************************************************
1505 ! Finalize
1506 ! ******************************************************************************
1507 
1508 ! ******************************************************************************
1509 ! End
1510 ! ******************************************************************************
1511 
1512  CALL deregisterfunction( global )
1513 
1514  END SUBROUTINE plag_rflo_sendstatbuffwrapper
1515 
1516 
1517 
1518 
1519 
1520 
1521 
1522 
1523 ! ******************************************************************************
1524 !
1525 ! Purpose: Send buffer arrays to dummy cells of the corresponding patch
1526 ! on the adjacent region, residing on another processor.
1527 !
1528 ! Description: None.
1529 !
1530 ! Input: pRegion = current region
1531 ! pRegionSrc = source region
1532 ! pPatch = current patch
1533 !
1534 ! Output: None.
1535 !
1536 ! Notes: Pertinent for conforming regions.
1537 !
1538 ! ******************************************************************************
1539 
1540  SUBROUTINE plag_rflo_sendstatbuffconf( pRegion,pRegionSrc,pPatch )
1541 
1542  IMPLICIT NONE
1543 
1544 ! ******************************************************************************
1545 ! Declarations and definitions
1546 ! ******************************************************************************
1547 
1548 ! ==============================================================================
1549 ! Arguments
1550 ! ==============================================================================
1551 
1552  TYPE(t_patch), POINTER :: ppatch
1553  TYPE(t_region), POINTER :: pregion,pregionsrc
1554 
1555 ! ==============================================================================
1556 ! Locals
1557 ! ==============================================================================
1558 
1559  INTEGER :: iv,ivs,irequeststat,npatches,neqs
1560  INTEGER :: bctype,ipatch,ipatchsrc,iregsrc
1561  INTEGER :: idum, i, j, k, ijkbuff, ijkvbuff
1562  INTEGER :: ilev, ibeg, iend, jbeg, jend, kbeg, kend, icoff, ijcoff, ijkc, &
1563  n1, n2, ndim, dest, tag
1564  INTEGER :: lb, l1srcdir, l2srcdir, l1beg, l1end, l1step, l2beg, l2end, l2step
1565  INTEGER :: ivevbeg,ivevend,ivtavbeg,ivtavend,nev,ntav
1566 
1567  LOGICAL :: align
1568 
1569  REAL(KIND=RFREAL), DIMENSION(:,:), POINTER :: ev,tav
1570 
1571  TYPE(t_buffer_plag), POINTER :: pbuffplag
1572  TYPE(t_plag), POINTER :: pplag
1573  TYPE(t_global), POINTER :: global
1574 
1575 ! ******************************************************************************
1576 ! Start, set pointers and variables
1577 ! ******************************************************************************
1578 
1579  global => pregion%global
1580 
1581  CALL registerfunction( global,'PLAG_RFLO_SendStatBuffConf',&
1582  'PLAG_RFLO_ModStats.F90' )
1583 
1584 ! ******************************************************************************
1585 ! Check if the source region is active
1586 ! ******************************************************************************
1587 
1588  IF ( pregionsrc%active == off ) THEN
1589  CALL errorstop( global,err_srcregion_off,__line__ )
1590  ENDIF
1591 
1592 ! ******************************************************************************
1593 ! Set pointers
1594 ! ******************************************************************************
1595 
1596  ilev = pregion%currLevel
1597 
1598  pplag => pregion%levels(ilev)%plag
1599  pbuffplag => ppatch%bufferPlag
1600  ev => pplag%ev
1601  tav => pplag%tav
1602 
1603 ! ******************************************************************************
1604 ! Set dimensions and pointers
1605 ! ******************************************************************************
1606 
1607  CALL rflo_getpatchindices( pregion,ppatch,ilev,ibeg,iend, &
1608  jbeg,jend,kbeg,kend )
1609  CALL rflo_getcelloffset( pregion,ilev,icoff,ijcoff )
1610 
1611  n1 = abs(ppatch%l1end-ppatch%l1beg) + 1 ! here, dimensions of current
1612  n2 = abs(ppatch%l2end-ppatch%l2beg) + 1 ! and source patch are identical
1613  ndim = n1*n2*pregionsrc%nDumCells ! ... but not the # of dummy cells
1614 
1615  ntav = global%plagNStat
1616  nev = pplag%nEv
1617  neqs = nev +ntav
1618 
1619  ivevbeg = 1
1620  ivevend = SIZE(ev,dim=1)
1621 
1622  ivtavbeg = 1
1623  ivtavend = SIZE(tav,dim=1)
1624 
1625  irequeststat = pbuffplag%iRequestStat
1626 
1627 ! ******************************************************************************
1628 ! Mapping between patches
1629 ! ******************************************************************************
1630 
1631  l1srcdir = 1
1632  IF (ppatch%srcL1beg > ppatch%srcL1end) l1srcdir = -1
1633  l2srcdir = 1
1634  IF (ppatch%srcL2beg > ppatch%srcL2end) l2srcdir = -1
1635 
1636  lb = ppatch%lbound
1637  align = ppatch%align
1638 
1639 ! ******************************************************************************
1640 ! Loop over interior cells of current patch loading buffers
1641 ! ******************************************************************************
1642 
1643  ijkbuff = 0
1644  ijkvbuff = 0
1645 
1646  DO idum=0,pregionsrc%nDumCells-1
1647 
1648  SELECT CASE(lb)
1649 
1650 ! ==============================================================================
1651 ! face i=const.
1652 ! ==============================================================================
1653 
1654  CASE(1:2)
1655  IF (lb == 1) i = ibeg + idum
1656  IF (lb == 2) i = iend - idum
1657 
1658  IF (align) THEN
1659  IF (l1srcdir > 0) THEN
1660  l1beg = jbeg
1661  l1end = jend
1662  ELSE
1663  l1beg = jend
1664  l1end = jbeg
1665  ENDIF ! l1SrcDir
1666  l1step = l1srcdir
1667 
1668  IF (l2srcdir > 0) THEN
1669  l2beg = kbeg
1670  l2end = kend
1671  ELSE
1672  l2beg = kend
1673  l2end = kbeg
1674  ENDIF ! l2SrcDir
1675  l2step = l2srcdir
1676 
1677  DO k=l2beg,l2end,l2step
1678  DO j=l1beg,l1end,l1step
1679  ijkc = indijk(i,j,k,icoff,ijcoff)
1680  ijkbuff = ijkbuff + 1
1681  ivs = 0
1682  DO iv=ivevbeg,ivevend
1683  ivs = ivs +1
1684  ijkvbuff = ijkbuff +(ivs-1)*ndim
1685  pbuffplag%sendBuffStat(ijkvbuff) = ev(iv,ijkc)
1686  ENDDO ! iv
1687  DO iv=ivtavbeg,ivtavend
1688  ivs = ivs +1
1689  ijkvbuff = ijkbuff +(ivs-1)*ndim
1690  pbuffplag%sendBuffStat(ijkvbuff) = tav(iv,ijkc)
1691  ENDDO ! iv
1692  ENDDO ! j
1693  ENDDO ! k
1694  ELSE
1695  IF (l1srcdir > 0) THEN
1696  l1beg = kbeg
1697  l1end = kend
1698  ELSE
1699  l1beg = kend
1700  l1end = kbeg
1701  ENDIF ! l1SrcDir
1702  l1step = l1srcdir
1703 
1704  IF (l2srcdir > 0) THEN
1705  l2beg = jbeg
1706  l2end = jend
1707  ELSE
1708  l2beg = jend
1709  l2end = jbeg
1710  ENDIF ! l2SrcDir
1711  l2step = l2srcdir
1712 
1713  DO j=l2beg,l2end,l2step
1714  DO k=l1beg,l1end,l1step
1715  ijkc = indijk(i,j,k,icoff,ijcoff)
1716  ijkbuff = ijkbuff + 1
1717  ivs = 0
1718  DO iv=ivevbeg,ivevend
1719  ivs = ivs +1
1720  ijkvbuff = ijkbuff +(ivs-1)*ndim
1721  pbuffplag%sendBuffStat(ijkvbuff) = ev(iv,ijkc)
1722  ENDDO ! iv
1723  DO iv=ivtavbeg,ivtavend
1724  ivs = ivs +1
1725  ijkvbuff = ijkbuff +(ivs-1)*ndim
1726  pbuffplag%sendBuffStat(ijkvbuff) = tav(iv,ijkc)
1727  ENDDO ! iv
1728  ENDDO ! j
1729  ENDDO ! k
1730  ENDIF ! align
1731 
1732 ! ==============================================================================
1733 ! face j=const.
1734 ! ==============================================================================
1735 
1736  CASE(3:4)
1737  IF (lb == 3) j = jbeg + idum
1738  IF (lb == 4) j = jend - idum
1739  IF (align) THEN
1740  IF (l1srcdir > 0) THEN
1741  l1beg = kbeg
1742  l1end = kend
1743  ELSE
1744  l1beg = kend
1745  l1end = kbeg
1746  ENDIF ! l1SrcDir
1747  l1step = l1srcdir
1748 
1749  IF (l2srcdir > 0) THEN
1750  l2beg = ibeg
1751  l2end = iend
1752  ELSE
1753  l2beg = iend
1754  l2end = ibeg
1755  ENDIF ! l2SrcDir
1756  l2step = l2srcdir
1757 
1758  DO i=l2beg,l2end,l2step
1759  DO k=l1beg,l1end,l1step
1760  ijkc = indijk(i,j,k,icoff,ijcoff)
1761  ijkbuff = ijkbuff + 1
1762  ivs = 0
1763  DO iv=ivevbeg,ivevend
1764  ivs = ivs +1
1765  ijkvbuff = ijkbuff +(ivs-1)*ndim
1766  pbuffplag%sendBuffStat(ijkvbuff) = ev(iv,ijkc)
1767  ENDDO ! iv
1768  DO iv=ivtavbeg,ivtavend
1769  ivs = ivs +1
1770  ijkvbuff = ijkbuff +(ivs-1)*ndim
1771  pbuffplag%sendBuffStat(ijkvbuff) = tav(iv,ijkc)
1772  ENDDO ! iv
1773  ENDDO ! k
1774  ENDDO ! i
1775  ELSE
1776  IF (l1srcdir > 0) THEN
1777  l1beg = ibeg
1778  l1end = iend
1779  ELSE
1780  l1beg = iend
1781  l1end = ibeg
1782  ENDIF ! l1SrcDir
1783  l1step = l1srcdir
1784 
1785  IF (l2srcdir > 0) THEN
1786  l2beg = kbeg
1787  l2end = kend
1788  ELSE
1789  l2beg = kend
1790  l2end = kbeg
1791  ENDIF ! l2SrcDir
1792  l2step = l2srcdir
1793 
1794  DO k=l2beg,l2end,l2step
1795  DO i=l1beg,l1end,l1step
1796  ijkc = indijk(i,j,k,icoff,ijcoff)
1797  ijkbuff = ijkbuff + 1
1798  ivs = 0
1799  DO iv=ivevbeg,ivevend
1800  ivs = ivs +1
1801  ijkvbuff = ijkbuff +(ivs-1)*ndim
1802  pbuffplag%sendBuffStat(ijkvbuff) = ev(iv,ijkc)
1803  ENDDO ! iv
1804  DO iv=ivtavbeg,ivtavend
1805  ivs = ivs +1
1806  ijkvbuff = ijkbuff +(ivs-1)*ndim
1807  pbuffplag%sendBuffStat(ijkvbuff) = tav(iv,ijkc)
1808  ENDDO ! iv
1809  ENDDO ! i
1810  ENDDO ! k
1811  ENDIF ! align
1812 
1813 ! ==============================================================================
1814 ! face k=const.
1815 ! ==============================================================================
1816 
1817  CASE(5:6)
1818  IF (lb == 5) k = kbeg + idum
1819  IF (lb == 6) k = kend - idum
1820  IF (align) THEN
1821  IF (l1srcdir > 0) THEN
1822  l1beg = ibeg
1823  l1end = iend
1824  ELSE
1825  l1beg = iend
1826  l1end = ibeg
1827  ENDIF ! l1SrcDir
1828  l1step = l1srcdir
1829 
1830  IF (l2srcdir > 0) THEN
1831  l2beg = jbeg
1832  l2end = jend
1833  ELSE
1834  l2beg = jend
1835  l2end = jbeg
1836  ENDIF ! l2SrcDir
1837  l2step = l2srcdir
1838 
1839  DO j=l2beg,l2end,l2step
1840  DO i=l1beg,l1end,l1step
1841  ijkc = indijk(i,j,k,icoff,ijcoff)
1842  ijkbuff = ijkbuff + 1
1843  ivs = 0
1844  DO iv=ivevbeg,ivevend
1845  ivs = ivs +1
1846  ijkvbuff = ijkbuff +(ivs-1)*ndim
1847  pbuffplag%sendBuffStat(ijkvbuff) = ev(iv,ijkc)
1848  ENDDO ! iv
1849  DO iv=ivtavbeg,ivtavend
1850  ivs = ivs +1
1851  ijkvbuff = ijkbuff +(ivs-1)*ndim
1852  pbuffplag%sendBuffStat(ijkvbuff) = tav(iv,ijkc)
1853  ENDDO ! iv
1854  ENDDO ! i
1855  ENDDO ! j
1856  ELSE
1857  IF (l1srcdir > 0) THEN
1858  l1beg = jbeg
1859  l1end = jend
1860  ELSE
1861  l1beg = jend
1862  l1end = jbeg
1863  ENDIF ! l1SrcDir
1864  l1step = l1srcdir
1865 
1866  IF (l2srcdir > 0) THEN
1867  l2beg = ibeg
1868  l2end = iend
1869  ELSE
1870  l2beg = iend
1871  l2end = ibeg
1872  ENDIF ! l2SrcDir
1873  l2step = l2srcdir
1874 
1875  DO i=l2beg,l2end,l2step
1876  DO j=l1beg,l1end,l1step
1877  ijkc = indijk(i,j,k,icoff,ijcoff)
1878  ijkbuff = ijkbuff + 1
1879  ivs = 0
1880  DO iv=ivevbeg,ivevend
1881  ivs = ivs +1
1882  ijkvbuff = ijkbuff +(ivs-1)*ndim
1883  pbuffplag%sendBuffStat(ijkvbuff) = ev(iv,ijkc)
1884  ENDDO ! iv
1885  DO iv=ivtavbeg,ivtavend
1886  ivs = ivs +1
1887  ijkvbuff = ijkbuff +(ivs-1)*ndim
1888  pbuffplag%sendBuffStat(ijkvbuff) = tav(iv,ijkc)
1889  ENDDO ! iv
1890  ENDDO ! j
1891  ENDDO ! i
1892  ENDIF ! align
1893  END SELECT ! lb
1894 
1895  ENDDO ! idum
1896 
1897 ! ******************************************************************************
1898 ! Send data
1899 ! ******************************************************************************
1900 
1901 #ifdef MPI
1902  dest = pregionsrc%procid
1903  tag = pregionsrc%localNumber + mpi_patchoff*ppatch%srcPatch
1904  IF(tag .gt. global%mpiTagMax) tag = mod(tag,global%mpiTagMax)
1905 
1906  CALL mpi_isend( pbuffplag%sendBuffStat,neqs*ndim,mpi_rfreal, &
1907  dest,tag,global%mpiComm, &
1908  pplag%requestsStat(irequeststat),global%mpierr )
1909  IF (global%mpierr /= err_none) &
1910  CALL errorstop( global,err_mpi_trouble,__line__ )
1911 #endif
1912 
1913 ! ******************************************************************************
1914 ! Finalize
1915 ! ******************************************************************************
1916 
1917 ! ******************************************************************************
1918 ! End
1919 ! ******************************************************************************
1920 
1921  CALL deregisterfunction( global )
1922 
1923  END SUBROUTINE plag_rflo_sendstatbuffconf
1924 
1925 
1926 
1927 
1928 
1929 
1930 
1931 
1932 
1933 
1934 !******************************************************************************
1935 !
1936 ! Purpose: Write time averaged statistics of the Lagrangian particles
1937 ! on Eulerian grid.
1938 !
1939 ! Description: the following solution formats are supported:
1940 ! - RocfloMP ASCII
1941 ! - RocfloMP binary
1942 !
1943 ! Input: regions = dimensions of all regions
1944 !
1945 ! Description: the following solution formats are supported:
1946 ! - RocfloMP ASCII
1947 ! - RocfloMP binary
1948 !
1949 ! Input: regions = dimensions and cons. variables of all regions
1950 !
1951 ! Output: to file
1952 !
1953 ! Notes: solution is stored only for the current grid level; it is also
1954 ! stored for all dummy cells; all regions are written into one file
1955 !
1956 !******************************************************************************
1957 
1958  SUBROUTINE plag_rflo_writestat(regions)
1959 
1960  IMPLICIT NONE
1961 
1962 ! ******************************************************************************
1963 ! Declarations and definitions
1964 ! ******************************************************************************
1965 
1966 ! ==============================================================================
1967 ! Arguments
1968 ! ==============================================================================
1969 
1970  TYPE(t_region), POINTER :: regions(:)
1971 
1972 ! ==============================================================================
1973 ! Locals
1974 ! ==============================================================================
1975 
1976  INTEGER :: ireg, i, j, k, l, n
1977 
1978  CHARACTER(2*CHRLEN+17) :: fname
1979 
1980 #ifdef MPI
1981  INTEGER :: status(mpi_status_size)
1982 #endif
1983  INTEGER :: ilev, iregfile, ipc, jpc, kpc, ndumcells, ndim, ioff, ijoff, ijk
1984  INTEGER :: idcbeg, jdcbeg, kdcbeg, idcend, jdcend, kdcend, ijkbeg, ijkend
1985  INTEGER :: errorflag, ntav
1986  INTEGER, ALLOCATABLE , DIMENSION(:) :: plagvarid
1987  INTEGER, ALLOCATABLE , DIMENSION(:,:) :: ivar,jvar
1988 
1989  REAL(RFREAL), POINTER, DIMENSION(:,:) :: tav
1990  REAL(RFREAL), ALLOCATABLE, DIMENSION(:,:) :: rvar, tavfile
1991 
1992  TYPE(t_global), POINTER :: global
1993 
1994 ! ******************************************************************************
1995 ! Start, set pointers and variables
1996 ! ******************************************************************************
1997 
1998  global => regions(1)%global
1999 
2000  CALL registerfunction( global,'PLAG_RFLO_WriteStat',&
2001  'PLAG_RFLO_ModStats.F90' )
2002 
2003  IF (.NOT. global%plagUsed) goto 999
2004 
2005 ! ******************************************************************************
2006 ! Allocate temporary data arrays
2007 ! ******************************************************************************
2008 
2009  ALLOCATE( ivar(5,1),stat=errorflag )
2010  global%error = errorflag
2011  IF ( global%error /= err_none ) &
2012  CALL errorstop( global,err_allocate,__line__,'ivar' )
2013 
2014  ALLOCATE( rvar(2,1),stat=errorflag )
2015  global%error = errorflag
2016  IF ( global%error /= err_none ) &
2017  CALL errorstop( global,err_allocate,__line__,'rvar' )
2018 
2019  ALLOCATE( jvar(global%plagNStat+1,1),stat=errorflag )
2020  global%error = errorflag
2021  IF ( global%error /= err_none ) &
2022  CALL errorstop( global,err_allocate,__line__,'rvar' )
2023 
2024  ALLOCATE( plagvarid(global%plagNStat+1),stat=errorflag )
2025  global%error = errorflag
2026  IF ( global%error /= err_none ) &
2027  CALL errorstop( global,err_allocate,__line__,'plagVarId' )
2028 
2029 ! ******************************************************************************
2030 ! Write verbosity (only master proc.)
2031 ! ******************************************************************************
2032 
2033  IF ( global%myProcid == masterproc .AND. &
2034  global%verbLevel > verbose_none ) THEN
2035  WRITE(stdout,'(A,3X,A)') solver_name,'Writing PLAG statistics solution file...'
2036  END IF ! global%verbLevel
2037 
2038 ! ******************************************************************************
2039 ! Open statistics file (only master proc.)
2040 ! ******************************************************************************
2041 
2042  IF (global%myProcid == masterproc) THEN
2043 
2044  SELECT CASE( global%solutFormat )
2045  CASE ( format_ascii )
2046  WRITE(fname,'(A,1PE11.5)') &
2047  trim(global%inDir)//trim(global%casename)//'.plag_stata_', &
2048  global%currentTime
2049  OPEN( if_plag_stats,file=fname,form='formatted',status='unknown', &
2050  iostat=errorflag )
2051 
2052  CASE ( format_binary )
2053  WRITE(fname,'(A,1PE11.5)') &
2054  trim(global%inDir)//trim(global%casename)//'.plag_stat_', &
2055  global%currentTime
2056  OPEN( if_plag_stats,file=fname,form='unformatted',status='unknown', &
2057  iostat=errorflag )
2058 
2059  CASE default
2060  CALL errorstop( global,err_reached_default,__line__ )
2061 
2062  END SELECT ! solutFormat
2063 
2064  global%error = errorflag
2065  IF ( global%error /= err_none ) &
2066  CALL errorstop( global,err_file_open,__line__,'File: '//trim(fname) )
2067 
2068 ! ******************************************************************************
2069 ! Write current and integrated time to file
2070 ! ******************************************************************************
2071 
2072  rvar(1,1) = global%currentTime
2073  rvar(2,1) = global%integrTime
2074 
2075  CALL rflo_writedatafilereal( global,if_plag_stats,global%solutFormat,&
2076  2,1,rvar )
2077 
2078 ! ******************************************************************************
2079 ! Write plagNStat and plagStatId to file
2080 ! ******************************************************************************
2081 
2082  IF ( global%plagNStat > 0 ) THEN
2083  jvar(1,1) = global%plagNStat
2084  plagvarid(:) = global%plagStatId(1,:)*10 + global%plagStatId(2,:)
2085  jvar(2:global%plagNStat+1,1) = plagvarid(1:global%plagNStat)
2086  CALL rflo_writedatafileint( global,if_plag_stats,global%solutFormat, &
2087  global%plagNStat+1,1,jvar )
2088  ENDIF ! plagNStat
2089 
2090  ENDIF ! global%myProcid
2091 
2092 ! ******************************************************************************
2093 ! Write statistics data
2094 ! ******************************************************************************
2095 
2096  DO ireg=1,global%nRegions
2097 
2098 ! ==============================================================================
2099 ! Get dimensions and pointers
2100 ! ==============================================================================
2101 
2102  ilev = regions(ireg)%currLevel
2103  CALL rflo_getdimensdummy( regions(ireg),ilev,idcbeg,idcend, &
2104  jdcbeg,jdcend,kdcbeg,kdcend )
2105  CALL rflo_getcelloffset( regions(ireg),ilev,ioff,ijoff )
2106  ijkbeg = indijk(idcbeg,jdcbeg,kdcbeg,ioff,ijoff)
2107  ijkend = indijk(idcend,jdcend,kdcend,ioff,ijoff)
2108  ndim = ijkend - ijkbeg + 1
2109 
2110  ntav = global%plagNStat
2111 
2112 ! ==============================================================================
2113 ! Allocate memory for data field
2114 ! ==============================================================================
2115 
2116  IF ( regions(ireg)%procid==global%myProcid .OR. &
2117  global%myProcid==masterproc ) THEN
2118  ALLOCATE( tavfile(ntav,ndim),stat=errorflag )
2119  global%error = errorflag
2120  IF ( global%error /= err_none ) &
2121  CALL errorstop( global,err_allocate,__line__,'tavFile' )
2122  ENDIF ! regions(iReg)%procid
2123 
2124 ! ==============================================================================
2125 ! Copy statistics into data structure
2126 ! ==============================================================================
2127 
2128  IF ( regions(ireg)%procid == global%myProcid ) THEN
2129  tav => regions(ireg)%levels(ilev)%plag%tav
2130 
2131  n = 0
2132  DO k=kdcbeg,kdcend
2133  DO j=jdcbeg,jdcend
2134  DO i=idcbeg,idcend
2135  n = n + 1
2136  ijk = indijk(i,j,k,ioff,ijoff)
2137  DO l=1,ntav
2138  tavfile(l,n) = tav(l,ijk)
2139  ENDDO ! l
2140  ENDDO ! i
2141  ENDDO ! j
2142  ENDDO ! k
2143  ENDIF ! regions(iReg)%procid
2144 
2145 ! ==============================================================================
2146 ! Write region number and dimensions (only master)
2147 ! ==============================================================================
2148 
2149  IF ( global%myProcid == masterproc ) THEN
2150  ivar(1,1) = ireg
2151  ivar(2,1) = regions(ireg)%levels(ilev)%grid%ipc
2152  ivar(3,1) = regions(ireg)%levels(ilev)%grid%jpc
2153  ivar(4,1) = regions(ireg)%levels(ilev)%grid%kpc
2154  ivar(5,1) = regions(ireg)%nDumCells
2155  CALL rflo_writedatafileint( global,if_plag_stats,global%solutFormat,5,1,ivar )
2156  ENDIF ! global%myProcid
2157 
2158 ! ==============================================================================
2159 ! Master receives and writes data, others send them
2160 ! ==============================================================================
2161 
2162  IF (global%myProcid == masterproc) THEN
2163 #ifdef MPI
2164  IF ( regions(ireg)%procid /= masterproc ) THEN
2165  CALL mpi_recv( tavfile,ntav*ndim,mpi_rfreal, &
2166  regions(ireg)%procid,ireg, &
2167  global%mpiComm,status,global%mpierr )
2168  IF ( global%mpierr /= err_none ) &
2169  CALL errorstop( global,err_mpi_trouble,__line__ )
2170  ENDIF ! regions(iReg)%procid
2171 #endif
2172  CALL rflo_writedatafilereal( global,if_plag_stats,global%solutFormat, &
2173  ntav,ndim,tavfile )
2174 
2175  ELSE ! not the master
2176 #ifdef MPI
2177  IF (regions(ireg)%procid == global%myProcid) THEN
2178  CALL mpi_send( tavfile,ntav*ndim,mpi_rfreal,masterproc, &
2179  ireg,global%mpiComm,global%mpierr )
2180  IF ( global%mpierr /= err_none ) &
2181  CALL errorstop( global,err_mpi_trouble,__line__ )
2182  ENDIF
2183 #endif
2184  ENDIF ! global%myProcid
2185 
2186 ! ==============================================================================
2187 ! Deallocate local array
2188 ! ==============================================================================
2189 
2190  IF (ALLOCATED(tavfile)) THEN
2191  DEALLOCATE( tavfile,stat=errorflag )
2192  global%error = errorflag
2193  IF ( global%error /= err_none ) &
2194  CALL errorstop( global,err_deallocate,__line__,'tavFile' )
2195  ENDIF
2196 
2197  ENDDO ! iReg
2198 
2199 ! ******************************************************************************
2200 ! Deallocate temporary data arrays
2201 ! ******************************************************************************
2202 
2203  DEALLOCATE( ivar,stat=errorflag )
2204  global%error = errorflag
2205  IF ( global%error /= err_none ) &
2206  CALL errorstop( global,err_deallocate,__line__,'ivar' )
2207 
2208  DEALLOCATE( rvar,stat=errorflag )
2209  global%error = errorflag
2210  IF ( global%error /= err_none ) &
2211  CALL errorstop( global,err_deallocate,__line__,'rvar' )
2212 
2213  DEALLOCATE( jvar,stat=errorflag )
2214  global%error = errorflag
2215  IF ( global%error /= err_none ) &
2216  CALL errorstop( global,err_deallocate,__line__,'jvar' )
2217 
2218  DEALLOCATE( plagvarid,stat=errorflag )
2219  global%error = errorflag
2220  IF ( global%error /= err_none ) &
2221  CALL errorstop( global,err_deallocate,__line__,'plagVarId' )
2222 
2223 ! ******************************************************************************
2224 ! Write verbosity (only master proc.)
2225 ! ******************************************************************************
2226 
2227  IF ( global%myProcid == masterproc .AND. &
2228  global%verbLevel > verbose_none ) THEN
2229  WRITE(stdout,'(A,3X,A)') solver_name,'Writing PLAG statistics solution file done...'
2230  END IF ! global%verbLevel
2231 
2232 ! ******************************************************************************
2233 ! Finalize
2234 ! ******************************************************************************
2235 
2236  IF ( global%myProcid == masterproc ) THEN
2237  CLOSE(if_plag_stats,iostat=errorflag)
2238  global%error = errorflag
2239  IF ( global%error /= err_none ) &
2240  CALL errorstop( global,err_file_close,__line__,'File: '//trim(fname) )
2241  ENDIF
2242 
2243 ! ******************************************************************************
2244 ! End
2245 ! ******************************************************************************
2246 
2247 999 CONTINUE
2248  CALL deregisterfunction( global )
2249 
2250  END SUBROUTINE plag_rflo_writestat
2251 
2252 
2253 
2254 
2255 
2256 
2257 
2258 END MODULE plag_rflo_modstats
2259 
2260 ! ******************************************************************************
2261 !
2262 ! RCS Revision history:
2263 !
2264 ! $Log: PLAG_RFLO_ModStats.F90,v $
2265 ! Revision 1.9 2009/03/02 00:19:36 mtcampbe
2266 ! Added some ifdefs around Rocflo to disable particle injection on INFLOW
2267 ! boundaries and added some checks around MPI tags utilizing a new global
2268 ! data item, global%mpiTagMax.
2269 !
2270 ! Revision 1.8 2008/12/06 08:44:34 mtcampbe
2271 ! Updated license.
2272 !
2273 ! Revision 1.7 2008/11/19 22:17:47 mtcampbe
2274 ! Added Illinois Open Source License/Copyright
2275 !
2276 ! Revision 1.6 2006/04/07 15:19:24 haselbac
2277 ! Removed tabs
2278 !
2279 ! Revision 1.5 2005/06/19 07:13:57 wasistho
2280 ! refrained from communicating and writing statistics when plag is not used
2281 !
2282 ! Revision 1.4 2005/03/08 00:59:00 fnajjar
2283 ! Bug fix for ijkvBuff with multiple assignments
2284 !
2285 ! Revision 1.3 2005/03/07 17:37:37 fnajjar
2286 ! Bug fix in loading iRequestStat
2287 !
2288 ! Revision 1.2 2005/02/16 14:47:41 fnajjar
2289 ! Added infrastructure for on-processor copying and MPI-based communication
2290 !
2291 ! Revision 1.1 2005/01/08 20:44:32 fnajjar
2292 ! Initial import for PLAG statistics
2293 !
2294 ! ******************************************************************************
2295 
2296 
2297 
2298 
2299 
2300 
2301 
2302 
2303 
2304 
2305 
2306 
2307 
2308 
2309 
2310 
**********************************************************************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
**********************************************************************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 idcend
subroutine rflo_getpatchdirection(patch, idir, jdir, kdir)
subroutine, public plag_rflo_commstatbuffwrapper(regions)
subroutine rflo_writedatafileint(global, fileId, form, nDim1, nDim2, ivar)
j indices k indices k
Definition: Indexing.h:6
INTEGER function indijkmap(i, j, k, mapMat, iOffset, ijOffset)
Definition: ModIndexing.F90:67
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
int status() const
Obtain the status of the attribute.
Definition: Attribute.h:240
subroutine rflo_getpatchindices(region, patch, iLev, ibeg, iend, jbeg, jend, kbeg, kend)
subroutine rflo_readdatafileint(global, fileId, form, nDim1, nDim2, ivar)
subroutine plag_rflo_recvstatbuffwrapper(regions, iReg)
subroutine plag_rflo_copystatbuff(pRegion, pRegionSrc, pPatch, pPatchSrc)
**********************************************************************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 jdir
subroutine rflo_getdimensdummy(region, iLev, idcbeg, idcend, jdcbeg, jdcend, kdcbeg, kdcend)
**********************************************************************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 plag_rflo_sendstatbuffconf(pRegion, pRegionSrc, pPatch)
**********************************************************************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 kdcbeg
CImg< T > & select(CImgDisplay &disp, const int select_type=2, unsigned int *const XYZ=0, const unsigned char *const color=0)
Simple interface to select a shape from an image.
Definition: CImg.h:28588
blockLoc i
Definition: read.cpp:79
**********************************************************************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 idir
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 idcbeg
**********************************************************************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 form
const NT & n
subroutine plag_rflo_clearreqstatbuff(regions, iReg)
subroutine, public plag_rflo_createstatbuff(regions, iReg)
subroutine plag_rflo_recvstatbuff(pRegion, pRegionSrc, pPatch, pPatchSrc)
**********************************************************************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 jdcend
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 jdcbeg
**********************************************************************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 kdir
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, public plag_rflo_readstat(regions)
subroutine, public plag_rflo_writestat(regions)
subroutine rflo_getpatchmapping(lb, lbs, l1SrcDir, l2SrcDir, align, idir, jdir, kdir, idirSrc, jdirSrc, kdirSrc, ibeg, iend, jbeg, jend, kbeg, kend, ibegSrc, iendSrc, jbegSrc, jendSrc, kbegSrc, kendSrc, mapMat)
**********************************************************************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 rflo_writedatafilereal(global, fileId, form, nDim1, nDim2, var)
subroutine deregisterfunction(global)
Definition: ModError.F90:469
subroutine plag_rflo_sendstatbuffwrapper(regions, iReg)
subroutine rflo_readdatafilereal(global, fileId, form, nDim1, nDim2, var)