Ignore:
Timestamp:
Dec 14, 2016, 1:10:32 PM (7 years ago)
Author:
jyg
Message:

New input parameter: nbapp_wk = number of calls to
wake routines per day. If =0, call at every physic
time step.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/physiq_mod.F90

    r2714 r2730  
    139139       kh, kh_x, kh_w, &
    140140       !
     141       wake_k, &
    141142       ale_wake, alp_wake, &
    142143       wake_h, wake_omg, &
     
    564565    !pourquoi y'a pas de save??
    565566    !
    566     INTEGER wake_k(klon)            ! Wake sommet
     567!!!    INTEGER, SAVE, DIMENSION(klon)   :: wake_k
     568!!!    !$OMP THREADPRIVATE(wake_k)
    567569    !
    568570    !jyg<
     
    782784    !ym      SAVE 
    783785    !
    784     INTEGER itapcv
    785     SAVE itapcv
    786     !$OMP THREADPRIVATE(itapcv)
     786    INTEGER itapcv, itapwk
     787    SAVE itapcv, itapwk
     788    !$OMP THREADPRIVATE(itapcv, itapwk)
    787789
    788790    !KE43
     
    12851287       itaprad = 0
    12861288       itapcv = 0
     1289       itapwk = 0
    12871290
    12881291       ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    13131316       ENDIF
    13141317       IF (nbapp_cv .EQ. 0) nbapp_cv=86400./dtime
    1315        print *,'physiq, nbapp_cv ',nbapp_cv
     1318       IF (nbapp_wk .EQ. 0) nbapp_wk=86400./dtime
     1319       print *,'physiq, nbapp_cv, nbapp_wk ',nbapp_cv,nbapp_wk
    13161320       IF (MOD(INT(86400./dtime),nbapp_cv).EQ.0) THEN
    13171321          cvpas = NINT( 86400./dtime/nbapp_cv)
     
    13241328          abort_message='nbre de pas de temps physique n est pas multiple ' &
    13251329               // 'de nbapp_cv'
     1330          call abort_physic(modname,abort_message,1)
     1331       ENDIF
     1332       IF (MOD(INT(86400./dtime),nbapp_wk).EQ.0) THEN
     1333          wkpas = NINT( 86400./dtime/nbapp_wk)
     1334       print *,'physiq, wkpas ',wkpas
     1335       ELSE
     1336          WRITE(lunout,*) 'le nombre de pas de temps physique doit etre un ', &
     1337               'multiple de nbapp_wk'
     1338          WRITE(lunout,*) 'changer nbapp_wk ou alors commenter ce test ', &
     1339               'mais 1+1<>2'
     1340          abort_message='nbre de pas de temps physique n est pas multiple ' &
     1341               // 'de nbapp_wk'
    13261342          call abort_physic(modname,abort_message,1)
    13271343       ENDIF
     
    23172333    IF (prt_level.ge.1) write(lunout,*) 'omega(igout, :) = ', &
    23182334         omega(igout, :)
    2319 
    23202335    !
    23212336    ! Appel de la convection tous les "cvpas"
     
    25742589    !    .              d_u_con, d_v_con)
    25752590
     2591!jyg    Reinitialize proba_notrig and itapcv when convection has been called
     2592    proba_notrig(:) = 1.
    25762593    itapcv = 0
    25772594    ENDIF !  (MOD(itapcv,cvpas).EQ.0)
     2595!
    25782596    itapcv = itapcv+1
    25792597
     
    26402658    IF (iflag_wake>=1) THEN
    26412659       !
    2642        !  Call wakes only when convection has been called
    2643        IF (itapcv .EQ. 1) THEN
    2644        !
    2645        DO k=1,klev
    2646           DO i=1,klon
    2647              dt_dwn(i,k)  = ftd(i,k)
    2648              dq_dwn(i,k)  = fqd(i,k)
    2649              M_dwn(i,k)   = dnwd0(i,k)
    2650              M_up(i,k)    = upwd(i,k)
    2651              dt_a(i,k)    = d_t_con(i,k)/dtime - ftd(i,k)
    2652              dq_a(i,k)    = d_q_con(i,k)/dtime - fqd(i,k)
    2653           ENDDO
    2654        ENDDO
    2655 
    2656        IF (iflag_wake==2) THEN
    2657           ok_wk_lsp(:)=max(sign(1.,wake_s(:)-wake_s_min_lsp),0.)
    2658           DO k = 1,klev
    2659              dt_dwn(:,k)= dt_dwn(:,k)+ &
    2660                   ok_wk_lsp(:)*(d_t_eva(:,k)+d_t_lsc(:,k))/dtime
    2661              dq_dwn(:,k)= dq_dwn(:,k)+ &
    2662                   ok_wk_lsp(:)*(d_q_eva(:,k)+d_q_lsc(:,k))/dtime
    2663           ENDDO
    2664        ELSEIF (iflag_wake==3) THEN
    2665           ok_wk_lsp(:)=max(sign(1.,wake_s(:)-wake_s_min_lsp),0.)
    2666           DO k = 1,klev
     2660       !
     2661       ! Call wakes every "wkpas" step
     2662       !
     2663       IF (MOD(itapwk,wkpas).EQ.0) THEN
     2664          !
     2665          DO k=1,klev
    26672666             DO i=1,klon
    2668                 IF (rneb(i,k)==0.) THEN
    2669                    ! On ne tient compte des tendances qu'en dehors des
    2670                    ! nuages (c'est-\`a-dire a priri dans une region ou
    2671                    ! l'eau se reevapore).
    2672                    dt_dwn(i,k)= dt_dwn(i,k)+ &
    2673                         ok_wk_lsp(i)*d_t_lsc(i,k)/dtime
    2674                    dq_dwn(i,k)= dq_dwn(i,k)+ &
    2675                         ok_wk_lsp(i)*d_q_lsc(i,k)/dtime
    2676                 ENDIF
     2667                dt_dwn(i,k)  = ftd(i,k)
     2668                dq_dwn(i,k)  = fqd(i,k)
     2669                M_dwn(i,k)   = dnwd0(i,k)
     2670                M_up(i,k)    = upwd(i,k)
     2671                dt_a(i,k)    = d_t_con(i,k)/dtime - ftd(i,k)
     2672                dq_a(i,k)    = d_q_con(i,k)/dtime - fqd(i,k)
    26772673             ENDDO
    26782674          ENDDO
    2679        ENDIF
    2680 
    2681        !
    2682        !calcul caracteristiques de la poche froide
    2683        CALL calWAKE (iflag_wake_tend, paprs, pplay, dtime, &
    2684             t_seri, q_seri, omega,  &
    2685             dt_dwn, dq_dwn, M_dwn, M_up,  &
    2686             dt_a, dq_a,  &
    2687             sigd,  &
    2688             wake_deltat, wake_deltaq, wake_s, wake_dens,  &
    2689             wake_dth, wake_h,  &
    2690             wake_pe, wake_fip, wake_gfl,  &
    2691             d_t_wake, d_q_wake,  &
    2692             wake_k, t_x, q_x,  &
    2693             wake_omgbdth, wake_dp_omgb,  &
    2694             wake_dtKE, wake_dqKE,  &
    2695             wake_omg, wake_dp_deltomg,  &
    2696             wake_spread, wake_Cstar, d_deltat_wk_gw,  &
    2697             d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk)
    2698          !
    2699        ENDIF  ! (mod(itapcv,cvpas) .EQ. 1)
     2675         
     2676          IF (iflag_wake==2) THEN
     2677             ok_wk_lsp(:)=max(sign(1.,wake_s(:)-wake_s_min_lsp),0.)
     2678             DO k = 1,klev
     2679                dt_dwn(:,k)= dt_dwn(:,k)+ &
     2680                     ok_wk_lsp(:)*(d_t_eva(:,k)+d_t_lsc(:,k))/dtime
     2681                dq_dwn(:,k)= dq_dwn(:,k)+ &
     2682                     ok_wk_lsp(:)*(d_q_eva(:,k)+d_q_lsc(:,k))/dtime
     2683             ENDDO
     2684          ELSEIF (iflag_wake==3) THEN
     2685             ok_wk_lsp(:)=max(sign(1.,wake_s(:)-wake_s_min_lsp),0.)
     2686             DO k = 1,klev
     2687                DO i=1,klon
     2688                   IF (rneb(i,k)==0.) THEN
     2689                      ! On ne tient compte des tendances qu'en dehors des
     2690                      ! nuages (c'est-\`a-dire a priri dans une region ou
     2691                      ! l'eau se reevapore).
     2692                      dt_dwn(i,k)= dt_dwn(i,k)+ &
     2693                           ok_wk_lsp(i)*d_t_lsc(i,k)/dtime
     2694                      dq_dwn(i,k)= dq_dwn(i,k)+ &
     2695                           ok_wk_lsp(i)*d_q_lsc(i,k)/dtime
     2696                   ENDIF
     2697                ENDDO
     2698             ENDDO
     2699          ENDIF
     2700         
     2701          !
     2702          !calcul caracteristiques de la poche froide
     2703          CALL calWAKE (iflag_wake_tend, paprs, pplay, dtime, &
     2704               t_seri, q_seri, omega,  &
     2705               dt_dwn, dq_dwn, M_dwn, M_up,  &
     2706               dt_a, dq_a,  &
     2707               sigd,  &
     2708               wake_deltat, wake_deltaq, wake_s, wake_dens,  &
     2709               wake_dth, wake_h,  &
     2710               wake_pe, wake_fip, wake_gfl,  &
     2711               d_t_wake, d_q_wake,  &
     2712               wake_k, t_x, q_x,  &
     2713               wake_omgbdth, wake_dp_omgb,  &
     2714               wake_dtKE, wake_dqKE,  &
     2715               wake_omg, wake_dp_deltomg,  &
     2716               wake_spread, wake_Cstar, d_deltat_wk_gw,  &
     2717               d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk)
     2718          !
     2719          !jyg    Reinitialize itapwk when wakes have been called
     2720          itapwk = 0
     2721       ENDIF !  (MOD(itapwk,wkpas).EQ.0)
     2722       !
     2723       itapwk = itapwk+1
    27002724       !
    27012725       !-----------------------------------------------------------------------
     
    27052729       !------------------------------------------------------------------------
    27062730
    2707 !      Increment Wake state variables
     2731       ! Increment Wake state variables
    27082732       IF (iflag_wake_tend .GT. 0.) THEN
    27092733
Note: See TracChangeset for help on using the changeset viewer.