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
201
202
203
MODULE obs_read_altbias
!!======================================================================
!! *** MODULE obs_readaltbias ***
!! Observation diagnostics: Read the bias for SLA data
!!======================================================================
!!----------------------------------------------------------------------
!! obs_rea_altbias : Driver for reading altimeter bias
!!----------------------------------------------------------------------
!! * Modules used
USE par_kind, ONLY : & ! Precision variables
& wp, &
& dp, &
& sp
USE par_oce, ONLY : & ! Domain parameters
& jpi, &
& jpj
USE in_out_manager, ONLY : & ! I/O manager
& lwp, &
& numout
USE obs_surf_def ! Surface observation definitions
USE dom_oce, ONLY : & ! Domain variables
& tmask, &
& tmask_i, &
& e1t, &
& e2t, &
& gphit
USE oce, ONLY : & ! Model variables
& ssh
USE obs_inter_h2d
USE obs_utils ! Various observation tools
USE obs_inter_sup
IMPLICIT NONE
!! * Routine accessibility
PRIVATE
PUBLIC obs_rea_altbias ! Read the altimeter bias
!!----------------------------------------------------------------------
!! NEMO/OCE 4.0 , NEMO Consortium (2018)
!! $Id: obs_read_altbias.F90 15033 2021-06-21 10:24:45Z smasson $
!! Software governed by the CeCILL license (see ./LICENSE)
!!----------------------------------------------------------------------
CONTAINS
SUBROUTINE obs_rea_altbias( sladata, k2dint, bias_file )
!!---------------------------------------------------------------------
!!
!! *** ROUTINE obs_rea_altbias ***
!!
!! ** Purpose : Read from file the bias data
!!
!! ** Method :
!!
!! ** Action :
!!
!! References :
!!
!! History :
!! ! : 2008-02 (D. Lea) Initial version
!!----------------------------------------------------------------------
!! * Modules used
USE iom
!
!! * Arguments
TYPE(obs_surf), INTENT(INOUT) :: &
& sladata ! SLA data
INTEGER, INTENT(IN) :: k2dint
CHARACTER(LEN=128) :: bias_file
!! * Local declarations
CHARACTER(LEN=12), PARAMETER :: cpname = 'obs_rea_altbias'
INTEGER :: jobs ! Obs loop variable
INTEGER :: jpialtbias ! Number of grid point in latitude for the bias
INTEGER :: jpjaltbias ! Number of grid point in longitude for the bias
INTEGER :: iico ! Grid point indicies
INTEGER :: ijco
INTEGER :: i_nx_id ! Index to read the NetCDF file
INTEGER :: i_ny_id !
INTEGER :: i_file_id !
INTEGER :: i_var_id
REAL(wp), DIMENSION(1) :: &
& zext, &
& zobsmask
REAL(wp), DIMENSION(2,2,1) :: &
& zweig
REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: &
& zmask, &
& zbias, &
& zglam, &
& zgphi
REAL(wp), DIMENSION(jpi,jpj) :: z_altbias
REAL(wp) :: zlam
REAL(wp) :: zphi
INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: &
& igrdi, &
& igrdj
INTEGER :: numaltbias
IF(lwp)WRITE(numout,*)
IF(lwp)WRITE(numout,*) ' obs_rea_altbias : '
IF(lwp)WRITE(numout,*) ' ------------- '
IF(lwp)WRITE(numout,*) ' Read altimeter bias'
! Open the file
z_altbias(:,:)=0.0_wp
numaltbias=0
IF(lwp)WRITE(numout,*) 'Opening ',bias_file
CALL iom_open( bias_file, numaltbias, ldstop=.FALSE. )
IF (numaltbias .GT. 0) THEN
! Get the Alt bias data
CALL iom_get( numaltbias, jpdom_global, 'altbias', z_altbias(:,:) )
! Close the file
CALL iom_close(numaltbias)
ELSE
IF(lwp)WRITE(numout,*) 'no file found'
ENDIF
! Intepolate the bias already on the model grid at the observation point
ALLOCATE( &
& igrdi(2,2,sladata%nsurf), &
& igrdj(2,2,sladata%nsurf), &
& zglam(2,2,sladata%nsurf), &
& zgphi(2,2,sladata%nsurf), &
& zmask(2,2,sladata%nsurf), &
& zbias(2,2,sladata%nsurf) &
& )
DO jobs = 1, sladata%nsurf
igrdi(1,1,jobs) = sladata%mi(jobs)-1
igrdj(1,1,jobs) = sladata%mj(jobs)-1
igrdi(1,2,jobs) = sladata%mi(jobs)-1
igrdj(1,2,jobs) = sladata%mj(jobs)
igrdi(2,1,jobs) = sladata%mi(jobs)
igrdj(2,1,jobs) = sladata%mj(jobs)-1
igrdi(2,2,jobs) = sladata%mi(jobs)
igrdj(2,2,jobs) = sladata%mj(jobs)
END DO
CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, &
& igrdi, igrdj, glamt, zglam )
CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, &
& igrdi, igrdj, gphit, zgphi )
CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, &
& igrdi, igrdj, tmask(:,:,1), zmask )
CALL obs_int_comm_2d( 2, 2, sladata%nsurf, jpi, jpj, &
& igrdi, igrdj, z_altbias, zbias )
DO jobs = 1, sladata%nsurf
zlam = sladata%rlam(jobs)
zphi = sladata%rphi(jobs)
iico = sladata%mi(jobs)
ijco = sladata%mj(jobs)
CALL obs_int_h2d_init( 1, 1, k2dint, zlam, zphi, &
& zglam(:,:,jobs), zgphi(:,:,jobs), &
& zmask(:,:,jobs), zweig, zobsmask )
CALL obs_int_h2d( 1, 1, &
& zweig, zbias(:,:,jobs), zext )
! adjust mdt with bias field
sladata%rext(jobs,2) = sladata%rext(jobs,2) - zext(1)
END DO
DEALLOCATE( &
& igrdi, &
& igrdj, &
& zglam, &
& zgphi, &
& zmask, &
& zbias &
& )
END SUBROUTINE obs_rea_altbias
END MODULE obs_read_altbias