Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TURB_LesContract.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: contracting tensors M_{ij} and L_{ij}
26 !
27 ! Description: We determine the dynamic coefficient by contracting tensors
28 ! M_{ij} and (L_{ij}-H_{ij}) and evalutating
29 ! C=<M_{ij}(L_{ij}-H_{ij})>/<M_{ij}M_{ij}> in which <.> denotes
30 ! an averaging over the homogeneous directions.
31 ! On entry lij contains L_{ij}-H_{ij} with H_{ij} appropriate
32 ! for the present model. A 1D vector representing model coef is
33 ! returned and it is assumed that all information is available
34 ! at cell faces.
35 !
36 ! Input: region = data of current region
37 ! ijk = ijk-face is being treated
38 !
39 ! Output: coef = turb%coef = model coefficient
40 !
41 ! Notes: none.
42 !
43 !******************************************************************************
44 !
45 ! $Id: TURB_LesContract.F90,v 1.9 2008/12/06 08:44:41 mtcampbe Exp $
46 !
47 ! Copyright: (c) 2001 by the University of Illinois
48 !
49 !******************************************************************************
50 
51 SUBROUTINE turb_lescontract( region,ijk )
52 
53  USE moddatatypes
54  USE moddatastruct, ONLY : t_region
55  USE modglobal, ONLY : t_global
56 #ifdef RFLU
57  USE modbndpatch, ONLY : t_patch
58 #endif
59 #ifdef RFLO
62 
63 #include "Indexing.h"
64 #endif
65  USE turb_modinterfaces, ONLY : turb_statfcollector
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 :: in, ipatch
81 
82 ! ... local variables
83  CHARACTER(CHRLEN) :: rcsidentstring
84  TYPE(t_global), POINTER :: global
85 #ifdef RFLU
86  TYPE(t_patch), POINTER :: patch
87 #endif
88 
89  INTEGER :: ibn, ien, ndel(diri:dirk)
90  REAL(RFREAL), POINTER :: coef(:,:),mij(:,:),lij(:,:), colvar(:,:)
91  REAL(RFREAL), POINTER :: mijmij(:),mijlij(:),avgmmij(:),avgmlij(:)
92 
93 #ifdef RFLO
94  INTEGER :: idnbeg,idnend,jdnbeg,jdnend,kdnbeg,kdnend
95  INTEGER :: ilev,inoff,ijnoff
96 #endif
97 #ifdef RFLU
98  INTEGER :: npatches, nbfaces
99  REAL(RFREAL), POINTER :: bcoef(:,:),bmij(:,:),blij(:,:),colbvar(:,:)
100 #endif
101 
102 !******************************************************************************
103 
104  rcsidentstring = '$RCSfile: TURB_LesContract.F90,v $'
105 
106  global => region%global
107  CALL registerfunction( global,'TURB_LesContract',&
108  'TURB_LesContract.F90' )
109 
110 ! get indices and pointers --------------------------------------------------
111 
112  ndel(:) = region%turbInput%filterWidth(:)
113 
114 #ifdef RFLO
115  ilev = region%currLevel
116 
117  CALL rflo_getdimensdummynodes( region,ilev,idnbeg,idnend, &
118  jdnbeg,jdnend,kdnbeg,kdnend )
119  CALL rflo_getnodeoffset( region,ilev,inoff,ijnoff )
120  ibn = indijk(idnbeg,jdnbeg,kdnbeg,inoff,ijnoff)
121  ien = indijk(idnend,jdnend,kdnend,inoff,ijnoff)
122 
123  coef => region%levels(ilev)%turb%coef
124  lij => region%levels(ilev)%turb%lij
125  mij => region%levels(ilev)%turb%mij
126 #endif
127 #ifdef RFLU
128  ibn = 1
129  ien = region%grid%nFaces
130 
131  coef => region%turb%coef
132  lij => region%turb%lij
133  mij => region%turb%mij
134 #endif
135 
136 ! allocate temporary arrays
137 
138  ALLOCATE( mijmij(ibn:ien) )
139  ALLOCATE( mijlij(ibn:ien) )
140  ALLOCATE( avgmmij(ibn:ien) )
141  ALLOCATE( avgmlij(ibn:ien) )
142 
143 ! first contract the numerator and denominator
144 
145  DO in = ibn,ien
146 
147 ! - M_{ij}*M_{ij}:
148 
149  mijmij(in) = 2._rfreal*(mij(e11,in)*mij(e11,in) &
150  +mij(e22,in)*mij(e22,in) &
151  +mij(e11,in)*mij(e22,in) &
152  +mij(e12,in)*mij(e12,in) &
153  +mij(e13,in)*mij(e13,in) &
154  +mij(e23,in)*mij(e23,in))
155 
156 ! - M_{ij}*(L_{ij}-H_{ij}):
157 
158  mijlij(in) = mij(e11,in)*lij(e11,in) &
159  +mij(e22,in)*lij(e22,in) &
160  +mij(e33,in)*lij(e33,in) &
161  +2.0d0*mij(e12,in)*lij(e12,in) &
162  +2.0d0*mij(e13,in)*lij(e13,in) &
163  +2.0d0*mij(e23,in)*lij(e23,in)
164  ENDDO
165 
166 ! dynamic coefficient is obtained by averaging numerator and denominator
167 ! first, denominator
168 
169 #ifdef RFLO
170  CALL turb_flolesaverageface( region,ijk,mijmij,avgmmij )
171 #endif
172 #ifdef RFLU
173  avgmmij = mijmij
174 #endif
175 
176 ! then, numerator:
177 
178 #ifdef RFLO
179  CALL turb_flolesaverageface( region,ijk,mijlij,avgmlij )
180 #endif
181 #ifdef RFLU
182  avgmlij = mijlij
183 #endif
184 
185 ! we assign avgMLij/avgMMij to coef in which we also limit from below with 0;
186 ! moreover, if all the filterwidth is zero coef set to zero
187 
188  IF (ndel(diri)==0 .AND. ndel(dirj)==0 .AND. ndel(dirk)==0) THEN
189  coef=0.0_rfreal
190  ELSE
191  DO in = ibn,ien
192  IF (avgmlij(in) > 0.1_rfreal*avgmmij(in)) avgmlij(in) = 0._rfreal
193  coef(1,in)= max(0._rfreal,avgmlij(in)/(avgmmij(in)+real_small))
194  ENDDO
195  ENDIF
196 
197 !#ifdef STATS
198 ! if desired, collect quantities of interest at cell centers for statistics
199 
200 ! IF (region%turbInput%nSt > 0) THEN
201 ! ALLOCATE( colVar(2,ibn:ien) )
202 ! colVar(1,:) = avgMMij
203 ! colVar(2,:) = avgMLij
204 !#ifdef RFLO
205 ! CALL TURB_StatFCollector( region,ijk,1,2,colVar )
206 ! DEALLOCATE( colVar )
207 !#endif
208 ! ENDIF
209 !#endif
210 
211 ! deallocate retired arrays
212  DEALLOCATE( mijmij,mijlij,avgmmij,avgmlij )
213 
214 ! RFLU boundary treatments =====================================================
215 #ifdef RFLU
216 
217  npatches = region%grid%nPatches
218  nbfaces = 0
219 
220  DO ipatch = 1,npatches
221  patch => region%patches(ipatch)
222  nbfaces = nbfaces + patch%nBTris + patch%nBQuads
223  END DO ! iPatch
224  ibn = 1
225  ien = nbfaces
226 
227  bcoef => region%turb%bCoef
228  blij => region%turb%bLij
229  bmij => region%turb%bMij
230 
231 ! allocate temporary arrays
232 
233  ALLOCATE( mijmij(ibn:ien) )
234  ALLOCATE( mijlij(ibn:ien) )
235  ALLOCATE( avgmmij(ibn:ien) )
236  ALLOCATE( avgmlij(ibn:ien) )
237 
238 ! first contract the numerator and denominator
239 
240  DO in = ibn,ien
241 
242 ! - M_{ij}*M_{ij}:
243 
244  mijmij(in) = 2._rfreal*(bmij(e11,in)*bmij(e11,in) &
245  +bmij(e22,in)*bmij(e22,in) &
246  +bmij(e11,in)*bmij(e22,in) &
247  +bmij(e12,in)*bmij(e12,in) &
248  +bmij(e13,in)*bmij(e13,in) &
249  +bmij(e23,in)*bmij(e23,in))
250 
251 ! - M_{ij}*(L_{ij}-H_{ij}):
252 
253  mijlij(in) = bmij(e11,in)*blij(e11,in) &
254  +bmij(e22,in)*blij(e22,in) &
255  +bmij(e33,in)*blij(e33,in) &
256  +2.0d0*bmij(e12,in)*blij(e12,in) &
257  +2.0d0*bmij(e13,in)*blij(e13,in) &
258  +2.0d0*bmij(e23,in)*blij(e23,in)
259  ENDDO
260 
261 ! dynamic coefficient is obtained by averaging numerator and denominator
262 ! first, denominator
263 
264  avgmmij = mijmij
265 
266 ! then, numerator:
267 
268  avgmlij = mijlij
269 
270 ! we assign avgMLij/avgMMij to coef in which we also limit from below with 0;
271 ! moreover, if all the filterwidth is zero coef set to zero
272 
273  IF (ndel(diri)==0 .AND. ndel(dirj)==0 .AND. ndel(dirk)==0) THEN
274  bcoef=0.0_rfreal
275  ELSE
276  DO in = ibn,ien
277  IF (avgmlij(in) > 0.1_rfreal*avgmmij(in)) avgmlij(in) = 0._rfreal
278  bcoef(1,in)= max(0._rfreal,avgmlij(in)/(avgmmij(in)+real_small))
279  ENDDO
280  ENDIF
281 
282 !#ifdef STATS
283 ! if desired, collect quantities of interest at cell centers for statistics
284 
285 ! IF (region%turbInput%nSt > 0) THEN
286 ! ALLOCATE( colBVar(2,ibn:ien) )
287 ! colBVar(1,:) = avgMMij
288 ! colBVar(2,:) = avgMLij
289 ! CALL TURB_StatFCollector( region,ijk,1,2,colVar,colBVar )
290 ! DEALLOCATE( colVar,colBVar )
291 ! ENDIF
292 !#endif
293 
294 ! deallocate retired arrays
295  DEALLOCATE( mijmij,mijlij,avgmmij,avgmlij )
296 
297 #endif
298 
299 ! finalize --------------------------------------------------------------------
300 
301  CALL deregisterfunction( global )
302 
303 END SUBROUTINE turb_lescontract
304 
305 !******************************************************************************
306 !
307 ! RCS Revision history:
308 !
309 ! $Log: TURB_LesContract.F90,v $
310 ! Revision 1.9 2008/12/06 08:44:41 mtcampbe
311 ! Updated license.
312 !
313 ! Revision 1.8 2008/11/19 22:17:54 mtcampbe
314 ! Added Illinois Open Source License/Copyright
315 !
316 ! Revision 1.7 2006/01/30 23:12:08 wasistho
317 ! removed comment after endif RFLU
318 !
319 ! Revision 1.6 2004/10/22 23:18:26 wasistho
320 ! comment out statistics collection of Mij and Lij
321 !
322 ! Revision 1.5 2004/05/28 02:01:35 wasistho
323 ! update unstructured grid LES
324 !
325 ! Revision 1.4 2004/03/27 02:16:42 wasistho
326 ! compiled with Rocflu
327 !
328 ! Revision 1.3 2004/03/19 02:49:35 wasistho
329 ! prepared for RFLU
330 !
331 ! Revision 1.2 2004/03/12 02:55:35 wasistho
332 ! changed rocturb routine names
333 !
334 ! Revision 1.1 2004/03/05 04:37:00 wasistho
335 ! changed nomenclature
336 !
337 ! Revision 1.4 2004/02/18 21:30:26 wasistho
338 ! set <Mij.Lij> to zero when Lij/Mij is excessively large
339 !
340 ! Revision 1.3 2003/05/24 02:07:33 wasistho
341 ! turbulence statistics expanded
342 !
343 ! Revision 1.2 2003/05/15 02:57:06 jblazek
344 ! Inlined index function.
345 !
346 ! Revision 1.1 2002/10/14 23:55:29 wasistho
347 ! Install Rocturb
348 !
349 !
350 !******************************************************************************
351 
352 
353 
354 
355 
356 
357 
subroutine turb_flolesaverageface(region, ijk, faceVar, avgFaceVar)
Vector_n max(const Array_n_const &v1, const Array_n_const &v2)
Definition: Vector_n.h:354
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 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
Definition: patch.h:74
subroutine turb_lescontract(region, ijk)
subroutine rflo_getdimensdummynodes(region, iLev, idnbeg, idnend, jdnbeg, jdnend, kdnbeg, kdnend)
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