From 57306424f0ba837643433b2fa16c2440fb523164 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Fri, 25 May 2018 10:36:29 +0200
Subject: [PATCH] Philippe 25/05/2018: workarounds for problems with PGI
 compiler (version 18.4)

---
 src/LIB/SURCOUCHE/src/mode_netcdf.f90    | 11 ++++++++---
 src/LIB/SURCOUCHE/src/mode_toolsz_ll.f90 |  8 ++++----
 src/LIB/SURCOUCHE/src/update_nhalo1d.f90 |  6 ++++--
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index da109e179..14442683d 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -961,6 +961,7 @@ INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KLEN
 INTEGER(KIND=IDCDF_KIND)            :: GETSTRDIMID
 
 TYPE(DIMCDF), POINTER :: TMP
+TYPE(IOCDF),  POINTER :: TZIOCDF
 CHARACTER(LEN=16)     :: YSUFFIX
 INTEGER(KIND=IDCDF_KIND) :: STATUS
 
@@ -988,7 +989,8 @@ IF (.NOT. ASSOCIATED(TMP)) THEN
    IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'GETSTRDIMID[NF90_DEF_DIM]')
    NULLIFY(TMP%NEXT)
    TMP%NEXT      => TPFILE%TNCDIMS%DIMSTR
-   TPFILE%TNCDIMS%DIMSTR => TMP
+   TZIOCDF => TPFILE%TNCDIMS
+   TZIOCDF%DIMSTR => TMP
 END IF
 
 GETSTRDIMID = TMP%ID
@@ -1722,6 +1724,7 @@ INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
 INTEGER                  :: IRESP
 LOGICAL                  :: GEXISTED !True if variable was already defined
+TYPE(IOCDF), POINTER     :: TZIOCDF
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
@@ -1781,8 +1784,10 @@ IF (YVARNAME == 'JMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIM_NJ)) THEN
    END IF
 END IF
 #endif
-IF (YVARNAME == 'KMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIM_LEVEL)) &
-  TPFILE%TNCDIMS%DIM_LEVEL=>GETDIMCDF(TPFILE,INT(KFIELD+2*JPVEXT,KIND=IDCDF_KIND),'Z')
+IF (YVARNAME == 'KMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIM_LEVEL)) THEN
+  TZIOCDF => TPFILE%TNCDIMS
+  TZIOCDF%DIM_LEVEL=>GETDIMCDF(TPFILE,INT(KFIELD+2*JPVEXT,KIND=IDCDF_KIND),'Z')
+END IF
  
 KRESP = IRESP
 END SUBROUTINE IO_WRITE_FIELD_NC4_N0
diff --git a/src/LIB/SURCOUCHE/src/mode_toolsz_ll.f90 b/src/LIB/SURCOUCHE/src/mode_toolsz_ll.f90
index 35487689a..91cc5b329 100644
--- a/src/LIB/SURCOUCHE/src/mode_toolsz_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_toolsz_ll.f90
@@ -841,8 +841,7 @@
       !
       ! Local Variable
       !
-      !TYPE(ZONE_ll), ALLOCATABLE, DIMENSION(:) :: TP_ZONE_FROM,TP_ZONE_TO,TZINTER
-      TYPE(ZONE_ll)          , DIMENSION(KPROC) :: TP_ZONE_FROM,TP_ZONE_TO,TZINTER
+      TYPE(ZONE_ll), ALLOCATABLE, DIMENSION(:)  :: TP_ZONE_FROM,TP_ZONE_TO,TZINTER
       INTEGER                                   :: JI,JII,NSEND,JB,JE,JINC,ITIC
       INTEGER                , DIMENSION(KPROC) :: ISEND
       !-------------------------------------------------------------------------------
@@ -850,8 +849,7 @@
       !*       1.    ALLOCATE OF THE LOCAL VARIABLES :
       !              -------------------------------
       !
-      !ALLOCATE( TZPZS(KPROC), TZTRANSXZS(KPROC), &
-      !     TZTRANSYZS(KPROC), TZINTER(KPROC) )
+      ALLOCATE(TP_ZONE_FROM(KPROC),TP_ZONE_TO(KPROC),TZINTER(KPROC))
       !
       !-------------------------------------------------------------------------------
       !
@@ -921,6 +919,8 @@
       END DO
       CALL G2LXZ(TP_TSPLITS_FROM(JI),TP_TRANS_FROM_TO,TBOX_FROM_TO)
       !
+      DEALLOCATE(TP_ZONE_FROM,TP_ZONE_TO,TZINTER)
+      !
     END SUBROUTINE CONSTRUCT_TRANSZZ
   END SUBROUTINE CONSTRUCT_TRANSZ
 
diff --git a/src/LIB/SURCOUCHE/src/update_nhalo1d.f90 b/src/LIB/SURCOUCHE/src/update_nhalo1d.f90
index e0f6815b4..d899568ad 100644
--- a/src/LIB/SURCOUCHE/src/update_nhalo1d.f90
+++ b/src/LIB/SURCOUCHE/src/update_nhalo1d.f90
@@ -87,8 +87,8 @@ INTEGER :: IINFO_ll
 !
 ! structures for the partitionning
 !
-TYPE(ZONE_ll), DIMENSION(NPROC) :: TZSPLITTING_PHYS  !physical splitting of the field
-TYPE(ZONE_ll), DIMENSION(NPROC) :: TZSPLITTING_EXT   !extended splitting of the field
+TYPE(ZONE_ll), DIMENSION(:),ALLOCATABLE :: TZSPLITTING_PHYS  !physical splitting of the field
+TYPE(ZONE_ll), DIMENSION(:),ALLOCATABLE :: TZSPLITTING_EXT   !extended splitting of the field
 TYPE(ZONE_ll) :: TZFIELD_ll ! global field
 !
 ! structures for the communications
@@ -121,6 +121,7 @@ INTEGER , DIMENSION(NPROC) :: IRECVCOUNTS !nteger array containing the number of
 !!
 !!	we assume that the sizes are correct
 !!
+ALLOCATE(TZSPLITTING_PHYS(NPROC),TZSPLITTING_EXT(NPROC))
 !------------------------------------------------------------------------------
 !
 !*       1.    Partitionning of the field
@@ -378,6 +379,7 @@ DEALLOCATE(PFIELD3D)
 DEALLOCATE(PFIELDTMP)
 DEALLOCATE(TZSEND)
 DEALLOCATE(TZRECV)
+DEALLOCATE(TZSPLITTING_PHYS,TZSPLITTING_EXT)
 IF (LHOOK) CALL DR_HOOK('UPDATE_NHALO1D',1,ZHOOK_HANDLE)
 !---------------------------------------------------------------------------
 !
-- 
GitLab