/telemac3d/tel3d_v6p2/sources/smago3d.f

http://github.com/ogoe/OpenTelemac-svn-mirror · FORTRAN Legacy · 142 lines · 48 code · 0 blank · 94 comment · 0 complexity · a9338203d7e2f97c815b2d465880b10c MD5 · raw file

  1. ! ******************
  2. SUBROUTINE SMAGO3D
  3. ! ******************
  4. !
  5. &(U,V,W,TRAV1,TRAV2,TRAV3,TRAV4,TRAV5,TRAV6,
  6. & SVIDE,MESH3,IELM3,MSK,MASKEL)
  7. !
  8. !***********************************************************************
  9. ! TELEMAC3D V6P1 21/08/2010
  10. !***********************************************************************
  11. !
  12. !brief COMPUTES TURBULENT VISCOSITY USING
  13. !+ 3D SMAGORINSKI MODEL:
  14. !code
  15. !+ (1/2)
  16. !+ NUSMAGO = CS2 * ( 2.0 * SIJ * SIJ ) * (MESH SIZE)**2
  17. !
  18. !history OLIVER GOETHEL - UNI HANNOVER
  19. !+ 17/02/04
  20. !+ V5P5
  21. !+
  22. !
  23. !history N.DURAND (HRW), S.E.BOURBAN (HRW)
  24. !+ 13/07/2010
  25. !+ V6P0
  26. !+ Translation of French comments within the FORTRAN sources into
  27. !+ English comments
  28. !
  29. !history N.DURAND (HRW), S.E.BOURBAN (HRW)
  30. !+ 21/08/2010
  31. !+ V6P0
  32. !+ Creation of DOXYGEN tags for automated documentation and
  33. !+ cross-referencing of the FORTRAN sources
  34. !
  35. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  36. !| IELM3 |-->| TYPE OF ELEMENT
  37. !| MASKEL |-->| MASKING OF ELEMENTS
  38. !| | | =1. : NORMAL =0. : MASKED ELEMENT
  39. !| MESH3 |-->| 3D MESH
  40. !| MSK |-->| IF YES, THERE IS MASKED ELEMENTS.
  41. !| SVIDE |<->| VOID STRUCTURE
  42. !| TRAV1 |<->| WORK ARRAY
  43. !| TRAV2 |<->| WORK ARRAY
  44. !| TRAV3 |<->| WORK ARRAY
  45. !| TRAV4 |<->| WORK ARRAY
  46. !| TRAV5 |<->| WORK ARRAY
  47. !| TRAV6 |<->| WORK ARRAY
  48. !| U |-->| COMPONENT OF VELOCITY
  49. !| V |-->| COMPONENT OF VELOCITY
  50. !| W |-->| COMPONENT OF VELOCITY
  51. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  52. !
  53. USE BIEF
  54. USE DECLARATIONS_TELEMAC
  55. !
  56. IMPLICIT NONE
  57. INTEGER LNG,LU
  58. COMMON/INFO/LNG,LU
  59. !
  60. !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  61. !
  62. INTEGER, INTENT(IN) :: IELM3
  63. LOGICAL, INTENT(IN) :: MSK
  64. TYPE (BIEF_OBJ), INTENT(IN) :: U, V, W
  65. TYPE (BIEF_OBJ), INTENT(INOUT) :: TRAV1, TRAV2, TRAV3, TRAV4,TRAV6
  66. TYPE (BIEF_OBJ), INTENT(INOUT) :: TRAV5
  67. TYPE (BIEF_OBJ), INTENT(IN) :: MASKEL
  68. TYPE (BIEF_OBJ), INTENT(INOUT) :: SVIDE
  69. TYPE (BIEF_MESH) :: MESH3
  70. !
  71. !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  72. !
  73. INTEGER I
  74. !
  75. INTRINSIC SQRT
  76. !
  77. !-----------------------------------------------------------------------
  78. !
  79. DOUBLE PRECISION CS,CS2
  80. CS = 0.1D0
  81. CS2 = CS**2
  82. !
  83. !-----------------------------------------------------------------------
  84. !
  85. ! COMPUTES GRADIENTS (IN FACT AVERAGED GRADIENT MULTIPLIED BY
  86. ! A SURFACE WHICH IS THE INTEGRAL OF TEST FUNCTIONS ON THE DOMAIN,
  87. ! THIS SURFACE IS CONSIDERED TO BE (MESH SIZE)**2) )
  88. !
  89. CALL VECTOR(TRAV1,'=','GRADF X',IELM3,
  90. & 1.D0,U,SVIDE,SVIDE,SVIDE,SVIDE,SVIDE,
  91. & MESH3,MSK,MASKEL)
  92. CALL VECTOR(TRAV2,'=','GRADF Y',IELM3,
  93. & 1.D0,U,SVIDE,SVIDE,SVIDE,SVIDE,SVIDE,
  94. & MESH3,MSK,MASKEL)
  95. CALL VECTOR(TRAV3,'=','GRADF Z',IELM3,
  96. & 1.D0,U,SVIDE,SVIDE,SVIDE,SVIDE,SVIDE,
  97. & MESH3,MSK,MASKEL)
  98. !
  99. CALL VECTOR(TRAV2,'+','GRADF X',IELM3,
  100. & 1.D0,V,SVIDE,SVIDE,SVIDE,SVIDE,SVIDE,
  101. & MESH3,MSK,MASKEL)
  102. CALL VECTOR(TRAV5,'=','GRADF Y',IELM3,
  103. & 1.D0,V,SVIDE,SVIDE,SVIDE,SVIDE,SVIDE,
  104. & MESH3,MSK,MASKEL)
  105. CALL VECTOR(TRAV6,'=','GRADF Z',IELM3,
  106. & 1.D0,V,SVIDE,SVIDE,SVIDE,SVIDE,SVIDE,
  107. & MESH3,MSK,MASKEL)
  108. !
  109. CALL VECTOR(TRAV3,'+','GRADF X',IELM3,
  110. & 1.D0,W,SVIDE,SVIDE,SVIDE,SVIDE,SVIDE,
  111. & MESH3,MSK,MASKEL)
  112. CALL VECTOR(TRAV6,'+','GRADF Y',IELM3,
  113. & 1.D0,W,SVIDE,SVIDE,SVIDE,SVIDE,SVIDE,
  114. & MESH3,MSK,MASKEL)
  115. CALL VECTOR(TRAV4,'=','GRADF Z',IELM3,
  116. & 1.D0,W,SVIDE,SVIDE,SVIDE,SVIDE,SVIDE,
  117. & MESH3,MSK,MASKEL)
  118. !
  119. IF(NCSIZE.GT.1) THEN
  120. CALL PARCOM(TRAV1,2,MESH3)
  121. CALL PARCOM(TRAV2,2,MESH3)
  122. CALL PARCOM(TRAV3,2,MESH3)
  123. CALL PARCOM(TRAV4,2,MESH3)
  124. CALL PARCOM(TRAV5,2,MESH3)
  125. CALL PARCOM(TRAV6,2,MESH3)
  126. ENDIF
  127. !
  128. DO I=1,U%DIM1
  129. !
  130. TRAV5%R(I) = CS2 * SQRT( 2.D0*(TRAV1%R(I)**2
  131. & +TRAV5%R(I)**2
  132. & +TRAV4%R(I)**2)
  133. & +TRAV2%R(I)**2
  134. & +TRAV3%R(I)**2
  135. & +TRAV6%R(I)**2 )
  136. !
  137. ENDDO
  138. !
  139. !-----------------------------------------------------------------------
  140. !
  141. RETURN
  142. END SUBROUTINE SMAGO3D