Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RFLO_EdgeDeformationStraight.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: calculate node displacements on straight edges whose points have
26 ! been moved by RFLO_EdgeDeformation (finest grid only).
27 !
28 ! Description: points along an edge are shifted using 1-D linear transfinite
29 ! interpolation (TFI).
30 !
31 ! Input: region = grid dimensions
32 ! boundMoved = flag for boundaries of a region which have moved
33 ! boundFlat = flag for boundaries of a region which are flat
34 ! arcLen12 = arclength between i=const. boundaries for each j, k
35 ! arcLen34 = arclength between j=const. boundaries for each k, i
36 ! arcLen56 = arclength between k=const. boundaries for each i, j
37 ! xyzOrig = reference grid which TFI is based on
38 ! xyzOld = grid from previous time step.
39 !
40 ! Output: edgeMoved = flag if discretization at an edge was changed
41 ! dNode = updated deformation at edges.
42 !
43 ! Notes: variable dNode contains the whole 3-D field.
44 !
45 !******************************************************************************
46 !
47 ! $Id: RFLO_EdgeDeformationStraight.F90,v 1.4 2008/12/06 08:44:06 mtcampbe Exp $
48 !
49 ! Copyright: (c) 2001 by the University of Illinois
50 !
51 !******************************************************************************
52 
53 SUBROUTINE rflo_edgedeformationstraight( region,boundMoved,edgeStraight, &
54  edgemoved,arclen12,arclen34,arclen56, &
55  xyzorig,xyzold,dnode )
56 
57  USE moddatatypes
58  USE moddatastruct, ONLY : t_region
61  USE moderror
62  USE modparameters
63  IMPLICIT NONE
64 
65 #include "Indexing.h"
66 
67 ! ... parameters
68  LOGICAL :: boundmoved(6), edgestraight(12), edgemoved(12)
69 
70  REAL(RFREAL), POINTER :: arclen12(:,:), arclen34(:,:), arclen56(:,:)
71  REAL(RFREAL), POINTER :: dnode(:,:), xyzold(:,:), xyzorig(:,:)
72 
73  TYPE(t_region) :: region
74 
75 ! ... loop variables
76  INTEGER :: iedge, ind
77 
78 ! ... local variables
79  INTEGER :: ilev, ipnbeg, ipnend, jpnbeg, jpnend, kpnbeg, kpnend, l1c, l2c
80  INTEGER :: indbeg, indend, ijkn, ijkn1, ijknbeg, ijknend, inoff, ijnoff
81  INTEGER :: switch(12,9)
82 
83  REAL(RFREAL) :: arclen, ds, s, dn(3), dnbeg(3), dnend(3)
84 
85 !******************************************************************************
86 
87  CALL registerfunction( region%global,'RFLO_EdgeDeformationStraight',&
88  'RFLO_EdgeDeformationStraight.F90')
89 
90 ! get dimensions --------------------------------------------------------------
91 
92  ilev = 1
93  CALL rflo_getdimensphysnodes( region,ilev,ipnbeg,ipnend, &
94  jpnbeg,jpnend,kpnbeg,kpnend )
95  CALL rflo_getnodeoffset( region,ilev,inoff,ijnoff )
96 
97 ! set edge switch -------------------------------------------------------------
98 ! switch(:,1) = begins at boundary
99 ! switch(:,2) = ends on boundary
100 ! switch(:,3) = right boundary
101 ! switch(:,4) = left boundary
102 ! switch(:,5) = direction (from-to boundary)
103 ! switch(:,6) = start index
104 ! switch(:,7) = end index
105 ! switch(:,8) = constant index in 1st direction
106 ! switch(:,9) = constant index in 2nd direction
107 
108  switch( 1,:) = (/5, 6, 1, 3, 56, kpnbeg, kpnend, ipnbeg, jpnbeg/)
109  switch( 2,:) = (/3, 4, 1, 6, 34, jpnbeg, jpnend, kpnend, ipnbeg/)
110  switch( 3,:) = (/5, 6, 1, 4, 56, kpnbeg, kpnend, ipnbeg, jpnend/)
111  switch( 4,:) = (/3, 4, 1, 5, 34, jpnbeg, jpnend, kpnbeg, ipnbeg/)
112  switch( 5,:) = (/5, 6, 2, 3, 56, kpnbeg, kpnend, ipnend, jpnbeg/)
113  switch( 6,:) = (/3, 4, 2, 6, 34, jpnbeg, jpnend, kpnend, ipnend/)
114  switch( 7,:) = (/5, 6, 2, 4, 56, kpnbeg, kpnend, ipnend, jpnend/)
115  switch( 8,:) = (/3, 4, 2, 5, 34, jpnbeg, jpnend, kpnbeg, ipnend/)
116  switch( 9,:) = (/1, 2, 3, 5, 12, ipnbeg, ipnend, jpnbeg, kpnbeg/)
117  switch(10,:) = (/1, 2, 3, 6, 12, ipnbeg, ipnend, jpnbeg, kpnend/)
118  switch(11,:) = (/1, 2, 4, 5, 12, ipnbeg, ipnend, jpnend, kpnbeg/)
119  switch(12,:) = (/1, 2, 4, 6, 12, ipnbeg, ipnend, jpnend, kpnend/)
120 
121 ! loop over all 12 edges ------------------------------------------------------
122 
123  DO iedge=1,12
124 
125  IF ((.NOT.boundmoved(switch(iedge,3))) .AND. &
126  (.NOT.boundmoved(switch(iedge,4))) .AND. &
127  (edgestraight(iedge) .EQV. .true.) .AND. &
128  (edgemoved( iedge) .EQV. .true.)) THEN
129 
130  ds = 0._rfreal
131  indbeg = switch(iedge,6)
132  indend = switch(iedge,7)
133  l1c = switch(iedge,8)
134  l2c = switch(iedge,9)
135  DO ind=indbeg+1,indend-1
136  IF (switch(iedge,5) == 12) THEN
137  ijkn = indijk(ind ,l1c,l2c,inoff,ijnoff)
138  ijkn1 = indijk(ind-1 ,l1c,l2c,inoff,ijnoff)
139  ijknbeg = indijk(indbeg,l1c,l2c,inoff,ijnoff)
140  ijknend = indijk(indend,l1c,l2c,inoff,ijnoff)
141  arclen = arclen12(l1c,l2c)
142  dnbeg(:) = dnode(:,ijknbeg) + xyzold(:,ijknbeg)
143  dnend(:) = dnode(:,ijknend) + xyzold(:,ijknend)
144  ELSE IF (switch(iedge,5) == 34) THEN
145  ijkn = indijk(l2c,ind ,l1c,inoff,ijnoff)
146  ijkn1 = indijk(l2c,ind-1 ,l1c,inoff,ijnoff)
147  ijknbeg = indijk(l2c,indbeg,l1c,inoff,ijnoff)
148  ijknend = indijk(l2c,indend,l1c,inoff,ijnoff)
149  arclen = arclen34(l1c,l2c)
150  dnbeg(:) = dnode(:,ijknbeg) + xyzold(:,ijknbeg)
151  dnend(:) = dnode(:,ijknend) + xyzold(:,ijknend)
152  ELSE IF (switch(iedge,5) == 56) THEN
153  ijkn = indijk(l1c,l2c,ind ,inoff,ijnoff)
154  ijkn1 = indijk(l1c,l2c,ind-1 ,inoff,ijnoff)
155  ijknbeg = indijk(l1c,l2c,indbeg,inoff,ijnoff)
156  ijknend = indijk(l1c,l2c,indend,inoff,ijnoff)
157  arclen = arclen56(l1c,l2c)
158  dnbeg(:) = dnode(:,ijknbeg) + xyzold(:,ijknbeg)
159  dnend(:) = dnode(:,ijknend) + xyzold(:,ijknend)
160  ENDIF
161  ds = ds + sqrt((xyzorig(xcoord,ijkn)-xyzorig(xcoord,ijkn1))**2 + &
162  (xyzorig(ycoord,ijkn)-xyzorig(ycoord,ijkn1))**2 + &
163  (xyzorig(zcoord,ijkn)-xyzorig(zcoord,ijkn1))**2)
164  s = ds/arclen
165 
166  CALL rflo_tfint1d( s,dnbeg,dnend,dn )
167  dnode(:,ijkn) = dn(:) - xyzold(:,ijkn)
168  ENDDO ! i
169 
170  ENDIF ! boundMoved
171  ENDDO ! iEdge
172 
173 ! finalize --------------------------------------------------------------------
174 
175  CALL deregisterfunction( region%global )
176 
177 END SUBROUTINE rflo_edgedeformationstraight
178 
179 !******************************************************************************
180 !
181 ! RCS Revision history:
182 !
183 ! $Log: RFLO_EdgeDeformationStraight.F90,v $
184 ! Revision 1.4 2008/12/06 08:44:06 mtcampbe
185 ! Updated license.
186 !
187 ! Revision 1.3 2008/11/19 22:17:20 mtcampbe
188 ! Added Illinois Open Source License/Copyright
189 !
190 ! Revision 1.2 2006/03/14 04:35:50 wasistho
191 ! improved computation of straight edges
192 !
193 ! Revision 1.1 2006/03/12 20:42:53 wasistho
194 ! added RFLO_EdgeDeformationStraight
195 !
196 !
197 !******************************************************************************
198 
199 
200 
201 
202 
203 
204 
**********************************************************************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
double s
Definition: blastest.C:80
**********************************************************************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 registerfunction(global, funName, fileName)
Definition: ModError.F90:449
double sqrt(double d)
Definition: double.h:73
subroutine rflo_tfint1d(s, p1, p2, xyz)
Definition: RFLO_Tfint.F90:59
**********************************************************************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
subroutine rflo_getnodeoffset(region, iLev, iNodeOffset, ijNodeOffset)
subroutine rflo_edgedeformationstraight(region, boundMoved, edgeStraight, edgeMoved, arcLen12, arcLen34, arcLen56, xyzOrig, xyzOld, dNode)
**********************************************************************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_getdimensphysnodes(region, iLev, ipnbeg, ipnend, jpnbeg, jpnend, kpnbeg, kpnend)
subroutine deregisterfunction(global)
Definition: ModError.F90:469
**********************************************************************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