SETDIJ_AVEC_ syntax glitches
Posted: Wed Dec 01, 2010 12:21 am
I noticed a couple of glitches regarding SETDIJ_AVEC_() in the new vasp-5.2.11 release, flagged by the Intel-11 compilers.
First, a mismatching name in END SUBROUTINE:
Second, a question about argument type: AVTOT_(1,1) or AVTOT_, and calling SETDIJ_AVEC_() vs. SETDIJ_AVEC_ONE_CENTER() -- the latter having an additional argument:
The following fixes worked for me:
First, a mismatching name in END SUBROUTINE:
Code: Select all
mpif90 -FR -lowercase -O1 -c us.f90
us.f90(190): error #6758: This name is invalid; if a name is present, it must match the corresponding interface body name.   SETDIJ_AVEC_
    END SUBROUTINE SETDIJ_AVEC_
-------------------^
compilation aborted for us.f90 (code 1)
Code: Select all
mpif90 -FR -lowercase -assume byterecl -i4 -O2 -ip -ftz   -c nmr.f90
nmr.f90(3056): warning #7866: The statement following this DEC loop optimization directive must be an iterative do-stmt, a vector assignment, an OMP pdo-directive, or an OMP parallel-do-directive.
!DIR$Â IVDEP
------^
nmr.f90(3746): error #6784: The number of actual arguments cannot be greater than the number of dummy arguments.   [SETDIJ_AVEC_]
      CALL SETDIJ_AVEC_(W%WDES, GRIDC,GRIDUS,C_TO_US,LATT_CUR,P,T_INFO, W%WDES%LOVERL, &
-----------^
nmr.f90(4458): error #7836: If the actual argument is scalar, the corresponding dummy argument shall be scalar unless the actual argument is an element of an array that is not an assumed-shape or pointer array, or a substring of such an element.   [AVTOT_]
         CALL SETDIJ_AVEC_(WDES, GRIDC_,GRIDUS,C_TO_US,LATT_CUR,P,T_INFO, LOVERL, &
--------------^
compilation aborted for nmr.f90 (code 1)
Code: Select all
diff -ru vasp.5.2/nmr.F vasp.5.2.11/nmr.F
---Â vasp.5.2/nmr.F 2010-11-29Â 08:38:04.000000000Â -0600
+++Â vasp.5.2.11/nmr.F 2010-11-30Â 18:24:48.000000000Â -0600
@@Â -3754,7Â +3754,7Â @@
       ALLOCATE(A_ONE_CENTER(3,9,T_INFO%NIONS))
Â
       DISPL=0
-      CALL SETDIJ_AVEC_(W%WDES, GRIDC,GRIDUS,C_TO_US,LATT_CUR,P,T_INFO, W%WDES%LOVERL, &
+      CALL SETDIJ_AVEC_ONE_CENTER(W%WDES, GRIDC,GRIDUS,C_TO_US,LATT_CUR,P,T_INFO, W%WDES%LOVERL, &
            LMDIM,CDIJ,AVTOT,  NONLR_S, NONL_S, IRDMAX, DISPL, A_ONE_CENTER)
Â
       CALL ONE_CENTRE_MOMENT( &
@@Â -4484,7Â +4484,7Â @@
      Â
 !GILTEST      IF ( .NOT. LBFCONST) THEN
          CALL SETDIJ_AVEC_(WDES, GRIDC_,GRIDUS,C_TO_US,LATT_CUR,P,T_INFO, LOVERL, &
-           LMDIM,CDIJ,AVTOT_(1,1),  NONLR_S, NONL_S, IRDMAX, DISPL)
+           LMDIM,CDIJ,AVTOT_,  NONLR_S, NONL_S, IRDMAX, DISPL)
 !GILTEST      ELSE
 !GILTEST         CALL SETDIJ_AVEC_DUMM(WDES, GRIDC_,GRIDUS,C_TO_US,LATT_CUR,P,T_INFO, LOVERL, &
 !GILTEST           LMDIM,CDIJ,AVTOT_(1,1),  NONLR_S, NONL_S, IRDMAX, DISPL)
@@Â -4496,7Â +4496,7Â @@
      Â
 !GILTEST         IF ( .NOT. LBFCONST) THEN
             CALL SETDIJ_AVEC_(WDES, GRIDC_,GRIDUS,C_TO_US,LATT_CUR,P,T_INFO, LOVERL, &
-            LMDIM,CDIJ,AVTOT_(1,1),  NONLR_S, NONL_S, IRDMAX, DISPL)
+            LMDIM,CDIJ,AVTOT_,  NONLR_S, NONL_S, IRDMAX, DISPL)
 !GILTEST         ELSE
 !GILTEST            CALL SETDIJ_AVEC_DUMM(WDES, GRIDC_,GRIDUS,C_TO_US,LATT_CUR,P,T_INFO, LOVERL, &
 !GILTEST            LMDIM,CDIJ,AVTOT_,  NONLR_S, NONL_S, IRDMAX, DISPL)
diff -ru vasp.5.2/us.F vasp.5.2.11/us.F
---Â vasp.5.2/us.F 2010-11-29Â 08:38:01.000000000Â -0600
+++Â vasp.5.2.11/us.F 2010-11-30Â 18:18:15.000000000Â -0600
@@Â -146,7Â +146,7Â @@
       LOGICAL  LOVERL
       REAL(q)  DISPL(3,T_INFO%NIONS)
       REAL(q)  A_ONE_CENTER(:,:,:)
-Â Â Â Â ENDÂ SUBROUTINEÂ SETDIJ_AVEC_
+Â Â Â Â ENDÂ SUBROUTINEÂ SETDIJ_AVEC_ONE_CENTER
   END INTERFACE
 #endif
Â