Я пытаюсь проверить, возвращают ли мои массивы чепуху, получая доступ к элементам за пределами, в фортране.И я хочу проверить, что эти значения меньше единицы, и если они есть, измените их на единицу.
Это часть моего кода, вызывающая проблемы:
lastNeighLabel=(/clusterLabel(jj-1,kk,ll), clusterLabel(jj,kk-1,ll), clusterLabel(jj,kk,ll-1)/)
LastNeighLabel содержитметка кластера (от 1 до n, где n - общее количество найденных уникальных отдельных кластеров) для последнего соседа в направлении x, y, z соответственно.
Когда jj
или kk
или ll
равны 1, они пытаются получить доступ к 0-му элементу в массиве, и когда FORTRAN
считает от 1 в массивах, он пытается уничтожить вселенную.В настоящее время я нахожусь в запутанном беспорядке около 8 операторов if / elseif, пытающихся закодировать для каждого случая.Но я надеялся, что есть способ воздействовать на каждый элемент.В общем, я бы хотел сказать where((/jj-1,kk-1,ll-1/).lt.1) do clusterLabel(jj-1,kk,ll)=0 etc
в зависимости от того, какой элемент вызывает проблему.
Но я не могу придумать, как это сделать, потому что где будут манипулировать только переменные, передаваемые ему, а недругой массив с тем же индексом.Или я не прав?
С удовольствием отредактирую, если это не имеет смысла.