Skip to content
Snippets Groups Projects
modeln.f90 98.6 KiB
Newer Older
  • Learn to ignore specific revisions
  •   IF (CCLOUD /= 'REVE' ) THEN
        XACPRR = XACPRR + XINPRR * XTSTEP
    
              IF ( (CCLOUD(1:3) == 'ICE' .AND. LSEDIC ) .OR.                     &
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
            ((CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO' &
    
                               .OR. CCLOUD == 'LIMA' ) .AND. KSEDC ) )    THEN
    
          XACPRC = XACPRC + XINPRC * XTSTEP
    
          IF (LDEPOSC .OR. LDEPOC) XACDEP = XACDEP + XINDEP * XTSTEP
        END IF
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
        IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5' .OR. &
    
                                     (CCLOUD == 'LIMA' .AND. NMOM_I.GE.1 ) ) THEN
    
          XACPRS = XACPRS + XINPRS * XTSTEP
          XACPRG = XACPRG + XINPRG * XTSTEP
    
          IF (CCLOUD == 'ICE4' .OR. (CCLOUD == 'LIMA' .AND. NMOM_H.GE.1)) XACPRH = XACPRH + XINPRH * XTSTEP          
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
        END IF
    !
    ! Lessivage des CCN et IFN nucléables par Slinn
    !
        IF (LSCAV .AND. (CCLOUD == 'LIMA')) THEN
    
           CALL LIMA_PRECIP_SCAVENGING( YLDIMPHYEX,CST,TBUCONF,TBUDGETS,SIZE(TBUDGETS), &
    
                                        CCLOUD, CCONF, ILUOUT, KTCOUNT,XTSTEP,XRT(:,:,:,3),    &
    
                                        XRHODREF, XRHODJ, XZZ, XPABST, XTHT,            &
                                        XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),          &
                                        XRSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), XINPAP  )
    
    Gaelle TANGUY's avatar
    Gaelle TANGUY committed
    !
          XACPAP(:,:) = XACPAP(:,:) + XINPAP(:,:) * XTSTEP
    
        END IF
      END IF
    !
    ! It is necessary that SV_C2R2 and SV_C1R3 are contiguous in the preceeding CALL
    !
    END IF
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    XT_CLOUD = XT_CLOUD + ZTIME2 - ZTIME1 &
               - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
    !
    !-------------------------------------------------------------------------------
    !
    !*       21.    CLOUD ELECTRIFICATION AND LIGHTNING FLASHES
    !               -------------------------------------------
    !
    
    ! Cloud electrification is now called directly from resolved_cloud
    ! It avoids duplicating microphysics routines.
    ! Resolved_elec solves the ion recombination and attachement, and
    ! lightning flash triggering and propagation
    !
    
    ZTIME1 = ZTIME2
    XTIME_BU_PROCESS = 0.
    XTIME_LES_BU_PROCESS = 0.
    !
    
    IF (CELEC /= 'NONE') THEN  !++cb-- ATTENTION : le cas rain_ice_elec n'est pas traite !!!
    
      IF (CCLOUD(1:3) == 'ICE') THEN
    
        IF (CSURF == 'EXTE') THEN
          IF (LLNOX_EXPLICIT) THEN
            CALL RESOLVED_ELEC_n (CCLOUD, NRR, IMI, KTCOUNT, OEXIT,       &
                                  XTSTEP, XZZ, XRHODJ, XRHODREF, XEXNREF, &
                                  ZPABST, XTHT, XWT, XRT, XRRS,           &
                                  XSVT(:,:,:,NSV_ELECBEG:NSV_ELECEND),    &
                                  XRSVS(:,:,:,NSV_ELECBEG:NSV_ELECEND),   &
                                  XCIT, XINPRR,                           &
                                  PSEA=ZSEA, PTOWN=ZTOWN,                 &
                                  PSVS_LNOX=XRSVS(:,:,:,NSV_LNOXBEG)      )
          ELSE
            CALL RESOLVED_ELEC_n (CCLOUD, NRR, IMI, KTCOUNT, OEXIT,       &
                                  XTSTEP, XZZ, XRHODJ, XRHODREF, XEXNREF, &
                                  ZPABST, XTHT, XWT, XRT, XRRS,           &
                                  XSVT(:,:,:,NSV_ELECBEG:NSV_ELECEND),    &
                                  XRSVS(:,:,:,NSV_ELECBEG:NSV_ELECEND),   &
                                  XCIT, XINPRR,                           &
                                  PSEA=ZSEA, PTOWN=ZTOWN                  )
          END IF
          DEALLOCATE(ZSEA)
          DEALLOCATE(ZTOWN)
        ELSE
          IF (LLNOX_EXPLICIT) THEN
            CALL RESOLVED_ELEC_n (CCLOUD, NRR, IMI, KTCOUNT, OEXIT,       &
                                  XTSTEP, XZZ, XRHODJ, XRHODREF, XEXNREF, &
                                  ZPABST, XTHT, XWT, XRT, XRRS,           &
                                  XSVT(:,:,:,NSV_ELECBEG:NSV_ELECEND),    &
                                  XRSVS(:,:,:,NSV_ELECBEG:NSV_ELECEND),   &
                                  XCIT, XINPRR,                           &
                                  PSVS_LNOX=XRSVS(:,:,:,NSV_LNOXBEG)      )
          ELSE
            CALL RESOLVED_ELEC_n (CCLOUD, NRR, IMI, KTCOUNT, OEXIT,       &
                                  XTSTEP, XZZ, XRHODJ, XRHODREF, XEXNREF, &
                                  ZPABST, XTHT, XWT, XRT, XRRS,           &
                                  XSVT(:,:,:,NSV_ELECBEG:NSV_ELECEND),    &
                                  XRSVS(:,:,:,NSV_ELECBEG:NSV_ELECEND),   &
                                  XCIT, XINPRR                            )
          END IF
        END IF
      ELSE IF (CCLOUD == 'LIMA' .AND. LPTSPLIT) THEN
        IF (LLNOX_EXPLICIT) THEN
          IF ((NRR == 6 .AND. NMOM_S == 1 .AND. NMOM_G == 1) .OR. &
              (NRR == 7 .AND. NMOM_S == 1 .AND. NMOM_G == 1 .AND. NMOM_H == 1)) THEN
            CALL RESOLVED_ELEC_n (CCLOUD, NRR, IMI, KTCOUNT, OEXIT,       &
                                  XTSTEP, XZZ, XRHODJ, XRHODREF, XEXNREF, &
                                  ZPABST, XTHT, XWT, XRT, XRRS,           &
                                  XSVT(:,:,:,NSV_ELECBEG:NSV_ELECEND),    &
                                  XRSVS(:,:,:,NSV_ELECBEG:NSV_ELECEND),   &
                                  XRSVS(:,:,:,NSV_LIMA_NI), XINPRR,       &
                                  PCCS=XRSVS(:,:,:,NSV_LIMA_NC),          &
                                  PCRS=XRSVS(:,:,:,NSV_LIMA_NR),          &
                                  PSVS_LNOX=XRSVS(:,:,:,NSV_LNOXBEG)      )
          ELSE IF (NRR == 6 .AND. NMOM_S == 2 .AND. NMOM_G == 2) THEN
            CALL RESOLVED_ELEC_n (CCLOUD, NRR, IMI, KTCOUNT, OEXIT,       &
                                  XTSTEP, XZZ, XRHODJ, XRHODREF, XEXNREF, &
                                  ZPABST, XTHT, XWT, XRT, XRRS,           &
                                  XSVT(:,:,:,NSV_ELECBEG:NSV_ELECEND),    &
                                  XRSVS(:,:,:,NSV_ELECBEG:NSV_ELECEND),   &
                                  XRSVS(:,:,:,NSV_LIMA_NI), XINPRR,       &
                                  PCCS=XRSVS(:,:,:,NSV_LIMA_NC),          &
                                  PCRS=XRSVS(:,:,:,NSV_LIMA_NR),          &
                                  PCSS=XRSVS(:,:,:,NSV_LIMA_NS),          &
                                  PCGS=XRSVS(:,:,:,NSV_LIMA_NG),          &
                                  PSVS_LNOX=XRSVS(:,:,:,NSV_LNOXBEG)      )
          ELSE IF (NRR == 7 .AND. NMOM_S == 2 .AND. NMOM_G == 2 .AND. NMOM_H == 2) THEN
            CALL RESOLVED_ELEC_n (CCLOUD, NRR, IMI, KTCOUNT, OEXIT,       &
                                  XTSTEP, XZZ, XRHODJ, XRHODREF, XEXNREF, &
                                  ZPABST, XTHT, XWT, XRT, XRRS,           &
                                  XSVT(:,:,:,NSV_ELECBEG:NSV_ELECEND),    &
                                  XRSVS(:,:,:,NSV_ELECBEG:NSV_ELECEND),   &
                                  XRSVS(:,:,:,NSV_LIMA_NI), XINPRR,       &
                                  PCCS=XRSVS(:,:,:,NSV_LIMA_NC),          &
                                  PCRS=XRSVS(:,:,:,NSV_LIMA_NR),          &
                                  PCSS=XRSVS(:,:,:,NSV_LIMA_NS),          &
                                  PCGS=XRSVS(:,:,:,NSV_LIMA_NG),          &
                                  PCHS=XRSVS(:,:,:,NSV_LIMA_NH),          &
                                  PSVS_LNOX=XRSVS(:,:,:,NSV_LNOXBEG)      )
          END IF
        ELSE
          IF ((NRR == 6 .AND. NMOM_S == 1 .AND. NMOM_G == 1) .OR. &
              (NRR == 7 .AND. NMOM_S == 1 .AND. NMOM_G == 1 .AND. NMOM_H == 1)) THEN
            CALL RESOLVED_ELEC_n (CCLOUD, NRR, IMI, KTCOUNT, OEXIT,       &
                                  XTSTEP, XZZ, XRHODJ, XRHODREF, XEXNREF, &
                                  ZPABST, XTHT, XWT, XRT, XRRS,           &
                                  XSVT(:,:,:,NSV_ELECBEG:NSV_ELECEND),    &
                                  XRSVS(:,:,:,NSV_ELECBEG:NSV_ELECEND),   &
                                  XRSVS(:,:,:,NSV_LIMA_NI), XINPRR,       &
                                  PCCS=XRSVS(:,:,:,NSV_LIMA_NC),          &
                                  PCRS=XRSVS(:,:,:,NSV_LIMA_NR))
          ELSE IF (NRR == 6 .AND. NMOM_S == 2 .AND. NMOM_G == 2) THEN
            CALL RESOLVED_ELEC_n (CCLOUD, NRR, IMI, KTCOUNT, OEXIT,       &
                                  XTSTEP, XZZ, XRHODJ, XRHODREF, XEXNREF, &
                                  ZPABST, XTHT, XWT, XRT, XRRS,           &
                                  XSVT(:,:,:,NSV_ELECBEG:NSV_ELECEND),    &
                                  XRSVS(:,:,:,NSV_ELECBEG:NSV_ELECEND),   &
                                  XRSVS(:,:,:,NSV_LIMA_NI), XINPRR,       &
                                  PCCS=XRSVS(:,:,:,NSV_LIMA_NC),          &
                                  PCRS=XRSVS(:,:,:,NSV_LIMA_NR),          &
                                  PCSS=XRSVS(:,:,:,NSV_LIMA_NS),          &
                                  PCGS=XRSVS(:,:,:,NSV_LIMA_NG))
          ELSE IF (NRR == 7 .AND. NMOM_S == 2 .AND. NMOM_G == 2 .AND. NMOM_H == 2) THEN
            CALL RESOLVED_ELEC_n (CCLOUD, NRR, IMI, KTCOUNT, OEXIT,       &
                                  XTSTEP, XZZ, XRHODJ, XRHODREF, XEXNREF, &
                                  ZPABST, XTHT, XWT, XRT, XRRS,           &
                                  XSVT(:,:,:,NSV_ELECBEG:NSV_ELECEND),    &
                                  XRSVS(:,:,:,NSV_ELECBEG:NSV_ELECEND),   &
                                  XRSVS(:,:,:,NSV_LIMA_NI), XINPRR,       &
                                  PCCS=XRSVS(:,:,:,NSV_LIMA_NC),          &
                                  PCRS=XRSVS(:,:,:,NSV_LIMA_NR),          &
                                  PCSS=XRSVS(:,:,:,NSV_LIMA_NS),          &
                                  PCGS=XRSVS(:,:,:,NSV_LIMA_NG),          &
                                  PCHS=XRSVS(:,:,:,NSV_LIMA_NH))
          END IF
        END IF
    
      END IF
    END IF
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    XT_ELEC = XT_ELEC + ZTIME2 - ZTIME1 &
               - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
    !
    !-------------------------------------------------------------------------------
    !
    !*       21.    L.E.S. COMPUTATIONS
    !               -------------------
    !
    ZTIME1 = ZTIME2
    !
    CALL LES_n
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    XT_SPECTRA = XT_SPECTRA + ZTIME2 - ZTIME1 + XTIME_LES_BU + XTIME_LES
    !
    !-------------------------------------------------------------------------------
    !
    !*       21. bis    MEAN_UM
    !               --------------------
    !
    IF (LMEAN_FIELD) THEN
    
       CALL MEAN_FIELD(XUT, XVT, XWT, XTHT, XTKET, XPABST, XRT(:,:,:,1), XSVT(:,:,:,1))
    
    END IF
    !
    !-------------------------------------------------------------------------------
    !
    !*       22.    UPDATE HALO OF EACH SUBDOMAINS FOR TIME T+DT
    !               --------------------------------------------
    !
    ZTIME1 = ZTIME2
    !
    
    CALL EXCHANGE (XTSTEP,NRR,NSV,XRHODJ,TFIELDS_ll,     &
    
                   XRUS, XRVS,XRWS,XRTHS,XRRS,XRTKES,XRSVS)
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    XT_HALO = XT_HALO + ZTIME2 - ZTIME1
    !
    !-------------------------------------------------------------------------------
    !
    !*       23.    TEMPORAL SWAPPING
    !               -----------------
    !
    ZTIME1 = ZTIME2
    XTIME_BU_PROCESS = 0.
    !
    
    CALL ENDSTEP  ( XTSTEP,NRR,NSV,KTCOUNT,IMI,               &
    
                    CUVW_ADV_SCHEME,CTEMP_SCHEME,XRHODJ,      &
    
                    XRUS,XRVS,XRWS,XDRYMASSS,                 &
                    XRTHS,XRRS,XRTKES,XRSVS,                  &
                    XLSUS,XLSVS,XLSWS,                        &
    
                    XLBXUS,XLBXVS,XLBXWS,                     &
                    XLBXTHS,XLBXRS,XLBXTKES,XLBXSVS,          &
                    XLBYUS,XLBYVS,XLBYWS,                     &
                    XLBYTHS,XLBYRS,XLBYTKES,XLBYSVS,          &
    
                    XUT,XVT,XWT,XPABST,XDRYMASST,             &
    
                    XTHT, XRT, XTHM, XRCM, XPABSM,XTKET, XSVT,&
    
                    XLSUM,XLSVM,XLSWM,                        &
    
                    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) THEN
      IF (CSURF=='EXTE') THEN
        ALLOCATE(ZSEA(IIU,IJU))
        ZSEA(:,:) = 0.
        CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:))
    
        CALL AIRCRAFT_BALLOON( XTSTEP, XZZ, XMAP, XLONORI, XLATORI,                   &
                               XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD, &
                               XRHODREF, XCIT, PSEA = ZSEA(:,:)                       )
    
        CALL AIRCRAFT_BALLOON( XTSTEP, XZZ, XMAP, XLONORI, XLATORI,                   &
                               XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD, &
                               XRHODREF, XCIT                                         )
    
    
    !-------------------------------------------------------------------------------
    !
    !*       24.2    STATION (observation diagnostic)
    !               --------------------------------
    !
    
      CALL STATION_n( XZZ, XRHODREF, XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST )
    
    !
    !---------------------------------------------------------
    !
    !*       24.3    PROFILER (observation diagnostic)
    !               ---------------------------------
    !
    
    IF (LPROFILER)  THEN
      IF (CSURF=='EXTE') THEN
        ALLOCATE(ZSEA(IIU,IJU))
        ZSEA(:,:) = 0.
        CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:))
    
        CALL PROFILER_n( XZZ, XRHODREF,                             &
                         XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET,     &
                         XTSRAD, XPABST, XAER, XCIT, PSEA=ZSEA(:,:) )
    
        CALL PROFILER_n( XZZ, XRHODREF,                         &
                         XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, &
                         XTSRAD, XPABST, XAER, XCIT             )
    
    IF (ALLOCATED(ZSEA)) DEALLOCATE (ZSEA)
    
    !
    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,XTSTEP,NSV)
    
    END IF
    !
    CALL SECOND_MNH2(ZTIME2)
    !
    XT_STEP_BUD = XT_STEP_BUD + ZTIME2 - ZTIME1 + XTIME_BU
    !
    !-------------------------------------------------------------------------------
    !
    !*       27.    CURRENT TIME REFRESH
    
    !               --------------------
    
    TDTCUR%xtime=TDTCUR%xtime + 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_STATPROF_n( TDIAFILE, TSTATIONS )
        CALL WRITE_STATPROF_n( TDIAFILE, TPROFILERS )
    
        ! Free memory of flyer that is not present on the master process of the file (was allocated in WRITE_AIRCRAFT_BALLOON)
        CALL AIRCRAFT_BALLOON_FREE_NONLOCAL( TDIAFILE )
    
      CALL IO_File_close(TINIFILE)
      IF (CSURF=="EXTE") CALL IO_File_close(TINIFILEPGD)
    
    !
    !*       28.1   print statistics!
    !
      ! Set File Timing OUTPUT
      !
    
      !
      ! 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_IBM_FORC,ZTOT,   ' IBM','=')  
    
      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'              ,'-')
    
        ! Blaze perf
        IF (LBLAZE) THEN
          CALL TIME_STAT_ll(XFIREPERF,ZBLAZETOT)
          CALL TIME_STAT_ll(XFIREPERF,ZTOT,           '     BLAZE'          ,'~')
          CALL TIME_STAT_ll(XGRADPERF,ZBLAZETOT,      '       GRAD(PHI)'    ,' ')
          CALL TIME_STAT_ll(XROSWINDPERF,ZBLAZETOT,   '       ROS & WIND'   ,' ')
          CALL TIME_STAT_ll(XPROPAGPERF,ZBLAZETOT,    '       PROPAGATION'  ,' ')
          CALL TIME_STAT_ll(XFLUXPERF,ZBLAZETOT,      '       HEAT FLUXES'  ,' ')
        END IF
    
        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 TIME_STAT_ll(XT_EOL,ZTOT,      '   WIND TURBINE'        ,'-')
    
      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','=')
    
      IF (LIBM) CALL TIME_STAT_ll(XT_IBM_FORC,ZTOT,' IBM FORCING','=') 
    
      !
      ! 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_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
      !
    
      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 / REAL(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('=')
      !
    END IF
    !
    END SUBROUTINE MODEL_n