model integration with swat -...

Post on 17-Jun-2020

13 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Model Integration with SWAT

A publish-subscribe type system

June 24, 2013

André Dozier and Olaf David

Detailed Assessment Model – daily and 1-5km resolution

SWAT Read Inputs

MODFLOW Solver

MODFLOW Read Inputs

MODFLOW Close

RT3D Read Inputs

RT3D Solver

RT3D Close

SWAT HRU calcs

SWAT Routing

SWAT Output

SWAT Close

Daily Loop

Optimization – yearly (or 2-5 year) and 30-50km resolution

WALL Solver

WALL Solver

Minimize Vulnerability and Cost

CGE Solver

SWAT Solver

IUWM BMPs

Few Iterations

Ensure Economic Demand = Cons. Use

Supply to WALL Demand to SWAT

Manually add model

detail

Pareto optimal curve of

management solutions

DayCent

Linkages

• Need to add two linking components

SWAT Model

Other Model

Linkages

• Need to add two linking components

SWAT Model

OMS Simulation

Other Model

My OMS Component

My Wrapper

Linkages

• Need to add two linking components

SWAT Model

OMS Simulation

Other Model

My OMS Component

My Wrapper

Linkages

• Need to add two linking components

SWAT Model

event

OMS Simulation

SWAT run

direction Other Model

run component

finished

My OMS Component

My Wrapper Special OMS Component - Event names - Event inputs - Event outputs - Communication via MPI

(use blocking sends)

Linkages

• Need to add two linking components

OMS Simulation

Other Model

My OMS Component Normal (or special if desired) OMS component - Inputs - Outputs - Execution subroutine

My Wrapper Special OMS Component - Event names - Event inputs - Event outputs - Communication via MPI

(use blocking sends)

Linkages

• Need to add two linking components

OMS Simulation

OMS Simulation

My OMS Component Normal (or special if desired) OMS component - Inputs - Outputs - Execution subroutine

My Wrapper Special OMS Component - Event names - Event inputs - Event outputs - Communication via MPI

(use blocking sends)

Linkages

• Need to add two linking components

Simulation specifications - location(s) or NULL - Native or managed?

“Events” in SWAT SWAT Start Read Inputs Year Loop Month Loop Daily Loop End End End

“Events” in SWAT SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End End End

“Events” in SWAT SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End End End

Array of function pointers

“Events” in SWAT SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End End End

mysub

othersub

Array of function pointers

To “subscribe”

subroutine mysub()

print *,“my sub”

end subroutine

subroutine othersub()

print *,“other sub”

end subroutine

“Events” in SWAT SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End End End

mysub

othersub

Array of function pointers

To “subscribe”

subroutine mysub()

print *,“my sub”

end subroutine

subroutine othersub()

print *,“other sub”

end subroutine

program subscriber()

use parm

implicit none

integer :: event_i

interface

subroutine mysub()

end subroutine

end interface

interface

subroutine othersub()

end subroutine

end interface

event_i = TopOfDailyLoop%subscribe(mysub)

event_i = TopOfDailyLoop%subscribe(othersub)

call swat_main()

end program

“Events” in SWAT SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End End End

mysub

othersub

Array of function pointers

subroutine mysub()

print *,“my sub”

end subroutine

subroutine othersub()

print *,“other sub”

end subroutine

Special OMS-SWAT Component SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End End call EndOfYear%fire() End

mpi_input

mpi_output

subroutine mpi_input()

use parm

! Variable initialization

! MPI inputs

call MPI_RECEIVE(buf, …)

! Variable dereferencing

end subroutine

subroutine mpi_output()

use parm

! Variable initialization

! MPI outputs

call MPI_SEND(buf, …)

! MPI wait until finished

call MPI_RECEIVE(buf, …)

! Variable dereferencing

end subroutine

Special OMS-SWAT Component SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End End call EndOfYear%fire() End

mpi_input

mpi_output

Waits until inputs are available from another OMS component

Sends output from SWAT to OMS with the option of waiting until the component has finished running

My OMS Component

My Wrapper

Linkages

• Need to add two linking components

SWAT Model

event

OMS Simulation

SWAT run

direction Other Model

run component

finished

One Possible Orientation SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End End call EndOfYear%fire() End

mpi_input

mpi_output

OMS Simulation

OMS Component(s)

OMS Component(s)

Another Possible Orientation SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End End call EndOfYear%fire() End

mpi_output

mpi_input

OMS Simulation

OMS Component(s)

Allows parallel implementation

Yet Another Possible Orientation SWAT Start Read Inputs Year Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End End call EndOfYear%fire() End

mpi_output

mpi_input

OMS Simulation

OMS Component(s)

mpi_input

mpi_output

Detailed Assessment Model – daily and 1-5km resolution

SWAT Read Inputs

MODFLOW Solver

MODFLOW Read Inputs

MODFLOW Close

RT3D Read Inputs

RT3D Solver

RT3D Close

SWAT HRU calcs

SWAT Routing

SWAT Output

SWAT Close

Daily Loop

Optimization – yearly (or 2-5 year) and 30-50km resolution

WALL Solver

WALL Solver

Minimize Vulnerability and Cost

CGE Solver

SWAT Solver

IUWM BMPs

Few Iterations

Ensure Economic Demand = Cons. Use

Supply to WALL Demand to SWAT

Manually add model

detail

Pareto optimal curve of

management solutions

DayCent

First test case

top related