Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TURB_LesMij.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: Compute the mij stress appearing in the dynamic LES models.
26 !
27 ! Description: We determine mij as appearing in the dynamic formulation:
28 ! M_{ij}=-test[bar(rho)](kappa \Delta)^2 |S(v)|S_{ij(v)
29 ! +test[bar(rho)\Delta^{2}|S(u)|S_{ij}(u)]
30 ! in which v=test[bar(rho ui)]/test[bar(rho)] where test denotes
31 ! the test-filter with twice the filter-width. M_ij is computed
32 ! on the cell faces. S_ij(u) and Sij(test[u]) are already
33 ! available, respectively, in mSij for mixture field and fSij for
34 ! filtered field at cell faces. Moreover, we use the fact that we
35 ! know 1/test[bar(rho)] (rhoFTb) and 1/[bar(rho)] (rhoF) at faces.
36 !
37 ! Input: region = data of current region
38 ! ijk = ijk-face is being treated
39 !
40 ! Output: mij = resulting stress tensor in dynamic LES models
41 !
42 ! Notes: none.
43 !
44 !******************************************************************************
45 !
46 ! $Id: TURB_LesMij.F90,v 1.8 2008/12/06 08:44:41 mtcampbe Exp $
47 !
48 ! Copyright: (c) 2001 by the University of Illinois
49 !
50 !******************************************************************************
51 
52 SUBROUTINE turb_lesmij( region,ijk )
53 
54  USE moddatatypes
55  USE moddatastruct, ONLY : t_region
56  USE modglobal, ONLY : t_global
57 #ifdef RFLU
58 ! USE RFLU_ModInterpolation, ONLY: RFLU_InterpFaces2Faces
59 #endif
60 #ifdef RFLO
63 
64 #include "Indexing.h"
65 #endif
66  USE moderror
68  IMPLICIT NONE
69 
70 ! ... parameters
71 #ifdef RFLO
72  TYPE(t_region) :: region
73 #endif
74 #ifdef RFLU
75  TYPE(t_region), POINTER :: region
76 #endif
77  INTEGER :: ijk
78 
79 ! ... loop variables
80  INTEGER :: i, j, k, ijkn, ijkc0, ijkc1
81 
82 ! ... local variables
83  CHARACTER(CHRLEN) :: rcsidentstring
84  TYPE(t_global), POINTER :: global
85 
86  INTEGER :: ibn,ien,idbeg,idend,tndel(diri:dirk)
87  REAL(RFREAL) :: kappa2,rkappa2,two3rd
88  REAL(RFREAL) :: delfac2,delfkap2,forterm
89  REAL(RFREAL), POINTER :: fvol(:),fsij(:,:),fvar(:,:),ffvar(:,:)
90  REAL(RFREAL), POINTER :: sij(:,:),mij(:,:)
91  REAL(RFREAL), POINTER :: field(:,:),tfield(:,:)
92  REAL(RFREAL), ALLOCATABLE :: modstrain(:)
93 
94 #ifdef RFLO
95  INTEGER :: idnbeg,idnend,jdnbeg,jdnend,kdnbeg,kdnend
96  INTEGER :: ilev,inoff,ijnoff
97 #endif
98 
99 !******************************************************************************
100 
101  rcsidentstring = '$RCSfile: TURB_LesMij.F90,v $'
102 
103  global => region%global
104  CALL registerfunction( global,'TURB_LesMij',&
105  'TURB_LesMij.F90' )
106 
107 ! get indices and pointers --------------------------------------------------
108 
109 #ifdef RFLO
110  ilev = region%currLevel
111  CALL rflo_getdimensdummynodes( region,ilev,idnbeg,idnend, &
112  jdnbeg,jdnend,kdnbeg,kdnend )
113  CALL rflo_getnodeoffset( region,ilev,inoff,ijnoff )
114 
115  fvar => region%levels(ilev)%turb%fVar
116  ffvar => region%levels(ilev)%turb%ffVar
117  mij => region%levels(ilev)%turb%mij
118  ibn = indijk(idnbeg,jdnbeg,kdnbeg,inoff,ijnoff)
119  ien = indijk(idnend,jdnend,kdnend,inoff,ijnoff)
120 
121  IF (ijk==diri) THEN
122  fvol => region%levels(ilev)%turb%fvolI
123  sij => region%levels(ilev)%turb%mIsij
124  fsij => region%levels(ilev)%turb%fISij
125  ELSEIF (ijk==dirj) THEN
126  fvol => region%levels(ilev)%turb%fvolJ
127  sij => region%levels(ilev)%turb%mJsij
128  fsij => region%levels(ilev)%turb%fJSij
129  ELSEIF (ijk==dirk) THEN
130  fvol => region%levels(ilev)%turb%fvolK
131  sij => region%levels(ilev)%turb%mKsij
132  fsij => region%levels(ilev)%turb%fKSij
133  ENDIF
134 #endif
135 #ifdef RFLU
136  fvar => region%turb%fVar
137  ffvar => region%turb%ffVar
138  mij => region%turb%mij
139  fvol => region%turb%fvolI
140  sij => region%turb%mIsij
141  fsij => region%turb%fISij
142  ibn = 1
143  ien = region%grid%nFaces
144 #endif
145 
146 ! allocate work arrays used within this scope
147 
148  ALLOCATE( modstrain(ibn:ien) )
149  ALLOCATE( field(e11:e33,ibn:ien),tfield(e11:e33,ibn:ien) )
150 
151 ! test filter width is twice bar filter width
152 
153  tndel(diri) = 2*region%turbInput%filterWidth(diri)
154 #ifdef RFLO
155  tndel(dirj) = 2*region%turbInput%filterWidth(dirj)
156  tndel(dirk) = 2*region%turbInput%filterWidth(dirk)
157 #endif
158 
159 ! filterwidth on the fg-level (test-bar) is sqrt(5) times larger than
160 ! on the f-level (bar), i.e. kappa=sqrt(5)
161 
162  kappa2 = 5._rfreal
163  rkappa2= 1._rfreal/kappa2
164  two3rd = 2._rfreal/3._rfreal
165 
166 ! determine the bar filter width delta which appears in the dynamic model;
167 ! this factor in square is defined as (kappa*delfac)^2 and stored in delFKap2
168 
169  delfac2 = region%turbInput%delFac2
170  delfkap2 = delfac2*kappa2
171 
172 ! first calculate test[bar(rho)](\kappa \Delta)^2|S(v)|Sij(v) at cell faces;
173 ! we obtain Sij(v) from array fSij;
174 
175  DO ijkn=ibn,ien
176 
177 ! - generate the 6-th component of fSij using the tracelessness of S_{ij}
178 
179  fsij(e33,ijkn)=-(fsij(e11,ijkn)+fsij(e22,ijkn))
180 
181 ! - get modulus of Sij(v): |S(v)|
182  modstrain(ijkn)=sqrt(fsij(e11,ijkn)*fsij(e11,ijkn) &
183  +fsij(e22,ijkn)*fsij(e22,ijkn) &
184  +fsij(e11,ijkn)*fsij(e22,ijkn) &
185  +fsij(e12,ijkn)*fsij(e12,ijkn) &
186  +fsij(e13,ijkn)*fsij(e13,ijkn) &
187  +fsij(e23,ijkn)*fsij(e23,ijkn))
188 
189 ! - in turn, (kappa*delta)^2 in fg-level is stored in tField
190 
191  tfield(e11,ijkn) = delfkap2*fvol(ijkn)**two3rd
192 
193 ! - fg-level contribution to M_{ij} can now be computed since
194 ! we already have test(bar[rho]) available at cell faces,
195 ! in fact we have 1/test(bar[rho]), so we devide instead of multiply;
196 ! install the first term of mij; the space of fSij in used in the process
197 
198  forterm = -tfield(e11,ijkn)/ffvar(cv_turb_dens,ijkn)* &
199  modstrain(ijkn)
200 
201  mij(e11,ijkn) = forterm*fsij(e11,ijkn)
202  mij(e12,ijkn) = forterm*fsij(e12,ijkn)
203  mij(e13,ijkn) = forterm*fsij(e13,ijkn)
204  mij(e22,ijkn) = forterm*fsij(e22,ijkn)
205  mij(e23,ijkn) = forterm*fsij(e23,ijkn)
206  mij(e33,ijkn) = forterm*fsij(e33,ijkn)
207 
208 ! - as final step we determine contribution of test-filtered f-level term;
209 ! note we have bar[rho] available at cell faces bRho stored in fVar;
210 ! in fact we have 1/bRho in fVar(CV_TURB_DENS,:), so we devide by bRho
211 ! instead of multiply and compute modulus of Sij: |S(u)|
212 
213  modstrain(ijkn) = sqrt(sij(e11,ijkn)*sij(e11,ijkn) &
214  +sij(e22,ijkn)*sij(e22,ijkn) &
215  +sij(e11,ijkn)*sij(e22,ijkn) &
216  +sij(e12,ijkn)*sij(e12,ijkn) &
217  +sij(e13,ijkn)*sij(e13,ijkn) &
218  +sij(e23,ijkn)*sij(e23,ijkn))
219 
220 ! - finish computation of mij; filterwidth^2 at f-level is tField/kappa2;
221 ! build terms need to be filtered
222 
223  forterm = tfield(e11,ijkn)/fvar(cv_turb_dens,ijkn)*rkappa2* &
224  modstrain(ijkn)
225 
226  field(e11,ijkn) = forterm*sij(e11,ijkn)
227  field(e12,ijkn) = forterm*sij(e12,ijkn)
228  field(e13,ijkn) = forterm*sij(e13,ijkn)
229  field(e22,ijkn) = forterm*sij(e22,ijkn)
230  field(e23,ijkn) = forterm*sij(e23,ijkn)
231  field(e33,ijkn) = -forterm*(sij(e11,ijkn)+sij(e22,ijkn))
232  ENDDO
233 
234 ! perform test filtering:
235 
236  idbeg = e11
237  idend = e33
238 #ifdef RFLO
239  IF (region%turbInput%filterType == filtype_uniform) then
240  CALL turb_flolesunifiltff( region,ijk,tndel,idbeg,idend,field,tfield )
241  ELSE
242  CALL turb_flolesgenfiltff( region,ijk,tndel,idbeg,idend,field,tfield )
243  ENDIF
244 #endif
245 #ifdef RFLU
246 ! CALL RFLU_InterpFaces2Faces( region,field,tField )
247  tfield(idbeg:idend,:) = field(idbeg:idend,:)
248 #endif
249 
250 ! and complete components of mij:
251 
252  DO ijkn=ibn,ien
253  mij(e11,ijkn) = mij(e11,ijkn) + tfield(e11,ijkn)
254  mij(e12,ijkn) = mij(e12,ijkn) + tfield(e12,ijkn)
255  mij(e13,ijkn) = mij(e13,ijkn) + tfield(e13,ijkn)
256  mij(e22,ijkn) = mij(e22,ijkn) + tfield(e22,ijkn)
257  mij(e23,ijkn) = mij(e23,ijkn) + tfield(e23,ijkn)
258  mij(e33,ijkn) = mij(e33,ijkn) + tfield(e33,ijkn)
259  ENDDO
260 
261 ! deallocate temporary arrays
262 
263  DEALLOCATE( modstrain,field,tfield )
264 
265 ! finalize --------------------------------------------------------------------
266 
267  CALL deregisterfunction( global )
268 
269 END SUBROUTINE turb_lesmij
270 
271 !******************************************************************************
272 !
273 ! RCS Revision history:
274 !
275 ! $Log: TURB_LesMij.F90,v $
276 ! Revision 1.8 2008/12/06 08:44:41 mtcampbe
277 ! Updated license.
278 !
279 ! Revision 1.7 2008/11/19 22:17:54 mtcampbe
280 ! Added Illinois Open Source License/Copyright
281 !
282 ! Revision 1.6 2005/12/31 23:29:02 wasistho
283 ! copy in lack of filter in rocflu temporarily
284 !
285 ! Revision 1.5 2005/12/28 03:24:39 wasistho
286 ! simply copy variables in waiting for Rocflu's FF-interpolation
287 !
288 ! Revision 1.4 2004/05/28 02:01:12 wasistho
289 ! update unstructured grid LES
290 !
291 ! Revision 1.3 2004/03/19 02:50:37 wasistho
292 ! prepared for RFLU
293 !
294 ! Revision 1.2 2004/03/12 02:55:35 wasistho
295 ! changed rocturb routine names
296 !
297 ! Revision 1.1 2004/03/05 04:37:00 wasistho
298 ! changed nomenclature
299 !
300 ! Revision 1.2 2003/05/15 02:57:06 jblazek
301 ! Inlined index function.
302 !
303 ! Revision 1.1 2002/10/14 23:55:30 wasistho
304 ! Install Rocturb
305 !
306 !
307 !******************************************************************************
308 
309 
310 
311 
312 
313 
314 
j indices k indices k
Definition: Indexing.h:6
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
double sqrt(double d)
Definition: double.h:73
**********************************************************************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
**********************************************************************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
subroutine turb_flolesunifiltff(region, ijk, nDel, idBeg, idEnd, fVar, fbVar)
blockLoc i
Definition: read.cpp:79
j indices j
Definition: Indexing.h:6
subroutine turb_lesmij(region, ijk)
Definition: TURB_LesMij.F90:52
subroutine rflo_getdimensdummynodes(region, iLev, idnbeg, idnend, jdnbeg, jdnend, kdnbeg, kdnend)
subroutine turb_flolesgenfiltff(region, ijk, nDel, idBeg, idEnd, fVar, fbVar)
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 kdnbeg