Newer
Older
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#if defined key_agrif
SUBROUTINE agrif_user()
!!----------------------------------------------------------------------
!! *** ROUTINE agrif_user ***
!!----------------------------------------------------------------------
END SUBROUTINE agrif_user
SUBROUTINE agrif_initworkspace()
!!----------------------------------------------------------------------
!! *** ROUTINE Agrif_InitWorkspace ***
!!----------------------------------------------------------------------
END SUBROUTINE agrif_initworkspace
SUBROUTINE Agrif_InitValues
!!----------------------------------------------------------------------
!! *** ROUTINE Agrif_InitValues ***
!!
!! ** Purpose :: Declaration of variables to be interpolated
!!----------------------------------------------------------------------
USE Agrif_Util
USE dom_oce
USE nemogcm
USE domain
!!
IMPLICIT NONE
! No temporal refinement
CALL Agrif_Set_coeffreft(1)
CALL nemo_init !* Initializations of each fine grid
CALL dom_nam
END SUBROUTINE Agrif_InitValues
SUBROUTINE Agrif_InitValues_cont
!!----------------------------------------------------------------------
!! *** ROUTINE Agrif_InitValues_cont ***
!!
!! ** Purpose :: Initialisation of variables to be interpolated
!!----------------------------------------------------------------------
USE dom_oce
USE lbclnk
!!
IMPLICIT NONE
!
INTEGER :: irafx, irafy
LOGICAL :: ln_perio, ldIperio, ldNFold, l_deg
!
irafx = agrif_irhox()
irafy = agrif_irhoy()
! IF(jperio /=1 .AND. jperio/=4 .AND. jperio/=6 ) THEN
! nx = (nbcellsx)+2*nbghostcellsfine+2
! ny = (nbcellsy)+2*nbghostcellsfine+2
! nbghostcellsfine_tot_x= nbghostcellsfine_x +1
! nbghostcellsfine_tot_y= nbghostcellsfine_y +1
! ELSE
! nx = (nbcellsx)+2*nbghostcellsfine_x
! ny = (nbcellsy)+2*nbghostcellsfine+2
! nbghostcellsfine_tot_x= 1
! nbghostcellsfine_tot_y= nbghostcellsfine_y +1
! ENDIF
! ELSE
! nbghostcellsfine = 0
! nx = nbcellsx+irafx
! ny = nbcellsy+irafy
WRITE(*,*) ' '
WRITE(*,*)'Size of the High resolution grid: ',jpi,' x ',jpj
WRITE(*,*) ' '
ln_perio = .FALSE.
l_deg = .TRUE.
ldIperio = (jperio == 1 .OR. jperio == 4 .OR. jperio == 6 .OR. jperio == 7)
ldNFold = jperio >= 3 .AND. jperio <= 6
IF( ldIperio.OR.ldNFold ) ln_perio=.TRUE.
IF ( Agrif_Parent(jphgr_msh)==2 &
&.OR.Agrif_Parent(jphgr_msh)==3 &
&.OR.Agrif_Parent(jphgr_msh)==5 ) l_deg = .FALSE.
CALL agrif_init_lonlat()
IF ( l_deg ) THEN
WHERE (glamt < -180) glamt = glamt +360.
WHERE (glamt > +180) glamt = glamt -360.
WHERE (glamu < -180) glamu = glamu +360.
WHERE (glamu > +180) glamu = glamu -360.
WHERE (glamv < -180) glamv = glamv +360.
WHERE (glamv > +180) glamv = glamv -360.
WHERE (glamf < -180) glamf = glamf +360.
WHERE (glamf > +180) glamf = glamf -360.
ENDIF
CALL lbc_lnk( 'glamt', glamt, 'T', 1._wp)
CALL lbc_lnk( 'gphit', gphit, 'T', 1._wp)
CALL lbc_lnk( 'glamu', glamu, 'U', 1._wp)
CALL lbc_lnk( 'gphiu', gphiu, 'U', 1._wp)
CALL lbc_lnk( 'glamv', glamv, 'V', 1._wp)
CALL lbc_lnk( 'gphiv', gphiv, 'V', 1._wp)
CALL lbc_lnk( 'glamf', glamf, 'F', 1._wp)
CALL lbc_lnk( 'gphif', gphif, 'F', 1._wp)
! Correct South and North
IF ((.not.lk_south).AND.((nbondj == -1).OR.(nbondj == 2))) THEN
glamt(:,1+nn_hls) = glamt(:,2+nn_hls)
gphit(:,1+nn_hls) = gphit(:,2+nn_hls)
glamu(:,1+nn_hls) = glamu(:,2+nn_hls)
gphiu(:,1+nn_hls) = gphiu(:,2+nn_hls)
ENDIF
!South:
IF ((nbondj == -1).OR.(nbondj == 2)) THEN
gphif(:,nn_hls) = gphif(:,1+nn_hls)
glamf(:,nn_hls) = glamf(:,1+nn_hls)
ENDIF
IF ( .NOT.ldNFold ) THEN
IF ((.not.lk_north).AND.((nbondj == 1).OR.(nbondj == 2))) THEN
glamt(:,jpj-nn_hls) = glamt(:,jpj-nn_hls-1)
gphit(:,jpj-nn_hls) = gphit(:,jpj-nn_hls-1)
glamu(:,jpj-nn_hls) = glamu(:,jpj-nn_hls-1)
gphiu(:,jpj-nn_hls) = gphiu(:,jpj-nn_hls-1)
glamv(:,jpj-nn_hls) = glamv(:,jpj-nn_hls-1)
gphiv(:,jpj-nn_hls) = gphiv(:,jpj-nn_hls-1)
glamf(:,jpj-nn_hls) = glamf(:,jpj-nn_hls-1)
gphif(:,jpj-nn_hls) = gphif(:,jpj-nn_hls-1)
ENDIF
ENDIF
IF ((nbondj == 1).OR.(nbondj == 2)) THEN
glamf(:,jpj-nn_hls+1) = glamf(:,jpj-nn_hls)
gphif(:,jpj-nn_hls+1) = gphif(:,jpj-nn_hls)
ENDIF
! Correct West and East
IF( .NOT.ldIperio ) THEN
IF((nbondi == -1) .OR. (nbondi == 2) ) THEN
glamt(1+nn_hls,:) = glamt(2+nn_hls,:)
gphit(1+nn_hls,:) = gphit(2+nn_hls,:)
glamv(1+nn_hls,:) = glamv(2+nn_hls,:)
gphiv(1+nn_hls,:) = gphiv(2+nn_hls,:)
ENDIF
IF( (nbondi == 1) .OR. (nbondi == 2) ) THEN
glamt(jpi-nn_hls,:) = glamt(jpi-nn_hls-1,:)
gphit(jpi-nn_hls,:) = gphit(jpi-nn_hls-1,:)
glamu(jpi-nn_hls,:) = glamu(jpi-nn_hls-1,:)
gphiu(jpi-nn_hls,:) = gphiu(jpi-nn_hls-1,:)
glamv(jpi-nn_hls,:) = glamv(jpi-nn_hls-1,:)
gphiv(jpi-nn_hls,:) = gphiv(jpi-nn_hls-1,:)
glamf(jpi-nn_hls,:) = glamf(jpi-nn_hls-1,:)
gphif(jpi-nn_hls,:) = gphif(jpi-nn_hls-1,:)
ENDIF
ENDIF
IF((nbondi == -1) .OR. (nbondi == 2) ) THEN
gphif(nn_hls,:) = gphif(nn_hls+1,:)
glamf(nn_hls,:) = glamf(nn_hls+1,:)
ENDIF
IF( (nbondi == 1) .OR. (nbondi == 2) ) THEN
glamf(jpi-nn_hls+1,:) = glamf(jpi-nn_hls,:)
gphif(jpi-nn_hls+1,:) = gphif(jpi-nn_hls,:)
ENDIF
CALL agrif_init_scales()
! Fill ghost points in case of closed boundaries:
! Correct South and North
IF ((.NOT.lk_south).AND.((nbondj == -1).OR.(nbondj == 2))) THEN
e1t(:,1+nn_hls) = e1t(:,2+nn_hls)
e2t(:,1+nn_hls) = e2t(:,2+nn_hls)
e1u(:,1+nn_hls) = e1u(:,2+nn_hls)
e2u(:,1+nn_hls) = e2u(:,2+nn_hls)
ENDIF
IF ( .NOT.ldNFold ) THEN
IF((.NOT.lk_north).AND.((nbondj == 1) .OR. (nbondj == 2) )) THEN
e1t(:,jpj-nn_hls) = e1t(:,jpj-nn_hls-1)
e2t(:,jpj-nn_hls) = e2t(:,jpj-nn_hls-1)
e1u(:,jpj-nn_hls) = e1u(:,jpj-nn_hls-1)
e2u(:,jpj-nn_hls) = e2u(:,jpj-nn_hls-1)
e1v(:,jpj-nn_hls) = e1v(:,jpj-nn_hls-1)
e2v(:,jpj-nn_hls) = e2v(:,jpj-nn_hls-1)
e1f(:,jpj-nn_hls) = e1f(:,jpj-nn_hls-1)
e2f(:,jpj-nn_hls) = e2f(:,jpj-nn_hls-1)
ENDIF
ENDIF
! Correct West and East
IF( .NOT.ldIperio ) THEN
IF((.NOT.lk_west).AND.(nbondj == -1).OR.(nbondj == 2) ) THEN
e1t(1+nn_hls,:) = e1t(2+nn_hls,:)
e2t(1+nn_hls,:) = e2t(2+nn_hls,:)
e1v(1+nn_hls,:) = e1v(2+nn_hls,:)
e2v(1+nn_hls,:) = e2v(2+nn_hls,:)
ENDIF
IF((.NOT.lk_east).AND.(nbondj == 1) .OR. (nbondj == 2) ) THEN
e1t(jpi-nn_hls,:) = e1t(jpi-nn_hls-1,:)
e2t(jpi-nn_hls,:) = e2t(jpi-nn_hls-1,:)
e1u(jpi-nn_hls,:) = e1u(jpi-nn_hls-1,:)
Loading
Loading full blame...