Changeset 2436


Ignore:
Timestamp:
Jan 29, 2016, 3:23:58 PM (9 years ago)
Author:
Ehouarn Millour
Message:

Corrections from YM to solve issues (compiler bug) with recent ifort versions:

  • add -openmp-threadprivate=compat and set mcmodel=medium in Ada arch file.
  • modify mod_hallo.F90 to solve issues when using save pointer in some cases.

EM

Location:
LMDZ5/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/arch/arch-X64_ADA.fcm

    r2270 r2436  
    55%FPP_FLAGS           -P -traditional -I/smplocal/pub/FFTW/3.3.3_dyn/include/
    66%FPP_DEF             NC_DOUBLE FFT_FFTW
    7 %BASE_FFLAGS         -auto -recursive -mcmodel=large -integer-size 32 -real-size 64 -align all
     7%BASE_FFLAGS         -auto -recursive -mcmodel=medium -integer-size 32 -real-size 64 -align all
    88%PROD_FFLAGS         -O2 -ip -fp-model strict -axAVX,SSE4.2
    99%DEV_FFLAGS          -p -g -O1 -fpe0 -traceback
    1010%DEBUG_FFLAGS        -p -g -O0 -fpe-all=0 -traceback -ftrapuv -fp-stack-check -check all -debug
    1111%MPI_FFLAGS
    12 %OMP_FFLAGS          -openmp
     12%OMP_FFLAGS          -openmp -openmp-threadprivate=compat
    1313%BASE_LD             -L/smplocal/pub/FFTW/3.3.3_dyn/lib -lfftw3 -shared-intel  -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -Wl,-rpath=/smplocal/pub/NetCDF/4.1.3/mpi/lib:/smplocal/pub/HDF5/1.8.9/par/lib:/smplocal/pub/FFTW/3.3.3_dyn/lib
    1414%MPI_LD             
    15 %OMP_LD              -openmp
     15%OMP_LD              -openmp -openmp-threadprivate=compat
    1616
  • LMDZ5/trunk/libf/dyn3dmem/mod_hallo.F90

    r1907 r2436  
    4646
    4747  INTERFACE Register_SwapField_u
    48     MODULE PROCEDURE Register_SwapField1d_u,Register_SwapField2d_u1d,Register_SwapField3d_u
     48    MODULE PROCEDURE Register_SwapField1d_u,Register_SwapField2d_u1d,Register_SwapField3d_u, &
     49                     Register_SwapField1d_u_bis,Register_SwapField2d_u1d_bis,Register_SwapField3d_u_bis
    4950  END INTERFACE Register_SwapField_u
    5051
    5152  INTERFACE Register_SwapField_v
    52     MODULE PROCEDURE Register_SwapField1d_v,Register_SwapField2d_v1d,Register_SwapField3d_v
     53    MODULE PROCEDURE Register_SwapField1d_v,Register_SwapField2d_v1d,Register_SwapField3d_v,&
     54                     Register_SwapField1d_v_bis,Register_SwapField2d_v1d_bis,Register_SwapField3d_v_bis
    5355  END INTERFACE Register_SwapField_v
    5456
    5557  INTERFACE Register_SwapField2d_u
    56     MODULE PROCEDURE Register_SwapField1d_u2d,Register_SwapField2d_u2d,Register_SwapField3d_u2d
     58    MODULE PROCEDURE Register_SwapField1d_u2d,Register_SwapField2d_u2d,Register_SwapField3d_u2d, &
     59                     Register_SwapField1d_u2d_bis,Register_SwapField2d_u2d_bis,Register_SwapField3d_u2d_bis
    5760  END INTERFACE Register_SwapField2d_u
    5861
    5962  INTERFACE Register_SwapField2d_v
    60     MODULE PROCEDURE Register_SwapField1d_v2d,Register_SwapField2d_v2d,Register_SwapField3d_v2d
     63    MODULE PROCEDURE Register_SwapField1d_v2d,Register_SwapField2d_v2d,Register_SwapField3d_v2d, &
     64                     Register_SwapField1d_v2d_bis,Register_SwapField2d_v2d_bis,Register_SwapField3d_v2d_bis
    6165  END INTERFACE Register_SwapField2d_v
    6266
     
    352356
    353357
    354   SUBROUTINE Register_SwapField1d_u(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
    355   USE parallel_lmdz
    356   USE dimensions_mod
    357       IMPLICIT NONE
    358    
    359     REAL, DIMENSION(:),INTENT(IN)     :: FieldS
    360     REAL, DIMENSION(:),INTENT(OUT)    :: FieldR
    361     TYPE(distrib),OPTIONAL,INTENT(IN) :: old_dist
     358  SUBROUTINE Register_SwapField1d_u(FieldS,FieldR,new_dist,a_request,up,down)
     359  USE parallel_lmdz
     360  USE dimensions_mod
     361      IMPLICIT NONE
     362   
    362363    TYPE(distrib),INTENT(IN)          :: new_dist
    363     INTEGER,OPTIONAL,INTENT(IN)       :: up
    364     INTEGER,OPTIONAL,INTENT(IN)       :: down     
    365     TYPE(request),INTENT(INOUT)         :: a_request
    366 
    367     INTEGER                           :: halo_up
    368     INTEGER                           :: halo_down
    369    
    370    
    371     halo_up=0
    372     halo_down=0
    373     IF (PRESENT(up))   halo_up=up
    374     IF (PRESENT(down)) halo_down=down
    375 
    376     IF (PRESENT(old_dist)) THEN
    377       CALL  Register_SwapField_gen_u(FieldS,FieldR,1,old_dist,new_dist,halo_up,halo_down,a_request)
    378     ELSE
    379       CALL  Register_SwapField_gen_u(FieldS,FieldR,1,current_dist,new_dist,halo_up,halo_down,a_request)
    380     ENDIF
     364    REAL, DIMENSION(current_dist%ijb_u:),INTENT(IN)     :: FieldS
     365    REAL, DIMENSION(new_dist%ijb_u:),INTENT(OUT)    :: FieldR
     366    INTEGER,OPTIONAL,INTENT(IN)       :: up
     367    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     368    TYPE(request),INTENT(INOUT)         :: a_request
     369
     370    INTEGER                           :: halo_up
     371    INTEGER                           :: halo_down
     372   
     373   
     374    halo_up=0
     375    halo_down=0
     376    IF (PRESENT(up))   halo_up=up
     377    IF (PRESENT(down)) halo_down=down
     378
     379    CALL  Register_SwapField_gen_u(FieldS,FieldR,1,current_dist,new_dist,halo_up,halo_down,a_request)
    381380       
    382381  END SUBROUTINE  Register_SwapField1d_u
    383382
    384 
    385   SUBROUTINE Register_SwapField2d_u1d(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
     383  SUBROUTINE Register_SwapField1d_u_bis(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
     384  USE parallel_lmdz
     385  USE dimensions_mod
     386      IMPLICIT NONE
     387   
     388    TYPE(distrib),INTENT(IN)          :: new_dist
     389    TYPE(distrib),INTENT(IN)          :: old_dist
     390    REAL, DIMENSION(old_dist%ijb_u:),INTENT(IN)     :: FieldS
     391    REAL, DIMENSION(new_dist%ijb_u:),INTENT(OUT)    :: FieldR
     392    INTEGER,OPTIONAL,INTENT(IN)       :: up
     393    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     394    TYPE(request),INTENT(INOUT)         :: a_request
     395
     396    INTEGER                           :: halo_up
     397    INTEGER                           :: halo_down
     398   
     399   
     400    halo_up=0
     401    halo_down=0
     402    IF (PRESENT(up))   halo_up=up
     403    IF (PRESENT(down)) halo_down=down
     404
     405    CALL  Register_SwapField_gen_u(FieldS,FieldR,1,old_dist,new_dist,halo_up,halo_down,a_request)
     406       
     407  END SUBROUTINE  Register_SwapField1d_u_bis
     408
     409
     410  SUBROUTINE Register_SwapField2d_u1d(FieldS,FieldR,new_dist,a_request,up,down)
    386411  USE parallel_lmdz
    387412  USE dimensions_mod
    388413    IMPLICIT NONE
    389414   
    390     REAL, DIMENSION(:,:),INTENT(IN)     :: FieldS
    391     REAL, DIMENSION(:,:),INTENT(OUT)    :: FieldR
    392     TYPE(distrib),OPTIONAL,INTENT(IN) :: old_dist
    393415    TYPE(distrib),INTENT(IN)          :: new_dist
     416    REAL, DIMENSION(current_dist%ijb_u:,:),INTENT(IN)     :: FieldS
     417    REAL, DIMENSION(new_dist%ijb_u:,:),INTENT(OUT)    :: FieldR
    394418    INTEGER,OPTIONAL,INTENT(IN)       :: up
    395419    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     
    408432    ll=size(FieldS,2)
    409433   
    410     IF (PRESENT(old_dist)) THEN
    411       CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
    412     ELSE
    413       CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    414     ENDIF
     434    CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    415435   
    416436  END SUBROUTINE  Register_SwapField2d_u1d
    417    
    418 
    419   SUBROUTINE Register_SwapField3d_u(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
    420   USE parallel_lmdz
    421   USE dimensions_mod
    422       IMPLICIT NONE
    423    
    424     REAL, DIMENSION(:,:,:),INTENT(IN)     :: FieldS
    425     REAL, DIMENSION(:,:,:),INTENT(OUT)    :: FieldR
    426     TYPE(distrib),OPTIONAL,INTENT(IN) :: old_dist
     437
     438  SUBROUTINE Register_SwapField2d_u1d_bis(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
     439  USE parallel_lmdz
     440  USE dimensions_mod
     441    IMPLICIT NONE
     442   
    427443    TYPE(distrib),INTENT(IN)          :: new_dist
     444    TYPE(distrib),INTENT(IN) :: old_dist
     445    REAL, DIMENSION(old_dist%ijb_u:,:),INTENT(IN)     :: FieldS
     446    REAL, DIMENSION(new_dist%ijb_u:,:),INTENT(OUT)    :: FieldR
    428447    INTEGER,OPTIONAL,INTENT(IN)       :: up
    429448    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     
    440459    IF (PRESENT(down)) halo_down=down
    441460   
     461    ll=size(FieldS,2)
     462   
     463    CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
     464   
     465  END SUBROUTINE  Register_SwapField2d_u1d_bis
     466   
     467
     468  SUBROUTINE Register_SwapField3d_u(FieldS,FieldR,new_dist,a_request,up,down)
     469  USE parallel_lmdz
     470  USE dimensions_mod
     471      IMPLICIT NONE
     472   
     473    TYPE(distrib),INTENT(IN)          :: new_dist
     474    REAL, DIMENSION(current_dist%ijb_u:,:,:),INTENT(IN)     :: FieldS
     475    REAL, DIMENSION(new_dist%ijb_u:,:,:),INTENT(OUT)    :: FieldR
     476    INTEGER,OPTIONAL,INTENT(IN)       :: up
     477    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     478    TYPE(request),INTENT(INOUT)         :: a_request
     479
     480    INTEGER                           :: halo_up
     481    INTEGER                           :: halo_down
     482    INTEGER                           :: ll
     483       
     484   
     485    halo_up=0
     486    halo_down=0
     487    IF (PRESENT(up))   halo_up=up
     488    IF (PRESENT(down)) halo_down=down
     489   
    442490    ll=size(FieldS,2)*size(FieldS,3)
    443491   
    444     IF (PRESENT(old_dist)) THEN
    445       CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
    446     ELSE
    447       CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    448     ENDIF
     492    CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    449493   
    450494  END SUBROUTINE  Register_SwapField3d_u
    451  
    452 
    453 
    454  SUBROUTINE Register_SwapField1d_u2d(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
    455   USE parallel_lmdz
    456   USE dimensions_mod
    457 
    458       IMPLICIT NONE
    459    
    460     REAL, DIMENSION(:,:),INTENT(IN)     :: FieldS
    461     REAL, DIMENSION(:,:),INTENT(OUT)    :: FieldR
    462     TYPE(distrib),OPTIONAL,INTENT(IN) :: old_dist
    463     TYPE(distrib),OPTIONAL,INTENT(IN)          :: new_dist !LF
    464     INTEGER,OPTIONAL,INTENT(IN)       :: up
    465     INTEGER,OPTIONAL,INTENT(IN)       :: down     
    466     TYPE(request),INTENT(INOUT)         :: a_request
    467 
    468     INTEGER                           :: halo_up
    469     INTEGER                           :: halo_down
    470    
    471    
    472     halo_up=0
    473     halo_down=0
    474     IF (PRESENT(up))   halo_up=up
    475     IF (PRESENT(down)) halo_down=down
    476 
    477     IF (PRESENT(old_dist)) THEN
    478       CALL  Register_SwapField_gen_u(FieldS,FieldR,1,old_dist,new_dist,halo_up,halo_down,a_request)
    479     ELSE
    480       CALL  Register_SwapField_gen_u(FieldS,FieldR,1,current_dist,new_dist,halo_up,halo_down,a_request)
    481     ENDIF
     495
     496  SUBROUTINE Register_SwapField3d_u_bis(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
     497  USE parallel_lmdz
     498  USE dimensions_mod
     499      IMPLICIT NONE
     500   
     501    TYPE(distrib),INTENT(IN)          :: new_dist
     502    TYPE(distrib),INTENT(IN) :: old_dist
     503    REAL, DIMENSION(old_dist%ijb_u:,:,:),INTENT(IN)     :: FieldS
     504    REAL, DIMENSION(new_dist%ijb_u:,:,:),INTENT(OUT)    :: FieldR
     505    INTEGER,OPTIONAL,INTENT(IN)       :: up
     506    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     507    TYPE(request),INTENT(INOUT)         :: a_request
     508
     509    INTEGER                           :: halo_up
     510    INTEGER                           :: halo_down
     511    INTEGER                           :: ll
     512       
     513   
     514    halo_up=0
     515    halo_down=0
     516    IF (PRESENT(up))   halo_up=up
     517    IF (PRESENT(down)) halo_down=down
     518   
     519    ll=size(FieldS,2)*size(FieldS,3)
     520   
     521    CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
     522   
     523  END SUBROUTINE  Register_SwapField3d_u_bis
     524 
     525
     526
     527 SUBROUTINE Register_SwapField1d_u2d(FieldS,FieldR,new_dist,a_request,up,down)
     528  USE parallel_lmdz
     529  USE dimensions_mod
     530
     531      IMPLICIT NONE
     532
     533    TYPE(distrib),INTENT(IN)          :: new_dist !LF
     534    REAL, DIMENSION(current_dist%jjb_u:,:),INTENT(IN)     :: FieldS
     535    REAL, DIMENSION(new_dist%jjb_u:,:),INTENT(OUT)    :: FieldR
     536    INTEGER,OPTIONAL,INTENT(IN)       :: up
     537    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     538    TYPE(request),INTENT(INOUT)         :: a_request
     539
     540    INTEGER                           :: halo_up
     541    INTEGER                           :: halo_down
     542   
     543   
     544    halo_up=0
     545    halo_down=0
     546    IF (PRESENT(up))   halo_up=up
     547    IF (PRESENT(down)) halo_down=down
     548
     549    CALL  Register_SwapField_gen_u(FieldS,FieldR,1,current_dist,new_dist,halo_up,halo_down,a_request)
    482550       
    483551  END SUBROUTINE  Register_SwapField1d_u2d
    484552
    485 
    486   SUBROUTINE Register_SwapField2d_u2d(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
    487   USE parallel_lmdz
    488   USE dimensions_mod
    489 
    490       IMPLICIT NONE
    491    
    492     REAL, DIMENSION(:,:,:),INTENT(IN)     :: FieldS
    493     REAL, DIMENSION(:,:,:),INTENT(OUT)    :: FieldR
    494     TYPE(distrib),OPTIONAL,INTENT(IN) :: old_dist
     553 SUBROUTINE Register_SwapField1d_u2d_bis(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
     554  USE parallel_lmdz
     555  USE dimensions_mod
     556
     557      IMPLICIT NONE
     558
     559    TYPE(distrib),INTENT(IN)          :: new_dist !LF
     560    TYPE(distrib),INTENT(IN)          :: old_dist
     561    REAL, DIMENSION(old_dist%jjb_u:,:),INTENT(IN)     :: FieldS
     562    REAL, DIMENSION(new_dist%jjb_u:,:),INTENT(OUT)    :: FieldR
     563    INTEGER,OPTIONAL,INTENT(IN)       :: up
     564    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     565    TYPE(request),INTENT(INOUT)         :: a_request
     566
     567    INTEGER                           :: halo_up
     568    INTEGER                           :: halo_down
     569   
     570   
     571    halo_up=0
     572    halo_down=0
     573    IF (PRESENT(up))   halo_up=up
     574    IF (PRESENT(down)) halo_down=down
     575
     576    CALL  Register_SwapField_gen_u(FieldS,FieldR,1,old_dist,new_dist,halo_up,halo_down,a_request)
     577       
     578  END SUBROUTINE  Register_SwapField1d_u2d_bis
     579
     580
     581  SUBROUTINE Register_SwapField2d_u2d(FieldS,FieldR,new_dist,a_request,up,down)
     582  USE parallel_lmdz
     583  USE dimensions_mod
     584
     585      IMPLICIT NONE
     586   
    495587    TYPE(distrib),INTENT(IN)          :: new_dist
     588    REAL, DIMENSION(current_dist%jjb_u:,:,:),INTENT(IN)     :: FieldS
     589    REAL, DIMENSION(new_dist%jjb_u:,:,:),INTENT(OUT)    :: FieldR
    496590    INTEGER,OPTIONAL,INTENT(IN)       :: up
    497591    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     
    510604    ll=size(FieldS,3)
    511605   
    512     IF (PRESENT(old_dist)) THEN
    513       CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
    514     ELSE
    515       CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    516     ENDIF
     606    CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    517607   
    518608  END SUBROUTINE  Register_SwapField2d_u2d
    519    
    520 
    521   SUBROUTINE Register_SwapField3d_u2d(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
    522   USE parallel_lmdz
    523   USE dimensions_mod
    524       IMPLICIT NONE
    525    
    526     REAL, DIMENSION(:,:,:,:),INTENT(IN)     :: FieldS
    527     REAL, DIMENSION(:,:,:,:),INTENT(OUT)    :: FieldR
    528     TYPE(distrib),OPTIONAL,INTENT(IN) :: old_dist
     609
     610  SUBROUTINE Register_SwapField2d_u2d_bis(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
     611  USE parallel_lmdz
     612  USE dimensions_mod
     613
     614      IMPLICIT NONE
     615   
    529616    TYPE(distrib),INTENT(IN)          :: new_dist
     617    TYPE(distrib),INTENT(IN) :: old_dist
     618    REAL, DIMENSION(old_dist%jjb_u:,:,:),INTENT(IN)     :: FieldS
     619    REAL, DIMENSION(new_dist%jjb_u:,:,:),INTENT(OUT)    :: FieldR
    530620    INTEGER,OPTIONAL,INTENT(IN)       :: up
    531621    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     
    542632    IF (PRESENT(down)) halo_down=down
    543633   
     634    ll=size(FieldS,3)
     635   
     636    CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
     637   
     638  END SUBROUTINE  Register_SwapField2d_u2d_bis
     639   
     640
     641  SUBROUTINE Register_SwapField3d_u2d(FieldS,FieldR,new_dist,a_request,up,down)
     642  USE parallel_lmdz
     643  USE dimensions_mod
     644      IMPLICIT NONE
     645   
     646    TYPE(distrib),INTENT(IN)          :: new_dist
     647    REAL, DIMENSION(current_dist%jjb_u:,:,:,:),INTENT(IN)     :: FieldS
     648    REAL, DIMENSION(new_dist%jjb_u:,:,:,:),INTENT(OUT)    :: FieldR
     649    INTEGER,OPTIONAL,INTENT(IN)       :: up
     650    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     651    TYPE(request),INTENT(INOUT)         :: a_request
     652
     653    INTEGER                           :: halo_up
     654    INTEGER                           :: halo_down
     655    INTEGER                           :: ll
     656       
     657   
     658    halo_up=0
     659    halo_down=0
     660    IF (PRESENT(up))   halo_up=up
     661    IF (PRESENT(down)) halo_down=down
     662   
    544663    ll=size(FieldS,3)*size(FieldS,4)
    545664   
    546     IF (PRESENT(old_dist)) THEN
    547       CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
    548     ELSE
    549       CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    550     ENDIF
     665    CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    551666   
    552667  END SUBROUTINE  Register_SwapField3d_u2d
    553668
    554 
    555 
    556 
    557 
    558 
    559 
    560   SUBROUTINE Register_SwapField1d_v(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
    561   USE parallel_lmdz
    562   USE dimensions_mod
    563       IMPLICIT NONE
    564    
    565     REAL, DIMENSION(:),INTENT(IN)     :: FieldS
    566     REAL, DIMENSION(:),INTENT(OUT)    :: FieldR
    567     TYPE(distrib),OPTIONAL,INTENT(IN) :: old_dist
     669  SUBROUTINE Register_SwapField3d_u2d_bis(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
     670  USE parallel_lmdz
     671  USE dimensions_mod
     672      IMPLICIT NONE
     673   
    568674    TYPE(distrib),INTENT(IN)          :: new_dist
    569     INTEGER,OPTIONAL,INTENT(IN)       :: up
    570     INTEGER,OPTIONAL,INTENT(IN)       :: down     
    571     TYPE(request),INTENT(INOUT)         :: a_request
    572 
    573     INTEGER                           :: halo_up
    574     INTEGER                           :: halo_down
    575    
    576    
    577     halo_up=0
    578     halo_down=0
    579     IF (PRESENT(up))   halo_up=up
    580     IF (PRESENT(down)) halo_down=down
    581 
    582     IF (PRESENT(old_dist)) THEN
    583       CALL  Register_SwapField_gen_v(FieldS,FieldR,1,old_dist,new_dist,halo_up,halo_down,a_request)
    584     ELSE
    585       CALL  Register_SwapField_gen_v(FieldS,FieldR,1,current_dist,new_dist,halo_up,halo_down,a_request)
    586     ENDIF
     675    TYPE(distrib),INTENT(IN) :: old_dist
     676    REAL, DIMENSION(old_dist%jjb_u:,:,:,:),INTENT(IN)     :: FieldS
     677    REAL, DIMENSION(new_dist%jjb_u:,:,:,:),INTENT(OUT)    :: FieldR
     678    INTEGER,OPTIONAL,INTENT(IN)       :: up
     679    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     680    TYPE(request),INTENT(INOUT)         :: a_request
     681
     682    INTEGER                           :: halo_up
     683    INTEGER                           :: halo_down
     684    INTEGER                           :: ll
     685       
     686   
     687    halo_up=0
     688    halo_down=0
     689    IF (PRESENT(up))   halo_up=up
     690    IF (PRESENT(down)) halo_down=down
     691   
     692    ll=size(FieldS,3)*size(FieldS,4)
     693   
     694    CALL  Register_SwapField_gen_u(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
     695   
     696  END SUBROUTINE  Register_SwapField3d_u2d_bis
     697
     698
     699
     700
     701
     702
     703
     704  SUBROUTINE Register_SwapField1d_v(FieldS,FieldR,new_dist,a_request,up,down)
     705  USE parallel_lmdz
     706  USE dimensions_mod
     707      IMPLICIT NONE
     708   
     709    TYPE(distrib),INTENT(IN)          :: new_dist
     710    REAL, DIMENSION(current_dist%ijb_v:),INTENT(IN)     :: FieldS
     711    REAL, DIMENSION(new_dist%ijb_v:),INTENT(OUT)    :: FieldR
     712    INTEGER,OPTIONAL,INTENT(IN)       :: up
     713    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     714    TYPE(request),INTENT(INOUT)         :: a_request
     715
     716    INTEGER                           :: halo_up
     717    INTEGER                           :: halo_down
     718   
     719   
     720    halo_up=0
     721    halo_down=0
     722    IF (PRESENT(up))   halo_up=up
     723    IF (PRESENT(down)) halo_down=down
     724
     725    CALL  Register_SwapField_gen_v(FieldS,FieldR,1,current_dist,new_dist,halo_up,halo_down,a_request)
    587726       
    588727  END SUBROUTINE  Register_SwapField1d_v
    589728
    590 
    591   SUBROUTINE Register_SwapField2d_v1d(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
    592   USE parallel_lmdz
    593   USE dimensions_mod
    594       IMPLICIT NONE
    595    
    596     REAL, DIMENSION(:,:),INTENT(IN)     :: FieldS
    597     REAL, DIMENSION(:,:),INTENT(OUT)    :: FieldR
    598     TYPE(distrib),OPTIONAL,INTENT(IN) :: old_dist
     729  SUBROUTINE Register_SwapField1d_v_bis(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
     730  USE parallel_lmdz
     731  USE dimensions_mod
     732      IMPLICIT NONE
     733   
    599734    TYPE(distrib),INTENT(IN)          :: new_dist
     735    TYPE(distrib),INTENT(IN) :: old_dist
     736    REAL, DIMENSION(old_dist%ijb_v:),INTENT(IN)     :: FieldS
     737    REAL, DIMENSION(new_dist%ijb_v:),INTENT(OUT)    :: FieldR
     738    INTEGER,OPTIONAL,INTENT(IN)       :: up
     739    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     740    TYPE(request),INTENT(INOUT)         :: a_request
     741
     742    INTEGER                           :: halo_up
     743    INTEGER                           :: halo_down
     744   
     745   
     746    halo_up=0
     747    halo_down=0
     748    IF (PRESENT(up))   halo_up=up
     749    IF (PRESENT(down)) halo_down=down
     750
     751    CALL  Register_SwapField_gen_v(FieldS,FieldR,1,old_dist,new_dist,halo_up,halo_down,a_request)
     752       
     753  END SUBROUTINE  Register_SwapField1d_v_bis
     754
     755
     756  SUBROUTINE Register_SwapField2d_v1d(FieldS,FieldR,new_dist,a_request,up,down)
     757  USE parallel_lmdz
     758  USE dimensions_mod
     759      IMPLICIT NONE
     760   
     761    TYPE(distrib),INTENT(IN)          :: new_dist
     762    REAL, DIMENSION(current_dist%ijb_v:,:),INTENT(IN)     :: FieldS
     763    REAL, DIMENSION(new_dist%ijb_v:,:),INTENT(OUT)    :: FieldR
    600764    INTEGER,OPTIONAL,INTENT(IN)       :: up
    601765    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     
    614778    ll=size(FieldS,2)
    615779   
    616     IF (PRESENT(old_dist)) THEN
    617       CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
    618     ELSE
    619       CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    620     ENDIF
     780    CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    621781   
    622782  END SUBROUTINE  Register_SwapField2d_v1d
    623    
    624 
    625   SUBROUTINE Register_SwapField3d_v(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
    626   USE parallel_lmdz
    627   USE dimensions_mod
    628       IMPLICIT NONE
    629    
    630     REAL, DIMENSION(:,:,:),INTENT(IN)     :: FieldS
    631     REAL, DIMENSION(:,:,:),INTENT(OUT)    :: FieldR
    632     TYPE(distrib),OPTIONAL,INTENT(IN) :: old_dist
     783 
     784  SUBROUTINE Register_SwapField2d_v1d_bis(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
     785  USE parallel_lmdz
     786  USE dimensions_mod
     787      IMPLICIT NONE
     788   
    633789    TYPE(distrib),INTENT(IN)          :: new_dist
     790    TYPE(distrib),INTENT(IN)          :: old_dist
     791    REAL, DIMENSION(old_dist%ijb_v:,:),INTENT(IN)     :: FieldS
     792    REAL, DIMENSION(new_dist%ijb_v:,:),INTENT(OUT)    :: FieldR
    634793    INTEGER,OPTIONAL,INTENT(IN)       :: up
    635794    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     
    646805    IF (PRESENT(down)) halo_down=down
    647806   
     807    ll=size(FieldS,2)
     808   
     809    CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
     810   
     811  END SUBROUTINE  Register_SwapField2d_v1d_bis
     812 
     813   
     814
     815  SUBROUTINE Register_SwapField3d_v(FieldS,FieldR,new_dist,a_request,up,down)
     816  USE parallel_lmdz
     817  USE dimensions_mod
     818      IMPLICIT NONE
     819   
     820    TYPE(distrib),INTENT(IN)          :: new_dist
     821    REAL, DIMENSION(current_dist%ijb_v:,:,:),INTENT(IN)     :: FieldS
     822    REAL, DIMENSION(new_dist%ijb_v:,:,:),INTENT(OUT)    :: FieldR
     823    INTEGER,OPTIONAL,INTENT(IN)       :: up
     824    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     825    TYPE(request),INTENT(INOUT)         :: a_request
     826
     827    INTEGER                           :: halo_up
     828    INTEGER                           :: halo_down
     829    INTEGER                           :: ll
     830       
     831   
     832    halo_up=0
     833    halo_down=0
     834    IF (PRESENT(up))   halo_up=up
     835    IF (PRESENT(down)) halo_down=down
     836   
    648837    ll=size(FieldS,2)*size(FieldS,3)
    649838   
    650     IF (PRESENT(old_dist)) THEN
    651       CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
    652     ELSE
    653       CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    654     ENDIF
     839    CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    655840   
    656841  END SUBROUTINE  Register_SwapField3d_v
    657842
    658 
    659 
    660 
    661   SUBROUTINE Register_SwapField1d_v2d(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
    662   USE parallel_lmdz
    663   USE dimensions_mod
    664       IMPLICIT NONE
    665    
    666     REAL, DIMENSION(:,:),INTENT(IN)     :: FieldS
    667     REAL, DIMENSION(:,:),INTENT(OUT)    :: FieldR
    668     TYPE(distrib),OPTIONAL,INTENT(IN) :: old_dist
    669     TYPE(distrib),OPTIONAL,INTENT(IN)          :: new_dist !LF
    670     INTEGER,OPTIONAL,INTENT(IN)       :: up
    671     INTEGER,OPTIONAL,INTENT(IN)       :: down     
    672     TYPE(request),INTENT(INOUT)         :: a_request
    673 
    674     INTEGER                           :: halo_up
    675     INTEGER                           :: halo_down
    676    
    677    
    678     halo_up=0
    679     halo_down=0
    680     IF (PRESENT(up))   halo_up=up
    681     IF (PRESENT(down)) halo_down=down
    682 
    683     IF (PRESENT(old_dist)) THEN
    684       CALL  Register_SwapField_gen_v(FieldS,FieldR,1,old_dist,new_dist,halo_up,halo_down,a_request)
    685     ELSE
    686       CALL  Register_SwapField_gen_v(FieldS,FieldR,1,current_dist,new_dist,halo_up,halo_down,a_request)
    687     ENDIF
     843  SUBROUTINE Register_SwapField3d_v_bis(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
     844  USE parallel_lmdz
     845  USE dimensions_mod
     846      IMPLICIT NONE
     847   
     848    TYPE(distrib),INTENT(IN)          :: new_dist
     849    TYPE(distrib),INTENT(IN) :: old_dist
     850    REAL, DIMENSION(old_dist%ijb_v:,:,:),INTENT(IN)     :: FieldS
     851    REAL, DIMENSION(new_dist%ijb_v:,:,:),INTENT(OUT)    :: FieldR
     852    INTEGER,OPTIONAL,INTENT(IN)       :: up
     853    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     854    TYPE(request),INTENT(INOUT)         :: a_request
     855
     856    INTEGER                           :: halo_up
     857    INTEGER                           :: halo_down
     858    INTEGER                           :: ll
     859       
     860   
     861    halo_up=0
     862    halo_down=0
     863    IF (PRESENT(up))   halo_up=up
     864    IF (PRESENT(down)) halo_down=down
     865   
     866    ll=size(FieldS,2)*size(FieldS,3)
     867   
     868    CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
     869   
     870  END SUBROUTINE  Register_SwapField3d_v_bis
     871
     872
     873
     874
     875  SUBROUTINE Register_SwapField1d_v2d(FieldS,FieldR,new_dist,a_request,up,down)
     876  USE parallel_lmdz
     877  USE dimensions_mod
     878      IMPLICIT NONE
     879   
     880    TYPE(distrib),INTENT(IN)          :: new_dist !LF
     881    REAL, DIMENSION(current_dist%jjb_v:,:),INTENT(IN)     :: FieldS
     882    REAL, DIMENSION(new_dist%jjb_v:,:),INTENT(OUT)    :: FieldR
     883    INTEGER,OPTIONAL,INTENT(IN)       :: up
     884    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     885    TYPE(request),INTENT(INOUT)         :: a_request
     886
     887    INTEGER                           :: halo_up
     888    INTEGER                           :: halo_down
     889   
     890   
     891    halo_up=0
     892    halo_down=0
     893    IF (PRESENT(up))   halo_up=up
     894    IF (PRESENT(down)) halo_down=down
     895
     896    CALL  Register_SwapField_gen_v(FieldS,FieldR,1,current_dist,new_dist,halo_up,halo_down,a_request)
    688897       
    689898  END SUBROUTINE  Register_SwapField1d_v2d
    690899
    691 
    692   SUBROUTINE Register_SwapField2d_v2d(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
    693   USE parallel_lmdz
    694   USE dimensions_mod
    695       IMPLICIT NONE
    696    
    697     REAL, DIMENSION(:,:,:),INTENT(IN)     :: FieldS
    698     REAL, DIMENSION(:,:,:),INTENT(OUT)    :: FieldR
    699     TYPE(distrib),OPTIONAL,INTENT(IN) :: old_dist
     900  SUBROUTINE Register_SwapField1d_v2d_bis(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
     901  USE parallel_lmdz
     902  USE dimensions_mod
     903      IMPLICIT NONE
     904   
     905    TYPE(distrib),INTENT(IN)          :: new_dist !LF
     906    TYPE(distrib),INTENT(IN) :: old_dist
     907    REAL, DIMENSION(old_dist%jjb_v:,:),INTENT(IN)     :: FieldS
     908    REAL, DIMENSION(new_dist%jjb_v:,:),INTENT(OUT)    :: FieldR
     909    INTEGER,OPTIONAL,INTENT(IN)       :: up
     910    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     911    TYPE(request),INTENT(INOUT)         :: a_request
     912
     913    INTEGER                           :: halo_up
     914    INTEGER                           :: halo_down
     915   
     916   
     917    halo_up=0
     918    halo_down=0
     919    IF (PRESENT(up))   halo_up=up
     920    IF (PRESENT(down)) halo_down=down
     921
     922    CALL  Register_SwapField_gen_v(FieldS,FieldR,1,old_dist,new_dist,halo_up,halo_down,a_request)
     923       
     924  END SUBROUTINE  Register_SwapField1d_v2d_bis
     925
     926
     927  SUBROUTINE Register_SwapField2d_v2d(FieldS,FieldR,new_dist,a_request,up,down)
     928  USE parallel_lmdz
     929  USE dimensions_mod
     930      IMPLICIT NONE
     931   
    700932    TYPE(distrib),INTENT(IN)          :: new_dist
     933    REAL, DIMENSION(current_dist%jjb_v:,:,:),INTENT(IN)     :: FieldS
     934    REAL, DIMENSION(new_dist%jjb_v:,:,:),INTENT(OUT)    :: FieldR
    701935    INTEGER,OPTIONAL,INTENT(IN)       :: up
    702936    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     
    715949    ll=size(FieldS,3)
    716950   
    717     IF (PRESENT(old_dist)) THEN
    718       CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
    719     ELSE
    720       CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    721     ENDIF
     951    CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    722952   
    723953  END SUBROUTINE  Register_SwapField2d_v2d
    724954   
    725 
    726   SUBROUTINE Register_SwapField3d_v2d(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
    727   USE parallel_lmdz
    728   USE dimensions_mod
    729       IMPLICIT NONE
    730    
    731     REAL, DIMENSION(:,:,:,:),INTENT(IN)     :: FieldS
    732     REAL, DIMENSION(:,:,:,:),INTENT(OUT)    :: FieldR
    733     TYPE(distrib),OPTIONAL,INTENT(IN) :: old_dist
     955  SUBROUTINE Register_SwapField2d_v2d_bis(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
     956  USE parallel_lmdz
     957  USE dimensions_mod
     958      IMPLICIT NONE
     959   
    734960    TYPE(distrib),INTENT(IN)          :: new_dist
     961    TYPE(distrib),INTENT(IN) :: old_dist
     962    REAL, DIMENSION(old_dist%jjb_v:,:,:),INTENT(IN)     :: FieldS
     963    REAL, DIMENSION(new_dist%jjb_v:,:,:),INTENT(OUT)    :: FieldR
    735964    INTEGER,OPTIONAL,INTENT(IN)       :: up
    736965    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     
    747976    IF (PRESENT(down)) halo_down=down
    748977   
     978    ll=size(FieldS,3)
     979   
     980    CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
     981   
     982  END SUBROUTINE  Register_SwapField2d_v2d_bis
     983   
     984
     985  SUBROUTINE Register_SwapField3d_v2d(FieldS,FieldR,new_dist,a_request,up,down)
     986  USE parallel_lmdz
     987  USE dimensions_mod
     988      IMPLICIT NONE
     989   
     990    TYPE(distrib),INTENT(IN)          :: new_dist
     991    REAL, DIMENSION(current_dist%jjb_v:,:,:,:),INTENT(IN)     :: FieldS
     992    REAL, DIMENSION(new_dist%jjb_v:,:,:,:),INTENT(OUT)    :: FieldR
     993    INTEGER,OPTIONAL,INTENT(IN)       :: up
     994    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     995    TYPE(request),INTENT(INOUT)         :: a_request
     996
     997    INTEGER                           :: halo_up
     998    INTEGER                           :: halo_down
     999    INTEGER                           :: ll
     1000       
     1001   
     1002    halo_up=0
     1003    halo_down=0
     1004    IF (PRESENT(up))   halo_up=up
     1005    IF (PRESENT(down)) halo_down=down
     1006   
    7491007    ll=size(FieldS,3)*size(FieldS,4)
    7501008   
    751     IF (PRESENT(old_dist)) THEN
    752       CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
    753     ELSE
    754       CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    755     ENDIF
     1009    CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,current_dist,new_dist,halo_up,halo_down,a_request)
    7561010   
    7571011  END SUBROUTINE  Register_SwapField3d_v2d
     1012 
     1013  SUBROUTINE Register_SwapField3d_v2d_bis(FieldS,FieldR,new_dist,a_request,old_dist,up,down)
     1014  USE parallel_lmdz
     1015  USE dimensions_mod
     1016      IMPLICIT NONE
     1017   
     1018    TYPE(distrib),INTENT(IN)          :: new_dist
     1019    TYPE(distrib),INTENT(IN) :: old_dist
     1020    REAL, DIMENSION(old_dist%jjb_v:,:,:,:),INTENT(IN)     :: FieldS
     1021    REAL, DIMENSION(new_dist%jjb_v:,:,:,:),INTENT(OUT)    :: FieldR
     1022    INTEGER,OPTIONAL,INTENT(IN)       :: up
     1023    INTEGER,OPTIONAL,INTENT(IN)       :: down     
     1024    TYPE(request),INTENT(INOUT)         :: a_request
     1025
     1026    INTEGER                           :: halo_up
     1027    INTEGER                           :: halo_down
     1028    INTEGER                           :: ll
     1029       
     1030   
     1031    halo_up=0
     1032    halo_down=0
     1033    IF (PRESENT(up))   halo_up=up
     1034    IF (PRESENT(down)) halo_down=down
     1035   
     1036    ll=size(FieldS,3)*size(FieldS,4)
     1037   
     1038    CALL  Register_SwapField_gen_v(FieldS,FieldR,ll,old_dist,new_dist,halo_up,halo_down,a_request)
     1039   
     1040  END SUBROUTINE  Register_SwapField3d_v2d_bis
    7581041 
    7591042 
Note: See TracChangeset for help on using the changeset viewer.