Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RFLO_ModVolMeshSmoothing.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: Suite of volume mesh smoothing (VMS) routines.
26 !
27 ! Description: None.
28 !
29 ! Notes: None.
30 !
31 ! ******************************************************************************
32 !
33 ! $Id: RFLO_ModVolMeshSmoothing.F90,v 1.8 2009/08/27 14:04:51 mtcampbe Exp $
34 !
35 ! Copyright: (c) 2004 by the University of Illinois
36 !
37 ! ******************************************************************************
38 
40 
41  USE modglobal, ONLY : t_global
42  USE moddatastruct, ONLY: t_region
43  USE modgrid, ONLY : t_grid
44  USE modbndpatch, ONLY : t_patch
45  USE modparameters
46  USE moddatatypes
47  USE moderror
48  USE modmpi
49 
50  IMPLICIT NONE
51 
52  PRIVATE
53  PUBLIC :: rflo_movegridvms
54 
55 ! private : RFLO_VmsInit
56 ! RFLO_VmsAverageVertices
57 ! RFLO_VmsLaplaceIterate
58 ! RFLO_VmsLaplacePerturb
59 ! RFLO_VmsLaplaceProcedure
60 ! RFLO_VmsProjectVertices
61 ! RFLO_VmsRestoreBoundDeform
62 
63 ! ******************************************************************************
64 ! Declarations and definitions
65 ! ******************************************************************************
66 
67  CHARACTER(CHRLEN) :: RCSIdentString = &
68  '$RCSfile: RFLO_ModVolMeshSmoothing.F90,v $ $Revision: 1.8 $'
69 
70 ! ******************************************************************************
71 ! Routines
72 ! ******************************************************************************
73 
74  CONTAINS
75 
76 !******************************************************************************
77 !
78 ! Purpose: redistribute grid nodes according to the movement of the
79 ! boundaries. This function smoothes the grid globally by
80 ! volume mesh smoothing based on Laplacian propagation.
81 !
82 ! Description: none.
83 !
84 ! Input: regions = data of all grid regions.
85 !
86 ! Output: regions%levels%grid%xyz = new grid coordinates.
87 !
88 ! Notes: grid%xyz temporarily stores nodal displacements. The deformation
89 ! is applied to the finest grid first.
90 !
91 !******************************************************************************
92 
93 SUBROUTINE rflo_movegridvms( regions )
94 
102 
103  IMPLICIT NONE
104 
105 #ifdef GENX
106  include 'roccomf90.h'
107 #endif
108 
109 ! ... parameters
110  TYPE(t_region), POINTER :: regions(:)
111 
112 ! ... loop variables
113  INTEGER :: ireg, iter, ipatch, ijk
114 
115 ! ... local variables
116  LOGICAL :: somemoved
117 
118  INTEGER :: bctype
119 
120  REAL(RFREAL) :: resid, globalresid
121  REAL(RFREAL), POINTER :: xyz(:,:), xyzold(:,:)
122 
123  TYPE(t_grid), POINTER :: grid, gridold
124  TYPE(t_global), POINTER :: global
125  TYPE(t_patch), POINTER :: patch
126 #ifdef GENX
127  DOUBLE PRECISION :: dalpha
128 #endif
129 
130 !******************************************************************************
131 
132  global => regions(1)%global
133 
134  CALL registerfunction( global,'RFLO_MoveGridVms',&
135  'RFLO_ModVolMeshSmoothing.F90' )
136 
137 #ifdef GENX
138 ! update geometry buffers -----------------------------------------------------
139 
140  dalpha = global%dtMin/global%dTimeSystem
141  CALL com_call_function( global%genxHandleGm,1,dalpha )
142 #endif
143 
144 ! receive and distribute deformations for each region -------------------------
145 
146  CALL rflo_vmsinit( regions,somemoved )
147 
148 ! smooth grid by solving Laplace equation -------------------------------------
149 
150  IF (somemoved) THEN
151  DO iter=1,global%moveGridNiter
152  CALL rflo_vmslaplaceiterate( regions,iter,resid )
153  ENDDO
154 
155  IF (global%verbLevel /= verbose_none) THEN
156 #ifdef MPI
157  CALL mpi_reduce( resid,globalresid,1,mpi_rfreal,mpi_sum, &
158  masterproc,global%mpiComm,global%mpierr )
159  IF (global%mpierr /= 0) CALL errorstop( global,err_mpi_trouble,&
160  __line__ )
161 #else
162  globalresid = resid
163 #endif
164  IF (global%myProcid == masterproc) THEN
165  WRITE(stdout,1000) solver_name,global%moveGridNiter,sqrt(globalresid)
166  ENDIF
167  ENDIF ! verbLevel
168  ENDIF ! someMoved
169 
170 ! update grid, dummy, corner and edge cells -----------------------------------
171 
172  DO ireg=1,global%nRegions
173  IF (regions(ireg)%procid==global%myProcid .AND. & ! region active and
174  regions(ireg)%active==active .AND. & ! on my processor
175  regions(ireg)%mixtInput%moveGrid) THEN ! and moving
176 
177 ! --- change xyz from coordinates to deformations
178 
179  xyz => regions(ireg)%levels(1)%grid%xyz
180  xyzold => regions(ireg)%levels(1)%gridOld%xyz
181 
182  DO ijk=lbound(xyz,2),ubound(xyz,2)
183  xyz(xcoord,ijk) = xyz(xcoord,ijk) - xyzold(xcoord,ijk)
184  xyz(ycoord,ijk) = xyz(ycoord,ijk) - xyzold(ycoord,ijk)
185  xyz(zcoord,ijk) = xyz(zcoord,ijk) - xyzold(zcoord,ijk)
186  ENDDO
187 
188 ! --- redistribute deformations at boundaries
189 
190  grid => regions(ireg)%levels(1)%grid
191  gridold => regions(ireg)%levels(1)%gridOld
192  grid%boundMoved(:) = .true.
193  grid%edgeMoved(:) = .true.
194  DO ipatch=1,regions(ireg)%nPatches
195  patch => regions(ireg)%levels(1)%patches(ipatch)
196  bctype = patch%bcType
197 ! IF ((bcType>=BC_SYMMETRY .AND. bcType<=BC_SYMMETRY+BC_RANGE)) THEN
198  ! grid%boundMoved(patch%lbound) = .false.
199  ! ENDIF ! bcType
200  IF ((bctype.eq.bc_symmetry)) THEN
201  grid%boundMoved(patch%lbound) = .false.
202  ENDIF ! bcType
203  ENDDO ! iPatch
204  CALL rflo_boundarydeformation( regions(ireg),grid%boundMoved, &
205  grid%edgeMoved,grid%arcLen12, &
206  grid%arcLen34,grid%arcLen56, &
207  gridold%xyzOld,grid%xyz )
208 
209 ! --- change xyz from deformations to coordinates
210 
211  CALL rflo_changeinteriorgrid( regions(ireg),grid%boundMoved, &
212  grid%edgeMoved,grid%arcLen12, &
213  grid%arcLen34,grid%arcLen56, &
214  gridold%xyzOld,grid%xyz )
215 
216 ! --- update coarse grids and dummy cells
217 
218  CALL rflo_generatecoarsegrids( regions(ireg) ) ! coarsen finest grid
219  CALL rflo_copygeometrydummy( regions(ireg) ) ! copy to dummy nodes
220  CALL rflo_extrapolategeometry( regions(ireg) ) ! extrapolate
221  ENDIF ! region on this processor and active, grid moving
222  ENDDO ! iReg
223 
224  CALL rflo_exchangegeometry( regions ) ! exchange geometry
225 
226 ! calculate new metrics and grid speeds ---------------------------------------
227 
228  DO ireg=1,global%nRegions
229  IF (regions(ireg)%procid==global%myProcid .AND. & ! region active and
230  regions(ireg)%active==active .AND. & ! on my processor
231  regions(ireg)%mixtInput%moveGrid) THEN ! and moving
232  CALL rflo_calcfacevectors( regions(ireg) ) ! faces
233  CALL rflo_calccontrolvolumes( regions(ireg) ) ! volumes
234  CALL rflo_calccellcentroids( regions(ireg) ) ! cell centroids
235  IF (regions(ireg)%mixtInput%faceEdgeAvg==fe_avg_linear) &
236  CALL rflo_c2favgcoeffs( regions(ireg) ) ! cell2face averaging
237  CALL rflo_c2eavgcoeffs( regions(ireg) ) ! cell2edge averaging
238  CALL rflo_checkmetrics( ireg,regions(ireg) ) ! check metrics
239  CALL rflo_calcgridspeeds( regions(ireg) ) ! grid speeds
240  ENDIF ! region on this processor and active, grid moving
241  ENDDO ! iReg
242 
243 ! finalize --------------------------------------------------------------------
244 
245  CALL deregisterfunction( global )
246 
247 1000 FORMAT(a,1x,'VMS grid motion: ',i6,1pe13.4)
248 
249 END SUBROUTINE rflo_movegridvms
250 
251 !******************************************************************************
252 !
253 ! Purpose: initial procedure for volume mesh smoothing.
254 !
255 ! Description: none.
256 !
257 ! Input: regions = data of all grid regions.
258 !
259 ! Output: someMoved = parts of grid moved.
260 !
261 ! Notes: none
262 !
263 !******************************************************************************
264 
265 SUBROUTINE rflo_vmsinit( regions,someMoved )
266 
268  IMPLICIT NONE
269 
270 ! ... parameters
271  LOGICAL :: somemoved
272 
273  TYPE(t_region), POINTER :: regions(:)
274 
275 ! ... loop variables
276  INTEGER :: ireg
277 
278 ! ... local variables
279  TYPE(t_grid), POINTER :: grid, gridold
280  TYPE(t_global), POINTER :: global
281 
282 !******************************************************************************
283 
284  global => regions(1)%global
285 
286  CALL registerfunction( global,'RFLO_VmsInit',&
287  'RFLO_ModVolMeshSmoothing.F90' )
288 
289 ! move grid separately for each region ----------------------------------------
290 
291  somemoved = .false.
292 
293  DO ireg=1,global%nRegions
294  IF (regions(ireg)%procid==global%myProcid .AND. & ! region active and
295  regions(ireg)%active==active .AND. & ! on my processor
296  regions(ireg)%mixtInput%moveGrid) THEN ! and moving
297 
298  grid => regions(ireg)%levels(1)%grid
299  gridold => regions(ireg)%levels(1)%gridOld
300  somemoved = .true.
301 
302 ! --- store the old grid
303 
304  gridold%indSvel = grid%indSvel
305  gridold%ipc = grid%ipc
306  gridold%jpc = grid%jpc
307  gridold%kpc = grid%kpc
308  gridold%xyz(:,:) = grid%xyz(:,:)
309  gridold%si(:,:) = grid%si(:,:)
310  gridold%sj(:,:) = grid%sj(:,:)
311  gridold%sk(:,:) = grid%sk(:,:)
312  gridold%vol(:) = grid%vol(:)
313 
314 ! --- get the boundary deformations
315 
316  CALL rflo_getdeformation( regions(ireg),grid%boundMoved,grid%xyz )
317 
318  ENDIF ! region on this processor and active, grid moving
319  ENDDO ! iReg
320 
321 ! finalize --------------------------------------------------------------------
322 
323  CALL deregisterfunction( global )
324 
325 END SUBROUTINE rflo_vmsinit
326 
327 !******************************************************************************
328 !
329 ! Purpose: smooth the distribution of grid points by iterating simplified
330 ! Laplace equation in physical space.
331 !
332 ! Description: none.
333 !
334 ! Input: regions = data of all grid regions.
335 !
336 ! Output: regions%levels%grid%xyz = new grid coordinates
337 ! resid = convergence of the Jacobi iteration.
338 !
339 ! Notes: none.
340 !
341 !******************************************************************************
342 
343 SUBROUTINE rflo_vmslaplaceiterate( regions,iter,resid )
344 
351 
352  IMPLICIT NONE
353 
354 #include "Indexing.h"
355 
356 ! ... parameters
357  INTEGER :: iter
358  REAL(RFREAL) :: resid
359 
360  TYPE(t_region), POINTER :: regions(:)
361 
362 ! ... loop variables
363  INTEGER :: ireg, ipatch, ijk, i, j, k
364 
365 ! ... local variables
366  INTEGER :: ipnbeg, ipnend, jpnbeg, jpnend, kpnbeg, kpnend, inoff, ijnoff
367  INTEGER :: bctype, iregsrc, ipatchsrc
368 
369  REAL(RFREAL) :: dx, dy, dz
370  REAL(RFREAL), POINTER :: xyz(:,:), xyzold(:,:)
371 
372  TYPE(t_global), POINTER :: global
373  TYPE(t_grid), POINTER :: grid, gridold, gridsrc
374  TYPE(t_patch), POINTER :: patch, patchsrc
375 
376 !******************************************************************************
377 
378  global => regions(1)%global
379 
380  CALL registerfunction( global,'RFLO_VmsLaplaceIterate',&
381  'RFLO_ModVolMeshSmoothing.F90' )
382 
383 ! smooth grid region-wise -----------------------------------------------------
384 
385  resid = 0._rfreal
386 
387  DO ireg=1,global%nRegions
388  IF (regions(ireg)%procid==global%myProcid .AND. & ! region active and
389  regions(ireg)%active==active .AND. & ! on my processor
390  regions(ireg)%mixtInput%moveGrid) THEN ! and moving
391 
392 ! --- compute movements in the interior and along the boundaries
393 
394  CALL rflo_vmslaplaceprocedure( regions(ireg),iter )
395 
396 ! --- zero out movements along certain boundaries
397 
398  DO ipatch=1,regions(ireg)%nPatches
399  patch => regions(ireg)%levels(1)%patches(ipatch)
400  bctype = patch%bcType
401  IF ((bctype>=bc_inflow .AND. bctype<=bc_inflow +bc_range) .OR. &
402  (bctype>=bc_outflow .AND. bctype<=bc_outflow +bc_range) .OR. &
403  (bctype>=bc_slipwall .AND. bctype<=bc_slipwall +bc_range) .OR. &
404  (bctype>=bc_noslipwall .AND. bctype<=bc_noslipwall+bc_range) .OR. &
405  (bctype>=bc_farfield .AND. bctype<=bc_farfield +bc_range) .OR. &
406  (bctype>=bc_injection .AND. bctype<=bc_injection +bc_range) .OR. &
407  (bctype>=bc_tra_peri .AND. bctype<=bc_tra_peri +bc_range) .OR. &
408  (bctype>=bc_rot_peri .AND. bctype<=bc_rot_peri +bc_range)) THEN
409  CALL rflo_laplacegridpatch( regions(ireg),patch )
410  ENDIF ! bcType
411  ENDDO ! iPatch
412 
413  CALL rflo_getdimensphysnodes( regions(ireg),1,ipnbeg,ipnend, &
414  jpnbeg,jpnend,kpnbeg,kpnend )
415  CALL rflo_getnodeoffset( regions(ireg),1,inoff,ijnoff )
416 
417  xyz => regions(ireg)%levels(1)%grid%xyz
418  xyzold => regions(ireg)%levels(1)%grid%xyzOld
419 
420  DO k=kpnbeg,kpnend
421  DO j=jpnbeg,jpnend
422  DO i=ipnbeg,ipnend
423  ijk = indijk(i,j,k,inoff,ijnoff)
424  dx = xyz(xcoord,ijk) - xyzold(xcoord,ijk)
425  dy = xyz(ycoord,ijk) - xyzold(ycoord,ijk)
426  dz = xyz(zcoord,ijk) - xyzold(zcoord,ijk)
427  resid = resid + dx*dx + dy*dy +dz*dz
428  ENDDO
429  ENDDO
430  ENDDO
431 
432  ENDIF ! region on this processor and active, grid moving
433  ENDDO ! iReg
434 
435 ! fix interfaces between regions ----------------------------------------------
436 ! copy / send deformations
437 
438  DO ireg=1,global%nRegions
439  IF (regions(ireg)%procid==global%myProcid .AND. & ! region active and
440  regions(ireg)%active==active .AND. & ! on my processor
441  regions(ireg)%mixtInput%moveGrid) THEN ! and moving
442 
443  grid => regions(ireg)%levels(1)%grid
444  gridold => regions(ireg)%levels(1)%gridOld
445 
446  DO ipatch=1,regions(ireg)%nPatches
447  patch => regions(ireg)%levels(1)%patches(ipatch)
448  bctype = patch%bcType
449  IF ((bctype>=bc_regionconf .AND. bctype<=bc_regionconf+bc_range) .OR. &
450  (bctype>=bc_tra_peri .AND. bctype<=bc_tra_peri +bc_range) .OR. &
451  (bctype>=bc_rot_peri .AND. bctype<=bc_rot_peri +bc_range)) THEN
452  iregsrc = patch%srcRegion
453  ipatchsrc = patch%srcPatch
454  patchsrc => regions(iregsrc)%levels(1)%patches(ipatchsrc)
455  gridsrc => regions(iregsrc)%levels(1)%grid
456 
457  IF (regions(iregsrc)%procid == global%myProcid) THEN
458  CALL rflo_exchangednodecopy( regions(ireg),regions(iregsrc), &
459  patch,patchsrc,.true., &
460  grid%xyz,gridsrc%xyz )
461  ELSE
462  CALL rflo_exchangednodesend( regions(ireg),regions(iregsrc), &
463  patch,grid%xyz )
464  ENDIF
465  ENDIF ! bcType
466  ENDDO ! iPatch
467 
468  ENDIF ! region on this processor and active, grid moving
469  ENDDO ! iReg
470 
471 ! receive deformations
472 
473  DO ireg=1,global%nRegions
474  IF (regions(ireg)%procid==global%myProcid .AND. & ! region active and
475  regions(ireg)%active==active .AND. & ! on my processor
476  regions(ireg)%mixtInput%moveGrid) THEN ! and moving
477 
478  grid => regions(ireg)%levels(1)%grid
479  gridold => regions(ireg)%levels(1)%gridOld
480 
481  DO ipatch=1,regions(ireg)%nPatches
482  patch => regions(ireg)%levels(1)%patches(ipatch)
483  bctype = patch%bcType
484  IF ((bctype>=bc_regionconf .AND. bctype<=bc_regionconf+bc_range) .OR. &
485  (bctype>=bc_tra_peri .AND. bctype<=bc_tra_peri +bc_range) .OR. &
486  (bctype>=bc_rot_peri .AND. bctype<=bc_rot_peri +bc_range)) THEN
487  iregsrc = patch%srcRegion
488  ipatchsrc = patch%srcPatch
489  patchsrc => regions(iregsrc)%levels(1)%patches(ipatchsrc)
490  gridsrc => regions(iregsrc)%levels(1)%grid
491 
492  IF (regions(iregsrc)%procid /= global%myProcid) THEN
493  CALL rflo_exchangednoderecv( regions(ireg),regions(iregsrc), &
494  patch,patchsrc,.true.,grid%xyz )
495  ENDIF
496  ENDIF ! bcType
497  ENDDO ! iPatch
498 
499  ENDIF ! region on this processor and active, grid moving
500  ENDDO ! iReg
501 
502 ! clear send requests
503 
504  DO ireg=1,global%nRegions
505  IF (regions(ireg)%procid==global%myProcid .AND. & ! region active and
506  regions(ireg)%active==active .AND. & ! on my processor
507  regions(ireg)%mixtInput%moveGrid) THEN ! and moving
508  CALL rflo_clearsendrequests( regions,ireg,.true. )
509  ENDIF
510  ENDDO
511 
512 ! update grid, dummy, corner and edge cells -----------------------------------
513 
514  DO ireg=1,global%nRegions
515  IF (regions(ireg)%procid==global%myProcid .AND. & ! region active and
516  regions(ireg)%active==active .AND. & ! on my processor
517  regions(ireg)%mixtInput%moveGrid) THEN ! and moving
518 
519 ! --- change xyz from deformations to coordinates
520 
521  xyz => regions(ireg)%levels(1)%grid%xyz
522  xyzold => regions(ireg)%levels(1)%gridOld%xyz
523 
524  DO ijk=lbound(xyz,2),ubound(xyz,2)
525  xyz(xcoord,ijk) = xyz(xcoord,ijk) + xyzold(xcoord,ijk)
526  xyz(ycoord,ijk) = xyz(ycoord,ijk) + xyzold(ycoord,ijk)
527  xyz(zcoord,ijk) = xyz(zcoord,ijk) + xyzold(zcoord,ijk)
528  ENDDO
529 
530 ! --- update coarse grids and dummy cells
531 
532  CALL rflo_generatecoarsegrids( regions(ireg) ) ! coarsen finest grid
533  CALL rflo_copygeometrydummy( regions(ireg) ) ! copy to dummy nodes
534  CALL rflo_extrapolategeometry( regions(ireg) ) ! extrapolate
535  ENDIF ! region on this processor and active, grid moving
536  ENDDO ! iReg
537 
538  CALL rflo_exchangegeometry( regions ) ! exchange geometry
539 
540 ! finalize --------------------------------------------------------------------
541 
542  CALL deregisterfunction( global )
543 
544 END SUBROUTINE rflo_vmslaplaceiterate
545 
546 !******************************************************************************
547 !
548 ! Purpose: average vertices.
549 !
550 ! Description: defined grid coordinates by averaging 12 projected vertices,
551 ! 4 in each face-direction.
552 !
553 ! Input: region = data of current region.
554 !
555 ! Output: region%levels%grid%xyz = new coordinates.
556 !
557 ! Notes: none
558 !
559 !******************************************************************************
560 
561 SUBROUTINE rflo_vmsaveragevertices( region,vxyz )
562 
564 
565  IMPLICIT NONE
566 
567 #include "Indexing.h"
568 
569 ! ... parameters
570  TYPE(t_region) :: region
571  REAL(RFREAL), POINTER :: vxyz(:,:)
572 
573 ! ... loop variables
574  INTEGER :: i, j, k
575 
576 ! ... local variables
577  TYPE(t_global), POINTER :: global
578 
579  INTEGER :: ilev, ipnbeg,ipnend,jpnbeg,jpnend,kpnbeg,kpnend, inoff,ijnoff, ijk
580  REAL(RFREAL) :: rd
581  REAL(RFREAL), POINTER :: xyz(:,:)
582 
583 !******************************************************************************
584 
585  global => region%global
586 
587  CALL registerfunction( global,'RFLO_VmsAverageVertices',&
588  'RFLO_ModVolMeshSmoothing.F90' )
589 
590 ! get dimensions and pointers -------------------------------------------------
591 
592  ilev = 1
593 
594  CALL rflo_getdimensphysnodes( region,ilev,ipnbeg,ipnend,jpnbeg,jpnend, &
595  kpnbeg,kpnend )
596  CALL rflo_getnodeoffset( region,ilev,inoff,ijnoff )
597 
598  xyz => region%levels(ilev)%grid%xyz
599 
600 ! compute new coordinates -----------------------------------------------------
601 
602  rd = 1._rfreal/12._rfreal
603 
604  DO k=kpnbeg,kpnend
605  DO j=jpnbeg,jpnend
606  DO i=ipnbeg,ipnend
607  ijk = indijk(i ,j ,k ,inoff,ijnoff)
608 
609  xyz(xcoord,ijk) = vxyz(xcoord,ijk)*rd
610  xyz(ycoord,ijk) = vxyz(ycoord,ijk)*rd
611  xyz(zcoord,ijk) = vxyz(zcoord,ijk)*rd
612  ENDDO ! i
613  ENDDO ! j
614  ENDDO ! k
615 
616 ! finalize --------------------------------------------------------------------
617 
618  CALL deregisterfunction( global )
619 
620 END SUBROUTINE rflo_vmsaveragevertices
621 
622 !******************************************************************************
623 !
624 ! Purpose: conduct one Jacobi iteration to obtain initial grid movements
625 ! in the flow domain (boundaries included). This initial movements
626 ! function as perturbation.
627 !
628 ! Description: none.
629 !
630 ! Input: region = data of current region, old grid coordinates.
631 !
632 ! Output: region%levels%grid%xyz = grid movements.
633 !
634 ! Notes: on entry, xyz holds node coordinates from a previous smoothing
635 ! step. On exit xyz contains the perturbed coordinates.
636 !
637 !******************************************************************************
638 
639 SUBROUTINE rflo_vmslaplaceperturb( region )
640 
643  IMPLICIT NONE
644 
645 #include "Indexing.h"
646 
647 ! ... parameters
648  TYPE(t_region) :: region
649 
650 ! ... loop variables
651  INTEGER :: i, j, k
652 
653 ! ... local variables
654  INTEGER :: idnbeg, idnend, jdnbeg, jdnend, kdnbeg, kdnend, ilev, inoff, ijnoff
655  INTEGER :: ipnbeg, ipnend, jpnbeg, jpnend, kpnbeg, kpnend, ibn, ien
656  INTEGER :: ijk, ip1, im1, jp1, jm1, kp1, km1
657 
658  REAL(RFREAL) :: rxi, ryi, rzi, rxj, ryj, rzj, rxk, ryk, rzk, rd
659  REAL(RFREAL), POINTER :: xyz(:,:), xyzold(:,:), xyzorig(:,:)
660 
661 !******************************************************************************
662 
663  CALL registerfunction( region%global,'RFLO_VmsLaplacePerturb',&
664  'RFLO_ModVolMeshSmoothing.F90' )
665 
666 ! get dimensions and pointers -------------------------------------------------
667 
668  ilev = 1
669 
670  CALL rflo_getdimensdummynodes( region,ilev,idnbeg,idnend, &
671  jdnbeg,jdnend,kdnbeg,kdnend )
672  CALL rflo_getdimensphysnodes( region,ilev,ipnbeg,ipnend,jpnbeg,jpnend, &
673  kpnbeg,kpnend )
674  CALL rflo_getnodeoffset( region,ilev,inoff,ijnoff )
675  ibn = indijk(idnbeg,jdnbeg,kdnbeg,inoff,ijnoff)
676  ien = indijk(idnend,jdnend,kdnend,inoff,ijnoff)
677 
678  xyz => region%levels(ilev)%grid%xyz
679  xyzold => region%levels(ilev)%grid%xyzOld
680  xyzorig => region%levels(ilev)%gridOld%xyz
681 
682  rd = 1._rfreal/6._rfreal
683 
684 ! reset motion vectors --------------------------------------------------------
685 
686  DO ijk=ibn,ien
687  xyzold(xcoord,ijk) = xyz(xcoord,ijk) - xyzorig(xcoord,ijk)
688  xyzold(ycoord,ijk) = xyz(ycoord,ijk) - xyzorig(ycoord,ijk)
689  xyzold(zcoord,ijk) = xyz(zcoord,ijk) - xyzorig(zcoord,ijk)
690  ENDDO
691 
692 ! compute new coordinates -----------------------------------------------------
693 
694  DO k=kpnbeg,kpnend
695  DO j=jpnbeg,jpnend
696  DO i=ipnbeg,ipnend
697  ijk = indijk(i ,j ,k ,inoff,ijnoff)
698  ip1 = indijk(i+1,j ,k ,inoff,ijnoff)
699  im1 = indijk(i-1,j ,k ,inoff,ijnoff)
700  jp1 = indijk(i ,j+1,k ,inoff,ijnoff)
701  jm1 = indijk(i ,j-1,k ,inoff,ijnoff)
702  kp1 = indijk(i ,j ,k+1,inoff,ijnoff)
703  km1 = indijk(i ,j ,k-1,inoff,ijnoff)
704 
705  rxi = xyzold(xcoord,im1) + xyzold(xcoord,ip1)
706  ryi = xyzold(ycoord,im1) + xyzold(ycoord,ip1)
707  rzi = xyzold(zcoord,im1) + xyzold(zcoord,ip1)
708 
709  rxj = xyzold(xcoord,jm1) + xyzold(xcoord,jp1)
710  ryj = xyzold(ycoord,jm1) + xyzold(ycoord,jp1)
711  rzj = xyzold(zcoord,jm1) + xyzold(zcoord,jp1)
712 
713  rxk = xyzold(xcoord,km1) + xyzold(xcoord,kp1)
714  ryk = xyzold(ycoord,km1) + xyzold(ycoord,kp1)
715  rzk = xyzold(zcoord,km1) + xyzold(zcoord,kp1)
716 
717  xyz(xcoord,ijk) = xyz(xcoord,ijk) + (rxi+rxj+rxk)*rd
718  xyz(ycoord,ijk) = xyz(ycoord,ijk) + (ryi+ryj+ryk)*rd
719  xyz(zcoord,ijk) = xyz(zcoord,ijk) + (rzi+rzj+rzk)*rd
720  ENDDO ! i
721  ENDDO ! j
722  ENDDO ! k
723 
724 ! finalize --------------------------------------------------------------------
725 
726  CALL deregisterfunction( region%global )
727 
728 END SUBROUTINE rflo_vmslaplaceperturb
729 
730 !******************************************************************************
731 !
732 ! Purpose: step by step procedure for Laplacian volume mesh smoothing.
733 !
734 ! Description: none.
735 !
736 ! Input: region = data of current grid region.
737 !
738 ! Output: region%levels%grid%xyz = grid movements.
739 !
740 ! Notes: on entry, xyz holds node coordinates from a previous smoothing
741 ! step. On exit however, xyz contains only the grid motion.
742 !
743 !******************************************************************************
744 
745 SUBROUTINE rflo_vmslaplaceprocedure( region,iter )
746 
749  IMPLICIT NONE
750 
751 #include "Indexing.h"
752 
753 ! ... parameters
754  TYPE(t_region) :: region
755  INTEGER :: iter
756 
757 ! ... loop variables
758  INTEGER :: in
759 
760 ! ... local variables
761  TYPE(t_global), POINTER :: global
762 
763  INTEGER :: ibn,ien, idnbeg,idnend,jdnbeg,jdnend,kdnbeg,kdnend
764  INTEGER :: inoff, ijnoff, errfl
765  REAL(RFREAL), POINTER :: dxyz(:,:), vxyz(:,:)
766 
767 !******************************************************************************
768 
769  global => region%global
770 
771  CALL registerfunction( global,'RFLO_VmsLaplaceProcedure',&
772  'RFLO_ModVolMeshSmoothing.F90' )
773 
774 ! allocate buffers ------------------------------------------------------------
775 
776  CALL rflo_getdimensdummynodes( region,1,idnbeg,idnend, &
777  jdnbeg,jdnend,kdnbeg,kdnend )
778  CALL rflo_getnodeoffset( region,1,inoff,ijnoff )
779  ibn = indijk(idnbeg,jdnbeg,kdnbeg,inoff,ijnoff)
780  ien = indijk(idnend,jdnend,kdnend,inoff,ijnoff)
781 
782  ALLOCATE( dxyz(xcoord:zcoord,ibn:ien), stat=errfl ); IF (errfl>0) goto 88
783  ALLOCATE( vxyz(xcoord:zcoord,ibn:ien), stat=errfl ); IF (errfl>0) goto 88
784 
785 ! restore grid coordinate, dxyz=original-deformation
786 
787  IF (iter==1) THEN
788  dxyz = region%levels(1)%grid%xyz
789  DO in = ibn,ien
790  region%levels(1)%grid%xyz(xcoord,in)= &
791  region%levels(1)%gridOld%xyz(xcoord,in) + dxyz(xcoord,in)
792  region%levels(1)%grid%xyz(ycoord,in)= &
793  region%levels(1)%gridOld%xyz(ycoord,in) + dxyz(ycoord,in)
794  region%levels(1)%grid%xyz(zcoord,in)= &
795  region%levels(1)%gridOld%xyz(zcoord,in) + dxyz(zcoord,in)
796  ENDDO
797  ENDIF
798 
799 ! initial cell centroid, xyz=actual-grid --------------------------------------
800 
801  CALL rflo_calccellcentroids( region )
802 
803 ! perturb grid, xyz=actual-grid -----------------------------------------------
804 
805  CALL rflo_vmslaplaceperturb( region )
806 
807 ! restore interacting boundary grid, xyz=actual grid --------------------------
808 
809  CALL rflo_vmsrestorebounddeform( region,ibn,ien,dxyz )
810 
811 ! face vector of perturbed grid, xyz=actual-grid ------------------------------
812 
813  CALL rflo_calcfacevectors( region )
814 
815 ! project grid vertices to new planes, xyz=actual-grid ------------------------
816 
817  CALL rflo_vmsprojectvertices( region,vxyz )
818 
819 ! restore interacting boundary grid, xyz=actual grid --------------------------
820 
821  CALL rflo_vmsrestorebounddeform( region,ibn,ien,dxyz )
822 
823 ! finally average vertices, xyz=actual-grid -----------------------------------
824 
825  CALL rflo_vmsaveragevertices( region,vxyz )
826 
827 ! transform from coordinate to deformation ------------------------------------
828 
829  DO in = ibn,ien
830  region%levels(1)%grid%xyz(xcoord,in)= &
831  region%levels(1)%grid%xyz(xcoord,in)- &
832  region%levels(1)%gridOld%xyz(xcoord,in)
833  region%levels(1)%grid%xyz(ycoord,in)= &
834  region%levels(1)%grid%xyz(ycoord,in)- &
835  region%levels(1)%gridOld%xyz(ycoord,in)
836  region%levels(1)%grid%xyz(zcoord,in)= &
837  region%levels(1)%grid%xyz(zcoord,in)- &
838  region%levels(1)%gridOld%xyz(zcoord,in)
839  ENDDO
840 
841 ! deallocate temporary arrays -------------------------------------------------
842 
843  DEALLOCATE( dxyz, stat=errfl ); IF (errfl>0) goto 99
844  DEALLOCATE( vxyz, stat=errfl ); IF (errfl>0) goto 99
845 
846  goto 999
847 
848 ! finalize --------------------------------------------------------------------
849 
850 88 CONTINUE
851 
852  global%error = errfl
853  CALL errorstop( global,err_allocate,&
854  __line__ )
855 
856 99 CONTINUE
857 
858  global%error = errfl
859  CALL errorstop( global,err_deallocate,&
860  __line__ )
861 
862 999 CONTINUE
863 
864  CALL deregisterfunction( global )
865 
866 END SUBROUTINE rflo_vmslaplaceprocedure
867 
868 !******************************************************************************
869 !
870 ! Purpose: projects grid vertices to cell face plane of perturbed grid.
871 !
872 ! Description: none.
873 !
874 ! Input: region = data of current region, old grid coordinates.
875 !
876 ! Output: vxyz = sum of 12 projected cell vertices, 4 in each direction
877 !
878 ! Notes: none.
879 !
880 !******************************************************************************
881 
882 SUBROUTINE rflo_vmsprojectvertices( region,vxyz )
883 
886  IMPLICIT NONE
887 
888 #include "Indexing.h"
889 
890 ! ... parameters
891  TYPE(t_region) :: region
892  REAL(RFREAL), POINTER :: vxyz(:,:)
893 
894 ! ... loop variables
895  INTEGER :: i, j, k
896 
897 ! ... local variables
898  TYPE(t_global), POINTER :: global
899 
900  INTEGER :: ilev, inoff, ijnoff, icoff, ijcoff
901  INTEGER :: idnbeg, idnend, jdnbeg, jdnend, kdnbeg, kdnend
902  INTEGER :: ipnbeg, ipnend, jpnbeg, jpnend, kpnbeg, kpnend, ibn, ien
903  INTEGER :: ijk, m1, m2, m12, ic, errfl
904 
905  REAL(RFREAL) :: sn, c1, c2, c3, c4, wc, wm
906  REAL(RFREAL), POINTER :: xyz(:,:), si(:,:), sj(:,:), sk(:,:), cofg(:,:)
907  REAL(RFREAL), ALLOCATABLE :: fc(:,:), snx(:), sny(:), snz(:)
908 
909 !******************************************************************************
910 
911  global => region%global
912  CALL registerfunction( global,'RFLO_VmsProjectVertices',&
913  'RFLO_ModVolMeshSmoothing.F90' )
914 
915 ! get dimensions and pointers -------------------------------------------------
916 
917  ilev = 1
918 
919  CALL rflo_getdimensdummynodes( region,ilev,idnbeg,idnend, &
920  jdnbeg,jdnend,kdnbeg,kdnend )
921  CALL rflo_getdimensphysnodes( region,ilev,ipnbeg,ipnend,jpnbeg,jpnend, &
922  kpnbeg,kpnend )
923  CALL rflo_getcelloffset( region,ilev,icoff,ijcoff )
924  CALL rflo_getnodeoffset( region,ilev,inoff,ijnoff )
925  ibn = indijk(idnbeg,jdnbeg,kdnbeg,inoff,ijnoff)
926  ien = indijk(idnend,jdnend,kdnend,inoff,ijnoff)
927 
928  xyz => region%levels(ilev)%grid%xyz
929  cofg => region%levels(ilev)%grid%cofg
930 
931 ! set pointers ----------------------------------------------------------------
932 
933  si => region%levels(ilev)%grid%si
934  sj => region%levels(ilev)%grid%sj
935  sk => region%levels(ilev)%grid%sk
936 
937  ALLOCATE( fc(xcoord:zcoord,ibn:ien), stat=errfl ); IF (errfl>0) goto 88
938  ALLOCATE( snx(ibn:ien), stat=errfl ); IF (errfl>0) goto 88
939  ALLOCATE( sny(ibn:ien), stat=errfl ); IF (errfl>0) goto 88
940  ALLOCATE( snz(ibn:ien), stat=errfl ); IF (errfl>0) goto 88
941 
942 ! accumulate projected coordinates --------------------------------------------
943 ! i-faces
944 
945  fc = 0._rfreal
946 
947  DO k=kdnbeg+1,kdnend-1
948  DO j=jdnbeg+1,jdnend-1
949  DO i=idnbeg+1,idnend-1
950  ijk = indijk(i ,j ,k ,inoff,ijnoff)
951  ic = indijk(i ,j ,k ,icoff,ijcoff)
952  m1 = indijk(i-1,j ,k ,icoff,ijcoff)
953 
954  wm = 0.5_rfreal
955  wc = 0.5_rfreal
956 
957  fc(xcoord,ijk) = wc*cofg(xcoord,ic) + wm*cofg(xcoord,m1)
958  fc(ycoord,ijk) = wc*cofg(ycoord,ic) + wm*cofg(ycoord,m1)
959  fc(zcoord,ijk) = wc*cofg(zcoord,ic) + wm*cofg(zcoord,m1)
960 
961  sn = sqrt( si(xcoord,ijk)**2+si(ycoord,ijk)**2+si(zcoord,ijk)**2 )
962  snx(ijk) = si(xcoord,ijk)/(sn+1.e-12_rfreal)
963  sny(ijk) = si(ycoord,ijk)/(sn+1.e-12_rfreal)
964  snz(ijk) = si(zcoord,ijk)/(sn+1.e-12_rfreal)
965 
966  ENDDO
967  ENDDO
968  ENDDO
969 
970  DO k=kpnbeg,kpnend
971  DO j=jpnbeg,jpnend
972  DO i=ipnbeg,ipnend
973  ijk = indijk(i ,j ,k ,inoff,ijnoff)
974  m1 = indijk(i ,j-1,k ,inoff,ijnoff)
975  m2 = indijk(i ,j ,k-1,inoff,ijnoff)
976  m12 = indijk(i ,j-1,k-1,inoff,ijnoff)
977 
978  c1 = snx(ijk)*(xyz(xcoord,ijk)-fc(xcoord,ijk))+ &
979  sny(ijk)*(xyz(ycoord,ijk)-fc(ycoord,ijk))+ &
980  snz(ijk)*(xyz(zcoord,ijk)-fc(zcoord,ijk))
981 
982  c2 = snx(m1)*(xyz(xcoord,ijk)-fc(xcoord,m1))+ &
983  sny(m1)*(xyz(ycoord,ijk)-fc(ycoord,m1))+ &
984  snz(m1)*(xyz(zcoord,ijk)-fc(zcoord,m1))
985 
986  c3 = snx(m2)*(xyz(xcoord,ijk)-fc(xcoord,m2))+ &
987  sny(m2)*(xyz(ycoord,ijk)-fc(ycoord,m2))+ &
988  snz(m2)*(xyz(zcoord,ijk)-fc(zcoord,m2))
989 
990  c4 = snx(m12)*(xyz(xcoord,ijk)-fc(xcoord,m12))+ &
991  sny(m12)*(xyz(ycoord,ijk)-fc(ycoord,m12))+ &
992  snz(m12)*(xyz(zcoord,ijk)-fc(zcoord,m12))
993 
994  vxyz(xcoord,ijk) = xyz(xcoord,ijk)-c1*snx(ijk)
995  vxyz(ycoord,ijk) = xyz(ycoord,ijk)-c1*sny(ijk)
996  vxyz(zcoord,ijk) = xyz(zcoord,ijk)-c1*snz(ijk)
997 
998  vxyz(xcoord,ijk) = vxyz(xcoord,ijk)+xyz(xcoord,m1)-c2*snx(m1)
999  vxyz(ycoord,ijk) = vxyz(ycoord,ijk)+xyz(ycoord,m1)-c2*sny(m1)
1000  vxyz(zcoord,ijk) = vxyz(zcoord,ijk)+xyz(zcoord,m1)-c2*snz(m1)
1001 
1002  vxyz(xcoord,ijk) = vxyz(xcoord,ijk)+xyz(xcoord,m2)-c3*snx(m2)
1003  vxyz(ycoord,ijk) = vxyz(ycoord,ijk)+xyz(ycoord,m2)-c3*sny(m2)
1004  vxyz(zcoord,ijk) = vxyz(zcoord,ijk)+xyz(zcoord,m2)-c3*snz(m2)
1005 
1006  vxyz(xcoord,ijk) = vxyz(xcoord,ijk)+xyz(xcoord,m12)-c4*snx(m12)
1007  vxyz(ycoord,ijk) = vxyz(ycoord,ijk)+xyz(ycoord,m12)-c4*sny(m12)
1008  vxyz(zcoord,ijk) = vxyz(zcoord,ijk)+xyz(zcoord,m12)-c4*snz(m12)
1009 
1010  ENDDO ! i
1011  ENDDO ! j
1012  ENDDO ! k
1013 
1014 ! j-faces
1015 
1016  fc = 0._rfreal
1017 
1018  DO k=kdnbeg,kdnend-1
1019  DO j=jdnbeg,jdnend-1
1020  DO i=idnbeg,idnend-1
1021  ijk = indijk(i ,j ,k ,inoff,ijnoff)
1022  ic = indijk(i ,j ,k ,icoff,ijcoff)
1023  m1 = indijk(i ,j-1,k ,icoff,ijcoff)
1024 
1025  wm = 0.5_rfreal
1026  wc = 0.5_rfreal
1027 
1028  fc(xcoord,ijk) = wc*cofg(xcoord,ic) + wm*cofg(xcoord,m1)
1029  fc(ycoord,ijk) = wc*cofg(ycoord,ic) + wm*cofg(ycoord,m1)
1030  fc(zcoord,ijk) = wc*cofg(zcoord,ic) + wm*cofg(zcoord,m1)
1031 
1032  sn = sqrt( sj(xcoord,ijk)**2+sj(ycoord,ijk)**2+sj(zcoord,ijk)**2 )
1033  snx(ijk) = sj(xcoord,ijk)/(sn+1.e-12_rfreal)
1034  sny(ijk) = sj(ycoord,ijk)/(sn+1.e-12_rfreal)
1035  snz(ijk) = sj(zcoord,ijk)/(sn+1.e-12_rfreal)
1036 
1037  ENDDO
1038  ENDDO
1039  ENDDO
1040 
1041  DO k=kpnbeg,kpnend
1042  DO j=jpnbeg,jpnend
1043  DO i=ipnbeg,ipnend
1044  ijk = indijk(i ,j ,k ,inoff,ijnoff)
1045  m1 = indijk(i ,j ,k-1,inoff,ijnoff)
1046  m2 = indijk(i-1,j ,k ,inoff,ijnoff)
1047  m12 = indijk(i-1,j ,k-1,inoff,ijnoff)
1048 
1049  c1 = snx(ijk)*(xyz(xcoord,ijk)-fc(xcoord,ijk))+ &
1050  sny(ijk)*(xyz(ycoord,ijk)-fc(ycoord,ijk))+ &
1051  snz(ijk)*(xyz(zcoord,ijk)-fc(zcoord,ijk))
1052 
1053  c2 = snx(m1)*(xyz(xcoord,ijk)-fc(xcoord,m1))+ &
1054  sny(m1)*(xyz(ycoord,ijk)-fc(ycoord,m1))+ &
1055  snz(m1)*(xyz(zcoord,ijk)-fc(zcoord,m1))
1056 
1057  c3 = snx(m2)*(xyz(xcoord,ijk)-fc(xcoord,m2))+ &
1058  sny(m2)*(xyz(ycoord,ijk)-fc(ycoord,m2))+ &
1059  snz(m2)*(xyz(zcoord,ijk)-fc(zcoord,m2))
1060 
1061  c4 = snx(m12)*(xyz(xcoord,ijk)-fc(xcoord,m12))+ &
1062  sny(m12)*(xyz(ycoord,ijk)-fc(ycoord,m12))+ &
1063  snz(m12)*(xyz(zcoord,ijk)-fc(zcoord,m12))
1064 
1065  vxyz(xcoord,ijk) = vxyz(xcoord,ijk)+xyz(xcoord,ijk)-c1*snx(ijk)
1066  vxyz(ycoord,ijk) = vxyz(xcoord,ijk)+xyz(ycoord,ijk)-c1*sny(ijk)
1067  vxyz(zcoord,ijk) = vxyz(xcoord,ijk)+xyz(zcoord,ijk)-c1*snz(ijk)
1068 
1069  vxyz(xcoord,ijk) = vxyz(xcoord,ijk)+xyz(xcoord,m1)-c2*snx(m1)
1070  vxyz(ycoord,ijk) = vxyz(ycoord,ijk)+xyz(ycoord,m1)-c2*sny(m1)
1071  vxyz(zcoord,ijk) = vxyz(zcoord,ijk)+xyz(zcoord,m1)-c2*snz(m1)
1072 
1073  vxyz(xcoord,ijk) = vxyz(xcoord,ijk)+xyz(xcoord,m2)-c3*snx(m2)
1074  vxyz(ycoord,ijk) = vxyz(ycoord,ijk)+xyz(ycoord,m2)-c3*sny(m2)
1075  vxyz(zcoord,ijk) = vxyz(zcoord,ijk)+xyz(zcoord,m2)-c3*snz(m2)
1076 
1077  vxyz(xcoord,ijk) = vxyz(xcoord,ijk)+xyz(xcoord,m12)-c4*snx(m12)
1078  vxyz(ycoord,ijk) = vxyz(ycoord,ijk)+xyz(ycoord,m12)-c4*sny(m12)
1079  vxyz(zcoord,ijk) = vxyz(zcoord,ijk)+xyz(zcoord,m12)-c4*snz(m12)
1080 
1081  ENDDO ! i
1082  ENDDO ! j
1083  ENDDO ! k
1084 
1085 ! k-faces
1086 
1087  fc = 0._rfreal
1088 
1089  DO k=kdnbeg,kdnend-1
1090  DO j=jdnbeg,jdnend-1
1091  DO i=idnbeg,idnend-1
1092  ijk = indijk(i ,j ,k ,inoff,ijnoff)
1093  ic = indijk(i ,j ,k ,icoff,ijcoff)
1094  m1 = indijk(i ,j ,k-1,icoff,ijcoff)
1095 
1096  wm = 0.5_rfreal
1097  wc = 0.5_rfreal
1098 
1099  fc(xcoord,ijk) = wc*cofg(xcoord,ic) + wm*cofg(xcoord,m1)
1100  fc(ycoord,ijk) = wc*cofg(ycoord,ic) + wm*cofg(ycoord,m1)
1101  fc(zcoord,ijk) = wc*cofg(zcoord,ic) + wm*cofg(zcoord,m1)
1102 
1103  sn = sqrt( sk(xcoord,ijk)**2+sk(ycoord,ijk)**2+sk(zcoord,ijk)**2 )
1104  snx(ijk) = sk(xcoord,ijk)/(sn+1.e-12_rfreal)
1105  sny(ijk) = sk(ycoord,ijk)/(sn+1.e-12_rfreal)
1106  snz(ijk) = sk(zcoord,ijk)/(sn+1.e-12_rfreal)
1107 
1108  ENDDO
1109  ENDDO
1110  ENDDO
1111 
1112  DO k=kpnbeg,kpnend
1113  DO j=jpnbeg,jpnend
1114  DO i=ipnbeg,ipnend
1115  ijk = indijk(i ,j ,k ,inoff,ijnoff)
1116  m1 = indijk(i-1,j ,k ,inoff,ijnoff)
1117  m2 = indijk(i ,j-1,k ,inoff,ijnoff)
1118  m12 = indijk(i-1,j-1,k ,inoff,ijnoff)
1119 
1120  c1 = snx(ijk)*(xyz(xcoord,ijk)-fc(xcoord,ijk))+ &
1121  sny(ijk)*(xyz(ycoord,ijk)-fc(ycoord,ijk))+ &
1122  snz(ijk)*(xyz(zcoord,ijk)-fc(zcoord,ijk))
1123 
1124  c2 = snx(m1)*(xyz(xcoord,ijk)-fc(xcoord,m1))+ &
1125  sny(m1)*(xyz(ycoord,ijk)-fc(ycoord,m1))+ &
1126  snz(m1)*(xyz(zcoord,ijk)-fc(zcoord,m1))
1127 
1128  c3 = snx(m2)*(xyz(xcoord,ijk)-fc(xcoord,m2))+ &
1129  sny(m2)*(xyz(ycoord,ijk)-fc(ycoord,m2))+ &
1130  snz(m2)*(xyz(zcoord,ijk)-fc(zcoord,m2))
1131 
1132  c4 = snx(m12)*(xyz(xcoord,ijk)-fc(xcoord,m12))+ &
1133  sny(m12)*(xyz(ycoord,ijk)-fc(ycoord,m12))+ &
1134  snz(m12)*(xyz(zcoord,ijk)-fc(zcoord,m12))
1135 
1136  vxyz(xcoord,ijk) = vxyz(xcoord,ijk)+xyz(xcoord,ijk)-c1*snx(ijk)
1137  vxyz(ycoord,ijk) = vxyz(xcoord,ijk)+xyz(ycoord,ijk)-c1*sny(ijk)
1138  vxyz(zcoord,ijk) = vxyz(xcoord,ijk)+xyz(zcoord,ijk)-c1*snz(ijk)
1139 
1140  vxyz(xcoord,ijk) = vxyz(xcoord,ijk)+xyz(xcoord,m1)-c2*snx(m1)
1141  vxyz(ycoord,ijk) = vxyz(ycoord,ijk)+xyz(ycoord,m1)-c2*sny(m1)
1142  vxyz(zcoord,ijk) = vxyz(zcoord,ijk)+xyz(zcoord,m1)-c2*snz(m1)
1143 
1144  vxyz(xcoord,ijk) = vxyz(xcoord,ijk)+xyz(xcoord,m2)-c3*snx(m2)
1145  vxyz(ycoord,ijk) = vxyz(ycoord,ijk)+xyz(ycoord,m2)-c3*sny(m2)
1146  vxyz(zcoord,ijk) = vxyz(zcoord,ijk)+xyz(zcoord,m2)-c3*snz(m2)
1147 
1148  vxyz(xcoord,ijk) = vxyz(xcoord,ijk)+xyz(xcoord,m12)-c4*snx(m12)
1149  vxyz(ycoord,ijk) = vxyz(ycoord,ijk)+xyz(ycoord,m12)-c4*sny(m12)
1150  vxyz(zcoord,ijk) = vxyz(zcoord,ijk)+xyz(zcoord,m12)-c4*snz(m12)
1151 
1152  ENDDO ! i
1153  ENDDO ! j
1154  ENDDO ! k
1155 
1156 ! deallocate temporary arrays -------------------------------------------------
1157 
1158  DEALLOCATE( fc , stat=errfl ); IF (errfl>0) goto 99
1159  DEALLOCATE( snx, stat=errfl ); IF (errfl>0) goto 99
1160  DEALLOCATE( sny, stat=errfl ); IF (errfl>0) goto 99
1161  DEALLOCATE( snz, stat=errfl ); IF (errfl>0) goto 99
1162 
1163  goto 999
1164 
1165 ! finalize --------------------------------------------------------------------
1166 
1167 88 CONTINUE
1168 
1169  global%error = errfl
1170  CALL errorstop( global,err_allocate,&
1171  __line__ )
1172 
1173 99 CONTINUE
1174 
1175  global%error = errfl
1176  CALL errorstop( global,err_deallocate,&
1177  __line__ )
1178 
1179 999 CONTINUE
1180 
1181  CALL deregisterfunction( global )
1182 
1183 END SUBROUTINE rflo_vmsprojectvertices
1184 
1185 !******************************************************************************
1186 !
1187 ! Purpose: restore boundary deformation at interacting boundaries.
1188 !
1189 ! Description: none.
1190 !
1191 ! Input: region = data of current region, old grid coordinates.
1192 ! dxyz = original movement
1193 !
1194 ! Output: region%levels%grid%xyz = actual grid.
1195 !
1196 ! Notes: none
1197 !
1198 !******************************************************************************
1199 
1200 SUBROUTINE rflo_vmsrestorebounddeform( region,ibn,ien,dxyz )
1201 
1203 
1204  IMPLICIT NONE
1205 
1206 #include "Indexing.h"
1207 
1208 ! ... parameters
1209  TYPE(t_region) :: region
1210  INTEGER :: ibn, ien
1211  REAL(RFREAL), POINTER :: dxyz(:,:)
1212 
1213 ! ... loop variables
1214  INTEGER :: ipatch, i, j, k
1215 
1216 ! ... local variables
1217  TYPE(t_patch), POINTER :: patch
1218 
1219  INTEGER :: ilev, ibeg, iend, jbeg, jend, kbeg, kend, inoff, ijnoff, ijknb
1220  REAL(RFREAL), POINTER :: xyz(:,:), xyzorig(:,:)
1221 
1222 !******************************************************************************
1223 
1224  CALL registerfunction( region%global,'RFLO_VmsRestoreBoundDeform',&
1225  'RFLO_ModVolMeshSmoothing.F90' )
1226 
1227 ! get dimensions and pointers -------------------------------------------------
1228 
1229  ilev = 1
1230 
1231  CALL rflo_getpatchindicesnodes( region,patch,ilev,ibeg,iend, &
1232  jbeg,jend,kbeg,kend )
1233  CALL rflo_getnodeoffset( region,ilev,inoff,ijnoff )
1234 
1235  xyz => region%levels(ilev)%grid%xyz
1236  xyzorig => region%levels(ilev)%gridOld%xyz
1237 
1238 ! restore original boundary movements
1239 
1240  DO ipatch=1,region%nPatches
1241  patch => region%levels(ilev)%patches(ipatch)
1242 
1243  IF (patch%bcMotion == bc_external) THEN
1244  DO k=kbeg,kend
1245  DO j=jbeg,jend
1246  DO i=ibeg,iend
1247  ijknb = indijk(i,j,k,inoff,ijnoff)
1248  xyz(xcoord,ijknb) = xyzorig(xcoord,ijknb)+ dxyz(xcoord,ijknb)
1249  xyz(ycoord,ijknb) = xyzorig(ycoord,ijknb)+ dxyz(ycoord,ijknb)
1250  xyz(zcoord,ijknb) = xyzorig(zcoord,ijknb)+ dxyz(zcoord,ijknb)
1251  ENDDO ! i
1252  ENDDO ! j
1253  ENDDO ! k
1254  ENDIF ! bcCoupled
1255  ENDDO ! iPatch
1256 
1257 ! finalize --------------------------------------------------------------------
1258 
1259  CALL deregisterfunction( region%global )
1260 
1261 END SUBROUTINE rflo_vmsrestorebounddeform
1262 
1263 ! ******************************************************************************
1264 ! End
1265 ! ******************************************************************************
1266 
1267 END MODULE rflo_modvolmeshsmoothing
1268 
1269 ! ******************************************************************************
1270 !
1271 ! RCS Revision history:
1272 !
1273 ! $Log: RFLO_ModVolMeshSmoothing.F90,v $
1274 ! Revision 1.8 2009/08/27 14:04:51 mtcampbe
1275 ! Updated to enable burning motion with symmetry boundaries and enhanced
1276 ! burnout code.
1277 !
1278 ! Revision 1.7 2008/12/06 08:44:17 mtcampbe
1279 ! Updated license.
1280 !
1281 ! Revision 1.6 2008/11/19 22:17:28 mtcampbe
1282 ! Added Illinois Open Source License/Copyright
1283 !
1284 ! Revision 1.5 2006/03/05 21:52:57 wasistho
1285 ! changed computational space coordinates to be based on initial grid
1286 !
1287 ! Revision 1.4 2005/10/27 05:59:11 wasistho
1288 ! added USE RFLO_ModLaplaceSmoothin
1289 !
1290 ! Revision 1.3 2005/06/13 21:47:44 wasistho
1291 ! changed patch%bcCoupled to patch%bcMotion
1292 !
1293 ! Revision 1.2 2005/05/28 06:11:51 wasistho
1294 ! cosmetics
1295 !
1296 ! Revision 1.1 2005/05/21 00:16:46 wasistho
1297 ! added RFLO_ModVolMeshSmoothing
1298 !
1299 !
1300 !
1301 ! ******************************************************************************
1302 
1303 
1304 
1305 
1306 
1307 
1308 
1309 
1310 
1311 
1312 
1313 
1314 
1315 
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE ibeg
subroutine rflo_copygeometrydummy(region)
**********************************************************************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 jpnbeg
subroutine rflo_calccellcentroids(region)
j indices k indices k
Definition: Indexing.h:6
NT dx
**********************************************************************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 kpnbeg
subroutine rflo_c2eavgcoeffs(region)
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
subroutine rflo_extrapolategeometry(region)
**********************************************************************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 ic
subroutine rflo_exchangednoderecv(region, regionSrc, patch, patchSrc, average, dNode)
subroutine rflo_c2favgcoeffs(region)
subroutine rflo_vmsprojectvertices(region, vxyz)
double sqrt(double d)
Definition: double.h:73
subroutine rflo_changeinteriorgrid(region, boundMoved, edgeMoved, arcLen12, arcLen34, arcLen56, xyzOld, xyz)
subroutine rflo_movegridinterfaces(regions)
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE jdnbeg
subroutine rflo_calccontrolvolumes(region)
**********************************************************************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 jpnend
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE idnend
subroutine rflo_getnodeoffset(region, iLev, iNodeOffset, ijNodeOffset)
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE jdnend
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE idnbeg
Definition: patch.h:74
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE knode iend
subroutine rflo_calcfacevectors(region)
subroutine rflo_vmsrestorebounddeform(region, ibn, ien, dxyz)
subroutine rflo_exchangegeometry(regions)
subroutine rflo_movegridsurfaces(regions, someMoved)
subroutine rflo_generatecoarsegrids(region)
subroutine rflo_getpatchindicesnodes(region, patch, iLev, ibeg, iend, jbeg, jend, kbeg, kend)
subroutine rflo_vmslaplaceprocedure(region, iter)
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 ipnbeg
subroutine rflo_getcelloffset(region, iLev, iCellOffset, ijCellOffset)
void int int REAL * x
Definition: read.cpp:74
subroutine rflo_vmsaveragevertices(region, vxyz)
subroutine rflo_getdeformation(region, boundMoved, dNode)
subroutine rflo_vmsinit(regions, someMoved)
subroutine rflo_clearsendrequests(regions, iReg, geometry)
subroutine rflo_calcgridspeeds(region)
RT dz() const
Definition: Direction_3.h:133
subroutine rflo_laplacegridpatch(region, patch)
subroutine rflo_getdimensphysnodes(region, iLev, ipnbeg, ipnend, jpnbeg, jpnend, kpnbeg, kpnend)
j indices j
Definition: Indexing.h:6
NT dy
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE knode jend
subroutine rflo_exchangednodecopy(region, regionSrc, patch, patchSrc, average, dNode, dNodeSrc)
subroutine rflo_getdimensdummynodes(region, iLev, idnbeg, idnend, jdnbeg, jdnend, kdnbeg, kdnend)
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 rflo_boundarydeformation(region, boundMoved, edgeMoved, arcLen12, arcLen34, arcLen56, xyzOld, dNode)
subroutine, public rflo_movegridvms(regions)
subroutine grid(bp)
Definition: setup_py.f90:257
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE knode kbeg
subroutine deregisterfunction(global)
Definition: ModError.F90:469
subroutine rflo_vmslaplaceiterate(regions, iter, resid)
**********************************************************************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 ipnend
subroutine rflo_exchangednodesend(region, regionSrc, patch, dNode)
subroutine rflo_checkmetrics(iReg, region)
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE kdnbeg
RT a() const
Definition: Line_2.h:140
subroutine rflo_laplacegridsmoo(regions, resid)