SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/init_io_surf_ascn.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE INIT_IO_SURF_ASC_n(HMASK,HACTION)
00003 !     ######################
00004 !
00005 !!****  *INIT_IO_SURF_ASC* Keep in memory the output files
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!
00011 !!**  IMPLICIT ARGUMENTS
00012 !!    ------------------
00013 !!      None 
00014 !!
00015 !!    REFERENCE
00016 !!    ---------
00017 !!
00018 !!    AUTHOR
00019 !!    ------
00020 !!      V. Masson   *Meteo France*
00021 !!
00022 !!    MODIFICATIONS
00023 !!    -------------
00024 !!
00025 !!      P. Le Moigne 04/2004: distinguish in and out file name
00026 !!      P. Le Moigne 04/2006: special HACTION='GTMSK' to initialize
00027 !!                            a mask different of 'FULL ' in order 
00028 !!                            to read dimensions only.
00029 !!      S. Faroux 06/2012 : implementations for MPI
00030 !
00031 !*       0.   DECLARATIONS
00032 !             ------------
00033 !
00034 USE MODD_SURFEX_MPI, ONLY : NRANK, NINDEX, NSIZE, NPIO
00035 !
00036 USE MODD_IO_SURF_ASC,ONLY: NUNIT,CFILEIN,CFILEOUT,NMASK,NLUOUT,NFULL,CMASK, &
00037                            LOPEN_READ
00038 !
00039 USE MODI_GET_LUOUT
00040 USE MODI_READ_SURF
00041 USE MODI_GET_DIM_FULL_n
00042 USE MODI_GET_SIZE_FULL_n
00043 USE MODI_GET_TYPE_DIM_n
00044 USE MODI_INIT_IO_SURF_MASK_n
00045 !
00046 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00047 USE PARKIND1  ,ONLY : JPRB
00048 !
00049 IMPLICIT NONE
00050 !
00051  CHARACTER(LEN=6),  INTENT(IN)  :: HMASK    
00052  CHARACTER(LEN=5),  INTENT(IN)  :: HACTION    
00053 !
00054 INTEGER                        :: ILU,IRET, IL
00055 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00056 !------------------------------------------------------------------------------
00057 IF (LHOOK) CALL DR_HOOK('INIT_IO_SURF_ASC_N',0,ZHOOK_HANDLE)
00058 !
00059  CALL GET_LUOUT('ASCII ',NLUOUT)
00060 !
00061 !$OMP BARRIER
00062 !
00063 IF (NRANK==NPIO) LOPEN_READ=.FALSE.
00064 !
00065 NUNIT=20
00066 !
00067 IF (HACTION=='GTMSK') THEN
00068   IF (NRANK==NPIO) THEN
00069 !$OMP SINGLE
00070     OPEN(UNIT=NUNIT,FILE=CFILEIN,FORM='FORMATTED')
00071 !$OMP END SINGLE
00072   ENDIF
00073   CMASK = HMASK
00074   IF (LHOOK) CALL DR_HOOK('INIT_IO_SURF_ASC_N',1,ZHOOK_HANDLE)
00075   RETURN
00076 ENDIF
00077 !
00078 IF (HACTION == 'READ ') THEN
00079   IF (NRANK==NPIO) THEN 
00080 !$OMP SINGLE          
00081     OPEN(UNIT=NUNIT,FILE=CFILEIN,FORM='FORMATTED')
00082 !$OMP END SINGLE     
00083     LOPEN_READ=.TRUE.
00084   ENDIF
00085   ! NFULL must be known even if HMASK/=FULL because it's no longer 
00086   ! updated in init_io_surf_maskn.
00087   CMASK = 'FULL ' 
00088   CALL READ_SURF('ASCII ','DIM_FULL',NFULL,IRET,HDIR='A')
00089 ELSE
00090   IF (NRANK==NPIO) THEN
00091 !$OMP SINGLE          
00092     OPEN(UNIT=NUNIT,FILE=CFILEOUT,FORM='FORMATTED')
00093 !$OMP END SINGLE     
00094   ENDIF
00095   ! NFULL must be known in every case. 
00096   CALL GET_DIM_FULL_n(NFULL)
00097 ENDIF
00098 !
00099 ! nindex is needed for call to get_size_full_n. In init_index_mpi, 
00100 ! it's not initialized for first readings.  
00101 IF (.NOT.ALLOCATED(NINDEX)) THEN
00102   ALLOCATE(NINDEX(NFULL))
00103   NINDEX(:) = 0
00104 ENDIF
00105 !
00106 !------------------------------------------------------------------------------
00107 !
00108 ! MASK is sized according to the mpi task running
00109  CALL GET_SIZE_FULL_n('ASCII ',NFULL,ILU)
00110 IF (ILU>NSIZE) NSIZE = ILU
00111 !
00112 IL = ILU
00113  CALL GET_TYPE_DIM_n(HMASK,IL)
00114  CALL INIT_IO_SURF_MASK_n(HMASK, IL, NLUOUT, ILU, NMASK)
00115 !
00116 !------------------------------------------------------------------------------
00117 CMASK = HMASK
00118 IF (LHOOK) CALL DR_HOOK('INIT_IO_SURF_ASC_N',1,ZHOOK_HANDLE)
00119 !------------------------------------------------------------------------------
00120 END SUBROUTINE INIT_IO_SURF_ASC_n