123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ! Math and Computer Science Division, Argonne National Laboratory !
- !-----------------------------------------------------------------------
- ! CVS master.F90,v 1.5 2009-02-23 23:22:47 jacob Exp
- ! CVS MCT_2_8_0
- !BOP -------------------------------------------------------------------
- !
- ! !PROGRAM: master -- driver for sequential coupled model example
- !
- ! !DESCRIPTION: Provide a simple example of using MCT to connect to
- ! components executing sequentially in a single executable.
- !
- program master
- !
- ! !USES:
- !
- use m_AttrVect,only : AttrVect
- use m_GlobalSegMap,only: GlobalSegMap
- use m_MCTWorld,only: MCTWorld_init => init
- use srcmodel
- use dstmodel
- use coupler
- implicit none
- include "mpif.h"
- !
- !EOP -------------------------------------------------------------------
- ! local variables
- character(len=*), parameter :: mastername='master.F90'
- integer :: ncomps = 3 ! Must know total number of
- ! components in coupled system
- integer,dimension(:),pointer :: comps ! array with component ids
- type(AttrVect) :: srcImp,srcExp ! import and export states for src and
- type(AttrVect) :: dstImp,dstExp ! destination models
- type(GlobalSegMap) :: srcGSMap ! decomposition descriptors for src and
- type(GlobalSegMap) :: dstGSMap ! desitnation models
- ! other variables
- integer :: comm1, comm2, rank, nprocs,compid, myID, ier,color
- integer :: anprocs,cnprocs
- !-----------------------------------------------------------------------
- ! The Main program.
- ! We are implementing a single-executable, sequential-execution system.
- !
- ! This main program initializes MCT and runs the whole model.
- ! Initialize MPI
- call MPI_INIT(ier)
- ! Get basic MPI information
- call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs,ier)
- call MPI_COMM_RANK(MPI_COMM_WORLD,rank,ier)
- ! Get communicators for each model
- call mpi_comm_dup(MPI_COMM_WORLD,comm1,ier)
- call mpi_comm_dup(MPI_COMM_WORLD,comm2,ier)
- ! Initialize MCT
- allocate(comps(ncomps),stat=ier)
- comps(1)=1
- comps(2)=2
- comps(3)=3
- call MCTWorld_init(ncomps,MPI_COMM_WORLD,comm1,myids=comps)
- ! Initialize the model
- call srcinit(srcGSMap,srcImp,srcExp,comm1,1)
- call dstinit(dstGSMap,dstImp,dstExp,comm2,2)
- call cplinit(srcGSMap,dstGSMap,comm1,3)
- ! Run the model
- ! source does something with srcImp and produces export
- call srcrun(srcImp,srcExp)
- ! map the source model's Export to the destination model's Import
- call cplrun(srcExp,dstImp)
- ! destination model does something with dstImp
- call dstrun(dstImp,dstExp)
- ! Finalize
- call srcfin(srcImp,srcExp,srcGSMap)
- call dstfin(dstImp,dstExp,dstGSMap)
- call cplfin
- call MPI_FINALIZE(ier)
- end program master
|