Skip to content

Commit ea835e3

Browse files
committed
Merge branch 'development' into 'main'
Development See merge request hepplestone/artemis!9
2 parents afdb2c4 + d561f4d commit ea835e3

102 files changed

Lines changed: 21515 additions & 1325 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,8 @@
22
\#
33
bin/
44
obj/
5-
*.mod
5+
*.mod
6+
tests/*/*.txt
7+
tests/*/*.out
8+
tests/*/DINTERFACES
9+
tests/*/DTERMINATIONS

Makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ OBJS := $(addprefix $(SRC_DIR)/,$(SRCS))
3838
##########################################
3939
FFLAGS = -O2
4040
#PPFLAGS = -cpp
41-
FC?=gfortran
41+
FC=gfortran
4242
ifeq ($(FC),ifort)
4343
MPIFLAG = -qopenmp
4444
MODULEFLAG = -module
4545
DEVFLAGS = -check all -warn #all
46-
DEBUGFLAGS = -check all -fpe0 -warn -tracekback -debug extended # -check bounds
46+
DEBUGFLAGS = -check all -fpe0 -warn -tracekback -debug extended
4747
else
4848
MPIFLAG = -fopenmp
4949
MODULEFLAG = -J
50-
DEVFLAGS = -g -static -ffpe-trap=invalid
51-
DEBUGFLAGS = -fbounds-check
50+
DEVFLAGS = -g -fbacktrace -fcheck=all
51+
DEBUGFLAGS = -fbounds-check -Wall -Wno-maybe-uninitialized
5252
endif
5353

5454

src/aspect.f90

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,20 @@ module aspect
3636
public :: edit_structure
3737

3838

39-
!!!updated 2019/11/17
39+
!!!updated 2023/03/27
4040

4141

4242
contains
4343
!!!#############################################################################
4444
!!!
4545
!!!#############################################################################
46-
subroutine edit_structure(lat,bas,ofile,edits)
46+
subroutine edit_structure(lat,bas,ofile,edits,lnorm)
4747
implicit none
4848
integer :: GEOMunit,i
4949
type(bas_type) :: edited_bas
5050
double precision, dimension(3,3) :: edited_lat
5151
character(len=*), intent(in) :: ofile
52+
logical, optional, intent(in) :: lnorm
5253
type(bas_type), intent(in) :: bas
5354
type(aspect_type), intent(in) :: edits
5455
double precision, dimension(3,3), intent(in) :: lat
@@ -82,6 +83,11 @@ subroutine edit_structure(lat,bas,ofile,edits)
8283

8384
end do
8485

86+
if(present(lnorm))then
87+
if(lnorm) call reducer(edited_lat,edited_bas)
88+
end if
89+
90+
8591
GEOMunit=101
8692
open(unit=GEOMunit,file=trim(ofile))
8793
call geom_write(GEOMunit,edited_lat,edited_bas)

src/default_infile.f90

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ module infile_print
55
implicit none
66

77

8-
!!!updated 2020/02/26
8+
!!!updated 2022/04/04
99

1010

1111
contains
@@ -27,7 +27,7 @@ subroutine print_default_file(file)
2727
write(UNIT,'(2X,"TASK = 1")')
2828
write(UNIT,'(2X,"RESTART = 0")')
2929
write(UNIT,'(2X,"STRUC1_FILE = POSCAR1 ! lower structure/interface structure")')
30-
write(UNIT,'(2X,"STRUC2_FILE = POSCAR2 ! upper structure (not used if IRESTART > 0)")')
30+
write(UNIT,'(2X,"STRUC2_FILE = POSCAR2 ! upper structure (not used if RESTART > 0)")')
3131
write(UNIT,'(2X,"MASTER_DIR = DINTERFACES")')
3232
write(UNIT,'(2X,"SUBDIR_PREFIX = D")')
3333
write(UNIT,'(2X,"IPRINT = 0")')
@@ -52,6 +52,9 @@ subroutine print_default_file(file)
5252
write(UNIT,'(2X,"TOL_AREA = 10.D0 ! max area tolerance (in percent %)")')
5353
write(UNIT,'(2X,"TOL_MAXFIND = 100 ! max number of good fits to find per plane")')
5454
write(UNIT,'(2X,"TOL_MAXSIZE = 10 ! max increase of any lattice vector")')
55+
write(UNIT,'(2X,"LW_USE_PRICEL = T ! extract and use the primitive cell of lower")')
56+
write(UNIT,'(2X,"UP_USE_PRICEL = T ! extract and use the primitive cell of upper")')
57+
write(UNIT,*)
5558
write(UNIT,'(2X,"NMILLER = 10 ! number of Miller planes to consider")')
5659
write(UNIT,'(2X,"LW_MILLER = ! written as a miller plane, e.g. 0 0 1")')
5760
write(UNIT,'(2X,"UP_MILLER = ! written as a miller plane, e.g. 0 0 1")')

src/inputs.f90

Lines changed: 89 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
!!! MAYBE HAVE FINDSYM IN HERE IN ORDER TO EDIT TOLSYM?
1010
module inputs
1111
use constants, only: ierror,pi
12-
use misc, only: flagmaker,file_check
12+
use misc, only: flagmaker,file_check,to_lower,to_upper
1313
use rw_geom, only: bas_type,geom_read,geom_write
1414
use io
1515
use aspect, only: aspect_type, edit_structure
@@ -23,16 +23,20 @@ module inputs
2323
integer :: lw_thickness,up_thickness
2424
integer :: nshift,nterm,nintf,nswap,nmiller
2525
real :: max_bondlength,swap_sigma,swap_depth
26-
double precision :: c_scale,intf_depth,layer_sep,swap_den,tol_sym
26+
double precision :: lw_bulk_modulus, up_bulk_modulus
27+
double precision :: c_scale,intf_depth,vacuum
28+
double precision :: layer_sep,lw_layer_sep,up_layer_sep,swap_den,tol_sym
2729
character(len=20) :: input_fmt,output_fmt
2830
character(200) :: struc1_file,struc2_file,out_filename
2931
character(100) :: dirname,shiftdir,swapdir,subdir_prefix
3032
logical :: lsurf_gen,lprint_matches,lprint_terms,lgen_interfaces,lprint_shifts
33+
logical :: lw_use_pricel, up_use_pricel
3134
logical :: lw_layered,up_layered
32-
logical :: lortho
35+
logical :: lortho,lnorm_lat
3336
logical :: ludef_lw_layered,ludef_up_layered,ludef_axis
3437
logical :: lpresent_struc2
3538
logical :: lswap_mirror
39+
logical :: lc_fix
3640
type(bas_type) :: struc1_bas,struc2_bas
3741
type(tol_type) :: tolerance
3842
type(aspect_type) :: edits
@@ -44,7 +48,7 @@ module inputs
4448
double precision, dimension(3,3) :: struc1_lat,struc2_lat
4549

4650

47-
!!!updated 2020/02/26
51+
!!!updated 2023/03/27
4852

4953

5054
contains
@@ -84,13 +88,16 @@ subroutine set_global_vars()
8488
idepth=0 !!! SWAP DEFAULT DEPTH METHOD !!!
8589
intf_depth=1.5D0
8690
layer_sep=1.D0
91+
lw_layer_sep=0.D0
92+
up_layer_sep=0.D0
8793
lortho = .true.
8894
lsurf_gen=.false.
8995
up_mplane=(/0,0,0/)
9096
lw_mplane=(/0,0,0/)
9197
axis=3
9298
lw_thickness=3
9399
up_thickness=3
100+
vacuum=14.D0
94101
lw_surf=0
95102
up_surf=0
96103
c_scale=1.5D0
@@ -124,11 +131,18 @@ subroutine set_global_vars()
124131
ludef_lw_layered=.false.
125132
ludef_up_layered=.false.
126133
ludef_axis=.false.
134+
lnorm_lat=.true.
127135
lw_surf=0
128136
up_surf=0
129137
iintf=-1
130138
tol_sym = 1.D-6
131139
udef_intf_loc = [ -1.D0, -1.D0 ]
140+
lw_use_pricel=.true.
141+
up_use_pricel=.true.
142+
143+
lw_bulk_modulus=0.E0
144+
up_bulk_modulus=0.E0
145+
lc_fix=.true.
132146

133147

134148
!!!-----------------------------------------------------------------------------
@@ -452,7 +466,9 @@ subroutine read_card_settings(unit,count,skip)
452466
if(trim(buffer).eq.'') cycle settings_read
453467
if(index(trim(buffer),"END").ne.0.and.&
454468
index(trim(buffer),"SETTINGS").ne.0) exit settings_read
455-
if(present(skip).and.skip) cycle
469+
if(present(skip))then
470+
if(skip) cycle
471+
end if
456472
tagname=trim(adjustl(buffer))
457473
if(scan(buffer,"=").ne.0) tagname=trim(tagname(:scan(tagname,"=")-1))
458474
select case(trim(tagname))
@@ -520,7 +536,7 @@ subroutine read_card_cell_edits(unit,count,skip)
520536
character(1024) :: buffer,tagname,store
521537
integer, intent(in) :: unit
522538
integer, intent(inout) :: count
523-
integer, dimension(9) :: readvar
539+
integer, dimension(12) :: readvar
524540
logical, optional, intent(in) :: skip
525541
character(len=6), dimension(4) :: &
526542
tag_list = ["axis ","loc ","val ","bounds"]
@@ -537,15 +553,17 @@ subroutine read_card_cell_edits(unit,count,skip)
537553
if(trim(buffer).eq.'') cycle cell_edits_read
538554
if(index(trim(buffer),"END").ne.0.and.&
539555
index(trim(buffer),"CELL_EDITS").ne.0) exit cell_edits_read
540-
if(present(skip).and.skip) cycle
556+
if(present(skip))then
557+
if(skip) cycle
558+
end if
541559
tagname=trim(adjustl(buffer))
542560
if(scan(buffer,"=").ne.0) tagname=trim(tagname(:scan(tagname,"=")-1))
543561
if(scan(trim(adjustl(tagname))," ").ne.0) read(tagname,*) tagname
544562
select case(trim(tagname))
545563
case("OUTPUT_FILE")
546564
call assign(buffer,out_filename, readvar(1))
547565
case("LSURF_GEN")
548-
call assign(buffer,lsurf_gen, readvar(2)) !LSURF_GEN
566+
call assign(buffer,lsurf_gen, readvar(2))
549567
case("MILLER_PLANE")
550568
call assign_vec(buffer,lw_mplane, readvar(3))
551569
case("SLAB_THICKNESS")
@@ -563,34 +581,47 @@ subroutine read_card_cell_edits(unit,count,skip)
563581
readvar(5) = readvar(5) + 1
564582
edits%list(edits%nedits)=1
565583
else
566-
readvar(8) = readvar(8) + 1
584+
readvar(6) = readvar(6) + 1
567585
edits%list(edits%nedits)=4
568586
edits%bounds(edits%nedits,:)=assign_listvec(store,tag_list,4)
569587
end if
570588
case("VACUUM")
571-
readvar(6) = readvar(6) + 1
572589
edits%nedits=edits%nedits+1
573590
edits%list(edits%nedits)=2
574591
store=buffer(index(buffer,"VACUUM")+len("VACUUM"):)
575592
if(trim(store).eq.'')then
593+
readvar(7) = readvar(7) + 1
576594
call cat(unit=unit,end_string="END",end_string2="VACUUM",&
577595
line=count,string=store,rm_cmt=.true.)
596+
edits%axis(edits%nedits)=assign_list(store,tag_list,1)
597+
edits%bounds(edits%nedits,1)=assign_list(store,tag_list,2)
598+
edits%val(edits%nedits)=assign_list(store,tag_list,3)
599+
else
600+
call assign(buffer, vacuum, readvar(7))
578601
end if
579-
edits%axis(edits%nedits)=assign_list(store,tag_list,1)
580-
edits%bounds(edits%nedits,1)=assign_list(store,tag_list,2)
581-
edits%val(edits%nedits)=assign_list(store,tag_list,3)
582602
case("TFMAT")
583-
readvar(7) = readvar(7) + 1
603+
readvar(8) = readvar(8) + 1
584604
edits%nedits=edits%nedits+1
585605
edits%list(edits%nedits)=3
586606
store=''
587607
call cat(unit=unit,end_string="END",end_string2="TFMAT",&
588608
line=count,string=store,rm_cmt=.true.)
589609
read(store,*) edits%tfmat(1,:),edits%tfmat(2,:),edits%tfmat(3,:)
590610
case("LAYER_SEP")
591-
call assign(buffer,layer_sep, readvar(8))
611+
call assign(buffer,layer_sep, readvar(9))
592612
case("LORTHO")
593-
call assign(buffer,lortho, readvar(9))
613+
call assign(buffer,lortho, readvar(10))
614+
case("SURFACE")
615+
call assign(buffer,store, readvar(11))
616+
select case(icount(store))
617+
case(1)
618+
read(store,*) lw_surf(1)
619+
lw_surf(2) = lw_surf(1)
620+
case(2)
621+
read(store,*) lw_surf
622+
end select
623+
case("LNORM_LAT")
624+
call assign(buffer,lnorm_lat, readvar(12))
594625
case default
595626
write(6,'("NOTE: unable to assign variable on line ",I0)') count
596627
end select
@@ -621,14 +652,16 @@ subroutine read_card_interfaces(unit,count,skip)
621652
integer :: Reason,j,iudef_nshift
622653
character(1024) :: store
623654
character(1024) :: buffer,tagname
624-
logical :: ludef_offset
655+
logical :: ludef_offset, ludef_lw_layer_sep, ludef_up_layer_sep
625656
integer, intent(in) :: unit
626657
integer, intent(inout) :: count
627-
integer, dimension(47) :: readvar
658+
integer, dimension(54) :: readvar
628659
logical, optional, intent(in) :: skip
629660

630661

631662
ludef_offset=.false.
663+
ludef_lw_layer_sep=.false.
664+
ludef_up_layer_sep=.false.
632665
readvar=0
633666
interfaces_read: do
634667
count=count+1
@@ -638,7 +671,9 @@ subroutine read_card_interfaces(unit,count,skip)
638671
if(trim(buffer).eq.'') cycle interfaces_read
639672
if(index(trim(buffer),"END").ne.0.and.&
640673
index(trim(buffer),"INTERFACES").ne.0) exit interfaces_read
641-
if(present(skip).and.skip) cycle
674+
if(present(skip))then
675+
if(skip) cycle
676+
end if
642677
tagname=trim(adjustl(buffer))
643678
if(scan(buffer,"=").ne.0) tagname=trim(tagname(:scan(tagname,"=")-1))
644679
select case(trim(tagname))
@@ -697,6 +732,9 @@ subroutine read_card_interfaces(unit,count,skip)
697732
case(3)
698733
read(store,*) offset(1,:)
699734
if(all(offset.ge.0.D0)) iudef_nshift=1
735+
case default
736+
call err_abort('ERROR: Invalid number of arguments provided to SHIFT&
737+
&\nValid number of arguments is 1 or 3.&')
700738
end select
701739
end if
702740
case("NSHIFT")
@@ -766,18 +804,34 @@ subroutine read_card_interfaces(unit,count,skip)
766804
call assign(buffer,iintf, readvar(40))
767805
case("LAYER_SEP")
768806
call assign(buffer,layer_sep, readvar(41))
807+
case("LW_LAYER_SEP")
808+
call assign(buffer,lw_layer_sep, readvar(42))
809+
ludef_lw_layer_sep=.true.
810+
case("UP_LAYER_SEP")
811+
call assign(buffer,up_layer_sep, readvar(43))
812+
ludef_up_layer_sep=.true.
769813
case("MBOND_MAXLEN")
770-
call assign(buffer,max_bondlength, readvar(42))
814+
call assign(buffer,max_bondlength, readvar(44))
771815
case("SWAP_SIGMA")
772-
call assign(buffer,swap_sigma, readvar(43))
816+
call assign(buffer,swap_sigma, readvar(45))
773817
case("SWAP_DEPTH")
774-
call assign(buffer,swap_depth, readvar(44))
818+
call assign(buffer,swap_depth, readvar(46))
775819
case("INTF_LOC")
776-
call assign_vec(buffer,udef_intf_loc,readvar(45))
820+
call assign_vec(buffer,udef_intf_loc,readvar(47))
777821
case("LMIRROR")
778-
call assign(buffer,lswap_mirror, readvar(46))
822+
call assign(buffer,lswap_mirror, readvar(48))
779823
case("LORTHO")
780-
call assign(buffer,lortho, readvar(47))
824+
call assign(buffer,lortho, readvar(49))
825+
case("LW_USE_PRICEL")
826+
call assign(buffer,lw_use_pricel, readvar(50))
827+
case("UP_USE_PRICEL")
828+
call assign(buffer,up_use_pricel, readvar(51))
829+
case("LW_BULK_MODULUS")
830+
call assign(buffer,lw_bulk_modulus, readvar(52))
831+
case("UP_BULK_MODULUS")
832+
call assign(buffer,up_bulk_modulus, readvar(53))
833+
case("LC_FIX")
834+
call assign(buffer,lc_fix, readvar(54))
781835
case default
782836
write(0,'("NOTE: unable to assign variable on line ",I0)') count
783837
end select
@@ -811,6 +865,10 @@ subroutine read_card_interfaces(unit,count,skip)
811865
offset(1,:)=(/-1.D0,-1.D0,-1.D0/)
812866
end if
813867

868+
! set lw_ and up_layer_sep if not defined
869+
if(.not.ludef_lw_layer_sep) lw_layer_sep = layer_sep
870+
if(.not.ludef_up_layer_sep) up_layer_sep = layer_sep
871+
814872

815873
if(any(readvar.gt.1)) then
816874
write(0,*)
@@ -851,7 +909,9 @@ subroutine read_card_defects(unit,count,skip)
851909
if(trim(buffer).eq.'') cycle defects_read
852910
if(index(trim(buffer),"END").ne.0.and.&
853911
index(trim(buffer),"DEFECTS").ne.0) exit defects_read
854-
if(present(skip).and.skip) cycle
912+
if(present(skip))then
913+
if(skip) cycle
914+
end if
855915
tagname=trim(adjustl(buffer))
856916
if(scan(buffer,"=").ne.0) tagname=trim(tagname(:scan(tagname,"=")-1))
857917
select case(trim(tagname))
@@ -916,9 +976,9 @@ subroutine write_settings(dirname)
916976
write(UNIT,'(2X,"NINTF = ",I0)') nintf
917977
write(UNIT,'(2X,"IMATCH = ",I0)') imatch
918978
write(UNIT,'(2X,"NMATCH = ",I0)') tolerance%nstore
919-
write(UNIT,'(2X,"TOL_VEC = ",F0.7)') tolerance%vec
920-
write(UNIT,'(2X,"TOL_ANG = ",F0.7)') tolerance%ang
921-
write(UNIT,'(2X,"TOL_AREA = ",F0.7)') tolerance%area
979+
write(UNIT,'(2X,"TOL_VEC = ",F0.7)') tolerance%vec*100
980+
write(UNIT,'(2X,"TOL_ANG = ",F0.7)') tolerance%ang*360/(2*pi)
981+
write(UNIT,'(2X,"TOL_AREA = ",F0.7)') tolerance%area*100
922982
write(UNIT,*)
923983
write(UNIT,'(2X,"NMILLER = ",3(I0,1X))') nmiller
924984
write(UNIT,'(2X,"LW_MILLER_PLANE = ",3(I0,1X))') lw_mplane

0 commit comments

Comments
 (0)