Skip to content
Snippets Groups Projects
modeln.f90 83.7 KiB
Newer Older
  • Learn to ignore specific revisions
  •                 XLBXUM,XLBXVM,XLBXWM,                     &
                    XLBXTHM,XLBXRM,XLBXTKEM,XLBXSVM,          &
                    XLBYUM,XLBYVM,XLBYWM,                     &
    
                    XLBYTHM,XLBYRM,XLBYTKEM,XLBYSVM           )
    
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    XT_STEP_SWA = XT_STEP_SWA + ZTIME2 - ZTIME1 - XTIME_BU_PROCESS
    !
    !-------------------------------------------------------------------------------
    !
    !*       24.1    BALLOON and AIRCRAFT
    !               --------------------
    !
    ZTIME1 = ZTIME2
    !
    IF (LFLYER)                                                                   &
    
      CALL AIRCRAFT_BALLOON(XTSTEP,                                               &
    
                          TDTEXP, TDTMOD, TDTSEG, TDTCUR,                         &
                          XXHAT, XYHAT, XZZ, XMAP, XLONORI, XLATORI,              &
                          XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD,  &
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
                          XRHODREF,XCIT,PSEA=ZSEA(:,:))
    
    
    
    !-------------------------------------------------------------------------------
    !
    !*       24.2    STATION (observation diagnostic)
    !               --------------------------------
    !
    IF (LSTATION)                                                            &
    
                     TDTEXP, TDTMOD, TDTSEG, TDTCUR,                         &
                     XXHAT, XYHAT, XZZ,                                      &
                     XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST   )
    !
    !---------------------------------------------------------
    !
    !*       24.3    PROFILER (observation diagnostic)
    !               ---------------------------------
    !
    IF (LPROFILER)                                                           &
    
                      TDTEXP, TDTMOD, TDTSEG, TDTCUR,                        &
                      XXHAT, XYHAT, XZZ,XRHODREF,                            &
                      XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, &
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
                      XAER, XCLDFR, XCIT)
    
    !
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    XT_STEP_MISC = XT_STEP_MISC + ZTIME2 - ZTIME1
    !
    !-------------------------------------------------------------------------------
    !
    !*       24.4   deallocation of observation diagnostics
    !               ---------------------------------------
    !
    CALL END_DIAG_IN_RUN
    !
    !-------------------------------------------------------------------------------
    !
    !
    !*       25.    STORAGE OF BUDGET FIELDS
    !               ------------------------
    !
    ZTIME1 = ZTIME2
    !
    
    IF ( .NOT. LIO_NO_WRITE ) THEN
      IF (NBUMOD==IMI .AND. CBUTYPE/='NONE') THEN
        CALL ENDSTEP_BUDGET(TDIAFILE,KTCOUNT,TDTCUR,TDTMOD,XTSTEP,NSV)
      END IF
    
    END IF
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    XT_STEP_BUD = XT_STEP_BUD + ZTIME2 - ZTIME1 + XTIME_BU
    !
    !-------------------------------------------------------------------------------
    !
    !*       26.    FM FILE CLOSURE
    !               ---------------
    !
    IF (GCLOSE_OUT) THEN
      GCLOSE_OUT=.FALSE.
    
      CALL IO_FILE_CLOSE_ll(TZBAKFILE)
    
    END IF
    !
    !-------------------------------------------------------------------------------
    !
    !*       27.    CURRENT TIME REFRESH
    
    !               --------------------
    
    !
    TDTCUR%TIME=TDTCUR%TIME + XTSTEP
    
    !
    !-------------------------------------------------------------------------------
    !
    !*       28.    CPU ANALYSIS
    !               ------------
    !
    CALL SECOND_MNH2(ZTIME2)
    XT_START=XT_START+ZTIME2-ZEND
    !
    !
    IF ( KTCOUNT == NSTOP .AND. IMI==1) THEN
      OEXIT=.TRUE.
    END IF
    !
    IF (OEXIT) THEN
    !
    
      IF ( .NOT. LIO_NO_WRITE ) THEN
        IF (LSERIES) CALL WRITE_SERIES_n(TDIAFILE)
        CALL WRITE_AIRCRAFT_BALLOON(TDIAFILE)
        CALL WRITE_STATION_n(TDIAFILE)
        CALL WRITE_PROFILER_n(TDIAFILE)
        CALL WRITE_LES_n(TDIAFILE,' ')
        CALL WRITE_LES_n(TDIAFILE,'A')
        CALL WRITE_LES_n(TDIAFILE,'E')
        CALL WRITE_LES_n(TDIAFILE,'H')
        CALL MENU_DIACHRO(TDIAFILE,'END')
        CALL IO_FILE_CLOSE_ll(TDIAFILE)
      END IF
    
      CALL IO_FILE_CLOSE_ll(TINIFILE)
    
      IF (CSURF=="EXTE") CALL IO_FILE_CLOSE_ll(TINIFILEPGD,OPARALLELIO=.FALSE.)
    
    !
    !*       28.1   print statistics!
    !
      ! Set File Timing OUTPUT
      !
      CALL SET_ILUOUT_TIMING(ILUOUT)
      !
      ! Compute global time
      !
      CALL TIME_STAT_ll(XT_START,ZTOT)
      !
      CALL TIME_HEADER_ll(IMI)
      !
      CALL TIME_STAT_ll(XT_1WAY,ZTOT,       ' ONE WAY','=')
      CALL TIME_STAT_ll(XT_BOUND,ZTOT,      ' BOUNDARIES','=')
      CALL TIME_STAT_ll(XT_STORE,ZTOT,      ' STORE-FIELDS','=')
        CALL TIME_STAT_ll(TIMEZ%T_WRIT3D_SEND,ZTOT,    '   W3D_SEND ','-')
        CALL TIME_STAT_ll(TIMEZ%T_WRIT3D_RECV,ZTOT,    '   W3D_RECV ','-')
        CALL TIME_STAT_ll(TIMEZ%T_WRIT3D_WRIT,ZTOT,    '   W3D_WRIT ','-')
        CALL TIME_STAT_ll(TIMEZ%T_WRIT3D_WAIT,ZTOT,    '   W3D_WAIT ','-')
        CALL TIME_STAT_ll(TIMEZ%T_WRIT3D_ALL ,ZTOT,    '   W3D_ALL ','-')
        CALL TIME_STAT_ll(TIMEZ%T_WRIT2D_GATH,ZTOT,    '   W2D_GATH ','-')
        CALL TIME_STAT_ll(TIMEZ%T_WRIT2D_WRIT,ZTOT,    '   W2D_WRIT ','-')
        CALL TIME_STAT_ll(TIMEZ%T_WRIT2D_ALL ,ZTOT,    '   W2D_ALL ','-')
      CALL TIME_STAT_ll(XT_GUESS,ZTOT,      ' INITIAL_GUESS','=')
      CALL TIME_STAT_ll(XT_2WAY,ZTOT,       ' TWO WAY','=')
    
      CALL TIME_STAT_ll(XT_ADV,ZTOT,        ' ADVECTION MET','=')
      CALL TIME_STAT_ll(XT_ADVUVW,ZTOT,     ' ADVECTION UVW','=')
      CALL TIME_STAT_ll(XT_GRAV,ZTOT,       ' GRAVITY','=')
    
      CALL TIME_STAT_ll(XT_FORCING,ZTOT,    ' FORCING','=')
      CALL TIME_STAT_ll(XT_NUDGING,ZTOT,    ' NUDGING','=')
      CALL TIME_STAT_ll(XT_SOURCES,ZTOT,    ' DYN_SOURCES','=')
      CALL TIME_STAT_ll(XT_DIFF,ZTOT,       ' NUM_DIFF','=')
      CALL TIME_STAT_ll(XT_RELAX,ZTOT,      ' RELAXATION','=')
      !
      CALL  TIMING_LEGEND() 
      !
      CALL TIME_STAT_ll(XT_PARAM,ZTOT,      ' PHYS_PARAM','=')
        CALL TIME_STAT_ll(XT_RAD,ZTOT,      '   RAD       = '//CRAD  ,'-')
        CALL TIME_STAT_ll(XT_SHADOWS,ZTOT,  '   SHADOWS'             ,'-')
        CALL TIME_STAT_ll(XT_DCONV,ZTOT,    '   DEEP CONV = '//CDCONV,'-')
        CALL TIME_STAT_ll(XT_GROUND,ZTOT,   '   GROUND'              ,'-')
        CALL TIME_STAT_ll(XT_TURB,ZTOT,     '   TURB      = '//CTURB ,'-')
        CALL TIME_STAT_ll(XT_MAFL,ZTOT,     '   MAFL      = '//CSCONV,'-')
        CALL TIME_STAT_ll(XT_CHEM,ZTOT,     '   CHIMIE'              ,'-')
      CALL  TIMING_LEGEND()
      CALL TIME_STAT_ll(XT_COUPL,ZTOT,      ' SET_COUPLING','=')
      CALL TIME_STAT_ll(XT_RAD_BOUND,ZTOT,  ' RAD_BOUND','=')
      !
      CALL  TIMING_LEGEND()
      ! 
      CALL TIME_STAT_ll(XT_PRESS,ZTOT,      ' PRESSURE ','=','F')
      !JUAN Z_SPLITTING
        CALL TIME_STAT_ll(TIMEZ%T_MAP_B_SX_YP2_ZP1,ZTOT,          '   REMAP       B=>FFTXZ'  ,'-','F')
        CALL TIME_STAT_ll(TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1,ZTOT, '   REMAP   FFTXZ=>FFTYZ'  ,'-','F')
        CALL TIME_STAT_ll(TIMEZ%T_MAP_SXP2_Y_ZP1_B,ZTOT,          '   REMAP   FTTYZ=>B'      ,'-','F')
        CALL TIME_STAT_ll(TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z,ZTOT, '   REMAP   FFTYZ=>SUBZ'   ,'-','F')
        CALL TIME_STAT_ll(TIMEZ%T_MAP_B_SXP2_Y_ZP1,ZTOT,          '   REMAP       B=>FFTYZ-1','-','F')
        CALL TIME_STAT_ll(TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1,ZTOT, '   REMAP    SUBZ=>FFTYZ-1','-','F')
        CALL TIME_STAT_ll(TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1,ZTOT, '   REMAP FFTYZ-1=>FFTXZ-1','-','F')
        CALL TIME_STAT_ll(TIMEZ%T_MAP_SX_YP2_ZP1_B,ZTOT,          '   REMAP FFTXZ-1=>B     ' ,'-','F')
      ! JUAN P1/P2
      CALL TIME_STAT_ll(XT_CLOUD,ZTOT,      ' RESOLVED_CLOUD','=')
    
      CALL TIME_STAT_ll(XT_ELEC,ZTOT,      ' RESOLVED_ELEC','=')
    
      CALL TIME_STAT_ll(XT_HALO,ZTOT,       ' EXCHANGE_HALO','=')
      CALL TIME_STAT_ll(XT_STEP_SWA,ZTOT,   ' ENDSTEP','=')
      CALL TIME_STAT_ll(XT_STEP_BUD,ZTOT,   ' BUDGETS','=')
      CALL TIME_STAT_ll(XT_SPECTRA,ZTOT,    ' LES','=')
      CALL TIME_STAT_ll(XT_STEP_MISC,ZTOT,  ' MISCELLANEOUS','=')
      !
      ! sum of call subroutine
      !
      ZALL   = XT_1WAY + XT_BOUND   + XT_STORE   + XT_GUESS    +  XT_2WAY   + &
               XT_ADV  + XT_FORCING + XT_NUDGING + XT_SOURCES  +  XT_DIFF   + &
    
               XT_ADVUVW  + XT_GRAV +                                         &
    
               XT_RELAX+ XT_PARAM   + XT_COUPL   + XT_RAD_BOUND+XT_PRESS    + &
    
               XT_CLOUD+ XT_ELEC    + XT_HALO    + XT_SPECTRA + XT_STEP_SWA + &
               XT_STEP_MISC+ XT_STEP_BUD
    
      CALL TIME_STAT_ll(ZALL,ZTOT,          ' SUM(CALL)','=')
      CALL  TIMING_SEPARATOR('=')
      !
      ! Gobale Stat
      !
      WRITE(ILUOUT,FMT=*)
      WRITE(ILUOUT,FMT=*)
      CALL  TIMING_LEGEND() 
      !
      ! MODELN all included
      !
      CALL  TIMING_SEPARATOR('+')
      CALL  TIMING_SEPARATOR('+')  
      WRITE(YMI,FMT="(I0)") IMI
      CALL TIME_STAT_ll(XT_START,ZTOT,      ' MODEL'//YMI,'+')
      CALL  TIMING_SEPARATOR('+')
      CALL  TIMING_SEPARATOR('+')
      CALL  TIMING_SEPARATOR('+')
      !
      ! Timing/ Steps
      !
      ZTIME_STEP     =  XT_START / FLOAT(KTCOUNT)
      WRITE(YTCOUNT,FMT="(I0)") KTCOUNT
      CALL TIME_STAT_ll(ZTIME_STEP,ZTOT,     ' SECOND/STEP='//YTCOUNT,'=')
      !
      ! Timing/Step/Points
      !
      IPOINTS = NIMAX_ll*NJMAX_ll*NKMAX
      WRITE(YPOINTS,FMT="(I0)") IPOINTS
      ZTIME_STEP_PTS =  ZTIME_STEP / FLOAT(IPOINTS) * 1e6
      CALL TIME_STAT_ll(ZTIME_STEP_PTS,ZTOT_PT)
      CALL TIME_STAT_ll(ZTIME_STEP_PTS,ZTOT_PT,  ' MICROSEC/STP/PT='//YPOINTS,'-')
      !
      CALL  TIMING_SEPARATOR('=')
      !
      !
      !
    
      CALL IO_FILE_CLOSE_ll(TLUOUT)
      IF (IMI==NMODEL) CALL IO_FILE_CLOSE_ll(TLUOUT0)
    
    END IF
    !
    END SUBROUTINE MODEL_n