7 hprogram,ki,pts_in,psst_in,psic_in,pitm,htest, &
8 olkeepextzone,od_maskext,plon_in,plat_in)
41 USE modd_assim, ONLY : nprintlev,laesst,lextrap_sea
44 USE yomhook
, ONLY : lhook,dr_hook
45 USE parkind1
, ONLY : jprb
49 USE modi_oi_hor_extrapol_surf
59 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
60 INTEGER,
INTENT(IN) :: ki
61 REAL,
DIMENSION(KI),
INTENT(IN) :: pts_in
62 REAL,
DIMENSION(KI),
INTENT(IN) :: psst_in
63 REAL,
DIMENSION(KI),
INTENT(IN) :: psic_in
64 REAL,
DIMENSION(KI),
INTENT(IN) :: pitm
65 CHARACTER(LEN=2),
INTENT(IN) :: htest
66 LOGICAL,
INTENT(IN) :: olkeepextzone
67 LOGICAL,
DIMENSION(KI),
INTENT(IN) :: od_maskext
68 REAL(KIND=JPRB),
DIMENSION (:),
INTENT(IN) :: plon_in
69 REAL(KIND=JPRB),
DIMENSION (:),
INTENT(IN) :: plat_in
75 REAL,
DIMENSION(KI) :: zalt
76 REAL,
DIMENSION(KI) :: zsst
77 REAL,
DIMENSION(KI) :: zsst0
78 REAL,
DIMENSION(KI) :: zsstinc
79 REAL,
DIMENSION(:),
ALLOCATABLE :: zsst01, zsst1, zlon1, zlat1, zalt1
80 REAL :: zfmax, zfmin, zfmean
81 LOGICAL,
DIMENSION(KI) :: ginterp_sst
82 LOGICAL,
DIMENSION(:),
ALLOCATABLE :: ginterp_sst1
83 INTEGER :: iresp, i, j, j1, is1
84 REAL(KIND=JPRB) :: zhook_handle
86 IF (lhook) CALL dr_hook(
'ASSIM_SEA_N',0,zhook_handle)
89 CALL
abor1_sfx(
'ASSIM_SEA_n: FATAL ERROR DURING ARGUMENT TRANSFER')
92 IF (nrank==npio)
WRITE(*,*)
'UPDATING SST FOR SCHEME: ',trim(u%CSEA)
93 IF (u%CSEA==
"NONE")
THEN
94 IF (lhook) CALL dr_hook(
'ASSIM_SEA_N',1,zhook_handle)
101 IF ( .NOT.laesst )
THEN
109 IF (pitm(i)<0.5 .AND. u%XSEA(u%NR_SEA(i))/=0. )
THEN
116 zfmean = sum(zsst)/float(ki)
117 WRITE(*,*)
' SST analysis from CANARI '
118 WRITE(*,
'(" ZSST - min, mean, max: ",3E13.4)') zfmin, zfmean, zfmax
121 ginterp_sst(:) = .false.
125 IF ( zsst(i)/=xundef )
THEN
127 ELSEIF ( lextrap_sea )
THEN
129 ginterp_sst(i) = .true.
136 IF ( lextrap_sea )
THEN
138 IF (olkeepextzone)
THEN
141 WHERE ( od_maskext(:) ) zsst0(:) = xundef
146 is1 = count(.NOT. od_maskext)
147 ALLOCATE (zsst1(is1), zsst01(is1), zlat1(is1), zlon1(is1), zalt1(is1), ginterp_sst1(is1))
152 IF (.NOT. od_maskext(j1))
THEN
153 zsst01(j) = zsst0(j1)
154 zlat1(j) = plat_in(j1)
155 zlon1(j) = plon_in(j1)
156 zalt1(j) = u%XZS (j1)
157 ginterp_sst1(j) = ginterp_sst(j1)
168 IF (.NOT. od_maskext(j1))
THEN
174 DEALLOCATE (zsst01, zsst1, zlat1, zlon1, zalt1, ginterp_sst1)
181 IF ( nprintlev > 2 )
THEN
183 IF (ginterp_sst(i))
THEN
184 print *,
'Sea surface temperature set to ',zsst(i),
'from nearest neighbour at I=',u%NR_SEA(i)
190 zsstinc(:) = zsst(:) - s%XSST(:)
191 IF (ki>0)
WRITE(*,*)
'Mean SST increments over SEA ',sum(zsstinc)/ki
196 IF (lhook) CALL dr_hook(
'ASSIM_SEA_N',1,zhook_handle)
subroutine abor1_sfx(YTEXT)
subroutine assim_sea_n(S, U, HPROGRAM, KI, PTS_IN, PSST_IN, PSIC_IN, PITM, HTEST, OLKEEPEXTZONE, OD_MASKEXT, PLON_IN, PLAT_IN)