pola1
C POLA1 SOURCE OF166741 24/10/07 21:15:39 12016 *--------------------------------------------------------------------- * * CALCUL DE LA DECOMPOSITION POLAIRE * (APPELE PAR POLA) * * ENTREES: * -------- * * IPMODL POINTEUR SUR UN MMODEL * IPCHE1 POINTEUR SUR UN CHAMELEM DE GRADIENTS * (TYPE MCHAML) * IMIL INDICATEUR DEPL OU GEOM SELON QUE LE * GRADIENT EST CELUI D'UN DEPLACEMENT * OU D'UNE GEOMETRIE * * SORTIES : * --------- * * IPCHE2 POINTEUR SUR UN CHAMELEM R * IPCHE3 POINTEUR SUR UN CHAMELEM U * *--------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMCHAML -INC SMMODEL SEGMENT NOTYPE CHARACTER*16 TYPE(NBTYPE) ENDSEGMENT SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT PARAMETER ( NINF=3 ) INTEGER INFOS(NINF) CHARACTER*(NCONCH) CONM LOGICAL lsupgd DIMENSION F(9),R(9),U(9) NHRM=NIFOUR MCHELM=IPCHE1 SEGACT MCHELM IF(TITCHE.NE.'GRADIENT') THEN MOTERR(1:8)='GRADIENT' GOTO 666 ENDIF * * ... VERIFICATION DU LIEU SUPPORT DU MCHAML DE GRADIENT * N1=INFCHE(/1) N3=INFCHE(/2) IF (N3.NE.6) THEN write(ioimp,*) 'POLA1 : N3 != 6' ENDIF ISUP1 = INFCHE(1,6) DO ISCH = 2, N1 IF (INFCHE(ISCH,6).NE.ISUP1) THEN SEGDES,MCHELM RETURN ENDIF ENDDO NBTYPE=1 SEGINI,NOTYPE notype.TYPE(1)='REAL*8' MOTYR8 = NOTYPE * * ... ACTIVATION DU MODELE ... * MMODEL=IPMODL SEGACT,MMODEL NSOUS=KMODEL(/1) C ... Initialisation des deux nouveaux MCHELM - résultats ... C les MCHAML resultats sont types GRADIENT pour simplifier C la gestion des noms des composantes N1=NSOUS L1=8 N3=6 SEGINI MCHEL1 IPCHE2=MCHEL1 MCHEL1.IFOCHE=IFOUR MCHEL1.TITCHE='GRADIENT' SEGINI MCHEL2 IPCHE3=MCHEL2 MCHEL2.IFOCHE=IFOUR MCHEL2.TITCHE='GRADIENT' * * ... BOUCLE SUR LES SOUS ZONES DU MODELE ... * DO 200 ISOUS=1,NSOUS * * ... INITIALISATION ... * NCOMP=0 IVACOM = 0 MOCOMP = 0 IVAGR1 = 0 IVAGR2 = 0 IMODEL=KMODEL(ISOUS) SEGACT IMODEL * IPMAIL=IMAMOD CONM =CONMOD MELE =NEFMOD C C ... COQUE INTEGREE OU PAS ? ... C NPINT=INFMOD(1) IF (NPINT.NE.0)THEN GOTO 666 ENDIF * * ... INFORMATION SUR L'ELEMENT FINI ... * MFR =INFELE(13) * MINTE =INFELE(11) minte=infmod(2+isup1) * * ... Verfication de compatibilité des MCHAML du point de vue des * tableaux INFCHE et remplissage du tableau INFOS pour COMCHA ... * IF (IRTD.EQ.0) GOTO 666 * * ... Les attributs de chaque sous-zone ... * MCHEL1.INFCHE(ISOUS,1)=0 MCHEL1.INFCHE(ISOUS,2)=0 MCHEL1.INFCHE(ISOUS,3)=NHRM MCHEL1.INFCHE(ISOUS,4)=MINTE MCHEL1.INFCHE(ISOUS,5)=0 MCHEL1.INFCHE(ISOUS,6)=ISUP1 MCHEL1.IMACHE(ISOUS)=IPMAIL MCHEL1.CONCHE(ISOUS)=CONMOD * MCHEL2.INFCHE(ISOUS,1)=0 MCHEL2.INFCHE(ISOUS,2)=0 MCHEL2.INFCHE(ISOUS,3)=NHRM MCHEL2.INFCHE(ISOUS,4)=MINTE MCHEL2.INFCHE(ISOUS,5)=0 MCHEL2.INFCHE(ISOUS,6)=ISUP1 MCHEL2.IMACHE(ISOUS)=IPMAIL MCHEL2.CONCHE(ISOUS)=CONMOD * * ... RECHERCHE DES NOMS de COMPOSANTES ... * if(lnomid(3).ne.0) then nomid=lnomid(3) segact nomid mocomp=nomid ncomp=lesobl(/2) nfac=lesfac(/2) lsupgd=.false. else lsupgd=.true. endif * * ... VERIFICATION DE LEUR PRESENCE ... * IF (IERR.NE.0) THEN IVASC1=0 IVASC2=0 GOTO 9990 ENDIF * * ... RECHERCHE DA LA TAILLE DES MELVAL A ALLOUER ... * N1PTEL=0 N1EL=0 MPTVAL=IVACOM DO 110 ICOMP=1,NCOMP MELVAL=IVAL(ICOMP) N1PTEL=MAX(N1PTEL,VELCHE(/1)) N1EL =MAX(N1EL ,VELCHE(/2)) 110 CONTINUE N2PTEL=0 N2EL=0 * * ... Création et stockage des MCHAML ... * N2=NCOMP SEGINI MCHAM1 MCHEL1.ICHAML(ISOUS)=MCHAM1 SEGINI MCHAM2 MCHEL2.ICHAML(ISOUS)=MCHAM2 C C ... et des MELVAL de la zone élémentaire ... C NS=1 NCOSOU=NCOMP SEGINI MPTVAL IVAGR1=MPTVAL NOMID=MOCOMP DO 71 ICOMP=1,NCOMP MCHAM1.TYPCHE(ICOMP)='REAL*8' MCHAM1.NOMCHE(ICOMP)=LESOBL(ICOMP) SEGINI MELVAL MCHAM1.IELVAL(ICOMP)=MELVAL IVAL(ICOMP)=MELVAL 71 CONTINUE SEGINI MPTVAL IVAGR2=MPTVAL NOMID=MOCOMP DO 72 ICOMP=1,NCOMP MCHAM2.TYPCHE(ICOMP)='REAL*8' MCHAM2.NOMCHE(ICOMP)=LESOBL(ICOMP) SEGINI MELVAL MCHAM2.IELVAL(ICOMP)=MELVAL IVAL(ICOMP)=MELVAL 72 CONTINUE ********************************************************************** * * * BRANCHEMENT SUIVANT LA DIMENSION * * * ********************************************************************** * LADIM=0 IF(NCOMP.EQ.4) LADIM=2 IF(NCOMP.EQ.9) LADIM=3 IF(LADIM.EQ.0) GO TO 9990 * * BOUCLE SUR LES ELEMENTS ET LES POINTS DE GAUSS * DO 31 IB=1,N1EL DO 311 IGAU=1,N1PTEL * * ... Recherche des composantes du gradient * MPTVAL=IVACOM DO 35 ICOMP=1,NCOMP MELVAL=IVAL(ICOMP) IGMN=MIN(IGAU,VELCHE(/1)) IBMN=MIN(IB ,VELCHE(/2)) F(ICOMP)=VELCHE(IGMN,IBMN) 35 CONTINUE * * on ajoute 1. si on a lu le mot DEPL * IF(IMIL.EQ.1) THEN IF(LADIM.EQ.2) THEN F(1)=F(1)+1.D0 F(4)=F(4)+1.D0 ELSE IF(LADIM.EQ.3) THEN F(1)=F(1)+1.D0 F(5)=F(5)+1.D0 F(9)=F(9)+1.D0 ENDIF ENDIF * * ... Calcul de R et U * IF(IERR.NE.0) GO TO 9990 * * ... et leur stockage ... * MPTVAL=IVAGR1 DO 36 ICOMP=1,NCOMP MELVAL=IVAL(ICOMP) VELCHE(IGAU,IB)=R(ICOMP) 36 CONTINUE MPTVAL=IVAGR2 DO 37 ICOMP=1,NCOMP MELVAL=IVAL(ICOMP) VELCHE(IGAU,IB)=U(ICOMP) 37 CONTINUE 311 CONTINUE 31 CONTINUE * * ... DESACTIVATION DES SEGMENTS PROPRES A LA GEOMETRIE ISOUS ... * MPTVAL=IVAGR1 DO 76 ICOMP=1,NCOMP MELVAL=IVAL(ICOMP) SEGDES MELVAL 76 CONTINUE MPTVAL=IVAGR2 DO 77 ICOMP=1,NCOMP MELVAL=IVAL(ICOMP) SEGDES MELVAL 77 CONTINUE SEGDES MCHAM1,MCHAM2 NOMID=MOCOMP if(lsupgd)SEGSUP NOMID 200 CONTINUE C ... FIN DE LA GRANDE BOUCLE SUR LES ZONES ÉLÉMENTAIRES ... SEGDES MCHEL1,MCHEL2 SEGDES MCHELM,MMODEL notype = MOTYR8 SEGSUP,notype RETURN 9990 CONTINUE * * ... ERREUR DANS UNE SOUS ZONE : DESACTIVATION ET RETOUR ... * SEGDES IMODEL,MMODEL SEGSUP MCHEL1,MCHEL2 IF (IVAGR1.NE.0) THEN MPTVAL=IVAGR1 DO 86 ICOMP=1,NCOMP MELVAL=IVAL(ICOMP) SEGSUP MELVAL 86 CONTINUE ENDIF IF (IVAGR2.NE.0) THEN MPTVAL=IVAGR2 DO 87 ICOMP=1,NCOMP MELVAL=IVAL(ICOMP) SEGSUP MELVAL 87 CONTINUE ENDIF NOMID =MOCOMP if(lsupgd)SEGSUP NOMID RETURN 666 CONTINUE SEGDES MCHELM RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales