Skip to content

Commit 5488c3f

Browse files
committed
2 parents 41b81a3 + 3625469 commit 5488c3f

File tree

5 files changed

+151
-0
lines changed

5 files changed

+151
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
[![DOI](https://zenodo.org/badge/250098905.svg)](https://zenodo.org/badge/latestdoi/250098905)
2+
13
# ROMS-OIL
24
Oil plume model coupled with ROMS
35

ROMS/Modules/mod_clima.F

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,16 @@ MODULE mod_clima
144144
! real(r8), pointer :: Aclm(:,:,:)
145145
! real(r8), pointer :: AclmG(:,:,:,:)
146146
!#endif
147+
148+
#if defined OFFLINE && defined FLOAT_OIL
149+
real(r8), pointer :: Uwind(:,:)
150+
real(r8), pointer :: Vwind(:,:)
151+
# ifdef ANA_WINDS
152+
real(r8), pointer :: UwindG(:,:,:)
153+
real(r8), pointer :: VwindG(:,:,:)
154+
# endif
155+
#endif
156+
147157
#if defined AKTCLIMATOLOGY || defined AKXCLIMATOLOGY
148158
real(r8), pointer :: AKtclm(:,:,:)
149159
real(r8), pointer :: AKtclmG(:,:,:,:)
@@ -304,6 +314,15 @@ SUBROUTINE allocate_clima (ng, LBi, UBi, LBj, UBj)
304314
#endif
305315

306316
!Added by DJ ------------------------
317+
#if defined OFFLINE && defined FLOAT_OIL
318+
allocate ( CLIMA(ng) % Uwind(LBi:UBi,LBj:UBj) )
319+
allocate ( CLIMA(ng) % Vwind(LBi:UBi,LBj:UBj) )
320+
# ifdef ANA_WINDS
321+
allocate ( CLIMA(ng) % UwindG(LBi:UBi,LBj:UBj,2) )
322+
allocate ( CLIMA(ng) % VwindG(LBi:UBi,LBj:UBj,2) )
323+
# endif
324+
#endif
325+
307326
#if defined AKTCLIMATOLOGY || defined AKXCLIMATOLOGY
308327
allocate ( CLIMA(ng) % AKtclm(LBi:UBi,LBj:UBj,0:N(ng)) )
309328
#endif
@@ -610,6 +629,21 @@ SUBROUTINE initialize_clima (ng, tile)
610629
! END DO
611630
!#endif
612631

632+
#if defined OFFLINE && defined FLOAT_OIL
633+
DO j=Jmin,Jmax
634+
DO i=Imin,Imax
635+
CLIMA(ng) % Uwind(i,j) = IniVal
636+
CLIMA(ng) % Vwind(i,j) = IniVal
637+
#ifdef ANA_WINDS
638+
CLIMA(ng) % UwindG(i,j,1) = IniVal
639+
CLIMA(ng) % UwindG(i,j,2) = IniVal
640+
CLIMA(ng) % VwindG(i,j,1) = IniVal
641+
CLIMA(ng) % VwindG(i,j,2) = IniVal
642+
#endif
643+
END DO
644+
END DO
645+
#endif
646+
613647
#ifdef AKTCLIMATOLOGY
614648
DO j=Jmin,Jmax
615649
DO k=0,N(ng)

ROMS/Nonlinear/get_data.F

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1852,6 +1852,33 @@ SUBROUTINE get_data (ng)
18521852

18531853
! Added by DJ ------------------------------------
18541854

1855+
#if defined OFFLINE && defined FLOAT_OIL
1856+
!-----------------------------------------------------------------------
1857+
! Surface wind components (necessary to include weathering effects on
1858+
! oil transport)
1859+
!-----------------------------------------------------------------------
1860+
!
1861+
CALL get_2dfld (ng, iNLM, idUair, ncFRCid(idUair,ng), &
1862+
& nFfiles(ng), FRC(1,ng), update(1), &
1863+
& LBi, UBi, LBj, UBj, 2, 1, &
1864+
# ifdef MASKING
1865+
& GRID(ng) % rmask, &
1866+
# endif
1867+
& FORCES(ng) % UwindG)
1868+
IF (FoundError(exit_flag, NoError, __LINE__, &
1869+
& __FILE__)) RETURN
1870+
1871+
CALL get_2dfld (ng , iNLM, idVair, ncFRCid(idVair,ng), &
1872+
& nFfiles(ng), FRC(1,ng), update(1), &
1873+
& LBi, UBi, LBj, UBj, 2, 1, &
1874+
# ifdef MASKING
1875+
& GRID(ng) % rmask, &
1876+
# endif
1877+
& FORCES(ng) % VwindG)
1878+
IF (FoundError(exit_flag, NoError, __LINE__, &
1879+
& __FILE__)) RETURN
1880+
#endif
1881+
18551882
!# if !defined ANA_AKTCLIMA && defined AKTCLIMATOLOGY
18561883
! write(*,*) 'reading AKt in climatology file'
18571884
! CALL get_3dfld (ng, iNLM, idAclm, ncCLMid(idAclm,ng), &

ROMS/Nonlinear/set_data.F

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2337,6 +2337,73 @@ SUBROUTINE set_data_tile (ng, tile, &
23372337
# endif
23382338
# endif
23392339
2340+
2341+
# if defined OFFLINE && defined FLOAT_OIL
2342+
2343+
!-----------------------------------------------------------------------
2344+
! Set surface winds (m/s).
2345+
!-----------------------------------------------------------------------
2346+
!
2347+
# ifdef ANA_WINDS
2348+
CALL ana_winds (ng, tile, iNLM)
2349+
# else
2350+
CALL set_2dfld_tile (ng, tile, iNLM, idUair, &
2351+
& LBi, UBi, LBj, UBj, &
2352+
& FORCES(ng)%UwindG, &
2353+
& FORCES(ng)%Uwind, &
2354+
& update)
2355+
IF (FoundError(exit_flag, NoError, __LINE__, &
2356+
& __FILE__)) RETURN
2357+
2358+
CALL set_2dfld_tile (ng, tile, iNLM, idVair, &
2359+
& LBi, UBi, LBj, UBj, &
2360+
& FORCES(ng)%VwindG, &
2361+
& FORCES(ng)%Vwind, &
2362+
& update)
2363+
IF (FoundError(exit_flag, NoError, __LINE__, &
2364+
& __FILE__)) RETURN
2365+
2366+
# ifdef CURVGRID
2367+
!
2368+
! If input point surface winds or interpolated from coarse data, rotate
2369+
! to curvilinear grid.
2370+
!
2371+
IF (.not.Linfo(1,idUair,ng).or. &
2372+
& (Iinfo(5,idUair,ng).ne.Lm(ng)+2).or. &
2373+
& (Iinfo(6,idUair,ng).ne.Mm(ng)+2)) THEN
2374+
DO j=JstrR,JendR
2375+
DO i=IstrR,IendR
2376+
cff1=FORCES(ng)%Uwind(i,j)*GRID(ng)%CosAngler(i,j)+ &
2377+
& FORCES(ng)%Vwind(i,j)*GRID(ng)%SinAngler(i,j)
2378+
cff2=FORCES(ng)%Vwind(i,j)*GRID(ng)%CosAngler(i,j)- &
2379+
& FORCES(ng)%Uwind(i,j)*GRID(ng)%SinAngler(i,j)
2380+
FORCES(ng)%Uwind(i,j)=cff1
2381+
FORCES(ng)%Vwind(i,j)=cff2
2382+
END DO
2383+
END DO
2384+
2385+
IF (EWperiodic(ng).or.NSperiodic(ng)) THEN
2386+
CALL exchange_r2d_tile (ng, tile, &
2387+
& LBi, UBi, LBj, UBj, &
2388+
& FORCES(ng)%UWind)
2389+
CALL exchange_r2d_tile (ng, tile, &
2390+
& LBi, UBi, LBj, UBj, &
2391+
& FORCES(ng)%VWind)
2392+
END IF
2393+
2394+
# ifdef DISTRIBUTE
2395+
CALL mp_exchange2d (ng, tile, iNLM, 2, &
2396+
& LBi, UBi, LBj, UBj, &
2397+
& NghostPoints, &
2398+
& EWperiodic(ng), NSperiodic(ng), &
2399+
& FORCES(ng)%UWind, &
2400+
& FORCES(ng)%VWind)
2401+
# endif
2402+
END IF
2403+
# endif
2404+
# endif
2405+
# endif
2406+
23402407
# if defined SOLVE3D && defined OFFLINE
23412408
!
23422409
!-----------------------------------------------------------------------

ROMS/Nonlinear/vwalk_floats.F

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,18 @@ SUBROUTINE vwalk_floats_tile (ng, Lstr, Lend, &
121121
logical, intent(in) :: Predictor
122122
!
123123
# ifdef ASSUMED_SHAPE
124+
!MMMM added by Xu Chen
125+
126+
! logical, intent(in) :: bounded(:)
127+
128+
#if defined OFFLINE_FLOATS && defined FLOAT_VWALK
129+
logical, intent(inout) :: bounded(:)
130+
# else
124131
logical, intent(in) :: bounded(:)
132+
# endif
133+
134+
!WWWW added by Xu Chen
135+
125136
logical, intent(in) :: my_thread(Lstr:)
126137

127138
real(r8), intent(in) :: Tinfo(0:,:)
@@ -130,7 +141,17 @@ SUBROUTINE vwalk_floats_tile (ng, Lstr, Lend, &
130141
real(r8), intent(inout) :: nudg(Lstr:)
131142
real(r8), intent(inout) :: track(:,0:,:)
132143
# else
144+
145+
!MMMM added by Xu Chen
146+
! logical, intent(in) :: bounded(Nfloats(ng))
147+
148+
#if defined OFFLINE_FLOATS && defined FLOAT_VWALK
149+
logical, intent(inout) :: bounded(Nfloats(ng))
150+
# else
133151
logical, intent(in) :: bounded(Nfloats(ng))
152+
# endif
153+
!WWWW added by Xu Chen
154+
134155
logical, intent(in) :: my_thread(Lstr:Lend)
135156

136157
real(r8), intent(in) :: Tinfo(0:izrhs,Nfloats(ng))

0 commit comments

Comments
 (0)