Die Schleife ist in der Tat nicht gültig. Der Compiler muss dies nicht erkennen und in diesem Fall den Grund melden.
in Fortran 2008 8.1.6.5 ('Beschränkungen auf DO CONCURRENT Konstrukte') haben wir als eine Einschränkung:
Eine Variable, die in einer Iteration referenziert wird entweder zuvor während dieser Iteration definiert werden oder müssen nicht definiert sein oder während irgendeiner anderen Iteration undefiniert werden. Eine Variable, die durch mehr als eine Iteration definiert wird oder nicht definiert wird, wird beim Beenden der Schleife undefiniert.
acc
ist solch eine Variable, die (die auf der linken Seite einer intrinsischen Zuordnungsanweisung) um mehr als eine Iteration (alle) definiert werden. Die Schleife ist also schlecht (und am Ende der Schleife ist das Konstrukt acc
undefiniert, so dass es ebenfalls ungeeignet ist, den Wert zu überprüfen).
Beachten Sie, dass der Compiler nicht * erforderlich * ist, um eine gleichzeitige Schleife zu vektorisieren oder zu parallelisieren; der gleichzeitige Teil garantiert dem Compiler nur, dass die Vektorisierung/Parallelisierung sicher ist (was in diesem Fall falsch ist). Bei vielen Compilern wird 'do concurrent' daher einfach durch eine normale' do'-Schleife ersetzt; Da Ihr Code die richtige Antwort gegeben hat, hat Ihr Compiler das wahrscheinlich getan. – jabirali