Hi,
I was trying to correct both initial condition and surface forcing, and I found something suspicious.
After all inner loops, it seems that the nonlinear model runs with corrected initial condition, but NOT with the corrected forcing.
Since the corrected forcing is stored in the FWDNAME file, I think the surface forcing should be taken
from FWDFILE.
That's maybe I used version 429?
Thank you.
Hajoon
Not using updated forcing
Not using updated forcing
Last edited by hjsong on Fri Jan 15, 2010 9:26 pm, edited 2 times in total.
- arango
- Site Admin
- Posts: 1367
- Joined: Wed Feb 26, 2003 4:41 pm
- Location: DMCS, Rutgers University
- Contact:
Re: Not using updated forcing
Nothing suspicious here, the code is correct The surface forcing adjustments are done in frc_adjust.F by adding the appropriate 4D-Var increment. For example, for wind stress we have:
So there is no need to modify the wind stress forcing. I hope that this makes sense Notice that we do the same in the tangent (tl_frc_adjust.F), representer (rp_frc_adjust.F), and adjoint (ad_frc_adjust.F) models.
Code: Select all
# ifdef ADJUST_WSTRESS
!
! Adjust surface momentum stress. Interpolate between surface forcing
! increments, if appropriate.
!
DO j=JstrR,JendR
DO i=Istr,IendR
sustr(i,j)=sustr(i,j)+ &
& fac1*tl_ustr(i,j,it1,Linp)+ &
& fac2*tl_ustr(i,j,it2,Linp)
END DO
END DO
DO j=Jstr,JendR
DO i=IstrR,IendR
svstr(i,j)=svstr(i,j)+ &
& fac1*tl_vstr(i,j,it1,Linp)+ &
& fac2*tl_vstr(i,j,it2,Linp)
END DO
END DO
# endif
Re: Not using updated forcing
Thank you for the reply, Hernan.
The code you posted looks right.
I thought that the updated forcing variables are written in the FWDNAME if I do this
, and the forcing files are not touched.
This is why I thought the FWDNAME should be read for the corrected surface forcing.
But if I look into the standard output file, surface forcing variables for the last nonlinear run are from the original forcing files, for example,, as daccs_wstr_roms.nc, daccs_swrad_roms.nc and daccs_flx_roms.nc are original forcing files, and these are not changed after the IS4DVAR run.
Do I misunderstand this??
Or if I want to run nonlinear model with data assimilated initial condition and the surface forcing so that it matches exactly same as the last nonlinear run in the assimilation, what should I do?
Thank you.
The code you posted looks right.
I thought that the updated forcing variables are written in the FWDNAME if I do this
Code: Select all
T Hout(idUsms) Write out surface U-momentum stress.
T Hout(idVsms) Write out surface V-momentum stress.
T Hout(idTsur) Write out surface net heat flux.
T Hout(idSrad) Write out shortwave radiation flux.
This is why I thought the FWDNAME should be read for the corrected surface forcing.
But if I look into the standard output file, surface forcing variables for the last nonlinear run are from the original forcing files, for example,
Code: Select all
GET_2DFLD - surface u-momentum stress, t = 12395 00:00:00
(Rec=0477, Index=1, File: daccs_wstr_roms.nc)
(Tmin= 12276.0000 Tmax= 12641.0000)
(Min = 4.26806373E-06 Max = 1.20590562E-04)
GET_2DFLD - surface v-momentum stress, t = 12395 00:00:00
(Rec=0477, Index=1, File: daccs_wstr_roms.nc)
(Tmin= 12276.0000 Tmax= 12641.0000)
(Min = -1.22506807E-04 Max = 1.70253751E-06)
GET_2DFLD - solar shortwave radiation flux, t = 12395 00:00:00
(Rec=0477, Index=1, File: daccs_swrad_roms.nc)
(Tmin= 12276.0000 Tmax= 12641.0000)
(Min = 5.97417832E-05 Max = 1.27914491E-04)
GET_2DFLD - surface net heat flux, t = 12395 00:00:00
(Rec=0477, Index=1, File: daccs_flx_roms.nc)
(Tmin= 12276.0000 Tmax= 12641.0000)
(Min = 2.57468991E-05 Max = 9.05268686E-05)
GET_2DFLD - surface net freswater flux, (E-P), t = 12395 00:00:00
(Rec=0477, Index=1, File: daccs_flx_roms.nc)
(Tmin= 12276.0000 Tmax= 12641.0000)
(Min = -1.09750804E-07 Max = 4.66777159E-08)
Do I misunderstand this??
Or if I want to run nonlinear model with data assimilated initial condition and the surface forcing so that it matches exactly same as the last nonlinear run in the assimilation, what should I do?
Thank you.
Re: Not using updated forcing
Dear experts,
It is not a major thing, but I found something suspicious in writing initial file when the surface forcing adjustment option is on.
If either 'ADJUST_WSTRESS' or 'ADJUST_STFLUX' is on, then the adjusted surface forcing fields are written in the initial file.
The code 'wrt_ini.F' does this, and it looks like this (from the line 558 to 564).
It writes 'ustr' instead of 'sustr' in the initial file.
The v-momentum stress (line 584) and the surface tracer fluxs (line 616) take 'vstr' and 'tflux' instead of 'svstr' and 'stflx', respectively.
Are there any specific reasons for this, or are they just typos?
Thank you.
Hajoon
It is not a major thing, but I found something suspicious in writing initial file when the surface forcing adjustment option is on.
If either 'ADJUST_WSTRESS' or 'ADJUST_STFLUX' is on, then the adjusted surface forcing fields are written in the initial file.
The code 'wrt_ini.F' does this, and it looks like this (from the line 558 to 564).
Code: Select all
status=nf_fwrite3d(ng, iNLM, ncINIid(ng), iniVid(idUsms,ng), &
& OutRec, gtype, &
& LBi, UBi, LBj, UBj, 1, Nfrec(ng), scale, &
# ifdef MASKING
& GRID(ng) % umask, &
# endif
& FORCES(ng) % ustr(:,:,:,Tindex))
It writes 'ustr' instead of 'sustr' in the initial file.
The v-momentum stress (line 584) and the surface tracer fluxs (line 616) take 'vstr' and 'tflux' instead of 'svstr' and 'stflx', respectively.
Are there any specific reasons for this, or are they just typos?
Thank you.
Hajoon