TABLE OF CONTENTS


ABINIT/m_multibinit_dataset [ Modules ]

[ Top ] [ Modules ]

NAME

  m_multibinit_dataset

FUNCTION

  module with the type for the input of multibinit (should be clean)

COPYRIGHT

  Copyright (C) 2014-2022 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