/
update_surf_dr.F
145 lines (124 loc) · 4.11 KB
/
update_surf_dr.F
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include "CPP_OPTIONS.h"
CBOP
C !ROUTINE: UPDATE_SURF_DR
C !INTERFACE:
SUBROUTINE UPDATE_SURF_DR( useLatest, myTime, myIter, myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | SUBROUTINE UPDATE_SURF_DR
C | o Update the surface-level thickness fraction (hFacC,W,S)
C | according to the surface r-position = Non-Linear FrSurf
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C == Global variables
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#include "SURFACE.h"
C !INPUT/OUTPUT PARAMETERS:
C == Routine arguments ==
C useLatest :: if true use hFac_surfC, else use hFac_surfNm1C
C myTime :: Current time in simulation
C myIter :: Current iteration number in simulation
C myThid :: Thread number for this instance of the routine.
LOGICAL useLatest
_RL myTime
INTEGER myIter
INTEGER myThid
C !LOCAL VARIABLES:
#ifdef NONLIN_FRSURF
C Local variables
C i,j,bi,bj - loop counter
INTEGER i,j,k,bi,bj
INTEGER ks
CEOP
DO bj=myByLo(myThid), myByHi(myThid)
DO bi=myBxLo(myThid), myBxHi(myThid)
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
IF (useLatest.AND.(nonlinFreeSurf.GT.0)) then
C-- Update the fractional thickness "hFacC" of the surface level kSurfC :
DO j=1-Oly,sNy+Oly
DO i=1-Olx,sNx+Olx
ks = kSurfC(i,j,bi,bj)
IF (ks.LE.Nr) THEN
hFacC(i,j,ks,bi,bj) = hFac_surfC(i,j,bi,bj)
recip_hFacC(i,j,ks,bi,bj)= 1. _d 0 / hFac_surfC(i,j,bi,bj)
ENDIF
ENDDO
ENDDO
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
C-- Update fractional thickness "hFacW" & "hFacS" (at U and V points)
DO j=1-Oly,sNy+Oly
DO i=2-Olx,sNx+Olx
ks = kSurfW(i,j,bi,bj)
IF (ks.LE.Nr) THEN
hFacW(i,j,ks,bi,bj) = hFac_surfW(i,j,bi,bj)
recip_hFacW(i,j,ks,bi,bj)= 1. _d 0 / hFac_surfW(i,j,bi,bj)
ENDIF
ENDDO
ENDDO
DO j=2-Oly,sNy+Oly
DO i=1-Olx,sNx+Olx
ks = kSurfS(i,j,bi,bj)
IF (ks.LE.Nr) THEN
hFacS(i,j,ks,bi,bj) = hFac_surfS(i,j,bi,bj)
recip_hFacS(i,j,ks,bi,bj)= 1. _d 0 / hFac_surfS(i,j,bi,bj)
ENDIF
ENDDO
ENDDO
ELSEIF (nonlinFreeSurf.GT.0) THEN
C-- Update the fractional thickness "hFacC" of the surface level kSurfC
C:
DO j=1-Oly,sNy+Oly
DO i=1-Olx,sNx+Olx
ks = kSurfC(i,j,bi,bj)
IF (ks.LE.Nr) THEN
hFacC(i,j,ks,bi,bj) = hFac_surfNm1C(i,j,bi,bj)
recip_hFacC(i,j,ks,bi,bj)= 1. _d 0 / hFac_surfNm1C(i,j,bi,bj)
ENDIF
ENDDO
ENDDO
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
C-- Update fractional thickness "hFacW" & "hFacS" (at U and V points)
DO j=1-Oly,sNy+Oly
DO i=2-Olx,sNx+Olx
ks = kSurfW(i,j,bi,bj)
IF (ks.LE.Nr) THEN
hFacW(i,j,ks,bi,bj) = hFac_surfNm1W(i,j,bi,bj)
recip_hFacW(i,j,ks,bi,bj)= 1. _d 0 / hFac_surfNm1W(i,j,bi,bj)
ENDIF
ENDDO
ENDDO
DO j=2-Oly,sNy+Oly
DO i=1-Olx,sNx+Olx
ks = kSurfS(i,j,bi,bj)
IF (ks.LE.Nr) THEN
hFacS(i,j,ks,bi,bj) = hFac_surfNm1S(i,j,bi,bj)
recip_hFacS(i,j,ks,bi,bj)= 1. _d 0 / hFac_surfNm1S(i,j,bi,bj)
ENDIF
ENDDO
ENDDO
ELSE
DO k=1,Nr
DO j=1-Oly,sNy+Oly
DO i=1-Olx,sNx+Olx
hFacC(i,j,k,bi,bj)=h0FacC(i,j,k,bi,bj)
IF (h0FacC(i,j,k,bi,bj) .NE. 0. ) THEN
recip_hFacC(i,j,k,bi,bj) = 1. _d 0 / h0FacC(i,j,k,bi,bj)
ELSE
recip_hFacC(i,j,k,bi,bj) = 0.
ENDIF
ENDDO
ENDDO
ENDDO
ENDIF
C- end bi,bj loop
ENDDO
ENDDO
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
#endif /* NONLIN_FRSURF */
RETURN
END