asns1
C ASNS1 SOURCE GOUNAND 24/11/12 21:15:02 12076 & INCTRY,INCTRZ,IITOPY,ITOPOD,IITOPD,IPODD) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C CE SUBROUTINE SERT A L'ASSEMBLAGE DE MATRICES NON-SYMETRIQUES C EN VUE D'UNE INVERSION PAR UNE METHODE LDUt C C EN ENTREE: C **** IPOIRI: POINTEUR SUR OBJET MRIGIDITE,NON MODIFIE C EN SORTIE: C **** INUINV IMINI ITOPO IPOY INCTRY SONT DES POINTEURS DES SEGMENTS C DE TRAVAIL SERVANT A L'ASSEMBLAGE ILS SONT DETRUITS EN FIN C D'ASSEMBLAGE OU DE TRIANGULARISATION C **** MMATRI EST LE POINTEUR DE L'OBJET FUTUR MATRICE TRIANGULARISEE. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMELEME -INC SMCOORD -INC CCREEL SEGMENT,IMIN(NNOE) SEGMENT,IMINB(NNOE) SEGMENT ICPR(nbpts) C -INC SMRIGID -INC SMMATRI C SEGMENT,INUINV(NNGLOB) SEGMENT,ITOPO(IENNO) SEGMENT,IITOP(NNOE+1) SEGMENT,ITOPOB(IENNO) SEGMENT,IITOPB(NNOE+1) SEGMENT,IMINI(INC) SEGMENT,IPOS(NNOE1) SEGMENT,IPOD(NNOE1) SEGMENT,INCTRR(NIRI) SEGMENT,INCTRD(NIRI) SEGMENT,INCTRA(NLIGRE) SEGMENT DIATMP(maxt,NNOE) segment strv integer itrv1(maxt) integer itrv2(maxt) real*8 dtrv1(maxt) real*8 dtrv2(maxt) endsegment segment mondu character*4 mondua(nnn) integer ipris(nnn),inosel(nnn) endsegment CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C **** CES TABLEAUX SERVENT AU REPERAGE DE LA MATRICE POUR L'ASSEMBLAG C **** IL SERONT TOUS SUPPRIMES EN FIN D'ASSEMBLAGE. C C C **** MAXINC= MAXIMUM DE COMPOSANTES CONCERNANT UN NOEUD C C C **** IITOP(K)=I LE 1ER ELEMENT TOUCHANT LE NOEUD K SE TROUVE EN C IEME POSITION DANS ITOPO C **** ITOPO(I)=L: LE 1ER ELEMENT TOUCHANT LE K EME NOEUD DE LA C ITOPO(I+1)=M MATRICE EST LE LIEME DE L'OBJET GEOMETRIE C DEFINI PAR LE POINTEUR M C **** IPOS(I)=J : LA 1 ERE INCONNUE DU NOEUD I EST EN J+1 EME C POSITION C **** IMINI(I)=J LA PLUS PETITE INCONNUE QUI EST RELIEE A LA IEME C EST L'INCONNUE J. C **** INUINV(I)=J J EST LE NOUVEAU NUMERO DU NOEUD I C C **** INCTRR(NIRI) - NIRI=NRIGEL du IPOIRI (objet MRIGID passé en argument) C pointeurs sur INCTRA C C Variables locales : C -------------------- C * NNVA = NRIGEL (nombre d'objets MRIGID élémentaires) dans IPOIRI (objet C MRIGID) passé en argument) C * NLIGRE = NLIGRP - nombre de variables primales (dans un segment DESCR) C * IMELP = pointeur d'un MELEME contenant un noeud "normal" C * ICDOUR = ??? C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CHARACTER*4 CNOHA,lisi integer*4 noha equivalence (cnoha,noha) DATA CNOHA/'NOHA'/ DATA IPOIN/1/ * NNGLOB=nbpts MRIGID=IPOIRI * C Quelquefois, les points de IRIGEL(1,I) ne sont pas C tous references par le segment DESCR (cas des QUAFs notamment). C Dans ce cas, on fait une reduction du MELEME et on le stocke dans C IRIGEL(2,I) C CALL RDSCRM(MRIGID) IF (IERR.NE.0) RETURN * SEGACT,MRIGID NNVA=IRIGEL(/2) NIRI=NNVA SEGINI,INCTRR SEGINI,INCTRD if (nnva.eq.0) goto 801 MELEME=IRIGEL(1,1) SEGACT MELEME C ... ITYPEL = 27 correspond aux éléments 'ATTA' ... IF(ITYPEL.NE.27) GO TO 801 SEGDES MELEME C C **** ASSEMBLAGE DANS LE CAS DE L'ANALYSE MODALE. ON COMPTE LES POINTS C **** DANS ICPR C SEGINI INUINV,ICPR IKI=0 DO 700 I=1,NNVA meleme=irigel(2,i) if (meleme.eq.0) meleme=IRIGEL(1,I) SEGACT MELEME NBNN=NUM(/1) NBELEM=NUM(/2) DO I1=1,NBELEM IF(ICPR(IP1).NE.0) GO TO 701 IKI=IKI+1 ICPR(IP1)=IKI 701 CONTINUE enddo 700 CONTINUE C C **** FABRICATION DU TABLEAU INUINV C **** ON MET LES POINTS QUI ONT POUR INCONNUE ALFA EN TETE C NNOE=IKI NBETA=0 DO 710 I=1,NNVA meleme=irigel(2,i) if (meleme.eq.0) meleme=IRIGEL(1,I) DESCR =IRIGEL(3,I) SEGACT MELEME,DESCR NBNN=NUM(/1) NBELEM=NUM(/2) NLIGRE=LISINC(/2) DO I1=1,NBELEM IF(ICPR(IP1).EQ.0) GO TO 711 715 CONTINUE NBETA=NBETA+1 IKI=NNOE-NBETA+1 716 CONTINUE INUINV(IP1)=IKI ICPR(IP1)=0 711 CONTINUE enddo SEGDES DESCR * SEGSUP IPB 710 CONTINUE SEGSUP ICPR ICDOUR=NNOE GO TO 800 C C **** ON FABRIQUE UN NOUVEL OBJET GEOMETRIE CONTENANT TOUTES LES C **** GEOMETRIES ELEMENTAIRES. CET OBJET CONTIENT NNVA OBJETS C **** GEOMETRIQUES ELEMENTAIRES. PUIS ON ENVOIE DANS NUMOPT QUI C **** FOURNIT EN RETOUR INUINV(NUM(I,J))=K DONNE LE NOUVEAU C **** NUMERO LOCAL DU POINT NUM(I,J).K VARIE DE 1 A ICDOUR. C **** LE PREMIER NOEUD DE L'OBJET GEOMETRIQUE EST LE PREMIER NOEUD C **** DE LA MATRICE, ETC... C 801 CONTINUE IKK=1 722 CONTINUE MELEME=IRIGEL(1,IKK) SEGACT,MELEME DESCR=IRIGEL(3,IKK) SEGACT,DESCR NLIGRE=LISINC(/2) DO 720 K=1,NLIGRE IF(LISINC(K).NE.'LX ') GO TO 721 720 CONTINUE SEGDES,DESCR IKK=IKK+1 IF(IKK.LE.NNVA) GO TO 722 DO 4862 I=1,NNVA MELEME= IRIGEL(1,I) SEGACT MELEME IF(ITYPEL.EQ.49) THEN DESCR=IRIGEL(3,I ) SEGACT,DESCR K = 3 GO TO 721 ELSE SEGDES MELEME ENDIF 4862 CONTINUE K=1 MELEME= IRIGEL(1,1) DESCR= IRIGEL(3,1) SEGACT MELEME,DESCR C ... On arrive ici si : C * LISINC(K) != 'LX ' => K est le premier parmi K tels que LISINC(K) != 'LX ' C * ITYPEL d'un des maillages = 49 (élément 'MULT') => K = 3 C * tous les autres cas => K = 1 C ... IA = numéro (dans l'élément) du noeud concerné par le DDL No K ... C ... I1 = numéro (absolu) du noeud concerné par le DDL No K, C Ce noeud sera mis dans un MELEME dont le pointeur est stocké dans IMELP ... 721 IA=NOELEP(K) I1=NUM(IA,1) NBSOUS=0 NBNN=1 NBREF=0 NBELEM=1 SEGDES,DESCR SEGINI,MELEME ITYPEL=1 NUM(1,1)=I1 IMELP=MELEME C ... Le MELEME créé ici est un MELEME composé qui contiendra le MELEME C pointé par IMELP et tous les MELEME pointés par IRIGEL(1,*) ... NBSOUS=NNVA+1 NBREF=0 NBNN=0 NBELEM=0 SEGINI,MELEME LISOUS(1)=IMELP DO 12 I=1,NNVA ipt1=irigel(1,i) segact ipt1 if (irigel(7,i).ne.0.and.ipt1.lisref(/1).ne.0.and. > ipt1.itypel.eq.49) then write(6,*) 'assemblage condition non symetrique' ipt2=ipt1.lisref(1) else ipt2=irigel(2,i) if (ipt2.eq.0) ipt2=ipt1 endif LISOUS(I+1)=ipt2 12 CONTINUE ICDOUR=0 SEGINI,INUINV SEGDES,INUINV C ... A la sortie INUINV contient l'ordre des noeuds et ICDOUR le nombre de noeuds présents dans MELEME ... SEGACT INUINV SEGSUP,MELEME * MELEME=IMELP * SEGDES,MELEME C C **** CREATION D'UN OBJET GEOMETRIE QU'IL FAUDRA CHANGER EN CAS DE C **** RENUMEROTATION GENERALE.ON PROFITE DE LA BOUCLE POUR CREE LE C **** TABLEAU IMIN(I)=J QUI DIT QUE J ELEMENTS TOUCHE LE NOEUD I(NU- C **** MEROTATION LOCALE). C 800 CONTINUE NNOE=ICDOUR SEGINI,IMIN,IMINB NNOE1=NNOE+1 SEGINI,IPOS,IPOD NBSOUS=0 NBREF=0 NBNN=1 NBELEM=ICDOUR SEGINI,IPT1 IPT1.ITYPEL=IPOIN DO 16 IRI=1,NNVA DO I=1,NNOE ipod(I)=0 IPOS(I)=0 enddo MELEME=IRIGEL(1,IRI) SEGACT,MELEME DESCR=IRIGEL(3,IRI) segact descr N2=NUM(/2) * write(6,*) 'noelep', ( noelep(iu),iu=1,noelep(/1)) * write(6,*) 'noeled', ( noeled(iu),iu=1,noeled(/1)) DO 17 I=1,N2 DO 171 J=1,NOELEP(/1) K = NUM( NOELEP(J),I) M=INUINV(K) IF(IPOS(M).NE.I) THEN IMIN(M)=IMIN(M)+1 IPT1.NUM(1,M)=K IPOS(M)=I ENDIF 171 CONTINUE DO 172 J=1,NOELED(/1) K = NUM( NOELED(J),I) M=INUINV(K) IF(IPOD(M).NE.I) THEN IMINB(M)=IMINB(M)+1 IPOD(M)=I ENDIF 172 CONTINUE 17 CONTINUE 16 CONTINUE C C **** INITIALISATION DE ITOPO. ON UTILISE IMIN POUR SE POSITIONNER C **** DANS ITOPO . C ... ITOPO contiendra pour chaque noeud et chaque élément contenant C ce noeud 2 nombres : C 1. numéro de l'élément dans son maillage C 2. numéro du maillage (dans IRIGEL) de cet élément C C ... IITOP servira pour déterminer la taille de ITOPO ainsi que pour C se retrouver dedans ... C SEGINI,IITOP,IITOPB IITOP(1)=1 IITOPB(1)=1 * write(6,*) ' imin', ( imin(iu),iu=1,imin(/1)) * write(6,*) ' iminb', ( iminb(iu),iu=1,iminb(/1)) DO 18 I=1,NNOE IITOP(I+1)=IMIN(I)* 2 + IITOP(I) IITOPB(I+1)=IMINB(I)* 2 + IITOPB(I) 18 CONTINUE DO I=1,NNOE IMINB(I)=0 IMIN(I)=0 enddo C ... IENNO = taille d'ITOPO ... IENNO=IITOP(NNOE+1) SEGINI,ITOPO IENNO=IITOPB(NNOE+1) SEGINI ITOPOB DO 21 IRI=1,NNVA DO I=1,NNOE IPOD(I)=0 IPOS(I)=0 enddo MELEME=IRIGEL(1,IRI) SEGACT,MELEME DESCR = IRIGEL(3,IRI) N2=NUM(/2) DO 22 I=1,N2 DO 221 J=1,NOELEP(/1) M=INUINV(NUM(NOELEP(J),I)) IF(IPOS(M).NE.I) THEN IMIN(M)=IMIN(M)+1 IUY= 2* ( IMIN(M)-1 ) + IITOP(M) C ... Remplissage d'ITOPO ... ITOPO(IUY)=I ITOPO(IUY+1)=IRI IPOS(M)=I ENDIF 221 CONTINUE DO 222 J=1,NOELED(/1) M=INUINV(NUM(NOELED(J),I)) IF(IPOD(M).NE.I) THEN IMINB(M)=IMINB(M)+1 IUY= 2* ( IMINB(M)-1 ) + IITOPB(M) C ... Remplissage d'ITOPO ... ITOPOB(IUY)=I ITOPOB(IUY+1)=IRI IPOD(M)=I ENDIF 222 CONTINUE 22 CONTINUE 21 CONTINUE C C RECHERCHE DE LA VALEUR PAR DEFAUT DE L'HARMONIQUE DANS LE CAS C DE L'UTILISATION DE " OPTION MODE FOUR NOHAR " C C ... On passe cette boucle sans erreur si tous les IRIGEL(5,*) sont égaux C soit à NOHA soit à une autre valeur fixe (IARDEF) ... C DO 230 IRI=1,NNVA IHARIR=IRIGEL(5,IRI) IF( IHARIR . NE. NOHA) THEN IARDEF = IHARIR GO TO 231 ENDIF 230 CONTINUE c CALL ERREUR ( 21) c RETURN cbp: si toutes ont pour valeur NOHA, ce n'est a priori pas une erreur... 231 CONTINUE DO 232 IRI=1,NNVA IF( IRIGEL(5,IRI) .EQ.NOHA) GO TO 232 IF( IRIGEL(5,IRI).EQ.IARDEF ) GO TO 232 if(iimpi.ne.0) then write(ioimp,*) 'IRIGEL(5,:)=',(IRIGEL(5,iou),iou=1,NNVA) endif RETURN 232 CONTINUE C C **** RECHERCHE DE LA VALEUR MAXINC QUI PERMET DE DIMENSIONNER INCPOS C C ... Les quatre segments sont à l'origine de longueur nulle ... SEGINI,MIDUA SEGINI,MIMIK SEGINI,MHARK SEGINI,MHAR1 DESCR=IRIGEL(3,1) SEGACT,DESCR IAAR=IRIGEL(5,1) IF(IAAR.EQ.NOHA) IAAR = IARDEF IMIK(**)=LISINC(1) IHAR(**)= IAAR IDUA(**)=LISDUA(1) MHAR1.IHAR(**)= IAAR MAXINC=1 DO 23 IRI=1,NNVA DESCR=IRIGEL(3,IRI) IHARIR=IRIGEL(5,IRI) IF(IHARIR. EQ.NOHA ) IHARIR = IARDEF SEGACT,DESCR NLIGRE=LISINC(/2) DO 26 I=1,NLIGRE DO 24 J=1,MAXINC IF(IMIK(J).NE.LISINC(I)) GO TO 24 IF(IHAR(J).EQ.IHARIR) GO TO 26 24 CONTINUE C ... On empile les valeurs d'IHARIR et LISINC dans C leurs segments si le couple (IHARIR,LISINC) n'y est pas C encore représenté ... MAXINC=MAXINC+1 IHAR(**)=IHARIR IMIK(**)=LISINC(I) 26 CONTINUE 23 CONTINUE MAXDUA=1 DO 2322 IRI=1,NNVA DESCR=IRIGEL(3,IRI) IHARIR=IRIGEL(5,IRI) IF(IHARIR. EQ.NOHA ) IHARIR = IARDEF SEGACT,DESCR NLIGRE=LISDUA(/2) DO 262 I=1,NLIGRE DO 242 J=1,MAXDUA IF(IDUA(J).NE.LISDUA(I)) GO TO 242 IF(MHAR1.IHAR(J).EQ.IHARIR) GO TO 262 242 CONTINUE C ... On empile les valeurs d'IHARIR et LISDUA dans C leurs segments si le couple (IHARIR,LISDUA) n'y est pas C encore représenté ... MAXDUA=MAXDUA+1 MHAR1.IHAR(**)=IHARIR IDUA(**)=LISDUA(I) 262 CONTINUE SEGDES,DESCR 2322 CONTINUE * write(6,*) ' imik' * write(6,*) ( imik(iu),iu=1,imik(/2)) * write(6,*) ' idua avant' * write(6,*) ( idua(iu),iu=1,idua(/2)) nnn = idua(/2) nqq = imik(/2) if(nnn.ne.nqq) then * on verra plus tard stop endif * petit travail pour mettre dans le meme ordre les inconnues segini mondu do 476 iu=1,imik(/2) lisi=imik(iu) do 477 io=1,idua(/2) if( idua(io).eq.lisi) go to 478 477 continue inosel(iu)=1 go to 476 478 mondua(iu)= idua(io) ipris(io)=1 476 continue do 472 iu=1,inosel(/1) if( inosel(iu).eq.0) go to 472 do 473 io=1,ipris(/1) if( ipris(io).eq.1) go to 473 ipris(io)=1 mondua(iu)=idua(io) go to 472 473 continue 472 continue do 479 iu=1,idua(/2) idua(iu)=mondua(iu) 479 continue segsup mondu * write(6,*) ' idua apres' * write(6,*) ( idua(iu),iu=1,idua(/2)) C C **** INITIALISATION DE INCPOS ET DE INCTRA. C C ... Les dimensions des segments MINCPO initialisés ci-dessous sont les C suivantes : MAXI = nombre de différentes variables primales (ou duales) C NNOE = nombre de noeuds effectivement présents MAXI=MAXINC SEGINI,MINCPO MAXI=MAXDUA SEGINI,MIPO1 maxt=max(maxinc,maxdua) SEGINI DIATMP,strv DO 29 IRI=1,NNVA IHARIR=IRIGEL(5,IRI) IF(IHARIR.EQ.NOHA ) IHARIR = IARDEF DESCR=IRIGEL(3,IRI) SEGACT,DESCR NLIGRE=LISINC(/2) NLIGRF=LISDUA(/2) SEGINI,INCTRA INCTRR(IRI)=INCTRA MELEME=IRIGEL(1,IRI) SEGACT,MELEME N2=NUM(/2) xmatri = irigel(4,iri) segact xmatri DO 34 J=1,NLIGRE DO 33 K=1,MAXINC IF(LISINC(J).NE.IMIK(K)) GO TO 33 IF(IHAR(K).EQ.IHARIR) GO TO 32 33 CONTINUE 32 CONTINUE C ... K est tel que LISINC(J)=IMIK(K) et IHARIR=IHAR(K), C on le met dans INCTRA(J) (J numérote les variables) correspondant ... INCTRA(J)=K C ... Dans la boucle ci-dessous on met à 1 les INCPO correspondants à la C variable K pour les noeuds des éléments du maillage ... DO 31 I=1,N2 IJ=INUINV(NUM(NOELEP(J),I)) INCPO(K,IJ)=1 * terme diagonal if (j.le.nligrf) diatmp(K,IJ)=diatmp(k,ij)+ > re(j,j,i)*coerig(iri) 31 continue 34 CONTINUE SEGDES,INCTRA NLIGRF=LISINC(/2) NLIGRE=LISDUA(/2) SEGINI,INCTRA INCTRD(IRI)=INCTRA DO 342 J=1,NLIGRE DO 332 K=1,MAXDUA IF(LISDUA(J).NE.IDUA(K)) GO TO 332 IF(MHAR1.IHAR(K).EQ.IHARIR) GO TO 322 332 CONTINUE 322 CONTINUE C ... K est tel que LISDUA(J)=IDUA(K) et IHARIR=IHAR(K), C on le met dans INCTRA(J) (J numérote les variables) correspondant ... INCTRA(J)=K C ... Dans la boucle ci-dessous on met à 1 les INCPO correspondants à la C variable K pour les noeuds des éléments du maillage ... DO I=1,N2 IJ=INUINV(NUM(NOELED(J),I)) MIPO1.INCPO(K,IJ)=1 * terme diagonal if (j.le.nligrf) diatmp(K,IJ)=diatmp(k,ij)+ > re(j,j,i)*coerig(iri) enddo 342 CONTINUE SEGDES,DESCR SEGDES,INCTRA 29 CONTINUE C C **** INITIALISATION DE IPOS C C ... IPOS(I+1)-IPOS(I) = nombre de colonnes liées au noeud I ... C ... IPOS(I)+1 = numéro de la première colonne concernant le noeud I ... IPOS(1)=0 IPOD(1)=0 C ... NA = nombre de 1 dans INCPO => nombre de colonnes de la matrice ... NA=0 ND=0 DO 37 I=1,NNOE nad=na ndd=nd diamax=0.d0 DO 35 K=1,MAXINC IF(INCPO(K,I).EQ.0) GO TO 35 NA=NA+1 INCPO(K,I)=NA itrv1(na-nad)=k dtrv1(na-nad)= -diatmp(k,i) diamax=max(diamax,abs(dtrv1(na-nad))) 35 CONTINUE diaref = diamax * xszpre do k=1,na-nad if (abs(dtrv1(k)).lt.diaref) then ** write (6,*) ' terme diag petit ',dtrv1(k) dtrv1(k)=dtrv1(k)+diamax endif enddo * trier incpo suivant les val de diatmp do k=1,na-nad incpo(itrv1(k),i)=k+nad enddo IPOS(I+1)=NA C ... ND = nombre de 1 dans MIPO1.INCPO => nombre de lignes de la matrice ... diamax=0.d0 DO 352 K=1,MAXDUA IF(MIPO1.INCPO(K,I).NE.0) THEN ND=ND+1 C ... MIPO1.INCPO(K,I) = numéro de l'équation ... MIPO1.INCPO(K,I)=ND itrv1(nd-ndd)=k dtrv1(nd-ndd)= -diatmp(k,i) diamax=max(diamax,abs(dtrv1(nd-ndd))) ENDIF 352 CONTINUE diaref = diamax * xszpre do k=1,nd-ndd if (abs(dtrv1(k)).lt.diaref) then ** write (6,*) ' terme diag petit ',dtrv1(k) dtrv1(k)=dtrv1(k)+diamax endif enddo do k=1,nd-ndd mipo1.incpo(itrv1(k),i)=k+ndd enddo IPOD(I+1)=ND 37 CONTINUE * write(*,*) 'Nb de colonnes de la matrice : ',NA,maxinc * write(*,*) 'Nb de lignes de la matrice : ',ND,maxdua SEGDES,MIDUA,MIMIK,MHARK,MHAR1 C ... On va tester que tout est OK pour la suite ... IF(NA.NE.ND) THEN * write(6,*) ' ipos' * write(6,*) ( ipos(IU),IU=1,ipos(/1)) * write(6,*) ' ipod ' * write(6,*) ( ipod(IU),IU=1,ipod(/1)) RETURN ENDIF DO 567 IINO=1,NNOE1 IF(IPOS(IINO).NE.IPOD(IINO)) THEN WRITE(*,*) 'ERREUR dans ASNS1 !!! IPOS != IPOD !!!' RETURN ENDIF 567 CONTINUE C C **** INITIALISATION DE IMINI a été supprimée car ce segment C ne servait à rien ... * write(6,*) ' ipos', ( ipos(iu),iu=1,ipos(/1)) * write(6,*) ' ipod', ( ipod(iu),iu=1,ipod(/1)) * write(6,*) ' itopo', ( itopo(iu),iu=1,itopo(/1)) * write(6,*) ' itopob', ( itopob(iu),iu=1,itopob(/1)) * write(6,*) ' iitop', ( iitop(iu),iu=1,iitop(/1)) * write(6,*) ' iitopb', ( iitopb(iu),iu=1,iitopb(/1)) SEGsup DIATMP,strv SEGDES,MRIGID SEGDES,IPOS,IPOD SEGDES,ITOPO,ITOPOB SEGDES,IITOP,IITOPB SEGDES,INUINV SEGDES,IPT1 SEGDES,MINCPO SEGDES,MIPO1 SEGSUP,IMIN,IMINB SEGDES,INCTRR INCTRY=INCTRR SEGDES,INCTRD INCTRZ=INCTRD SEGINI,MMATRI NENS=0 IGEOMA=IPT1 IIDUA=MIDUA IINCPO=MINCPO IDUAPO=MIPO1 IIMIK=MIMIK IHARK=MHARK IHARDU=MHAR1 INUINY=INUINV ITOPOY=ITOPO ITOPOD=ITOPOB IITOPD=IITOPB IITOPY=IITOP MMATRX=MMATRI ccc IMINIY=IMINI iminiy=0 IPOY=IPOS IPODD=IPOD SEGDES,MMATRI RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales