Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RFLU_MoveGridXyz.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: Move grid by smoothing coordinates.
26 !
27 ! Description: Simple pseudo-Laplacian smoothing of grid given boundary
28 ! distortion.
29 !
30 ! Input:
31 ! regions Region data
32 ! context Context in which grid smoothing is to be done
33 !
34 ! Output: None.
35 !
36 ! Notes:
37 ! 1. The input variable context allows the routine to distinguish between
38 ! two kinds of grid smoothing operations: The first is an operation on
39 ! a grid with the goal of smoothing the interior grid with no boundary
40 ! motion. This could be done to smooth an original grid. The second is
41 ! the smoothing of the grid with boundary motion. Since the operations
42 ! to be carried out are slighly different, it is convenient to use the
43 ! context variable to distinguish between them. The context variable can
44 ! take the two (integer parameter) values MOVEGRID_CONTEXT_ONLYSMOOTH
45 ! and MOVEGRID_CONTEXT_MOVESMOOTH.
46 ! 2. The two parameters influencing the grid motion, i.e., the number of
47 ! iterations and the smoothing coefficient, may need some tuning as more
48 ! complicated geometries are attempted...
49 ! 3. The integrity of patches with no imposed motion is ensured by one of
50 ! two methods. Both may be cast in terms of a boundary condition on the
51 ! residual of the Laplacian operator. The first is a von Neumann bc on
52 ! the residual and can be used for flat boundaries which are not aligned
53 ! the normal to which is not aligned with a coordinate direction. The
54 ! second is a Dirichlet boundary condition which can be used for flat
55 ! boundaries the normal to which is aligned with a coordinate direction.
56 ! Of course, the first method subsumes the second, but the latter may be
57 ! preferable because the first can introduce errors on the order of the
58 ! machine precision into the constant coordinate component. Which of the
59 ! two methods is more suitable is determined by a simple algorithm in
60 ! the routine RFLU_SetMoveGridOptions.F90.
61 !
62 ! ******************************************************************************
63 !
64 ! $Id: RFLU_MoveGridXyz.F90,v 1.9 2008/12/06 08:44:30 mtcampbe Exp $
65 !
66 ! Copyright: (c) 2002-2005 by the University of Illinois
67 !
68 ! ******************************************************************************
69 
70 SUBROUTINE rflu_movegridxyz(regions,context)
71 
72  USE moddatatypes
73  USE modgrid, ONLY: t_grid
74  USE moddatastruct, ONLY: t_region
75  USE modbndpatch, ONLY: t_patch
76  USE modglobal, ONLY: t_global
77  USE moderror
78  USE modmpi
79  USE modparameters
80 
81  IMPLICIT NONE
82 
83 ! ******************************************************************************
84 ! Declarations and definitions
85 ! ******************************************************************************
86 
87 ! ==============================================================================
88 ! Arguments
89 ! ==============================================================================
90 
91  INTEGER, INTENT(IN) :: context
92  TYPE(t_region), DIMENSION(:), POINTER :: regions
93 
94 ! ==============================================================================
95 ! Locals
96 ! ==============================================================================
97 
98  CHARACTER(CHRLEN) :: rcsidentstring
99  INTEGER :: errorflag,ic,ie,ipatch,ireg,it,iv,ivg,niter,patchcheckcounter, &
100  v1,v2,v3,v4
101  REAL(RFREAL) :: nx,ny,nz,sfact,term,volmaxglob,volmaxloc,volminglob, &
102  volminloc
103  REAL(RFREAL) :: dxyz(xcoord:zcoord)
104  REAL(RFREAL), DIMENSION(:,:), POINTER :: prhs,pxyz,pxyzold
105  TYPE(t_global), POINTER :: global
106  TYPE(t_grid), POINTER :: pgrid,pgridold
107  TYPE(t_patch), POINTER :: ppatch
108  TYPE(t_region), POINTER :: pregion
109 
110 ! ******************************************************************************
111 ! Start
112 ! ******************************************************************************
113 
114  rcsidentstring = '$RCSfile: RFLU_MoveGridXyz.F90,v $ $Revision: 1.9 $'
115 
116  global => regions(1)%global
117 
118  CALL registerfunction(global,'RFLU_MoveGridXyz',&
119  'RFLU_MoveGridXyz.F90')
120 
121  IF ( global%myProcid == masterproc .AND. &
122  global%verbLevel /= verbose_low ) THEN
123  WRITE(stdout,'(A,1X,A)') solver_name,'Moving grid based on coordinates...'
124  END IF ! global%myProcid
125 
126 ! ******************************************************************************
127 ! Set variables
128 ! ******************************************************************************
129 
130  niter = regions(1)%mixtInput%moveGridNIter
131  sfact = regions(1)%mixtInput%moveGridSFact
132 
133 ! TEMPORARY Disable smoothing for MPI version
134  niter = 0
135 ! END TEMPORARY
136 
137 ! ******************************************************************************
138 ! Copy grid data to old grid
139 ! ******************************************************************************
140 
141  DO ireg = 1,global%nRegionsLocal
142  pgrid => regions(ireg)%grid
143  pgridold => regions(ireg)%gridOld
144 
145  IF ( context == movegrid_context_movesmooth ) THEN
146  DO ic = 1,pgrid%nCellsTot ! Explicit copy to avoid ASCI White problem
147  pgridold%vol(ic) = pgrid%vol(ic)
148  END DO ! ic
149  END IF ! context
150 
151  DO iv = 1,pgrid%nVertTot ! Explicit copy to avoid ASCI White problem
152  pgridold%xyz(xcoord,iv) = pgrid%xyz(xcoord,iv)
153  pgridold%xyz(ycoord,iv) = pgrid%xyz(ycoord,iv)
154  pgridold%xyz(zcoord,iv) = pgrid%xyz(zcoord,iv)
155  END DO ! iv
156  END DO ! iReg
157 
158 ! ******************************************************************************
159 ! Allocate vertex degree array
160 ! ******************************************************************************
161 
162  DO ireg = 1,global%nRegionsLocal
163  pgrid => regions(ireg)%grid
164 
165  ALLOCATE(pgrid%degr(pgrid%nVertTot),stat=errorflag)
166  global%error = errorflag
167  IF ( global%error /= err_none ) THEN
168  CALL errorstop(global,err_allocate,__line__,'pGrid%degr')
169  END IF ! global%error
170 
171  IF ( pgrid%nTetsTot == pgrid%nCellsTot ) THEN ! Only for tetrahedra
172  ALLOCATE(pgrid%volMin(pgrid%nVertTot),stat=errorflag)
173  global%error = errorflag
174  IF ( global%error /= err_none ) THEN
175  CALL errorstop(global,err_allocate,__line__,'pGrid%volMin')
176  END IF ! global%error
177  END IF ! pGrid%nTetsTot
178  END DO ! iReg
179 
180 ! ******************************************************************************
181 ! Compute modified edge degree. NOTE the modified vertex degree depends on the
182 ! geometric properties of the grid; in this particular version on the volume.
183 ! Because the volume does not get updated during the iterations to smooth the
184 ! grid, the modified edge degree does not have to be recomputed.
185 ! ******************************************************************************
186 
187 ! ==============================================================================
188 ! Original vertex degree. NOTE must take into account virtual edges.
189 ! ==============================================================================
190 
191  DO ireg = 1,global%nRegionsLocal
192  pgrid => regions(ireg)%grid
193 
194  DO iv = 1,pgrid%nVertTot ! Explicit loop to avoid ASCI White problem
195  pgrid%degr(iv) = 0
196  END DO ! iv
197 
198  DO ie = 1,pgrid%nEdgesTot
199  v1 = pgrid%e2v(1,ie)
200  v2 = pgrid%e2v(2,ie)
201 
202  pgrid%degr(v1) = pgrid%degr(v1) + 1
203  pgrid%degr(v2) = pgrid%degr(v2) + 1
204  END DO ! ie
205  END DO ! iReg
206 
207 ! ==============================================================================
208 ! Modified vertex degree (for tetrahedral grids only). NOTE the modification
209 ! is usually beneficial if the grid contains very small and very large cells
210 ! and the small cells are of poor quality, which can lead to negative volumes.
211 ! ==============================================================================
212 
213  DO ireg = 1,global%nRegionsLocal
214  pgrid => regions(ireg)%grid
215 
216  IF ( pgrid%nTetsTot == pgrid%nCellsTot ) THEN
217  volminloc = minval(pgrid%vol(1:pgrid%nTets))
218  volmaxloc = maxval(pgrid%vol(1:pgrid%nTets))
219 
220 ! TO DO
221 ! Need to use reductions to find volume extrema
222  volminglob = volminloc
223  volmaxglob = volmaxloc
224 ! END TO DO
225 
226  DO iv = 1,pgrid%nVertTot ! Explicit loop to avoid ASCI White problem
227  pgrid%volMin(iv) = huge(1.0_rfreal)
228  END DO ! iv
229 
230  DO ic = 1,pgrid%nTetsTot
231  v1 = pgrid%tet2v(1,ic)
232  v2 = pgrid%tet2v(2,ic)
233  v3 = pgrid%tet2v(3,ic)
234  v4 = pgrid%tet2v(4,ic)
235 
236  pgrid%volMin(v1) = min(pgrid%volMin(v1),pgrid%vol(ic))
237  pgrid%volMin(v2) = min(pgrid%volMin(v2),pgrid%vol(ic))
238  pgrid%volMin(v3) = min(pgrid%volMin(v3),pgrid%vol(ic))
239  pgrid%volMin(v4) = min(pgrid%volMin(v4),pgrid%vol(ic))
240  END DO ! ic
241 
242  DO iv = 1,pgrid%nVert
243  pgrid%degr(iv) = pgrid%degr(iv) &
244  + (volmaxglob - volminglob)/pgrid%volMin(iv)
245  END DO ! iv
246  END IF ! pGrid%nTetsTot
247  END DO ! iReg
248 
249 ! ******************************************************************************
250 ! Initialize coordinates to old coordinates plus patch deformation
251 ! ******************************************************************************
252 
253  DO ireg = 1,global%nRegionsLocal
254  pgrid => regions(ireg)%grid
255  pgridold => regions(ireg)%gridOld
256 
257  pxyz => pgrid%xyz
258  pxyzold => pgridold%xyz
259 
260  IF ( context == movegrid_context_movesmooth ) THEN
261  DO ipatch = 1,pgrid%nPatches
262  ppatch => regions(ireg)%patches(ipatch)
263 
264  IF ( ppatch%movePatchDir /= movepatch_dir_none ) THEN
265  DO iv = 1,ppatch%nBVert
266  ivg = ppatch%bv(iv)
267 
268  pxyz(xcoord,ivg) = pxyzold(xcoord,ivg) + ppatch%dXyz(xcoord,iv)
269  pxyz(ycoord,ivg) = pxyzold(ycoord,ivg) + ppatch%dXyz(ycoord,iv)
270  pxyz(zcoord,ivg) = pxyzold(zcoord,ivg) + ppatch%dXyz(zcoord,iv)
271  END DO ! iv
272  END IF ! pPatch%movePatchDir
273  END DO ! iPatch
274  ELSE IF ( context == movegrid_context_onlysmooth ) THEN
275  DO ipatch = 1,pgrid%nPatches
276  ppatch => regions(ireg)%patches(ipatch)
277 
278  IF ( ppatch%movePatchDir /= movepatch_dir_none ) THEN
279  DO iv = 1,ppatch%nBVert
280  ivg = ppatch%bv(iv)
281 
282  pxyz(xcoord,ivg) = pxyzold(xcoord,ivg)
283  pxyz(ycoord,ivg) = pxyzold(ycoord,ivg)
284  pxyz(zcoord,ivg) = pxyzold(zcoord,ivg)
285  END DO ! iv
286  END IF ! pPatch%movePatchDir
287  END DO ! iPatch
288  END IF ! context
289  END DO ! iReg
290 
291 ! ******************************************************************************
292 ! Apply pseudo-Laplacian smoothing to coordinates of all vertices
293 ! ******************************************************************************
294 
295  DO it = 1,niter
296 
297 ! ==============================================================================
298 ! Compute right-hand side with boundary restrictions already imposed
299 ! ==============================================================================
300 
301  DO ireg = 1,global%nRegionsLocal
302  pgrid => regions(ireg)%grid
303  pxyz => pgrid%xyz
304  prhs => pgrid%rhs
305 
306 ! ------------------------------------------------------------------------------
307 ! Initialize right-hand side
308 ! ------------------------------------------------------------------------------
309 
310  DO iv = 1,pgrid%nVertTot ! Explicit loop to avoid ASCI White problem
311  prhs(xcoord,iv) = 0.0_rfreal
312  prhs(ycoord,iv) = 0.0_rfreal
313  prhs(zcoord,iv) = 0.0_rfreal
314  END DO ! iv
315 
316 ! ------------------------------------------------------------------------------
317 ! Compute right-hand side. NOTE loop only over actual edges and take into
318 ! accont the region degree of each edge to deal with multiple contributions
319 ! of edges on region boundaries.
320 ! ------------------------------------------------------------------------------
321 
322  DO ie = 1,pgrid%nEdges
323  v1 = pgrid%e2v(1,ie)
324  v2 = pgrid%e2v(2,ie)
325 
326  term = 1.0_rfreal/(REAL(pGrid%e2rDegr(ie),kind=rfreal))
327 
328  dxyz(xcoord) = term*(pxyz(xcoord,v2) - pxyz(xcoord,v1))
329  dxyz(ycoord) = term*(pxyz(ycoord,v2) - pxyz(ycoord,v1))
330  dxyz(zcoord) = term*(pxyz(zcoord,v2) - pxyz(zcoord,v1))
331 
332  prhs(xcoord,v1) = prhs(xcoord,v1) + dxyz(xcoord)
333  prhs(ycoord,v1) = prhs(ycoord,v1) + dxyz(ycoord)
334  prhs(zcoord,v1) = prhs(zcoord,v1) + dxyz(zcoord)
335 
336  prhs(xcoord,v2) = prhs(xcoord,v2) - dxyz(xcoord)
337  prhs(ycoord,v2) = prhs(ycoord,v2) - dxyz(ycoord)
338  prhs(zcoord,v2) = prhs(zcoord,v2) - dxyz(zcoord)
339  END DO ! ie
340 
341 ! ------------------------------------------------------------------------------
342 ! Apply boundary deformation restrictions
343 ! ------------------------------------------------------------------------------
344 
345  patchcheckcounter = 0
346 
347  IF ( context == movegrid_context_movesmooth ) THEN
348 
349 ! ----- Enforce imposed deformation --------------------------------------------
350 
351  DO ipatch = 1,pgrid%nPatches
352  ppatch => regions(ireg)%patches(ipatch)
353 
354  IF ( ppatch%movePatchDir /= movepatch_dir_none ) THEN
355  patchcheckcounter = patchcheckcounter + 1
356 
357  DO iv = 1,ppatch%nBVert
358  ivg = ppatch%bv(iv)
359 
360  prhs(xcoord,ivg) = 0.0_rfreal
361  prhs(ycoord,ivg) = 0.0_rfreal
362  prhs(zcoord,ivg) = 0.0_rfreal
363  END DO ! iv
364  END IF ! pPatch%movePatch
365  END DO ! iPatch
366 
367 ! ----- Ensure boundary integrity (no imposed motion or smoothing) -------------
368 
369  DO ipatch = 1,pgrid%nPatches
370  ppatch => regions(ireg)%patches(ipatch)
371 
372  IF ( ppatch%movePatchDir == movepatch_dir_none ) THEN
373  patchcheckcounter = patchcheckcounter + 1
374 
375  SELECT CASE ( ppatch%moveBcType )
376 
377 ! ----------- Normal displacement set to zero with Neumann bc
378 
379  CASE ( movegrid_bctype_neumann )
380  DO iv = 1,ppatch%nBVert
381  ivg = ppatch%bv(iv)
382 
383  nx = ppatch%bvn(xcoord,iv)
384  ny = ppatch%bvn(ycoord,iv)
385  nz = ppatch%bvn(zcoord,iv)
386 
387  term = prhs(xcoord,ivg)*nx &
388  + prhs(ycoord,ivg)*ny &
389  + prhs(zcoord,ivg)*nz
390 
391  prhs(xcoord,ivg) = prhs(xcoord,ivg) - term*nx
392  prhs(ycoord,ivg) = prhs(ycoord,ivg) - term*ny
393  prhs(zcoord,ivg) = prhs(zcoord,ivg) - term*nz
394  END DO ! iv
395 
396 ! ----------- Normal displacement set to zero with Dirichlet bc
397 
398  CASE ( movegrid_bctype_dirichx, &
399  movegrid_bctype_dirichy, &
400  movegrid_bctype_dirichz )
401  DO iv = 1,ppatch%nBVert
402  ivg = ppatch%bv(iv)
403 
404  prhs(ppatch%moveBcType,ivg) = 0.0_rfreal
405  END DO ! iv
406 
407 ! ----------- No bc (must only occur with no movement and smoothing)
408 
409  CASE ( movegrid_bctype_none )
410  IF ( ppatch%smoothGrid .EQV. .false. ) THEN
411  DO iv = 1,ppatch%nBVert
412  ivg = ppatch%bv(iv)
413 
414  prhs(xcoord,ivg) = 0.0_rfreal
415  prhs(ycoord,ivg) = 0.0_rfreal
416  prhs(zcoord,ivg) = 0.0_rfreal
417  END DO ! iv
418  ELSE ! Defensive programming
419  CALL errorstop(global,err_reached_default,__line__)
420  END IF !
421 
422  CASE default ! Defensive programming
423  CALL errorstop(global,err_reached_default,__line__)
424  END SELECT ! pPatch%moveBcType
425 
426  END IF ! pPatch
427  END DO ! iPatch
428 
429  ELSE IF ( context == movegrid_context_onlysmooth ) THEN
430  DO ipatch = 1,pgrid%nPatches
431  ppatch => regions(ireg)%patches(ipatch)
432 
433  patchcheckcounter = patchcheckcounter + 1
434 
435  DO iv = 1,ppatch%nBVert
436  ivg = ppatch%bv(iv)
437 
438  prhs(xcoord,ivg) = 0.0_rfreal
439  prhs(ycoord,ivg) = 0.0_rfreal
440  prhs(zcoord,ivg) = 0.0_rfreal
441  END DO ! iv
442  END DO ! iPatch
443  END IF ! context
444  END DO ! iReg
445 
446 ! ------------------------------------------------------------------------------
447 ! Check that all patches have mesh motion boundary conditions set. This
448 ! should never happen - if it does, there is a bug in the above code
449 ! segment (defensive coding)
450 ! ------------------------------------------------------------------------------
451 
452  IF ( patchcheckcounter /= pgrid%nPatches ) THEN
453  CALL errorstop(global,err_movepatch_bc_notset,__line__)
454  END IF ! patchCheckCounter
455 
456 ! TO DO
457 ! Need to use reduction to add contributions at interface vertices
458 ! END TO DO
459 
460 ! ==============================================================================
461 ! Update coordinates of actual vertices
462 ! ==============================================================================
463 
464  DO ireg = 1,global%nRegionsLocal
465  pgrid => regions(ireg)%grid
466  pxyz => pgrid%xyz
467  prhs => pgrid%rhs
468 
469  DO iv = 1,pgrid%nVert
470  term = sfact/REAL(pGrid%degr(iv),RFREAL)
471 
472  pxyz(xcoord,iv) = pxyz(xcoord,iv) + term*prhs(xcoord,iv)
473  pxyz(ycoord,iv) = pxyz(ycoord,iv) + term*prhs(ycoord,iv)
474  pxyz(zcoord,iv) = pxyz(zcoord,iv) + term*prhs(zcoord,iv)
475  END DO ! iv
476  END DO ! iReg
477 
478 ! TO DO
479 ! Update virtual vertices
480 ! END TO DO
481  END DO ! it
482 
483 ! ******************************************************************************
484 ! Deallocate residual and degree arrays
485 ! ******************************************************************************
486 
487  DO ireg = 1,global%nRegionsLocal
488  pgrid => regions(ireg)%grid
489 
490  DEALLOCATE(pgrid%degr,stat=errorflag)
491  global%error = errorflag
492  IF ( global%error /= err_none ) THEN
493  CALL errorstop(global,err_deallocate,__line__,'pGrid%degr')
494  END IF ! global%error
495 
496  IF ( pgrid%nTetsTot == pgrid%nCellsTot ) THEN ! Only for tetrahedra
497  DEALLOCATE(pgrid%volMin,stat=errorflag)
498  global%error = errorflag
499  IF ( global%error /= err_none ) THEN
500  CALL errorstop(global,err_deallocate,__line__,'pGrid%volMin')
501  END IF ! global%error
502  END IF ! pGrid%nTetsTot
503  END DO ! iReg
504 
505 ! ******************************************************************************
506 ! End
507 ! ******************************************************************************
508 
509  IF ( global%myProcid == masterproc .AND. &
510  global%verbLevel /= verbose_low ) THEN
511  WRITE(stdout,'(A,1X,A)') solver_name, &
512  'Moving grid based on coordinates done.'
513  END IF ! global%myProcid
514 
515  CALL deregisterfunction(global)
516 
517 END SUBROUTINE rflu_movegridxyz
518 
519 ! ******************************************************************************
520 !
521 ! RCS Revision history:
522 !
523 ! $Log: RFLU_MoveGridXyz.F90,v $
524 ! Revision 1.9 2008/12/06 08:44:30 mtcampbe
525 ! Updated license.
526 !
527 ! Revision 1.8 2008/11/19 22:17:42 mtcampbe
528 ! Added Illinois Open Source License/Copyright
529 !
530 ! Revision 1.7 2006/04/07 15:19:22 haselbac
531 ! Removed tabs
532 !
533 ! Revision 1.6 2005/06/09 20:22:58 haselbac
534 ! Replaced movePatch by movePatchDir
535 !
536 ! Revision 1.5 2005/04/15 15:07:21 haselbac
537 ! Converted to MPI, grid motion can only be used for serial runs
538 !
539 ! Revision 1.4 2003/08/20 02:09:58 haselbac
540 ! Changed verbosity conditions to reduce solver output in GENx runs
541 !
542 ! Revision 1.3 2003/07/09 22:36:53 haselbac
543 ! Added IF statement to avoid probs with single-proc charm jobs
544 !
545 ! Revision 1.2 2003/05/01 14:12:03 haselbac
546 ! Added logic to deal with non-moving and non-smoothed patches
547 !
548 ! Revision 1.1 2003/03/31 16:05:39 haselbac
549 ! Initial revision
550 !
551 ! Revision 1.8 2003/03/27 19:31:36 haselbac
552 ! Fixed bug in initializing pGrid%degr
553 !
554 ! Revision 1.7 2003/03/15 18:51:03 haselbac
555 ! Completed || of grid motion
556 !
557 ! Revision 1.6 2003/02/20 19:43:51 haselbac
558 ! Some simplification, added additional check
559 !
560 ! Revision 1.5 2003/01/28 14:43:19 haselbac
561 ! Now get user input, enforce no smoothing if necessary, small area modification activated
562 !
563 ! Revision 1.4 2002/11/26 15:28:35 haselbac
564 ! Added Dirichlet bc for grid motion
565 !
566 ! Revision 1.3 2002/11/19 23:46:41 haselbac
567 ! Cleaned up boundary integrity enforcement of grid motion
568 !
569 ! Revision 1.2 2002/11/08 21:33:11 haselbac
570 ! Several modifications, mainly cosmetic apart from degree-modification
571 !
572 ! Revision 1.1 2002/10/27 19:15:20 haselbac
573 ! Initial revision
574 !
575 ! Revision 1.1 2002/10/16 21:15:11 haselbac
576 ! Initial revision
577 !
578 ! ******************************************************************************
579 
580 
581 
582 
583 
584 
585 
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
**********************************************************************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 rflu_movegridxyz(regions, context)
Vector_n min(const Array_n_const &v1, const Array_n_const &v2)
Definition: Vector_n.h:346
subroutine errorstop(global, errorCode, errorLine, addMessage)
Definition: ModError.F90:483
subroutine deregisterfunction(global)
Definition: ModError.F90:469