SURFEX v7.3
General documentation of Surfex
|
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