Skip to content
Snippets Groups Projects
apl_arome.F90 141 KiB
Newer Older
    DO JLEV=1,KLEV
      WRITE(NULOUT,*)JLEV,ZTHS__(NPTP,JLEV)
    ENDDO
  ENDIF

!!$
!!$! Allocation des variables SV (NGFL_EXT + NLIMA)
!!$  KSV_TURB=NGFL_EXT+NLIMA
!!$!
!!$  IF (NGFL_EXT/=0) THEN
!!$     DO JGFL=1,NGFL_EXT
!!$        DO JLON=KIDIA,KFDIA
!!$           ZSFTURB(JLON,JGFL)=ZSFSV_(JLON,JGFL)
!!$           DO JLEV = 1, KLEV
!!$              ZTURBM(JLON,JLEV,JGFL)=ZSVM_(JLON,1,JLEV,JGFL)
!!$              ZTURBS(JLON,JLEV,JGFL)=ZSVSIN_(JLON,1,JLEV,JGFL)
!!$           ENDDO
!!$        ENDDO
!!$     ENDDO
!!$  ENDIF
!!$!
!!$  IF (NLIMA/=0) THEN
!!$     DO JGFL=1,NLIMA
!!$        DO JLON=KIDIA,KFDIA
!!$           ZSFTURB(JLON,NGFL_EXT+JGFL)=0.
!!$           DO JLEV = 1, KLEV
!!$              ZTURBM(JLON,JLEV,NGFL_EXT+JGFL)=ZLIMAM_(JLON,JLEV,JGFL)
!!$              ZTURBS(JLON,JLEV,NGFL_EXT+JGFL)=ZLIMASIN_(JLON,JLEV,JGFL)
!!$           ENDDO
!!$        ENDDO
!!$     ENDDO
!!$  ENDIF

  ! Input variable indeed. REK
  ZSFSVLIMA_(KIDIA:KFDIA,1:NLIMA)=0._JPRB

  ! 10.2 calcul TURB
  ZZTOP_(KIDIA:KFDIA)=ZAPHIM(KIDIA:KFDIA,0)*ZINVG

  IF (LGRADHPHY) THEN
  !   
    DO JLEV = 1,KLEV
      DO JGR=1,NGRADIENTS
        ZTURB3D__(KIDIA:KFDIA,JLEV,JGR)=PTURB3D(KIDIA:KFDIA,JGR,JLEV)
      ENDDO
    ENDDO
  
  ENDIF

! Appel avec les arguments modifiés pour variables LIMA :
! KSV_TURB, ZSFTURB, ZTURBM, ZTURBS, ZTENDSV_TURB
  CALL ARO_TURB_MNH(KKA=IKA,KKU=IKU,KKL=IKL,KLON=KFDIA,KLEV=KLEV,&
   & KRR=NRR, KRRL=NRRL,KRRI= NRRI,&
   & KSV=NLIMA,KTCOUNT=KSTEP+1,KGRADIENTS=NGRADIENTS,LDHARATU=LHARATU,PTSTEP=ZDT,&
   & PZZ=ZZZ_,PZZF=ZZZ_F_,&
   & PZZTOP=ZZTOP_,PRHODJ=ZRHODJM__,PTHVREF=ZTHVREFM__,&
   & PRHODREF=ZRHODREFM__,HINST_SFU='M',&
   & PSFTH=ZSFTH_,PSFRV=ZSFRV_,&
   & PSFSV=ZSFSVLIMA_,PSFU=ZSFU_,&
   & PSFV=ZSFV_,PPABSM=ZPABSM__,&
   & PUM=ZUM__,PVM=ZVM__,PWM=ZWM__,PTKEM=ZTKEM__,PEPSM=ZEPSM,&
   & PSVM=ZLIMAM_,&
   & PSRCM=ZSRCS__,PTHM=ZTHM__,&
   & PRM=ZRM_,&
   & PRUS=ZUS__,PRVS=ZVS__,PRWS=ZWS__,PRTHS=ZTHS__,&
   & PRRS=ZRS_,&
   & PRSVSIN=ZLIMASIN_,PRSVS=ZLIMAS_,&
   & PRTKES=ZTKES_,PRTKES_OUT=ZTKES_OUT__,&
   & PREPSS=ZEPSS,PHGRAD=ZTURB3D__,PSIGS=ZSIGS__,&
   & OSUBG_COND=LOSUBG_COND,&
   & PFLXZTHVMF=ZFLXZTHVMF_SUM__,&
   & PLENGTHM=ZLENGTHM__,PLENGTHH=ZLENGTHH__,MFMOIST=ZMF_UP__,PDRUS_TURB=ZTENDU_TURB__, &
   & PDRVS_TURB=ZTENDV_TURB__,PDRTHLS_TURB=ZTENDTHL_TURB__,PDRRTS_TURB=ZTENDRT_TURB__,&
   & PDRSVS_TURB=ZTENDSV_TURBLIMA_,&
   & PDP=ZDP__, PTP=ZTP__,PTPMF=ZTPMF__,PTDIFF=ZTDIFF__,PTDISS=ZTDISS__,PEDR=ZEDR__,YDDDH=YDDDH,&
   & YDLDDH=YDMODEL%YRML_DIAG%YRLDDH,YDMDDH=YDMODEL%YRML_DIAG%YRMDDH)


! Séparation des variables SV (NGFL_EXT + NLIMA)
!!$  IF (NGFL_EXT/=0) THEN
!!$     DO JGFL=1,NGFL_EXT
!!$        DO JLON=KIDIA,KFDIA
!!$           ZSFSV_(JLON,JGFL)=ZSFTURB(JLON,JGFL)
!!$           DO JLEV = 1, KLEV
!!$              ZSVM_(JLON,1,JLEV,JGFL)=ZTURBM(JLON,JLEV,JGFL)
!!$              ZSVS_(JLON,1,JLEV,JGFL)=ZTURBS(JLON,JLEV,JGFL)
!!$           ENDDO
!!$        ENDDO
!!$     ENDDO
!!$  ENDIF
!!$!
!!$  IF (NLIMA/=0) THEN
!!$     DO JGFL=1,NLIMA
!!$        DO JLON=KIDIA,KFDIA
!!$           DO JLEV = 1, KLEV
!!$              ZLIMAM_(JLON,JLEV,JGFL)=ZTURBM(JLON,JLEV,NGFL_EXT+JGFL)
!!$              ZLIMAS_(JLON,JLEV,JGFL)=ZTURBS(JLON,JLEV,NGFL_EXT+JGFL)
!!$           ENDDO
!!$        ENDDO
!!$     ENDDO
!!$  ENDIF


  DO JLEV = 1 , KLEV
     PEDR(KIDIA:KFDIA,JLEV)=ZEDR__(KIDIA:KFDIA,JLEV)
  ENDDO
   
  IF (LFLEXDIA) THEN
    DO JLEV = 1,KLEV
      DO JLON = KIDIA,KFDIA
        ZDP__(JLON,JLEV)=ZDP__(JLON,JLEV)*PDELPM(JLON,JLEV)*ZINVG
        ZTP__(JLON,JLEV)=(ZTP__(JLON,JLEV)-ZTPMF__(JLON,JLEV))*PDELPM(JLON,JLEV)*ZINVG
        ZTPMF__(JLON,JLEV)=ZTPMF__(JLON,JLEV)*PDELPM(JLON,JLEV)*ZINVG
        ZTDIFF__(JLON,JLEV)=ZTDIFF__(JLON,JLEV)*PDELPM(JLON,JLEV)*ZINVG
        ZTDISS__(JLON,JLEV)=ZTDISS__(JLON,JLEV)*PDELPM(JLON,JLEV)*ZINVG
      ENDDO
    ENDDO
    IF (LDDH_OMP) THEN
      CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZDP__(:,1:KLEV),'TKEPRDY',YDDDH)
      CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTP__(:,1:KLEV),'TKEPRTH',YDDDH)
      CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTPMF__(:,1:KLEV),'TKEPRTHMF',YDDDH)
      CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTDIFF__(:,1:KLEV),'TKEDIFF',YDDDH)
      CALL NEW_ADD_FIELD_3D(YDMODEL%YRML_DIAG%YRMDDH,ZTDISS__(:,1:KLEV),'TKEDISS',YDDDH)
    ELSE
      CALL ADD_FIELD_3D(YLDDH,ZDP__(:,1:KLEV),'TKEPRDY','T','ARO',.TRUE.,.TRUE.)
      CALL ADD_FIELD_3D(YLDDH,ZTP__(:,1:KLEV),'TKEPRTH','T','ARO',.TRUE.,.TRUE.)
      CALL ADD_FIELD_3D(YLDDH,ZTPMF__(:,1:KLEV),'TKEPRTHMF','T','ARO',.TRUE.,.TRUE.)
      CALL ADD_FIELD_3D(YLDDH,ZTDIFF__(:,1:KLEV),'TKEDIFF','T','ARO',.TRUE.,.TRUE.)
      CALL ADD_FIELD_3D(YLDDH,ZTDISS__(:,1:KLEV),'TKEDISS','T','ARO',.TRUE.,.TRUE.)
    ENDIF
  ENDIF 

  IF(MOD(KSTEP+1,NPRINTFR)==0) THEN
    WRITE(NULOUT,*)'u v w a S apres turb'
    DO JLEV=1,KLEV
      WRITE(NULOUT,*)JLEV,ZUS__(NPTP,JLEV),ZVS__(NPTP,JLEV),ZWS__(NPTP,JLEV),ZTKES_OUT__(NPTP,JLEV)
    ENDDO
    WRITE(NULOUT,*)'THS TKES SIGS apres turb'
    DO JLEV=1,KLEV
      WRITE(NULOUT,*)JLEV,ZTHS__(NPTP,JLEV),ZTKES_OUT__(NPTP,JLEV),ZSIGS__(NPTP,JLEV)
    ENDDO
  ENDIF

  ! avance temporelle et inversion niveau pour ZSIGS__
  IF (LOSUBG_COND .AND. LOSIGMAS) THEN
    IF (CMF_CLOUD=='DIRE'.OR.CMF_CLOUD=='BIGA'.OR.CMF_CLOUD=='NONE') THEN
      DO JLEV = 1,KLEV
        PSIGS(KIDIA:KFDIA,JLEV)=ZSIGS__(KIDIA:KFDIA,JLEV)
      ENDDO
    ELSEIF (CMF_CLOUD=='STAT') THEN
      DO JLEV = 1,KLEV
        DO JLON = KIDIA,KFDIA
          PSIGS(JLON,JLEV)=SQRT(ZSIGS__(JLON,JLEV)**2+ZSIGMF_(JLON,JLEV)**2 )
        ENDDO
      ENDDO
    ENDIF
  ENDIF


  !10.3. traitement des sorties pour repasser dans le monde Aladin
  !calcul de tendance et inversion des niveaux pour le vent horizontal et la TKE

  DO JLEV = 1,KLEV
    DO JLON = KIDIA,KFDIA
      PTENDU(JLON,JLEV)=PTENDU(JLON,JLEV)+ZTENDU_TURB__(JLON,JLEV)
      PTENDV(JLON,JLEV)=PTENDV(JLON,JLEV)+ZTENDV_TURB__(JLON,JLEV)
      ! for the moment, turbulence do not compute w tendency:
      PTENDW(JLON,JLEV)=0.0_JPRB
      ! PTENDW(JLON,JLEV)+(ZWS__(JLON,JLEV)-&
      ! & ZWS_AVE(JLON,1,JLEV))
      !conversion de la tendance de theta en tendance de T et inversion niveau
      PTENDT(JLON,JLEV)=PTENDT(JLON,JLEV)+ZTENDTHL_TURB__(JLON,JLEV)*ZEXNREFM_(JLON,JLEV)
  !inversion niveaux tendances des rv et conversion en qv en multipliant par qd
      PTENDR(JLON,JLEV,1)= PTENDR(JLON,JLEV,1)+ZTENDRT_TURB__(JLON,JLEV)*ZQDM(JLON,JLEV)
    ENDDO
  ENDDO


  IF (LHARATU) THEN
    DO JLEV = 1,KLEV
      DO JLON = KIDIA,KFDIA
          PTENDTKE(JLON,JLEV)=PTENDTKE(JLON,JLEV)+(ZTKEEDMFS(JLON,JLEV)-ZTKES_(JLON,JLEV))
      ENDDO
    ENDDO
  ELSE
    DO JLEV = 1,KLEV
      DO JLON = KIDIA,KFDIA
         PTENDTKE(JLON,JLEV)=PTENDTKE(JLON,JLEV)+(ZTKES_OUT__(JLON,JLEV)-ZTKES_(JLON,JLEV))
      ENDDO
    ENDDO
  ENDIF

  DO JGFL=1,NGFL_EXT
    DO JLEV = 1,KLEV
      DO JLON = KIDIA,KFDIA
        PTENDEXT(JLON,JLEV,JGFL)=PTENDEXT(JLON,JLEV,JGFL)+(ZSVS_(JLON,JLEV,JGFL)-ZSVSIN_(JLON,JLEV,JGFL))
      ENDDO
    ENDDO
  ENDDO

! Tendances LIMA
  DO JGFL=1,NLIMA
    DO JLEV = 1, KLEV
      DO JLON=KIDIA,KFDIA
        PTENDLIMA(JLON,JLEV,JGFL)=PTENDLIMA(JLON,JLEV,JGFL)+ZTENDSV_TURBLIMA_(JLON,JLEV,JGFL)
!        PTENDLIMA(JLON,JLEV,:)=PTENDLIMA(JLON,JLEV,:)+ (ZLIMAS_(JLON,JLEV,:)-ZLIMASIN_(JLON,JLEV,:))
      ENDDO
    ENDDO
  ENDDO

ENDIF
!    ------------------------------------------------------------------
!     11 - MICROPHYSIQUE. 
!     --------------------------------------------------------------------

IF (LMICRO) THEN

  ! Swap pointers because input values of THS and RS should be saved
  CALL SWAP_THS
  CALL SWAP_RS
  CALL SWAP_LIMAS

  ! for now a copy is needed (see below, inside). I don't like than :-( REK
  ZTHS__(KIDIA:KFDIA,1:KLEV)=ZTHSIN_(KIDIA:KFDIA,1:KLEV)
  ZRS_(KIDIA:KFDIA,1:KLEV,1:NRR)=ZRSIN_(KIDIA:KFDIA,1:KLEV,1:NRR)
  ! for now a copy is needed (see below, inside). I don't like than :-( REK
  ZLIMAS_(KIDIA:KFDIA,1:KLEV,1:NLIMA)=ZLIMASIN_(KIDIA:KFDIA,1:KLEV,1:NLIMA)
     
  !prints
  IF (MOD(KSTEP+1,NPRINTFR)==0) THEN
    WRITE(NULOUT,*)'avant rain_ice sous apl_arome'
    WRITE(NULOUT,*)'JLEV   ZZZ_F_      ZZZ_      ZRHODREF',&
     & '    ZRHODJ      ZPABSM__        ZTHSIN_       ZTHM__      '   
    DO JLEV=1,KLEV+1 
      WRITE(NULOUT,'(I2,X,7F10.3)')JLEV,ZZZ_F_(NPTP,JLEV),ZZZ_(NPTP,JLEV), ZRHODREFM__(NPTP,JLEV),&
       & ZRHODJM__(NPTP,JLEV), ZPABSM__(NPTP,JLEV), ZTHSIN_(NPTP,JLEV), ZTHM__(NPTP,JLEV)  
    ENDDO 
    WRITE(NULOUT,*)'JLEV        PDELPM        ZPABSM__         ZEXNREF','          ZSIGS__'
    DO JLEV=2,KLEV
      WRITE(NULOUT,'(I2,X,4f10.3)')JLEV, PDELPM(NPTP,JLEV),&
       & ZPABSM__(NPTP,JLEV),ZEXNREFM_(NPTP,JLEV),ZSIGS__(NPTP,JLEV)  
    ENDDO
    WRITE(NULOUT,*)'JLEV    PTM       PRM          PCPM'
    DO JLEV=1,KLEV
      WRITE(NULOUT,'(I2,X,3f10.3)')JLEV,ZTM(NPTP,KLEV+1-JLEV), ZRHM(NPTP,KLEV+1-JLEV) ,ZCPM(NPTP,KLEV+1-JLEV)  
    ENDDO
    WRITE (NULOUT,*)'JLEV  rhoQv  rhoQc   rhoQr   rhoQi   rhoQs   rhoQg'
    DO JLEV=1,KLEV
      WRITE(NULOUT,'(I2,X,6E11.4)')JLEV,ZRM_(NPTP,JLEV,1), ZRM_(NPTP,JLEV,2),&
       & ZRM_(NPTP,JLEV,3),ZRM_(NPTP,JLEV,4),ZRM_(NPTP,JLEV,5), ZRM_(NPTP,JLEV,6)  
    ENDDO
    WRITE (NULOUT,*)'JLEV  ZRSQv  ZRSQc   ZRSQr   ZRSQi   ZRSQs   ZRSQg'
    DO JLEV=1,KLEV
      WRITE(NULOUT,'(I2,X,6E11.4)')JLEV,ZRS_(NPTP,JLEV,1), ZRS_(NPTP,JLEV,2),&
       & ZRSIN_(NPTP,JLEV,3),ZRSIN_(NPTP,JLEV,4),ZRSIN_(NPTP,JLEV,5), ZRSIN_(NPTP,JLEV,6)  
    ENDDO
    WRITE(NULOUT,*)'ZDT=',ZDT
    WRITE(NULOUT,*)'NRR and co',NRR,KSTEP+1,NSPLITR,LOSUBG_COND, LOSIGMAS, CSUBG_AUCV_RC,LOWARM  
  ENDIF
  

  ZSEA_(KIDIA:KFDIA)=0.0_JPRB
  IF (LOLSMC) THEN
    DO JLON = KIDIA, KFDIA
      IF (PLSM(JLON) < 0.5) THEN
        ZSEA_(JLON) = 1.0_JPRB
      ENDIF
    ENDDO
  ENDIF
         
  IF (LOTOWNC) THEN
    ZTOWN_(KIDIA:KFDIA) = ZTOWNS_(KIDIA:KFDIA)
  ELSE
    ZTOWN_(KIDIA:KFDIA)=0.0_JPRB
  ENDIF  

  IF (CMICRO == 'LIMA') THEN

    IF (LTURB) THEN
      DO JLON=KIDIA,KFDIA
        DO JLEV=1,KLEV
          ZWNU_(JLON,JLEV) = ZWM__(JLON,JLEV) + 0.66*SQRT(ZTKEM__(JLON,JLEV))
        ENDDO
      ENDDO
      ZPTRWNU_ => ZWNU_(1:KFDIA,1:KLEV)
    ELSE
      ZPTRWNU_ => ZWM__(1:KFDIA,1:KLEV)
    ENDIF
    CALL ARO_LIMA(KLEV,IKU,IKL,KFDIA,KLEV,NRR,NLIMA,KSTEP+1,NSPLITR,NSPLITG, ZDT,ZDZZ_ ,&
     & ZRHODJM__(:,1:KLEV),ZRHODREFM__(:,1:KLEV), ZEXNREFM_, ZPABSM__(:,1:KLEV), ZPTRWNU_, &
     & ZTHM__(:,1:KLEV),ZRM_, ZLIMAM_,  ZTHS__(:,1:KLEV),ZRS_,  ZLIMAS_,  ZEVAP_, &
     & ZINPRR_NOTINCR_, ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_,ZPFPR_,&
     & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH )
  ELSE
    CALL ARO_RAIN_ICE (NPROMICRO,KLEV,IKU,IKL,KFDIA,KLEV,NRR,KSTEP+1,NSPLITR,NGFL_EZDIAG,&
     & LOSUBG_COND, CSUBG_AUCV_RC, CSUBG_AUCV_RI, LOSEDIC,CSEDIM, CMICRO, ZDT,ZDZZ_ ,&
     & ZRHODJM__(:,1:KLEV),ZRHODREFM__(:,1:KLEV), ZEXNREFM_, ZPABSM__(:,1:KLEV),&
     & ZHLC_HRC__(:,1:KLEV), ZHLC_HCF__(:,1:KLEV),&
     & ZHLI_HRI__(:,1:KLEV), ZHLI_HCF__(:,1:KLEV),&
3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825
     & ZTHM__(:,1:KLEV),ZRM_, ZSIGS__(:,1:KLEV), ZNEBMNH_, ZTHS__(:,1:KLEV),ZRS_,&
     & ZEVAP_, ZCIT_,LOWARM,ZSEA_,ZTOWN_, LOCND2,LGRSN,&
     & ZINPRR_NOTINCR_, ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_,ZPFPR_,&
     & PGP2DSPP,PEZDIAG, &
     & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH)
  ENDIF

  DO JLON=KIDIA,KFDIA
    ZINPRR_(JLON)=ZINPRR_(JLON)+ZINPRR_NOTINCR_(JLON)
    ZINPRS_(JLON)=ZINPRS_(JLON)+ZINPRS_NOTINCR_(JLON)
    ZINPRG_(JLON)=ZINPRG_(JLON)+ZINPRG_NOTINCR_(JLON)
    ZINPRH_(JLON)=ZINPRH_(JLON)+ZINPRH_NOTINCR_(JLON)
  ENDDO

  !conversion de la tendance de theta en tendance de T et inversion niveau
  DO JLEV = 1,KLEV
    DO JLON = KIDIA,KFDIA
      PTENDT(JLON,JLEV)= PTENDT(JLON,JLEV)+(ZTHS__(JLON,JLEV)-ZTHSIN_(JLON,JLEV))*ZEXNREFM_(JLON,JLEV)  
      ZTENDT(JLON,JLEV)= ZTENDT(JLON,JLEV)+ZTHS__(JLON,JLEV)-ZTHSIN_(JLON,JLEV)
    ENDDO
  ENDDO
  
  !inversion niveaux tendances des ri et conversion en qi en multipliant par qd
  DO JR=1,NRR
    DO JLEV=1,KLEV
      DO JLON=KIDIA,KFDIA
        PTENDR(JLON,JLEV,JR)=PTENDR(JLON,JLEV,JR)+(ZRS_(JLON,JLEV,JR)-ZRSIN_(JLON,JLEV,JR))*ZQDM(JLON,JLEV)  
      ENDDO
    ENDDO
  ENDDO

  ! Tendances des variables LIMA
  DO JGFL=1,NLIMA
    DO JLEV = 1, KLEV
      DO JLON=KIDIA,KFDIA
        PTENDLIMA(JLON,JLEV,JGFL)=PTENDLIMA(JLON,JLEV,JGFL)+(ZLIMAS_(JLON,JLEV,JGFL)-ZLIMASIN_(JLON,JLEV,JGFL))  
      ENDDO
    ENDDO
  ENDDO

  IF (LINTFLEX) THEN
    !inversion of levels of upper-air precipitation
    DO JR=2,NRR ! no precip for qv
      ZFPR(KIDIA:KFDIA,0,JR)=0._JPRB  ! zero precip at top of atmosphere
      DO JLEV=1,KLEV
        ZFPR(KIDIA:KFDIA,JLEV,JR)=ZPFPR_(KIDIA:KFDIA,JLEV,JR)
      ENDDO
    ENDDO
  ENDIF

  !store cumulative 3D precipitations for mocage      
  IF (LFPREC3D) THEN
    DO JR=2,NRR ! no precip for qv
      DO JLEV=1,KLEV
        DO JLON=KIDIA,KFDIA
          PEZDIAG(JLON,JLEV,4)=PEZDIAG(JLON,JLEV,4)+ZPFPR_(JLON,JLEV,JR)*1000._JPRB*PDT
        ENDDO
      ENDDO
    ENDDO
  ENDIF
  !prints    
  IF(MOD(KSTEP+1,NPRINTFR)==0) THEN
    WRITE(NULOUT,*)'PTENDT en sortie de rain_ice'
    WRITE(NULOUT,*)'ZTHS__ en sortie de rain_ice'
    DO JLEV=1,KLEV
      WRITE(NULOUT,*)PTENDT(NPTP,JLEV),ZTHS__(NPTP,JLEV)
    ENDDO
    WRITE (NULOUT,*)'JLEV  ZTENDQv  ZTZNDQc   ZTENDQr   ZTENDQi' ,'ZTENDQs   ZTENDQg'  
    DO JLEV=1,KLEV
      WRITE(NULOUT,'(I2,X,6E11.4)')JLEV,PTENDR(NPTP,JLEV,1),PTENDR(NPTP,JLEV,2),&
       & PTENDR(NPTP,JLEV,3),PTENDR(NPTP,JLEV,4),PTENDR(NPTP,JLEV,5),PTENDR(NPTP,JLEV,6)  
    ENDDO
    WRITE (NULOUT,*) 'ZSRCS__ et ZNEBMNH_',MAXVAL(ZSRCS__),MAXVAL(ZNEBMNH_) 
  ENDIF
  
  IF (LRDEPOS) THEN
    ISPLITR=NSPLITR
    ! Swapp because IN and OUT will be needed simultaneously
    CALL SWAP_SVM
    CALL ARO_RAINAERO(KFDIA,KLEV,NGFL_EXT,NRR, PDT,ZSVMIN_,ZZZ_,&
     & ZPABSM__(:,1:KLEV),ZTHM__(:,1:KLEV),ZRHODREFM__(:,1:KLEV),&
     & KSTEP+1,ZRM_,ZEVAP_, ISPLITR, ZSVM_           )
    ! return to tendency
    DO JGFL=1,NGFL_EXT
      DO JLEV = 1,KLEV
        DO JLON = KIDIA,KFDIA
          PTENDEXT(JLON,JLEV,JGFL)=PTENDEXT(JLON,JLEV,JGFL)+(ZSVM_(JLON,JLEV,JGFL)-ZSVMIN_(JLON,JLEV,JGFL))*ZINVDT
        ENDDO
      ENDDO
    ENDDO
  ENDIF ! LRDEPOS

ENDIF ! LMICRO

! start LHN F.Meier 2020 ******

LNUDGLHNREAD=.TRUE.
IF(MYPROC==1.AND.KSTEP==1.AND.LNUDGLH)THEN
  CALL NUDGLHCLIMPROF(KLEV,LNUDGLHNREAD)
ENDIF
! save accumulated precipitation for LHN
IF (LNUDGLH.AND.KSTEP == NSTARTNUDGLH.AND.NSTARTNUDGLH > 0) THEN
  !IF(MYPROC==1) WRITE(NULOUT,*)'save precip for LHN - STEP:',KSTEP, &
  !  & 'NUDGINGINT:',NINTNUDGLH,'NSTARTNUDGLH:',NSTARTNUDGLH
  CALL NUDGLHPRECIP(KIDIA,KFDIA,KLON,ZACPRR_(KIDIA:KFDIA),&
         & ZACPRS_(KIDIA:KFDIA),ZACPRG_(KIDIA:KFDIA),KBL)
ENDIF
ISTEP=KSTEP-NSTARTNUDGLH
! if LNUDGLH and KSTEP in nudging interval
IF (LNUDGLH.AND.KSTEP > NSTARTNUDGLH.AND.KSTEP <= NSTOPNUDGLH) THEN
  ! safe LH profile for step before LHN step
  LLHN=.FALSE.
  IF(MOD(ISTEP+1,NINTNUDGLH)==0) THEN
    CALL NUDGLHPREP(KIDIA,KFDIA,KLON,KLEV,ZTENDT,KBL)
  ENDIF
  ! LHN step
  IF(MOD(ISTEP,NINTNUDGLH)==0) THEN
    !IF(MYPROC==1) WRITE(NULOUT,*)'LH nudging applied - STEP:',KSTEP, &
    !  & 'NUDGINGINT:',NINTNUDGLH
    ! get index for correctly reading observation from array
    ! first two indices are reserved for other LHN stuff
    JLHSTEP=NINT(1.0_JPRB*ISTEP/(NTIMESPLITNUDGLH*NINTNUDGLH))+2
    !IF(MYPROC==1) WRITE(NULOUT,*)'observation array:',JLHSTEP
    ! call nudging routine to modify LHN profile where necessary
    CALL NUDGLH(NGPTOT,NPROMA,NGPBLKS,KIDIA,KFDIA,KLON,KLEV,ZACPRR_(KIDIA:KFDIA),&
       & ZACPRS_(KIDIA:KFDIA),ZACPRG_(KIDIA:KFDIA),&
       & ZTENDT(KIDIA:KFDIA,1:KLEV),JLHSTEP,KBL,&
       & ZEXNREFM_(KIDIA:KFDIA,1:KLEV),.TRUE.,&
       & LLHN(KIDIA:KFDIA,1:KLEV),ZPABSM__(KIDIA:KFDIA,1:KLEV),ZDT,&
       & ZTHM__(KIDIA:KFDIA,1:KLEV),ZRM_(KIDIA:KFDIA,1:KLEV,:),&
       & ZQDM(KIDIA:KFDIA,1:KLEV),PTENDR(KIDIA:KFDIA,1:KLEV,1),NRR,LNUDGLHNREAD)
    !IF(MYPROC==1) WRITE(NULOUT,*)'calling LH successful - convert TH to T and
    !add temperature tendency'
    ! add LHN tendency to physics tendency, limit LHN tendency
    ZMAXTEND=0.0_JPRB
    ZMINTEND=0.0_JPRB
    DO JLEV = 1,KLEV
      DO JLON = KIDIA,KFDIA
        IF(LLHN(JLON,JLEV))THEN
          ZTENDT(JLON,JLEV)=MAX(ZTENDT(JLON,JLEV),RMINNUDGLH)
          ZTENDT(JLON,JLEV)=MIN(ZTENDT(JLON,JLEV),RMAXNUDGLH)
          PTENDT(JLON,JLEV)=PTENDT(JLON,JLEV)+ZTENDT(JLON,JLEV)*&
           & RAMPLIFY*ZEXNREFM_(JLON,JLEV)
          ZMINTEND=MIN(ZTENDT(JLON,JLEV),ZMINTEND)
          ZMAXTEND=MAX(ZTENDT(JLON,JLEV),ZMAXTEND)
          ! keep RH constant if LNUDGLHCOMPT=T
          IF(PTM(JLON,JLEV)>0.01_JPRB.AND.LNUDGLHCOMPT)THEN
            PTENDR(JLON,JLEV,1)=PTENDR(JLON,JLEV,1)+RLVTT/RV/((PTM(JLON,JLEV))**2._JPRB)* &
            & ZTENDT(JLON,JLEV)*RAMPLIFY*ZEXNREFM_(JLON,JLEV)*ZQSAT(JLON,JLEV)
          ENDIF
        ENDIF
      ENDDO
    ENDDO
    !IF(ZMINTEND<-0.01)WRITE(*,*)'ZMINTEND',ZMINTEND
    !IF(ZMAXTEND>0.01)WRITE(*,*)'ZMAXTEND',ZMAXTEND
    ! write LH profiles to array to save it for next time step
    CALL NUDGLHPREP(KIDIA,KFDIA,KLON,KLEV,ZTENDT,KBL)
    IF(MYPROC==1) WRITE(NULOUT,*)'calling LH successful finished'
    ! use LHN factor again on following time steps depending on NTAUNUDGLH
  ELSEIF(MOD(ISTEP,NINTNUDGLH)<NTAUNUDGLH.AND.MOD(ISTEP,NINTNUDGLH)>0 &
      & .AND.ISTEP>NINTNUDGLH) THEN
    IF(MYPROC==1)THEN
      WRITE(NULOUT,*)'LH nudging applied-STEP:',KSTEP,'NUDGINGINT:',NINTNUDGLH
      WRITE(NULOUT,*)'NTAUNUDGLH:',NTAUNUDGLH
    ENDIF
    ! get index for reading correctly most recent obs
    JLHSTEP=2+NINT(1.0_JPRB*(ISTEP-MOD(ISTEP,NINTNUDGLH))/(NTIMESPLITNUDGLH*NINTNUDGLH))
    !IF(MYPROC==1) WRITE(NULOUT,*)'observation array:',JLHSTEP
    ! call nudging routine to modify LHN profile where necessary
    ! LHN factor is not recalculated but might be damped by RDAMPNUDGLH
    CALL NUDGLH(NGPTOT,NPROMA,NGPBLKS,KIDIA,KFDIA,KLON,KLEV,ZACPRR_(KIDIA:KFDIA),&
        & ZACPRS_(KIDIA:KFDIA),ZACPRG_(KIDIA:KFDIA),&
        & ZTENDT(KIDIA:KFDIA,1:KLEV),JLHSTEP,KBL,&
        & ZEXNREFM_(KIDIA:KFDIA,1:KLEV),.FALSE.,&
        & LLHN(KIDIA:KFDIA,1:KLEV),ZPABSM__(KIDIA:KFDIA,1:KLEV),ZDT,&
        & ZTHM__(KIDIA:KFDIA,1:KLEV),ZRM_(KIDIA:KFDIA,1:KLEV,:),&
        & ZQDM(KIDIA:KFDIA,1:KLEV),PTENDR(KIDIA:KFDIA,1:KLEV,1),NRR,LNUDGLHNREAD)
    !IF(MYPROC==1) WRITE(NULOUT,*)'calling LH successful - convert TH to T and
    !add temperature tendency'
    ! add LHN tendency to physics tendency, limit LHN tendency
    DO JLEV = 1,KLEV
      DO JLON = KIDIA,KFDIA
        IF(LLHN(JLON,JLEV))THEN
          ZTENDT(JLON,JLEV)=MAX(ZTENDT(JLON,JLEV),RMINNUDGLH)
          ZTENDT(JLON,JLEV)=MIN(ZTENDT(JLON,JLEV),RMAXNUDGLH)
          PTENDT(JLON,JLEV)= PTENDT(JLON,JLEV)+ZTENDT(JLON,JLEV)*&
           & RAMPLIFY*ZEXNREFM_(JLON,JLEV)
          ZMINTEND=MIN(ZTENDT(JLON,JLEV),ZMINTEND)
          ZMAXTEND=MAX(ZTENDT(JLON,JLEV),ZMAXTEND)
          ! keep RH constant if LNUDGLHCOMPT=T
          IF(PTM(JLON,JLEV)>0.01_JPRB.AND.LNUDGLHCOMPT)THEN
             PTENDR(JLON,JLEV,1)=PTENDR(JLON,JLEV,1)+RLVTT/RV/((PTM(JLON,JLEV))**2._JPRB)*&
              & ZTENDT(JLON,JLEV)*RAMPLIFY*ZEXNREFM_(JLON,JLEV)*ZQSAT(JLON,JLEV)
          ENDIF
        ENDIF
      ENDDO
    ENDDO
    !IF(ZMAXTEND>0.01) WRITE(*,*)'ZMAXTEND',ZMAXTEND
    !IF(ZMINTEND<-0.01) WRITE(*,*)'ZMINTEND',ZMINTEND
    ! write LHN profiles to array for next timestep
    CALL NUDGLHPREP(KIDIA,KFDIA,KLON,KLEV,ZTENDT,KBL)
    IF(MYPROC==1) WRITE(NULOUT,*)'calling LH successful finished'
  ENDIF
ENDIF
! **end latent heat nudging***********

    
!    ------------------------------------------------------------------
!     11 - SAVE FIELDS FOR EXT. SURFACE.
!     --------------------------------------------------------------------
!    Cette partie n'est plus necessaire apres branchement de la physique 
!    de surface sous apl_arome

!    ------------------------------------------------------------------
!     12 - CALL CHEMICAL SCHEME.
!     --------------------------------------------------------------------
IF (LUSECHEM) THEN

  ! ANNEE
  IYEAR = NINDAT / 10000
  ! MOIS
  IMONTH = (NINDAT - 10000*IYEAR ) / 100
  ! JOUR DU MOIS
  IDAY = NINDAT - 10000*IYEAR - 100*IMONTH

  DO JLON = KIDIA,KFDIA
    ZLAT_(JLON) = 180. * ASIN(PGEMU(JLON)) / (2.*ASIN(1.))
    ZLON_(JLON) = 180. * PGELAM(JLON) / (2.*ASIN(1.))
    ZZENITH_(JLON) = ACOS( PMU0(JLON) )
    ZZS_(JLON)=POROG(JLON)/RG
    ZALB_UV_(JLON)=ZALBP(JLON,1)
  ENDDO

  ! Swapp because IN and OUT will be needed simultaneously
  CALL SWAP_SVS

  DO JGFL=1,NGFL_EXT
    DO JLEV=1,KLEV
      DO JLON= KIDIA,KFDIA
        ! modify input
        ZSVSIN_(JLON,JLEV,JGFL)=MAX(0.0_JPRB, ZSVSIN_(JLON,JLEV,JGFL))
      ENDDO
    ENDDO
  ENDDO
  IEZDIAG_CHEM=NGFL_EZDIAG-IOFF_MFSHAL+1
  CALL ARO_MNHC(ZSVSIN_,&
   & ZRHODREFM__(:,1:KLEV),PDT, ZTHM__(:,1:KLEV), ZPABSM__(:,1:KLEV), ZRM_, ZLAT_, ZLON_, ZALB_UV_, &
   & ZZS_, ZZENITH_,ZZZ_, IYEAR,IMONTH,IDAY, REAL(RHGMT,JPRB)+PDT/2._JPRB,&
   & KFDIA,KLEV,NGFL_EXT, NRR, KSTEP+1,NULOUT,IEZDIAG_CHEM, ZPEZDIAG_(:,:,IOFF_MFSHAL:NGFL_EZDIAG),ZSVS_ )
 
  PEZDIAG(KIDIA:KFDIA,1:KLEV,IOFF_MFSHAL:NGFL_EZDIAG)=ZPEZDIAG_(KIDIA:KFDIA,1:KLEV,IOFF_MFSHAL:NGFL_EZDIAG)

  !inversion niveau de la tendance des scalaires passifs
  DO JGFL=1,NGFL_EXT
    DO JLEV = 1,KLEV
      DO JLON = KIDIA,KFDIA
        PTENDEXT(JLON,JLEV,JGFL)=PTENDEXT(JLON,JLEV,JGFL)+(ZSVS_(JLON,JLEV,JGFL)-ZSVSIN_(JLON,JLEV,JGFL))
      ENDDO
    ENDDO
  ENDDO

ENDIF ! LUSECHEM

!    ------------------------------------------------------------------
!     13 - STOCHASTIC PHYSICS : PERTURB TENDENCIES
!     -----------------------------------------------------------------

IF(YSPPT_CONFIG%LSPSDT) THEN

  ZDUMMY(KIDIA:KFDIA,1:KLEV)=0.0_JPRB               ! Dummy nonphys tendency for compatibility with ecmwf stochphy
  CALL SPPTEN (YDMODEL%YRML_PHY_EC%YRECLDP,YGFL, &
   & KIDIA,KFDIA,KLON,KLEV,1,PDT,         &  ! In: block indices, physicstimestep
   & PTSL=PTM,PQSL=PQVM, PA=PCLFS, PAP=PAPRSFM, PAPH=PAPRSM,   &  ! In: (T,Q,cloud) forsupersatcheck, Pfull, Phalf
   & PDYN_U=ZDUMMY,PDYN_V=ZDUMMY,PDYN_T=ZDUMMY,PDYN_Q=ZDUMMY,  &  ! In: dummy nonphys tendencies
   & PUNP_U=PTENDU,PUNP_V=PTENDV,PUNP_T=PTENDT,PUNP_Q=PTENDR(:,:,1), &  ! In: (u,v,t,qv) tendencies to perturb
   & PMULNOISE=PGP2DSDT(1,1,1),                           &  ! In: stochphy 3D random multiplicative pattern (less one)
   & PTENU=PTENDU,PTENV=PTENDV,PTENT=PTENDT,PTENQ=PTENDR(:,:,1) )    ! Out: (u,v,t,qv) total perturbed tendencies
ENDIF

IF(LFORCENL.AND.(KSTEP*(TSPHY/RHOUR)>=NFORCESTART).AND.&
              & (KSTEP*(TSPHY/RHOUR)<=NFORCEEND)) THEN
  DO JLEV=1,KLEV
    DO JLON=KIDIA,KFDIA
      PTENDU(JLON,JLEV)=PTENDU(JLON,JLEV)+AMAGSTOPH_CASBS*PFORCEU(JLON,JLEV)
      PTENDV(JLON,JLEV)=PTENDV(JLON,JLEV)+AMAGSTOPH_CASBS*PFORCEV(JLON,JLEV)
      PTENDT(JLON,JLEV)=PTENDT(JLON,JLEV)+AMAGSTOPH_CASBS*PFORCET(JLON,JLEV)
      PTENDR(JLON,JLEV,1)=PTENDR(JLON,JLEV,1)+AMAGSTOPH_CASBS*PFORCEQ(JLON,JLEV)
    ENDDO
  ENDDO
ENDIF

!    ------------------------------------------------------------------
!     14 - FINAL CALCULATIONS.
!     --------------------------------------------------------------------

!forcage pour declencher la ligne de grain 
IF (LSQUALL) THEN
  IF (LTWOTL) THEN
    ZDT2=2*ZDT
  ELSE
    ZDT2=ZDT
  ENDIF
  IF((KSTEP+1)*ZDT2 < 600._JPRB) THEN
    WRITE(NULOUT, *)'refroidissement impose de',NREFROI1,' a ',NREFROI2
    DO JLEV=KLEV,KLEV-20,-1
      PTENDT(NREFROI1:NREFROI2,JLEV)=-0.01_JPRB
    ENDDO
  ENDIF
ENDIF


!ecriture du buffer
IF(LLMSE.OR.LSFORCS) THEN
  DO JLON = KIDIA,KFDIA
    PGPAR(JLON,MINPRR)=ZINPRR_(JLON)+ZSURFPREP(JLON)/1000._JPRB
    PGPAR(JLON,MINPRS)=ZINPRS_(JLON)+ZSURFSNOW(JLON)/1000._JPRB
    PGPAR(JLON,MINPRG)=ZINPRG_(JLON)+ZINPRH_(JLON)
    PGPAR(JLON,MACPRR)=PGPAR(JLON,MACPRR)+(ZINPRR_(JLON)+ZSURFPREP(JLON)/1000._JPRB)*PDT
    PGPAR(JLON,MACPRS)=PGPAR(JLON,MACPRS)+(ZINPRS_(JLON)+ZSURFSNOW(JLON)/1000._JPRB)*PDT
    PGPAR(JLON,MACPRG)=PGPAR(JLON,MACPRG)+(ZINPRG_(JLON)+ZINPRH_(JLON))*PDT
  ENDDO
  PGPAR(KIDIA:KFDIA,MVTS)=ZTSURF(KIDIA:KFDIA)
  PGPAR(KIDIA:KFDIA,MVEMIS)=ZEMIS(KIDIA:KFDIA)
  PGPAR(KIDIA:KFDIA,MVQS)=ZQS(KIDIA:KFDIA)
  DO JSW=1,NSW
    PGPAR(KIDIA:KFDIA,MALBDIR-1+JSW)=ZALBP(KIDIA:KFDIA,JSW)
    PGPAR(KIDIA:KFDIA,MALBSCA-1+JSW)=ZALBD(KIDIA:KFDIA,JSW)
  ENDDO
ENDIF

IF (LMUSCLFA) CALL ECR1D(NMUSCLFA,'PCLCT_apl',PCLCT,1,KLON)
! initialisations for CFU for Rainfalls
DO JLEV = 0,KLEV
  DO JLON = KIDIA,KFDIA
    ! conversion from m/s in mm/s
    PFPLSL(JLON,JLEV)= ZINPRR_(JLON)*1000._JPRB+ZSURFPREP(JLON)
    PFPLSN(JLON,JLEV)= ZINPRS_(JLON)*1000._JPRB+ZSURFSNOW(JLON)
    PFPLSG(JLON,JLEV)= ZINPRG_(JLON)*1000._JPRB
    PFPLSH(JLON,JLEV)= ZINPRH_(JLON)*1000._JPRB
    ! conversion in correct Unit for BADP (same as ALADIN)
    PSTRTU(JLON,JLEV)= ZSFU_(JLON)*ZRHODREFM__(JLON,IKB) 
    PSTRTV(JLON,JLEV)= ZSFV_(JLON)*ZRHODREFM__(JLON,IKB) 
  ENDDO
ENDDO
!Hail diagnostic
PDIAGH(KIDIA:KFDIA)=0._JPRB
IF (LXXDIAGH) THEN
  DO JLEV=1,KLEV
    DO JLON=KIDIA,KFDIA
      PDIAGH(JLON)=PDIAGH(JLON)+ZQGM(JLON,JLEV)*PDELPM(JLON,JLEV)*ZINVG
    ENDDO
  ENDDO
ENDIF
! lightening density
IF (LFLASH) THEN
  IF (KSTEP==0) PFLASH=0._JPRB

  CALL DIAGFLASH(YDCFU,KIDIA,KFDIA,KLON,KLEV,KSTEP,&
    &ZQCM,ZQIM,ZQRM,ZQSM,ZQGM,ZQHM,&
    &PDELPM,ZTM,PWM,PLSM,PFLASH)
ENDIF
!!! modif pour LMSE non activee
IF (LLMSE) THEN
  DO JLEV=1,KSGST+1
    DO JLON = KIDIA,KFDIA
      PFCS(JLON,JLEV)=-ZSFTH_(JLON)*ZRHODREFM__(JLON,IKB)*RCPD
      PFCLL(JLON,JLEV) = PFCLL(JLON,JLEV)*ZRHODREFM__(JLON,IKB)
      PFCLN(JLON,JLEV) = PFCLN(JLON,JLEV)*ZRHODREFM__(JLON,IKB)
      PFEVL(JLON,JLEV) = PFEVL(JLON,JLEV)*ZRHODREFM__(JLON,IKB)
      PFEVN(JLON,JLEV) = PFEVN(JLON,JLEV)*ZRHODREFM__(JLON,IKB)
    ENDDO
  ENDDO
ENDIF
IF (LSFORCS) THEN
  DO JLEV=1,KSGST+1
    DO JLON = KIDIA,KFDIA
      PFCS(JLON,JLEV)=-ZSFTH_(JLON)*ZRHODREFM__(JLON,IKB)*RCPD
      ZDELTA=MAX(0.0_JPRB,SIGN(1.0_JPRB,RTT-ZTSURF(JLON)))
      PFCLL(JLON,JLEV)=-ZSFRV_(JLON)*ZRHODREFM__(JLON,IKB)* FOLH (ZTSURF(JLON),0._JPRB)*(1.0_JPRB-ZDELTA)
      PFCLN(JLON,JLEV)=-ZSFRV_(JLON)*ZRHODREFM__(JLON,IKB)* FOLH (ZTSURF(JLON),0._JPRB)*ZDELTA
    ENDDO
  ENDDO
ENDIF  

DO JSG  = 1, KSGST+1
  DO JLEV = 0, KLEV
    DO JLON = KIDIA, KFDIA
      PFRTH(JLON,JLEV,JSG)=PFRTH(JLON,JLEV,JSG)+ZBUDTH_(JLON)
    ENDDO
  ENDDO
ENDDO

! daand: radflex
IF (LINTFLEX) THEN
  ! account for radiation separately
  LLRAD=.NOT.LRADFLEX
    
  CALL APL_AROME2INTFLEX(YGFL,YDPARAR,YDPHY,KLON,KIDIA,KFDIA,KLEV, PDT,&
   & PRDELPM, PUM, PVM, PTM, PGPAR(1,MVTS), PCPM,&
   & ZFPR,&! precipitation fluxes
   & LLRAD, PFRTH, PFRSO,&! radiative fluxes
   & PTENDU, PTENDV, PTENDT,&! momentum and temperature tendencies
   & PTENDR, PTENDTKE, PTENDEXT,&! total gfl tendencies
   & YDPROCSET)
ENDIF


! Precipitation Type

! Compute wet-bulb temperature at 2 meters (suppose homogeneity of qv/ql/qi )
!ZPCLS(KIDIA:KFDIA)=PAPRSM(KIDIA:KFDIA,KLEV)-2._JPRB/ZZZF(KIDIA:KFDIA,1,KLEV)*&
!                 &(PAPRSM(KIDIA:KFDIA,KLEV)-PAPRSFM(KIDIA:KFDIA,KLEV))

CALL PPWETPOINT(YDPHY,KIDIA,KFDIA,KLON,PAPRSM(:,KLEV),PTCLS,&
  & PQCLS,ZQCM(:,KLEV),ZQIM(:,KLEV),PTPWCLS)

IF (LDPRECIPS.OR.LDPRECIPS2) THEN

  !initialisation de ZDZZ
  DO JLON = KIDIA,KFDIA
    ZDZZ(JLON,1)=ZAPHIM(JLON,0)*ZINVG-ZZZ_(JLON,1)
  ENDDO
  DO JLEV = 2, KLEV
    DO JLON = KIDIA,KFDIA
      ZDZZ(JLON,JLEV)=ZZZ_(JLON,JLEV+IKL)-ZZZ_(JLON,JLEV)
    ENDDO
  ENDDO


  ! Compute wet-bulb temperature
  DO JLEV=1,KLEV
      CALL PPWETPOINT(YDPHY,KIDIA,KFDIA,KLON,PAPRSFM(:,JLEV),ZTM(:,JLEV),&
       & ZQVM(:,JLEV),ZQCM(:,JLEV),ZQIM(:,JLEV),ZTPW(:,JLEV))
  ENDDO

  IF (LDPRECIPS) THEN
   ! Defined precipitation type 
   !
   NDTPRECCUR=INT(MOD(ZSTATI/TSTEP,REAL(NDTPREC)))+1_JPIM
   !PDPRECIPS(:,NDTPRECCUR)=HUGE(1._JPRB)
   PDPRECIPS(:,NDTPRECCUR)=0._JPRB

   !WRITE(NULOUT,*)'sous apl_arome NDTPRECCUR=',NDTPRECCUR,NDTPREC
   CALL DPRECIPS(YDPRECIPS,KIDIA,KFDIA,KLON,KLEV,POROG,PTPWCLS,PDIAGH,PAPHIFM,&
      & ZDZZ,ZTPW,ZQCM,PFPLSL(:,KLEV),PFPLSN(:,KLEV),PFPLSG(:,KLEV),PDPRECIPS(:,NDTPRECCUR))
  ENDIF

  IF (LDPRECIPS2) THEN

   !Idem for an other time step and an other period
   NDTPRECCUR2=INT(MOD(ZSTATI/TSTEP,REAL(NDTPREC2)))+1_JPIM
   PDPRECIPS2(:,NDTPRECCUR2)=0._JPRB

   CALL DPRECIPS(YDPRECIPS,KIDIA,KFDIA,KLON,KLEV,POROG,PTPWCLS,PDIAGH,PAPHIFM,&
      & ZDZZ,ZTPW,ZQCM,PFPLSL(:,KLEV),PFPLSN(:,KLEV),PFPLSG(:,KLEV),PDPRECIPS2(:,NDTPRECCUR2))

  ENDIF

ENDIF



!     --------------------------------------------------------------------------
END ASSOCIATE
END ASSOCIATE
IF (LHOOK) CALL DR_HOOK('APL_AROME',1,ZHOOK_HANDLE)

CONTAINS

SUBROUTINE SWAP_THS
IF (LLSWAP_THS) THEN
  ZTHSIN_ => ZTHSAVE__(:,1:KLEV)
  ZTHS__ => ZTHSWAP__
ELSE
  ZTHSIN_ => ZTHSWAP__(:,1:KLEV)
  ZTHS__ => ZTHSAVE__
ENDIF
LLSWAP_THS=.NOT.LLSWAP_THS
END SUBROUTINE SWAP_THS

SUBROUTINE SWAP_RS
IF (LLSWAP_RS) THEN
  ZRSIN_ => ZRSAVE_
  ZRS_   => ZRSWAP_
ELSE
  ZRSIN_ => ZRSWAP_
  ZRS_   => ZRSAVE_
ENDIF
LLSWAP_RS=.NOT.LLSWAP_RS
END SUBROUTINE SWAP_RS

SUBROUTINE SWAP_SVS
IF (LLSWAP_SVS) THEN
  ZSVSIN_ => ZSVSAVE_
  ZSVS_   => ZSVSWAP_
ELSE
  ZSVSIN_ => ZSVSWAP_
  ZSVS_   => ZSVSAVE_
ENDIF
LLSWAP_SVS=.NOT.LLSWAP_SVS
END SUBROUTINE SWAP_SVS

SUBROUTINE SWAP_SVM
IF (LLSWAP_SVM) THEN
  ZSVMIN_ => ZSVMSAVE_
  ZSVM_   => ZSVMSWAP_
ELSE
  ZSVMIN_ => ZSVMSWAP_
  ZSVM_   => ZSVMSAVE_
ENDIF
LLSWAP_SVM=.NOT.LLSWAP_SVM
END SUBROUTINE SWAP_SVM

SUBROUTINE SWAP_LIMAS
IF (LLSWAP_LIMAS) THEN
  ZLIMASIN_ => ZLIMASAVE_
  ZLIMAS_   => ZLIMASWAP_
ELSE
  ZLIMASIN_ => ZLIMASWAP_
  ZLIMAS_   => ZLIMASAVE_
ENDIF
LLSWAP_LIMAS=.NOT.LLSWAP_LIMAS
END SUBROUTINE SWAP_LIMAS

END SUBROUTINE APL_AROME