IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

Nanoparticules en Fortran


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Par défaut Nanoparticules en Fortran
    Bonjour,

    Pour aller vite, mon pb est le suivant.

    Contexte:

    Un programme assez costaud me cré des nanoparticules, assemblages rigides d'atomes.
    Les atomes sont aglomérés pour former des polyèdres régluliers ou des morphologies s'y rapprochant.
    Mes nanoparticules sont composées de deux types d'atomes: A et B.
    Après avoir lancé la simulation du programme "costaud", j'obtiens ces polyèdres ou ces morphologies s'y rapporchant avec A et B répartis aléatoirement en surface et en volume.

    Maintenant:

    Un second programme, et c'est celui ci qui est l'objet de ce post, me calcule la concentration en surface et en volume de la nanoparticule. On considère que le volume est obtenu pout tout atome qui a une coordinence (nb de premiers voisins) égale à 12. On considère qu'on est en surface dans les autres cas: quand on a une coordinence égale à 7,8,9...<12.
    Je demande à mon programme de sortir la concentration de volume et de surface en A, qui est donc le nb d'atomes de A en volume sur le nb total d'atomes en volume, et, pour la concentration de surface, le nb d'atomes de A en surface sur le nb total d'atomes en surface.
    itype(1) signifie "atome A"

    Ainsi la boucle ci dessous.

    do i=1,natot
    if(iv1(i).lt.12) then
    nats=nats+1
    if(itype(i).eq.1) cs=cs+1.d0
    endif

    if(iv1(i).eq.12) then
    natcore=natcore+1
    if(itype(i).eq.1) ccore=ccore+1.d0
    endif
    enddo
    ccore=ccore/natcore

    C'est dans le premier if/endif j'ai la concentration en surface de A, et dans le second j'ai la concentration en volume de A, comme vous vous en doutez.

    Mais Il se trouve que j'observe parfois des nanoparticules qui ont bel et bien des atomes en volume (même s'il n'y a pas de A) et au lieu de m'écrire une concentration donc nulle, ce qu'il signifie qu'il n'y a pas de A, il écrit NaN.

    Que faire pour éviter ce NaN ?

  2. #2
    Membre émérite Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Par défaut
    pour commencer:
    NaN = Not a Number

    c'est le résultat d'une division par zéro, d'une racine de nombre négatif etc...
    bon j'imajine que Iv(i) ne peut dépassé 12? (ce qui serait physique, mais numériquement c'est possible donc il faut faire un if qui vérifie)

    ensuite tu divise par un truc qui est potentiellement nul ( natcore) donc un if qui vérifie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    do i=1,natot
      if(iv1(i)<12) then
        nats=nats+1
        if(itype(i)==1) cs=cs+1.d0
      else if(iv1(i)==12) then
        natcore=natcore+1 
         if(itype(i)==1) ccore=ccore+1.d0
      else
    ! *********** erreur (à traiter) **************
      endif
    enddo
    if (natcore!=0) ccore=ccore/natcore

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Par défaut
    oui, il ne doit pas y avoir autre chose en volume que la coordinence 12.
    J'essaie avec vos modifications.

Discussions similaires

  1. Problème en interfacant C et Fortran
    Par karl3i dans le forum MFC
    Réponses: 6
    Dernier message: 23/05/2006, 16h10
  2. Compilateur Fortran
    Par badrou dans le forum Fortran
    Réponses: 3
    Dernier message: 28/11/2004, 20h39
  3. accès fortran à une base / utilisation des "bytea"
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/11/2004, 08h31
  4. Simulateur fortran
    Par kaczmarek dans le forum Linux
    Réponses: 1
    Dernier message: 28/07/2004, 17h55
  5. [TP]Portage d'un encodeur MP3 Fortran en pur Pascal...
    Par Christophe Fantoni dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 04/07/2003, 17h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo