Ignore:
Timestamp:
Sep 20, 2006, 12:12:39 PM (18 years ago)
Author:
Laurent Fairhead
Message:

Nouvelles versions de la dynamique YM
LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/branches/V3_test/libf/dyn3dpar/advtrac_p.F

    r630 r709  
    44c
    55c
    6 #ifdef INCA_CH4
     6#ifdef INCA
    77      SUBROUTINE advtrac_p(pbaru,pbarv ,
    88     *                   p,  masse,q,iapptrac,teta,
     
    2525c
    2626      USE parallel
     27      USE Write_Field_p
    2728      USE Bands
    2829      USE mod_hallo
     
    5657      REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm)
    5758      REAL pk(ip1jmp1,llm)
    58 #ifdef INCA_CH4
     59#ifdef INCA
    5960cym      INTEGER            :: hadv_flg(nq)
    6061         INTEGER            :: hadv_flg(nqmx)
     
    7071      REAL pbaruc(ip1jmp1,llm),pbarvc(ip1jm,llm)
    7172      REAL massem(ip1jmp1,llm),zdp(ip1jmp1)
    72       REAL pbarug(ip1jmp1,llm),pbarvg(ip1jm,llm),wg(ip1jmp1,llm)
     73      REAL,SAVE::pbarug(ip1jmp1,llm),pbarvg(ip1jm,llm),wg(ip1jmp1,llm)
    7374      REAL (kind=kind(1.d0)) :: t_initial, t_final, tps_cpu
    7475      real cpuadv(nqmx)
     
    7879      INTEGER ij,l,iq,iiq
    7980      REAL zdpmin, zdpmax
    80       EXTERNAL  minmax
    8181      SAVE iadvtr, massem, pbaruc, pbarvc
    8282      DATA iadvtr/0/
     83c$OMP THREADPRIVATE(iadvtr)
    8384c----------------------------------------------------------
    8485c     Rajouts pour PPM
     
    9899      integer ijb,ije,ijb_u,ijb_v,ije_u,ije_v,j
    99100      type(Request) :: Request_vanleer
    100       REAL p_tmp( ip1jmp1,llmp1 )
    101       REAL teta_tmp(ip1jmp1,llm)
    102       REAL pk_tmp(ip1jmp1,llm)
     101      REAL,SAVE :: p_tmp( ip1jmp1,llmp1 )
     102      REAL,SAVE :: teta_tmp(ip1jmp1,llm)
     103      REAL,SAVE :: pk_tmp(ip1jmp1,llm)
    103104     
    104105      ijb_u=ij_begin
     
    113114c         CALL initial0(ijp1llm,pbaruc)
    114115c         CALL initial0(ijmllm,pbarvc)
    115          
    116           pbaruc(ijb_u:ije_u,:)=0.
    117           pbarvc(ijb_v:ije_v,:)=0.
    118          
     116c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
     117        DO l=1,llm   
     118          pbaruc(ijb_u:ije_u,l)=0.
     119          pbarvc(ijb_v:ije_v,l)=0.
     120        ENDDO
     121c$OMP END DO NOWAIT 
    119122      ENDIF
    120123
    121124c   accumulation des flux de masse horizontaux
     125c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    122126      DO l=1,llm
    123127         DO ij = ijb_u,ije_u
     
    128132         ENDDO
    129133      ENDDO
     134c$OMP END DO NOWAIT
    130135
    131136c   selection de la masse instantannee des mailles avant le transport.
     
    136141          ije=ij_end
    137142
    138           massem(ijb:ije,:)=masse(ijb:ije,:)
     143c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     144       DO l=1,llm
     145          massem(ijb:ije,l)=masse(ijb:ije,l)
     146       ENDDO
     147c$OMP END DO NOWAIT
     148
    139149ccc         CALL filtreg ( massem ,jjp1, llm,-2, 2, .TRUE., 1 )
    140150c
     
    142152
    143153      iadvtr   = iadvtr+1
     154
     155c$OMP MASTER
    144156      iapptrac = iadvtr
    145 
     157c$OMP END MASTER
    146158
    147159c   Test pour savoir si on advecte a ce pas de temps
    148      
     160
    149161      IF ( iadvtr.EQ.iapp_tracvl ) THEN
     162c$OMP MASTER
    150163        call suspend_timer(timer_caldyn)
     164c$OMP END MASTER
    151165     
    152166      ijb=ij_begin
    153167      ije=ij_end
    154168     
     169
     170cc   ..  Modif P.Le Van  ( 20/12/97 )  ....
     171cc
     172
     173c   traitement des flux de masse avant advection.
     174c     1. calcul de w
     175c     2. groupement des mailles pres du pole.
     176
     177c$OMP BARRIER
     178        CALL groupe_p( massem, pbaruc,pbarvc, pbarug,pbarvg,wg )
     179c$OMP BARRIER
     180
     181c$OMP BARRIER
     182c$OMP MASTER     
    155183      p_tmp(ijb:ije,1:llmp1)=p(ijb:ije,1:llmp1)
    156184      pk_tmp(ijb:ije,1:llm)=pk(ijb:ije,1:llm)
    157185      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 
    169186      call VTb(VTHallo)
    170187      call Register_SwapFieldHallo(pbarug,pbarug,ip1jmp1,llm,
     
    195212      call VTb(VTadvection)
    196213      call start_timer(timer_vanleer)
    197 
    198      
    199 #ifdef INCA_CH4
     214c$OMP END MASTER
     215c$OMP BARRIER
     216     
     217#ifdef INCA
    200218      ! ... Flux de masse diaganostiques traceurs
    201219c      flxw = wg / FLOAT(iapp_tracvl)
     
    211229         if (pole_sud) ije=ij_end-iip1
    212230         
    213          
     231c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)         
    214232         DO l=1,llm-1
    215233            DO ij = ijb+1,ije
     
    241259
    242260         ENDDO
     261c$OMP END DO NOWAIT
    243262
    244263c-------------------------------------------------------------------
     
    253272cym      ----> Revérifier lors de la parallélisation des autres schemas
    254273   
    255           call massbar_p(massem,massebx,masseby)         
    256 
     274cym          call massbar_p(massem,massebx,masseby)         
     275
     276          call vlspltgen_p( q,iadv, 2., massem, wg ,
     277     *                    pbarug,pbarvg,dtvr,p_tmp,pk_tmp,teta_tmp )
     278
     279         
     280          GOTO 1234     
    257281c-----------------------------------------------------------
    258282c     Appel des sous programmes d'advection
     
    309333
    310334            call pentes_ini (q(1,1,iq),wg,massem,pbarug,pbarvg,0)
    311 #ifdef INCA_CH4
     335#ifdef INCA
    312336       do iiq = iq+1, iq+3
    313337         q(:,:,iiq)=q(:,:,iiq)*mmt_adj(:,:,1)
     
    328352           call  prather(q(1,1,iq),wg,massem,pbarug,pbarvg,
    329353     s                     n,dtbon)
    330 #ifdef INCA_CH4
     354#ifdef INCA
    331355       do iiq = iq+1, iq+9
    332356         q(:,:,iiq)=q(:,:,iiq)*mmt_adj(:,:,1)
     
    441465       end DO
    442466
     4671234  CONTINUE
     468c$OMP BARRIER
     469c$OMP MASTER
    443470      ijb=ij_begin
    444471      ije=ij_end
     
    450477       ENDDO
    451478
     479
    452480       CALL qminimum_p( q, 2, finmasse )
    453481
     
    455483c   on reinitialise a zero les flux de masse cumules
    456484c---------------------------------------------------
    457           iadvtr=0
     485c          iadvtr=0
    458486        call VTe(VTadvection)
    459487        call stop_timer(timer_vanleer)
     
    465493        enddo
    466494
    467 #ifdef INCA_CH4
     495#ifdef INCA
    468496       call Register_SwapFieldHallo(flxw,flxw,ip1jmp1,llm,
    469497     *                             jj_nb_caldyn,0,0,Request_vanleer)
     
    475503        call VTe(VThallo)
    476504        call resume_timer(timer_caldyn)
    477        
     505c$OMP END MASTER
     506c$OMP BARRIER   
     507          iadvtr=0
    478508       ENDIF ! if iadvtr.EQ.iapp_tracvl
    479509
Note: See TracChangeset for help on using the changeset viewer.