module mode_merge !This module contains the code needed for merging several .mb files together use parameters use atoms use io use subroutines use elements character(len=4) :: dim integer :: in_num public contains subroutine merge(arg_pos) integer, intent(out) :: arg_pos integer :: i real(kind=dp) :: displace(3), temp_box_bd(6) !First we parse the merge command call parse_command(arg_pos) !Now loop over all files and stack them do i = 1, in_num displace(:) = 0.0_dp if ((i==1).or.(trim(adjustl(dim)) == 'none')) then call read_in(i, displace, temp_box_bd) call grow_box(temp_box_bd) else select case(trim(adjustl(dim))) case('x') displace(1) = box_bd(2) case('y') displace(2) = box_bd(4) case('z') displace(3) = box_bd(6) end select call read_in(i, displace, temp_box_bd) call grow_box(temp_box_bd) end if end do return end subroutine merge subroutine parse_command(arg_pos) integer, intent(out) :: arg_pos character(len=100) :: textholder integer :: i, stat, arglen !Get dimension to concatenate along call get_command_argument(2, dim, arglen) if (arglen == 0) STOP "Missing dim in mode_merge command" select case(trim(adjustl(dim))) case('x','y','z','none') continue case default print *, dim, " not accepted as a dimension in mode_merge" stop 3 end select !Get number of files to read in call get_command_argument(3, textholder, arglen) if (arglen == 0) STOP "Number of files to read missing in mode_merge command" read(textholder, *, iostat = stat) in_num if (stat > 0) STOP "Error reading number of files in, must be integer" !Now loop and pull out all files do i = 1, in_num call get_command_argument(3+i, textholder, arglen) if (arglen == 0) STOP "Fewer files to read in then specified" !Make sure this file is readable call get_in_file(textholder) end do !Set argpos accordingly arg_pos = 3+in_num !Now options loop !Check for optional keywords do while(.true.) if(arg_pos > command_argument_count()) exit !Pull out the next argument which should either be a keyword or an option arg_pos=arg_pos+1 call get_command_argument(arg_pos, textholder) textholder=adjustl(textholder) !Choose what to based on what the option string is select case(trim(textholder)) case default !If it isn't an available option to mode merge then we just exit exit end select end do end subroutine parse_command end module mode_merge