cmelis
C CMELIS SOURCE PV 17/12/05 21:15:26 9646 C======================================================================= C Sous-programme cmelis (Collaborateur MESure LIste) C Mesure de la taille du message a envoyer pour allouer le buffer C On va parcourir tous les objets dans la liste, compter le C nombre d'entiers, de flottants et de caracteres total puis calculer C la taille du message MPI C======================================================================= integer nbInt,nbFloa,nbChar integer nbInTo,nbFlTo,nbChTo integer taiTot,taille integer iPile integer iPoint,nNoeud integer IARGU, NARG character*(8) typNom -INC PPARAM -INC CCOPTIO -INC TMCOLAC segment LISARG character*8 nom(nArg) integer adress(nArg) endsegment pointeur argume.LISARG pointeur jcolac.ICOLAC pointeur pile.ITLACC C write(ioimp,*) 'Entree dans CMESLI' iPile=32 pile=jcolac.kcola(iPile) nNoeud=pile.itlac(/1) nbInTo=nArg+1 nbFlTo=0 nbChTo=0 C pour chaque argument do 3 iArgu =1,nArg C recuperer son type C recuper le numero de pile associe if(iimpi.ge.7) then write(ioimp,*) 'Mesure d''un objet',typNom, iPoint endif if(iPoint.eq.0) then if(iimpi.ge.7) then write(ioimp,*) 'Pointeur nul, passage a l''objet suivant' endif goto 3 endif nbInt=0 nbFloa=0 nbChar=0 C Redirection vers le traitement correspondant au type de la pile c a toutes fins utiles, les etiquettes suivantes sont ranges par ligne de 10 goto( & 0100, 0200, 0300, 0400, 0500, 0600, 0700, 0800, 0900, 1000, & 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, & 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000, & 3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, & 4100, 4200, 4300, 4400, 4500, 4600, 4700), iPile 2 write(ioimp,*) 'Probleme dans la pile',typNom, iPile moterr(1:8)=typNom goto 1 c ******************** meleme ******************** 0100 continue nbInTo=nbInTo+nbInt nbFlTo=nbFlTo+nbFloa nbChTo=nbChTo+nbChar goto 1 c ******************** chpoint ******************** 0200 continue nbInTo=nbInTo+nbInt nbFlTo=nbFlTo+nbFloa nbChTo=nbChTo+nbChar goto 1 c ******************** mrigid ******************** 0300 continue nbInTo=nbInTo+nbInt nbFlTo=nbFlTo+nbFloa nbChTo=nbChTo+nbChar goto 1 c ******************** ******************** 0400 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** ******************** 0500 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** bloq ******************** 0600 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** elem ******************** 0700 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** msolut ******************** 0800 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** mstruc ******************** 0900 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** mtable ******************** 1000 continue write(ioimp,*) 'On ne sait pas encore envoyer &d''objet TABLE' C Type d'objet non supporte, sortie en erreur goto 2 c ******************** ******************** 1100 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** msostu ******************** 1200 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** imatri ******************** 1300 continue write(ioimp,*) 'On ne veut pas envoyer d''objet IMATRI' C Type d'objet non supporte, sortie en erreur goto 2 c ******************** mjonct ******************** 1400 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** mattac ******************** 1500 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** mmatri ******************** 1600 continue write(ioimp,*) 'On ne veut pas envoyer d''objet MMATRI' C Type d'objet non supporte, sortie en erreur goto 2 c ******************** mdefor ******************** 1700 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** mlreel ******************** 1800 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** mlenti ******************** 1900 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** mcharg ******************** 2000 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** ******************** 2100 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** mevoll ******************** 2200 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** superele ******************** 2300 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** logique ******************** 2400 continue C nbInt=1 C nbInTo=nbInTo+1 goto 1 c ******************** flottant ******************** 2500 continue C nbFloa=1 C nbFlTo=nbFlTo+nbFloa goto 1 c ******************** entier ******************** 2600 continue C nbInt=1 C nbInTo=nbInTo+nbInt goto 1 c ******************** mot ******************** 2700 continue C call cmemot(iPoint,nbInt,nbFloa,nbChar) C nbInTo=nbInTo+nbInt C nbFlTo=nbFlTo+nbFloa C nbChTo=nbChTo+nbChar goto 1 c ******************** texte ******************** 2800 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** listmots ******************** 2900 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** vecteur ******************** 3000 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** vectd ******************** 3100 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** point ******************** 3200 continue nbInt=1 nbInTo=nbInTo+nbInt nbFloa=(IDIM+1) nbFlTo=nbFlTo+nbFloa goto 1 c ******************** config ******************** 3300 continue C On envoi le idim local et du nb de noeud nbInTo=nbInTo+2 nbFloa=(IDIM+1)*nNoeud nbFlTo=nbFlTo+nbFloa goto 1 c ******************** mlchpo ******************** 3400 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** mbasem ******************** 3500 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** procedur ******************** 3600 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** bloc ******************** 3700 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** mmodel ******************** 3800 continue nbInTo=nbInTo+nbInt nbFlTo=nbFlTo+nbFloa nbChTo=nbChTo+nbChar goto 1 c ******************** mchaml ******************** 3900 continue nbInTo=nbInTo+nbInt nbFlTo=nbFlTo+nbFloa nbChTo=nbChTo+nbChar goto 1 c ******************** minte ******************** 4000 continue nbInTo=nbInTo+nbInt nbFlTo=nbFlTo+nbFloa nbChTo=nbChTo+nbChar goto 1 c ******************** nuage ******************** 4100 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** matrak ******************** 4200 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** matrik ******************** 4300 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** objet ******************** 4400 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** methode ******************** 4500 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** esclave ******************** 4600 continue C Type d'objet non supporte, sortie en erreur goto 2 c ******************** fantome ******************** 4700 continue C Type d'objet non supporte, sortie en erreur goto 2 c ************************************************** 1 continue if(iimpi.ge.7) then write(ioimp,*) 'Taille comptee (int/float/char)' write(ioimp,*) nbInt,nbFloa,nbChar endif 3 continue taiTot=0 if(iimpi.ge.7) then write(ioimp,*) 'Taille totale (int/float/char)' write(ioimp,*) nbInTo,nbFlTo,nbChTo write(ioimp,*) taiTot endif C write(ioimp,*) 'Sortie de CMESLI' end
© Cast3M 2003 - Tous droits réservés.
Mentions légales