123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ! Math and Computer Science Division, Argonne National Laboratory !
- !-----------------------------------------------------------------------
- ! CVS srcmodel.F90,v 1.8 2005-11-18 23:15:38 rloy Exp
- ! CVS MCT_2_8_0
- !BOP -------------------------------------------------------------------
- !
- ! !MODULE: srcmodel -- generic model for unit tester
- !
- ! !DESCRIPTION:
- ! init run and finalize methods for source model
- !
- module srcmodel
- !
- ! !USES:
- !
- ! Get the things needed from MCT by "Use,only" with renaming:
- !
- !---Domain Decomposition Descriptor DataType and associated methods
- use m_GlobalSegMap,only: GlobalSegMap
- use m_GlobalSegMap,only: GlobalSegMap_init => init
- use m_GlobalSegMap,only: GlobalSegMap_lsize => lsize
- use m_GlobalSegMap,only: GlobalSegMap_clean => clean
- !---Field Storage DataType and associated methods
- use m_AttrVect,only : AttrVect
- use m_AttrVect,only : AttrVect_init => init
- use m_AttrVect,only : AttrVect_lsize => lsize
- use m_AttrVect,only : AttrVect_clean => clean
- use m_AttrVect,only : AttrVect_copy => copy
- use m_AttrVect,only : AttrVect_zero => zero
- use m_AttrVect,only : AttrVect_indxR => indexRA
- use m_AttrVect,only : AttrVect_importRAttr => importRAttr
- use m_AttrVectComms,only : AttrVect_scatter => scatter
- ! Get things from MPEU
- use m_inpak90 ! Resource files
- use m_stdio ! I/O utils
- use m_ioutil
- ! Get utilities for this program.
- use mutils
- implicit none
- private
- ! except
-
- ! !PUBLIC MEMBER FUNCTIONS:
- public srcinit
- public srcrun
- public srcfin
- ! private module variables
- character(len=*), parameter :: modelname='srcmodel.F90'
- integer :: rank
- real, dimension(:), pointer :: avdata
- !EOP -------------------------------------------------------------------
- contains
- !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ! Math and Computer Science Division, Argonne National Laboratory !
- !BOP -------------------------------------------------------------------
- !
- ! !IROUTINE: srcinit - Source model initialization
- subroutine srcinit(GSMap,IMPORT,EXPORT,comm,compid)
- ! !INPUT PARAMETERS:
- type(GlobalSegMap),intent(inout) :: GSMap ! decomposition
- type(AttrVect),intent(inout) :: IMPORT,EXPORT ! state data
- integer,intent(in) :: comm ! MPI communicator
- integer,intent(in) :: compid ! component ID
- !
- !EOP ___________________________________________________________________
- ! local variables
- ! parameters for this model
- integer :: nxa ! number of points in x-direction
- integer :: nya ! number of points in y-direction
- integer :: i,j,k,mdev,fx,fy
- integer :: nprocs, root, ier,fileno
- ! GlobalSegMap variables
- integer,dimension(:),pointer :: lindex
- ! AttrVect variables
- integer :: avsize
- type(AttrVect) :: GlobalD ! Av to hold global data
- real,dimension(:),pointer :: rootdata
- character*2 :: ldecomp
- call MPI_COMM_RANK(comm,rank, ier)
- call MPI_COMM_SIZE(comm,nprocs,ier)
- if(rank==0) then
- write(6,*) modelname, ' init start'
- write(6,*) modelname,' MyID ', compid
- write(6,*) modelname,' Num procs ', nprocs
- endif
- ! Get configuration
- call i90_LoadF('src.rc',ier)
- call i90_label('nx:',ier)
- nxa=i90_gint(ier)
- call i90_label('ny:',ier)
- nya=i90_gint(ier)
- if(rank==0) write(6,*) modelname, ' x,y ', nxa,nya
- call i90_label('decomp:',ier)
- call i90_Gtoken(ldecomp, ier)
- if(rank==0) write(6,*) modelname, ' decomp ', ldecomp
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- ! Initialize a Global Segment Map
- call get_index(ldecomp,nprocs,rank,nxa,nya,lindex)
- call GlobalSegMap_init(GSMap,lindex,comm,compid,gsize=nxa*nya)
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- if(rank==0) write(6,*) modelname, ' GSMap ',GSMap%ngseg,GSMap%gsize
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- ! Initialize import and export Attribute vectors
- ! size is the number of grid points on this processor
- avsize = GlobalSegMap_lsize(GSMap,comm)
- if(rank==0) write(6,*) modelname, ' localsize ', avsize
- ! Initialize the IMPORT Av by scattering from a root Av
- ! with real data.
- ! Read in data from root and scatter to nodes
- if(rank==0) then
- call AttrVect_init(GlobalD,rList="field1:field2",lsize=nxa*nya)
- mdev=luavail()
- open(mdev, file="TS1.dat",status="old")
- read(mdev,*) fx,fy
- do i=1,nxa*nya
- read(mdev,*) GlobalD%rAttr(1,i)
- enddo
- write(6,*) modelname,'Global init ',GlobalD%rAttr(1,1),GlobalD%rAttr(1,8000)
- endif
- ! this scatter will create IMPORT if it hasn't already been initialized
- call AttrVect_scatter(GlobalD,IMPORT,GSMap,0,comm,ier)
- ! initialize EXPORT Av with two real attributes.
- call AttrVect_init(EXPORT,rList="field3:field4",lsize=avsize)
-
- call AttrVect_zero(EXPORT)
- if(rank==0) then
- write(6,*) modelname, rank,' IMPORT field1', IMPORT%rAttr(1,1)
- write(6,*) modelname, rank,' IMPORt field2', IMPORT%rAttr(2,1)
- write(6,*) modelname, rank,' EXPORT field3', EXPORT%rAttr(1,1)
- write(6,*) modelname, rank,' EXPORT field4', EXPORT%rAttr(2,1)
- endif
- ! allocate buffer for use in run method
- allocate(avdata(avsize),stat=ier)
- if(rank==0) write(6,*) modelname, ' init done'
- end subroutine srcinit
- !!! END OF INIT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- ! RUN PHASE
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ! Math and Computer Science Division, Argonne National Laboratory !
- !BOP -------------------------------------------------------------------
- !
- ! !IROUTINE: srcrun - Source model run method
- subroutine srcrun(IMPORT,EXPORT)
- ! !INPUT PARAMETERS:
- type(AttrVect),intent(inout) :: IMPORT,EXPORT ! Input and Output states
- !EOP -------------------------------------------------------------------
- ! local variables
- integer :: avsize,ier,i
-
- ! Nothing to do with IMPORT
- ! Fill EXPORT with data
- if(rank==0) write(6,*) modelname, ' run start'
- ! Use Av copy to copy input data from field1 in Imp to field3 in EXPORT
- call AttrVect_copy(IMPORT,EXPORT,rList='field1',TrList='field3')
- ! Use import to load data in second field
- avdata=30.0
- call AttrVect_importRAttr(EXPORT,"field4",avdata)
- if(rank==0) write(6,*) modelname, ' In field1', IMPORT%rAttr(1,1)
- if(rank==0) write(6,*) modelname, ' In field2', IMPORT%rAttr(2,1)
- if(rank==0) write(6,*) modelname, ' Out field3', EXPORT%rAttr(1,1)
- if(rank==0) write(6,*) modelname, ' Out field4', EXPORT%rAttr(2,1)
- if(rank==0) write(6,*) modelname, ' run done'
- end subroutine srcrun
- !!! END OF RUN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- ! FINALIZE PHASE
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ! Math and Computer Science Division, Argonne National Laboratory !
- !BOP -------------------------------------------------------------------
- !
- ! !IROUTINE: srcfin - Source model finalize method
- subroutine srcfin(IMPORT,EXPORT,GSMap)
- ! !INPUT PARAMETERS:
- type(AttrVect),intent(inout) :: IMPORT,EXPORT ! imp,exp states
- type(GlobalSegMap),intent(inout) :: GSMap
- !EOP -------------------------------------------------------------------
- ! clean up
- call AttrVect_clean(IMPORT)
- call AttrVect_clean(EXPORT)
- call GlobalSegMap_clean(GSMap)
- deallocate(avdata)
- if(rank==0) write(6,*) modelname,' fin done'
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- endsubroutine srcfin
- end module srcmodel
|