bz_form.f90 and wypos.f90 took a disproportionate amount of compilation time,

likely due to the length of those routines. After recasting long routines inyo
into a long list of calls to small subroutines, compilation time is much more 
acceptable. Many changes but everything should work exactly as before.


git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@13376 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
giannozz 2017-03-03 13:21:49 +00:00
parent ef1c3b7f3d
commit e792274870
2 changed files with 2382 additions and 532 deletions

View File

@ -237,14 +237,54 @@ END SUBROUTINE
SUBROUTINE init_bz(bz_struc) SUBROUTINE init_bz(bz_struc)
IMPLICIT NONE IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc TYPE(bz), INTENT(INOUT) :: bz_struc
INTEGER :: n1(6), n2(6), i INTEGER :: ibz
INTEGER :: ibz, idir, idir1
bz_struc%letter_list(1)='gG ' bz_struc%letter_list(1)='gG '
bz_struc%letter_coord(:,1)=0.0_DP bz_struc%letter_coord(:,1)=0.0_DP
ibz=bz_struc%ind ibz=bz_struc%ind
IF ( ibz ==1) THEN IF ( ibz ==1) THEN
CALL init_bz_1(bz_struc)
ELSEIF (ibz==2) THEN
CALL init_bz_2(bz_struc)
ELSEIF (ibz==3) THEN
CALL init_bz_3(bz_struc)
ELSEIF (ibz==4) THEN
CALL init_bz_4(bz_struc)
ELSEIF (ibz==5) THEN
CALL init_bz_5(bz_struc)
ELSEIF (ibz==6) THEN
CALL init_bz_6(bz_struc)
ELSEIF (ibz==7) THEN
CALL init_bz_7(bz_struc)
ELSEIF (ibz==8) THEN
CALL init_bz_8(bz_struc)
ELSEIF (ibz==9) THEN
CALL init_bz_9(bz_struc)
ELSEIF (ibz==10) THEN
CALL init_bz_10(bz_struc)
ELSEIF (ibz==11) THEN
CALL init_bz_11(bz_struc)
ELSEIF (ibz==12) THEN
CALL init_bz_12(bz_struc)
ELSEIF (ibz==13) THEN
CALL init_bz_13(bz_struc)
ELSEIF (ibz==14) THEN
CALL init_bz_14(bz_struc)
ELSEIF (ibz==15) THEN
CALL init_bz_15(bz_struc)
ELSEIF (ibz==16) THEN
CALL init_bz_16(bz_struc)
ELSE
CALL errore('init_bz','Brillouin zone type not available',1)
ENDIF
RETURN
END SUBROUTINE init_bz
SUBROUTINE init_bz_1(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! simple cubic bz ! simple cubic bz
! !
@ -286,7 +326,11 @@ IF ( ibz ==1) THEN
CALL find_axis_coordinates(bz_struc) CALL find_axis_coordinates(bz_struc)
ELSEIF (ibz==2) THEN END SUBROUTINE init_bz_1
SUBROUTINE init_bz_2(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! fcc bz ! fcc bz
! !
@ -384,7 +428,12 @@ ELSEIF (ibz==2) THEN
CALL find_axis_coordinates(bz_struc) CALL find_axis_coordinates(bz_struc)
ELSEIF (ibz==3) THEN END SUBROUTINE init_bz_2
SUBROUTINE init_bz_3(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! bcc bz ! bcc bz
! !
@ -452,8 +501,12 @@ ELSEIF (ibz==3) THEN
CALL find_axis_coordinates(bz_struc) CALL find_axis_coordinates(bz_struc)
END SUBROUTINE init_bz_3
SUBROUTINE init_bz_4(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
ELSEIF (ibz==4) THEN
! !
! simple tetragonal bz ! simple tetragonal bz
! !
@ -489,7 +542,12 @@ ELSEIF (ibz==4) THEN
CALL find_axis_coordinates(bz_struc) CALL find_axis_coordinates(bz_struc)
ELSEIF (ibz==5) THEN END SUBROUTINE init_bz_4
SUBROUTINE init_bz_5(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! centered tetragonal (c<a) bz ! centered tetragonal (c<a) bz
! !
@ -540,7 +598,11 @@ ELSEIF (ibz==5) THEN
CALL find_axis_coordinates(bz_struc) CALL find_axis_coordinates(bz_struc)
ELSEIF (ibz==6) THEN END SUBROUTINE init_bz_5
SUBROUTINE init_bz_6(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! centered tetragonal (c>a) bz ! centered tetragonal (c>a) bz
! !
@ -627,7 +689,11 @@ ELSEIF (ibz==6) THEN
CALL find_axis_coordinates(bz_struc) CALL find_axis_coordinates(bz_struc)
ELSEIF (ibz==7) THEN END SUBROUTINE init_bz_6
SUBROUTINE init_bz_7(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! simple orthorombic bz ! simple orthorombic bz
! !
@ -667,7 +733,11 @@ ELSEIF (ibz==7) THEN
CALL find_axis_coordinates(bz_struc) CALL find_axis_coordinates(bz_struc)
ELSEIF (ibz==8) THEN END SUBROUTINE init_bz_7
SUBROUTINE init_bz_8(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! face centered orthorombic (1/a^2 > 1/b^2 + 1/c^2) bz ! face centered orthorombic (1/a^2 > 1/b^2 + 1/c^2) bz
! !
@ -764,7 +834,11 @@ ELSEIF (ibz==8) THEN
CALL adjust_orthorombic(bz_struc) CALL adjust_orthorombic(bz_struc)
ELSEIF (ibz==9) THEN END SUBROUTINE init_bz_8
SUBROUTINE init_bz_9(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! face centered orthorombic (1/a^2 < 1/b^2 + 1/c^2) bz case 2 ! face centered orthorombic (1/a^2 < 1/b^2 + 1/c^2) bz case 2
! !
@ -886,7 +960,12 @@ ELSEIF (ibz==9) THEN
CALL adjust_orthorombic(bz_struc) CALL adjust_orthorombic(bz_struc)
ELSEIF (ibz==10) THEN END SUBROUTINE init_bz_9
SUBROUTINE init_bz_10(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! face centered orthorombic (1/a^2 = 1/b^2 + 1/c^2) bz ! face centered orthorombic (1/a^2 = 1/b^2 + 1/c^2) bz
! !
@ -980,7 +1059,11 @@ ELSEIF (ibz==10) THEN
CALL find_axis_coordinates(bz_struc) CALL find_axis_coordinates(bz_struc)
CALL adjust_orthorombic(bz_struc) CALL adjust_orthorombic(bz_struc)
ELSEIF (ibz==11) THEN END SUBROUTINE init_bz_10
SUBROUTINE init_bz_11(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! body centered orthorombic bz ! body centered orthorombic bz
! !
@ -1174,7 +1257,12 @@ ELSEIF (ibz==11) THEN
CALL find_axis_coordinates(bz_struc) CALL find_axis_coordinates(bz_struc)
CALL adjust_orthorombic(bz_struc) CALL adjust_orthorombic(bz_struc)
ELSEIF (ibz==12) THEN END SUBROUTINE init_bz_11
SUBROUTINE init_bz_12(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! one face centered orthorombic bz ! one face centered orthorombic bz
! !
@ -1260,7 +1348,11 @@ ELSEIF (ibz==12) THEN
CALL adjust_one_face_centered_orthorombic(bz_struc) CALL adjust_one_face_centered_orthorombic(bz_struc)
ELSEIF (ibz==13) THEN END SUBROUTINE init_bz_12
SUBROUTINE init_bz_13(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! hexagonal ! hexagonal
! !
@ -1299,8 +1391,12 @@ ELSEIF (ibz==13) THEN
bz_struc%letter_coord(:,6) = bz_struc%vertex_coord(:,1) bz_struc%letter_coord(:,6) = bz_struc%vertex_coord(:,1)
CALL find_axis_coordinates(bz_struc) CALL find_axis_coordinates(bz_struc)
!
ELSEIF (ibz==14) THEN END SUBROUTINE init_bz_13
SUBROUTINE init_bz_14(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! trigonal alpha < 90 bz ! trigonal alpha < 90 bz
! !
@ -1369,7 +1465,12 @@ ELSEIF (ibz==14) THEN
bz_struc%vertex_coord(:,14)) bz_struc%vertex_coord(:,14))
CALL find_axis_coordinates(bz_struc) CALL find_axis_coordinates(bz_struc)
ELSEIF (ibz==15) THEN END SUBROUTINE init_bz_14
SUBROUTINE init_bz_15(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
! !
! trigonal alpha > 90 bz ! trigonal alpha > 90 bz
! !
@ -1429,8 +1530,13 @@ ELSEIF (ibz==15) THEN
bz_struc%letter_coord(:,8) = bz_struc%vertex_coord(:,7) bz_struc%letter_coord(:,8) = bz_struc%vertex_coord(:,7)
CALL find_axis_coordinates(bz_struc) CALL find_axis_coordinates(bz_struc)
!
ELSEIF (ibz==16) THEN END SUBROUTINE init_bz_15
SUBROUTINE init_bz_16(bz_struc)
IMPLICIT NONE
TYPE(bz), INTENT(INOUT) :: bz_struc
INTEGER :: n1(6), n2(6), i, idir, idir1
! !
! Simple monoclinic lattice ! Simple monoclinic lattice
! !
@ -1489,12 +1595,7 @@ ELSEIF (ibz==16) THEN
CALL find_axis_coordinates(bz_struc) CALL find_axis_coordinates(bz_struc)
ELSE END SUBROUTINE init_bz_16
CALL errore('init_bz','Brillouin zone type not available',1)
ENDIF
RETURN
END SUBROUTINE init_bz
SUBROUTINE compute_vertices(bz_struc) SUBROUTINE compute_vertices(bz_struc)
! !

File diff suppressed because it is too large Load Diff