99! !! MAYBE HAVE FINDSYM IN HERE IN ORDER TO EDIT TOLSYM?
1010module 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
5054contains
@@ -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