config
C CONFIG SOURCE PV090527 25/01/16 21:15:03 12111 SUBROUTINE CONFIG C======================================================================= C OPERATEUR TRANSFORMANT LES CONTRAINTES SUR LA CONFIGURATION COURANTE C C MOD1= OBJET MODELE (TYPE MMODEL) C C SI1 = CHAMP DE CONTRAINTES (TYPE MCHAML)EN ENTREE C OU DE DEFORMATIONS C C SI2 = CHAMP DE CONTRAINTES (TYPE MCHAML) EN SORTIE C OU DE DEFORMATIONS C C CNF = CONFIGURATION COURANTE C C CODE COMBESCURE SEPT 87 C C======================================================================= IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMMODEL -INC SMCHAML -INC SMCOORD -INC SMCHPOI -INC SMELEME POINTEUR MCHEX1.MCHELM C PARAMETER(NDERI=7) CHARACTER*4 MODERI(NDERI) DATA MODERI/'LINE','QUAD','I ','II ','TRUE','JAUM','UTIL'/ c -> IDERI = 1 2 1 2 3 4 5 c traitement particulier uniquement si IDERI = 4 ou 5 LOGICAL CARACT CHARACTER*(LOCOMP) NODEF(3),NODEG(3) CHARACTER*(LOCOMP) RODEF(3),RODEG(3) DATA NODEF / 'UX ','UY ','UZ ' / DATA NODEG / 'UR ','UZ ','UT ' / DATA RODEF / 'RX ','RY ','RZ ' / DATA RODEG / 'RR ','RZ ','RT ' / C----------------------------------------------------------------------- IPMODL=0 IPCHE1=0 IPCHE2=0 IPCHP1=0 *as xfem 2010_01_13 IPCHP0=0 ICHAX1=0 IDERI=0 im=1 ideri=1 IF(IERR.NE.0) RETURN IF(IERR.NE.0)RETURN C C ON LIT LE MCHAML A TRANSFORMER C if (ipin.eq.0) ierr=2 IF(IERR.NE.0) RETURN ** call verrou(2) segact mcoord mchelm=ipin * sauver les configuration et passage dans mclcnf pour le reduaf segact mchelm if(mclcnf.eq.0.or.mclcnf.eq.mcoord) then ** call verrou(3) return endif mcoor1=mclcnf IF(IERR.NE.0) RETURN segact mcoord ** write (6,*) 'mclcnf mcoord avant reduag',mclcnf,mcoord * ici faire quelque chose pour que reduaf ne plante pas sur une erreur de configuration CALL REDUAG(IPIN,IPMODL,IPCHE1,0,IR,KER) if (ierr.ne.0) return mchelm=ipche1 ** write (6,*) 'mcoor1 mcoord apres reduag',mcoor1,mcoord IF(IERR .NE. 0) RETURN C C ON construit le chpoint de deplacement a partir de la config courante et de celle du C chamelem C caract=.false. if (titche.eq.'CARACTERISTIQUES') caract=.true. mchpoi=ipchp1 if (iretou.eq.0) then segact,mcoord,mcoor1 nbpts1=mcoor1.xcoor(/1)/(idim+1) NAT=2 NSOUPO=1 SEGINI MCHPOI ipchp1=mchpoi NCB=2 if (ifour.eq.2.or.idim.eq.3) ncB=3 if (ifour.eq.1) ncB=3 nc=ncb mrotat=mrota mrota1=mcoor1.mrota if (mrotat.ne.0) then nc=2*ncB segact mrotat,mrota1 endif SEGINI MSOUPO IPCHP(1)=msoupo if (ifour.ne.0.and.ifour.ne.1) then do i=1,ncb nocomp(i)=nodef(i) enddo else do i=1,ncb nocomp(i)=nodeg(i) enddo endif if (mrotat.ne.0) then if (ifour.ne.0.and.ifour.ne.1) then do i=1,ncb nocomp(i+ncb)=rodef(i) enddo else do i=1,ncb nocomp(i+ncb)=rodeg(i) enddo endif endif N=nbpts segini mpoval ipoval=mpoval ** write(6,*) 'config icar',icar if( caract) then ** write(6,*) 'config mcoord mcoor1',mcoord,mcoor1 do i=1,min(nbpts,nbpts1) do j=1,idim ij=(i-1)*(idim+1)+j ij0=(i-1)*idim+j vpocha(i,j)=xcoor(ij)-mcoor1.xcoor(ij) if(mrota.ne.0) vpocha(i,j+ncb)=xrota(ij0)-mrota1.xrota(ij0) enddo enddo do i=1,min(nbpts,nbpts1)+1,nbpts do j=1,idim ij=(i-1)*(idim+1)+j ij0=(i-1)*idim+j vpocha(i,j)=xcoor(ij) if(mrota.ne.0) vpocha(i,j+ncb)=xrota(ij0) enddo enddo else do i=1,min(nbpts,nbpts1) do j=1,idim ij=(i-1)*(idim+1)+j ij0=(i-1)*idim+j vpocha(i,j)=mcoor1.xcoor(ij)-xcoor(ij) if(mrota.ne.0) vpocha(i,j+ncb)=mrota1.xrota(ij0)-xrota(ij0) enddo enddo do i=1,min(nbpts,nbpts1)+1,nbpts do j=1,idim ij=(i-1)*(idim+1)+j ij0=(i-1)*idim+j vpocha(i,j)= -xcoor(ij) if(mrota.ne.0) vpocha(i,j+ncb)= -xrota(ij0) enddo enddo endif nbnn=1 nbelem=nbpts nbsous=0 nbref=0 segini meleme itypel=1 do i=1,nbelem num(1,i)=i enddo igeoc=meleme endif segdes mcoor1 segact mchpoi *** call ecchpo(mchpoi,0) *as xfem 2010_01_13 if (ierr.ne.0) then if (ichax1.ne.0) then write(ioimp,*) 'pr un deplacement enrichi, on a besoin du ', & 'deplacement entre la config. 0 et la config. de reference' return endif endif C MMODEL = IPMODL NBPART = KMODEL(/1) IPICA = 0 DO 4 IPART=1,NBPART IMODEL = KMODEL(IPART) C Pour certains modeles (OTTOSEN, UO2), les operateurs PICA et CAPI ne C doivent pas modifier les champs ! * septembre 2019: cette restriction est enlevee ** IF ( INATUU.EQ.42 .OR. INATUU.EQ.108 ) IPICA = IPICA+1 C Pour les modeles utilisateur UMAT, les contraintes sont deja de Cauchy C et ne doivent donc pas etre transportees ! IF ( INATUU.EQ.-1) IPICA = IPICA+1 C Verification presence XFEM *as xfem 2010_01_13 NOBMO1=IVAMOD(/1) if (NOBMO1.ne.0) then Do iobmo1=1,NOBMO1 if (TYMODE(iobmo1).eq.'MCHAML') then MCHEX1=IVAMOD(iobmo1) if (MCHEX1.TITCHE .eq. 'ENRICHIS') then ICHAX1 = MCHEX1.ICHAML(1) goto 3 endif endif Enddo endif 3 CONTINUE *fin as xfem 2010_01_13 4 CONTINUE C Presence XFEM -> pointeur ICHAX1 non nul *as xfem 2010_01_13 if (ichax1.ne.0 .and. ipchp0.EQ.0) then write(ioimp,*) 'pr un deplacement enrichi, on a besoin du ', & 'deplacement entre la config. 0 et la config. de reference' return endif C IPICA = NBPART -> Le modele entier contient des modeles UMAT C Recopie MCHAML IPCHE1 tel quel et on quitte IF (IPICA.EQ.NBPART) THEN IRET = 1 C C Melange de MODELEs : Traitement GENERAL C ELSE IRET = 0 mchelm=ipche1 segact mchelm*mod if (.not.caract) then ** write (6,*) 'mcoors mcoord avant piocap',mcoors,mcoord,mchelm mclcnf=mcoord segact mcoord nbpts=xcoor(/1)/(idim+1) & IPCHE2,IRET) mchelm=ipche2 ** write (6,*) 'mclcnf mcoord apres piocap',mclcnf,mcoord,mchelm else C Mise a jour des caracteristiques materielles ** write (6,*) 'mclcnf mcoord avant formch',mclcnf,mcoord,mchelm mchelm=ipche2 segact mchelm*mod mclcnf=mcoord ** write (6,*) 'mclcnf mcoord apres formch',mclcnf,mcoord,mchelm endif segact mcoord nbpts=xcoor(/1)/(idim+1) segdes mcoord ** call verrou(3) ENDIF IF (IRET.EQ.1) THEN ** write(6,*) 'sortie de config ',ipche2 ENDIF END
© Cast3M 2003 - Tous droits réservés.
Mentions légales