-
Notifications
You must be signed in to change notification settings - Fork 35
/
Copy pathcoords_n_const.F
238 lines (181 loc) · 7.07 KB
/
coords_n_const.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
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
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
!/===========================================================================/
! Copyright (c) 2007, The University of Massachusetts Dartmouth
! Produced at the School of Marine Science & Technology
! Marine Ecosystem Dynamics Modeling group
! All rights reserved.
!
! FVCOM has been developed by the joint UMASSD-WHOI research team. For
! details of authorship and attribution of credit please see the FVCOM
! technical manual or contact the MEDM group.
!
!
! This file is part of FVCOM. For details, see http://fvcom.smast.umassd.edu
! The full copyright notice is contained in the file COPYRIGHT located in the
! root directory of the FVCOM code. This original header must be maintained
! in all distributed versions.
!
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
! THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
! PURPOSE ARE DISCLAIMED.
!
!/---------------------------------------------------------------------------/
! CVS VERSION INFORMATION
! $Id$
! $Name$
! $Revision$
!/===========================================================================/
SUBROUTINE COORDS_N_CONST
USE MOD_INPUT
USE MOD_SETUP
IMPLICIT NONE
INTEGER STATUS, I
!===============================================================================!
! OPEN FILES
! UNLESS OTHERWISE SPECIFED THE ROUTINES CALLED HERE ARE IN mod_input.F
!===============================================================================!
SELECT CASE(STARTUP_TYPE)
!=================================================
! HOTSTART
CASE("hotstart")
!=================================================
if(DBG_SET(dbg_log)) then
WRITE(IPT,*)'! READING FILES FOR HOTSTART !'
WRITE(IPT,*)'! !'
end if
! ALLOCATE SPACE FOR THE LOCAL GRID DATA
ALLOCATE(Y_LCL(0:MT),stat=status)
IF (STATUS /=0 ) CALL FATAL_ERROR("COULD NOT ALLOCATE Y_LCL")
Y_LCL=0.0_SP
ALLOCATE(X_LCL(0:MT),stat=status)
IF (STATUS /=0 ) CALL FATAL_ERROR("COULD NOT ALLOCATE X_LCL")
X_LCL=0.0_SP
ALLOCATE(H_LCL(0:MT),stat=status)
IF (STATUS /=0 ) CALL FATAL_ERROR("COULD NOT ALLOCATE H_LCL")
H_LCL=0.0_SP
CALL LOAD_RESTART_COORDS(X_LCL,Y_LCL)
CALL COORDINATE_UNITS(X_LCL,Y_LCL)
CALL SETUP_CENTER_COORDS
# if defined (SPHERICAL)
IF(EQUATOR_BETA_PLANE)THEN
CALL N2E2D(Y_LCL,COR)
F_ALFA = 1.0_SP-0.8_SP*EXP(-(COR/2.2_SP)**2)
END IF
# endif
DEALLOCATE(X_LCL)
DEALLOCATE(Y_LCL)
CALL LOAD_RESTART_DEPTH(H_LCL)
CALL SETUP_DEPTH
DEALLOCATE(H_LCL) ! COULD BE LOADED DIRECTLY - MUST SET MAX/MIN
CALL LOAD_RESTART_CORIOLIS(COR)! LOAD DIRECTLY
!! ggao for equatoral min (4deg)
! IF(.NOT. EQUATOR_BETA_PLANE)THEN
! WHERE(COR < 1.e-5_SP .AND. COR > 0.0_SP) COR = 1.e-5_SP
! WHERE(COR > -1.e-5_SP .AND. COR < 0.0_SP) COR = -1.e-5_SP
! END IF
CALL SETUP_GRAVITY
CALL LOAD_RESTART_SPONGE(CC_SPONGE) ! LOAD DIRECTLY
STYPE = STYPE_RESTART
CALL LOAD_RESTART_SIGMA(Z,Z1) ! LOAD DIRECTLY TO ALL_VARS:Z,Z1
CALL SETUP_SIGMA_DERIVATIVES
CALL SETUP_OBCTYPES
CALL SETUP_HORIZONTAL_MIXING_COEFFICIENT
CALL SETUP_BOTTOM_ROUGHNESS
!=================================================
! CRASHSTART
CASE("crashrestart")
!=================================================
if(DBG_SET(dbg_log)) then
WRITE(IPT,*)'! READING FILES FOR CRASHRESTART !'
WRITE(IPT,*)'! !'
end if
! ALLOCATE SPACE FOR THE LOCAL GRID DATA
ALLOCATE(Y_LCL(0:MT),stat=status)
IF (STATUS /=0 ) CALL FATAL_ERROR("COULD NOT ALLOCATE Y_LCL")
Y_LCL=0.0_SP
ALLOCATE(X_LCL(0:MT),stat=status)
IF (STATUS /=0 ) CALL FATAL_ERROR("COULD NOT ALLOCATE X_LCL")
X_LCL=0.0_SP
ALLOCATE(H_LCL(0:MT),stat=status)
IF (STATUS /=0 ) CALL FATAL_ERROR("COULD NOT ALLOCATE H_LCL")
H_LCL=0.0_SP
CALL LOAD_RESTART_COORDS(X_LCL,Y_LCL)
CALL COORDINATE_UNITS(X_LCL,Y_LCL)
CALL SETUP_CENTER_COORDS
# if defined (SPHERICAL)
IF(EQUATOR_BETA_PLANE)THEN
CALL N2E2D(Y_LCL,COR)
F_ALFA = 1.0_SP-0.8_SP*EXP(-(COR/2.2_SP)**2)
END IF
# endif
DEALLOCATE(X_LCL)
DEALLOCATE(Y_LCL)
CALL LOAD_RESTART_DEPTH(H_LCL)
CALL SETUP_DEPTH
DEALLOCATE(H_LCL) ! COULD BE LOADED DIRECTLY - MUST SET MAX/MIN
CALL LOAD_RESTART_CORIOLIS(COR)
CALL SETUP_GRAVITY
CALL LOAD_RESTART_SPONGE(CC_SPONGE) ! LOAD DIRECTLY TO ALL_VARS:CC_SPONGE
STYPE = STYPE_RESTART
CALL LOAD_RESTART_SIGMA(Z,Z1) ! LOAD DIRECTLY TO ALL_VARS:Z,Z1
CALL SETUP_SIGMA_DERIVATIVES
CALL SETUP_OBCTYPES
CALL SETUP_HORIZONTAL_MIXING_COEFFICIENT
CALL SETUP_BOTTOM_ROUGHNESS
!=================================================
! COLDSTART
CASE("coldstart")
!=================================================
if(DBG_SET(dbg_log)) then
WRITE(IPT,*)'! READING FILES FOR COLDSTART !'
WRITE(IPT,*)'! !'
end if
IF(MSR) THEN
! ALLOCATE SPACE FOR THE GLOBAL GRID DATA
ALLOCATE(Y_GBL(0:MGL),stat=status)
IF (STATUS /=0 ) CALL FATAL_ERROR("COULD NOT ALLOCATE Y_GBL")
Y_GBL=0.0_SP
ALLOCATE(X_GBL(0:MGL),stat=status)
IF (STATUS /=0 ) CALL FATAL_ERROR("COULD NOT ALLOCATE X_GBL")
X_GBL=0.0_SP
END IF
! ALLOCATE SPACE FOR THE LOCAL GRID DATA
ALLOCATE(Y_LCL(0:MT),stat=status)
IF (STATUS /=0 ) CALL FATAL_ERROR("COULD NOT ALLOCATE Y_LCL")
Y_LCL=0.0_SP
ALLOCATE(X_LCL(0:MT),stat=status)
IF (STATUS /=0 ) CALL FATAL_ERROR("COULD NOT ALLOCATE X_LCL")
X_LCL=0.0_SP
ALLOCATE(H_LCL(0:MT),stat=status)
IF (STATUS /=0 ) CALL FATAL_ERROR("COULD NOT ALLOCATE H_LCL")
H_LCL=0.0_SP
ALLOCATE(C_LCL(0:MT),stat=status)
IF (STATUS /=0 ) CALL FATAL_ERROR("COULD NOT ALLOCATE C_LCL")
C_LCL=0.0_SP
CALL LOAD_COLDSTART_COORDS(X_GBL,Y_GBL,X_LCL,Y_LCL)
CALL COORDINATE_UNITS(X_LCL,Y_LCL)
CALL SETUP_CENTER_COORDS
DEALLOCATE(X_LCL)
DEALLOCATE(Y_LCL)
CALL LOAD_COLDSTART_DEPTH(X_GBL,Y_GBL,H_LCL)
CALL SETUP_DEPTH
DEALLOCATE(H_LCL)
CALL LOAD_COLDSTART_CORIOLIS(X_GBL,Y_GBL,C_LCL)
CALL SETUP_CORIOLIS
DEALLOCATE(C_LCL)
CALL SETUP_GRAVITY
! THESE VARIABLES ARE NOT ALLOCATED YET
CALL LOAD_COLDSTART_SPONGE(X_GBL,Y_GBL,NSPONGE,N_SPG,R_SPG,C_SPG,X_SPG,Y_SPG)
CALL SETUP_SPONGE
! CALL LOAD_COLDSTART_SIGMA
CALL SETUP_SIGMA
CALL SETUP_SIGMA_DERIVATIVES
IF(MSR) THEN
DEALLOCATE(X_GBL)
DEALLOCATE(Y_GBL)
END IF
CALL SETUP_OBCTYPES
CALL SETUP_HORIZONTAL_MIXING_COEFFICIENT
CALL SETUP_BOTTOM_ROUGHNESS
END SELECT
END SUBROUTINE COORDS_N_CONST