Есть несколько проблем с вашей программой.
Во-первых, вы, вероятно, хотели написать:
f(i)=func(n,Nmax)
в основной программе.Без индекса вы присваиваете одно и то же значение каждому элементу массива.Вы можете подумать, что это объясняет результаты, но это не так, поскольку вы все равно видите, что ожидаете.
Другая проблема высвечивается следующим предупреждением, которое я получаю, когда компилирую ваш код с Intel Fortran:
t.f90(14): warning #6178: The return value of this FUNCTION has not been defined. [FUNC]
real*8 function func(x,Nmax)
-------------------^
Вы никогда не присваиваете значение func, поэтому вы получаете все, что происходит с мусором в регистре возврата.
Ваша функция не совсем то, что выхочу тоже.Вам, вероятно, нужен тот, который вычисляет и возвращает скалярное (одиночное) значение, и, следовательно, нет необходимости в массиве внутри func.
Третья проблема заключается в том, что func игнорирует аргумент n (который, в отличие от соглашения,вы объявили как реальное.)
Если вы хотите, чтобы в основной программе был цикл, сделайте так, чтобы функция вычислялась и возвращала единственный результат на основе переданного ей аргумента.Нет необходимости каждый раз передавать и индекс цикла, и nmax.Другие варианты, немного более продвинутые, заключаются в том, чтобы сохранить присваивание массива в основной программе, но покончить с циклом и заставить функцию вернуть массив или сделать функцию ELEMENTAL.Я оставлю это как упражнение для вас, как только вы поймете, что вы действительно намерены здесь.
Наконец, я бы не рекомендовал вам использовать нестандартный синтаксис, такой как "real * 8".Пожалуйста, ознакомьтесь со спецификаторами KIND и встроенной функцией SELECTED_REAL_KIND.