Hi all,
I am assimilating near surface current data with I4DVAR capability of ROMS. I noticed that the rejection of my data is strongly dependent from the depth i put them:
i.e
-pure surface (obs_depth=0) i get 100% data rejected
-obs_depth=-7 i get almost 100% of data accepted
-obs_depth=-1 i get around 30% of data rejected
My data are not particularly littoral with minimum depth of few 100 meters and 35 vertical levels.
I understood more or less the 0 case, but why such a difference between 7m and 1m ?
Thanks
Xavier
depth of assimilated data
Re: depth of assimilated data
I guess it is zeta related and that obs_depth is absolute and not relative to zeta.
- jivica
- Posts: 172
- Joined: Mon May 05, 2003 2:41 pm
- Location: The University of Western Australia, Perth, Australia
- Contact:
Re: depth of assimilated data
ROMS is not black box model, and it is very well documented. In that sense you should dig into the source and, for example, have a look at the Utility/extract_obs.F
There you will find relevant part of the code:
And for example, if you have really huge range of tides and don't want ROMS to reject obs then simply change the part of code or compute zlev (model level fraction) of your obs and feed that into assimilation...
Good luck
Ivica
There you will find relevant part of the code:
Code: Select all
p2=REAL(i2-i1,r8)*(Xobs(iobs)-REAL(i1,r8))
q2=REAL(j2-j1,r8)*(Yobs(iobs)-REAL(j1,r8))
p1=1.0_r8-p2
q1=1.0_r8-q2
w11=p1*q1
w21=p2*q1
w22=p2*q2
w12=p1*q2
IF (Zobs(iobs).gt.0.0_r8) THEN
k1=MAX(1,INT(Zobs(iobs))) ! Positions in fractional
k2=MIN(INT(Zobs(iobs))+1,N(ng)) ! levels
r2=REAL(k2-k1,r8)*(Zobs(iobs)-REAL(k1,r8))
r1=1.0_r8-r2
ELSE
Ztop=Adepth(i1,j1,N(ng))
Zbot=Adepth(i1,j1,1 )
IF (Zobs(iobs).ge.Ztop) THEN
r1=0.0_r8 ! If shallower, ignore.
r2=0.0_r8
ObsScale(iobs)=0.0_r8
ELSE IF (Zbot.ge.Zobs(iobs)) THEN
r1=0.0_r8 ! If deeper, ignore.
r2=0.0_r8
ObsScale(iobs)=0.0_r8
ELSE
DO k=N(ng),2,-1 ! Otherwise, interpolate
Ztop=Adepth(i1,j1,k ) ! to fractional level
Zbot=Adepth(i1,j1,k-1)
IF ((Ztop.gt.Zobs(iobs)).and.(Zobs(iobs).ge.Zbot)) THEN
k1=k-1
k2=k
END IF
END DO
dz=Adepth(i1,j1,k2)-Adepth(i1,j1,k1)
r2=(Zobs(iobs)-Adepth(i1,j1,k1))/dz
r1=1.0_r8-r2
Zobs(iobs)=REAL(k1,r8)+r2 ! overwrite
END IF
END IF
And for example, if you have really huge range of tides and don't want ROMS to reject obs then simply change the part of code or compute zlev (model level fraction) of your obs and feed that into assimilation...
Good luck
Ivica