Model Integration with SWAT
description
Transcript of Model Integration with SWAT
Model Integration with SWAT
A publish-subscribe type systemJune 24, 2013
André Dozier and Olaf David
Detailed Assessment Model – daily and 1-5km resolution
SWATRead Inputs
MODFLOWSolver
MODFLOWRead Inputs
MODFLOWClose
RT3DRead Inputs
RT3DSolver
RT3DClose
SWATHRU calcs
SWATRouting
SWATOutput
SWATClose
DailyLoop
Optimization – yearly (or 2-5 year) and 30-50km resolution
WALLSolver
WALLSolver
Minimize Vulnerability and Cost
CGESolver
SWATSolver
IUWMBMPs
Few Iterations
Ensure Economic Demand = Cons. Use
Supply to WALLDemand to SWAT
Manuallyadd model
detail
Pareto optimalcurve of
managementsolutions
DayCent
Linkages
• Need to add two linking components
SWAT ModelOther Model
Linkages
• Need to add two linking components
SWAT Model
OMS Simulation
Other Model
My OMS ComponentMy Wrapper
Linkages
• Need to add two linking components
SWAT Model
OMS Simulation
Other Model
My OMS ComponentMy Wrapper
Linkages
• Need to add two linking components
SWAT Model
event
publish
OMS Simulation
subscribe
SWATrun
directionOther Model
runcomponent
finishedinform SWAT
My OMS ComponentMy 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 ComponentNormal (or special if desired) OMS component- Inputs- Outputs- Execution subroutine
My WrapperSpecial 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 ComponentNormal (or special if desired) OMS component- Inputs- Outputs- Execution subroutine
My WrapperSpecial 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 SWATSWAT
StartRead InputsYear Loop Month Loop Daily Loop End EndEnd
“Events” in SWATSWAT
StartRead InputsYear Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End EndEnd
“Events” in SWATSWAT
StartRead InputsYear Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End EndEnd
Array of function pointers
“Events” in SWATSWAT
StartRead InputsYear Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End EndEnd
mysub
othersub
Array of function pointers
To “subscribe”
subroutine mysub() print *,“my sub”end subroutine
subroutine othersub() print *,“other sub”end subroutine
“Events” in SWATSWAT
StartRead InputsYear Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End EndEnd
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 SWATSWAT
StartRead InputsYear Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End EndEnd
mysub
othersub
Array of function pointers
subroutine mysub() print *,“my sub”end subroutine
subroutine othersub() print *,“other sub”end subroutine
Special OMS-SWAT ComponentSWAT
StartRead InputsYear 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 ComponentSWAT
StartRead InputsYear Loop Month Loop Daily Loop call TopOfDailyLoop%fire() End End call EndOfYear%fire()End
mpi_input
mpi_output
Waits until inputs are available from anotherOMS component
Sends output fromSWAT to OMS with the option of waiting untilthe component has finished running
My OMS ComponentMy Wrapper
Linkages
• Need to add two linking components
SWAT Model
event
publish
OMS Simulation
subscribe
SWATrun
directionOther Model
runcomponent
finishedinform SWAT
One Possible OrientationSWAT
StartRead InputsYear 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 OrientationSWAT
StartRead InputsYear 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 OrientationSWAT
StartRead InputsYear 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
SWATRead Inputs
MODFLOWSolver
MODFLOWRead Inputs
MODFLOWClose
RT3DRead Inputs
RT3DSolver
RT3DClose
SWATHRU calcs
SWATRouting
SWATOutput
SWATClose
DailyLoop
Optimization – yearly (or 2-5 year) and 30-50km resolution
WALLSolver
WALLSolver
Minimize Vulnerability and Cost
CGESolver
SWATSolver
IUWMBMPs
Few Iterations
Ensure Economic Demand = Cons. Use
Supply to WALLDemand to SWAT
Manuallyadd model
detail
Pareto optimalcurve of
managementsolutions
DayCent
First test case