kbloq
C KBLOQ SOURCE GOUNAND 25/04/30 21:15:09 12258 SUBROUTINE KBLOQ(CBLOQ,MBLOQ,FBLOQ) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : KBLOQ C DESCRIPTION : a partir d'un CHPOINT de CLIM de Dirichlet, * genere la rigidite de blocage et la force associee au blocage * C C C C LANGAGE : ESOPE C AUTEUR : Stephane GOUNAND (CEA/DES/ISAS/DM2S/SEMT/LTA) C mel : gounand@semt2.smts.cea.fr C*********************************************************************** C*********************************************************************** C SYNTAXE GIBIANE : C ENTREES : CBLOQ C ENTREES/SORTIES : C SORTIES : MBLOQ, FBLOQ C*********************************************************************** C VERSION : v1, 29/04/2025, version initiale C HISTORIQUE : v1, 29/04/2025, creation C HISTORIQUE : C HISTORIQUE : C*********************************************************************** -INC PPARAM -INC CCOPTIO -INC SMCOORD -INC CCGEOME -INC CCHAMP -INC SMELEME POINTEUR melrig.MELEME -INC SMCHPOI POINTEUR CBLOQ.MCHPOI POINTEUR FBLOQ.MCHPOI -INC SMRIGID POINTEUR MBLOQ.MRIGID -INC SMLMOTS POINTEUR MLCOMP.MLMOTS -INC SMLENTI POINTEUR NCNODE.MLENTI POINTEUR ICNODE.MLENTI CHARACTER*(LOCHPO) nompri,nomdua CHARACTER*4 MOTPV(3) DATA MOTPV / 'MINI','MAXI','FROT' / * * Executable statements * C Est-ce une condition unilaterale ? NILATE=0 IF (IPO.EQ.1) NILATE=-1 IF (IPO.EQ.2) NILATE=1 IF (IPO.EQ.3) NILATE=2 C Pas de frottement en 1D IF (IPO.EQ.3.AND.IDIM.EQ.1) THEN INTERR(1)=IDIM MOTERR(1:4)=MOTPV(3) RETURN ENDIF C Pour ne pas avoir de verrouillage sur MCOORD en // SEGDES,MCOORD SEGACT,MCOORD*MOD * On parcourt le champ pour avoir les noms de composante et le * nombre de noeuds concernes par composante * JG=NLCOMP SEGINI NCNODE SEGINI ICNODE NSOUPO=CBLOQ.IPCHP(/1) NLAG=0 DO ISOUPO=1,NSOUPO MSOUP1=CBLOQ.IPCHP(ISOUPO) NC=MSOUP1.NOCOMP(/2) IPT1=MSOUP1.IGEOC NGEOC=IPT1.NUM(/2) DO IC=1,NC nompri=msoup1.nocomp(ic) IF (IPLAC.LE.0) THEN GOTO 9999 ENDIF NCNODE.LECT(IPLAC)=NCNODE.LECT(IPLAC)+NGEOC NLAG=NLAG+NGEOC ENDDO ENDDO ILAG=0 NULAG=NBPTS NBPTS=NBPTS+NLAG SEGADJ,MCOORD * * On va creer un nombre de sous-matrices egale aux nombres de * composantes * NRIGEL=NLCOMP SEGINI MRIGID MTYMAT='KOPSBLOQ' DO irig=1,nrigel coerig(irig)=1.d0 nbnn=2 nbelem=ncnode.lect(irig) nbsous=0 nbref=0 segini meleme itypel=22 irigel(1,irig)=meleme nligrp=2 nligrd=2 segini descr if (inomdd.le.0) then moterr(1:4)=nompri goto 9999 endif nomdua=nomdu(inomdd) lisinc(1)='LX' lisdua(1)='FLX' lisinc(2)=nompri lisdua(2)=nomdua NOELEP(1)=1 NOELEP(2)=2 NOELED(1)=1 NOELED(2)=2 irigel(3,irig)=descr nelrig=ncnode.lect(irig) segini xmatri xmatri.symre=0 do ilrig=1,nelrig re(1,1,ilrig)=0.D0 re(2,1,ilrig)=1.D0 re(1,2,ilrig)=1.D0 re(2,2,ilrig)=0.D0 enddo irigel(4,irig)=xmatri irigel(5,irig)=NIFOUR irigel(6,irig)=NILATE irigel(7,irig)=0 ENDDO * * On va creer un chpoint a une composante FLX * NSOUPO=1 NAT=1 SEGINI,MCHPOI MTYPOI='FLX' JATTRI(1) = 2 MOCHDE=' CE CHAMP PAR POINTS A ETE CREE PAR LE SOUS-PROGRAMME'// # ' KBLOQ' IFOPOI=IFOUR NC=1 SEGINI,MSOUPO IPCHP(1)=MSOUPO NOCOMP(1)='FLX' NOHARM(1)=NIFOUR NBNN=1 NBELEM=NLAG SEGINI MELEME IGEOC=MELEME ITYPEL=1 N=NLAG SEGINI,MPOVAL IPOVAL=MPOVAL * * On parcourt CBLOQ pour remplir les sorties manquantes * NSOUPO=CBLOQ.IPCHP(/1) DO ISOUPO=1,NSOUPO MSOUP1=CBLOQ.IPCHP(ISOUPO) NC=MSOUP1.NOCOMP(/2) IPT1=MSOUP1.IGEOC MPOVA1=MSOUP1.IPOVAL NGEOC=IPT1.NUM(/2) DO IC=1,NC nompri=msoup1.nocomp(ic) IF (IPLAC.LE.0) THEN GOTO 9999 ENDIF melrig=irigel(1,iplac) ideb=ICNODE.LECT(IPLAC) DO I=1,NGEOC ideb=ideb+1 ilag=ilag+1 nulag=nulag+1 melrig.num(1,ideb)=nulag melrig.num(2,ideb)=ipt1.num(1,i) num(1,ilag)=nulag vpocha(ilag,1)=mpova1.vpocha(i,ic) ENDDO ICNODE.LECT(IPLAC)=ICNODE.LECT(IPLAC)+NGEOC ENDDO ENDDO segsup icnode segsup ncnode MBLOQ=MRIGID FBLOQ=MCHPOI * * Normal termination * RETURN * * Format handling * * * Error handling * 9999 CONTINUE WRITE(IOIMP,*) 'An error was detected in subroutine kbloq' RETURN * * End of subroutine KBLOQ * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales