C $Header: /home/ubuntu/mnt/e9_copy/MITgcm_contrib/sannino/OASIS_3.0_Coupler/pkg/oasis_init.F,v 1.1 2006/07/20 21:08:16 sannino Exp $ C $Name: $ cgm( #include "CPP_EEOPTIONS.h" cgm) #include "OASIS_OPTIONS.h" C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP 0 C !ROUTINE: OASIS_INIT C !INTERFACE: c SUBROUTINE OASIS_INIT( myThid,ciccio ) SUBROUTINE OASIS_INIT (MPI_COMM_OASIS) C !DESCRIPTION: C Routine to initialize OASIS parameters and variables. C !USES: USE mod_kinds_model USE mod_prism_proto c USE mod_prism_def_partition_proto c USE mod_prism_put_proto c USE mod_prism_get_proto c USE mod_prism_grids_writing IMPLICIT NONE cgm) #include "SIZE.h" #include "EEPARAMS.h" #include "EESUPPORT.h" #include "PARAMS.h" #include "GRID.h" cgm( qui vanno inseriuti anche se il pkg non è ancora attivato...piccola porcata #include "OASIS.h" #include "OASIS_PARAMS.h" cgm) C !INPUT PARAMETERS: INTEGER myThid CEOP C !LOCAL VARIABLES: #ifdef ALLOW_OASIS INTEGER :: io_size, ii, il_real, il_bufsizebyt INTEGER :: integer_byte_size, integer_io_size,il_bufsize INTEGER :: MPI_COMM_OASIS REAL(kind=ip_realwp_p), DIMENSION(Nx,Ny) :: rla_array REAL(kind=ip_realwp_p), DIMENSION(:), ALLOCATABLE :: rla_bufsend c-------- define model name ------- cp_modnam='mitgcm' ! Component model name c--------------------------- ! ! 1- PSMILe initialization ! CALL prism_init_comp_proto (il_comp_id, cp_modnam, ierror) ! ! Let's suppose the model attaches to a MPI buffer for its own use ! ! ! Sophisticated way to determine buffer size needed (without "kind") ! ! Here one message containing rla_array integer_byte_size = BIT_SIZE(ii)/8 INQUIRE (iolength=io_size) ii integer_io_size = io_size INQUIRE (iolength=io_size) rla_array(1,1) il_real = io_size/integer_io_size*integer_byte_size il_bufsize = (Nx*Ny) + MPI_BSEND_OVERHEAD/il_real + 1 ALLOCATE (rla_bufsend(il_bufsize), stat = ierror) il_bufsizebyt = il_bufsize * il_real CALL MPI_Buffer_Attach(rla_bufsend, il_bufsizebyt, ierror) IF (ierror .NE. PRISM_Ok) THEN WRITE (*,*) ' mit : pb prism_init_comp_proto' CALL prism_abort_proto(il_comp_id, 'mit.F90','abort1') ELSE WRITE(*,*) 'mit : prism_init_comp_proto ok ' ENDIF ! ! 2- PSMILe attribution of local communicator. ! ! Either MPI_COMM_WORLD if MPI2 is used, ! Either a local communicator created by Oasis if MPI1 is used. ! CALL prism_get_localcomm_proto(il_commlocal, ierror) ! IF (ierror .NE. PRISM_Ok) THEN WRITE (*,*) ' mit : pb prism_init_comp_proto' CALL prism_abort_proto(il_comp_id, 'atm.F90','abort2') ELSE WRITE(*,*) 'mit : prism_init_comp_proto ok ' ENDIF MPI_COMM_OASIS = il_commlocal ! Set local communicator for mitgcm 999 CONTINUE #endif /* ALLOW_OASIS */ return end