My Project
Functions/Subroutines
vdif_uv.f90 File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine vdif_uv
 

Function/Subroutine Documentation

◆ vdif_uv()

subroutine vdif_uv ( )

Definition at line 46 of file vdif_uv.f90.

46 
47 !------------------------------------------------------------------------------|
48 
49  USE all_vars
50  USE mod_utils
51  USE mod_wd
52  IMPLICIT NONE
53  INTEGER I,K,ITMP1,ITMP2,ITMP3,KI
54  REAL(SP), DIMENSION(0:NT,KB) :: C,A,VHU,VHPU,VHV,VHPV
55  REAL(SP) :: TMP
56 
57  IF(dbg_set(dbg_sbr)) WRITE(ipt,*) "Start: vdif_uv"
58 
59  c = km1
60 
61  DO k = 2, kbm1
62  DO i = 1, n
63  IF(iswetc(i) == 1)THEN
64 
65  a(i,k-1) = -dti *(c(i,k)+umol) / (dz1(i,k-1)*dzz1(i,k-1)* d1(i)*d1(i))
66  c(i,k) = -dti *(c(i,k)+umol) / (dz1(i,k)*dzz1(i,k-1)* d1(i)*d1(i))
67  END IF
68  END DO
69  END DO
70 
71  DO i = 1, n
72  IF(iswetc(i) == 1)THEN
73  itmp1=isonb(nv(i,1))
74  itmp2=isonb(nv(i,2))
75  itmp3=isonb(nv(i,3))
76  IF(itmp1 == 2 .OR. itmp2 == 2 .OR. itmp3 == 2) THEN
77  tmp=0.0_sp
78  ELSE
79  tmp=1.0_sp
80  END IF
81  vhu(i,1) = a(i,1) / (a(i,1)-1.)
82  vhv(i,1) = a(i,1) / (a(i,1)-1.)
83  vhpu(i,1) = (-dti*wusurf(i)*tmp/(-dz1(i,1)*d1(i))-uf(i,1)) / (a(i,1)-1.)
84  vhpv(i,1) = (-dti*wvsurf(i)*tmp/(-dz1(i,1)*d1(i))-vf(i,1)) / (a(i,1)-1.)
85  END IF
86  END DO
87 
88  DO k = 2, kbm2
89  DO i = 1, n
90  IF(iswetc(i) == 1)THEN
91  vhpu(i,k) = 1.0_sp / (a(i,k)+c(i,k)*(1.-vhu(i,k-1))-1.)
92  vhpv(i,k) = 1.0_sp / (a(i,k)+c(i,k)*(1.-vhv(i,k-1))-1.)
93  vhu(i,k) = a(i,k) * vhpu(i,k)
94  vhv(i,k) = a(i,k) * vhpv(i,k)
95  vhpu(i,k) = (c(i,k)*vhpu(i,k-1)-uf(i,k))*vhpu(i,k)
96  vhpv(i,k) = (c(i,k)*vhpv(i,k-1)-vf(i,k))*vhpv(i,k)
97  END IF
98  END DO
99  END DO
100 
101  DO i = 1, n
102  IF(iswetc(i) == 1)THEN
103  tps(i) = cbc(i) * sqrt(u(i,kbm1)**2+v(i,kbm1)**2)
104  uf(i,kbm1) = (c(i,kbm1)*vhpu(i,kbm2)-uf(i,kbm1))/ &
105  (tps(i)*dti/(-dz1(i,kbm1)*d1(i))-1.-(vhu(i,kbm2)-1.)*c(i,kbm1))
106  vf(i,kbm1) = (c(i,kbm1)*vhpv(i,kbm2)-vf(i,kbm1))/ &
107  (tps(i)*dti/(-dz1(i,kbm1)*d1(i))-1.-(vhv(i,kbm2)-1.)*c(i,kbm1))
108  END IF
109  END DO
110 
111  DO k = 2, kbm1
112  ki = kb - k
113  DO i = 1, n
114  IF(iswetc(i) == 1)THEN
115  uf(i,ki) = (vhu(i,ki)*uf(i,ki+1)+vhpu(i,ki))
116  vf(i,ki) = (vhv(i,ki)*vf(i,ki+1)+vhpv(i,ki))
117  ELSE
118  uf(i,ki) = 0.0_sp
119  vf(i,ki) = 0.0_sp
120  END IF
121  END DO
122  END DO
123 
124 !
125 !--Damp Velocity In Sponge Region----------------------------------------------!
126 !
127  DO k = 1, kbm1
128  DO i = 1, n
129 !# if defined (THIN_DAM)
130 ! UF(I,K) = UF(I,K)-DAM_SPONGE(I)*UF(I,K)
131 ! VF(I,K) = VF(I,K)-DAM_SPONGE(I)*VF(I,K)
132 !# endif
133 !old: UF(I,K) = UF(I,K)-CC_SPONGE(I)*UF(I,K)
134 !old: VF(I,K) = VF(I,K)-CC_SPONGE(I)*VF(I,K)
135 ! ---- new: Karsten Lettmann: 2012.06.25 -------
136  uf(i,k) = uf(i,k)/(1.0_sp+cc_sponge(i)*uf(i,k)**2.0_sp)
137  vf(i,k) = vf(i,k)/(1.0_sp+cc_sponge(i)*vf(i,k)**2.0_sp)
138 ! ------- end new -------------------------------
139  END DO
140  END DO
141 
142  DO i = 1, n
143  IF(iswetc(i) == 1)THEN
144  wubot(i) = -tps(i) * u(i,kbm1)
145  wvbot(i) = -tps(i) * v(i,kbm1)
146  ELSE
147  wubot(i) = 0.0_sp
148  wvbot(i) = 0.0_sp
149  END IF
150  END DO
151 
152  IF(dbg_set(dbg_sbr)) WRITE(ipt,*) "Start: vdif_uv"
153 
real(sp), dimension(:), allocatable, target d1
Definition: mod_main.f90:1116
real(sp), dimension(:,:), allocatable, target v
Definition: mod_main.f90:1269
real(sp) umol
Definition: mod_main.f90:365
logical function dbg_set(vrb)
Definition: mod_utils.f90:182
real(sp) dti
Definition: mod_main.f90:844
real(sp), dimension(:,:), allocatable, target dzz1
Definition: mod_main.f90:1097
real(sp), dimension(:,:), allocatable, target vf
Definition: mod_main.f90:1282
real(sp), dimension(:,:), allocatable, target u
Definition: mod_main.f90:1268
real(sp), dimension(:), allocatable, target wubot
Definition: mod_main.f90:1185
integer kb
Definition: mod_main.f90:64
real(sp), dimension(:,:), allocatable, target uf
Definition: mod_main.f90:1281
real(sp), dimension(:), allocatable, target wvbot
Definition: mod_main.f90:1186
integer kbm2
Definition: mod_main.f90:66
integer n
Definition: mod_main.f90:55
real(sp), dimension(:), allocatable, target wusurf
Definition: mod_main.f90:1191
integer, dimension(:,:), allocatable, target nv
Definition: mod_main.f90:1018
real(sp), dimension(:), allocatable, target tps
Definition: mod_main.f90:1262
integer, dimension(:), allocatable iswetc
Definition: mod_wd.f90:52
real(sp), dimension(:,:), allocatable, target dz1
Definition: mod_main.f90:1096
real(sp), dimension(:), allocatable, target cc_sponge
Definition: mod_main.f90:1127
integer ipt
Definition: mod_main.f90:922
real(sp), dimension(:), allocatable, target cbc
Definition: mod_main.f90:1170
integer, parameter dbg_sbr
Definition: mod_utils.f90:69
real(sp), dimension(:,:), allocatable, target km1
Definition: mod_main.f90:1299
integer kbm1
Definition: mod_main.f90:65
integer, dimension(:), allocatable, target isonb
Definition: mod_main.f90:1024
real(sp), dimension(:), allocatable, target wvsurf
Definition: mod_main.f90:1192
Here is the call graph for this function:
Here is the caller graph for this function: