Get code working with gfortran

This commit is contained in:
Alex Selimov 2020-10-24 09:53:58 -04:00
parent 3e140df1a9
commit 51079148cc
4 changed files with 69 additions and 57 deletions

View File

@ -1,6 +1,7 @@
FC=ifort FC=gfortran
FFLAGS=-mcmodel=large -g -O0 -stand f08 -fpe0 -traceback -check bounds,uninit -warn all -implicitnone -no-wrap-margin -heap-arrays #FFLAGS=-mcmodel=large -g -O0 -stand f08 -fpe0 -traceback -check bounds,uninit -warn all -implicitnone -no-wrap-margin -heap-arrays
#FFLAGS=-mcmodel=large -Ofast -no-wrap-margin -heap-arrays #FFLAGS=-mcmodel=large -Ofast -no-wrap-margin -heap-arrays
FFLAGS=-mcmodel=large -O3 -g
MODES=mode_create.o mode_merge.o mode_convert.o MODES=mode_create.o mode_merge.o mode_convert.o
OPTIONS=opt_disl.o opt_group.o opt_orient.o opt_delete.o opt_deform.o opt_redef_box.o OPTIONS=opt_disl.o opt_group.o opt_orient.o opt_delete.o opt_deform.o opt_redef_box.o
OBJECTS=main.o elements.o io.o subroutines.o functions.o atoms.o call_mode.o box.o $(MODES) $(OPTIONS) call_option.o sorts.o OBJECTS=main.o elements.o io.o subroutines.o functions.o atoms.o call_mode.o box.o $(MODES) $(OPTIONS) call_option.o sorts.o

View File

@ -198,64 +198,74 @@ module elements
!The default size we grow the !The default size we grow the
buffer_size = 1024 buffer_size = 1024
!Figure out the size of the atom and element arrays
ele_size = size(size_ele) !First check to make sure if it is allocated
atom_size = size(type_atom) if (allocated(size_ele)) then
!Figure out the size of the atom and element arrays
ele_size = size(size_ele)
!Check if we need to grow the ele_size, if so grow all the variables !Check if we need to grow the ele_size, if so grow all the variables
if ( n+ele_num > size(size_ele)) then if ( n+ele_num > size(size_ele)) then
allocate(temp_int(n+ele_num+buffer_size)) allocate(temp_int(n+ele_num+buffer_size))
temp_int(1:ele_size) = lat_ele temp_int(1:ele_size) = lat_ele
temp_int(ele_size+1:) = 0 temp_int(ele_size+1:) = 0
call move_alloc(temp_int, lat_ele) call move_alloc(temp_int, lat_ele)
allocate(temp_int(n+ele_num+buffer_size)) allocate(temp_int(n+ele_num+buffer_size))
temp_int(1:ele_size) = tag_ele temp_int(1:ele_size) = tag_ele
temp_int(ele_size+1:) = 0 temp_int(ele_size+1:) = 0
call move_alloc(temp_int, tag_ele) call move_alloc(temp_int, tag_ele)
allocate(temp_int(n+ele_num+buffer_size)) allocate(temp_int(n+ele_num+buffer_size))
temp_int(1:ele_size) = size_ele temp_int(1:ele_size) = size_ele
temp_int(ele_size+1:) = 0 temp_int(ele_size+1:) = 0
call move_alloc(temp_int, size_ele) call move_alloc(temp_int, size_ele)
allocate(temp_int(n+ele_num+buffer_size)) allocate(temp_int(n+ele_num+buffer_size))
temp_int(1:ele_size) = lat_ele temp_int(1:ele_size) = lat_ele
temp_int(ele_size+1:) = 0 temp_int(ele_size+1:) = 0
call move_alloc(temp_int, sbox_ele) call move_alloc(temp_int, sbox_ele)
allocate(char_temp(n+ele_num+buffer_size)) allocate(char_temp(n+ele_num+buffer_size))
char_temp(1:ele_size) = type_ele char_temp(1:ele_size) = type_ele
call move_alloc(char_temp, type_ele) call move_alloc(char_temp, type_ele)
allocate(temp_ele_real(3, max_basisnum, max_ng_node, n+ele_num+buffer_size)) allocate(temp_ele_real(3, max_basisnum, max_ng_node, n+ele_num+buffer_size))
temp_ele_real(:,:,:,1:ele_size) = r_node temp_ele_real(:,:,:,1:ele_size) = r_node
temp_ele_real(:,:,:,ele_size+1:) = 0.0_dp temp_ele_real(:,:,:,ele_size+1:) = 0.0_dp
call move_alloc(temp_ele_real, r_node) call move_alloc(temp_ele_real, r_node)
end if
else
call alloc_ele_arrays(n,0)
end if end if
!Now grow atom arrays if needed !Now grow atom arrays if needed
if (m+atom_num > atom_size) then if (allocated(type_atom)) then
allocate(temp_int(m+atom_num+buffer_size)) atom_size = size(type_atom)
temp_int(1:atom_size) = type_atom if (m+atom_num > atom_size) then
temp_int(atom_size+1:) = 0 allocate(temp_int(m+atom_num+buffer_size))
call move_alloc(temp_int, type_atom) temp_int(1:atom_size) = type_atom
temp_int(atom_size+1:) = 0
call move_alloc(temp_int, type_atom)
allocate(temp_int(m+atom_num+buffer_size)) allocate(temp_int(m+atom_num+buffer_size))
temp_int(1:atom_size) = tag_atom temp_int(1:atom_size) = tag_atom
temp_int(atom_size+1:) = 0 temp_int(atom_size+1:) = 0
call move_alloc(temp_int, tag_atom) call move_alloc(temp_int, tag_atom)
allocate(temp_int(m+atom_num+buffer_size)) allocate(temp_int(m+atom_num+buffer_size))
temp_int(1:atom_size) = sbox_atom temp_int(1:atom_size) = sbox_atom
temp_int(atom_size+1:) = 0 temp_int(atom_size+1:) = 0
call move_alloc(temp_int, sbox_atom) call move_alloc(temp_int, sbox_atom)
allocate(temp_real(3,m+atom_num+buffer_size)) allocate(temp_real(3,m+atom_num+buffer_size))
temp_real(:,1:atom_size) = r_atom temp_real(:,1:atom_size) = r_atom
temp_real(:, atom_size+1:) = 0.0_dp temp_real(:, atom_size+1:) = 0.0_dp
call move_alloc(temp_real, r_atom) call move_alloc(temp_real, r_atom)
end if
else
call alloc_ele_arrays(0,m)
end if end if
end subroutine end subroutine
@ -669,17 +679,17 @@ module elements
esize = size_ele(ie) esize = size_ele(ie)
select case(iface) select case(iface)
case(1) case(1)
pos = (/ real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp, -10.0_dp**-2.0_dp /) pos = (/ real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp, -10.0_dp**(-2.0_dp) /)
case(2) case(2)
pos = (/ real(esize-1,dp)/2.0_dp, -10.0_dp**-2.0_dp, real(esize-1,dp)/2.0_dp /) pos = (/ real(esize-1,dp)/2.0_dp, -10.0_dp**(-2.0_dp), real(esize-1,dp)/2.0_dp /)
case(3) case(3)
pos = (/ (esize-1)+10.0_dp**-2.0_dp, real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp /) pos = (/ (esize-1)+10.0_dp**(-2.0_dp), real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp /)
case(4) case(4)
pos = (/ real(esize-1,dp)/2.0_dp, (esize-1)+10.0_dp**-2.0_dp, real(esize-1,dp)/2.0_dp /) pos = (/ real(esize-1,dp)/2.0_dp, (esize-1)+10.0_dp**(-2.0_dp), real(esize-1,dp)/2.0_dp /)
case(5) case(5)
pos = (/ -10.0_dp**-2.0_dp, real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp /) pos = (/ -10.0_dp**(-2.0_dp), real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp /)
case(6) case(6)
pos = (/ real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp, (esize-1)+10.0_dp**-2.0_dp /) pos = (/ real(esize-1,dp)/2.0_dp, real(esize-1,dp)/2.0_dp, (esize-1)+10.0_dp**(-2.0_dp) /)
end select end select
!Now transform it to real space and adjust it to the position of the element in the first node. !Now transform it to real space and adjust it to the position of the element in the first node.

View File

@ -135,7 +135,7 @@ module mode_create
case('bcc') case('bcc')
call build_with_rhomb(box_lat_vert, bcc_mat) call build_with_rhomb(box_lat_vert, bcc_mat)
case default case default
print *, "Element type ", trim(adjustl(element_type)), " not accepted in mode create, please specify a supported ", & print *, "Element type ", trim(adjustl(element_type)), " not accepted in mode create, please specify a supported ",&
"element type" "element type"
stop 3 stop 3
end select end select

View File

@ -300,7 +300,7 @@ module opt_group
case('elements','element') case('elements','element')
if (group_ele_num > 0) then if (group_ele_num > 0) then
print *, "Elements specifier used more than once in group id command with type both, either use type ", & print *, "Elements specifier used more than once in group id command with type both, either use type ",&
"elements or include atoms identifier" "elements or include atoms identifier"
stop 3 stop 3
@ -824,7 +824,8 @@ module opt_group
!Add the element, for the sbox we just set it to the same sbox that we get the orientation !Add the element, for the sbox we just set it to the same sbox that we get the orientation
!from. In this case it is from the sbox of the first atom in the group. !from. In this case it is from the sbox of the first atom in the group.
new_ele = new_ele+1 new_ele = new_ele+1
call add_element(0,remesh_ele_type, working_esize, ilat, sbox_atom(atom_index(1)),r_new_node) call add_element(0,remesh_ele_type, working_esize, ilat, &
sbox_atom(atom_index(1)),r_new_node)
end if end if
end if end if