-
Notifications
You must be signed in to change notification settings - Fork 237
/
atm_store_aim_wndstr.F
140 lines (129 loc) · 4.17 KB
/
atm_store_aim_wndstr.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
#include "ATM_CPL_OPTIONS.h"
#ifdef ALLOW_AIM
# include "AIM_OPTIONS.h"
#endif
CBOP
C !ROUTINE: ATM_STORE_AIM_WNDSTR
C !INTERFACE:
SUBROUTINE ATM_STORE_AIM_WNDSTR(
I bi, bj,
I myTime, myIter, myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | SUBROUTINE ATM_STORE_AIM_WNDSTR
C | o Routine for saving AIM surface wind-stress fields
C | for export to coupling layer.
C *==========================================================*
C | This version interfaces to the AIM package.
C *==========================================================*
C !USES:
IMPLICIT NONE
C == Global variables ==
#ifdef ALLOW_AIM
# include "AIM_SIZE.h"
#else
# include "SIZE.h"
#endif
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "CPL_PARAMS.h"
#include "GRID.h"
#include "DYNVARS.h"
#ifdef ALLOW_AIM
# include "AIM2DYN.h"
c #include "AIM_FFIELDS.h"
#endif
#ifdef ALLOW_THSICE
# include "THSICE_PARAMS.h"
# include "THSICE_VARS.h"
#endif
C == Global variables for coupling interface ==
#include "ATMCPL.h"
C !INPUT/OUTPUT PARAMETERS:
C bi, bj :: Tile indices
C myTime :: Current time in simulation (s)
C myIter :: Current iteration number
C myThid :: My Thread Id. number
INTEGER bi, bj
_RL myTime
INTEGER myIter
INTEGER myThid
CEOP
#ifdef ALLOW_AIM
C !LOCAL VARIABLES:
C i, j :: Loop counters
C ks :: surface level index
INTEGER i, j, ks
_RL cplTimeFraction
_RL uStr_tmp, vStr_tmp
C o Accumulate momentum surface flux that will be exported to the
C coupling layer. Momentum flux is in N/m^2 with same sign as the wind.
cplTimeFraction = 1. _d 0 / DFLOAT(cplSendFrq_iter)
ks = 1
tauXTime(bi,bj) = tauXTime(bi,bj) + cplTimeFraction
tauYTime(bi,bj) = tauYTime(bi,bj) + cplTimeFraction
#ifdef ALLOW_THSICE
IF ( useThSIce .AND. stressReduction.GT. 0. _d 0 ) THEN
C-- Reduce wind stress applied to ocean where sea-ice is present
DO j=1,sNy
DO i=1,sNx
c IF ( aim_landFr(i-1,j,bi,bj)*aim_landFr(i,j,bi,bj) .NE. 1. ) THEN
IF ( hFacW(i,j,ks,bi,bj) .NE. 0. ) THEN
uStr_tmp =
& ( aim_drag(i-1,j,bi,bj)
& *(1. _d 0 - iceMask(i-1,j,bi,bj)*stressReduction)
& + aim_drag( i ,j,bi,bj)
& *(1. _d 0 - iceMask( i ,j,bi,bj)*stressReduction)
& )* 0.5 _d 0 * uVel(i,j,ks,bi,bj)
tauX(i,j,bi,bj) = tauX(i,j,bi,bj)
& + uStr_tmp*cplTimeFraction
ENDIF
ENDDO
ENDDO
DO j=1,sNy
DO i=1,sNx
c IF ( aim_landFr(i,j-1,bi,bj)*aim_landFr(i,j,bi,bj) .NE. 1. ) THEN
IF ( hFacS(i,j,ks,bi,bj) .NE. 0. ) THEN
vStr_tmp =
& ( aim_drag(i,j-1,bi,bj)
& *(1. _d 0 - iceMask(i,j-1,bi,bj)*stressReduction)
& + aim_drag(i, j ,bi,bj)
& *(1. _d 0 - iceMask(i, j ,bi,bj)*stressReduction)
& )* 0.5 _d 0 * vVel(i,j,ks,bi,bj)
tauY(i,j,bi,bj) = tauY(i,j,bi,bj)
& + vStr_tmp*cplTimeFraction
ENDIF
ENDDO
ENDDO
ELSE
#else /*ALLOW_THSICE*/
IF (.TRUE.) THEN
#endif /*ALLOW_THSICE*/
DO j=1,sNy
DO i=1,sNx
c IF ( aim_landFr(i-1,j,bi,bj)*aim_landFr(i,j,bi,bj) .NE. 1. ) THEN
IF ( hFacW(i,j,ks,bi,bj) .NE. 0. ) THEN
uStr_tmp =
& ( aim_drag(i-1,j,bi,bj)+aim_drag(i,j,bi,bj) )
& * 0.5 _d 0 * uVel(i,j,ks,bi,bj)
tauX(i,j,bi,bj) = tauX(i,j,bi,bj)
& + uStr_tmp*cplTimeFraction
ENDIF
ENDDO
ENDDO
DO j=1,sNy
DO i=1,sNx
c IF ( aim_landFr(i,j-1,bi,bj)*aim_landFr(i,j,bi,bj) .NE. 1. ) THEN
IF ( hFacS(i,j,ks,bi,bj) .NE. 0. ) THEN
vStr_tmp =
& ( aim_drag(i,j-1,bi,bj)+aim_drag(i,j,bi,bj) )
& * 0.5 _d 0 * vVel(i,j,ks,bi,bj)
tauY(i,j,bi,bj) = tauY(i,j,bi,bj)
& + vStr_tmp*cplTimeFraction
ENDIF
ENDDO
ENDDO
ENDIF
#endif /* ALLOW_AIM */
RETURN
END