/telemac3d/tel3d_v6p2/sources/vissma.f

http://github.com/ogoe/OpenTelemac-svn-mirror · FORTRAN Legacy · 155 lines · 42 code · 0 blank · 113 comment · 0 complexity · e2219d69364016a568222775330a81d0 MD5 · raw file

  1. ! *****************
  2. SUBROUTINE VISSMA
  3. ! *****************
  4. !
  5. &(VISCVI,VISCTA,DNUTAH,DNUVIH,DNUVIV,DNUTAV,
  6. & U,V,W,TRAV1,TRAV2,TRAV3,TRAV4,TRAV5,TRAV6,
  7. & SVIDE,MESH3,IELM3,NTRAC,MSK,MASKEL,ITURBV)
  8. !
  9. !***********************************************************************
  10. ! TELEMAC3D V6P1 21/08/2010
  11. !***********************************************************************
  12. !
  13. !brief INITIALISES VISCOSITIES
  14. !+ FOR THE SMAGORINSKI MODEL.
  15. !
  16. !history JACEK A. JANKOWSKI PINXIT
  17. !+ **/03/99
  18. !+
  19. !+ FORTRAN95 VERSION
  20. !
  21. !history OLIVER GOETHEL UNI-HAN
  22. !+ **/02/04
  23. !+ V5P7
  24. !+ SMAGORINSKY 3D
  25. !
  26. !history N.DURAND (HRW), S.E.BOURBAN (HRW)
  27. !+ 13/07/2010
  28. !+ V6P0
  29. !+ Translation of French comments within the FORTRAN sources into
  30. !+ English comments
  31. !
  32. !history N.DURAND (HRW), S.E.BOURBAN (HRW)
  33. !+ 21/08/2010
  34. !+ V6P0
  35. !+ Creation of DOXYGEN tags for automated documentation and
  36. !+ cross-referencing of the FORTRAN sources
  37. !
  38. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  39. !| DNUTAH |-->| COEFFICIENT FOR HORIZONTAL DIFFUSION OF TRACER
  40. !| DNUTAV |-->| COEFFICIENT FOR VERTICAL DIFFUSION OF TRACER
  41. !| DNUVIH |-->| COEFFICIENT FOR HORIZONTAL DIFFUSION OF VELOCITIES
  42. !| DNUVIV |-->| COEFFICIENT FOR VERTICAL DIFFUSION OF VELOCITIES
  43. !| IELM3 |-->| TYPE OF ELEMENT
  44. !| ITURBV |-->| VERTICAL TURBULENCE MODEL
  45. !| MASKEL |-->| MASKING OF ELEMENTS
  46. !| | | =1. : NORMAL =0. : MASKED ELEMENT
  47. !| MESH3 |---| 3D MESH
  48. !| MSK |-->| IF YES, THERE IS MASKED ELEMENTS.
  49. !| NTRAC |-->| NUMBER OF ACTIVE TRACERS
  50. !| SVIDE |<->| VOID STRUCTURE
  51. !| TRAV1 |<->| WORK ARRAY
  52. !| TRAV2 |<->| WORK ARRAY
  53. !| TRAV3 |<->| WORK ARRAY
  54. !| TRAV4 |<->| WORK ARRAY
  55. !| TRAV5 |<->| WORK ARRAY
  56. !| TRAV6 |<->| WORK ARRAY
  57. !| U |-->| COMPONENT OF VELOCITY
  58. !| V |-->| COMPONENT OF VELOCITY
  59. !| VISCTA |<->| TURBULENT VISCOSITY COEFFICIENTS FOR TRACERS
  60. !| VISCVI |<->| TURBULENT VISCOSITY COEFFICIENTS FOR VELOCITIES
  61. !| W |-->| COMPONENT OF VELOCITY
  62. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  63. !
  64. USE BIEF
  65. USE INTERFACE_TELEMAC3D, EX_VISSMA => VISSMA
  66. USE DECLARATIONS_TELEMAC
  67. !
  68. IMPLICIT NONE
  69. INTEGER LNG,LU
  70. COMMON/INFO/LNG,LU
  71. !
  72. !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  73. !
  74. INTEGER, INTENT(IN) :: NTRAC,ITURBV
  75. INTEGER, INTENT(IN) :: IELM3
  76. LOGICAL, INTENT(IN) :: MSK
  77. TYPE (BIEF_OBJ), INTENT(IN) :: U, V, W
  78. TYPE (BIEF_OBJ), INTENT(INOUT) :: VISCVI, VISCTA
  79. TYPE (BIEF_OBJ), INTENT(INOUT) :: TRAV1, TRAV2, TRAV3, TRAV4
  80. TYPE (BIEF_OBJ), INTENT(INOUT) :: TRAV5 ! NUSMAG
  81. TYPE (BIEF_OBJ), INTENT(INOUT) :: TRAV6
  82. TYPE (BIEF_OBJ), INTENT(IN) :: MASKEL
  83. TYPE (BIEF_OBJ), INTENT(INOUT) :: SVIDE
  84. TYPE (BIEF_MESH) :: MESH3
  85. DOUBLE PRECISION, INTENT(IN) :: DNUVIH,DNUTAH,DNUVIV,DNUTAV
  86. !
  87. !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  88. !
  89. INTEGER ITRAC
  90. !
  91. !***********************************************************************
  92. !
  93. ! INITIALISES VISCOSITIES
  94. !
  95. ! VISCVI%ADR(1)%P IS THE X HORIZONTAL VISCOSITY
  96. ! VISCVI%ADR(2)%P IS THE Y HORIZONTAL VISCOSITY
  97. ! VISCVI%ADR(3)%P IS THE Z (VERTICAL) VISCOSITY
  98. !
  99. ! FOR THE TRACERS:
  100. !
  101. ! VISCTA%ADR(ITRAC)%P%ADR(1)%P IS THE X HORIZONTAL DIFFUSIVITY FOR THE
  102. ! TRACER NUMBER ITRAC, ETC...
  103. !
  104. !***********************************************************************
  105. !
  106. IF(ITURBV.NE.4) THEN
  107. !
  108. CALL CPSTVC(U,TRAV5)
  109. CALL SMAGO(U,V,TRAV1,TRAV2,TRAV3,TRAV4,TRAV5,MESH3,IELM3,
  110. & MSK,MASKEL)
  111. !
  112. ! VISCOSITY COMPUTED BY SMAGORINSKI : IN TRAV5
  113. !
  114. CALL OS('X=Y+C ',X=VISCVI%ADR(1)%P,Y=TRAV5,C=DNUVIH)
  115. CALL OS('X=Y+C ',X=VISCVI%ADR(2)%P,Y=TRAV5,C=DNUVIH)
  116. !
  117. IF(NTRAC.NE.0) THEN
  118. !
  119. DO ITRAC=1,NTRAC
  120. CALL OS('X=Y+C ',X=VISCTA%ADR(ITRAC)%P%ADR(1)%P,
  121. & Y=TRAV5,C=DNUTAH)
  122. CALL OS('X=Y+C ',X=VISCTA%ADR(ITRAC)%P%ADR(2)%P,
  123. & Y=TRAV5,C=DNUTAH)
  124. ENDDO
  125. !
  126. ENDIF
  127. !
  128. ELSE !ITURBV=4 -> 3D SMAGORINSKI
  129. !
  130. CALL SMAGO3D(U,V,W,TRAV1,TRAV2,TRAV3,TRAV4,TRAV5,TRAV6,
  131. & SVIDE,MESH3,IELM3,MSK,MASKEL)
  132. !
  133. CALL OS('X=Y+C ',X=VISCVI%ADR(1)%P,Y=TRAV5,C=DNUVIH)
  134. CALL OS('X=Y+C ',X=VISCVI%ADR(2)%P,Y=TRAV5,C=DNUVIH)
  135. CALL OS('X=Y+C ',X=VISCVI%ADR(3)%P,Y=TRAV5,C=DNUVIV)
  136. !
  137. IF(NTRAC.NE.0) THEN
  138. !
  139. DO ITRAC=1,NTRAC
  140. CALL OS ('X=Y+C ',X=VISCTA%ADR(ITRAC)%P%ADR(1)%P,
  141. & Y=TRAV5,C=DNUTAH)
  142. CALL OS ('X=Y+C ',X=VISCTA%ADR(ITRAC)%P%ADR(2)%P,
  143. & Y=TRAV5,C=DNUTAH)
  144. CALL OS ('X=Y+C ',X=VISCTA%ADR(ITRAC)%P%ADR(3)%P,
  145. & Y=TRAV5,C=DNUTAV)
  146. ENDDO
  147. !
  148. ENDIF
  149. !
  150. ENDIF
  151. !
  152. !-----------------------------------------------------------------------
  153. !
  154. RETURN
  155. END