TABLE OF CONTENTS
- ABINIT/m_multibinit_dataset
- m_multibinit_dataset/invars10
- m_multibinit_dataset/multibinit_dtset_free
- m_multibinit_dataset/multibinit_dtset_init
- m_multibinit_dataset/multibinit_dtset_type
- m_multibinit_dataset/outvars_multibinit
ABINIT/m_multibinit_dataset [ Modules ]
NAME
m_multibinit_dataset
FUNCTION
module with the type for the input of multibinit (should be clean)
COPYRIGHT
Copyright (C) 2014-2024 ABINIT group (AM) This file is distributed under the terms of the GNU General Public License, see ~abinit/COPYING or http://www.gnu.org/copyleft/gpl.txt .
SOURCE
16 #if defined HAVE_CONFIG_H 17 #include "config.h" 18 #endif 19 20 #include "abi_common.h" 21 22 module m_multibinit_dataset 23 24 use defs_basis 25 use m_abicore 26 use m_errors 27 28 use m_xmpi 29 use m_parser, only : intagm, instrng 30 use m_fstrings, only : replace, inupper 31 use m_dtset, only : chkvars 32 use m_ddb, only : DDB_QTOL 33 use m_scup_dataset 34 35 implicit none 36 37 private 38 39 public :: multibinit_dtset_type 40 public :: multibinit_dtset_init 41 public :: multibinit_dtset_free 42 public :: outvars_multibinit 43 public :: invars_multibinit_filenames 44 public :: invars_multibinit_filenames_from_input_file 45 public :: invars10
m_multibinit_dataset/invars10 [ Functions ]
[ Top ] [ m_multibinit_dataset ] [ Functions ]
NAME
invars10
FUNCTION
Open input file for the multibinit code, then reads or echoes the input information.
INPUTS
lenstr=actual length of string natom=number of atoms, needed for atifc string*(*)=string of characters containing all input variables and data
OUTPUT
multibinit_dtset <type(multibinit_dtset_type)> = datatype with all the input variables
NOTES
Should be executed by one processor only.
SOURCE
777 subroutine invars10(multibinit_dtset,lenstr,natom,string) 778 779 !Arguments ------------------------------- 780 !scalars 781 integer,intent(in) :: lenstr,natom 782 character(len=*),intent(in) :: string 783 type(multibinit_dtset_type),intent(inout) :: multibinit_dtset 784 785 !Local variables ------------------------- 786 !Dummy arguments for subroutine 'intagm' to parse input file 787 !Set routine version number here: 788 !scalars 789 integer :: iatifc,ii,iph1,iph2,jdtset,jj,marr,tread,idir,natfix,iatom 790 integer :: natom_sc 791 character(len=500) :: message 792 !arrays 793 integer,allocatable :: intarr(:) 794 real(dp),allocatable :: dprarr(:),work(:) 795 ! strings 796 character(len=fnlen*12) :: lattddb_string 797 integer :: sidx(13), cnt, i1, i2 798 799 !********************************************************************* 800 marr=30 801 ABI_MALLOC(intarr,(marr)) 802 ABI_MALLOC(dprarr,(marr)) 803 804 jdtset=1 805 806 !copy natom to multibinit_dtset 807 multibinit_dtset%natom=natom 808 809 !===================================================================== 810 !start reading in dimensions and non-dependent variables 811 !===================================================================== 812 813 !A 814 multibinit_dtset%asr=2 815 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'asr',tread,'INT') 816 if(tread==1) multibinit_dtset%asr=intarr(1) 817 if(multibinit_dtset%asr<-2.or.multibinit_dtset%asr>5)then 818 write(message, '(a,i8,a,a,a,a,a)' )& 819 & 'asr is',multibinit_dtset%asr,', but the only allowed values',ch10,& 820 & 'are 0, 1, 2, 3, 4, 5, -1 or -2 .',ch10,& 821 & 'Action: correct asr in your input file.' 822 ! Note : negative values are allowed when the acoustic sum rule 823 ! is to be applied after the analysis of IFCs 824 ! 3,4 are for rotational invariance (under development) 825 ! 5 is for hermitian imposition of the ASR 826 ABI_ERROR(message) 827 end if 828 829 multibinit_dtset%analyze_anh_pot=0 830 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'analyze_anh_pot',tread,'INT') 831 if(tread==1) multibinit_dtset%analyze_anh_pot=intarr(1) 832 if(multibinit_dtset%analyze_anh_pot < 0 .or. multibinit_dtset%analyze_anh_pot > 1)then 833 write(message, '(a,i8,a,a,a,a,a)' )& 834 & 'analyze_anh_pot is',multibinit_dtset%analyze_anh_pot,', but the only allowed values',ch10,& 835 & 'are 0 and 1 .',ch10,& 836 & 'Action: correct analyze_anh_pot in your input file.' 837 ABI_ERROR(message) 838 end if 839 840 !B 841 multibinit_dtset%brav=1 842 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'brav',tread,'INT') 843 if(tread==1) multibinit_dtset%brav=intarr(1) 844 if(multibinit_dtset%brav/=1)then 845 write(message, '(a,i8,a,a,a,a,a)' )& 846 & 'brav is',multibinit_dtset%brav,', but the only allowed values',ch10,& 847 & 'are 1 for multibinit (not implemented) .',ch10,& 848 & 'Action: correct brav in your input file.' 849 ABI_ERROR(message) 850 end if 851 852 multibinit_dtset%bmass=0 853 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'bmass',tread,'DPR') 854 if(tread==1) multibinit_dtset%bmass=dprarr(1) 855 if(multibinit_dtset%bmass<0)then 856 write(message, '(a,f10.2,a,a,a,a,a)' )& 857 & 'bmass is',multibinit_dtset%bmass,', but the only allowed values',ch10,& 858 & 'is superior to 0.',ch10,& 859 & 'Action: correct bmass in your input file.' 860 ABI_ERROR(message) 861 end if 862 863 multibinit_dtset%bound_EFS=(/0,1,1/) 864 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'bound_EFS',tread,'INT') 865 if(tread==1) multibinit_dtset%bound_EFS(1:3)=intarr(1:3) 866 if(any(multibinit_dtset%bound_EFS<0) .or. any(multibinit_dtset%bound_EFS>1))then 867 write(message, '(a,i8,a,a,a)' )& 868 & 'bound_EFS is',multibinit_dtset%bound_EFS,', but the only allowed values are 0 and 1',ch10,& 869 & 'Action: correct bound_EFS in your input file.' 870 ABI_ERROR(message) 871 end if 872 873 multibinit_dtset%bound_factors=(/1,1,1/) 874 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'bound_factors',tread,'DPR') 875 if(tread==1) multibinit_dtset%bound_factors(1:3)=dprarr(1:3) 876 if(any(multibinit_dtset%bound_factors<0))then 877 write(message, '(a,i8,a,a,a)' )& 878 & 'bound_factors is',multibinit_dtset%bound_factors,', but the only allowed values are positive',ch10,& 879 & 'Action: correct bound_factors in your input file.' 880 ABI_ERROR(message) 881 end if 882 883 884 !C 885 multibinit_dtset%chneut=0 886 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'chneut',tread,'INT') 887 if(tread==1) multibinit_dtset%chneut=intarr(1) 888 if(multibinit_dtset%chneut<0.or.multibinit_dtset%chneut>2)then 889 write(message, '(a,i8,a,a,a,a,a)' )& 890 & 'chneut is',multibinit_dtset%chneut,', but the only allowed values',ch10,& 891 & 'are 0, 1 or 2 .',ch10,& 892 & 'Action: correct chneut in your input file.' 893 ABI_ERROR(message) 894 end if 895 896 multibinit_dtset%confinement=0 897 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'confinement',tread,'INT') 898 if(tread==1) multibinit_dtset%confinement=intarr(1) 899 if(multibinit_dtset%confinement<0.or.multibinit_dtset%confinement>2)then 900 write(message, '(a,i8,a,a,a,a,a)' )& 901 & 'confinement is',multibinit_dtset%confinement,', but the only allowed values',ch10,& 902 & 'are 0, 1 or 2 .',ch10,& 903 & 'Action: correct confinement in your input file.' 904 ABI_ERROR(message) 905 end if 906 907 multibinit_dtset%conf_power_disp=0 908 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'conf_power_disp',tread,'INT') 909 if(tread==1) multibinit_dtset%conf_power_disp=intarr(1) 910 if(multibinit_dtset%conf_power_disp<0)then 911 write(message, '(a,i8,a,a,a,a,a)' )& 912 & 'conf_power_disp is',multibinit_dtset%conf_power_disp,', but the only allowed values',ch10,& 913 & 'positive .',ch10,& 914 & 'Action: correct conf_power_disp in your input file.' 915 ABI_ERROR(message) 916 end if 917 918 multibinit_dtset%conf_power_strain=0 919 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'conf_power_strain',tread,'INT') 920 if(tread==1) multibinit_dtset%conf_power_strain=intarr(1) 921 if(multibinit_dtset%conf_power_strain<0)then 922 write(message, '(a,i8,a,a,a,a,a)' )& 923 & 'conf_power_strain is',multibinit_dtset%conf_power_strain,', but the only allowed values',ch10,& 924 & 'are positive .',ch10,& 925 & 'Action: correct conf_power_strain in your input file.' 926 ABI_ERROR(message) 927 end if 928 929 multibinit_dtset%conf_power_fact_disp=100 930 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'conf_power_fact_disp',tread,'DPR') 931 if(tread==1) multibinit_dtset%conf_power_fact_disp=dprarr(1) 932 933 multibinit_dtset%conf_power_fact_strain=100 934 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'conf_power_fact_strain',tread,'DPR') 935 if(tread==1) multibinit_dtset%conf_power_fact_strain=dprarr(1) 936 937 !D 938 multibinit_dtset%dipdip=1 939 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'dipdip',tread,'INT') 940 if(tread==1) multibinit_dtset%dipdip=intarr(1) 941 if(multibinit_dtset%dipdip>1.or.multibinit_dtset%dipdip<0)then 942 write(message, '(a,i8,a,a,a,a,a)' )& 943 & 'dipdip is',multibinit_dtset%dipdip,', but the only allowed values',ch10,& 944 & 'is 1.',ch10,& 945 & 'Action: correct dipdip in your input file.' 946 ABI_ERROR(message) 947 end if 948 949 multibinit_dtset%dipdip_prt=0 950 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'dipdip_prt',tread,'INT') 951 if(tread==1) multibinit_dtset%dipdip_prt=intarr(1) 952 if(multibinit_dtset%dipdip_prt<0.or.multibinit_dtset%dipdip_prt>1)then 953 write(message, '(a,i8,a,a,a,a,a)' )& 954 & 'dipdip_prt is',multibinit_dtset%prtsrlr,', but the only allowed values',ch10,& 955 'are 0 or 1.',ch10,& 956 & 'Action: correct dipdip_prt in your input file.' 957 ABI_ERROR(message) 958 end if 959 960 961 multibinit_dtset%dtion=100 962 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'dtion',tread,'INT') 963 if(tread==1) multibinit_dtset%dtion=intarr(1) 964 if(multibinit_dtset%dtion<1)then 965 write(message, '(a,i8,a,a,a,a,a)' )& 966 & 'dtion is',multibinit_dtset%dtion,', but the only allowed values',ch10,& 967 & 'is superior to 1.',ch10,& 968 & 'Action: correct dtion in your input file.' 969 ABI_ERROR(message) 970 end if 971 972 973 multibinit_dtset%delta_df= 1d-02 974 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'delta_df',tread,'DPR') 975 if(tread==1) multibinit_dtset%delta_df=dprarr(1) 976 if(multibinit_dtset%delta_df<0)then 977 write(message, '(a,es10.2,a,a,a,a,a)' )& 978 & 'delta_df is',multibinit_dtset%delta_df,', but the only allowed values',ch10,& 979 & 'are superior to 0 .',ch10,& 980 & 'Action: correct delta_df in your input file.' 981 ABI_ERROR(message) 982 end if 983 984 !E 985 multibinit_dtset%energy_reference= zero 986 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'energy_reference',tread,'DPR') 987 if(tread==1) multibinit_dtset%energy_reference=dprarr(1) 988 989 multibinit_dtset%enunit=0 990 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'enunit',tread,'INT') 991 if(tread==1) multibinit_dtset%enunit=intarr(1) 992 if(multibinit_dtset%enunit<0.or.multibinit_dtset%enunit>2)then 993 write(message, '(a,i0,a,a,a,a,a)' )& 994 & 'enunit is',multibinit_dtset%enunit,', but the only allowed values',ch10,& 995 & 'are 0, 1 or 2.',ch10,& 996 & 'Action: correct enunit in your input file.' 997 ABI_ERROR(message) 998 end if 999 1000 !F 1001 multibinit_dtset%fit_option=0 1002 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_option',tread,'INT') 1003 if(tread==1) multibinit_dtset%fit_option=intarr(1) 1004 if(multibinit_dtset%fit_option<0.or.multibinit_dtset%fit_option>2)then 1005 write(message, '(a,i8,a,a,a,a,a)' )& 1006 & 'fit_option is',multibinit_dtset%fit_option,', but the only allowed values',ch10,& 1007 & 'are 0, 1 or 2 for multibinit.',ch10,& 1008 & 'Action: correct fit_option in your input file.' 1009 ABI_ERROR(message) 1010 end if 1011 1012 multibinit_dtset%fit_iatom=0 1013 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_iatom',tread,'INT') 1014 if(tread==1) multibinit_dtset%fit_iatom=intarr(1) 1015 if(multibinit_dtset%fit_iatom<-1)then 1016 write(message, '(a,i8,a,a,a,a,a)' )& 1017 & 'fit_iatom is',multibinit_dtset%fit_iatom,', but the only allowed values',ch10,& 1018 & 'are larger than -1 for multibinit.',ch10,& 1019 & 'Action: correct fit_iatom in your input file.' 1020 ABI_ERROR(message) 1021 end if 1022 1023 multibinit_dtset%fit_ncoeff=0 1024 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_ncoeff',tread,'INT') 1025 if(tread==1) multibinit_dtset%fit_ncoeff=intarr(1) 1026 if(multibinit_dtset%fit_ncoeff<0)then 1027 write(message, '(a,i8,a,a,a,a,a)' )& 1028 & 'fit_ncoeff is',multibinit_dtset%fit_ncoeff,', but the only allowed values',ch10,& 1029 & 'are positives for multibinit.',ch10,& 1030 & 'Action: correct fit_ncoeff in your input file.' 1031 ABI_ERROR(message) 1032 end if 1033 1034 multibinit_dtset%fit_ncoeff_per_iatom=0 1035 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_ncoeff_per_iatom',tread,'INT') 1036 if(tread==1) multibinit_dtset%fit_ncoeff_per_iatom=intarr(1) 1037 if(multibinit_dtset%fit_ncoeff_per_iatom<0)then 1038 write(message, '(a,i8,a,a,a,a,a)' )& 1039 & 'fit_ncoeff_per_iatom is',multibinit_dtset%fit_ncoeff_per_iatom,', but the only allowed values',ch10,& 1040 & 'are positives for multibinit.',ch10,& 1041 & 'Action: correct fit_ncoeff_per_iatom in your input file.' 1042 ABI_ERROR(message) 1043 end if 1044 multibinit_dtset%fit_nbancoeff=0 1045 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_nbancoeff',tread,'INT') 1046 if(tread==1) multibinit_dtset%fit_nbancoeff=intarr(1) 1047 if(multibinit_dtset%fit_nbancoeff<0)then 1048 write(message, '(a,i8,a,a,a,a,a)' )& 1049 & 'fit_nbancoeff is',multibinit_dtset%fit_nbancoeff,', but the only allowed values',ch10,& 1050 & 'are 0 or positive values for multibinit.',ch10,& 1051 & 'Action: correct fit_nbancoeff in your input file.' 1052 ABI_ERROR(message) 1053 end if 1054 1055 multibinit_dtset%fit_nfixcoeff=0 1056 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_nfixcoeff',tread,'INT') 1057 if(tread==1) multibinit_dtset%fit_nfixcoeff=intarr(1) 1058 if(multibinit_dtset%fit_nfixcoeff<-2)then 1059 write(message, '(a,i8,a,a,a,a,a)' )& 1060 & 'fit_nfixcoeff is',multibinit_dtset%fit_nfixcoeff,', but the only allowed values',ch10,& 1061 & 'are -1 or positives for multibinit.',ch10,& 1062 & 'Action: correct fit_nfixcoeff in your input file.' 1063 ABI_ERROR(message) 1064 end if 1065 1066 multibinit_dtset%fit_nimposecoeff=0 1067 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_nimposecoeff',tread,'INT') 1068 if(tread==1) multibinit_dtset%fit_nimposecoeff=intarr(1) 1069 if(multibinit_dtset%fit_nimposecoeff<-2)then 1070 write(message, '(a,i8,a,a,a,a,a)' )& 1071 & 'fit_nimposecoeff is',multibinit_dtset%fit_nimposecoeff,', but the only allowed values',ch10,& 1072 & 'are -1 or positives for multibinit.',ch10,& 1073 & 'Action: correct fit_nimposecoeff in your input file.' 1074 ABI_ERROR(message) 1075 end if 1076 1077 multibinit_dtset%fit_EFS=(/0,1,1/) 1078 multibinit_dtset%fit_on = (/ .TRUE.,.TRUE.,.FALSE. /) 1079 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'fit_EFS',tread,'INT') 1080 if(tread==1) multibinit_dtset%fit_EFS(1:3)=intarr(1:3) 1081 if(multibinit_dtset%fit_EFS(1) == 1)multibinit_dtset%fit_on(3) = .TRUE. 1082 if(multibinit_dtset%fit_EFS(2) == 0)multibinit_dtset%fit_on(1) = .FALSE. 1083 if(multibinit_dtset%fit_EFS(3) == 0)multibinit_dtset%fit_on(2) = .FALSE. 1084 if(any(multibinit_dtset%fit_EFS<0) .or. any(multibinit_dtset%fit_EFS>1))then 1085 write(message, '(a,i8,a,a,a)' )& 1086 & 'fit_EFS is',multibinit_dtset%fit_EFS,', but the only allowed values are 0 and 1',ch10,& 1087 & 'Action: correct fit_EFS in your input file.' 1088 ABI_ERROR(message) 1089 end if 1090 1091 multibinit_dtset%fit_factors=(/1,1,1/) 1092 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'fit_factors',tread,'DPR') 1093 if(tread==1) multibinit_dtset%fit_factors(1:3)=dprarr(1:3) 1094 if(any(multibinit_dtset%fit_factors<0))then 1095 write(message, '(a,i8,a,a,a)' )& 1096 & 'fit_factors is',multibinit_dtset%fit_factors,', but the only allowed values are positive',ch10,& 1097 & 'Action: correct fit_factors in your input file.' 1098 ABI_ERROR(message) 1099 end if 1100 multibinit_dtset%sel_EFS=(/0,1,1/) 1101 multibinit_dtset%sel_on = (/ .TRUE.,.TRUE.,.FALSE. /) 1102 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'sel_EFS',tread,'INT') 1103 if(tread==1) multibinit_dtset%sel_EFS(1:3)=intarr(1:3) 1104 if(multibinit_dtset%sel_EFS(1) == 1)multibinit_dtset%sel_on(3) = .TRUE. 1105 if(multibinit_dtset%sel_EFS(2) == 0)multibinit_dtset%sel_on(1) = .FALSE. 1106 if(multibinit_dtset%sel_EFS(3) == 0)multibinit_dtset%sel_on(2) = .FALSE. 1107 if(any(multibinit_dtset%sel_EFS<0) .or. any(multibinit_dtset%sel_EFS>1))then 1108 write(message, '(a,i8,a,a,a)' )& 1109 & 'sel_EFS is',multibinit_dtset%sel_EFS,', but the only allowed values are 0 and 1',ch10,& 1110 & 'Action: correct sel_EFS in your input file.' 1111 ABI_ERROR(message) 1112 end if 1113 1114 multibinit_dtset%ts_option=0 1115 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'ts_option',tread,'INT') 1116 if(tread==1) multibinit_dtset%ts_option=intarr(1) 1117 if(multibinit_dtset%ts_option<0.or.multibinit_dtset%ts_option>1)then 1118 write(message, '(a,i8,a,a,a,a,a)' )& 1119 & 'ts_option is',multibinit_dtset%ts_option,', but the only allowed values',ch10,& 1120 & 'are zero and one for multibinit.',ch10,& 1121 & 'Action: correct ts_option in your input file.' 1122 ABI_ERROR(message) 1123 end if 1124 1125 multibinit_dtset%ifcana=0 1126 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'ifcana',tread,'INT') 1127 if(tread==1) multibinit_dtset%ifcana=intarr(1) 1128 if(multibinit_dtset%ifcana<0.or.multibinit_dtset%ifcana>1)then 1129 write(message, '(a,i0,a,a,a,a,a)' )& 1130 & 'ifcana is',multibinit_dtset%ifcana,', but the only allowed values',ch10,& 1131 & 'are 0 or 1.',ch10,& 1132 & 'Action: correct ifcana in your input file.' 1133 ABI_ERROR(message) 1134 end if 1135 1136 multibinit_dtset%ifcflag=1 1137 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'ifcflag',tread,'INT') 1138 if(tread==1) multibinit_dtset%ifcflag=intarr(1) 1139 if(multibinit_dtset%ifcflag<0.or.multibinit_dtset%ifcflag>1)then 1140 write(message, '(a,i0,a,a,a,a,a)' )& 1141 & 'ifcflag is',multibinit_dtset%ifcflag,', but the only allowed values',ch10,& 1142 & 'are 0 or 1.',ch10,& 1143 & 'Action: correct ifcflag in your input file.' 1144 ABI_ERROR(message) 1145 end if 1146 1147 multibinit_dtset%prtsrlr=0 1148 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'prtsrlr',tread,'INT') 1149 if(tread==1) multibinit_dtset%prtsrlr=intarr(1) 1150 if(multibinit_dtset%prtsrlr<0.or.multibinit_dtset%prtsrlr>1)then 1151 write(message, '(a,i8,a,a,a,a,a)' )& 1152 & 'prtsrlr is',multibinit_dtset%prtsrlr,', but the only allowed values',ch10,& 1153 & 'are 0 or 1.',ch10,& 1154 & 'Action: correct prtsrlr in your input file.' 1155 ABI_ERROR(message) 1156 end if 1157 1158 multibinit_dtset%ifcout=2000000 ! or -1 -> max number of ifc 1159 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'ifcout',tread,'INT') 1160 if(tread==1) multibinit_dtset%ifcout=intarr(1) 1161 if(multibinit_dtset%ifcout<-1)then 1162 write(message, '(a,i0,a,a,a)' )& 1163 & 'ifcout is',multibinit_dtset%ifcout,', which is lower than -1 (default = all ifc) .',ch10,& 1164 & 'Action: correct ifcout in your input file.' 1165 ABI_ERROR(message) 1166 end if 1167 multibinit_dtset%hmctt=0 ! or -1 -> max number of ifc 1168 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'hmctt',tread,'INT') 1169 if(tread==1) multibinit_dtset%hmctt=intarr(1) 1170 if(multibinit_dtset%hmctt< 0)then 1171 write(message, '(a,i0,a,a,a)' )& 1172 & 'hmctt is',multibinit_dtset%hmctt,', but only positive values are allowed .',ch10,& 1173 & 'Action: correct hmctt in your input file.' 1174 ABI_ERROR(message) 1175 end if 1176 1177 multibinit_dtset%hmcsst=0 ! or -1 -> max number of ifc 1178 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'hmcsst',tread,'INT') 1179 if(tread==1) multibinit_dtset%hmcsst=intarr(1) 1180 if(multibinit_dtset%hmcsst<0)then 1181 write(message, '(a,i0,a,a,a)' )& 1182 & 'hmcsst is',multibinit_dtset%hmcsst,', but only positive values are allowed .',ch10,& 1183 & 'Action: correct hmcsst in your input file.' 1184 ABI_ERROR(message) 1185 end if 1186 1187 multibinit_dtset%nctime=1 1188 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'nctime',tread,'INT') 1189 if(tread==1) multibinit_dtset%nctime=intarr(1) 1190 if(multibinit_dtset%nctime<=0)then 1191 write(message, '(a,i0,a,a,a)' )& 1192 & 'nctime is',multibinit_dtset%ntime,', which is not positive .',ch10,& 1193 & 'Action: correct nctime in your input file.' 1194 ABI_ERROR(message) 1195 end if 1196 1197 1198 multibinit_dtset%ntime=200 1199 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'ntime',tread,'INT') 1200 if(tread==1) multibinit_dtset%ntime=intarr(1) 1201 if(multibinit_dtset%ntime<0)then 1202 write(message, '(a,i0,a,a,a)' )& 1203 & 'ntime is',multibinit_dtset%ntime,', which is lower than 0 .',ch10,& 1204 & 'Action: correct ntime in your input file.' 1205 ABI_ERROR(message) 1206 end if 1207 1208 multibinit_dtset%dynamics=0 1209 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'dynamics',tread,'INT') 1210 if(tread==1) multibinit_dtset%dynamics=intarr(1) 1211 ! >100: the builtin multibinit lattice movers 1212 if(multibinit_dtset%dynamics/=0.and.multibinit_dtset%dynamics/=6.and.& 1213 & multibinit_dtset%dynamics/=12.and.multibinit_dtset%dynamics/=13.and.& 1214 & multibinit_dtset%dynamics/=27.and.& 1215 & multibinit_dtset%dynamics/=9.and.& 1216 & multibinit_dtset%dynamics/=7.and.& 1217 & multibinit_dtset%dynamics/=1.and.& 1218 & multibinit_dtset%dynamics/=2.and.& 1219 & multibinit_dtset%dynamics/=22.and.& 1220 & multibinit_dtset%dynamics/=24.and.multibinit_dtset%dynamics/=25 .and. & 1221 & multibinit_dtset%dynamics/=101.and.multibinit_dtset%dynamics/=102 .and. & 1222 & multibinit_dtset%dynamics/=103.and.multibinit_dtset%dynamics/=120 & 1223 ) then 1224 write(message, '(a,i8,a,a,a,a,a)' )& 1225 & 'dynamics is ',multibinit_dtset%dynamics,', but the only allowed values',ch10,& 1226 & 'are 1,2,6,7,9,12,13, 22,24,25,101,102, 103 or 120 (see ionmov in abinit documentation).',ch10,& 1227 & 'Action: correct dynamics in your input file.' 1228 ABI_ERROR(message) 1229 end if 1230 1231 if(multibinit_dtset%dynamics==120) then 1232 write(message, '(a,i8,a)' )& 1233 & 'dynamics is ',multibinit_dtset%dynamics,'The atoms will not move. For test only!' 1234 ABI_WARNING(message) 1235 end if 1236 1237 multibinit_dtset%dyn_chksym=0 1238 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'dyn_chksym',tread,'INT') 1239 if(tread==1) multibinit_dtset%dyn_chksym=intarr(1) 1240 if(multibinit_dtset%dyn_chksym<0 .or. multibinit_dtset%dyn_chksym>1)then 1241 write(message, '(a,i0,a,a,a)' )& 1242 & 'dyn_chksym is',multibinit_dtset%dyn_chksym,', but the only allowed values are 0 and 1.',ch10,& 1243 & 'Action: correct dyn_chksym in your input file.' 1244 ABI_ERROR(message) 1245 end if 1246 1247 multibinit_dtset%dyn_tolsym=1d-10 1248 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'dyn_tolsym',tread,'DPR') 1249 if(tread==1) multibinit_dtset%dyn_tolsym=dprarr(1) 1250 if(multibinit_dtset%dyn_tolsym<0)then 1251 write(message, '(a,i0,a,a,a)' )& 1252 & 'dyn_tolsym is',multibinit_dtset%dyn_tolsym,', but the only allowed values are positive.',ch10,& 1253 & 'Action: correct dyn_tolsym in your input file.' 1254 ABI_ERROR(message) 1255 end if 1256 !L 1257 ! multibinit_dtset%latt_compressibility=0.0 1258 ! call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_compressibility',tread,'DPR') 1259 ! if(tread==1) multibinit_dtset%latt_compressibility=dprarr(1) 1260 1261 multibinit_dtset%latt_friction=1e-4 1262 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_friction',tread,'DPR') 1263 if(tread==1) multibinit_dtset%latt_friction=dprarr(1) 1264 multibinit_dtset%latt_lwf_anharmonic=0 1265 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_lwf_anharmonic',tread,'INT') 1266 if(tread==1) multibinit_dtset%latt_lwf_anharmonic=intarr(1) 1267 if( .not. (0 <= multibinit_dtset%latt_lwf_anharmonic .and. multibinit_dtset%latt_lwf_anharmonic< 2) ) then 1268 write(message, '(a,i8,a,a,a,a,a)' )& 1269 & 'latt_lwf_anharmonic is ',multibinit_dtset%latt_lwf_anharmonic,', but the only allowed values',ch10,& 1270 & 'are 0 and 1',ch10,& 1271 & 'Action: correct latt_lwf_anharmonic in your input file.' 1272 ABI_ERROR(message) 1273 end if 1274 1275 multibinit_dtset%latt_taut=0.0 1276 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_taut',tread,'TIM') 1277 if(tread==1) multibinit_dtset%latt_taut=dprarr(1) 1278 if(multibinit_dtset%latt_taut<0)then 1279 write(message, '(a,f10.1,a,a,a,a,a)' )& 1280 & 'latt_taut is ',multibinit_dtset%latt_taut,'. The only allowed values',ch10,& 1281 & 'are non-negative values.',ch10,& 1282 & 'Action: correct latt_taut in your input file.' 1283 ABI_ERROR(message) 1284 end if 1285 1286 1287 1288 1289 multibinit_dtset%latt_temperature_start=0.0 1290 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_temperature_start',tread,'DPR') 1291 if(tread==1) multibinit_dtset%latt_temperature_start=dprarr(1) 1292 if(multibinit_dtset%latt_temperature_start<0.0)then 1293 write(message, '(a,f10.1,a,a,a,a,a)' )& 1294 & 'latt_temperature_start is ',multibinit_dtset%latt_temperature_start,'. The only allowed values',ch10,& 1295 & 'are positives values.',ch10,& 1296 & 'Action: correct latt_semperature_start in your input file.' 1297 ABI_ERROR(message) 1298 end if 1299 1300 multibinit_dtset%latt_temperature_end=0.0 1301 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_temperature_end',tread,'DPR') 1302 if(tread==1) multibinit_dtset%latt_temperature_end=dprarr(1) 1303 if(multibinit_dtset%latt_temperature_end<0)then 1304 write(message, '(a,f10.1,a,a,a,a,a)' )& 1305 & 'latt_temperature_end is ',multibinit_dtset%latt_temperature_end,'. The only allowed values',ch10,& 1306 & 'are positives values.',ch10,& 1307 & 'Action: correct latt_semperature_end in your input file.' 1308 ABI_ERROR(message) 1309 end if 1310 1311 multibinit_dtset%latt_temperature_nstep=1 1312 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_temperature_nstep',tread,'INT') 1313 if(tread==1) multibinit_dtset%latt_temperature_nstep=intarr(1) 1314 if(multibinit_dtset%latt_temperature_nstep<=0)then 1315 write(message, '(a,i0,a,a,a,a)' )& 1316 & 'latt_temperature_nstep is',multibinit_dtset%latt_temperature_nstep,', while it should be larger than 0',ch10,& 1317 & 'Action: correct latt_temperature_nstep in your input file.' 1318 ABI_ERROR(message) 1319 end if 1320 1321 multibinit_dtset%latt_var_temperature=0 1322 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_var_temperature',tread,'INT') 1323 if(tread==1) multibinit_dtset%latt_var_temperature=intarr(1) 1324 if(multibinit_dtset%latt_var_temperature/=0.and.multibinit_dtset%latt_var_temperature/=1)then 1325 write(message, '(a,i0,a,a,a,a,a)' )& 1326 & 'latt_var_temperature is',multibinit_dtset%latt_var_temperature,'. The only allowed values',ch10,& 1327 & 'are 0, or 1.',ch10,& 1328 & 'Action: correct latt_var_temperature in your input file.' 1329 ABI_ERROR(message) 1330 end if 1331 1332 ! multibinit_dtset%latt_taup=1000 1333 ! call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_taup',tread,'TIM') 1334 ! if(tread==1) multibinit_dtset%latt_taup=dprarr(1) 1335 1336 multibinit_dtset%lwf_dt= 1d-16 1337 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_dt',tread,'TIM') 1338 if(tread==1) multibinit_dtset%lwf_dt=dprarr(1) 1339 if(multibinit_dtset%lwf_dt<0)then 1340 write(message, '(a,es10.2,a,a,a,a,a)' )& 1341 & 'lwf_dt is',multibinit_dtset%lwf_dt,', but the only allowed values',ch10,& 1342 & 'are superior to 0 .',ch10,& 1343 & 'Action: correct lwf_dt in your input file.' 1344 ABI_ERROR(message) 1345 end if 1346 1347 multibinit_dtset%lwf_init_state=0 1348 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_init_state',tread,'INT') 1349 if(tread==1) multibinit_dtset%lwf_init_state=intarr(1) 1350 if( .not. (multibinit_dtset%lwf_init_state <= 4) ) then 1351 write(message, '(a,i8,a,a,a,a,a)' )& 1352 & 'lwf_init_state is ',multibinit_dtset%lwf_init_state,', but the only allowed values',ch10,& 1353 & 'are 0, 1,2,3,4 and negative values.',ch10,& 1354 & 'Action: correct lwf_init_state in your input file.' 1355 ABI_ERROR(message) 1356 end if 1357 1358 1359 multibinit_dtset%lwf_init_hist_fname="" 1360 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_init_hist_fname',tread,'KEY',& 1361 & key_value=multibinit_dtset%lwf_init_hist_fname) 1362 if(.not. tread==1) multibinit_dtset%lwf_init_hist_fname="lwf_init_hist.nc" 1363 1364 1365 multibinit_dtset%spin_init_hist_fname="" 1366 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_init_hist_fname',tread,'KEY',& 1367 & key_value=multibinit_dtset%spin_init_hist_fname) 1368 if(.not. tread==1) multibinit_dtset%spin_init_hist_fname="spin_init_hist.nc" 1369 1370 multibinit_dtset%latt_init_hist_fname="" 1371 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_init_hist_fname',tread,'KEY',& 1372 & key_value=multibinit_dtset%latt_init_hist_fname) 1373 if(.not. tread==1) multibinit_dtset%latt_init_hist_fname="latt_init_hist.nc" 1374 1375 1376 1377 1378 multibinit_dtset%slc_pot_fname="" 1379 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'slc_pot_fname',tread,'KEY',& 1380 & key_value=multibinit_dtset%slc_pot_fname) 1381 1382 1383 multibinit_dtset%lwf_constraint=0 1384 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_constraint',tread,'INT') 1385 if(tread==1) multibinit_dtset%lwf_constraint=intarr(1) 1386 if( .not. (multibinit_dtset%lwf_constraint == 0 .or. multibinit_dtset%lwf_constraint == 1) ) then 1387 write(message, '(a,i8,a,a,a,a,a)' )& 1388 & 'lwf_constraint is ',multibinit_dtset%lwf_constraint,', but the only allowed values',ch10,& 1389 & 'are 0 or 1',ch10,& 1390 & 'Action: correct lwf_constraint in your input file.' 1391 ABI_ERROR(message) 1392 end if 1393 1394 1395 multibinit_dtset%lwf_dynamics=0 1396 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_dynamics',tread,'INT') 1397 if(tread==1) multibinit_dtset%lwf_dynamics=intarr(1) 1398 if( .not. (multibinit_dtset%lwf_dynamics <= 3) ) then 1399 write(message, '(a,i8,a,a,a,a,a)' )& 1400 & 'lwf_dynamics is ',multibinit_dtset%lwf_dynamics,', but the only allowed values',ch10,& 1401 & 'are 0, 1, 2, 3 and negative values.',ch10,& 1402 & 'Action: correct lwf_dynamics in your input file.' 1403 ABI_ERROR(message) 1404 end if 1405 1406 multibinit_dtset%lwf_mc_avg_amp=0.05 1407 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_mc_avg_amp',tread,'DPR') 1408 if(tread==1) multibinit_dtset%lwf_mc_avg_amp=dprarr(1) 1409 if(multibinit_dtset%lwf_mc_avg_amp<0)then 1410 write(message, '(a,f10.1,a,a,a,a,a)' )& 1411 & 'lwf_mc_avg_amp is ',multibinit_dtset%lwf_mc_avg_amp,'. The only allowed values',ch10,& 1412 & 'are non-negative values.',ch10,& 1413 & 'Action: correct lwf_mc_avg_amp in your input file.' 1414 ABI_ERROR(message) 1415 end if 1416 1417 1418 1419 1420 multibinit_dtset%lwf_nctime=1 1421 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_nctime',tread,'INT') 1422 if(tread==1) multibinit_dtset%lwf_nctime=intarr(1) 1423 if( .not. (multibinit_dtset%lwf_nctime >= 0) ) then 1424 write(message, '(a,i8,a,a,a,a,a)' )& 1425 & 'lwf_nctime is ',multibinit_dtset%lwf_nctime,', but the only non-negative values allowed.' 1426 ABI_ERROR(message) 1427 end if 1428 1429 1430 multibinit_dtset%lwf_ntime=0 1431 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_ntime',tread,'INT') 1432 if(tread==1) multibinit_dtset%lwf_ntime=intarr(1) 1433 if( .not. (multibinit_dtset%lwf_ntime >= 0) ) then 1434 write(message, '(a,i8,a,a,a,a,a)' )& 1435 & 'lwf_ntime is ',multibinit_dtset%lwf_ntime,', but the only non-negative values allowed.' 1436 ABI_ERROR(message) 1437 end if 1438 1439 1440 !multibinit_dtset%lwf_self_bound_order=0 1441 !call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_self_bound_order',tread,'INT') 1442 !if(tread==1) multibinit_dtset%lwf_self_bound_order=intarr(1) 1443 1444 1445 !multibinit_dtset%lwf_self_bound_coeff=0.0 1446 !call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_self_bound_coeff',tread,'DPR') 1447 !if(tread==1) multibinit_dtset%lwf_self_bound_coeff=dprarr(1) 1448 1449 multibinit_dtset%lwf_taut=0.0 1450 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_taut',tread,'TIM') 1451 if(tread==1) multibinit_dtset%lwf_taut=dprarr(1) 1452 if(multibinit_dtset%lwf_taut<0)then 1453 write(message, '(a,f10.1,a,a,a,a,a)' )& 1454 & 'lwf_taut is ',multibinit_dtset%lwf_taut,'. The only allowed values',ch10,& 1455 & 'are non-negative values.',ch10,& 1456 & 'Action: correct lwf_taut in your input file.' 1457 ABI_ERROR(message) 1458 end if 1459 1460 1461 multibinit_dtset%lwf_temperature=0.0 1462 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_temperature',tread,'DPR') 1463 if(tread==1) multibinit_dtset%lwf_temperature=dprarr(1) 1464 if(multibinit_dtset%lwf_temperature<0)then 1465 write(message, '(a,f10.1,a,a,a,a,a)' )& 1466 & 'lwf_temperature is ',multibinit_dtset%lwf_temperature,'. The only allowed values',ch10,& 1467 & 'are non-negative values.',ch10,& 1468 & 'Action: correct lwf_temperature in your input file.' 1469 ABI_ERROR(message) 1470 end if 1471 1472 multibinit_dtset%lwf_temperature_start=0.0 1473 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_temperature_start',tread,'DPR') 1474 if(tread==1) multibinit_dtset%lwf_temperature_start=dprarr(1) 1475 if(multibinit_dtset%lwf_temperature_start<0.0)then 1476 write(message, '(a,f10.1,a,a,a,a,a)' )& 1477 & 'lwf_temperature_start is ',multibinit_dtset%lwf_temperature_start,'. The only allowed values',ch10,& 1478 & 'are positives values.',ch10,& 1479 & 'Action: correct lwf_semperature_start in your input file.' 1480 ABI_ERROR(message) 1481 end if 1482 1483 multibinit_dtset%lwf_temperature_end=0.0 1484 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_temperature_end',tread,'DPR') 1485 if(tread==1) multibinit_dtset%lwf_temperature_end=dprarr(1) 1486 if(multibinit_dtset%lwf_temperature_end<0)then 1487 write(message, '(a,f10.1,a,a,a,a,a)' )& 1488 & 'lwf_temperature_end is ',multibinit_dtset%lwf_temperature_end,'. The only allowed values',ch10,& 1489 & 'are positives values.',ch10,& 1490 & 'Action: correct lwf_semperature_end in your input file.' 1491 ABI_ERROR(message) 1492 end if 1493 1494 multibinit_dtset%lwf_temperature_nstep=1 1495 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_temperature_nstep',tread,'INT') 1496 if(tread==1) multibinit_dtset%lwf_temperature_nstep=intarr(1) 1497 if(multibinit_dtset%lwf_temperature_nstep<=0)then 1498 write(message, '(a,i0,a,a,a,a)' )& 1499 & 'lwf_temperature_nstep is',multibinit_dtset%lwf_temperature_nstep,', while it should be larger than 0',ch10,& 1500 & 'Action: correct lwf_temperature_nstep in your input file.' 1501 ABI_ERROR(message) 1502 end if 1503 1504 multibinit_dtset%lwf_var_temperature=0 1505 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_var_temperature',tread,'INT') 1506 if(tread==1) multibinit_dtset%lwf_var_temperature=intarr(1) 1507 if(multibinit_dtset%lwf_var_temperature/=0.and.multibinit_dtset%lwf_var_temperature/=1)then 1508 write(message, '(a,i0,a,a,a,a,a)' )& 1509 & 'lwf_var_temperature is',multibinit_dtset%lwf_var_temperature,'. The only allowed values',ch10,& 1510 & 'are 0, or 1.',ch10,& 1511 & 'Action: correct lwf_var_temperature in your input file.' 1512 ABI_ERROR(message) 1513 end if 1514 1515 1516 1517 multibinit_dtset%spin_init_hist_fname="" 1518 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_init_hist_fname',tread,'KEY',& 1519 & key_value=multibinit_dtset%spin_init_hist_fname) 1520 if(.not. tread==1) multibinit_dtset%spin_init_hist_fname="spin_init_hist.nc" 1521 1522 multibinit_dtset%latt_init_hist_fname="" 1523 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_init_hist_fname',tread,'KEY',& 1524 & key_value=multibinit_dtset%latt_init_hist_fname) 1525 if(.not. tread==1) multibinit_dtset%latt_init_hist_fname="latt_init_hist.nc" 1526 1527 1528 1529 multibinit_dtset%spin_pot_fname="" 1530 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_pot_fname',tread,'KEY',& 1531 & key_value=multibinit_dtset%spin_pot_fname) 1532 if(.not. tread==1) multibinit_dtset%spin_pot_fname="" 1533 1534 multibinit_dtset%latt_pot_fname="" 1535 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_pot_fname',tread,'KEY',& 1536 & key_value=multibinit_dtset%latt_pot_fname) 1537 if(.not. tread==1) multibinit_dtset%latt_pot_fname="" 1538 1539 multibinit_dtset%latt_harm_pot_fname="" 1540 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_harm_pot_fname',tread,'KEY',& 1541 & key_value=multibinit_dtset%latt_harm_pot_fname) 1542 if(.not. tread==1) multibinit_dtset%latt_harm_pot_fname="" 1543 1544 multibinit_dtset%latt_anharm_pot_fname="" 1545 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_anharm_pot_fname',tread,'KEY',& 1546 & key_value=multibinit_dtset%latt_anharm_pot_fname) 1547 if(.not. tread==1) multibinit_dtset%latt_anharm_pot_fname="" 1548 1549 multibinit_dtset%latt_training_set_fname="" 1550 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_training_set_fname',tread,'KEY',& 1551 & key_value=multibinit_dtset%latt_training_set_fname) 1552 if(.not. tread==1) multibinit_dtset%latt_training_set_fname="" 1553 1554 multibinit_dtset%latt_test_set_fname="" 1555 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_test_set_fname',tread,'KEY',& 1556 & key_value=multibinit_dtset%latt_test_set_fname) 1557 if(.not. tread==1) multibinit_dtset%latt_test_set_fname="" 1558 1559 1560 multibinit_dtset%latt_ddb_fnames="" 1561 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_ddb_fnames',tread,'KEY',& 1562 & key_value=lattddb_string) 1563 if(.not. tread==1) then 1564 lattddb_string="" 1565 multibinit_dtset%latt_ddb_fnames(:)="" 1566 else 1567 sidx(1) = 1; sidx(13) = len(lattddb_string) 1568 cnt = 1 1569 do ii=1,len(lattddb_string) 1570 if (lattddb_string(ii:ii) == ",") then 1571 lattddb_string(ii:ii) = " " 1572 cnt = cnt + 1 1573 sidx(cnt) = ii 1574 ABI_CHECK(cnt <= 12, "Too many commas in latt_ddb_fnames!") 1575 end if 1576 end do 1577 1578 do ii=1,cnt 1579 i1 = sidx(ii) 1580 i2 = sidx(ii + 1) 1581 cnt = len(adjustl(trim(lattddb_string(i1:i2)))) 1582 ABI_CHECK(cnt <= fnlen, "latt_ddb_fnames path too small, increase fnlen") 1583 multibinit_dtset%latt_ddb_fnames(ii) = adjustl(trim(lattddb_string(i1:i2))) 1584 ! if (len_trim(pp_dirpath) > 0) then 1585 ! if (len_trim(pp_dirpath) + len_trim(pseudo_paths(ii)) > fnlen) then 1586 ! MSG_ERROR(sjoin("String of len fnlen:", itoa(fnlen), " too small to contain full pseudo path")) 1587 ! end if 1588 ! pseudo_paths(ii) = strcat(pp_dirpath, pseudo_paths(ii)) 1589 !end if 1590 end do 1591 end if 1592 1593 multibinit_dtset%lwf_pot_fname="" 1594 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'lwf_pot_fname',tread,'KEY',& 1595 & key_value=multibinit_dtset%lwf_pot_fname) 1596 if(.not. tread==1) multibinit_dtset%lwf_pot_fname="" 1597 1598 multibinit_dtset%slc_pot_fname="" 1599 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'slc_pot_fname',tread,'KEY',& 1600 & key_value=multibinit_dtset%slc_pot_fname) 1601 if(.not. tread==1) multibinit_dtset%slc_pot_fname="" 1602 1603 multibinit_dtset%outdata_prefix="" 1604 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'outdata_prefix',tread,'KEY',& 1605 & key_value=multibinit_dtset%outdata_prefix) 1606 if(.not. tread==1) multibinit_dtset%outdata_prefix="multibinit" 1607 1608 !N 1609 multibinit_dtset%natifc=natom 1610 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'natifc',tread,'INT') 1611 if(tread==1) multibinit_dtset%natifc=intarr(1) 1612 if(multibinit_dtset%natifc<0)then 1613 write(message, '(a,i0,a,a,a)' )& 1614 & 'natifc is',multibinit_dtset%natifc,', which is lower than 0 .',ch10,& 1615 & 'Action: correct natifc in your input file.' 1616 ABI_ERROR(message) 1617 end if 1618 1619 if(multibinit_dtset%natifc>natom)then 1620 write(message, '(a,i0,a,a,a,i0,a,a,a)' )& 1621 & 'The number of atom ifc in the input files',multibinit_dtset%natifc,',',ch10,& 1622 & 'is larger than the number of atoms',natom,'.',ch10,& 1623 & 'Action: change natifc in the input file.' 1624 ABI_ERROR(message) 1625 end if 1626 1627 multibinit_dtset%ncoeff=0 1628 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'ncoeff',tread,'INT') 1629 if(tread==1) multibinit_dtset%ncoeff=intarr(1) 1630 if(multibinit_dtset%ncoeff<0)then 1631 write(message, '(a,i0,a,a,a)' )& 1632 & 'ncoeff is',multibinit_dtset%ncoeff,', which is lower than 0 .',ch10,& 1633 & 'Action: correct ncoeff in your input file.' 1634 ABI_ERROR(message) 1635 end if 1636 1637 multibinit_dtset%ng2qpt(:)=0 1638 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'ng2qpt',tread,'INT') 1639 if(tread==1) multibinit_dtset%ng2qpt(:)=intarr(1:3) 1640 do ii=1,3 1641 if(multibinit_dtset%ng2qpt(ii)<0)then 1642 write(message, '(a,i0,a,i0,a,a,a,i0,a)' )& 1643 & 'ng2qpt(',ii,') is',multibinit_dtset%ng2qpt(ii),', which is lower than 0 .',ch10,& 1644 & 'Action: correct ng2qpt(',ii,') in your input file.' 1645 ABI_ERROR(message) 1646 end if 1647 end do 1648 1649 multibinit_dtset%ncell(:)= 1 1650 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'ncell',tread,'INT') 1651 if(tread==1) multibinit_dtset%ncell(1:3)=intarr(1:3) 1652 do ii=1,3 1653 if(multibinit_dtset%ncell(ii)<0.or.multibinit_dtset%ncell(ii)>150)then 1654 write(message, '(a,i0,a,i0,3a,i0,a)' )& 1655 & 'ncell(',ii,') is ',multibinit_dtset%ncell(ii),', which is lower than 0 of superior than 150.',& 1656 & ch10,'Action: correct ncell(',ii,') in your input file.' 1657 ABI_ERROR(message) 1658 end if 1659 end do 1660 1661 ! Set to diagonal ncell. Then if it is specified, overwrite. 1662 multibinit_dtset%ncellmat(:,:)= reshape([multibinit_dtset%ncell(1), 0, 0,& 1663 & 0, multibinit_dtset%ncell(2), 0, & 1664 & 0, 0, multibinit_dtset%ncell(3) ], [3,3]) 1665 call intagm(dprarr,intarr,jdtset,marr,9,string(1:lenstr),'ncellmat',tread,'INT') 1666 if(tread==1) then 1667 multibinit_dtset%ncellmat=transpose(reshape(intarr(1:9), [3,3])) 1668 end if 1669 1670 multibinit_dtset%ngqpt(:)= 1 1671 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'ngqpt',tread,'INT') 1672 if(tread==1) multibinit_dtset%ngqpt(1:3)=intarr(1:3) 1673 do ii=1,3 1674 if(multibinit_dtset%ngqpt(ii)<0)then 1675 write(message, '(a,i0,a,i0,a,a,a,i0,a)' )& 1676 & 'ngqpt(',ii,') is',multibinit_dtset%ngqpt(ii),', which is lower than 0 .',ch10,& 1677 & 'Action: correct ngqpt(',ii,') in your input file.' 1678 ABI_ERROR(message) 1679 end if 1680 end do 1681 1682 multibinit_dtset%nph1l=1 1683 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'nph1l',tread,'INT') 1684 if(tread==1) multibinit_dtset%nph1l=intarr(1) 1685 if(multibinit_dtset%nph1l<0) then 1686 write(message, '(a,i0,a,a,a)' )& 1687 & 'nph1l is',multibinit_dtset%nph1l,', which is lower than 0 .',ch10,& 1688 & 'Action: correct nph1l in your input file.' 1689 ABI_ERROR(message) 1690 end if 1691 1692 multibinit_dtset%nph2l=0 1693 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'nph2l',tread,'INT') 1694 if(tread==1) multibinit_dtset%nph2l=intarr(1) 1695 if(multibinit_dtset%nph2l<0)then 1696 write(message, '(a,i0,a,a,a)' )& 1697 & 'nph2l is',multibinit_dtset%nph2l,', which is lower than 0 .',ch10,& 1698 & 'Action: correct nph2l in your input file.' 1699 ABI_ERROR(message) 1700 end if 1701 1702 multibinit_dtset%nqshft=1 1703 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'nqshft',tread,'INT') 1704 if(tread==1) multibinit_dtset%nqshft=intarr(1) 1705 if(multibinit_dtset%nqshft<0 .or. multibinit_dtset%nqshft==3 .or.& 1706 & multibinit_dtset%nqshft>=5 )then 1707 write(message, '(a,i0,a,a,a,a,a)' )& 1708 & 'nqshft is',multibinit_dtset%nqshft,', but the only allowed values',ch10,& 1709 & 'are 1, 2 or 4 .',ch10,& 1710 & 'Action: correct nqshft in your input file.' 1711 ABI_ERROR(message) 1712 end if 1713 1714 multibinit_dtset%nnos=0 1715 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'nnos',tread,'INT') 1716 if(tread==1) multibinit_dtset%nnos=intarr(1) 1717 if(multibinit_dtset%nnos<0)then 1718 write(message, '(a,i0,a,a,a)' )& 1719 & 'nnos is',multibinit_dtset%nnos,', which is lower than 0',ch10,& 1720 & 'Action: correct nnos in your input file.' 1721 ABI_ERROR(message) 1722 end if 1723 1724 1725 multibinit_dtset%nsphere=0 1726 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'nsphere',tread,'INT') 1727 if(tread==1) multibinit_dtset%nsphere=intarr(1) 1728 if(multibinit_dtset%nsphere<0)then 1729 write(message, '(a,i0,a,a,a)' )& 1730 & 'nsphere is',multibinit_dtset%nsphere,', which is lower than 0',ch10,& 1731 & 'Action: correct nsphere in your input file.' 1732 ABI_ERROR(message) 1733 end if 1734 1735 !O 1736 1737 multibinit_dtset%optcell=0 1738 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'optcell',tread,'INT') 1739 if(tread==1) multibinit_dtset%optcell=intarr(1) 1740 if(multibinit_dtset%optcell<0.or.multibinit_dtset%optcell>9)then 1741 write(message, '(a,i8,a,a,a,a,a)' )& 1742 & 'optcell is',multibinit_dtset%optcell,', but the only allowed values',ch10,& 1743 & 'are 0, 1, 2, 3, 4, 5, 6 , 7, 8, 9.',ch10,& 1744 & 'Action: correct optcell in your input file.' 1745 ABI_ERROR(message) 1746 end if 1747 1748 1749 multibinit_dtset%opt_effpot=0 1750 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'opt_effpot',tread,'INT') 1751 if(tread==1) multibinit_dtset%opt_effpot=intarr(1) 1752 if(multibinit_dtset%opt_effpot<0 .and. multibinit_dtset%opt_effpot>1)then 1753 write(message, '(a,i8,a,a,a,a,a)' )& 1754 & 'opt_effpot is',multibinit_dtset%opt_effpot,', but the only allowed values',ch10,& 1755 & 'are 0 and 1.',ch10,& 1756 & 'Action: correct opt_effpot in your input file.' 1757 ABI_ERROR(message) 1758 end if 1759 1760 1761 multibinit_dtset%opt_ncoeff=0 1762 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'opt_ncoeff',tread,'INT') 1763 if(tread==1) multibinit_dtset%opt_ncoeff=intarr(1) 1764 if(multibinit_dtset%opt_ncoeff<0)then 1765 write(message, '(a,i8,a,a,a,a,a)' )& 1766 & 'opt_ncoeff is',multibinit_dtset%opt_ncoeff,', but the only positive values',ch10,& 1767 & 'are allowed for multibinit.',ch10,& 1768 & 'Action: correct opt_ncoeff in your input file.' 1769 ABI_ERROR(message) 1770 end if 1771 1772 multibinit_dtset%opt_EFS=(/0,1,1/) 1773 multibinit_dtset%opt_on = (/ .TRUE.,.TRUE.,.FALSE. /) 1774 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'opt_EFS',tread,'INT') 1775 if(tread==1) multibinit_dtset%opt_EFS(1:3)=intarr(1:3) 1776 if(multibinit_dtset%opt_EFS(1) == 1)multibinit_dtset%opt_on(3) = .TRUE. 1777 if(multibinit_dtset%opt_EFS(2) == 0)multibinit_dtset%opt_on(1) = .FALSE. 1778 if(multibinit_dtset%opt_EFS(3) == 0)multibinit_dtset%opt_on(2) = .FALSE. 1779 if(any(multibinit_dtset%opt_EFS<0) .or. any(multibinit_dtset%opt_EFS>1))then 1780 write(message, '(a,i8,a,a,a)' )& 1781 & 'opt_EFS is',multibinit_dtset%opt_EFS,', but the only allowed values are 0 and 1',ch10,& 1782 & 'Action: correct opt_EFS in your input file.' 1783 ABI_ERROR(message) 1784 endif 1785 1786 multibinit_dtset%opt_factors=(/1,1,1/) 1787 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'opt_factors',tread,'DPR') 1788 if(tread==1) multibinit_dtset%opt_factors(1:3)=dprarr(1:3) 1789 if(any(multibinit_dtset%opt_factors<0))then 1790 write(message, '(a,i8,a,a,a)' )& 1791 & 'opt_factors is',multibinit_dtset%opt_factors,', but the only allowed values are positive',ch10,& 1792 & 'Action: correct opt_factors in your input file.' 1793 ABI_ERROR(message) 1794 end if 1795 1796 !P 1797 multibinit_dtset%prt_model=0 1798 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'prt_model',tread,'INT') 1799 if(tread==1) multibinit_dtset%prt_model=intarr(1) 1800 if(multibinit_dtset%prt_model<0.or.multibinit_dtset%prt_model>4)then 1801 write(message, '(a,i8,a,a,a,a,a)' )& 1802 & 'prt_model is',multibinit_dtset%prt_model,', but the only allowed values',ch10,& 1803 & 'are 0, 1 or 2.',ch10,& 1804 & 'Action: correct prt_model in your input file.' 1805 ABI_ERROR(message) 1806 end if 1807 1808 1809 multibinit_dtset%prt_phfrq=0 1810 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'prt_phfrq',tread,'INT') 1811 if(tread==1) multibinit_dtset%prt_phfrq=intarr(1) 1812 if(multibinit_dtset%prt_phfrq<0.or.multibinit_dtset%prt_phfrq>2)then 1813 write(message, '(a,i8,a,a,a,a,a)' )& 1814 & 'prt_phfrq is',multibinit_dtset%prt_phfrq,', but the only allowed values',ch10,& 1815 & 'are 0, 1 or 2.',ch10,& 1816 & 'Action: correct prt_phfrq in your input file.' 1817 ABI_ERROR(message) 1818 end if 1819 1820 multibinit_dtset%fit_initializeData=0 1821 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_initializeData',tread,'INT') 1822 if(tread==1) multibinit_dtset%fit_initializeData=intarr(1) 1823 if(multibinit_dtset%fit_initializeData<0.or.multibinit_dtset%fit_initializeData>1)then 1824 write(message, '(a,i8,a,a,a,a,a)' )& 1825 & 'fit_initializeData is',multibinit_dtset%fit_initializeData,', but the only allowed values',ch10,& 1826 & 'are 0, 1 or 2.',ch10,& 1827 & 'Action: correct fit_initializeData in your input file.' 1828 ABI_ERROR(message) 1829 end if 1830 1831 1832 multibinit_dtset%fit_generateCoeff=1 1833 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_generateCoeff',tread,'INT') 1834 if(tread==1) multibinit_dtset%fit_generateCoeff=intarr(1) 1835 if(multibinit_dtset%fit_generateCoeff<0.or.multibinit_dtset%fit_generateCoeff>1)then 1836 write(message, '(a,i8,a,a,a,a,a)' )& 1837 & 'fit_generateCoeff is',multibinit_dtset%fit_generateCoeff,', but the only allowed values',ch10,& 1838 & 'are 0, 1 or 2.',ch10,& 1839 & 'Action: correct fit_generateCoeff in your input file.' 1840 ABI_ERROR(message) 1841 end if 1842 1843 !Default is no output of GF values per processor to csv file 1844 multibinit_dtset%prt_GF_csv = .FALSE. 1845 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'prt_GF_csv',tread,'INT') 1846 if(tread==1)then 1847 if(intarr(1) == 1) multibinit_dtset%prt_GF_csv = .TRUE. 1848 if(intarr(1) == 0) multibinit_dtset%prt_GF_csv = .FALSE. 1849 if(intarr(1) < 0 .or. intarr(1) > 1) then 1850 write(message, '(a,i0,a,a,a,a,a)' )& 1851 & 'prt_GF_csv is',intarr(1),'. The only allowed values',ch10,& 1852 & 'are 0 (no output) or 1 (print GF values per processor into csv files)',ch10, & 1853 & 'Action: correct prt_GF_csv in your input file.' 1854 ABI_ERROR(message) 1855 end if 1856 endif 1857 !Default is no output of the real space IFC to file 1858 multibinit_dtset%prt_ifc = 0 1859 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'prt_ifc',tread,'INT') 1860 if(tread==1) multibinit_dtset%prt_ifc = intarr(1) 1861 if(multibinit_dtset%prt_ifc < 0 .or. multibinit_dtset%prt_ifc > 1) then 1862 write(message, '(a,i0,a,a,a,a,a)' )& 1863 & 'prtf_ifc is',multibinit_dtset%prt_ifc,'. The only allowed values',ch10,& 1864 & 'are 0 (no output) or 1 (AI2PS format)',ch10, & 1865 & 'Action: correct prt_ifc in your input file.' 1866 ABI_ERROR(message) 1867 end if 1868 1869 1870 multibinit_dtset%randomseed= 0 1871 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'randomseed',tread,'INT') 1872 if(tread==1) multibinit_dtset%randomseed= intarr(1) 1873 1874 if(multibinit_dtset%randomseed /=0) then 1875 write(message, "(a, a, a, a)") & 1876 "The random seed is set to an fixed number, which might lead to wrong result if you're", & 1877 & "performing a series of Monte Carlo/dynamics calculation as the random number will repeat. Only", & 1878 & "do this when you want to repeat previous results. And note that it is only meaningful when", & 1879 & "the number of cpu cores is consistent." 1880 ABI_WARNING(message) 1881 end if 1882 1883 1884 1885 1886 !Default is no output of the 3rd derivative 1887 multibinit_dtset%strcpling = -1 1888 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'strcpling',tread,'INT') 1889 if(tread==1) multibinit_dtset%strcpling = intarr(1) 1890 if(multibinit_dtset%strcpling < -1 .or. multibinit_dtset%strcpling > 2) then 1891 write(message, '(a,i0,a,a,a,a,a,a,a)' )& 1892 & 'prtf_3rd is ',multibinit_dtset%strcpling,'. The only allowed values',ch10,& 1893 & 'are 0 (no computation), 1 (only computation)',ch10,& 1894 & 'or 2 (computation and print in xml file)',ch10, & 1895 & 'Action: correct strcpling in your input file.' 1896 ABI_ERROR(message) 1897 end if 1898 1899 !Q 1900 multibinit_dtset%qrefine=1 ! default is no refinement 1901 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'qrefine',tread,'INT') 1902 if(tread==1) multibinit_dtset%qrefine = intarr(1:3) 1903 do ii=1,3 1904 if(multibinit_dtset%qrefine(ii) < 1) then 1905 write(message, '(a,3i0,a,a,a,a,a)' )& 1906 & 'qrefine is',multibinit_dtset%qrefine,' The only allowed values',ch10,& 1907 & 'are integers >= 1 giving the refinement of the ngqpt grid',ch10,& 1908 & 'Action: correct qrefine in your input file.' 1909 ABI_ERROR(message) 1910 end if 1911 end do 1912 1913 !R 1914 multibinit_dtset%restartxf=0 1915 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'restartxf',tread,'INT') 1916 if(tread==1) multibinit_dtset%restartxf=intarr(1) 1917 if(multibinit_dtset%restartxf < -3 .or. multibinit_dtset%restartxf > 0)then 1918 write(message, '(a,i8,a,a,a,a,a)' )& 1919 & 'restartxf is',multibinit_dtset%restartxf,', but the only allowed values',ch10,& 1920 & 'is -2 or 0.',ch10,& 1921 & 'Action: correct restartxf in your input file.' 1922 ABI_ERROR(message) 1923 end if 1924 1925 multibinit_dtset%rfmeth=1 1926 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'rfmeth',tread,'INT') 1927 if(tread==1) multibinit_dtset%rfmeth=intarr(1) 1928 if(multibinit_dtset%rfmeth<1.or.multibinit_dtset%rfmeth>2)then 1929 write(message, '(a,i0,a,a,a,a,a)' )& 1930 & 'rfmeth is',multibinit_dtset%rfmeth,', but the only allowed values',ch10,& 1931 & 'are 1 or 2 . ',ch10,& 1932 & 'Action: correct rfmeth in your input file.' 1933 ABI_ERROR(message) 1934 end if 1935 1936 multibinit_dtset%rifcsph=zero 1937 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'rifcsph',tread,'DPR') 1938 if(tread==1) multibinit_dtset%rifcsph=dprarr(1) 1939 if(multibinit_dtset%rifcsph<-tol12)then 1940 write(message, '(a,f10.3,a,a,a)' )& 1941 & 'rifcsph is',multibinit_dtset%rifcsph,', which is lower than zero.',ch10,& 1942 & 'Action: correct rifcsph in your input file.' 1943 ABI_ERROR(message) 1944 end if 1945 ! R 1946 ! multibinit_dtset%random_seed=-1 1947 ! call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'random_seed',tread,'INT') 1948 ! if(tread==1) multibinit_dtset%random_seed=intarr(1) 1949 1950 !S 1951 1952 multibinit_dtset%spin_damping=-1.0 1953 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_damping',tread,'DPR') 1954 if(tread==1) multibinit_dtset%spin_damping=dprarr(1) 1955 1956 ! multibinit_dtset%spin_calc_correlation_obs=0 1957 ! call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_calc_correlation_obs',tread,'INT') 1958 ! if(tread==1) multibinit_dtset%spin_calc_correlation_obs=intarr(1) 1959 ! if(multibinit_dtset%spin_calc_correlation_obs>1.or.multibinit_dtset%spin_calc_correlation_obs<0)then 1960 ! write(message, '(a,i8,a,a,a,a,a)' )& 1961 ! & 'spin_calc_correlation_obs is',multibinit_dtset%spin_calc_correlation_obs,', but the only allowed values',ch10,& 1962 ! & 'is 0 or 1.',ch10,& 1963 ! & 'Action: correct spin_calc_correlation_obs in your input file.' 1964 ! ABI_ERROR(message) 1965 ! end if 1966 ! 1967 multibinit_dtset%spin_calc_thermo_obs=1 1968 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_calc_thermo_obs',tread,'INT') 1969 if(tread==1) multibinit_dtset%spin_calc_thermo_obs=intarr(1) 1970 if(multibinit_dtset%spin_calc_thermo_obs>1.or.multibinit_dtset%spin_calc_thermo_obs<0)then 1971 write(message, '(a,i8,a,a,a,a,a)' )& 1972 & 'spin_calc_thermo_obs is',multibinit_dtset%spin_calc_thermo_obs,', but the only allowed values',ch10,& 1973 & 'is 0 or 1.',ch10,& 1974 & 'Action: correct spin_calc_thermo_obs in your input file.' 1975 ABI_ERROR(message) 1976 end if 1977 1978 1979 ! multibinit_dtset%spin_calc_traj_obs=0 1980 ! call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_calc_traj_obs',tread,'INT') 1981 ! if(tread==1) multibinit_dtset%spin_calc_traj_obs=intarr(1) 1982 ! if(multibinit_dtset%spin_calc_traj_obs>1.or.multibinit_dtset%spin_calc_traj_obs<0)then 1983 ! write(message, '(a,i8,a,a,a,a,a)' )& 1984 ! & 'spin_calc_traj_obs is',multibinit_dtset%spin_calc_traj_obs,', but the only allowed values',ch10,& 1985 ! & 'is 0 or 1.',ch10,& 1986 ! & 'Action: correct spin_calc_traj_obs in your input file.' 1987 ! ABI_ERROR(message) 1988 ! end if 1989 1990 1991 multibinit_dtset%spin_dipdip=0 1992 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_dipdip',tread,'INT') 1993 if(tread==1) multibinit_dtset%spin_dipdip=intarr(1) 1994 if(multibinit_dtset%spin_dipdip>1.or.multibinit_dtset%spin_dipdip<0)then 1995 write(message, '(a,i8,a,a,a,a,a)' )& 1996 & 'spin_dipdip is',multibinit_dtset%spin_dipdip,', but the only allowed values',ch10,& 1997 & 'is 0 or 1.',ch10,& 1998 & 'Action: correct spin_dipdip in your input file.' 1999 ABI_ERROR(message) 2000 end if 2001 2002 2003 multibinit_dtset%spin_dt= 1d-16 2004 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_dt',tread,'TIM') 2005 if(tread==1) multibinit_dtset%spin_dt=dprarr(1) 2006 if(multibinit_dtset%spin_dt<0)then 2007 write(message, '(a,es10.2,a,a,a,a,a)' )& 2008 & 'spin_dt is',multibinit_dtset%spin_dt,', but the only allowed values',ch10,& 2009 & 'are superior to 0 .',ch10,& 2010 & 'Action: correct spin_dt in your input file.' 2011 ABI_ERROR(message) 2012 end if 2013 2014 2015 multibinit_dtset%spin_dynamics=0 2016 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_dynamics',tread,'INT') 2017 if(tread==1) multibinit_dtset%spin_dynamics=intarr(1) 2018 if( .not. (multibinit_dtset%spin_dynamics <= 3 .or. multibinit_dtset%spin_dynamics==20) ) then 2019 write(message, '(a,i8,a,a,a,a,a)' )& 2020 & 'spin_dynamics is ',multibinit_dtset%spin_dynamics,', but the only allowed values',ch10,& 2021 & 'are 0, 1, 2, 3 and 20 and negative values.',ch10,& 2022 & 'Action: correct spin_dynamics in your input file.' 2023 ABI_ERROR(message) 2024 end if 2025 2026 if(multibinit_dtset%spin_dynamics == 20) then 2027 write(message, '(a,i8,a)' )& 2028 & 'spin_dynamics is ',multibinit_dtset%spin_dynamics,', spins will not move. For test only!!' 2029 ABI_WARNING(message) 2030 end if 2031 2032 2033 2034 multibinit_dtset%spin_init_state=1 2035 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_init_state',tread,'INT') 2036 if(tread==1) multibinit_dtset%spin_init_state=intarr(1) 2037 if(multibinit_dtset%spin_init_state<1 .or. & 2038 & multibinit_dtset%spin_init_state>4) then 2039 write(message, '(a,i8,a,a,a,a,a)' )& 2040 & 'spin_init_state is',multibinit_dtset%spin_init_state,', but the only allowed values',ch10,& 2041 & 'are 1, 2, 3, and 4.',ch10,& 2042 & 'Action: correct spin_init_state in your input file.' 2043 ABI_ERROR(message) 2044 end if 2045 2046 2047 2048 multibinit_dtset%spin_mag_field= zero 2049 if(3>marr)then 2050 marr=3 2051 ABI_FREE(intarr) 2052 ABI_FREE(dprarr) 2053 ABI_MALLOC(intarr,(marr)) 2054 ABI_MALLOC(dprarr,(marr)) 2055 end if 2056 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'spin_mag_field',tread,'BFI') 2057 if(tread==1) multibinit_dtset%spin_mag_field(1:3)= dprarr(1:3) 2058 2059 multibinit_dtset%spin_nctime=100 2060 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_nctime',tread,'INT') 2061 if(tread==1) multibinit_dtset%spin_nctime=intarr(1) 2062 if(multibinit_dtset%spin_nctime<=0)then 2063 write(message, '(a,i0,a,a,a)' )& 2064 & 'spin_nctime is ',multibinit_dtset%spin_nctime,', which is lower than 1 .',ch10,& 2065 & 'Action: correct spin_nctime in your input file.' 2066 ABI_ERROR(message) 2067 end if 2068 2069 multibinit_dtset%spin_ntime_pre=0 2070 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_ntime_pre',tread,'INT') 2071 if(tread==1) multibinit_dtset%spin_ntime_pre=intarr(1) 2072 if(multibinit_dtset%spin_ntime_pre<0)then 2073 write(message, '(a,i0,a,a,a)' )& 2074 & 'spin_ntime_pre is',multibinit_dtset%spin_ntime_pre,', which is lower than 0 .',ch10,& 2075 & 'Action: correct spin_ntime_pre in your input file.' 2076 ABI_ERROR(message) 2077 end if 2078 2079 2080 2081 multibinit_dtset%spin_ntime=10000 2082 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_ntime',tread,'INT') 2083 if(tread==1) multibinit_dtset%spin_ntime=intarr(1) 2084 if(multibinit_dtset%spin_ntime<0)then 2085 write(message, '(a,i0,a,a,a)' )& 2086 & 'spin_ntime is',multibinit_dtset%spin_ntime,', which is lower than 0 .',ch10,& 2087 & 'Action: correct spin_ntime in your input file.' 2088 ABI_ERROR(message) 2089 end if 2090 2091 2092 ! multibinit_dtset%spin_n1l=1 2093 ! call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_n1l',tread,'INT') 2094 ! if(tread==1) multibinit_dtset%spin_n1l=intarr(1) 2095 ! if(multibinit_dtset%spin_n1l<0)then 2096 ! write(message, '(a,i0,a,a,a)' )& 2097 ! & 'spin_n1l is',multibinit_dtset%spin_n1l,', which is lower than 0 .',ch10,& 2098 ! & 'Action: correct spin_n1l in your input file.' 2099 ! ABI_ERROR(message) 2100 ! end if 2101 ! 2102 ! multibinit_dtset%spin_n2l=0 2103 ! call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_n2l',tread,'INT') 2104 ! if(tread==1) multibinit_dtset%spin_n2l=intarr(1) 2105 ! if(multibinit_dtset%spin_n2l<0)then 2106 ! write(message, '(a,i0,a,a,a)' )& 2107 ! & 'spin_n2l is',multibinit_dtset%spin_n2l,', which is lower than 0 .',ch10,& 2108 ! & 'Action: correct spin_n2l in your input file.' 2109 ! ABI_ERROR(message) 2110 ! end if 2111 2112 multibinit_dtset%spin_init_orientation= [0.0, 0.0, 1.0] 2113 if(3>marr)then 2114 marr=3 2115 ABI_FREE(intarr) 2116 ABI_FREE(dprarr) 2117 ABI_MALLOC(intarr,(marr)) 2118 ABI_MALLOC(dprarr,(marr)) 2119 end if 2120 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'spin_init_orientation',tread,'DPR') 2121 if(tread==1) multibinit_dtset%spin_init_orientation(1:3)= dprarr(1:3) 2122 2123 multibinit_dtset%spin_projection_qpoint= zero 2124 if(3>marr)then 2125 marr=3 2126 ABI_FREE(intarr) 2127 ABI_FREE(dprarr) 2128 ABI_MALLOC(intarr,(marr)) 2129 ABI_MALLOC(dprarr,(marr)) 2130 end if 2131 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'spin_projection_qpoint',tread,'DPR') 2132 if(tread==1) multibinit_dtset%spin_projection_qpoint(1:3)= dprarr(1:3) 2133 2134 multibinit_dtset%spin_init_qpoint= zero 2135 if(3>marr)then 2136 marr=3 2137 ABI_FREE(intarr) 2138 ABI_FREE(dprarr) 2139 ABI_MALLOC(intarr,(marr)) 2140 ABI_MALLOC(dprarr,(marr)) 2141 end if 2142 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'spin_init_qpoint',tread,'DPR') 2143 if(tread==1) multibinit_dtset%spin_init_qpoint(1:3)= dprarr(1:3) 2144 2145 multibinit_dtset%spin_init_rotate_axis= [1.0, 0.0, 0.0] 2146 if(3>marr)then 2147 marr=3 2148 ABI_FREE(intarr) 2149 ABI_FREE(dprarr) 2150 ABI_MALLOC(intarr,(marr)) 2151 ABI_MALLOC(dprarr,(marr)) 2152 end if 2153 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'spin_init_rotate_axis',tread,'DPR') 2154 if(tread==1) multibinit_dtset%spin_init_rotate_axis(1:3)= dprarr(1:3) 2155 2156 multibinit_dtset%spin_sia_add=0 2157 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_sia_add',tread,'INT') 2158 if(tread==1) multibinit_dtset%spin_sia_add=intarr(1) 2159 if(multibinit_dtset%spin_sia_add <0 .or. multibinit_dtset%spin_sia_add>2 )then 2160 write(message, '(a,i0,a,a,a)' )& 2161 & 'spin_sia_add is',multibinit_dtset%spin_sia_add,', which is not 0, 1, or 2.',ch10,& 2162 & 'Action: correct spin_sia_add in your input file.' 2163 ABI_ERROR(message) 2164 end if 2165 2166 multibinit_dtset%spin_sia_k1amp=0.0 2167 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_sia_k1amp',tread,'ENE') 2168 if(tread==1) multibinit_dtset%spin_sia_k1amp=dprarr(1) 2169 2170 multibinit_dtset%spin_sia_k1dir(:)= [0.0,0.0,1.0] 2171 if(3>marr)then 2172 marr=3 2173 ABI_FREE(intarr) 2174 ABI_FREE(dprarr) 2175 ABI_MALLOC(intarr,(marr)) 2176 ABI_MALLOC(dprarr,(marr)) 2177 end if 2178 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'spin_sia_k1dir',tread,'DPR') 2179 if(tread==1) then 2180 dprarr(1:3)=dprarr(1:3)/sqrt(sum(dprarr(1:3)**2)) 2181 multibinit_dtset%spin_sia_k1dir(1:3)= dprarr(1:3) 2182 endif 2183 2184 multibinit_dtset%spin_temperature=325 2185 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_temperature',tread,'DPR') 2186 if(tread==1) multibinit_dtset%spin_temperature=dprarr(1) 2187 if(multibinit_dtset%spin_temperature<0)then 2188 write(message, '(a,f10.1,a,a,a,a,a)' )& 2189 & 'spin_temperature is ',multibinit_dtset%spin_temperature,'. The only allowed values',ch10,& 2190 & 'are non-negative values.',ch10,& 2191 & 'Action: correct spin_temperature in your input file.' 2192 ABI_ERROR(message) 2193 end if 2194 2195 multibinit_dtset%spin_temperature_start=0.0 2196 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_temperature_start',tread,'DPR') 2197 if(tread==1) multibinit_dtset%spin_temperature_start=dprarr(1) 2198 if(multibinit_dtset%spin_temperature_start<0.0)then 2199 write(message, '(a,f10.1,a,a,a,a,a)' )& 2200 & 'spin_temperature_start is ',multibinit_dtset%spin_temperature_start,'. The only allowed values',ch10,& 2201 & 'are positives values.',ch10,& 2202 & 'Action: correct spin_semperature_start in your input file.' 2203 ABI_ERROR(message) 2204 end if 2205 2206 multibinit_dtset%spin_temperature_end=0.0 2207 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_temperature_end',tread,'DPR') 2208 if(tread==1) multibinit_dtset%spin_temperature_end=dprarr(1) 2209 if(multibinit_dtset%spin_temperature_end<0)then 2210 write(message, '(a,f10.1,a,a,a,a,a)' )& 2211 & 'spin_temperature_end is ',multibinit_dtset%spin_temperature_end,'. The only allowed values',ch10,& 2212 & 'are positives values.',ch10,& 2213 & 'Action: correct spin_semperature_end in your input file.' 2214 ABI_ERROR(message) 2215 end if 2216 2217 multibinit_dtset%spin_temperature_nstep=1 2218 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_temperature_nstep',tread,'INT') 2219 if(tread==1) multibinit_dtset%spin_temperature_nstep=intarr(1) 2220 if(multibinit_dtset%spin_temperature_nstep<=0)then 2221 write(message, '(a,i0,a,a,a,a)' )& 2222 & 'spin_temperature_nstep is',multibinit_dtset%spin_temperature_nstep,', while it should be larger than 0',ch10,& 2223 & 'Action: correct spin_temperature_nstep in your input file.' 2224 ABI_ERROR(message) 2225 end if 2226 2227 2228 2229 ! multibinit_dtset%spin_tolavg=1d-02 2230 ! call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_tolavg',tread,'DPR') 2231 ! if(tread==1) multibinit_dtset%spin_tolavg=dprarr(1) 2232 ! if(multibinit_dtset%spin_tolavg<=0)then 2233 ! write(message, '(a,f10.1,a,a,a,a,a)' )& 2234 ! & 'spin_tolavg is ',multibinit_dtset%spin_tolavg,'. The only allowed values',ch10,& 2235 ! & 'are positives values.',ch10,& 2236 ! & 'Action: correct spin_tolavg in your input file.' 2237 ! ABI_ERROR(message) 2238 ! end if 2239 ! 2240 ! multibinit_dtset%spin_tolvar=1d-02 2241 ! call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_tolvar',tread,'DPR') 2242 ! if(tread==1) multibinit_dtset%spin_tolvar=dprarr(1) 2243 ! if(multibinit_dtset%spin_tolvar<=0)then 2244 ! write(message, '(a,f10.1,a,a,a,a,a)' )& 2245 ! & 'spin_tolvar is ',multibinit_dtset%spin_tolvar,'. The only allowed values',ch10,& 2246 ! & 'are positives values.',ch10,& 2247 ! & 'Action: correct spin_tolvar in your input file.' 2248 ! ABI_ERROR(message) 2249 ! end if 2250 2251 multibinit_dtset%spin_var_temperature=0 2252 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_var_temperature',tread,'INT') 2253 if(tread==1) multibinit_dtset%spin_var_temperature=intarr(1) 2254 if(multibinit_dtset%spin_var_temperature/=0.and.multibinit_dtset%spin_var_temperature/=1)then 2255 write(message, '(a,i0,a,a,a,a,a)' )& 2256 & 'spin_var_temperature is',multibinit_dtset%spin_var_temperature,'. The only allowed values',ch10,& 2257 & 'are 0, or 1.',ch10,& 2258 & 'Action: correct spin_var_temperature in your input file.' 2259 ABI_ERROR(message) 2260 end if 2261 2262 multibinit_dtset%spin_write_traj=0 2263 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'spin_write_traj',tread,'INT') 2264 if(tread==1) multibinit_dtset%spin_write_traj=intarr(1) 2265 if(multibinit_dtset%spin_write_traj/=0.and.multibinit_dtset%spin_write_traj/=1)then 2266 write(message, '(a,i0,a,a,a,a,a)' )& 2267 & 'spin_write_traj is',multibinit_dtset%spin_write_traj,'. The only allowed values',ch10,& 2268 & 'are 0, or 1.',ch10,& 2269 & 'Action: correct spin_write_traj in your input file.' 2270 ABI_ERROR(message) 2271 end if 2272 2273 multibinit_dtset%slc_coupling=0 2274 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'slc_coupling',tread,'INT') 2275 if(tread==1) multibinit_dtset%slc_coupling=intarr(1) 2276 if(multibinit_dtset%slc_coupling.ne. 1111 .and. & 2277 & multibinit_dtset%slc_coupling.ne. 1110 .and. & 2278 & multibinit_dtset%slc_coupling.ne. 1101 .and. & 2279 & multibinit_dtset%slc_coupling.ne. 1011 .and. & 2280 & multibinit_dtset%slc_coupling.ne. 111 .and. & 2281 & multibinit_dtset%slc_coupling.ne. 1100 .and. & 2282 & multibinit_dtset%slc_coupling.ne. 1010 .and. & 2283 & multibinit_dtset%slc_coupling.ne. 1001 .and. & 2284 & multibinit_dtset%slc_coupling.ne. 110 .and. & 2285 & multibinit_dtset%slc_coupling.ne. 101 .and. & 2286 & multibinit_dtset%slc_coupling.ne. 11 .and. & 2287 & multibinit_dtset%slc_coupling.ne. 1000 .and. & 2288 & multibinit_dtset%slc_coupling.ne. 100 .and. & 2289 & multibinit_dtset%slc_coupling.ne. 10 .and. & 2290 & multibinit_dtset%slc_coupling.ne. 1 .and. & 2291 & multibinit_dtset%slc_coupling.ne. 0) then 2292 write(message, '(a,i8,a,a,a,a,a)' )& 2293 & 'slc_coupling is',multibinit_dtset%slc_coupling,', but the only allowed values',ch10,& 2294 & 'are 1111, 1110, 1101, 1011, 111, 1100, 1010, 1001, 110, 101, 11, 1000, 100, 10, 1, and 0.',ch10,& 2295 & 'Action: correct slc_coupling in your input file.' 2296 ABI_ERROR(message) 2297 end if 2298 2299 2300 multibinit_dtset%symdynmat=1 2301 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'symdynmat',tread,'INT') 2302 if(tread==1) multibinit_dtset%symdynmat=intarr(1) 2303 if(multibinit_dtset%symdynmat/=0.and.multibinit_dtset%symdynmat/=1)then 2304 write(message, '(a,i0,a,a,a,a,a)' )& 2305 & 'symdynmat is',multibinit_dtset%symdynmat,'. The only allowed values',ch10,& 2306 & 'are 0, or 1.',ch10,& 2307 & 'Action: correct symdynmat in your input file.' 2308 ABI_ERROR(message) 2309 end if 2310 2311 2312 multibinit_dtset%strfact=100.0d0 2313 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'strfact',tread,'DPR') 2314 if(tread==1) multibinit_dtset%strfact=dprarr(1) 2315 if(multibinit_dtset%strfact<-tol12)then 2316 write(message, '(a,f10.1,a,a,a,a,a)' )& 2317 & 'strfact is ',multibinit_dtset%strfact,'. The only allowed values',ch10,& 2318 & 'are positives values.',ch10,& 2319 & 'Action: correct strfact in your input file.' 2320 ABI_ERROR(message) 2321 end if 2322 2323 multibinit_dtset%strprecon=1.0d0 2324 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'strprecon',tread,'DPR') 2325 if(tread==1) multibinit_dtset%strprecon=dprarr(1) 2326 if(multibinit_dtset%strprecon<tol8 .or. multibinit_dtset%strprecon >1.0d0)then 2327 write(message, '(a,f10.1,a,a,a,a,a)' )& 2328 & 'strprecon is ',multibinit_dtset%strprecon,'. The only allowed values',ch10,& 2329 & 'are positives values smaller or equal than 1.',ch10,& 2330 & 'Action: correct strprecon in your input file.' 2331 ABI_ERROR(message) 2332 end if 2333 2334 !T 2335 2336 multibinit_dtset%temperature=325.0d0 2337 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'temperature',tread,'DPR') 2338 if(tread==1) multibinit_dtset%temperature=dprarr(1) 2339 if(multibinit_dtset%temperature<=0)then 2340 write(message, '(a,f10.1,a,a,a,a,a)' )& 2341 & 'Temperature is ',multibinit_dtset%temperature,'. The only allowed values',ch10,& 2342 & 'are positives values.',ch10,& 2343 & 'Action: correct Temperature in your input file.' 2344 ABI_ERROR(message) 2345 end if 2346 2347 multibinit_dtset%test_effpot=0 2348 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'test_effpot',tread,'DPR') 2349 if(tread==1) multibinit_dtset%test_effpot=dprarr(1) 2350 if(multibinit_dtset%test_effpot<0 .or. multibinit_dtset%test_effpot>1)then 2351 write(message, '(a,i0,a,a,a,a,a)' )& 2352 & 'test_effpot is ',multibinit_dtset%test_effpot,'. The only allowed values',ch10,& 2353 & 'are 0 and 1.',ch10,& 2354 & 'Action: correct test_effpot in your input file.' 2355 ABI_ERROR(message) 2356 end if 2357 2358 multibinit_dtset%test_prt_ph=0 2359 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'test_prt_ph',tread,'DPR') 2360 if(tread==1) multibinit_dtset%test_prt_ph=dprarr(1) 2361 if(multibinit_dtset%test_prt_ph<0 .or. multibinit_dtset%test_prt_ph>1)then 2362 write(message, '(a,i0,a,a,a,a,a)' )& 2363 & 'test_prt_ph is ',multibinit_dtset%test_prt_ph,'. The only allowed values',ch10,& 2364 & 'are 0 and 1.',ch10,& 2365 & 'Action: correct test_prt_ph in your input file.' 2366 ABI_ERROR(message) 2367 end if 2368 2369 multibinit_dtset%tolmxf=2.0d-5 2370 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'tolmxf',tread,'DPR') 2371 if(tread==1) multibinit_dtset%tolmxf=dprarr(1) 2372 if(multibinit_dtset%tolmxf<0)then 2373 write(message, '(a,i0,a,a,a,a,a)' )& 2374 & 'tolmxf is ',multibinit_dtset%tolmxf,'. The only allowed values',ch10,& 2375 & 'are positiv.',ch10,& 2376 & 'Action: correct tolmxf in your input file.' 2377 ABI_ERROR(message) 2378 end if 2379 2380 !U 2381 2382 !V 2383 2384 !W 2385 2386 !X 2387 2388 !Y 2389 2390 !Z 2391 2392 !===================================================================== 2393 !end non-dependent variables 2394 !===================================================================== 2395 2396 !======================================================================= 2397 !Read in dependent variables (dependent on dimensions above) 2398 !======================================================================= 2399 2400 !A 2401 multibinit_dtset%acell= one 2402 if(3>marr)then 2403 marr=3 2404 ABI_FREE(intarr) 2405 ABI_FREE(dprarr) 2406 ABI_MALLOC(intarr,(marr)) 2407 ABI_MALLOC(dprarr,(marr)) 2408 end if 2409 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'acell',tread,'DPR') 2410 if(tread==1) multibinit_dtset%acell(1:3)= dprarr(1:3) 2411 if(any(multibinit_dtset%acell<=tol10))then 2412 write(message, '(3a)' )& 2413 & 'There is negative or zero value for cell ',ch10,& 2414 & 'Action: change acell in your input file.' 2415 ABI_ERROR(message) 2416 end if 2417 2418 if(6>marr)then 2419 marr=6 2420 ABI_FREE(intarr) 2421 ABI_FREE(dprarr) 2422 ABI_MALLOC(intarr,(marr)) 2423 ABI_MALLOC(dprarr,(marr)) 2424 end if 2425 multibinit_dtset%strtarget(1:6) = zero 2426 call intagm(dprarr,intarr,jdtset,marr,6,string(1:lenstr),'strtarget',tread,'DPR') 2427 if(tread==1) multibinit_dtset%strtarget(1:6)=dprarr(1:6) 2428 2429 2430 ABI_MALLOC(multibinit_dtset%atifc,(natom)) 2431 multibinit_dtset%atifc(:)=0 2432 if(multibinit_dtset%natifc>=1)then 2433 if(multibinit_dtset%natifc>marr)then 2434 marr=multibinit_dtset%natifc 2435 ABI_FREE(intarr) 2436 ABI_FREE(dprarr) 2437 ABI_MALLOC(intarr,(marr)) 2438 ABI_MALLOC(dprarr,(marr)) 2439 end if 2440 call intagm(dprarr,intarr,jdtset,marr,multibinit_dtset%natifc,string(1:lenstr),'atifc',tread,'INT') 2441 if(tread==1) then 2442 multibinit_dtset%atifc(1:multibinit_dtset%natifc)= intarr(1:multibinit_dtset%natifc) 2443 else ! set to the maximum 2444 do iatifc=1,multibinit_dtset%natifc 2445 multibinit_dtset%atifc(iatifc) = iatifc 2446 end do 2447 end if 2448 ABI_MALLOC(work,(natom)) 2449 work(:)=0 2450 2451 do iatifc=1,multibinit_dtset%natifc 2452 if(multibinit_dtset%atifc(iatifc)<=0.or.multibinit_dtset%atifc(iatifc)>natom)then 2453 write(message, '(a,i0,a,a,a,a,a,i0,a,a,a)' )& 2454 & 'For iatifc=',iatifc,', the number of the atom ifc to be ',ch10,& 2455 & 'analysed is not valid : either negative, ',ch10,& 2456 & 'zero, or larger than natom =',natom,'.',ch10,& 2457 & 'Action: change atifc in your input file.' 2458 ABI_ERROR(message) 2459 end if 2460 work(multibinit_dtset%atifc(iatifc))=1 2461 end do 2462 multibinit_dtset%atifc(1:natom)=int(work(:)) 2463 ABI_FREE(work) 2464 end if 2465 2466 !B 2467 2468 !C 2469 ABI_MALLOC(multibinit_dtset%coefficients,(multibinit_dtset%ncoeff)) 2470 if (multibinit_dtset%ncoeff/=0)then 2471 if(multibinit_dtset%ncoeff>marr)then 2472 marr=multibinit_dtset%ncoeff 2473 ABI_FREE(intarr) 2474 ABI_FREE(dprarr) 2475 ABI_MALLOC(intarr,(marr)) 2476 ABI_MALLOC(dprarr,(marr)) 2477 end if 2478 multibinit_dtset%coefficients(:)=zero 2479 call intagm(dprarr,intarr,jdtset,marr,multibinit_dtset%ncoeff,& 2480 & string(1:lenstr),'coefficients',tread,'DPR') 2481 if(tread==1)then 2482 do ii=1,multibinit_dtset%ncoeff 2483 multibinit_dtset%coefficients(ii)=dprarr(ii) 2484 end do 2485 end if 2486 end if 2487 2488 ABI_MALLOC(multibinit_dtset%conf_cutoff_disp,(multibinit_dtset%natom)) 2489 if (multibinit_dtset%natom/=0)then 2490 if(multibinit_dtset%natom>marr)then 2491 marr=multibinit_dtset%natom 2492 ABI_FREE(intarr) 2493 ABI_FREE(dprarr) 2494 ABI_MALLOC(intarr,(marr)) 2495 ABI_MALLOC(dprarr,(marr)) 2496 end if 2497 multibinit_dtset%conf_cutoff_disp(:)=zero 2498 call intagm(dprarr,intarr,jdtset,marr,multibinit_dtset%natom,& 2499 & string(1:lenstr),'conf_cutoff_disp',tread,'DPR') 2500 if(tread==1)then 2501 do ii=1,multibinit_dtset%natom 2502 multibinit_dtset%conf_cutoff_disp(ii)=dprarr(ii) 2503 end do 2504 end if 2505 if(any(multibinit_dtset%conf_cutoff_disp<zero))then 2506 write(message, '(3a)' )& 2507 & 'There is negative value for conf_cutoff_disp ',ch10,& 2508 & 'Action: change acell in your input file.' 2509 ABI_ERROR(message) 2510 end if 2511 end if 2512 2513 if(6>marr)then 2514 marr=6 2515 ABI_FREE(intarr) 2516 ABI_FREE(dprarr) 2517 ABI_MALLOC(intarr,(marr)) 2518 ABI_MALLOC(dprarr,(marr)) 2519 end if 2520 multibinit_dtset%conf_cutoff_strain(1:6) = zero 2521 call intagm(dprarr,intarr,jdtset,marr,6,string(1:lenstr),'conf_cutoff_strain',tread,'DPR') 2522 if(tread==1) multibinit_dtset%conf_cutoff_strain(1:6)=dprarr(1:6) 2523 if(any(multibinit_dtset%conf_cutoff_disp<zero))then 2524 write(message, '(3a)' )& 2525 & 'There is negative value for conf_cutoff_strain ',ch10,& 2526 & 'Action: change acell in your input file.' 2527 ABI_ERROR(message) 2528 end if 2529 2530 !D 2531 multibinit_dtset%dipdip_range(:)= (/0,0,0/) 2532 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'dipdip_range',tread,'INT') 2533 if(tread==1) multibinit_dtset%dipdip_range(1:3)=intarr(1:3) 2534 do ii=1,3 2535 if(multibinit_dtset%dipdip_range(ii)<0.or.multibinit_dtset%dipdip_range(ii)>50)then 2536 write(message, '(a,i0,a,i0,4a,i0,a)' )& 2537 & 'dipdip_range(',ii,') is ',multibinit_dtset%dipdip_range(ii),', which is lower',& 2538 & ' than 0 of superior than 50.',& 2539 & ch10,'Action: correct dipdip_range(',ii,') in your input file.' 2540 ABI_ERROR(message) 2541 end if 2542 end do 2543 !E 2544 multibinit_dtset%eivec=0 2545 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'eivec',tread,'INT') 2546 if(tread==1) multibinit_dtset%eivec=intarr(1) 2547 if(multibinit_dtset%eivec<0.or.multibinit_dtset%eivec>4)then 2548 write(message, '(a,i0,a,a,a,a,a)' )& 2549 & 'eivec is',multibinit_dtset%eivec,', but the only allowed values',ch10,& 2550 & 'are 0, 1, 2, 3 or 4.',ch10,& 2551 & 'Action: correct eivec in your input file.' 2552 ABI_ERROR(message) 2553 end if 2554 2555 !F 2556 multibinit_dtset%fit_anhaStrain=0 2557 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_anhaStrain',tread,'INT') 2558 if(tread==1) multibinit_dtset%fit_anhaStrain=intarr(1) 2559 if(multibinit_dtset%fit_anhaStrain<0.and.multibinit_dtset%fit_anhaStrain>1)then 2560 write(message, '(a,i8,a,a,a,a,a)' )& 2561 & 'fit_anhaStrain is',multibinit_dtset%fit_anhaStrain,', but the only allowed values',ch10,& 2562 & 'are 0 or 1 for multibinit.',ch10,& 2563 & 'Action: correct fit_anhaStrain in your input file.' 2564 ABI_ERROR(message) 2565 end if 2566 2567 multibinit_dtset%bound_model=0 2568 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'bound_model',tread,'INT') 2569 if(tread==1) multibinit_dtset%bound_model=intarr(1) 2570 if(multibinit_dtset%bound_model<0.and.multibinit_dtset%bound_model>3)then 2571 write(message, '(a,i8,a,a,a,a,a)' )& 2572 & 'bound_model is',multibinit_dtset%bound_model,', but the only allowed values',ch10,& 2573 & 'are between 0 and 3 for multibinit.',ch10,& 2574 & 'Action: correct bound_model in your input file.' 2575 ABI_ERROR(message) 2576 end if 2577 2578 multibinit_dtset%bound_penalty=1.001d+0 2579 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'bound_penalty',tread,'DPR') 2580 if(tread==1) multibinit_dtset%bound_penalty=dprarr(1) 2581 if(multibinit_dtset%bound_penalty<1)then 2582 write(message, '(a,i8,a,a,a,a,a)' )& 2583 & 'bound_penalty is',multibinit_dtset%bound_penalty,', but the only allowed values',ch10,& 2584 & 'are between larger than 1.',ch10,& 2585 & 'Action: correct bound_penalty in your input file.' 2586 ABI_ERROR(message) 2587 end if 2588 multibinit_dtset%bound_anhaStrain=0 2589 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_anhaStrain',tread,'INT') 2590 if(tread==1) multibinit_dtset%bound_anhaStrain=intarr(1) 2591 if(multibinit_dtset%bound_anhaStrain<0.and.multibinit_dtset%bound_anhaStrain>1)then 2592 write(message, '(a,i8,a,a,a,a,a)' )& 2593 & 'fit_anhaStrain is',multibinit_dtset%bound_anhaStrain,', but the only allowed values',ch10,& 2594 & 'are 0 or 1 for multibinit.',ch10,& 2595 & 'Action: correct fit_anhaStrain in your input file.' 2596 ABI_ERROR(message) 2597 end if 2598 2599 multibinit_dtset%bound_SPCoupling=1 2600 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'bound_SPCoupling',tread,'INT') 2601 if(tread==1) multibinit_dtset%bound_SPCoupling=intarr(1) 2602 if(multibinit_dtset%bound_SPCoupling<0.and.multibinit_dtset%bound_SPCoupling>1)then 2603 write(message, '(a,i8,a,a,a,a,a)' )& 2604 & 'bound_SPCoupling is',multibinit_dtset%bound_SPCoupling,& 2605 & ', but the only allowed values',ch10,& 2606 & 'are 0 or 1 for multibinit.',ch10,& 2607 & 'Action: correct bound_SPCoupling in your input file.' 2608 ABI_ERROR(message) 2609 end if 2610 2611 multibinit_dtset%fit_dispterms=1 2612 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_dispterms',tread,'INT') 2613 if(tread==1) multibinit_dtset%fit_dispterms=intarr(1) 2614 if(multibinit_dtset%fit_dispterms<0.and.multibinit_dtset%fit_dispterms>1)then 2615 write(message, '(a,i8,a,a,a,a,a)' )& 2616 & 'fit_dispterms is',multibinit_dtset%fit_dispterms,& 2617 & ', but the only allowed values',ch10,& 2618 & 'are 0 or 1 for multibinit.',ch10,& 2619 & 'Action: correct fit_dispterms in your input file.' 2620 ABI_ERROR(message) 2621 end if 2622 2623 multibinit_dtset%fit_SPCoupling=1 2624 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_SPCoupling',tread,'INT') 2625 if(tread==1) multibinit_dtset%fit_SPCoupling=intarr(1) 2626 if(multibinit_dtset%fit_SPCoupling<0.and.multibinit_dtset%fit_SPCoupling>1)then 2627 write(message, '(a,i8,a,a,a,a,a)' )& 2628 & 'fit_SPCoupling is',multibinit_dtset%fit_SPCoupling,& 2629 & ', but the only allowed values',ch10,& 2630 & 'are 0 or 1 for multibinit.',ch10,& 2631 & 'Action: correct fit_SPCoupling in your input file.' 2632 ABI_ERROR(message) 2633 end if 2634 2635 multibinit_dtset%fit_SPC_maxS=1 2636 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_SPC_maxS',tread,'INT') 2637 if(tread==1) multibinit_dtset%fit_SPC_maxS=intarr(1) 2638 if(multibinit_dtset%fit_SPC_maxS<1)then 2639 write(message, '(a,i8,a,a,a,a,a)' )& 2640 & 'fit_SPC_maxS is',multibinit_dtset%fit_SPC_maxS,& 2641 & ', but the only allowed values',ch10,& 2642 & 'are positiv.',ch10,& 2643 & 'Action: correct fit_SPC_maxS in your input file.' 2644 ABI_ERROR(message) 2645 end if 2646 2647 multibinit_dtset%bound_cutoff=0 2648 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'bound_cutoff',tread,'DPR') 2649 if(tread==1) multibinit_dtset%bound_cutoff=dprarr(1) 2650 if(multibinit_dtset%bound_cutoff<0)then 2651 write(message, '(a,i8,a,a,a,a,a)' )& 2652 & 'bound_cutoff is',multibinit_dtset%bound_cutoff,', but the only allowed values',ch10,& 2653 & 'are positives for multibinit.',ch10,& 2654 & 'Action: correct bound_cutoff in your input file.' 2655 ABI_ERROR(message) 2656 end if 2657 2658 2659 multibinit_dtset%bound_maxCoeff=4 2660 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'bound_maxCoeff',tread,'INT') 2661 if(tread==1) multibinit_dtset%bound_maxCoeff=intarr(1) 2662 if(multibinit_dtset%bound_maxCoeff<0.and.multibinit_dtset%bound_maxCoeff>1)then 2663 write(message, '(a,i8,a,a,a,a,a)' )& 2664 & 'bound_maxCoeff is',multibinit_dtset%bound_maxCoeff,', but the only allowed values',ch10,& 2665 & 'are 0 or 1 for multibinit.',ch10,& 2666 & 'Action: correct bound_maxCoeff in your input file.' 2667 ABI_ERROR(message) 2668 end if 2669 2670 multibinit_dtset%bound_temp=325 2671 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'bound_temp',tread,'DPR') 2672 if(tread==1) multibinit_dtset%bound_temp=dprarr(1) 2673 if(multibinit_dtset%bound_temp<=0)then 2674 write(message, '(a,f10.1,a,a,a,a,a)' )& 2675 & 'Bound_Temp is ',multibinit_dtset%bound_temp,'. The only allowed values',ch10,& 2676 & 'are positives values.',ch10,& 2677 & 'Action: correct Bound_Temp in your input file.' 2678 ABI_ERROR(message) 2679 end if 2680 multibinit_dtset%bound_step=1000 2681 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'bound_step',tread,'INT') 2682 if(tread==1) multibinit_dtset%bound_step=intarr(1) 2683 if(multibinit_dtset%bound_step<0.and.multibinit_dtset%bound_step>1)then 2684 write(message, '(a,i8,a,a,a,a,a)' )& 2685 & 'bound_step is',multibinit_dtset%bound_step,', but the only allowed values',ch10,& 2686 & 'are 0 or 1 for multibinit.',ch10,& 2687 & 'Action: correct bound_step in your input file.' 2688 ABI_ERROR(message) 2689 end if 2690 2691 multibinit_dtset%fit_coeff=0 2692 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_coeff',tread,'INT') 2693 if(tread==1) multibinit_dtset%fit_coeff=intarr(1) 2694 if(multibinit_dtset%fit_coeff<0.and.multibinit_dtset%fit_coeff>1)then 2695 write(message, '(a,i8,a,a,a,a,a)' )& 2696 & 'fit_coeff is',multibinit_dtset%fit_coeff,', but the only allowed values',ch10,& 2697 & 'are 0 or 1 for multibinit.',ch10,& 2698 & 'Action: correct fit_coeff in your input file.' 2699 ABI_ERROR(message) 2700 end if 2701 2702 multibinit_dtset%fit_cutoff=0 2703 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_cutoff',tread,'DPR') 2704 if(tread==1) multibinit_dtset%fit_cutoff=dprarr(1) 2705 if(multibinit_dtset%fit_cutoff<0)then 2706 write(message, '(a,i8,a,a,a,a,a)' )& 2707 & 'fit_cutoff is',multibinit_dtset%fit_cutoff,', but the only allowed values',ch10,& 2708 & 'are positives for multibinit.',ch10,& 2709 & 'Action: correct fit_cutoff in your input file.' 2710 ABI_ERROR(message) 2711 end if 2712 2713 multibinit_dtset%fit_grid(:)= 1 2714 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'fit_grid',tread,'INT') 2715 if(tread==1) multibinit_dtset%fit_grid(1:3)=intarr(1:3) 2716 do ii=1,3 2717 if(multibinit_dtset%fit_grid(ii)<0.or.multibinit_dtset%fit_grid(ii)>20)then 2718 write(message, '(a,i0,a,i0,a,a,a,i0,a)' )& 2719 & 'fit_grid(',ii,') is ',multibinit_dtset%fit_grid(ii),', which is lower',& 2720 & ' than 0 of superior than 20.',& 2721 & ch10,'Action: correct fit_grid(',ii,') in your input file.' 2722 ABI_ERROR(message) 2723 end if 2724 end do 2725 2726 multibinit_dtset%fit_rangePower(:)= (/3,4/) 2727 call intagm(dprarr,intarr,jdtset,marr,2,string(1:lenstr),'fit_rangePower',tread,'INT') 2728 if(tread==1) multibinit_dtset%fit_rangePower(1:2)=intarr(1:2) 2729 do ii=1,2 2730 if(multibinit_dtset%fit_rangePower(ii)<0.or.multibinit_dtset%fit_rangePower(ii)>20)then 2731 write(message, '(a,i0,a,i0,a,a,a,i0,a)' )& 2732 & 'fit_rangePower(',ii,') is ',multibinit_dtset%fit_rangePower(ii),', which is lower',& 2733 & ' than 0 of superior than 20.',& 2734 & ch10,'Action: correct fit_rangePower(',ii,') in your input file.' 2735 ABI_ERROR(message) 2736 end if 2737 end do 2738 2739 multibinit_dtset%bound_rangePower(:)= (/6,6/) 2740 call intagm(dprarr,intarr,jdtset,marr,2,string(1:lenstr),'bound_rangePower',tread,'INT') 2741 if(tread==1) multibinit_dtset%bound_rangePower(1:2)=intarr(1:2) 2742 do ii=1,2 2743 if(multibinit_dtset%bound_rangePower(ii)<=0.or.multibinit_dtset%bound_rangePower(ii)>20)then 2744 write(message, '(a,i0,a,i0,a,a,a,i0,a)' )& 2745 & 'bound_rangePower(',ii,') is ',multibinit_dtset%bound_rangePower(ii),', which is lower',& 2746 & ' than 0 of superior than 20.',& 2747 & ch10,'Action: correct bound_rangePower(',ii,') in your input file.' 2748 ABI_ERROR(message) 2749 end if 2750 end do 2751 2752 multibinit_dtset%bound_cell(:)= (/6,6,6/) 2753 call intagm(dprarr,intarr,jdtset,marr,3,string(1:lenstr),'bound_cell',tread,'INT') 2754 if(tread==1) multibinit_dtset%bound_cell(1:3)=intarr(1:3) 2755 do ii=1,3 2756 if(multibinit_dtset%bound_cell(ii)<=0.or.multibinit_dtset%bound_cell(ii)>20)then 2757 write(message, '(a,i0,a,i0,4a,i0,a)' )& 2758 & 'bound_cell(',ii,') is ',multibinit_dtset%bound_cell(ii),', which is lower',& 2759 & ' than 0 of superior than 20.',& 2760 & ch10,'Action: correct bound_cell(',ii,') in your input file.' 2761 ABI_ERROR(message) 2762 end if 2763 end do 2764 2765 multibinit_dtset%fit_tolMSDE=0 2766 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_tolMSDE',tread,'DPR') 2767 if(tread==1) multibinit_dtset%fit_tolMSDE=dprarr(1) 2768 if(multibinit_dtset%fit_tolMSDE<0)then 2769 write(message, '(a,i8,a,a,a,a,a)' )& 2770 & 'fit_tolMSDE is',multibinit_dtset%fit_tolMSDE,', but the only allowed values',ch10,& 2771 & 'are positives for multibinit.',ch10,& 2772 & 'Action: correct fit_tolMSDE in your input file.' 2773 ABI_ERROR(message) 2774 end if 2775 2776 multibinit_dtset%fit_tolMSDF=0 2777 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_tolMSDF',tread,'DPR') 2778 if(tread==1) multibinit_dtset%fit_tolMSDF=dprarr(1) 2779 if(multibinit_dtset%fit_tolMSDF<0)then 2780 write(message, '(a,i8,a,a,a,a,a)' )& 2781 & 'fit_tolMSDF is',multibinit_dtset%fit_tolMSDF,', but the only allowed values',ch10,& 2782 & 'are positives for multibinit.',ch10,& 2783 & 'Action: correct fit_tolMSDF in your input file.' 2784 ABI_ERROR(message) 2785 end if 2786 2787 multibinit_dtset%fit_tolMSDS=0 2788 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_tolMSDS',tread,'DPR') 2789 if(tread==1) multibinit_dtset%fit_tolMSDS=dprarr(1) 2790 if(multibinit_dtset%fit_tolMSDS<0)then 2791 write(message, '(a,i8,a,a,a,a,a)' )& 2792 & 'fit_tolMSDS is',multibinit_dtset%fit_tolMSDS,', but the only allowed values',ch10,& 2793 & 'are positives for multibinit.',ch10,& 2794 & 'Action: correct fit_tolMSDS in your input file.' 2795 ABI_ERROR(message) 2796 end if 2797 2798 multibinit_dtset%fit_tolMSDFS=0 2799 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_tolMSDFS',tread,'DPR') 2800 if(tread==1) multibinit_dtset%fit_tolMSDFS=dprarr(1) 2801 if(multibinit_dtset%fit_tolMSDFS<0)then 2802 write(message, '(a,i8,a,a,a,a,a)' )& 2803 & 'fit_tolMSDFS is',multibinit_dtset%fit_tolMSDFS,', but the only allowed values',ch10,& 2804 & 'are positives for multibinit.',ch10,& 2805 & 'Action: correct fit_tolMSDFS in your input file.' 2806 ABI_ERROR(message) 2807 end if 2808 2809 multibinit_dtset%fit_tolGF=0 2810 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'fit_tolGF',tread,'DPR') 2811 if(tread==1) multibinit_dtset%fit_tolGF=dprarr(1) 2812 if(multibinit_dtset%fit_tolGF<0)then 2813 write(message, '(a,i8,a,a,a,a,a)' )& 2814 & 'fit_tolGF is',multibinit_dtset%fit_tolGF,', but the only allowed values',ch10,& 2815 & 'are positives for multibinit.',ch10,& 2816 & 'Action: correct fit_tolGF in your input file.' 2817 ABI_ERROR(message) 2818 end if 2819 !G 2820 2821 !H 2822 2823 !I 2824 2825 2826 !J 2827 2828 !K 2829 2830 !L 2831 ! multibinit_dtset%latt_mask(:)=0 2832 ! call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'latt_mask',tread,'INT') 2833 ! if(tread==1) then 2834 ! do ii=1, 3 2835 ! multibinit_dtset%latt_mask(ii)=intarr(ii) 2836 ! if(multibinit_dtset%latt_mask(ii) <0 .or. multibinit_dtset%latt_mask(ii) >1)then 2837 ! write(message, '(a)' )& 2838 ! & ' latt_mask element should be 0 or 1.' 2839 ! ABI_ERROR(message) 2840 ! end if 2841 ! end do 2842 ! end if 2843 2844 2845 !M 2846 !N 2847 2848 ABI_MALLOC(multibinit_dtset%fit_bancoeff,(multibinit_dtset%fit_nbancoeff)) 2849 if (multibinit_dtset%fit_nbancoeff >0)then 2850 if(multibinit_dtset%fit_nbancoeff>marr)then 2851 marr=multibinit_dtset%fit_nbancoeff 2852 ABI_FREE(intarr) 2853 ABI_MALLOC(intarr,(marr)) 2854 end if 2855 multibinit_dtset%fit_bancoeff(:)=0 2856 call intagm(dprarr,intarr,jdtset,marr,multibinit_dtset%fit_nbancoeff,& 2857 & string(1:lenstr),'fit_bancoeff',tread,'INT') 2858 if(tread==1)then 2859 do ii=1,multibinit_dtset%fit_nbancoeff 2860 multibinit_dtset%fit_bancoeff(ii)=intarr(ii) 2861 end do 2862 end if 2863 end if 2864 2865 ABI_MALLOC(multibinit_dtset%fit_fixcoeff,(multibinit_dtset%fit_nfixcoeff)) 2866 if (multibinit_dtset%fit_nfixcoeff >0)then 2867 if(multibinit_dtset%fit_nfixcoeff>marr)then 2868 marr=multibinit_dtset%fit_nfixcoeff 2869 ABI_FREE(intarr) 2870 ABI_MALLOC(intarr,(marr)) 2871 end if 2872 multibinit_dtset%fit_fixcoeff(:)=0 2873 call intagm(dprarr,intarr,jdtset,marr,multibinit_dtset%fit_nfixcoeff,& 2874 & string(1:lenstr),'fit_fixcoeff',tread,'INT') 2875 if(tread==1)then 2876 do ii=1,multibinit_dtset%fit_nfixcoeff 2877 multibinit_dtset%fit_fixcoeff(ii)=intarr(ii) 2878 end do 2879 end if 2880 end if 2881 2882 ABI_MALLOC(multibinit_dtset%fit_imposecoeff,(multibinit_dtset%fit_nimposecoeff)) 2883 if (multibinit_dtset%fit_nimposecoeff >0)then 2884 if(multibinit_dtset%fit_nimposecoeff>marr)then 2885 marr=multibinit_dtset%fit_nimposecoeff 2886 ABI_FREE(intarr) 2887 ABI_MALLOC(intarr,(marr)) 2888 end if 2889 multibinit_dtset%fit_imposecoeff(:)=0 2890 call intagm(dprarr,intarr,jdtset,marr,multibinit_dtset%fit_nimposecoeff,& 2891 & string(1:lenstr),'fit_imposecoeff',tread,'INT') 2892 if(tread==1)then 2893 do ii=1,multibinit_dtset%fit_nimposecoeff 2894 multibinit_dtset%fit_imposecoeff(ii)=intarr(ii) 2895 end do 2896 end if 2897 end if 2898 2899 !O 2900 2901 ABI_MALLOC(multibinit_dtset%opt_coeff,(multibinit_dtset%opt_ncoeff)) 2902 if (multibinit_dtset%opt_ncoeff >0)then 2903 if(multibinit_dtset%opt_ncoeff>marr)then 2904 marr=multibinit_dtset%opt_ncoeff 2905 ABI_FREE(intarr) 2906 ABI_MALLOC(intarr,(marr)) 2907 end if 2908 multibinit_dtset%opt_coeff(:)=0 2909 call intagm(dprarr,intarr,jdtset,marr,multibinit_dtset%opt_ncoeff,& 2910 & string(1:lenstr),'opt_coeff',tread,'INT') 2911 if(tread==1)then 2912 do ii=1,multibinit_dtset%opt_ncoeff 2913 multibinit_dtset%opt_coeff(ii)=intarr(ii) 2914 end do 2915 end if 2916 end if 2917 2918 !P 2919 2920 !Q 2921 ABI_MALLOC(multibinit_dtset%qmass,(multibinit_dtset%nnos)) 2922 multibinit_dtset%qmass(:)= zero 2923 if(multibinit_dtset%nnos>=1)then 2924 if(multibinit_dtset%nnos>marr)then 2925 marr=multibinit_dtset%nnos 2926 ABI_FREE(intarr) 2927 ABI_FREE(dprarr) 2928 ABI_MALLOC(intarr,(marr)) 2929 ABI_MALLOC(dprarr,(marr)) 2930 end if 2931 call intagm(dprarr,intarr,jdtset,marr,multibinit_dtset%nnos,string(1:lenstr),'qmass',tread,'DPR') 2932 if(tread==1) multibinit_dtset%qmass(:)=dprarr(1:multibinit_dtset%nnos) 2933 end if 2934 2935 if (multibinit_dtset%nqshft/=0)then 2936 if(3*multibinit_dtset%nqshft>marr)then 2937 marr=3*multibinit_dtset%nqshft 2938 ABI_FREE(intarr) 2939 ABI_FREE(dprarr) 2940 ABI_MALLOC(intarr,(marr)) 2941 ABI_MALLOC(dprarr,(marr)) 2942 end if 2943 ABI_MALLOC(multibinit_dtset%q1shft,(3,multibinit_dtset%nqshft)) 2944 multibinit_dtset%q1shft(:,:)=zero 2945 call intagm(dprarr,intarr,jdtset,marr,3*multibinit_dtset%nqshft, string(1:lenstr),'q1shft',tread,'DPR') 2946 if(tread==1) multibinit_dtset%q1shft(1:3,1:multibinit_dtset%nqshft)=& 2947 & reshape(dprarr(1:3*multibinit_dtset%nqshft),(/3,multibinit_dtset%nqshft/)) 2948 end if 2949 2950 ABI_MALLOC(multibinit_dtset%qph1l,(3,multibinit_dtset%nph1l)) 2951 ABI_MALLOC(multibinit_dtset%qnrml1,(multibinit_dtset%nph1l)) 2952 if (multibinit_dtset%nph1l/=0)then 2953 if(4*multibinit_dtset%nph1l>marr)then 2954 marr=4*multibinit_dtset%nph1l 2955 ABI_FREE(intarr) 2956 ABI_FREE(dprarr) 2957 ABI_MALLOC(intarr,(marr)) 2958 ABI_MALLOC(dprarr,(marr)) 2959 end if 2960 multibinit_dtset%qph1l(:,:)=zero 2961 multibinit_dtset%qnrml1(:)=zero 2962 call intagm(dprarr,intarr,jdtset,marr,4*multibinit_dtset%nph1l,string(1:lenstr),'qph1l',tread,'DPR') 2963 if(tread==1)then 2964 do iph1=1,multibinit_dtset%nph1l 2965 do ii=1,3 2966 multibinit_dtset%qph1l(ii,iph1)=dprarr(ii+(iph1-1)*4) 2967 end do 2968 multibinit_dtset%qnrml1(iph1)=dprarr(4+(iph1-1)*4) 2969 if(abs(multibinit_dtset%qnrml1(iph1))<DDB_QTOL)then 2970 write(message, '(a,a,a,a,a)' )& 2971 & 'The first list of wavevectors ','should not have non-analytical data.',ch10,& 2972 & 'Action: correct the first list',' of wavevectors in the input file.' 2973 ABI_ERROR(message) 2974 end if 2975 end do 2976 end if 2977 end if 2978 2979 ABI_MALLOC(multibinit_dtset%qph2l,(3,multibinit_dtset%nph2l)) 2980 ABI_MALLOC(multibinit_dtset%qnrml2,(multibinit_dtset%nph2l)) 2981 if (multibinit_dtset%nph2l/=0)then 2982 if(4*multibinit_dtset%nph2l>marr)then 2983 marr=4*multibinit_dtset%nph2l 2984 ABI_FREE(intarr) 2985 ABI_FREE(dprarr) 2986 ABI_MALLOC(intarr,(marr)) 2987 ABI_MALLOC(dprarr,(marr)) 2988 end if 2989 multibinit_dtset%qph2l(:,:)=zero 2990 multibinit_dtset%qnrml2(:)=zero 2991 call intagm(dprarr,intarr,jdtset,marr,4*multibinit_dtset%nph2l,string(1:lenstr),'qph2l',tread,'DPR') 2992 if(tread==1)then 2993 do iph2=1,multibinit_dtset%nph2l 2994 do ii=1,3 2995 multibinit_dtset%qph2l(ii,iph2)=dprarr(ii+(iph2-1)*4) 2996 end do 2997 multibinit_dtset%qnrml2(iph2)=dprarr(4+(iph2-1)*4) 2998 if(abs(multibinit_dtset%qnrml2(iph2))>DDB_QTOL)then 2999 write(message, '(a,a,a,a,a)' )& 3000 & 'The second list of wavevectors',' should have only non-analytical data.',ch10,& 3001 & 'Action: correct the second list','of wavevectors in the input file.' 3002 ABI_ERROR(message) 3003 end if 3004 end do 3005 end if 3006 end if 3007 3008 !R 3009 if(9>marr)then 3010 marr=9 3011 ABI_FREE(intarr) 3012 ABI_FREE(dprarr) 3013 ABI_MALLOC(intarr,(marr)) 3014 ABI_MALLOC(dprarr,(marr)) 3015 end if 3016 multibinit_dtset%rprim(:,:)= zero 3017 call intagm(dprarr,intarr,jdtset,marr,9,string(1:lenstr),'rprim',tread,'DPR') 3018 if(tread==1) then 3019 multibinit_dtset%rprim(1:3,1:3)= reshape(dprarr(1:9),(/3,3/)) 3020 ! check new rprimd 3021 if(all(abs(multibinit_dtset%rprim(1,:))<tol16).or.& 3022 & all(abs(multibinit_dtset%rprim(2,:))<tol16).or.all(abs(multibinit_dtset%rprim(3,:))<tol16)) then 3023 write(message, '(3a)' )& 3024 & ' There is a problem with rprim',ch10,& 3025 & 'Action: correct rprim' 3026 ABI_BUG(message) 3027 end if 3028 end if 3029 !S 3030 3031 if(6>marr)then 3032 marr=6 3033 ABI_FREE(intarr) 3034 ABI_FREE(dprarr) 3035 ABI_MALLOC(intarr,(marr)) 3036 ABI_MALLOC(dprarr,(marr)) 3037 end if 3038 multibinit_dtset%strten_reference(:)= zero 3039 call intagm(dprarr,intarr,jdtset,marr,6,string(1:lenstr),'strten_reference',tread,'DPR') 3040 if(tread==1) multibinit_dtset%strten_reference(1:6)= dprarr(1:6) 3041 3042 !T 3043 3044 !U 3045 3046 !V 3047 3048 !W 3049 3050 !X 3051 3052 !Y 3053 3054 !Z 3055 3056 !======================================================================= 3057 ! Read Geometric constraint variables for relaxation 3058 !======================================================================= 3059 3060 natom_sc = natom*multibinit_dtset%ncell(1)*multibinit_dtset%ncell(2)*multibinit_dtset%ncell(3) 3061 ABI_MALLOC(multibinit_dtset%iatfix,(3,natom_sc)) 3062 multibinit_dtset%iatfix(:,:)=0 3063 3064 do idir=0,3 3065 3066 if(idir==0)then 3067 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'natfix',tread,'INT') 3068 else if(idir==1)then 3069 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'natfixx',tread,'INT') 3070 else if(idir==2)then 3071 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'natfixy',tread,'INT') 3072 else if(idir==3)then 3073 call intagm(dprarr,intarr,jdtset,marr,1,string(1:lenstr),'natfixz',tread,'INT') 3074 end if 3075 3076 ! Use natfix also for natfixx,natfixy,natfixz 3077 natfix=0 3078 if(tread==1)then 3079 natfix=intarr(1) 3080 ABI_FREE(intarr) 3081 ABI_FREE(dprarr) 3082 ABI_MALLOC(intarr,(natfix)) 3083 ABI_MALLOC(dprarr,(natfix)) 3084 marr = natfix 3085 endif 3086 3087 ! Checks the validity of natfix 3088 if (natfix<0 .or. natfix>natom_sc) then 3089 write(message, '(a,a,a,i0,a,i4,a,a,a)' )& 3090 & 'The input variables natfix, natfixx, natfixy and natfixz must be',ch10,& 3091 & 'between 0 and natom of the supercell (= ',natom_sc,'), while one of them is ',natfix,'.',ch10,& 3092 & 'Action: correct that occurence in your input file.' 3093 ABI_ERROR(message) 3094 end if 3095 3096 ! Read iatfix 3097 if(idir==0)then 3098 call intagm(dprarr,intarr,jdtset,marr,natfix,string(1:lenstr),'iatfix',tread,'INT') 3099 else if(idir==1)then 3100 call intagm(dprarr,intarr,jdtset,marr,natfix,string(1:lenstr),'iatfixx',tread,'INT') 3101 else if(idir==2)then 3102 call intagm(dprarr,intarr,jdtset,marr,natfix,string(1:lenstr),'iatfixy',tread,'INT') 3103 else if(idir==3)then 3104 call intagm(dprarr,intarr,jdtset,marr,natfix,string(1:lenstr),'iatfixz',tread,'INT') 3105 end if 3106 3107 ! If some iatfix was read, natfix must vanish 3108 if (natfix==0 .and. tread==1)then 3109 write(message, '(a,i1,5a)' )& 3110 & 'For direction ',idir,' the corresponding natfix is zero,',ch10,& 3111 & 'while iatfix specifies some atoms to be fixed.',ch10,& 3112 & 'Action: either specify a non-zero natfix(x,y,z) or suppress iatfix(x,y,z).' 3113 ABI_ERROR(message) 3114 end if 3115 3116 ! If natfix is non-zero, iatfix must be defined 3117 if (natfix>0 .and. tread==0)then 3118 write(message, '(a,i1,3a,i0,3a)' )& 3119 & 'For direction ',idir,' no iatfix has been specified,',ch10,& 3120 & 'while natfix specifies that some atoms to be fixed, natfix= ',natfix,'.',ch10,& 3121 & 'Action: either set natfix(x,y,z) to zero or define iatfix(x,y,z).' 3122 ABI_ERROR(message) 3123 end if 3124 3125 if(tread==1)then 3126 do ii=1,natfix 3127 ! Checks the validity of the input iatfix 3128 if (intarr(ii)<1 .or. intarr(ii)>natom_sc) then 3129 write(message, '(a,a,a,i0,a,a,a)' )& 3130 & 'The input variables iatfix, iatfixx, iatfixy and iatfixz must be',ch10,& 3131 & 'between 1 and natom of the supercell, while one of them is ',intarr(ii),'.',ch10,& 3132 & 'Action: correct that occurence in your input file.' 3133 ABI_ERROR(message) 3134 end if 3135 ! Finally set the value of the internal iatfix array 3136 do iatom=1,natom_sc 3137 if(intarr(ii)==iatom)then 3138 if(idir==0)multibinit_dtset%iatfix(1:3,iatom)=1 3139 if(idir/=0)multibinit_dtset%iatfix(idir,iatom)=1 3140 end if 3141 end do 3142 end do 3143 end if 3144 end do 3145 3146 !======================================================================= 3147 ! Read SCALE UP variables 3148 !======================================================================= 3149 3150 call invars10scup(multibinit_dtset%scup_dtset,lenstr,string) 3151 3152 !======================================================================= 3153 !Finished reading in variables - deallocate 3154 !======================================================================= 3155 3156 ABI_FREE(dprarr) 3157 ABI_FREE(intarr) 3158 3159 !======================================================================= 3160 !Check consistency of input variables: 3161 !======================================================================= 3162 3163 if(multibinit_dtset%prtsrlr/=0 .and. multibinit_dtset%ifcflag/=1) then 3164 write(message, '(3a)' )& 3165 & 'ifcflag must be 1 for the SR/LR decomposition of the phonon frequencies',ch10,& 3166 & 'Action: correct ifcflag in your input file.' 3167 ABI_ERROR(message) 3168 end if 3169 3170 !FIXME: add check that if freeze_displ /= 0 then you need to be doing ifc and phonon interpolation 3171 3172 if (multibinit_dtset%ifcflag > 0 .and. sum(abs(multibinit_dtset%ngqpt)) == 0) then 3173 write(message, '(3a)' )& 3174 & 'if you want interatomic force constant output, multibinit needs ngqpt input variable ',ch10,& 3175 & 'Action: set ngqpt in your input file.' 3176 ABI_ERROR(message) 3177 end if 3178 3179 !check that q-grid refinement is a divisor of ngqpt in each direction 3180 if(any(multibinit_dtset%qrefine(:) > 1) .and. & 3181 & any(abs(dmod(dble(multibinit_dtset%ngqpt(1:3))/dble(multibinit_dtset%qrefine(:)),one)) > tol10)) then 3182 write(message, '(a,3i0,a,a,a,3i8,a,a)' )& 3183 & 'qrefine is',multibinit_dtset%qrefine,' The only allowed values',ch10,& 3184 & 'are integers which are divisors of the ngqpt grid', multibinit_dtset%ngqpt,ch10,& 3185 & 'Action: correct qrefine in your input file.' 3186 ABI_ERROR(message) 3187 end if 3188 3189 ! check new rprimd 3190 if(all(multibinit_dtset%acell(:) > one).and.all(abs(multibinit_dtset%rprim(:,:))<tol16))then 3191 write(message, '(3a)' )& 3192 & ' acell is defined but there is no rprim',ch10,& 3193 & 'Action: add rprim input' 3194 ABI_BUG(message) 3195 end if 3196 3197 3198 !check the fit_bancoeff and fit_fixcoeff and opt_coeff, fit_imposecoeff 3199 do ii=1,multibinit_dtset%fit_nbancoeff 3200 do jj=ii+1,multibinit_dtset%fit_nbancoeff 3201 if (multibinit_dtset%fit_bancoeff(ii) == multibinit_dtset%fit_bancoeff(jj))then 3202 write(message, '(a,I0,a,I0,2a)' )& 3203 & ' There is two similar numbers for fit_bancoeff: ',multibinit_dtset%fit_bancoeff(ii),& 3204 & ' and ', multibinit_dtset%fit_bancoeff(jj),ch10,& 3205 & 'Action: change fit_bancoeff' 3206 ABI_BUG(message) 3207 end if 3208 end do 3209 end do 3210 3211 do ii=1,multibinit_dtset%fit_nfixcoeff 3212 do jj=ii+1,multibinit_dtset%fit_nfixcoeff 3213 if (multibinit_dtset%fit_fixcoeff(ii) == multibinit_dtset%fit_fixcoeff(jj))then 3214 write(message, '(a,I0,a,I0,2a)' )& 3215 & ' There is two similar numbers for fit_fixcoeff: ',multibinit_dtset%fit_fixcoeff(ii),& 3216 & ' and ', multibinit_dtset%fit_fixcoeff(jj),ch10,& 3217 & 'Action: change fit_fixcoeff' 3218 ABI_BUG(message) 3219 end if 3220 end do 3221 end do 3222 3223 3224 do ii=1,multibinit_dtset%opt_ncoeff 3225 do jj=ii+1,multibinit_dtset%opt_ncoeff 3226 if (multibinit_dtset%opt_coeff(ii) == multibinit_dtset%opt_coeff(jj))then 3227 write(message, '(a,I0,a,I0,2a)' )& 3228 & ' There is two similar numbers for opt_coeff: ',multibinit_dtset%opt_coeff(ii),& 3229 & ' and ', multibinit_dtset%opt_coeff(jj),ch10,& 3230 & 'Action: change opt_coeff' 3231 ABI_BUG(message) 3232 end if 3233 end do 3234 end do 3235 3236 do ii=1,multibinit_dtset%fit_nimposecoeff 3237 do jj=ii+1,multibinit_dtset%fit_nimposecoeff 3238 if (multibinit_dtset%fit_imposecoeff(ii) == multibinit_dtset%fit_imposecoeff(jj))then 3239 write(message, '(a,I0,a,I0,2a)' )& 3240 & ' There is two similar numbers for fit_imposecoeff: ',multibinit_dtset%fit_imposecoeff(ii),& 3241 & ' and ', multibinit_dtset%fit_imposecoeff(jj),ch10,& 3242 & 'Action: change fit_imposecoeff' 3243 ABI_BUG(message) 3244 end if 3245 end do 3246 end do 3247 3248 do ii=1,3 3249 if(multibinit_dtset%dipdip_range(ii) < multibinit_dtset%ncell(ii)) then 3250 write(message,'(4a,3I3,3a,3I3,6a)') ch10,& 3251 & ' --- !WARNING',ch10,& 3252 & ' The range of dipdip_range (',multibinit_dtset%dipdip_range(:),')',ch10,& 3253 & ' But the range of the cell for the simulation is',& 3254 & multibinit_dtset%ncell(:),')',ch10,& 3255 & ' dipdip_range is set to ncell.',ch10,& 3256 & ' ---',ch10 3257 multibinit_dtset%dipdip_range(:) = multibinit_dtset%ncell(:) 3258 call wrtout(std_out,message,'COLL') 3259 exit 3260 end if 3261 if(multibinit_dtset%dipdip_range(ii) < multibinit_dtset%bound_cell(ii)) then 3262 write(message,'(4a,3I3,3a,3I3,6a)') ch10,& 3263 & ' --- !WARNING',ch10,& 3264 & ' The range of dipdip_range (',multibinit_dtset%dipdip_range(:),')',ch10,& 3265 & ' But the range of the cell for the simulation is',& 3266 & multibinit_dtset%ncell(:),')',ch10,& 3267 & ' dipdip_range is set to bound_cell.',ch10,& 3268 & ' ---',ch10 3269 multibinit_dtset%dipdip_range(:) = multibinit_dtset%ncell(:) 3270 call wrtout(std_out,message,'COLL') 3271 exit 3272 end if 3273 end do 3274 3275 !Check if only one tolerance is specify 3276 if(abs(multibinit_dtset%fit_tolMSDF) >zero .and. abs(multibinit_dtset%fit_tolMSDS) >zero) then 3277 write(message, '(3a)' ) & 3278 & ' There is two tolerance flags for the fit: fit_tolMSDF and fit_tolMSDS',ch10,& 3279 & 'Action: Put only one tolerance flag' 3280 ABI_BUG(message) 3281 end if 3282 if(abs(multibinit_dtset%fit_tolMSDF) >zero .and. abs(multibinit_dtset%fit_tolMSDE) >zero)then 3283 write(message, '(3a)' ) & 3284 & ' There is two tolerance flags for the fit: fit_tolMSDF and fit_tolMSDE',ch10,& 3285 & 'Action: Put only one tolerance flag' 3286 ABI_BUG(message) 3287 end if 3288 if(abs(multibinit_dtset%fit_tolMSDF) >zero .and. abs(multibinit_dtset%fit_tolMSDFS) >zero)then 3289 write(message, '(3a)' ) & 3290 & ' There is two tolerance flags for the fit: fit_tolMSDF and fit_tolMSDFS',ch10,& 3291 & 'Action: Put only one tolerance flag' 3292 ABI_BUG(message) 3293 end if 3294 if(abs(multibinit_dtset%fit_tolMSDS) >zero .and. abs(multibinit_dtset%fit_tolMSDE) >zero)then 3295 write(message, '(3a)' ) & 3296 & ' There is two tolerance flags for the fit: fit_tolMSDS and fit_tolMSDE',ch10,& 3297 & 'Action: Put only one tolerance flag' 3298 ABI_BUG(message) 3299 end if 3300 if(abs(multibinit_dtset%fit_tolMSDS) >zero .and. abs(multibinit_dtset%fit_tolMSDFS) >zero)then 3301 write(message, '(3a)' ) & 3302 & ' There is two tolerance flags for the fit: fit_tolMSDS and fit_tolMSDFS',ch10,& 3303 & 'Action: Put only one tolerance flag' 3304 ABI_BUG(message) 3305 end if 3306 if(abs(multibinit_dtset%fit_tolMSDE) >zero .and. abs(multibinit_dtset%fit_tolMSDFS) >zero)then 3307 write(message, '(3a)' ) & 3308 & ' There is two tolerance flags for the fit: fit_tolMSDE and fit_tolMSDFS',ch10,& 3309 & 'Action: Put only one tolerance flag' 3310 ABI_BUG(message) 3311 end if 3312 3313 end subroutine invars10
m_multibinit_dataset/multibinit_dtset_free [ Functions ]
[ Top ] [ m_multibinit_dataset ] [ Functions ]
NAME
multibinit_dtset_free
FUNCTION
deallocate remaining arrays in the multibinit_dtset datastructure
INPUTS
multibinit_dtset <type(multibinit_dtset_type)> = multibinit_dataset structure OUTPUTS multibinit_dtset <type(multibinit_dtset_type)> = multibinit_dataset structure
SOURCE
605 subroutine multibinit_dtset_free(multibinit_dtset) 606 607 !Arguments ------------------------------------ 608 !scalars 609 type(multibinit_dtset_type), intent(inout) :: multibinit_dtset 610 611 ! ************************************************************************* 612 613 if (allocated(multibinit_dtset%atifc)) then 614 ABI_FREE(multibinit_dtset%atifc) 615 end if 616 if (allocated(multibinit_dtset%conf_cutoff_disp)) then 617 ABI_FREE(multibinit_dtset%conf_cutoff_disp) 618 end if 619 if (allocated(multibinit_dtset%fit_fixcoeff)) then 620 ABI_FREE(multibinit_dtset%fit_fixcoeff) 621 end if 622 if (allocated(multibinit_dtset%fit_imposecoeff)) then 623 ABI_FREE(multibinit_dtset%fit_imposecoeff) 624 end if 625 if (allocated(multibinit_dtset%fit_bancoeff)) then 626 ABI_FREE(multibinit_dtset%fit_bancoeff) 627 end if 628 if (allocated(multibinit_dtset%opt_coeff)) then 629 ABI_FREE(multibinit_dtset%opt_coeff) 630 end if 631 if (allocated(multibinit_dtset%qmass)) then 632 ABI_FREE(multibinit_dtset%qmass) 633 end if 634 if (allocated(multibinit_dtset%coefficients)) then 635 ABI_FREE(multibinit_dtset%coefficients) 636 end if 637 if (allocated(multibinit_dtset%qnrml1)) then 638 ABI_FREE(multibinit_dtset%qnrml1) 639 end if 640 if (allocated(multibinit_dtset%qnrml2)) then 641 ABI_FREE(multibinit_dtset%qnrml2) 642 end if 643 if (allocated(multibinit_dtset%qph1l)) then 644 ABI_FREE(multibinit_dtset%qph1l) 645 end if 646 if (allocated(multibinit_dtset%qph2l)) then 647 ABI_FREE(multibinit_dtset%qph2l) 648 end if 649 if(allocated(multibinit_dtset%q1shft))then 650 ABI_FREE(multibinit_dtset%q1shft) 651 end if 652 if(allocated(multibinit_dtset%iatfix))then 653 ABI_FREE(multibinit_dtset%iatfix) 654 end if 655 656 657 !if (allocated(multibinit_dtset%gilbert_damping)) then 658 ! ABI_FREE(multibinit_dtset%gilbert_damping) 659 !end if 660 661 !if (allocated(multibinit_dtset%gyro_ratio)) then 662 ! ABI_FREE(multibinit_dtset%gyro_ratio) 663 !end if 664 665 !if (allocated(multibinit_dtset%qph1l_spin)) then 666 ! ABI_FREE(multibinit_dtset%qph1l_spin) 667 !end if 668 !if (allocated(multibinit_dtset%qph2l_spin)) then 669 ! ABI_FREE(multibinit_dtset%qph2l_spin) 670 !end if 671 672 !===================================================================== 673 !Free Scale-up dataset 674 !===================================================================== 675 676 call scup_dtset_free(multibinit_dtset%scup_dtset) 677 678 end subroutine multibinit_dtset_free
m_multibinit_dataset/multibinit_dtset_init [ Functions ]
[ Top ] [ m_multibinit_dataset ] [ Functions ]
NAME
multibinit_dtset_init
FUNCTION
Init the dtset datatype
INPUTS
natom=number of atoms, needed for atifc
OUTPUT
multibinit_dtset <type(multibinit_dtset_type)> = datatype with all the input variables
NOTES
Should be executed by one processor only.
SOURCE
361 subroutine multibinit_dtset_init(multibinit_dtset,natom) 362 363 !Arguments ------------------------------- 364 !scalars 365 integer,intent(in) :: natom 366 type(multibinit_dtset_type),intent(inout) :: multibinit_dtset 367 !Local variables ------------------------- 368 !scalars 369 !arrays 370 371 !********************************************************************* 372 373 !copy natom to multibinit_dtset 374 multibinit_dtset%natom=natom 375 376 !===================================================================== 377 !Scalars 378 !===================================================================== 379 multibinit_dtset%asr=2 380 multibinit_dtset%analyze_anh_pot=0 381 multibinit_dtset%brav=1 382 multibinit_dtset%bmass=0 383 multibinit_dtset%chneut=0 384 multibinit_dtset%confinement=0 385 multibinit_dtset%conf_power_disp=0 386 multibinit_dtset%conf_power_strain=0 387 multibinit_dtset%conf_power_fact_disp=100 388 multibinit_dtset%conf_power_fact_strain=100 389 multibinit_dtset%delta_df= 1d-02 390 multibinit_dtset%dipdip=1 391 multibinit_dtset%dipdip_prt=0 392 multibinit_dtset%dtion=100 393 multibinit_dtset%dynamics=0 394 multibinit_dtset%dyn_chksym=0 395 multibinit_dtset%dyn_tolsym=1d-10 396 multibinit_dtset%eivec=0 397 multibinit_dtset%energy_reference= zero 398 multibinit_dtset%enunit=0 399 multibinit_dtset%fit_anhaStrain=0 400 multibinit_dtset%bound_model=0 401 multibinit_dtset%bound_penalty=1.001d+0 402 multibinit_dtset%bound_anhaStrain=0 403 multibinit_dtset%bound_cutoff=0 404 multibinit_dtset%bound_maxCoeff=4 405 multibinit_dtset%bound_temp=325 406 multibinit_dtset%bound_step=1000 407 multibinit_dtset%bound_SPCoupling=1 408 multibinit_dtset%fit_coeff=0 409 multibinit_dtset%fit_cutoff=0 410 multibinit_dtset%fit_nbancoeff=0 411 multibinit_dtset%fit_ncoeff=0 412 multibinit_dtset%fit_ncoeff_per_iatom=0 413 multibinit_dtset%fit_iatom=0 414 multibinit_dtset%ts_option=0 415 multibinit_dtset%fit_nfixcoeff=0 416 multibinit_dtset%fit_nimposecoeff=0 417 multibinit_dtset%fit_EFS = (/ 0, 1, 1 /) 418 multibinit_dtset%sel_EFS = (/ 0, 1, 1 /) 419 multibinit_dtset%opt_EFS = (/ 0, 1, 1 /) 420 multibinit_dtset%bound_EFS = (/ 0, 1, 1 /) 421 multibinit_dtset%fit_option=0 422 multibinit_dtset%fit_SPCoupling=1 423 multibinit_dtset%fit_dispterms=1 424 multibinit_dtset%fit_SPC_maxS=1 425 multibinit_dtset%fit_generateCoeff=1 426 multibinit_dtset%fit_initializeData=0 427 multibinit_dtset%fit_tolMSDE=zero 428 multibinit_dtset%fit_tolMSDS=zero 429 multibinit_dtset%fit_tolMSDF=zero 430 multibinit_dtset%fit_tolMSDFS=zero 431 multibinit_dtset%fit_tolGF=zero 432 multibinit_dtset%ifcana=0 433 multibinit_dtset%ifcflag=1 434 multibinit_dtset%ifcout=-1 435 multibinit_dtset%hmctt=0 436 multibinit_dtset%hmcsst=0 437 multibinit_dtset%prtsrlr=0 438 ! Langevin friction 439 multibinit_dtset%latt_friction=1d-4 440 ! Berendsen taut 441 multibinit_dtset%latt_taut=1000.0 442 !multibinit_dtset%latt_taup=1000.0 443 !multibinit_dtset%latt_compressibility=0.0 444 445 446 multibinit_dtset%ntime=200 447 multibinit_dtset%nctime=1 448 multibinit_dtset%natifc=natom 449 multibinit_dtset%ncoeff=0 450 multibinit_dtset%nph1l=1 451 multibinit_dtset%nph2l=0 452 multibinit_dtset%nqshft=1 453 multibinit_dtset%nnos=0 454 multibinit_dtset%nsphere=0 455 multibinit_dtset%optcell=0 456 multibinit_dtset%opt_effpot=0 457 multibinit_dtset%opt_coeff=0 458 multibinit_dtset%prt_model=0 459 multibinit_dtset%prt_phfrq=0 460 multibinit_dtset%prt_ifc = 0 461 multibinit_dtset%prt_GF_csv = .FALSE. 462 multibinit_dtset%randomseed = 0 463 multibinit_dtset%strcpling = -1 464 multibinit_dtset%qrefine=1 465 multibinit_dtset%restartxf=0 466 multibinit_dtset%rfmeth=1 467 multibinit_dtset%rifcsph=zero 468 multibinit_dtset%strfact=100.0d0 469 multibinit_dtset%strprecon=1.0d0 470 multibinit_dtset%symdynmat=1 471 multibinit_dtset%temperature=325 472 multibinit_dtset%test_effpot=0 473 multibinit_dtset%test_prt_ph=0 474 multibinit_dtset%tolmxf=2.0d-5 475 multibinit_dtset%latt_temperature_start=0.0 476 multibinit_dtset%latt_temperature_end=0.0 477 multibinit_dtset%latt_temperature_nstep=0 478 multibinit_dtset%latt_var_temperature=0 479 480 multibinit_dtset%latt_lwf_anharmonic = 0 481 482 multibinit_dtset%lwf_constraint = 0 483 multibinit_dtset%lwf_dynamics = 0 484 multibinit_dtset%lwf_nctime = 1 485 multibinit_dtset%lwf_ntime = 0 486 multibinit_dtset%lwf_init_state = 0 487 multibinit_dtset%lwf_init_hist_fname="" 488 489 multibinit_dtset%latt_init_hist_fname="" 490 multibinit_dtset%latt_pot_fname="" 491 multibinit_dtset%latt_harm_pot_fname="" 492 multibinit_dtset%latt_anharm_pot_fname="" 493 multibinit_dtset%latt_training_set_fname="" 494 multibinit_dtset%latt_test_set_fname="" 495 multibinit_dtset%latt_ddb_fnames(12)="" 496 497 498 multibinit_dtset%lwf_pot_fname="" 499 multibinit_dtset%slc_pot_fname="" 500 multibinit_dtset%lwf_dt=0 501 !multibinit_dtset%lwf_self_bound_order=0 502 multibinit_dtset%lwf_taut=0.0_dp 503 multibinit_dtset%lwf_temperature=0.0_dp 504 multibinit_dtset%lwf_mc_avg_amp=0.0_dp 505 !multibinit_dtset%lwf_self_bound_coeff=0.0_dp 506 multibinit_dtset%lwf_temperature_start=0.0 507 multibinit_dtset%lwf_temperature_end= 0.0 508 multibinit_dtset%lwf_temperature_nstep= 0 509 multibinit_dtset%lwf_var_temperature=0 510 511 multibinit_dtset%spin_init_hist_fname="" 512 multibinit_dtset%spin_pot_fname="" 513 514 !multibinit_dtset%spin_calc_traj_obs=0 515 multibinit_dtset%spin_calc_thermo_obs=1 516 !multibinit_dtset%spin_calc_correlation_obs=0 517 multibinit_dtset%spin_dipdip=0 518 multibinit_dtset%spin_dt=100 519 multibinit_dtset%spin_dynamics=0 520 multibinit_dtset%spin_init_hist_fname="" 521 multibinit_dtset%spin_init_state=1 522 multibinit_dtset%spin_ntime_pre=0 523 multibinit_dtset%spin_ntime=10000 524 multibinit_dtset%spin_nctime=100 525 !multibinit_dtset%spin_nmatom=0 526 !multibinit_dtset%spin_n1l=1 527 !multibinit_dtset%spin_n2l=0 528 529 530 multibinit_dtset%spin_damping=-1.0 531 multibinit_dtset%spin_sia_add=0 532 multibinit_dtset%spin_sia_k1amp=zero 533 multibinit_dtset%spin_temperature=325 534 multibinit_dtset%spin_temperature_start=0.0 535 multibinit_dtset%spin_temperature_end= 0.0 536 multibinit_dtset%spin_temperature_nstep= 0 537 !multibinit_dtset%spin_tolavg=1d-2 ! TODO hexu: to be decided. should it be a function of temperature? 538 !multibinit_dtset%spin_tolvar=1d-3 ! TODO hexu: as above. 539 540 multibinit_dtset%spin_var_temperature=0 541 multibinit_dtset%spin_write_traj=1 542 543 multibinit_dtset%slc_pot_fname="" 544 multibinit_dtset%slc_coupling=0 545 546 multibinit_dtset%outdata_prefix="" 547 !======================================================================= 548 !Arrays 549 !======================================================================= 550 multibinit_dtset%acell(:) = one 551 multibinit_dtset%conf_cutoff_strain(1:6) = zero 552 multibinit_dtset%dipdip_range(:)= (/0,0,0/) 553 multibinit_dtset%fit_grid(:)= 1 554 multibinit_dtset%fit_rangePower(:)= (/3,4/) 555 multibinit_dtset%bound_rangePower(:)= (/6,6/) 556 multibinit_dtset%bound_cell(:)= (/6,6,6/) 557 multibinit_dtset%ncell(:)= 0 558 multibinit_dtset%ncellmat(:,:)= 0 559 multibinit_dtset%ngqpt(:) = 0 560 multibinit_dtset%ng2qpt(:)= 0 561 multibinit_dtset%strtarget(1:6) = zero 562 multibinit_dtset%qmass(:)= zero 563 multibinit_dtset%rprim(:,:)= zero 564 multibinit_dtset%strten_reference(:)= zero 565 566 multibinit_dtset%spin_mag_field(:)=zero 567 multibinit_dtset%spin_projection_qpoint(:)=zero 568 multibinit_dtset%spin_init_qpoint(:)=zero 569 multibinit_dtset%spin_init_rotate_axis(:)=(/1.0, 0.0, 0.0/) 570 multibinit_dtset%spin_init_orientation(:)=(/0.0, 0.0, 1.0/) 571 572 573 multibinit_dtset%spin_sia_k1dir(:)=(/0.0,0.0,1.0/) 574 575 576 ABI_MALLOC(multibinit_dtset%atifc,(natom)) 577 multibinit_dtset%atifc(:)=0 578 ABI_MALLOC(multibinit_dtset%conf_cutoff_disp,(multibinit_dtset%natom)) 579 multibinit_dtset%conf_cutoff_disp(:)=zero 580 ABI_MALLOC(multibinit_dtset%q1shft,(3,multibinit_dtset%nqshft)) 581 multibinit_dtset%q1shft(:,:) = zero 582 ABI_MALLOC(multibinit_dtset%iatfix,(3,natom)) 583 584 ! multibinit_dtset%latt_mask(:) = 0 585 586 end subroutine multibinit_dtset_init
m_multibinit_dataset/multibinit_dtset_type [ Types ]
[ Top ] [ m_multibinit_dataset ] [ Types ]
NAME
multibinit_dtset_type
FUNCTION
The multibinit_dtset_type structured datatype gather all the input variables for the multibinit code.
SOURCE
60 type multibinit_dtset_type 61 62 ! Integer 63 integer :: asr 64 integer :: analyze_anh_pot 65 integer :: brav 66 integer :: chneut 67 integer :: confinement 68 integer :: conf_power_disp 69 integer :: conf_power_strain 70 integer :: dipdip 71 integer :: eivec 72 integer :: elphflag 73 integer :: enunit 74 integer :: bound_model 75 integer :: bound_maxCoeff 76 integer :: bound_SPCoupling 77 integer :: bound_AnhaStrain 78 integer :: bound_step 79 integer :: fit_anhaStrain 80 integer :: fit_dispterms 81 integer :: fit_SPCoupling 82 integer :: fit_SPC_maxS 83 integer :: fit_generateCoeff 84 integer :: fit_iatom 85 integer :: fit_initializeData 86 integer :: fit_coeff 87 integer :: fit_option 88 integer :: fit_ncoeff 89 integer :: fit_ncoeff_per_iatom 90 integer :: fit_nbancoeff 91 integer :: fit_nfixcoeff 92 integer :: fit_nimposecoeff 93 integer :: fit_EFS(3) 94 integer :: sel_EFS(3) 95 integer :: opt_EFS(3) 96 integer :: bound_EFS(3) 97 integer :: opt_effpot 98 integer :: opt_ncoeff 99 integer :: ts_option 100 integer :: hmctt 101 integer :: hmcsst 102 integer :: ifcana 103 integer :: ifcflag 104 integer :: ifcout 105 ! TODO hexu: why integer dtion? 106 integer :: dtion 107 integer :: dynamics 108 integer :: dyn_chksym 109 integer :: natifc 110 integer :: natom 111 integer :: ncoeff 112 integer :: nctime 113 integer :: ntime 114 integer :: nnos 115 integer :: nph1l 116 integer :: nph2l 117 integer :: nqshft 118 integer :: nsphere 119 integer :: optcell 120 integer :: prt_model 121 integer :: dipdip_prt 122 integer :: prt_phfrq 123 integer :: prt_ifc 124 integer :: randomseed 125 integer :: strcpling ! Print the 3rd order in xml file 126 integer :: prtsrlr ! print the short-range/long-range decomposition of phonon freq. 127 integer :: rfmeth 128 integer :: restartxf 129 integer :: symdynmat 130 integer :: test_effpot 131 integer :: test_prt_ph 132 integer :: dipdip_range(3) 133 integer :: fit_grid(3) 134 integer :: fit_rangePower(2) 135 integer :: bound_rangePower(2) 136 integer :: bound_cell(3) 137 integer :: ncell(3) 138 integer :: ncellmat(3,3) 139 integer :: ngqpt(9) ! ngqpt(9) instead of ngqpt(3) is needed in wght9.f 140 integer :: ng2qpt(3) 141 integer :: kptrlatt(3,3) 142 integer :: kptrlatt_fine(3,3) 143 integer :: qrefine(3) 144 logical :: prt_GF_csv 145 146 ! parameter for lattice 147 integer :: latt_var_temperature 148 integer :: latt_temperature_nstep 149 150 ! parameter for hybrid lattice_lwf 151 integer :: latt_lwf_anharmonic 152 153 154 ! parameters for lwf 155 integer :: lwf_constraint 156 integer :: lwf_dynamics 157 integer :: lwf_init_state 158 integer :: lwf_ntime 159 integer :: lwf_nctime 160 !integer :: lwf_self_bound_order 161 integer :: lwf_temperature_nstep ! var temperature number of steps 162 integer :: lwf_var_temperature 163 164 ! parameters for spin 165 ! integer :: spin_calc_traj_obs 166 integer :: spin_calc_thermo_obs 167 !integer :: spin_calc_correlation_obs 168 integer :: spin_dipdip 169 integer :: spin_dynamics 170 integer :: spin_init_state 171 integer :: spin_nctime 172 integer :: spin_ntime_pre 173 integer :: spin_ntime 174 ! integer :: spin_nmatom !TODO hexu: is it needed? 175 ! integer :: spin_n1l 176 ! integer :: spin_n2l 177 integer :: spin_sia_add 178 integer :: spin_temperature_nstep ! var temperature number of steps 179 integer :: spin_var_temperature 180 integer :: spin_write_traj 181 182 ! parameters for spin-lattice coupling 183 integer :: slc_coupling 184 185 ! Real(dp) 186 real(dp) :: bmass 187 real(dp) :: conf_power_fact_disp 188 real(dp) :: conf_power_fact_strain 189 real(dp) :: delta_df 190 real(dp) :: dyn_tolsym 191 real(dp) :: energy_reference 192 real(dp) :: bound_cutoff 193 real(dp) :: bound_Temp 194 real(dp) :: fit_cutoff 195 real(dp) :: fit_tolMSDF 196 real(dp) :: fit_tolMSDS 197 real(dp) :: fit_tolMSDE 198 real(dp) :: fit_tolMSDFS 199 real(dp) :: fit_tolGF 200 real(dp) :: strprecon 201 real(dp) :: strfact 202 real(dp) :: temperature 203 real(dp) :: rifcsph 204 real(dp) :: conf 205 real(dp) :: tolmxf 206 real(dp) :: acell(3) 207 real(dp) :: fit_factors(3) 208 real(dp) :: opt_factors(3) 209 real(dp) :: bound_factors(3) 210 real(dp) :: bound_penalty 211 real(dp) :: strten_reference(6) 212 real(dp) :: strtarget(6) 213 real(dp) :: conf_cutoff_strain(6) 214 real(dp) :: rprim(3,3) 215 216 ! lattice (new) related 217 real(dp) :: latt_friction ! langevin dynamics friction 218 real(dp) :: latt_taut ! Berendsen taut 219 !real(dp) :: latt_taup ! 220 !real(dp) :: latt_compressibility 221 !integer :: latt_mask(3) 222 real(dp) :: latt_temperature_start 223 real(dp) :: latt_temperature_end 224 225 ! lwf related 226 real(dp) :: lwf_dt 227 real(dp) :: lwf_mc_avg_amp 228 real(dp) :: lwf_taut 229 real(dp) :: lwf_temperature 230 !real(dp) :: lwf_self_bound_coeff 231 real(dp) :: lwf_temperature_start ! var temperature start 232 real(dp) :: lwf_temperature_end ! var temperature end 233 234 ! parameters for spin 235 real(dp) :: spin_dt 236 real(dp) :: spin_damping 237 real(dp) :: spin_sia_k1amp 238 real(dp) :: spin_temperature 239 ! TODO hexu: add spin convergence tol. (or remove it) 240 real(dp) :: spin_temperature_start ! var temperature start 241 real(dp) :: spin_temperature_end ! var temperature end 242 !real(dp) :: spin_tolavg !average 243 !real(dp) :: spin_tolvar !covariance 244 245 real(dp) :: spin_mag_field(3) ! external magnetic field 246 real(dp) :: spin_projection_qpoint(3) ! qpoint to check if spin configuration is random 247 real(dp) :: spin_sia_k1dir(3) 248 real(dp) :: spin_init_qpoint(3) ! qpoint to specify initial spin configuration 249 real(dp) :: spin_init_rotate_axis(3) ! rotation axis to specify initial spin configuration 250 real(dp) :: spin_init_orientation(3) ! spin orientation in primitive cell which is then rotated 251 252 ! Integer arrays 253 integer, allocatable :: atifc(:) 254 ! atifc(natom) 255 integer, allocatable :: fit_fixcoeff(:) 256 ! fit_fixcoeffs(fit_nfixcoeff) 257 integer, allocatable :: fit_imposecoeff(:) 258 ! fit_fixcoeffs(fit_nimposecoeff) 259 260 integer, allocatable :: fit_bancoeff(:) 261 ! fit_bancoeffs(fit_nbancoeff) 262 263 integer, allocatable :: iatfix(:,:) 264 ! iatfix(3,natom) atom fix contraints for Broyden 265 266 integer, allocatable :: opt_coeff(:) 267 ! opt_coeff(opt_ncoeff) 268 269 !integer, allocatable :: spin_sublattice(:) ! TODO hexu: difficult to use, better in xml? 270 271 ! Logical array 272 logical :: fit_on(3) 273 ! fit_on(1) == TRUE, fit on energy, fit_on(2,3)=TRUE fit on forces stresses, fit_on(1,2,3)=TRUE fit on EFS 274 275 logical :: sel_on(3) 276 ! sel_on(1) == TRUE, select on energy, sel_on(2,3)=TRUE select on forces stresses, sel_on(1,2,3)=TRUE select on EFS 277 278 logical :: opt_on(3) 279 ! opt_on(1) == TRUE, optimize on energy, sel_on(2,3)=TRUE optimize on forces stresses, opt_on(1,2,3)=TRUE optimize on EFS 280 281 real(dp), allocatable :: qmass(:) 282 ! qmass(nnos) 283 284 285 286 ! Real arrays 287 real(dp), allocatable :: coefficients(:) 288 ! coefficients(ncoeff) 289 290 real(dp), allocatable :: conf_cutoff_disp(:) 291 ! conf_cuttoff(natom) 292 293 real(dp),allocatable :: q1shft(:,:) 294 !q1shft(3,nqshft) SHIFT for Q point 295 296 real(dp), allocatable :: qnrml1(:) 297 ! qnrml1(nph1l) 298 299 real(dp), allocatable :: qnrml2(:) 300 ! qnrml1(nph1l) 301 302 real(dp), allocatable :: qph1l(:,:) 303 ! qph1l(3,nph1l) 304 305 real(dp), allocatable :: qph2l(:,:) 306 ! qph2l(3,nph2l) 307 308 !MS all variables for scale-up are put into their one type 309 type(scup_dtset_type) :: scup_dtset 310 311 ! spin part 312 !real(dp), allocatable :: gilbert_damping ! if not provided in xml or override is needed. 313 !real(dp), allocatable :: gyro_ratio(:) ! if not provided in xml 314 315 !real(dp), allocatable :: qspin1l(:,:) 316 !real(dp), allocatable :: qspin2l(:,:) 317 ! characters 318 character(len=fnlen) :: latt_init_hist_fname 319 character(len=fnlen) :: latt_pot_fname 320 character(len=fnlen) :: latt_harm_pot_fname 321 character(len=fnlen) :: latt_anharm_pot_fname 322 character(len=fnlen) :: latt_training_set_fname 323 character(len=fnlen) :: latt_test_set_fname 324 character(len=fnlen) :: latt_ddb_fnames(12) 325 326 character(len=fnlen) :: lwf_init_hist_fname 327 character(len=fnlen) :: lwf_pot_fname 328 329 character(len=fnlen) :: outdata_prefix 330 331 character(len=fnlen) :: spin_pot_fname 332 character(len=fnlen) :: spin_init_hist_fname 333 334 character(len=fnlen) :: slc_pot_fname 335 336 end type multibinit_dtset_type
m_multibinit_dataset/outvars_multibinit [ Functions ]
[ Top ] [ m_multibinit_dataset ] [ Functions ]
NAME
outvars_multibinit
FUNCTION
Takes as an input the input dtset for multibinit and echoes it to the output
INPUTS
multibinit_dtset <type(multibinit_dtset_type)> datatype with all the input variables nunit=unit number for input or output
OUTPUT
(only writing)
NOTES
Should be executed by one processor only.
SOURCE
3341 subroutine outvars_multibinit (multibinit_dtset,nunit) 3342 3343 !Arguments ------------------------------- 3344 !scalars 3345 integer,intent(in) :: nunit 3346 type(multibinit_dtset_type),intent(in) :: multibinit_dtset 3347 3348 !Local variables ------------------------- 3349 !Set routine version number here: 3350 !scalars 3351 integer :: ii,iph1,iph2,iqshft,natfix 3352 3353 !********************************************************************* 3354 3355 !Write the heading 3356 write(nunit,'(a,80a,a)') ch10,('=',ii=1,80),ch10 3357 write(nunit, '(a,a)' )& 3358 & ' -outvars_multibinit: echo values of input variables ----------------------',ch10 3359 3360 !The flags 3361 if(multibinit_dtset%ifcflag/=0)then 3362 write(nunit,'(a)')' Flags : ' 3363 if(multibinit_dtset%ifcflag/=0)write(nunit,'(3x,a9,3i10)')' ifcflag',multibinit_dtset%ifcflag 3364 if(multibinit_dtset%prt_model/=0)write(nunit,'(3x,a9,3i10)')'prt_model',multibinit_dtset%prt_model 3365 if(multibinit_dtset%prt_phfrq/=0)write(nunit,'(3x,a9,3i10)')'prt_phfrq',multibinit_dtset%prt_phfrq 3366 if(multibinit_dtset%strcpling/=0)write(nunit,'(3x,a9,3i10)')' strcpling',multibinit_dtset%strcpling 3367 if(multibinit_dtset%strcpling==2)write(nunit,'(3x,a9,3es8.2)')'delta_df',multibinit_dtset%delta_df 3368 end if 3369 3370 if(multibinit_dtset%dynamics/=0)then 3371 write(nunit,'(a)')' Molecular Dynamics :' 3372 write(nunit,'(3x,a9,3I10.1)')' dynamics',multibinit_dtset%dynamics 3373 write(nunit,'(3x,a9,3I10.1)')' dyn_chksym',multibinit_dtset%dyn_chksym 3374 write(nunit,'(3x,a9,3F10.1)')' temp',multibinit_dtset%temperature 3375 write(nunit,'(3x,a9,3I10.1)')' ntime',multibinit_dtset%ntime 3376 if (multibinit_dtset%nctime /=1)then 3377 write(nunit,'(3x,a9,3I10.1)')' nctime',multibinit_dtset%nctime 3378 end if 3379 write(nunit,'(3x,a9,3i10)') ' ncell',multibinit_dtset%ncell 3380 write(nunit,'(3x,a9,3i10)') ' dtion',multibinit_dtset%dtion 3381 if (multibinit_dtset%restartxf/=0) then 3382 write(nunit,'(3x,a9,3i10)') 'restartxf',multibinit_dtset%restartxf 3383 end if 3384 if(multibinit_dtset%dynamics==13)then 3385 write(nunit,'(3x,a9,3i10)')' optcell',multibinit_dtset%optcell 3386 write(nunit,'(3x,a9,3F12.1)')' bmass',multibinit_dtset%bmass 3387 write(nunit,'(3x,a9,3I10)')' nnos',multibinit_dtset%nnos 3388 write(nunit,'(3x,a12)',advance='no')' qmass ' 3389 write(nunit,'(3x,15F12.10)') (multibinit_dtset%qmass(ii),ii=1,multibinit_dtset%nnos) 3390 end if 3391 3392 if(any(multibinit_dtset%iatfix /= 0))then 3393 natfix = 0 3394 do ii=1,size(multibinit_dtset%iatfix,2) 3395 if(any(multibinit_dtset%iatfix(:,ii) /= 0))then 3396 natfix = natfix + 1 3397 endif 3398 enddo 3399 write(nunit,'(3x,a9,3I10)')' natfix', natfix 3400 endif 3401 3402 if(multibinit_dtset%dynamics==101)then 3403 end if 3404 3405 if(multibinit_dtset%dynamics==102)then 3406 write(nunit,'(a15,ES15.5)')'latt_friction',multibinit_dtset%latt_friction 3407 end if 3408 3409 if(multibinit_dtset%dynamics==103)then 3410 write(nunit,'(a15,ES15.5)')' latt_taut',multibinit_dtset%latt_taut 3411 end if 3412 3413 if(multibinit_dtset%dynamics==104)then 3414 write(nunit,'(a15,ES15.5)')' latt_taut',multibinit_dtset%latt_taut 3415 ! write(nunit,'(a15,ES15.5)')' latt_taup',multibinit_dtset%latt_taup 3416 ! write(nunit,'(a15,ES15.5)')'compressibility',multibinit_dtset%latt_compressibility 3417 end if 3418 3419 if(multibinit_dtset%dynamics==105)then 3420 write(nunit,'(a15,ES15.5)')' latt_taut',multibinit_dtset%latt_taut 3421 ! write(nunit,'(a15,ES15.5)')' latt_taup',multibinit_dtset%latt_taup 3422 ! write(nunit,'(a15,ES15.5)')'compressibility',multibinit_dtset%latt_compressibility 3423 ! write(nunit,'(a15,ES15.5)')' latt_mask',(multibinit_dtset%latt_mask(ii), ii=1, 3) 3424 end if 3425 end if 3426 3427 if(multibinit_dtset%lwf_dynamics/=0) then 3428 write(nunit,'(a)')' LWF Dynamics :' 3429 write(nunit,'(12x,a16,I12.1)')'lwf_dynamics',multibinit_dtset%lwf_dynamics 3430 write(nunit, '(13x, a15, I12.1)') 'lwf_init_state', multibinit_dtset%lwf_init_state 3431 write(nunit,'(10x, a18, 5x, F10.5)')'lwf_temperature',multibinit_dtset%lwf_temperature 3432 write(nunit,'(13x,a15,ES15.5, a8)') 'lwf_dt',multibinit_dtset%lwf_dt*Time_Sec , ' second' !TODO: use a.u. 3433 write(nunit,'(13x,a15,I10.1)')'lwf_ntime',multibinit_dtset%lwf_ntime 3434 write(nunit,'(13x,a15,I10.1)')'lwf_nctime',multibinit_dtset%lwf_nctime 3435 !write(nunit,'(8x,a20,I10.1)')'lwf_self_bound_order',multibinit_dtset%lwf_self_bound_order 3436 !write(nunit,'(8x,a20,F10.5)')'lwf_self_bound_coeff',multibinit_dtset%lwf_self_bound_coeff 3437 write(nunit, '(6x, a22, I12.1)') 'lwf_var_temperature', multibinit_dtset%lwf_var_temperature 3438 write(nunit, '(6x, a22, 5x, F10.5)') 'lwf_temperature_start', multibinit_dtset%lwf_temperature_start 3439 write(nunit, '(6x, a22, 5x, F10.5)') 'lwf_temperature_end', multibinit_dtset%lwf_temperature_end 3440 write(nunit, '(5x, a23, I12.1)') 'lwf_temperature_nstep', multibinit_dtset%lwf_temperature_nstep 3441 3442 if(multibinit_dtset%lwf_dynamics==1) then 3443 write(nunit,'(20x,a8,ES15.5, a8)') 'lwf_taut',multibinit_dtset%lwf_dt*Time_Sec , ' second' !TODO: use a.u. 3444 else if(multibinit_dtset%lwf_dynamics==3) then 3445 write(nunit,'(10x, a18, 5x, F10.5)')'lwf_mc_avg_amp',multibinit_dtset%lwf_mc_avg_amp 3446 end if 3447 end if 3448 3449 if(multibinit_dtset%spin_dynamics/=0) then 3450 write(nunit,'(a)')' Spin Dynamics :' 3451 3452 !write(nunit,'(3x,a25,I12.1)')'spin_calc_correlation_obs',multibinit_dtset%spin_calc_correlation_obs 3453 write(nunit,'(3x,a25,I12.1)')'spin_calc_thermo_obs',multibinit_dtset%spin_calc_thermo_obs 3454 !write(nunit,'(3x,a25,I12.1)')'spin_calc_traj_obs',multibinit_dtset%spin_calc_traj_obs 3455 write(nunit,'(12x,a16,I12.1)')'spin_dynamics',multibinit_dtset%spin_dynamics 3456 write(nunit,'(10x, a18, 5x, F10.5)')'spin_temperature',multibinit_dtset%spin_temperature 3457 write(nunit,'(10x, a18, 5x, F10.5)')'spin_damping',multibinit_dtset%spin_damping 3458 write(nunit,'(9x,a19,I10.1)')'spin_ntime_pre',multibinit_dtset%spin_ntime_pre 3459 write(nunit,'(13x,a15,I10.1)')'spin_ntime',multibinit_dtset%spin_ntime 3460 write(nunit,'(13x,a15,3I10)') 'ncell',multibinit_dtset%ncell !TODO hexu: duplicate but dynamics can be 0. 3461 write(nunit,'(13x,a15,ES15.5, a8)') 'spin_dt',multibinit_dtset%spin_dt*Time_Sec , ' second' !TODO: use a.u. 3462 !write(nunit,'(3x,a14,3es10.5)') ' spin_tolavg',multibinit_dtset%spin_tolavg 3463 !write(nunit,'(3x,a14,3es10.5)') ' spin_tolvar',multibinit_dtset%spin_tolvar 3464 write(nunit,'(13x,a15,3ES15.5,a8)') 'spin_mag_field', (multibinit_dtset%spin_mag_field(ii)/Bfield_Tesla,ii=1,3), ' Tesla' 3465 write(nunit, '(13x, a15, I12.1)') 'spin_sia_add', multibinit_dtset%spin_sia_add 3466 write(nunit, '(13x, a15, ES15.5)') 'spin_sia_k1amp', multibinit_dtset%spin_sia_k1amp 3467 write(nunit, '(13x, a15, 3ES15.5)') 'spin_sia_k1dir', (multibinit_dtset%spin_sia_k1dir(ii), ii=1,3) 3468 write(nunit,'(5x,a23, 3es15.5)') 'spin_projection_qpoint', (multibinit_dtset%spin_projection_qpoint(ii),ii=1,3) 3469 write(nunit, '(13x, a15, I12.1)') 'spin_init_state', multibinit_dtset%spin_init_state 3470 if(multibinit_dtset%spin_init_state==3) then 3471 write(nunit,'(6x,a22, 3es15.5)') 'spin_init_orientation', (multibinit_dtset%spin_init_orientation(ii),ii=1,3) 3472 write(nunit,'(11x,a17, 3es15.5)') 'spin_init_qpoint', (multibinit_dtset%spin_init_qpoint(ii),ii=1,3) 3473 write(nunit,'(6x,a22,3es15.5)') 'spin_init_rotate_axis', (multibinit_dtset%spin_init_rotate_axis(ii),ii=1,3) 3474 endif 3475 write(nunit, '(6x, a22, I12.1)') 'spin_var_temperature', multibinit_dtset%spin_var_temperature 3476 write(nunit, '(6x, a22, 5x, F10.5)') 'spin_temperature_start', multibinit_dtset%spin_temperature_start 3477 write(nunit, '(6x, a22, 5x, F10.5)') 'spin_temperature_end', multibinit_dtset%spin_temperature_end 3478 write(nunit, '(5x, a23, I12.1)') 'spin_temperature_nstep', multibinit_dtset%spin_temperature_nstep 3479 write(nunit, '(13x, a15, I12.1)') 'spin_write_traj', multibinit_dtset%spin_write_traj 3480 end if 3481 3482 if(multibinit_dtset%slc_coupling/=0) then 3483 write(nunit,'(6x, a22, I12.4)') 'spin-lattice coupling', multibinit_dtset%slc_coupling 3484 endif 3485 3486 if(multibinit_dtset%confinement==1)then 3487 write(nunit,'(a)')' Confinement information :' 3488 write(nunit,'(1x,a22,I5.1)')' conf_power_disp',multibinit_dtset%conf_power_disp 3489 write(nunit,'(1x,a22,I5.1)')' conf_power_strain',multibinit_dtset%conf_power_strain 3490 write(nunit,'(1x,a22,3es16.8)')' conf_power_fact_disp',multibinit_dtset%conf_power_fact_disp 3491 write(nunit,'(1x,a22,3es16.8)')'conf_power_fact_strain',multibinit_dtset%conf_power_fact_strain 3492 write(nunit,'(1x,a22)')' conf_cutoff_disp' 3493 write(nunit,'(19x,3es16.8)') (multibinit_dtset%conf_cutoff_disp(ii),ii=1,multibinit_dtset%natom) 3494 write(nunit,'(1x,a22)')' conf_cutoff_strain' 3495 write(nunit,'(19x,3es16.8)') (multibinit_dtset%conf_cutoff_strain(ii),ii=1,6) 3496 end if 3497 3498 if(multibinit_dtset%fit_coeff/=0)then 3499 write(nunit,'(a)')' Fit the coefficients :' 3500 write(nunit,'(1x,a17,I3.1)')' fit_coeff',multibinit_dtset%fit_coeff 3501 write(nunit,'(1x,a17,I3.1)')'fit_generateCoeff',multibinit_dtset%fit_generateCoeff 3502 if(multibinit_dtset%fit_initializeData==0)then 3503 write(nunit,'(1x,a17,I3.1)')'fit_initializeData',multibinit_dtset%fit_initializeData 3504 end if 3505 if(multibinit_dtset%fit_tolMSDE > 0)then 3506 write(nunit,'(1x,a17,es16.8)')' fit_tolMSDE',multibinit_dtset%fit_tolMSDE 3507 end if 3508 if(multibinit_dtset%fit_tolMSDF > 0)then 3509 write(nunit,'(1x,a17,es16.8)')' fit_tolMSDF',multibinit_dtset%fit_tolMSDF 3510 end if 3511 if(multibinit_dtset%fit_tolMSDS > 0)then 3512 write(nunit,'(1x,a17,es16.8)')' fit_tolMSDS',multibinit_dtset%fit_tolMSDS 3513 end if 3514 if(multibinit_dtset%fit_tolMSDFS > 0)then 3515 write(nunit,'(1x,a17,es16.8)')' fit_tolMSDFS',multibinit_dtset%fit_tolMSDFS 3516 end if 3517 write(nunit,'(1x,a17,es16.8)')' fit_cutoff',multibinit_dtset%fit_cutoff 3518 write(nunit,'(1x,a17,I3.1)')' fit_option',multibinit_dtset%fit_option 3519 write(nunit,'(1x,a17,2x,I0)')' fit_iatom',multibinit_dtset%fit_iatom 3520 write(nunit,'(1x,a17,2x,I0)')' fit_ncoeff',multibinit_dtset%fit_ncoeff 3521 write(nunit,'(1x,a17,3i3)') ' fit_grid',multibinit_dtset%fit_grid 3522 write(nunit,'(1x,a17,I3.1)')' ts_option',multibinit_dtset%ts_option 3523 write(nunit,'(1x,a17,2i3)') ' fit_rangePower',multibinit_dtset%fit_rangePower 3524 write(nunit,'(1x,a17,I3)') ' fit_dispterms',multibinit_dtset%fit_dispterms 3525 write(nunit,'(1x,a17,I3)') ' fit_anhaStrain',multibinit_dtset%fit_anhaStrain 3526 write(nunit,'(1x,a17,I3)') ' fit_SPCoupling',multibinit_dtset%fit_SPCoupling 3527 write(nunit,'(1x,a17,I3)') ' fit_SPC_maxS',multibinit_dtset%fit_SPC_maxS 3528 if(multibinit_dtset%fit_nbancoeff /= 0) then 3529 write(nunit,'(1x,a17,I3)') ' fit_nbancoeff',multibinit_dtset%fit_nbancoeff 3530 write(nunit,'(1x,a17)',advance='no')' fit_bancoeff' 3531 write(nunit,'(4x,9i7)') (multibinit_dtset%fit_bancoeff(ii),ii=1,multibinit_dtset%fit_nbancoeff) 3532 end if 3533 if(multibinit_dtset%fit_nfixcoeff /= 0) then 3534 write(nunit,'(1x,a17,I3)') ' fit_nfixcoeff',multibinit_dtset%fit_nfixcoeff 3535 write(nunit,'(1x,a17)',advance='no')' fit_fixcoeff' 3536 write(nunit,'(4x,9i7)') (multibinit_dtset%fit_fixcoeff(ii),ii=1,multibinit_dtset%fit_nfixcoeff) 3537 end if 3538 if(multibinit_dtset%fit_nimposecoeff /= 0) then 3539 write(nunit,'(1x,a17,I3)') ' fit_nimposecoeff',multibinit_dtset%fit_nimposecoeff 3540 write(nunit,'(1x,a17)',advance='no')' fit_imposecoeff' 3541 write(nunit,'(4x,9i7)') (multibinit_dtset%fit_imposecoeff(ii),ii=1,multibinit_dtset%fit_nimposecoeff) 3542 end if 3543 end if 3544 3545 if(multibinit_dtset%opt_effpot/=0)then 3546 write(nunit,'(a)')'Optimize Effective Potential :' 3547 if(multibinit_dtset%opt_ncoeff /= 0) then 3548 write(nunit,'(1x,a17,I3)') ' opt_ncoeff',multibinit_dtset%opt_ncoeff 3549 write(nunit,'(1x,a17)',advance='no')' opt_coeff' 3550 write(nunit,'(4x,9i7)') (multibinit_dtset%opt_coeff(ii),ii=1,multibinit_dtset%opt_ncoeff) 3551 end if 3552 end if 3553 3554 if(multibinit_dtset%bound_model /=0)then 3555 write(nunit,'(a)')' Bound the coefficients :' 3556 write(nunit,'(1x,a16,I3.1)') ' bound_model',multibinit_dtset%bound_model 3557 write(nunit,'(1x,a16,es12.4)') ' bound_penalty',multibinit_dtset%bound_penalty 3558 write(nunit,'(1x,a16,I3)') 'bound_anhaStrain',multibinit_dtset%bound_anhaStrain 3559 write(nunit,'(1x,a16,I3)') 'bound_SPCoupling',multibinit_dtset%bound_SPCoupling 3560 write(nunit,'(1x,a16,es16.8)')' bound_cutoff',multibinit_dtset%bound_cutoff 3561 write(nunit,'(1x,a16,1x,3I3)') ' bound_cell',multibinit_dtset%bound_cell 3562 write(nunit,'(1x,a16,1x,I3)') ' bound_maxCoeff',multibinit_dtset%bound_maxCoeff 3563 write(nunit,'(1x,a16,es16.8)') ' bound_temp',multibinit_dtset%bound_temp 3564 write(nunit,'(1x,a16,I7)') ' bound_step',multibinit_dtset%bound_step 3565 write(nunit,'(1x,a16,2I3.1)')'bound_rangePower',multibinit_dtset%bound_rangePower 3566 end if 3567 3568 !MS Variables for SCALE-UP 3569 !Replace by function from m_scup_dataset.F90 3570 if(multibinit_dtset%scup_dtset%scup_elec_model)then 3571 call outvars_scup(multibinit_dtset%scup_dtset,nunit) 3572 end if 3573 3574 !Write the general information 3575 if( multibinit_dtset%rfmeth/=1 .or. & 3576 & multibinit_dtset%enunit/=0 .or. & 3577 & multibinit_dtset%eivec/=0 .or. & 3578 & multibinit_dtset%asr/=0 .or. & 3579 & multibinit_dtset%chneut/=0)then 3580 write(nunit,'(a)')' Miscellaneous information :' 3581 if(multibinit_dtset%rfmeth/=1)write(nunit,'(3x,a9,3i10)')' rfmeth',multibinit_dtset%rfmeth 3582 if(multibinit_dtset%enunit/=0)write(nunit,'(3x,a9,3i10)')' enunit',multibinit_dtset%enunit 3583 if(multibinit_dtset%eivec/=0) write(nunit,'(3x,a9,3i10)')' eivec',multibinit_dtset%eivec 3584 if(multibinit_dtset%asr/=0) write(nunit,'(3x,a9,3i10)')' asr',multibinit_dtset%asr 3585 if(multibinit_dtset%chneut/=0)write(nunit,'(3x,a9,3i10)')' chneut',multibinit_dtset%chneut 3586 end if 3587 3588 3589 !For interatomic force constant information 3590 if(multibinit_dtset%ifcflag/=0)then 3591 write(nunit,'(a)')' Interatomic Force Constants Inputs :' 3592 write(nunit,'(3x,a9,3i10)')' dipdip',multibinit_dtset%dipdip 3593 if(multibinit_dtset%dipdip /= 0)then 3594 write(nunit,'(a12,3i10)') 'dipdip_range',multibinit_dtset%dipdip_range 3595 end if 3596 if(multibinit_dtset%dipdip_prt/=0)then 3597 write(nunit,'(a12,3i10)') 'dipdip_prt',multibinit_dtset%dipdip_prt 3598 end if 3599 if(multibinit_dtset%nsphere/=0)write(nunit,'(3x,a9,3i10)')' nsphere',multibinit_dtset%nsphere 3600 if(abs(multibinit_dtset%rifcsph)>tol10)write(nunit,'(3x,a9,E16.6)')' nsphere',multibinit_dtset%rifcsph 3601 write(nunit,'(3x,a9,3i10)')' ifcana',multibinit_dtset%ifcana 3602 write(nunit,'(3x,a9,3i10)')' ifcout',multibinit_dtset%ifcout 3603 if(multibinit_dtset%natifc>=1)then 3604 write(nunit,'(3x,a9,3i10)')' natifc',multibinit_dtset%natifc 3605 write(nunit,'(3x,a12)',advance='no')' atifc ' 3606 write(nunit,'(3x,15i4)') (multibinit_dtset%atifc(ii)*ii,ii=1,multibinit_dtset%natifc) 3607 3608 end if 3609 write(nunit,'(a)')' Description of grid 1 :' 3610 write(nunit,'(3x,a9,3i10)')' brav',multibinit_dtset%brav 3611 write(nunit,'(3x,a9,3i10)')' ngqpt',multibinit_dtset%ngqpt(1:3) 3612 write(nunit,'(3x,a9,3i10)')' nqshft',multibinit_dtset%nqshft 3613 if (multibinit_dtset%nqshft/=0)then 3614 write(nunit,'(3x,a9)')' q1shft' 3615 do iqshft=1,multibinit_dtset%nqshft 3616 write(nunit,'(19x,4es16.8)') (multibinit_dtset%q1shft(ii,iqshft),ii=1,3) 3617 end do 3618 end if 3619 if (any(multibinit_dtset%qrefine(:) > 1)) then 3620 write(nunit,'(3x,a9,3i10)')' qrefine', multibinit_dtset%qrefine 3621 end if 3622 end if 3623 3624 3625 !List of vector 1 (reduced coordinates) 3626 if(multibinit_dtset%nph1l/=0)then 3627 write(nunit,'(a)')' First list of wavevector (reduced coord.) :' 3628 write(nunit,'(3x,a9,3i10)')' nph1l',multibinit_dtset%nph1l 3629 write(nunit,'(3x,a9)')' qph1l' 3630 do iph1=1,multibinit_dtset%nph1l 3631 write(nunit,'(19x,3es16.8,2x,es11.3)') & 3632 & (multibinit_dtset%qph1l(ii,iph1),ii=1,3),multibinit_dtset%qnrml1(iph1) 3633 end do 3634 end if 3635 3636 !List of vector 2 (cartesian coordinates) 3637 if(multibinit_dtset%nph2l/=0)then 3638 write(nunit,'(a)')' Second list of wavevector (cart. coord.) :' 3639 write(nunit,'(3x,a9,3i10)')' nph2l',multibinit_dtset%nph2l 3640 write(nunit,'(3x,a9)')' qph2l' 3641 do iph2=1,multibinit_dtset%nph2l 3642 write(nunit,'(19x,3es16.8,2x,es11.3)') & 3643 & (multibinit_dtset%qph2l(ii,iph2),ii=1,3),multibinit_dtset%qnrml2(iph2) 3644 end do 3645 end if 3646 3647 write(nunit,'(a,80a,a)') ch10,('=',ii=1,80),ch10 3648 3649 end subroutine outvars_multibinit