Changeset 774


Ignore:
Timestamp:
Jun 5, 2007, 4:55:21 PM (17 years ago)
Author:
Laurent Fairhead
Message:

Suite du merge entre la version et la HEAD: quelques modifications de
Yann sur le

LF

Location:
LMDZ4/trunk/libf/dyn3dpar
Files:
2 added
15 edited

Legend:

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

    r764 r774  
     1!
     2! $Header$
     3!
    14      SUBROUTINE addfi_p(nq, pdt, leapf, forward,
    25     S          pucov, pvcov, pteta, pq   , pps ,
  • LMDZ4/trunk/libf/dyn3dpar/advect_new_p.F

    r763 r774  
     1!
     2! $Header$
     3!
    14      SUBROUTINE advect_new_p(ucov,vcov,teta,w,massebx,masseby,
    25     &                        du,dv,dteta)
  • LMDZ4/trunk/libf/dyn3dpar/advect_p.F

    r630 r774  
     1!
     2! $Header$
     3!
    14      SUBROUTINE advect_p(ucov,vcov,teta,w,massebx,masseby,du,dv,dteta)
    25      USE parallel
  • LMDZ4/trunk/libf/dyn3dpar/bands.F90

    r764 r774  
    1111    INTEGER,dimension(:),allocatable :: jj_Nb_physic
    1212    INTEGER,dimension(:),allocatable :: jj_Nb_physic_bis
    13     INTEGER,dimension(:),allocatable :: New_klon_para_nb
     13    INTEGER,dimension(:),allocatable :: distrib_phys
    1414 
    1515  contains
     
    2525    allocate(jj_Nb_physic(0:MPI_Size-1))
    2626    allocate(jj_Nb_physic_bis(0:MPI_Size-1))
    27     allocate(New_klon_para_nb(0:MPI_Size-1))
     27    allocate(distrib_phys(0:MPI_Size-1))
    2828 
    2929  end subroutine AllocateBands
    3030 
    31   subroutine InitBands
     31  subroutine Read_distrib
    3232    use parallel
    33     use dimphy
    3433    implicit none
    3534
    36 #include "dimensions90.h"
     35    include "dimensions90.h"
    3736!#include "paramet90.h"   
    3837      integer :: i,j
     
    6766     
    6867        do i=0,mpi_size-1
    69           read (unit_number,*) j,klon_para_nb(i)
     68          read (unit_number,*) j,distrib_phys(i)
    7069        enddo
    7170       
    72         call InitDimphy
    7371        CLOSE(unit_number) 
    7472 
     
    8179        jj_nb_vanleer(:)=jj_nb_caldyn(:)
    8280        jj_nb_dissip(:)=jj_nb_caldyn(:)
     81       
     82        do i=0,mpi_size-1
     83          distrib_phys(i)=(iim*(jjm-1)+2)/mpi_size
     84          IF (i<MOD(iim*(jjm-1)+2,mpi_size)) distrib_phys(i)=distrib_phys(i)+1
     85        enddo
     86      endif
     87 
     88   end subroutine Read_distrib
    8389   
    84       endif
    85    
     90   
     91   SUBROUTINE  Set_Bands
     92     USE parallel
     93     USE mod_phys_lmdz_para, ONLY : jj_para_begin,jj_para_end
     94     IMPLICIT NONE
     95     INCLUDE 'dimensions90.h'   
     96     INTEGER :: i
     97       
    8698      do i=0,mpi_size-1
    8799         jj_nb_vanleer2(i)=(jjm+1)/mpi_size
     
    90102         
    91103      do i=0,MPI_Size-1
    92         jj_Nb_physic(i)=jjphy_para_end(i)-jjphy_para_begin(i)+1
     104        jj_Nb_physic(i)=jj_para_end(i)-jj_para_begin(i)+1
    93105        if (i/=0) then
    94           if (jjphy_para_begin(i)==jjphy_para_end(i-1)) then
     106          if (jj_para_begin(i)==jj_para_end(i-1)) then
    95107            jj_Nb_physic(i-1)=jj_Nb_physic(i-1)-1
    96108          endif
     
    99111     
    100112      do i=0,MPI_Size-1
    101         jj_Nb_physic_bis(i)=jjphy_para_end(i)-jjphy_para_begin(i)+1
     113        jj_Nb_physic_bis(i)=jj_para_end(i)-jj_para_begin(i)+1
    102114        if (i/=0) then
    103           if (jjphy_para_begin(i)==jjphy_para_end(i-1)) then
     115          if (jj_para_begin(i)==jj_para_end(i-1)) then
    104116            jj_Nb_physic_bis(i)=jj_Nb_physic_bis(i)-1
    105117          else
     
    110122      enddo
    111123     
    112       do i=0,MPI_Size-1
    113         New_klon_para_nb(i)=klon_para_nb(i)
    114       enddo
    115        
    116     end subroutine InitBands
     124    end subroutine Set_Bands
     125
    117126
    118127    subroutine AdjustBands_caldyn
    119128      use times
     129      use parallel
    120130      implicit none
    121131
     
    182192    subroutine AdjustBands_vanleer
    183193      use times
     194      use parallel
    184195      implicit none
    185196
     
    247258    subroutine AdjustBands_dissip
    248259      use times
     260      use parallel
    249261      implicit none
    250262
     
    312324    subroutine AdjustBands_physic
    313325      use times
    314       use dimphy
     326      USE mod_phys_lmdz_para, only : klon_mpi_para_nb
     327      USE parallel
    315328      implicit none
    316329
     
    336349      NbTot=0
    337350      do i=0,mpi_size-1
    338         Inc(i)=nint(klon_para_nb(i)*(medium-value(i))/value(i))
     351        Inc(i)=nint(klon_mpi_para_nb(i)*(medium-value(i))/value(i))
    339352        NbTot=NbTot+Inc(i) 
    340353      enddo
     
    355368     
    356369      do i=0,mpi_size-1
    357         New_klon_para_nb(i)=klon_para_nb(i)+inc(i)
     370        distrib_phys(i)=klon_mpi_para_nb(i)+inc(i)
    358371      enddo
    359372     
     
    363376    USE parallel
    364377    implicit none
    365 #include "dimensions90.h"
     378    include "dimensions90.h"
    366379
    367380      integer :: i,j
     
    399412       
    400413        do i=0,mpi_size-1
    401           write (unit_number,*) i,New_klon_para_nb(i)
     414          write (unit_number,*) i,distrib_phys(i)
    402415        enddo
    403416       
  • LMDZ4/trunk/libf/dyn3dpar/calfis_p.F

    r764 r774  
    3636c   .........
    3737      USE dimphy
    38       USE parallel
     38      USE mod_phys_lmdz_para, mpi_root_xx=>mpi_root
     39      USE parallel, ONLY : omp_chunk
     40      USE mod_interface_dyn_phys
    3941      USE Write_Field
    4042      Use Write_field_p
     
    281283c$OMP MASTER             
    282284      do ig0=1,klon
    283         i=Liste_i(ig0)
    284         j=Liste_j(ig0)
     285        i=index_i(ig0)
     286        j=index_j(ig0)
    285287        zpsrf(ig0)=pps(i,j)
    286288      enddo
     
    303305      DO l = 1, llmp1
    304306        do ig0=1,klon
    305           i=Liste_i(ig0)
    306           j=Liste_j(ig0)
     307          i=index_i(ig0)
     308          j=index_j(ig0)
    307309          zplev( ig0,l ) = pp(i,j,l)
    308310        enddo
     
    318320
    319321        do ig0=1,klon
    320           i=Liste_i(ig0)
    321           j=Liste_j(ig0)
     322          i=index_i(ig0)
     323          j=index_j(ig0)
    322324          pksurcp        = ppk(i,j,l) / cpp
    323325          zplay(ig0,l)   = preff * pksurcp ** unskap
     
    338340         DO l=1,llm
    339341           do ig0=1,klon
    340              i=Liste_i(ig0)
    341              j=Liste_j(ig0)
     342             i=index_i(ig0)
     343             j=index_j(ig0)
    342344             zqfi(ig0,l,iq)  = pq(i,j,l,iiq)
    343345           enddo
     
    352354         DO l=1,llm
    353355           do ig0=1,klon
    354              i=Liste_i(ig0)
    355              j=Liste_j(ig0)
     356             i=index_i(ig0)
     357             j=index_j(ig0)
    356358c             pcvgq(ig0,l,iq) = pdq(i,j,l,iq) / pmasse(i,j,l)
    357359           enddo
     
    384386      DO l=1,llm
    385387        do ig0=1,klon
    386            i=Liste_i(ig0)
    387            j=Liste_j(ig0)
     388           i=index_i(ig0)
     389           j=index_j(ig0)
    388390           pvervel(ig0,l) = pw(i,j,l)*g* unsaire(i,j)
    389391        enddo
    390         if (pole_nord) pvervel(1,l)=pw(1,1,l)*g /apoln
    391         if (pole_sud) pvervel(klon,l)=pw(1,jjp1,l)*g/apols
     392        if (is_north_pole) pvervel(1,l)=pw(1,1,l)*g /apoln
     393        if (is_south_pole) pvervel(klon,l)=pw(1,jjp1,l)*g/apols
    392394      ENDDO
    393395c$OMP END DO NOWAIT
     
    400402      kend=klon
    401403     
    402       if (pole_nord) kstart=2
    403       if (pole_sud) kend=klon-1
     404      if (is_north_pole) kstart=2
     405      if (is_south_pole) kend=klon-1
    404406     
    405407c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
    406408      DO l=1,llm
    407409        do ig0=kstart,kend
    408           i=Liste_i(ig0)
    409           j=Liste_j(ig0)
     410          i=index_i(ig0)
     411          j=index_j(ig0)
    410412          if (i==1) then
    411413            zufi(ig0,l)= 0.5 *(  pucov(iim,j,l)/cu(iim,j)
     
    427429      DO l=1,llm
    428430        DO ig0=kstart,kend
    429           i=Liste_i(ig0)
    430           j=Liste_j(ig0)
     431          i=index_i(ig0)
     432          j=index_j(ig0)
    431433          zvfi(ig0,l)= 0.5 *(  pvcov(i,j-1,l)/cv(i,j-1)
    432434     $                       + pvcov(i,j,l)/cv(i,j) )
     
    443445c        V = 1 / pi  *  integrale [ v * sin(long) * d long ]
    444446
    445       if (pole_nord) then
     447      if (is_north_pole) then
    446448c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
    447449        DO l=1,llm
     
    476478c        V = 1 / pi  *  integrale [ v * sin(long) * d long ]
    477479
    478       if (pole_sud) then
     480      if (is_south_pole) then
    479481c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
    480482        DO l=1,llm
     
    504506
    505507
    506       IF (monocpu) THEN
     508      IF (is_sequential) THEN
    507509c
    508510cIM calcul PV a teta=350, 380, 405K
     
    535537c$OMP BARRIER
    536538      if (first_omp) then
    537         klon=klon_omp_nb(omp_rank)
     539        klon=klon_omp
    538540
    539541        allocate(zplev_omp(klon,llm+1))
     
    556558       
    557559           
    558       klon=klon_omp_nb(omp_rank)
    559       offset=klon_omp_begin(omp_rank)-1
     560      klon=klon_omp
     561      offset=klon_omp_begin-1
    560562     
    561563      do l=1,llm+1
     
    577579      enddo
    578580       
    579 
    580581      do i=1,klon
    581582        zphis_omp(i)=zphis(offset+i)
     
    840841        zdvfi2(klon+1:klon+iim,l)=dv_recv(1:iim,l)
    841842 
    842          pdhfi(:,jjphy_begin,l)=0
    843          pdqfi(:,jjphy_begin,l,:)=0
    844          pdufi(:,jjphy_begin,l)=0
    845          pdvfi(:,jjphy_begin,l)=0
     843         pdhfi(:,jj_begin,l)=0
     844         pdqfi(:,jj_begin,l,:)=0
     845         pdufi(:,jj_begin,l)=0
     846         pdvfi(:,jj_begin,l)=0
    846847         
    847          if (.not. pole_sud) then
    848            pdhfi(:,jjphy_end,l)=0
    849            pdqfi(:,jjphy_end,l,:)=0
    850            pdufi(:,jjphy_end,l)=0
    851            pdvfi(:,jjphy_end,l)=0
     848         if (.not. is_south_pole) then
     849           pdhfi(:,jj_end,l)=0
     850           pdqfi(:,jj_end,l,:)=0
     851           pdufi(:,jj_end,l)=0
     852           pdvfi(:,jj_end,l)=0
    852853         endif
    853854     
     
    856857
    857858c$OMP MASTER
    858        pdpsfi(:,jjphy_begin)=0   
    859        if (.not. pole_sud) then
    860          pdpsfi(:,jjphy_end)=0
     859       pdpsfi(:,jj_begin)=0   
     860       if (.not. is_south_pole) then
     861         pdpsfi(:,jj_end)=0
    861862       endif
    862863c$OMP END MASTER
     
    877878      kend=klon
    878879
    879       if (pole_nord) kstart=2
    880       if (pole_sud)  kend=klon-1
     880      if (is_north_pole) kstart=2
     881      if (is_south_pole)  kend=klon-1
    881882
    882883c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     
    885886!!cdir NODEP
    886887        do ig0=kstart,kend
    887           i=Liste_i(ig0)
    888           j=Liste_j(ig0)
     888          i=index_i(ig0)
     889          j=index_j(ig0)
    889890          pdhfi(i,j,l) = cpp * zdtfi(ig0,l) / ppk(i,j,l)
    890891          if (i==1) pdhfi(iip1,j,l) =  cpp * zdtfi(ig0,l) / ppk(i,j,l)
    891892         enddo         
    892893
    893         if (pole_nord) then
     894        if (is_north_pole) then
    894895            DO i=1,iip1
    895896              pdhfi(i,1,l)    = cpp *  zdtfi(1,l)      / ppk(i, 1  ,l)
     
    897898        endif
    898899       
    899         if (pole_sud) then
     900        if (is_south_pole) then
    900901            DO i=1,iip1
    901902              pdhfi(i,jjp1,l) = cpp *  zdtfi(klon,l)/ ppk(i,jjp1,l)
     
    913914!!cdir NODEP
    914915           do ig0=kstart,kend
    915              i=Liste_i(ig0)
    916              j=Liste_j(ig0)
     916             i=index_i(ig0)
     917             j=index_j(ig0)
    917918             pdqfi(i,j,l,iq) = zdqfi(ig0,l,iq)
    918919             if (i==1) pdqfi(iip1,j,l,iq) = zdqfi(ig0,l,iq)
    919920           enddo
    920921           
    921            if (pole_nord) then
     922           if (is_north_pole) then
    922923             do i=1,iip1
    923924               pdqfi(i,1,l,iq)    = zdqfi(1,l,iq)             
     
    925926           endif
    926927           
    927            if (pole_sud) then
     928           if (is_south_pole) then
    928929             do i=1,iip1
    929930               pdqfi(i,jjp1,l,iq) = zdqfi(klon,l,iq)
     
    954955!!cdir NODEP           
    955956             DO ig0=kstart,kend
    956               i=Liste_i(ig0)
    957               j=Liste_j(ig0)
     957              i=index_i(ig0)
     958              j=index_j(ig0)
    958959              pdqfi(i,j,l,iiq) = zdqfi(ig0,l,iq)
    959960              if (i==1) pdqfi(iip1,j,l,iiq) = zdqfi(ig0,l,iq)
    960961            ENDDO
    961962           
    962             IF (pole_nord) then
     963            IF (is_north_pole) then
    963964              DO i=1,iip1
    964965                pdqfi(i,1,l,iiq)    = zdqfi(1,l,iq)
     
    966967            ENDIF
    967968           
    968             IF (pole_sud) then
     969            IF (is_south_pole) then
    969970              DO i=1,iip1
    970971                pdqfi(i,jjp1,l,iiq) = zdqfi(klon,l,iq)
     
    982983!!cdir NODEP
    983984         do ig0=kstart,kend
    984            i=Liste_i(ig0)
    985            j=Liste_j(ig0)
     985           i=index_i(ig0)
     986           j=index_j(ig0)
    986987           
    987988           if (i/=iim) then
     
    997998         enddo
    998999         
    999          if (Pole_nord) then
     1000         if (is_north_pole) then
    10001001           DO i=1,iip1
    10011002            pdufi(i,1,l)    = 0.
     
    10031004         endif
    10041005         
    1005          if (Pole_sud) then
     1006         if (is_south_pole) then
    10061007           DO i=1,iip1
    10071008            pdufi(i,jjp1,l) = 0.
     
    10181019      kend=klon
    10191020
    1020       if (pole_nord) kstart=2
    1021       if (pole_sud)  kend=klon-1-iim
     1021      if (is_north_pole) kstart=2
     1022      if (is_south_pole)  kend=klon-1-iim
    10221023     
    10231024c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
     
    10251026!!cdir NODEP
    10261027        do ig0=kstart,kend
    1027            i=Liste_i(ig0)
    1028            j=Liste_j(ig0)
     1028           i=index_i(ig0)
     1029           j=index_j(ig0)
    10291030           pdvfi(i,j,l)=0.5*(zdvfi2(ig0,l)+zdvfi2(ig0+iim,l))*cv(i,j)
    10301031           if (i==1) pdvfi(iip1,j,l) = 0.5*(zdvfi2(ig0,l)+
     
    10411042c      v = U * cos(long) + V * SIN(long)
    10421043
    1043       if (pole_nord) then
     1044      if (is_north_pole) then
    10441045
    10451046c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
     
    10611062      endif   
    10621063     
    1063       if (pole_sud) then
     1064      if (is_south_pole) then
    10641065
    10651066c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
  • LMDZ4/trunk/libf/dyn3dpar/exner_hyb_p.F

    r764 r774  
    5151      INTEGER ije,ijb,jje,jjb
    5252c
    53      
     53c$OMP MASTER          
    5454      unpl2k    = 1.+ 2.* kappa
    5555c
    5656      ijb=ij_begin
    5757      ije=ij_end
    58      
     58
     59
    5960      DO   ij  = ijb, ije
    6061        pks(ij) = cpp * ( ps(ij)/preff ) ** kappa
     
    103104c
    104105      ENDDO
     106
    105107c
    106108c  ***********************************************************************
    107109c     .....  Calcul de pk pour la couche 1 , pres du sol  ....
    108110c
     111
    109112      DO   ij   = ijb, ije
    110113       pk(ij,1) = ( p(ij,1)*pks(ij) - 0.5*alpha(ij,2)*p(ij,2) )  /
     
    123126c      CALL SCOPY   ( ngrid * llm, pk, 1, pkf, 1 )
    124127      pkf(ijb:ije,1:llm)=pk(ijb:ije,1:llm)
     128c$OMP END MASTER
     129c$OMP BARRIER
    125130     
    126131      jjb=jj_begin
  • LMDZ4/trunk/libf/dyn3dpar/gcm.F

    r764 r774  
    99      USE IOIPSL
    1010#endif
     11      USE mod_const_mpi, ONLY: init_const_mpi
    1112      USE parallel
    1213      USE dimphy
     14      USE mod_interface_dyn_phys
    1315      USE comgeomphy
    1416      USE mod_hallo
     
    212214c------------------------------------
    213215      call init_parallel
    214       call InitDimphy
    215       call InitBands
     216      call Read_Distrib
     217      CALL init_const_mpi
     218      CALL Init_Phys_lmdz(iim,jjp1,llm,nqmx-2,mpi_size,distrib_phys)
     219      CALL set_bands
     220      CALL Init_interface_dyn_phys
    216221      call MPI_BARRIER(COMM_LMDZ,ierr)
    217222      if (mpi_rank==0) call WriteBands
     
    226231      call Init_Mod_hallo(MPI_Buffer)
    227232c$OMP PARALLEL
    228       call init_phys_openmp
    229233      call InitComgeomphy
    230234c$OMP END PARALLEL
     
    434438c       write(78,*) 'q',q
    435439
    436 
     440c$OMP PARALLEL DEFAULT(SHARED) COPYIN(/temps/,/logic/)
    437441      CALL leapfrog_p(ucov,vcov,teta,ps,masse,phis,nq,q,clesphy0,
    438442     .              time_0)
    439 
     443c$OMP END PARALLEL
    440444
    441445
  • LMDZ4/trunk/libf/dyn3dpar/gr_dyn_fi_p.F

    r764 r774  
    11      SUBROUTINE gr_dyn_fi_p(nfield,im,jm,ngrid,pdyn,pfi)
     2      USE mod_interface_dyn_phys
    23      USE dimphy
    34      USE PARALLEL
     
    2728      DO l=1,nfield   
    2829       DO ig=1,klon
    29          i=Liste_i(ig)
    30          j=Liste_j(ig)
     30         i=index_i(ig)
     31         j=index_j(ig)
    3132         pfi(ig,l)=pdyn(i,j,l)
    3233       ENDDO
  • LMDZ4/trunk/libf/dyn3dpar/gr_fi_dyn_p.F

    r764 r774  
    11      SUBROUTINE gr_fi_dyn_p(nfield,ngrid,im,jm,pfi,pdyn)
    2       use dimphy
     2      USE mod_interface_dyn_phys
     3      USE dimphy
    34      use parallel
    45      IMPLICIT NONE
     
    2425
    2526        do ig=1,klon
    26           i=Liste_i(ig)
    27           j=Liste_j(ig)
     27          i=index_i(ig)
     28          j=index_j(ig)
    2829          pdyn(i,j,ifield)=pfi(ig,ifield)
    2930          if (i==1) pdyn(im,j,ifield)=pdyn(i,j,ifield)
  • LMDZ4/trunk/libf/dyn3dpar/gr_u_scal_p.F

    r630 r774  
    6666      DO l=1,nx
    6767         DO ij=ijb,ije-iip1+1,iip1
    68            x_scal(ij,l)=x_scal(ij+iip1-1)
     68qy         x_scal(ij,l)=x_scal(ij+iip1-1,l)
    6969         ENDDO
    7070      ENDDO
  • LMDZ4/trunk/libf/dyn3dpar/leapfrog_p.F

    r764 r774  
    8585
    8686c   variables dynamiques
    87       REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants
    88       REAL teta(ip1jmp1,llm)                 ! temperature potentielle
    89       REAL q(ip1jmp1,llm,nqmx)               ! champs advectes
    90       REAL ps(ip1jmp1)                       ! pression  au sol
    91       REAL p (ip1jmp1,llmp1  )               ! pression aux interfac.des couches
    92       REAL pks(ip1jmp1)                      ! exner au  sol
    93       REAL pk(ip1jmp1,llm)                   ! exner au milieu des couches
    94       REAL pkf(ip1jmp1,llm)                  ! exner filt.au milieu des couches
    95       REAL masse(ip1jmp1,llm)                ! masse d'air
    96       REAL phis(ip1jmp1)                     ! geopotentiel au sol
    97       REAL phi(ip1jmp1,llm)                  ! geopotentiel
    98       REAL w(ip1jmp1,llm)                    ! vitesse verticale
     87      REAL :: vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants
     88      REAL :: teta(ip1jmp1,llm)                 ! temperature potentielle
     89      REAL :: q(ip1jmp1,llm,nqmx)               ! champs advectes
     90      REAL :: ps(ip1jmp1)                       ! pression  au sol
     91      REAL,SAVE :: p (ip1jmp1,llmp1  )               ! pression aux interfac.des couches
     92      REAL,SAVE :: pks(ip1jmp1)                      ! exner au  sol
     93      REAL,SAVE :: pk(ip1jmp1,llm)                   ! exner au milieu des couches
     94      REAL,SAVE :: pkf(ip1jmp1,llm)                  ! exner filt.au milieu des couches
     95      REAL :: masse(ip1jmp1,llm)                ! masse d'air
     96      REAL :: phis(ip1jmp1)                     ! geopotentiel au sol
     97      REAL,SAVE :: phi(ip1jmp1,llm)                  ! geopotentiel
     98      REAL,SAVE :: w(ip1jmp1,llm)                    ! vitesse verticale
    9999
    100100c variables dynamiques intermediaire pour le transport
    101       REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm) !flux de masse
     101      REAL,SAVE :: pbaru(ip1jmp1,llm),pbarv(ip1jm,llm) !flux de masse
    102102
    103103c   variables dynamiques au pas -1
    104       REAL vcovm1(ip1jm,llm),ucovm1(ip1jmp1,llm)
    105       REAL tetam1(ip1jmp1,llm),psm1(ip1jmp1)
    106       REAL massem1(ip1jmp1,llm)
     104      REAL,SAVE :: vcovm1(ip1jm,llm),ucovm1(ip1jmp1,llm)
     105      REAL,SAVE :: tetam1(ip1jmp1,llm),psm1(ip1jmp1)
     106      REAL,SAVE :: massem1(ip1jmp1,llm)
    107107
    108108c   tendances dynamiques
    109       REAL dv(ip1jm,llm),du(ip1jmp1,llm)
    110       REAL dteta(ip1jmp1,llm),dq(ip1jmp1,llm,nqmx),dp(ip1jmp1)
     109      REAL,SAVE :: dv(ip1jm,llm),du(ip1jmp1,llm)
     110      REAL,SAVE :: dteta(ip1jmp1,llm),dq(ip1jmp1,llm,nqmx),dp(ip1jmp1)
    111111
    112112c   tendances de la dissipation
    113       REAL dvdis(ip1jm,llm),dudis(ip1jmp1,llm)
    114       REAL dtetadis(ip1jmp1,llm)
     113      REAL,SAVE :: dvdis(ip1jm,llm),dudis(ip1jmp1,llm)
     114      REAL,SAVE :: dtetadis(ip1jmp1,llm)
    115115
    116116c   tendances physiques
    117       REAL dvfi(ip1jm,llm),dufi(ip1jmp1,llm)
    118       REAL dtetafi(ip1jmp1,llm),dqfi(ip1jmp1,llm,nqmx),dpfi(ip1jmp1)
     117      REAL,SAVE :: dvfi(ip1jm,llm),dufi(ip1jmp1,llm)
     118      REAL,SAVE :: dtetafi(ip1jmp1,llm)
     119      REAL,SAVE :: dqfi(ip1jmp1,llm,nqmx),dpfi(ip1jmp1)
    119120
    120121c   variables pour le fichier histoire
     
    128129
    129130      REAL  SSUM
    130       REAL time_0 , finvmaold(ip1jmp1,llm)
     131      REAL time_0
     132      REAL,SAVE :: finvmaold(ip1jmp1,llm)
    131133
    132134cym      LOGICAL  lafin
    133       LOGICAL :: lafin=.false.
     135      LOGICAL :: lafin
    134136      INTEGER ij,iq,l
    135137      INTEGER ik
     
    143145      character*10 string10
    144146
    145       REAL alpha(ip1jmp1,llm),beta(ip1jmp1,llm)
     147      REAL,SAVE :: alpha(ip1jmp1,llm),beta(ip1jmp1,llm)
    146148#ifdef INCA
    147       REAL :: flxw(ip1jmp1,llm)
     149      REAL,SAVE :: flxw(ip1jmp1,llm)
    148150#endif
    149151
    150152c+jld variables test conservation energie
    151       REAL ecin(ip1jmp1,llm),ecin0(ip1jmp1,llm)
     153      REAL,SAVE :: ecin(ip1jmp1,llm),ecin0(ip1jmp1,llm)
    152154C     Tendance de la temp. potentiel d (theta)/ d t due a la
    153155C     tansformation d'energie cinetique en energie thermique
    154156C     cree par la dissipation
    155       REAL dtetaecdt(ip1jmp1,llm)
    156       REAL vcont(ip1jm,llm),ucont(ip1jmp1,llm)
    157       REAL vnat(ip1jm,llm),unat(ip1jmp1,llm)
     157      REAL,SAVE :: dtetaecdt(ip1jmp1,llm)
     158      REAL,SAVE :: vcont(ip1jm,llm),ucont(ip1jmp1,llm)
     159      REAL,SAVE :: vnat(ip1jm,llm),unat(ip1jmp1,llm)
    158160      REAL      d_h_vcol, d_qt, d_qw, d_ql, d_ec
    159161      CHARACTER*15 ztit
     
    171173      PARAMETER (true_calendar = .false.)
    172174
    173       logical dissip_conservative
    174       save dissip_conservative
    175       data dissip_conservative/.true./
    176 
    177       LOGICAL prem
    178       save prem
    179       DATA prem/.true./
     175      logical,PARAMETER :: dissip_conservative=.TRUE.
     176 
    180177      INTEGER testita
    181178      PARAMETER (testita = 9)
     
    183180c declaration liees au parallelisme
    184181      INTEGER :: ierr
    185       LOGICAL :: FirstCaldyn=.TRUE.
    186       LOGICAL :: FirstPhysic=.TRUE.
     182      LOGICAL :: FirstCaldyn
     183      LOGICAL :: FirstPhysic
    187184      INTEGER :: ijb,ije,j,i
    188185      type(Request) :: TestRequest
    189186      type(Request) :: Request_Dissip
    190187      type(Request) :: Request_physic
    191       REAL dvfi_tmp(iip1,llm),dufi_tmp(iip1,llm)
    192       REAL dtetafi_tmp(iip1,llm),dqfi_tmp(iip1,llm,nqmx)
    193       REAL dpfi_tmp(iip1)
    194       INTEGER :: true_itau=0
     188      REAL,SAVE :: dvfi_tmp(iip1,llm),dufi_tmp(iip1,llm)
     189      REAL,SAVE :: dtetafi_tmp(iip1,llm),dqfi_tmp(iip1,llm,nqmx)
     190      REAL,SAVE :: dpfi_tmp(iip1)
     191
     192      INTEGER :: true_itau
    195193      LOGICAL :: verbose=.true.
    196       INTEGER :: iapptrac = 0
    197       INTEGER :: AdjustCount = 0
     194      INTEGER :: iapptrac
     195      INTEGER :: AdjustCount
    198196      INTEGER :: var_time
     197      LOGICAL :: ok_start_timer=.FALSE.
     198
     199c$OMP MASTER
    199200      ItCount=0
     201c$OMP END MASTER     
     202      true_itau=0
     203      FirstCaldyn=.TRUE.
     204      FirstPhysic=.TRUE.
     205      iapptrac=0
     206      AdjustCount = 0
     207      lafin=.false.
    200208     
    201209      itaufin   = nday*day_step
     
    211219         ENDIF
    212220
    213 
     221c$OMP MASTER
     222      OMP_CHUNK=5
     223c$OMP END MASTER         
    214224c-----------------------------------------------------------------------
    215225c   On initialise la pression et la fonction d'Exner :
    216226c   --------------------------------------------------
    217227
     228c$OMP MASTER
    218229      dq=0.
    219230      CALL pression ( ip1jmp1, ap, bp, ps, p       )
    220231      CALL exner_hyb( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf )
    221 
     232c$OMP END MASTER
    222233c-----------------------------------------------------------------------
    223234c   Debut de l'integration temporelle:
     
    227238   1  CONTINUE
    228239
     240c$OMP MASTER
    229241      call MPI_BARRIER(COMM_LMDZ,ierr)
     242c$OMP END MASTER
     243c$OMP BARRIER
    230244
    231245#ifdef CPP_IOIPSL
     246c$OMP MASTER
    232247      if (ok_guide.and.(itaufin-itau-1)*dtvr.gt.21600) then
    233248        call guide_pp(itau,ucov,vcov,teta,q,masse,ps)
     
    236251     .    '6 dernieres heures'
    237252      endif
     253c$OMP END MASTER
    238254#endif
    239255c
     
    250266
    251267       if (FirstCaldyn) then
     268c$OMP MASTER
    252269         ucovm1=ucov
    253270         vcovm1=vcov
     
    258275         finvmaold = masse
    259276         CALL filtreg ( finvmaold ,jjp1, llm, -2,2, .TRUE., 1 )
    260 
     277c$OMP END MASTER
     278c$OMP BARRIER
    261279       else
    262280         
    263281         ijb=ij_begin
    264282         ije=ij_end
    265                
    266          ucovm1   (ijb:ije,:) = ucov  (ijb:ije,:)
    267          tetam1   (ijb:ije,:) = teta  (ijb:ije,:)
    268          massem1  (ijb:ije,:) = masse (ijb:ije,:)
     283
     284c$OMP MASTER           
    269285         psm1     (ijb:ije) = ps    (ijb:ije)
    270      
    271          if (pole_sud) ije=ij_end-iip1
    272          vcovm1(ijb:ije,:) = vcov  (ijb:ije,:)
     286c$OMP END MASTER
     287
     288c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)         
     289         DO l=1,llm     
     290           ije=ij_end
     291           ucovm1   (ijb:ije,l) = ucov  (ijb:ije,l)
     292           tetam1   (ijb:ije,l) = teta  (ijb:ije,l)
     293           massem1  (ijb:ije,l) = masse (ijb:ije,l)
     294           finvmaold(ijb:ije,l)=masse(ijb:ije,l)
     295                 
     296           if (pole_sud) ije=ij_end-iip1
     297           vcovm1(ijb:ije,l) = vcov  (ijb:ije,l)
    273298       
    274          finvmaold(ij_begin:ij_end,1:llm)=masse(ij_begin:ij_end,1:llm)
    275          CALL filtreg_p ( finvmaold ,jj_begin,jj_end,jjp1,
     299
     300         ENDDO
     301c$OMP ENDDO       
     302
     303
     304          CALL filtreg_p ( finvmaold ,jj_begin,jj_end,jjp1,
    276305     .                    llm, -2,2, .TRUE., 1 )
    277306
     
    292321   2  CONTINUE
    293322
     323c$OMP MASTER
    294324      ItCount=ItCount+1
    295325      if (MOD(ItCount,1)==1) then
     
    298328        debug=.false.
    299329      endif
     330c$OMP END MASTER
    300331c-----------------------------------------------------------------------
    301332
     
    331362     
    332363      if (firstCaldyn) then
    333 
     364c$OMP MASTER
    334365          call SetDistrib(jj_Nb_Caldyn)
     366c$OMP END MASTER
     367c$OMP BARRIER
    335368          firstCaldyn=.FALSE.
    336369cym          call InitTime
     370c$OMP MASTER
    337371          call Init_timer
     372c$OMP END MASTER
    338373      endif
    339      
    340      
    341      
    342      
     374
     375c$OMP MASTER     
     376      IF (ok_start_timer) THEN
     377        CALL InitTime
     378        ok_start_timer=.FALSE.
     379      ENDIF     
     380c$OMP END MASTER     
     381     
    343382      if (Adjust) then
    344           AdjustCount=AdjustCount+1
    345 c         if (MOD(itau+1,20)==0) then
    346           if (iapptrac==iapp_tracvl .and. (forward. OR . leapf)
    347      &         .and. .not.FirstPhysic .and. Adjustcount>30) then
     383c$OMP MASTER
     384        AdjustCount=AdjustCount+1
     385        if (iapptrac==iapp_tracvl .and. (forward. OR . leapf)
     386     &         .and. itau/iphysiq>2 .and. Adjustcount>30) then
    348387           AdjustCount=0
    349388           call allgather_timer_average
     
    413452         call Register_SwapFieldHallo(phis,phis,ip1jmp1,1,
    414453     &                                jj_Nb_caldyn,0,0,TestRequest)
    415         call Register_SwapFieldHallo(phi,phi,ip1jmp1,llm,
     454         call Register_SwapFieldHallo(phi,phi,ip1jmp1,llm,
    416455     &                                jj_Nb_caldyn,0,0,TestRequest)
    417456         call Register_SwapFieldHallo(finvmaold,finvmaold,ip1jmp1,llm,
     
    427466         call WaitRequest(TestRequest)
    428467         
    429 c       call SetDistrib(jj_Nb_vanleer)
    430 c        call AdjustBands_vanleer
    431 c       do j=1,nqmx
    432 c         call Register_SwapFieldHallo(q(1,1,j),q(1,1,j),ip1jmp1,llm,
    433 c     *                                jj_nb_vanleer,0,0,TestRequest)
    434 c        enddo
    435 c
    436 c         call Register_SwapFieldHallo(finvmaold,finvmaold,ip1jmp1,llm,
    437 c     &                                jj_Nb_vanleer,0,0,TestRequest)
    438        
    439 c        call SendRequest(TestRequest)
    440 c        call WaitRequest(TestRequest)
    441 
    442468        call AdjustBands_dissip
    443469        call AdjustBands_physic
    444 c        call SetDistrib(jj_nb_caldyn)
     470
    445471      endif
    446      
     472c$OMP END MASTER 
    447473      endif       
    448       
     474     
    449475     
    450476     
     
    452478c   calcul des tendances dynamiques:
    453479c   --------------------------------
    454 
     480c$OMP BARRIER
     481c$OMP MASTER
    455482       call VTb(VThallo)
    456483       call Register_Hallo(ucov,ip1jmp1,llm,1,1,1,1,TestRequest)
     
    488515        enddo       
    489516      endif
    490 
    491 
     517c$OMP END MASTER
     518c$OMP BARRIER
    492519     
    493520      True_itau=True_itau+1
     521
     522c$OMP MASTER
    494523      print*,"Iteration No",True_itau
    495524
     
    501530     
    502531      call VTb(VTcaldyn)
    503 
     532c$OMP END MASTER
     533c$OMP BARRIER
    504534      var_time=time+iday-day_ini
    505       OMP_CHUNK=5
    506 c$OMP PARALLEL DEFAULT(SHARED)
     535cc$OMP PARALLEL DEFAULT(SHARED)
     536cc$OMP+         PRIVATE(rdaym_ini,rdayvrai,ijb,ije,
     537cc$OMP+                 tppn,tpn,tpps,tps)
     538
    507539cc$OMP+         SHARED(itau,ucov,vcov,teta,ps,masse,pk,pkf,phis ,
    508540cc$OMP+                phi,conser,du,dv,dteta,dp,w, pbaru,pbarv,
    509 cc$OMP+                var_time)     
     541cc$OMP+                time, iday,day_ini,forward,leapf, iapptrac,
     542cc$OMP+                q,dq,p,VTcaldyn,offline,dtvr,itau)     
    510543
    511544      CALL caldyn_p
     
    513546     $    phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time+iday-day_ini )
    514547
    515 c$OMP END PARALLEL     
     548ccc$OMP END PARALLEL     
     549c$OMP MASTER
    516550      call VTe(VTcaldyn)
     551c$OMP END MASTER     
    517552c      call WriteField_p('du',reshape(du,(/iip1,jmp1,llm/)))
    518553c      call WriteField_p('dv',reshape(dv,(/iip1,jjm,llm/)))
     
    528563
    529564      IF( forward. OR . leapf )  THEN
    530 c$OMP PARALLEL DEFAULT(SHARED)
     565cc$OMP PARALLEL DEFAULT(SHARED)
    531566c
    532567#ifdef INCA
     
    542577#endif
    543578
    544 c$OMP END PARALLEL
     579
    545580
    546581c      do j=1,nqmx
     
    562597c
    563598      ENDIF
    564 
     599cc$OMP END PARALLEL
    565600
    566601c-----------------------------------------------------------------------
    567602c   integrations dynamique et traceurs:
    568603c   ----------------------------------
    569  
     604
     605c$OMP MASTER
    570606       call VTb(VTintegre)
     607c$OMP END MASTER
    571608c      call WriteField_p('ucovm1',reshape(ucovm1,(/iip1,jmp1,llm/)))
    572609c      call WriteField_p('vcovm1',reshape(vcovm1,(/iip1,jjm,llm/)))
     
    577614c      call WriteField_p('teta',reshape(teta,(/iip1,jmp1,llm/)))
    578615c      call WriteField_p('ps',reshape(ps,(/iip1,jmp1/)))
    579 c$OMP PARALLEL DEFAULT(SHARED)
     616cc$OMP PARALLEL DEFAULT(SHARED)
    580617       CALL integrd_p ( 2,vcovm1,ucovm1,tetam1,psm1,massem1 ,
    581618     $         dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps,masse,phis ,
    582619     $              finvmaold                                    )
    583620
    584 c$OMP END PARALLEL
     621
    585622c      call WriteField_p('ucovm1',reshape(ucovm1,(/iip1,jmp1,llm/)))
    586623c      call WriteField_p('vcovm1',reshape(vcovm1,(/iip1,jjm,llm/)))
     
    593630
    594631c      call WriteField_p('ps',reshape(ps,(/iip1,jmp1/)))
    595 
     632c$OMP MASTER
    596633       call VTe(VTintegre)
    597 
     634c$OMP END MASTER
    598635c .P.Le Van (26/04/94  ajout de  finvpold dans l'appel d'integrd)
    599636c
     
    608645          IF( itau+1. EQ. itaufin )              lafin = .TRUE.
    609646       ENDIF
     647
     648cc$OMP END PARALLEL
     649
    610650c
    611651c
     
    614654c     .......   Ajout   P.Le Van ( 17/04/96 )   ...........
    615655c
    616 c$OMP PARALLEL DEFAULT(SHARED)
    617 c$OMP+         PRIVATE(rdaym_ini,rdayvrai,ijb,ije)
     656cc$OMP PARALLEL DEFAULT(SHARED)
     657cc$OMP+         PRIVATE(rdaym_ini,rdayvrai,ijb,ije)
    618658
    619659c$OMP MASTER
     
    622662c$OMP END MASTER
    623663
     664c$OMP BARRIER
    624665         CALL pression_p (  ip1jmp1, ap, bp, ps,  p      )
    625 c$OMP BARRIER
    626 
    627 c$OMP MASTER
     666
    628667         CALL exner_hyb_p(  ip1jmp1, ps, p,alpha,beta,pks, pk, pkf )
    629 c$OMP END MASTER
    630 c$OMP BARRIER
    631668           rdaym_ini  = itau * dtvr / daysec
    632669           rdayvrai   = rdaym_ini  + day_ini
     
    888925         call resume_timer(timer_caldyn)
    889926         if (FirstPhysic) then
    890            call InitTime
     927           ok_start_timer=.TRUE.
    891928           FirstPhysic=.false.
    892929         endif
    893930c$OMP END MASTER
    894 c$OMP END PARALLEL
    895931       ENDIF
    896932
     933c$OMP BARRIER
    897934        CALL pression_p ( ip1jmp1, ap, bp, ps, p                  )
    898935        CALL exner_hyb_p( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf )
    899 
     936c$OMP BARRIER
     937
     938cc$OMP END PARALLEL
    900939
    901940c-----------------------------------------------------------------------
     
    904943
    905944      IF(apdiss) THEN
    906 c$OMP  PARALLEL DEFAULT(SHARED)
    907 c$OMP+          PRIVATE(ijb,ije,tppn,tpn,tpps,tps)
     945cc$OMP  PARALLEL DEFAULT(SHARED)
     946cc$OMP+          PRIVATE(ijb,ije,tppn,tpn,tpps,tps)
    908947c$OMP MASTER
    909948        call suspend_timer(timer_caldyn)
     
    11031142        print *,'fin dissipation'
    11041143c$OMP END MASTER
    1105 c$OMP END PARALLEL
    11061144      END IF
     1145
     1146cc$OMP END PARALLEL
    11071147
    11081148c ajout debug
     
    11211161cym      call WriteField('ucov',reshape(ucov,(/iip1,jmp1,llm/)))
    11221162cym      call WriteField('vcov',reshape(vcov,(/iip1,jjm,llm/)))
    1123      
     1163c$OMP MASTER     
    11241164      call stop_timer(timer_caldyn)
     1165c$OMP END MASTER
    11251166      IF (itau==itaumax) then
     1167c$OMP MASTER
    11261168            call allgather_timer_average
    11271169
     
    11661208      print *, 'Temps total ecoule sur la parallelisation :',DiffTime()
    11671209      print *, 'Temps CPU ecoule sur la parallelisation :',DiffCpuTime()
     1210
    11681211        call finalize_parallel
    1169         STOP
     1212c$OMP END MASTER
     1213        RETURN
    11701214      ENDIF
    11711215     
     
    11881232            IF( itau. EQ. itaufinp1 ) then 
    11891233
     1234c$OMP MASTER
    11901235              call finalize_parallel
     1236c$OMP END MASTER
    11911237              abort_message = 'Simulation finished'
    11921238              call abort_gcm(modname,abort_message,0)
     
    11971243
    11981244            IF(MOD(itau,iperiod).EQ.0 .OR. itau.EQ.itaufin) THEN
     1245c$OMP BARRIER
     1246c$OMP MASTER
    11991247               IF(itau.EQ.itaufin) THEN
    12001248                  iav=1
     
    12031251               ENDIF
    12041252#ifdef CPP_IOIPSL
    1205               call Register_Hallo(vcov,ip1jm,llm,1,0,0,1,TestRequest)
     1253             call Register_Hallo(vcov,ip1jm,llm,1,0,0,1,TestRequest)
    12061254              call SendRequest(TestRequest)
    12071255              call WaitRequest(TestRequest)
     
    12121260c     ,           ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q)
    12131261#endif
    1214 
     1262c$OMP END MASTER
    12151263            ENDIF
    12161264
     
    12201268
    12211269c      IF( MOD(itau,iecri         ).EQ.0) THEN
     1270
    12221271           IF( MOD(itau,iecri*day_step).EQ.0) THEN
    1223 
     1272c$OMP BARRIER
     1273c$OMP MASTER
    12241274               nbetat = nbetatdem
    12251275        CALL geopot_p  ( ip1jmp1, teta  , pk , pks,  phis  , phi )
    1226         
     1276       
    12271277cym     unat=0.
    12281278       
     
    12691319c       endif
    12701320#endif
    1271 
    1272             ENDIF
     1321c$OMP END MASTER
     1322           ENDIF
    12731323
    12741324            IF(itau.EQ.itaufin) THEN
    12751325
     1326c$OMP BARRIER
     1327c$OMP MASTER
    12761328
    12771329c#ifdef CPP_IOIPSL
     1330
    12781331       CALL dynredem1_p("restart.nc",0.0,
    12791332     ,                     vcov,ucov,teta,q,nqmx,masse,ps)
     
    12811334
    12821335              CLOSE(99)
     1336c$OMP END MASTER
    12831337            ENDIF
    12841338
     
    13321386               forward =  .FALSE.
    13331387               IF( itau. EQ. itaufinp1 ) then 
     1388c$OMP MASTER
    13341389                 call finalize_parallel
     1390c$OMP END MASTER
    13351391                 abort_message = 'Simulation finished'
    13361392                 call abort_gcm(modname,abort_message,0)
     
    13471403               ENDIF
    13481404#ifdef CPP_IOIPSL
     1405c$OMP BARRIER
     1406c$OMP MASTER
     1407
    13491408              call Register_Hallo(vcov,ip1jm,llm,1,0,0,1,TestRequest)
    13501409              call SendRequest(TestRequest)
     
    13551414c               call bilan_dyn_p (2,dtvr*iperiod,dtvr*day_step*periodav,
    13561415c     ,           ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q)
     1416c$OMP END MASTER
    13571417#endif
    1358 
    13591418            ENDIF
    13601419
    13611420c               IF(MOD(itau,iecri         ).EQ.0) THEN
    13621421              IF(MOD(itau,iecri*day_step).EQ.0) THEN
     1422c$OMP BARRIER
     1423c$OMP MASTER
    13631424                  nbetat = nbetatdem
    13641425       CALL geopot_p( ip1jmp1, teta  , pk , pks,  phis  , phi   )
     
    14081469#endif
    14091470
    1410 
     1471c$OMP END MASTER
    14111472               ENDIF
    14121473
    1413 c#ifdef CPP_IOIPSL
    1414                  IF(itau.EQ.itaufin)
    1415      . CALL dynredem1_p("restart.nc",0.0,
    1416      .                     vcov,ucov,teta,q,nqmx,masse,ps)
    1417 c#endif
    1418 
     1474                 IF(itau.EQ.itaufin) THEN
     1475c$OMP MASTER
     1476                   CALL dynredem1_p("restart.nc",0.0,
     1477     .                               vcov,ucov,teta,q,nqmx,masse,ps)
     1478c$OMP END MASTER
     1479                 ENDIF
    14191480                 forward = .TRUE.
    14201481                 GO TO  1
     
    14231484
    14241485      END IF
    1425 
     1486c$OMP MASTER
    14261487        call finalize_parallel
    1427         STOP
     1488c$OMP END MASTER
     1489        RETURN
    14281490      END
  • LMDZ4/trunk/libf/dyn3dpar/logic.h

    r630 r774  
    1616
    1717      INTEGER iflag_phys
     18c$OMP THREADPRIVATE(/logic/)
    1819c-----------------------------------------------------------------------
  • LMDZ4/trunk/libf/dyn3dpar/temps.h

    r630 r774  
    1313      INTEGER*4 day_ini, day_end, annee_ref, day_ref
    1414      REAL      dt
    15 
     15c$OMP THREADPRIVATE(/temps/)
    1616!-----------------------------------------------------------------------
  • LMDZ4/trunk/libf/dyn3dpar/temps.inc

    r630 r774  
    1414      INTEGER*4 day_ini, day_end, annee_ref, day_ref
    1515      REAL     dt
    16 
     16!$OMP THREADPRIVATE(/temps/)
    1717!-----------------------------------------------------------------------
  • LMDZ4/trunk/libf/dyn3dpar/times.F90

    r764 r774  
    11module times
    2   use parallel
    32  integer,private,save :: Last_Count=0
    43  real, private,save :: Last_cpuCount=0
    5   logical, private,save :: AllTimer_IsActive=.true.
     4  logical, private,save :: AllTimer_IsActive=.false.
    65 
    76  integer, parameter :: nb_timer = 4
     
    2625 
    2726  subroutine init_timer
     27    use parallel
    2828    implicit none
    2929#include "dimensions90.h"
     
    101101
    102102  subroutine stop_timer(no_timer)
     103    use parallel
    103104    implicit none
    104105    integer :: no_timer
     
    126127        V2=timer_table_sqr(jj_nb,no_timer,mpi_rank)
    127128        V=timer_table(jj_nb,no_timer,mpi_rank)
    128         timer_delta(jj_nb,no_timer,mpi_rank)=sqrt(abs(V2-V*V/N)/(N-1))
     129        timer_delta(jj_nb,no_timer,mpi_rank)=sqrt(ABS(V2-V*V/N)/(N-1))
    129130      else
    130131        timer_delta(jj_nb,no_timer,mpi_rank)=0
     
    135136   
    136137  subroutine allgather_timer
     138    use parallel
    137139    implicit none
    138140    include 'mpif.h'
     
    160162 
    161163  subroutine allgather_timer_average
     164    use parallel
    162165    implicit none
    163166    include 'mpif.h'
     
    193196    integer :: count,count_rate,count_max
    194197   
    195     if (AllTimer_IsActive) then
    196     call system_clock(count,count_rate,count_max)
    197     call cpu_time(Last_cpuCount)
    198     Last_Count=count
     198    AllTimer_IsActive=.TRUE.
     199    if (AllTimer_IsActive) then
     200      call system_clock(count,count_rate,count_max)
     201      call cpu_time(Last_cpuCount)
     202      Last_Count=count
    199203    endif
    200204  end subroutine InitTime
Note: See TracChangeset for help on using the changeset viewer.