2017-03-22 2 views
0

J'ai un code fortran où, entre autres choses, je mets des valeurs comme la température et appelle un sous-programme. Ce sous-programme me redonne une solution de rayonnement qui est ensuite utilisée pour de nouvelles itérations. Le problème est que ce sous-programme prend beaucoup de temps à traiter, donc je souhaite ne l'appeler qu'une fois tous les, par exemple, vingt itérations et garder la dernière solution pour le reste du programme jusque-là.Appelez une fonction/sous-routine seulement une fois toutes les X itérations dans Fortran

Existe-t-il un moyen viable de le faire?

+0

Mise en forme, enlever grâce – Hugo

Répondre

1

Il suffit de faire juste

n_iterations = 100000 
    nth = 20 

    do i = 1, n_iterations 
    if (mod(i, nth)==0) call my_subroutine 
    end do 

expression mod(i, nth)==0 est vrai que si i peut être divisé par nth zéro reste.

+0

Merci beaucoup. Une chose, je ne sais pas avec certitude combien d'itérations il faudra pour la convergence, puis-je mettre un nombre arbitraire comme 100000 indépendamment? Je devine juste ici que le nombre réel sera beaucoup plus bas. –

+0

Il existe différents types de boucles dans Fortran et de diverses manières comment les quitter. C'est totalement à vous. Ma réponse utilise simplement «i» comme un compteur. Vous pouvez avoir un compteur même dans une boucle 'do while', mais augmentez-le d'une unité à chaque itération. –

0

Une autre approche consiste à utiliser des boucles imbriquées:

 do i = 1,bignum 
     do j = i,20 
      code to be repeated many times 
     end do 
     call subroutine_to_be_called_ocasionally() 
     end do