8
8
!
9
9
10
10
SUBROUTINE PROENVHALO (NINF , NSUP , &
11
- & WVPRPT , &
12
- & WVENVI , &
11
+ & WAVNUM , CGROUP , OMOSNH2KD , &
12
+ & DEPTH , DELLAM1 , COSPHM1 , UCUR , VCUR , &
13
13
& WAVNUM_EXT , CGROUP_EXT , OMOSNH2KD_EXT , &
14
14
& DELLAM1_EXT , COSPHM1_EXT , &
15
15
& DEPTH_EXT , U_EXT , V_EXT )
@@ -44,10 +44,6 @@ SUBROUTINE PROENVHALO (NINF, NSUP, &
44
44
45
45
INTEGER (KIND= JWIM), INTENT (IN ) :: NINF, NSUP ! HALO EXTEND NINF to NSUP+1
46
46
47
- TYPE (FREQUENCY), INTENT (IN ) :: WVPRPT
48
-
49
- TYPE (ENVIRONMENT), INTENT (IN ) :: WVENVI
50
-
51
47
REAL (KIND= JWRB), DIMENSION (NINF:NSUP+1 , NFRE_RED), INTENT (OUT ) :: WAVNUM_EXT ! WAVE NUMBER
52
48
REAL (KIND= JWRB), DIMENSION (NINF:NSUP+1 , NFRE_RED), INTENT (OUT ) :: CGROUP_EXT ! GROUP VELOCITY
53
49
REAL (KIND= JWRB), DIMENSION (NINF:NSUP+1 , NFRE_RED), INTENT (OUT ) :: OMOSNH2KD_EXT ! OMEGA / SINH(2KD)
@@ -57,6 +53,8 @@ SUBROUTINE PROENVHALO (NINF, NSUP, &
57
53
REAL (KIND= JWRB), DIMENSION (NINF:NSUP+1 ), INTENT (OUT ) :: U_EXT ! U-COMPONENT OF SURFACE CURRENT
58
54
REAL (KIND= JWRB), DIMENSION (NINF:NSUP+1 ), INTENT (OUT ) :: V_EXT ! V-COMPONENT OF SURFACE CURRENT
59
55
56
+ REAL (KIND= JWRB), DIMENSION (NPROMA_WAM, NFRE, NCHNK), INTENT (IN ) :: WAVNUM, CGROUP, OMOSNH2KD
57
+ REAL (KIND= JWRB), DIMENSION (NPROMA_WAM, NCHNK), INTENT (IN ) :: DEPTH, DELLAM1, COSPHM1, UCUR, VCUR
60
58
61
59
INTEGER (KIND= JWIM) :: IJ, M
62
60
INTEGER (KIND= JWIM) :: ICHNK, KIJS, KIJL, IJSB, IJLB
@@ -66,51 +64,85 @@ SUBROUTINE PROENVHALO (NINF, NSUP, &
66
64
! ----------------------------------------------------------------------
67
65
68
66
IF (LHOOK) CALL DR_HOOK(' PROENVHALO' ,0 ,ZHOOK_HANDLE)
67
+ ! $acc data present(WAVNUM,CGROUP,OMOSNH2KD,DELLAM1,COSPHM1,DEPTH, UCUR,VCUR,&
68
+ ! $acc WAVNUM_EXT,CGROUP_EXT,OMOSNH2KD_EXT,DELLAM1_EXT,COSPHM1_EXT,DEPTH_EXT,U_EXT,V_EXT)
69
69
70
70
! !! mapping chuncks to block ONLY for actual grid points !!!!
71
+ #ifndef _OPENACC
71
72
! $OMP PARALLEL DO SCHEDULE(STATIC) PRIVATE(ICHNK, KIJS, IJSB, KIJL, IJLB, M)
73
+ #endif /*_OPENACC*/
74
+ ! $acc kernels loop private(ICHNK, KIJS, IJSB, KIJL, IJLB)
72
75
DO ICHNK = 1 , NCHNK
73
76
KIJS = 1
74
77
IJSB = IJFROMCHNK(KIJS, ICHNK)
75
78
KIJL = KIJL4CHNK(ICHNK)
76
79
IJLB = IJFROMCHNK(KIJL, ICHNK)
77
80
78
- WAVNUM_EXT(IJSB:IJLB, 1 :NFRE_RED) = WVPRPT% WAVNUM(KIJS:KIJL, 1 :NFRE_RED,ICHNK)
79
- CGROUP_EXT(IJSB:IJLB, 1 :NFRE_RED) = WVPRPT% CGROUP(KIJS:KIJL, 1 :NFRE_RED,ICHNK)
80
- OMOSNH2KD_EXT(IJSB:IJLB, 1 :NFRE_RED) = WVPRPT% OMOSNH2KD(KIJS:KIJL, 1 :NFRE_RED,ICHNK)
81
-
82
- DELLAM1_EXT(IJSB:IJLB) = WVENVI% DELLAM1(KIJS:KIJL,ICHNK)
83
- COSPHM1_EXT(IJSB:IJLB) = WVENVI% COSPHM1(KIJS:KIJL,ICHNK)
84
- DEPTH_EXT(IJSB:IJLB) = WVENVI% DEPTH(KIJS:KIJL,ICHNK)
85
- U_EXT(IJSB:IJLB) = WVENVI% UCUR(KIJS:KIJL,ICHNK)
86
- V_EXT(IJSB:IJLB) = WVENVI% VCUR(KIJS:KIJL,ICHNK)
81
+ ! $acc loop
82
+ DO M = 1 , NFRE_RED
83
+ WAVNUM_EXT(IJSB:IJLB, M) = WAVNUM(KIJS:KIJL, M,ICHNK)
84
+ CGROUP_EXT(IJSB:IJLB, M) = CGROUP(KIJS:KIJL, M,ICHNK)
85
+ OMOSNH2KD_EXT(IJSB:IJLB, M) = OMOSNH2KD(KIJS:KIJL, M,ICHNK)
86
+ ENDDO
87
+
88
+ DELLAM1_EXT(IJSB:IJLB) = DELLAM1(KIJS:KIJL,ICHNK)
89
+ COSPHM1_EXT(IJSB:IJLB) = COSPHM1(KIJS:KIJL,ICHNK)
90
+ DEPTH_EXT(IJSB:IJLB) = DEPTH(KIJS:KIJL,ICHNK)
91
+ U_EXT(IJSB:IJLB) = UCUR(KIJS:KIJL,ICHNK)
92
+ V_EXT(IJSB:IJLB) = VCUR(KIJS:KIJL,ICHNK)
87
93
ENDDO
94
+ ! $acc end kernels
95
+ #ifndef _OPENACC
88
96
! $OMP END PARALLEL DO
97
+ #endif /*_OPENACC*/
89
98
99
+ ! $acc enter data copyin(WVPRPT_LAND)
100
+ ! $acc enter data copyin(WVPRPT_LAND%WAVNUM,WVPRPT_LAND%CGROUP,WVPRPT_LAND%OMOSNH2KD)
101
+ ! $acc data present(WVPRPT_LAND) copyin(BATHYMAX)
90
102
! ! should be combined into one single data exchange, when we start using this option.... !!!
91
103
CALL MPEXCHNG(WAVNUM_EXT, NFRE_RED, 1 , 1 )
104
+ ! $acc kernels
92
105
WAVNUM_EXT(NSUP+1 ,1 :NFRE_RED) = WVPRPT_LAND% WAVNUM(1 :NFRE_RED)
106
+ ! $acc end kernels
93
107
94
108
CALL MPEXCHNG(CGROUP_EXT, NFRE_RED, 1 , 1 )
109
+ ! $acc kernels
95
110
CGROUP_EXT(NSUP+1 ,1 :NFRE_RED) = WVPRPT_LAND% CGROUP(1 :NFRE_RED)
111
+ ! $acc end kernels
96
112
97
113
CALL MPEXCHNG(OMOSNH2KD_EXT, NFRE_RED, 1 , 1 )
114
+ ! $acc kernels
98
115
OMOSNH2KD_EXT(NSUP+1 ,1 :NFRE_RED) = WVPRPT_LAND% OMOSNH2KD(1 :NFRE_RED)
116
+ ! $acc end kernels
99
117
100
118
CALL MPEXCHNG(DELLAM1_EXT, 1 , 1 , 1 )
119
+ ! $acc kernels
101
120
DELLAM1_EXT(NSUP+1 ) = 0.0_JWRB
121
+ ! $acc end kernels
102
122
103
123
CALL MPEXCHNG(COSPHM1_EXT, 1 , 1 , 1 )
124
+ ! $acc kernels
104
125
COSPHM1_EXT(NSUP+1 ) = 0.0_JWRB
126
+ ! $acc end kernels
105
127
106
128
CALL MPEXCHNG(DEPTH_EXT, 1 , 1 , 1 )
129
+ ! $acc kernels
107
130
DEPTH_EXT(NSUP+1 ) = BATHYMAX
131
+ ! $acc end kernels
108
132
109
133
CALL MPEXCHNG(U_EXT, 1 , 1 , 1 )
134
+ ! $acc kernels
110
135
U_EXT(NSUP+1 ) = 0.0_JWRB
136
+ ! $acc end kernels
111
137
112
138
CALL MPEXCHNG(V_EXT, 1 , 1 , 1 )
139
+ ! $acc kernels
113
140
V_EXT(NSUP+1 ) = 0.0_JWRB
141
+ ! $acc end kernels
142
+ ! $acc end data
143
+ ! $acc exit data delete(WVPRPT_LAND%WAVNUM,WVPRPT_LAND%CGROUP,WVPRPT_LAND%OMOSNH2KD)
144
+ ! $acc exit data delete(WVPRPT_LAND)
145
+ ! $acc end data
114
146
115
147
IF (LHOOK) CALL DR_HOOK(' PROENVHALO' ,1 ,ZHOOK_HANDLE)
116
148
0 commit comments