Opened 5 years ago
Closed 5 years ago
#860 closed upgrade (Done)
VERY IMPORTANT: Point Sources Revisited
Reported by: | arango | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | Release ROMS/TOMS 3.9 |
Component: | Nonlinear | Version: | 3.9 |
Keywords: | Cc: |
Description
In ROMS, the river runoff forcing is modeled with point sources. There are two ways how is implemented as horizontal advection transport (LuvSrc) or volume vertical influx (LwSrc). These options are specified in roms.in:
! Logical switches (TRUE/FALSE) to activate horizontal momentum transport ! point Sources/Sinks (like river runoff transport) and mass point ! Sources/Sinks (like volume vertical influx), [1:Ngrids]. LuvSrc == T ! horizontal momentum transport LwSrc == F ! volume vertical influx
The volume vertical influx was not working correctly, and it was reformulated. In omega.F now we have:
! ! Apply mass point sources (volume vertical influx), if any. ! ! Overwrite W(Isrc,Jsrc,k) with the same divergence of Huon,Hvom as ! above but add in point source Qsrc(k) and reaccumulate the vertical ! sum to obtain the correct net Qbar given in user input - J. Levin ! (Jupiter Intelligence Inc.) and J. Wilkin ! IF (LwSrc(ng)) THEN DO is=1,Nsrc(ng) ii=SOURCES(ng)%Isrc(is) jj=SOURCES(ng)%Jsrc(is) IF (((IstrR.le.ii).and.(ii.le.IendR)).and. & & ((JstrR.le.jj).and.(jj.le.JendR)).and. & & (j.eq.jj)) THEN DO k=1,N(ng) W(ii,jj,k)=W(ii,jj,k-1)- & & (Huon(ii+1,jj,k)-Huon(ii,jj,k)+ & & Hvom(ii,jj+1,k)-Hvom(ii,jj,k))+ & & SOURCES(ng)%Qsrc(is,k) END DO END IF END DO END IF
Also, in step3d_t.F we have:
! !----------------------------------------------------------------------- ! Add tracer divergence due to cell-centered (LwSrc) point sources. !----------------------------------------------------------------------- ! ! When LTracerSrc is .true. the inflowing concentration is Tsrc. ! When LtracerSrc is .false. we add tracer mass to compensate for the ! added volume to keep the receiving cell concentration unchanged. ! J. Levin (Jupiter Intelligence Inc.) and J. Wilkin ! IF (LwSrc(ng)) THEN IF (.not.((Hadvection(itrc,ng)%MPDATA).and. & & (Vadvection(itrc,ng)%MPDATA))) THEN DO itrc=1,NT(ng) DO is=1,Nsrc(ng) Isrc=SOURCES(ng)%Isrc(is) Jsrc=SOURCES(ng)%Jsrc(is) IF (((Istr.le.Isrc).and.(Isrc.le.Iend+1)).and. & & ((Jstr.le.Jsrc).and.(Jsrc.le.Jend+1))) THEN DO k=1,N(ng) cff=dt(ng)*pm(i,j)*pn(i,j) # ifdef SPLINES_VDIFF cff=cff*oHz(Isrc,Jsrc,k) # endif IF (LtracerSrc(itrc,ng)) THEN cff3=SOURCES(ng)%Tsrc(is,k,itrc) ELSE cff3=t(Isrc,Jsrc,k,3,itrc) END IF t(Isrc,Jsrc,k,nnew,itrc)=t(Isrc,Jsrc,k,nnew,itrc)+ & & cff*SOURCES(ng)%Qsrc(is,k)* & & cff3 END DO END IF END DO END DO END IF END IF
Many thanks to John Wilkin and Julia Levin for redesigning and testing the LwSrc scheme. John tested the scheme extensively with all the tracer advection options. Now, both LuvSrc and LwSrc have exact volume conservation.
Both methods produce similar results. In the RIVERPLUME1 test case, we get the following results with the HSIMT scheme for temperature and salinity:
The tangent linear (TLM), representer (RPM), and adjoint versions (ADM) of the scheme were updated accordingly. Extra terms were added to the TLM, RPM, and ADM formulation to allow point-source sensitivity studies and to be part of the 4D-Var control vector for analysis and forecast impacts.
Also, the tl_step3d_t.F, rp_step3d_t.F, and ad_step3d_t.F were cleaned by removing the unsupported code for MPDATA advection of tracer.