Ignore:
Timestamp:
Jun 4, 2007, 4:13:10 PM (17 years ago)
Author:
Laurent Fairhead
Message:

Merge entre la version V3_conv et le HEAD
YM, JG, LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk/libf/dyn3dpar/advtrac_p.F

    r630 r764  
    44c
    55c
    6 #ifdef INCA_CH4
     6#ifdef INCA
    77      SUBROUTINE advtrac_p(pbaru,pbarv ,
    88     *                   p,  masse,q,iapptrac,teta,
    99     *                  flxw,
    10      *                  pk,
    11      *                  mmt_adj,
    12      *                  hadv_flg)
     10     *                  pk   )
    1311#else
    1412      SUBROUTINE advtrac_p(pbaru,pbarv ,
     
    2523c
    2624      USE parallel
     25      USE Write_Field_p
    2726      USE Bands
    2827      USE mod_hallo
     
    5655      REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm)
    5756      REAL pk(ip1jmp1,llm)
    58 #ifdef INCA_CH4
    59 cym      INTEGER            :: hadv_flg(nq)
    60          INTEGER            :: hadv_flg(nqmx)
    61 cym      REAL               :: mmt_adj(ip1jmp1,llm)
    62        REAL               :: mmt_adj(ip1jmp1,llm,1)
     57#ifdef INCA
    6358       REAL               :: flxw(ip1jmp1,llm)
    6459#endif
     
    7065      REAL pbaruc(ip1jmp1,llm),pbarvc(ip1jm,llm)
    7166      REAL massem(ip1jmp1,llm),zdp(ip1jmp1)
    72       REAL pbarug(ip1jmp1,llm),pbarvg(ip1jm,llm),wg(ip1jmp1,llm)
     67      REAL,SAVE::pbarug(ip1jmp1,llm),pbarvg(ip1jm,llm),wg(ip1jmp1,llm)
    7368      REAL (kind=kind(1.d0)) :: t_initial, t_final, tps_cpu
    7469      real cpuadv(nqmx)
     
    7873      INTEGER ij,l,iq,iiq
    7974      REAL zdpmin, zdpmax
    80       EXTERNAL  minmax
    8175      SAVE iadvtr, massem, pbaruc, pbarvc
    8276      DATA iadvtr/0/
     77c$OMP THREADPRIVATE(iadvtr)
    8378c----------------------------------------------------------
    8479c     Rajouts pour PPM
     
    9893      integer ijb,ije,ijb_u,ijb_v,ije_u,ije_v,j
    9994      type(Request) :: Request_vanleer
    100       REAL p_tmp( ip1jmp1,llmp1 )
    101       REAL teta_tmp(ip1jmp1,llm)
    102       REAL pk_tmp(ip1jmp1,llm)
     95      REAL,SAVE :: p_tmp( ip1jmp1,llmp1 )
     96      REAL,SAVE :: teta_tmp(ip1jmp1,llm)
     97      REAL,SAVE :: pk_tmp(ip1jmp1,llm)
    10398     
    10499      ijb_u=ij_begin
     
    113108c         CALL initial0(ijp1llm,pbaruc)
    114109c         CALL initial0(ijmllm,pbarvc)
    115          
    116           pbaruc(ijb_u:ije_u,:)=0.
    117           pbarvc(ijb_v:ije_v,:)=0.
    118          
     110c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
     111        DO l=1,llm   
     112          pbaruc(ijb_u:ije_u,l)=0.
     113          pbarvc(ijb_v:ije_v,l)=0.
     114        ENDDO
     115c$OMP END DO NOWAIT 
    119116      ENDIF
    120117
    121118c   accumulation des flux de masse horizontaux
     119c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    122120      DO l=1,llm
    123121         DO ij = ijb_u,ije_u
     
    128126         ENDDO
    129127      ENDDO
     128c$OMP END DO NOWAIT
    130129
    131130c   selection de la masse instantannee des mailles avant le transport.
     
    136135          ije=ij_end
    137136
    138           massem(ijb:ije,:)=masse(ijb:ije,:)
     137c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     138       DO l=1,llm
     139          massem(ijb:ije,l)=masse(ijb:ije,l)
     140       ENDDO
     141c$OMP END DO NOWAIT
     142
    139143ccc         CALL filtreg ( massem ,jjp1, llm,-2, 2, .TRUE., 1 )
    140144c
     
    142146
    143147      iadvtr   = iadvtr+1
     148
     149c$OMP MASTER
    144150      iapptrac = iadvtr
    145 
     151c$OMP END MASTER
    146152
    147153c   Test pour savoir si on advecte a ce pas de temps
    148      
     154
    149155      IF ( iadvtr.EQ.iapp_tracvl ) THEN
     156c$OMP MASTER
    150157        call suspend_timer(timer_caldyn)
     158c$OMP END MASTER
    151159     
    152160      ijb=ij_begin
    153161      ije=ij_end
    154162     
     163
     164cc   ..  Modif P.Le Van  ( 20/12/97 )  ....
     165cc
     166
     167c   traitement des flux de masse avant advection.
     168c     1. calcul de w
     169c     2. groupement des mailles pres du pole.
     170
     171c$OMP BARRIER
     172        CALL groupe_p( massem, pbaruc,pbarvc, pbarug,pbarvg,wg )
     173c$OMP BARRIER
     174
     175c$OMP BARRIER
     176c$OMP MASTER     
    155177      p_tmp(ijb:ije,1:llmp1)=p(ijb:ije,1:llmp1)
    156178      pk_tmp(ijb:ije,1:llm)=pk(ijb:ije,1:llm)
    157179      teta_tmp(ijb:ije,1:llm)=teta(ijb:ije,1:llm)
    158      
    159 
    160 cc   ..  Modif P.Le Van  ( 20/12/97 )  ....
    161 cc
    162 
    163 c   traitement des flux de masse avant advection.
    164 c     1. calcul de w
    165 c     2. groupement des mailles pres du pole.
    166 
    167         CALL groupe_p( massem, pbaruc,pbarvc, pbarug,pbarvg,wg )
    168 
    169180      call VTb(VTHallo)
    170181      call Register_SwapFieldHallo(pbarug,pbarug,ip1jmp1,llm,
     
    195206      call VTb(VTadvection)
    196207      call start_timer(timer_vanleer)
    197 
    198      
    199 #ifdef INCA_CH4
     208c$OMP END MASTER
     209c$OMP BARRIER
     210     
     211#ifdef INCA
    200212      ! ... Flux de masse diaganostiques traceurs
    201213c      flxw = wg / FLOAT(iapp_tracvl)
     
    211223         if (pole_sud) ije=ij_end-iip1
    212224         
    213          
     225c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)         
    214226         DO l=1,llm-1
    215227            DO ij = ijb+1,ije
     
    241253
    242254         ENDDO
     255c$OMP END DO NOWAIT
    243256
    244257c-------------------------------------------------------------------
     
    253266cym      ----> Revérifier lors de la parallélisation des autres schemas
    254267   
    255           call massbar_p(massem,massebx,masseby)         
    256 
     268cym          call massbar_p(massem,massebx,masseby)         
     269
     270          call vlspltgen_p( q,iadv, 2., massem, wg ,
     271     *                    pbarug,pbarvg,dtvr,p_tmp,pk_tmp,teta_tmp )
     272
     273         
     274          GOTO 1234     
    257275c-----------------------------------------------------------
    258276c     Appel des sous programmes d'advection
     
    309327
    310328            call pentes_ini (q(1,1,iq),wg,massem,pbarug,pbarvg,0)
    311 #ifdef INCA_CH4
     329#ifdef INCA
    312330       do iiq = iq+1, iq+3
    313          q(:,:,iiq)=q(:,:,iiq)*mmt_adj(:,:,1)
     331         q(:,:,iiq)=q(:,:,iiq)*1
    314332       enddo
    315333#endif
     
    328346           call  prather(q(1,1,iq),wg,massem,pbarug,pbarvg,
    329347     s                     n,dtbon)
    330 #ifdef INCA_CH4
     348#ifdef INCA
    331349       do iiq = iq+1, iq+9
    332          q(:,:,iiq)=q(:,:,iiq)*mmt_adj(:,:,1)
     350         q(:,:,iiq)=q(:,:,iiq)*1
    333351       enddo
    334352#endif
     
    441459       end DO
    442460
     4611234  CONTINUE
     462c$OMP BARRIER
     463c$OMP MASTER
    443464      ijb=ij_begin
    444465      ije=ij_end
     
    450471       ENDDO
    451472
     473
    452474       CALL qminimum_p( q, 2, finmasse )
    453475
     
    455477c   on reinitialise a zero les flux de masse cumules
    456478c---------------------------------------------------
    457           iadvtr=0
     479c          iadvtr=0
    458480        call VTe(VTadvection)
    459481        call stop_timer(timer_vanleer)
     
    465487        enddo
    466488
    467 #ifdef INCA_CH4
     489#ifdef INCA
    468490       call Register_SwapFieldHallo(flxw,flxw,ip1jmp1,llm,
    469491     *                             jj_nb_caldyn,0,0,Request_vanleer)
     
    475497        call VTe(VThallo)
    476498        call resume_timer(timer_caldyn)
    477        
     499c$OMP END MASTER
     500c$OMP BARRIER   
     501          iadvtr=0
    478502       ENDIF ! if iadvtr.EQ.iapp_tracvl
    479503
Note: See TracChangeset for help on using the changeset viewer.