MODULE off_oper !!---------------------------------------------------------------------- !! *** MODULE off_oper *** !! ** Purpose : Run NEMO observation operator in offline mode !!---------------------------------------------------------------------- !! NEMO modules USE diaobs USE nemogcm USE lib_mpp USE in_out_manager USE obs_fbm, ONLY: ln_cl4 !! Offline obs_oper modules USE off_data USE off_read CONTAINS SUBROUTINE off_oper_init !!---------------------------------------------------------------------- !! *** SUBROUTINE off_oper_init *** !! !! ** Purpose : To initialise the model as if it were running online. !! !!---------------------------------------------------------------------- IMPLICIT NONE !! Initialise NEMO CALL nemo_init !! Initialise Offline obs_oper data CALL off_data_init( ln_cl4 ) END SUBROUTINE off_oper_init SUBROUTINE off_obs_oper !!---------------------------------------------------------------------- !! *** SUBROUTINE off_obs_oper *** !! !! ** Purpose : To use NEMO components to interpolate model fields !! to observation space. !! !!---------------------------------------------------------------------- IMPLICIT NONE !! Initialise offline obs_oper CALL off_oper_init !! Loop over various model counterparts DO jimatch = 1, cl4_match_len IF (jimatch .GT. 1) THEN !! Initialise obs_oper CALL dia_obs_init END IF !! Interpolate to observation space CALL off_oper_interp !! Pipe to output files CALL dia_obs_wri !! Reset the obs_oper CALL dia_obs_dealloc END DO !! Safely stop MPI CALL off_oper_stop END SUBROUTINE off_obs_oper SUBROUTINE off_oper_interp !!---------------------------------------------------------------------- !! *** SUBROUTINE off_oper_interp *** !! !! ** Purpose : To interpolate the model as if it were running online. !! !! ** Method : 1. Populate model counterparts !! 2. Call dia_obs at appropriate time steps !!---------------------------------------------------------------------- IMPLICIT NONE INTEGER :: istp ! time step index !! Loop over entire run istp = nit000 nstop = 0 DO WHILE ( istp <= nitend .AND. nstop == 0 ) IF (jifile <= n_files + 1) THEN IF ( MOD(istp, nn_off_freq) == nit000 ) THEN !! Read next model counterpart CALL off_rea_dri(jifile) jifile = jifile + 1 ENDIF !! Interpolate single time step CALL dia_obs(istp) ENDIF !! Increment model step istp = istp + 1 END DO END SUBROUTINE off_oper_interp SUBROUTINE off_oper_stop !!---------------------------------------------------------------------- !! *** SUBROUTINE off_oper_stop *** !! !! ** Purpose : To finalise the model as if it were running online. !! !!---------------------------------------------------------------------- IMPLICIT NONE IF(lk_mpp) CALL mppstop ! end mpp communications END SUBROUTINE off_oper_stop END MODULE off_oper