Welcome, Guest
Username: Password: Remember me

TOPIC: Continuous Oil spill

Continuous Oil spill 9 years 5 months ago #17171

  • dnayak
  • dnayak's Avatar
Hello all,

Suppose I know what quantity of oil was spilled, how can I decide how many drogues must be released?

Also, I was wondering if anyone has modified subroutine oilflot.f for the case of oil spill? In a continuous oil spill ( suppose the time step for release of drouges is 10s and total number of drouges are 200), at the first time step, if 20 drouges are released then should 40 drouges be simulated for the second time step ( 20 drouges for the current time step plus twenty released in the previous time step).

Thanks,
D. Nayak
The administrator has disabled public write access.

Continuous Oil spill 9 years 4 months ago #17491

  • dnayak
  • dnayak's Avatar
Hello all,

I wanted to share a modified subroutine oilflot.f for a continuous oil spill. It might people working with continuous oil spill. It currently takes quite a lot of time to simulate the oil spill. Does anyone have any ideas as to how this can be improved?

Thanks,
Divya

File Attachment:

File Name: Oilspill.f
File Size: 9 KB
The administrator has disabled public write access.

Continuous Oil spill 9 years 4 months ago #17494

  • shenh
  • shenh's Avatar
  • OFFLINE
  • Senior Boarder
  • Posts: 148
  • Thank you received: 37
For continuous release i believe you should change the way you are defining NUM_GLO. By initializing it to zero it will start from zero all the time this subroutine is called, and you will get duplicate oil Ids and that will cause problem. Eg you have Id 10 in the domain now and now you will reset this drogue with this file when NUM_GLO = 10 again.

The way to avoid it to define NUM_GLO as static (or with SAVE keyword), and comment NUM_GLO = 0. This will allow your NUM_GLO increase continuously without duplication.
The administrator has disabled public write access.

Continuous Oil spill 9 years 4 months ago #17497

  • shenh
  • shenh's Avatar
  • OFFLINE
  • Senior Boarder
  • Posts: 148
  • Thank you received: 37
Sorry i did not look at your file closely. Your definition of NUM_GLO is correct.

Are you sure you want to inject a single drogue every time step? That will result in a lot drogues. What i did was to drop every 5 minutes. That will result in much less drogues (you need to do some calculation first to get the total number of drogues and put it in your oilspill.txt). Dropping at an interval will eventually reduce your run time significantly because the model does not need to trace so many drogues every time step.
The administrator has disabled public write access.

Continuous Oil spill 9 years 4 months ago #17507

  • dnayak
  • dnayak's Avatar
So far I have only computed number of drogues in such a way that there are enough drogues released at each time step. Is there any specific relationship based on the volume of the oil spilled and number of drogues? Don't you have to mention number of drogues in the steering file?
The administrator has disabled public write access.

Continuous Oil spill 9 years 4 months ago #17510

  • shenh
  • shenh's Avatar
  • OFFLINE
  • Senior Boarder
  • Posts: 148
  • Thank you received: 37
My bad. You need to define the number of drogues with NUMBER OF DROGUES in steering file.

I tried different number of drogues but did not find very much difference in tracer concentration. Internally the model calculates the mass of each drogue by the VOLUME OF OIL SPILL, OIL DENSITY, and NUMBER OF DROGUES. With more drogues, each drogue will have less mass.

I did find with too many drogues, the simulation tends to be much slower, as mentioned the model tracks too many drogues every time step.
The administrator has disabled public write access.

Continuous Oil spill 9 years 4 months ago #17531

  • jvb
  • jvb's Avatar
From our experience of particle based transport you need as many drogues as the detail of the results you are after - bearing in mind the runtime issues. As mentioned elsewhere each drogue will represent a quantity of oil so will also be the 'minimum' result you can show.
For oil the main issue is always the lack of knowledge of the oil parameters and temporal variation in them, so i think you should plan for a variety of cases to look at sensitivity to these variables.

Good lick.
John
The administrator has disabled public write access.

Continuous Oil spill 9 years 4 months ago #17525

  • dnayak
  • dnayak's Avatar
I have tried to implement what you suggested that is to release the drogues at a specified interval. I have adopted an interval of 300s and modified the code by including:
IF((AT.GE.OS_START_TIME).AND.(AT.LE.OS_END_TIME)) THEN
IF((MOD(AT,INTERVAL).EQ.0)) THEN
There is no release of the drogues. What could be the problem?
The administrator has disabled public write access.

Continuous Oil spill 9 years 4 months ago #17532

  • shenh
  • shenh's Avatar
  • OFFLINE
  • Senior Boarder
  • Posts: 148
  • Thank you received: 37
I guess it is because AT is of type double and IF((MOD(AT,INTERVAL).EQ.0)) is never true.

You can convert AT to type integer or use LT instead. Using LT is fine for fixed time step but may not work for dynamic time step.
The administrator has disabled public write access.

Continuous Oil spill 9 years 4 months ago #17535

  • gourish
  • gourish's Avatar
Hi,

I have modified the code which can spill the drouge spill at regular specified intervals, it may even work for dynamic time step.
         IF(INIT) THEN
           OS_START_TIME = 2200 ! OIL SPILL START TIME IN SECONDS
           OS_END_TIME = 3200 ! OIL SPILL END TIME IN SECONDS
           TINTV = 300 ! SPILL INTERVAL
           TTRESH = TINTV
           NUM_GLO = 0
!           NUM_MAX = 10
           NUM_MAX = INT( SQRT( REAL( NFLOT_MAX/INT( (OS_END_TIME
     &      - OS_START_TIME)/DT + 1 ) ) ) )
           NUM_LOC = 0
           INIT = .FALSE.
         ENDIF

!
      IF( (AT.GE.OS_START_TIME) .AND. (AT.LE.OS_END_TIME)) THEN 
!         COORD_X=0.D0
!         COORD_Y=0.D0 
!         NUM_MAX=INT(SQRT(REAL(NFLOT_MAX)))
         ATCHECK = AT - OS_START_TIME
         IF(ATCHECK .GE. TTRESH) THEN
            TTRESH = TTRESH + TINTV ! INTERVAL INCREMENT

File Attachment:

File Name: Oilspill.f
File Size: 9 KB

I have not yet tested the code, but I feel that the changes will help.
However NUM_MAX will have to be recalculated appropriately, by considering TINTV (Spill Interval).
           NUM_MAX = INT( SQRT( REAL( NFLOT_MAX/INT( (OS_END_TIME
     &      - OS_START_TIME)/TINTV + 1 ) ) ) )

With Best Regards,
Gourish
The administrator has disabled public write access.
Moderators: pham

The open TELEMAC-MASCARET template for Joomla!2.5, the HTML 4 version.