MODULE sao_data !! ================================================================= !! *** MODULE sao_data *** !! ================================================================= USE par_kind, ONLY: lc USE lib_mpp ! distributed memory computing IMPLICIT NONE !! Public data INTEGER, PARAMETER :: MaxNumFiles = 1000 !! Stand Alone Observation operator settings CHARACTER(len=lc) :: & & sao_files(MaxNumFiles) !: model files INTEGER :: & & n_files, & !: number of files & nn_sao_idx(MaxNumFiles), & !: time_counter indices & nn_sao_freq !: read frequency in time steps CONTAINS SUBROUTINE sao_data_init() !!---------------------------------------------------------------------- !! *** SUBROUTINE sao_data_init *** !! !! ** Purpose : To read namelists and initialise offline_oper run. !! !!---------------------------------------------------------------------- USE in_out_manager INTEGER :: & & jf !: file dummy loop index LOGICAL :: lmask(MaxNumFiles) !: Logical mask used for counting INTEGER :: ios ! Standard offline obs_oper information NAMELIST/namsao/sao_files, nn_sao_idx, nn_sao_freq ! Standard offline obs_oper initialisation n_files = 0 !: number of files to cycle through sao_files(:) = '' !: list of files to read in nn_sao_idx(:) = 0 !: list of indices inside each file nn_sao_freq = -1 !: input frequency in time steps ! Standard offline obs_oper settings REWIND( numnam_ref ) ! Namelist namctl in reference namelist : Control prints & Benchmark READ ( numnam_ref, namsao, IOSTAT = ios, ERR = 901 ) 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsao in reference namelist', .TRUE. ) REWIND( numnam_cfg ) ! Namelist namctl in confguration namelist : Control prints & Benchmark READ ( numnam_cfg, namsao, IOSTAT = ios, ERR = 902 ) 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsao in configuration namelist', .TRUE. ) ! count input files lmask(:) = .FALSE. WHERE (sao_files(:) /= '') lmask(:) = .TRUE. n_files = COUNT(lmask) !! Initialise sub obs window frequency IF (nn_sao_freq == -1) THEN !! Run length nn_sao_freq = nitend - nit000 + 1 ENDIF !! Print summary of settings IF(lwp) THEN WRITE(numout,*) WRITE(numout,*) 'offline obs_oper : Initialization' WRITE(numout,*) '~~~~~~~~~~~~~~~~~' WRITE(numout,*) ' Namelist namsao : set stand alone obs_oper parameters' DO jf = 1, n_files WRITE(numout,'(1X,2A)') ' Input forecast file name forecastfile = ', & TRIM(sao_files(jf)) WRITE(numout,*) ' Input forecast file index forecastindex = ', & nn_sao_idx(jf) END DO END IF END SUBROUTINE sao_data_init END MODULE sao_data