C Rutina 101 C-----------------------------------------------------------POS_REL_A--- C C SUBRUTINA POS_REL_A C C CALCULO DE LA POSICION DEL CONTORNO B CON LA QUE CONTACTAN C LOS NODOS DEL CONTORNO A C SUBROUTINE POS_REL_A(PRB,CNT,ELTP,ELT,NOD,ZCTO) C IMPLICIT NONE INCLUDE '_param.for' INCLUDE '_struct.for' C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C VARIABLES EXTERNAS CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C PRB : Variables del problema RECORD /S_problema/ PRB C CNT : Contornos del problema RECORD /S_contorno/ CNT(N_MAX_CNT) C ELTP : Tipos de elemento RECORD /S_tipelt/ ELTP(N_MAX_TPEL) C ELT : Elementos del problema RECORD /S_elemento/ ELT(N_MAX_ELT) C NOD : Nodos del problema RECORD /S_nodo/ NOD(N_MAX_NOD) C ZCTO : Zona de contacto RECORD /S_zncto/ ZCTO C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C VARIABLES INTERNAS CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C I,J,K : Contadores INTEGER I,J,K C CNTA,CNTB : Contornos A y B de la zona de contacto INTEGER CNTA,CNTB C Contadores INTEGER ANOD,CELTA,CELTPA,CNODA C DIS : Distancia del nodo al elemento correspondiente REAL*8 DIS C ctbcA : Condicion de contacto en el nodo de A INTEGER ctbcA C CVAR : Contador de variables en desplazamientos INTEGER CVAR C NNODA : Contador de nodos INTEGER NNODA C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C VALORES INICIALES CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C anod=0 cvar=0 nnoda=0 C cntA=ZCTO.CNT(1) cntB=ZCTO.CNT(2) C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C CALCULO DE LAS POSICIONES RELATIVAS ENTRE C LOS NODOS DE UN SOLIDO Y LOS ELEMENTOS DEL OTRO C Y RECUENTO DE VARIABLES EN DESPLAZAMIENTOS CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C Bucle que recorre los elementos del contorno A C DO i=1 ,CNT(cntA).NELT celtA=CNT(cntA).ELT(i) celtpA=ELT(celtA).TIP C C Bucle que recorre los nodos del elemento C DO j=1 , ELTP(celtpA).NNI cnodA=ELT(celtA).NI(j) ctbcA=NOD(cnodA).CBC(3) C C ELECCION DEL ALGORITMO C IF(cnodA.NE.anod)THEN C SELECT CASE(PRB.TF.TIP) C CASE(11,21) C C SOLUCION DIRECTA : Calculo las posiciones relativas C CALL POS_NOD_CNT(cnodA,CNT(cntB),ELT,NOD, @ ZCTO.NDA_ELB(cnodA), @ ZCTO.NDA_iELB(cnodA), @ ZCTO.POSB(cnodA),DIS) C CASE(12,22,13,23) C C ALGORITMO INCREMENTAL CON ESCALADO DE LA SOLUCION C Calculo las posiciones relativas la primera vez C Se actualizan despues al comprobar el contacto C xx IF((ZCTO.NDA_ELB(cnodA)).EQ.0)THEN CALL POS_NOD_CNT(cnodA,CNT(cntB),ELT,NOD, @ ZCTO.NDA_ELB(cnodA), @ ZCTO.NDA_iELB(cnodA), @ ZCTO.POSB(cnodA),DIS) xx END IF C CASE(14,24) C C ALGORITMO ITERATIVO C C Calculo las posiciones relativas y la distancia al C contorno de enfrente la primera vez.Se actualizan C despues al comprobar el contacto C IF((ZCTO.NDA_ELB(cnodA)).EQ.0)THEN C CALL POS_NOD_CNT(cnodA,CNT(cntB),ELT,NOD, @ ZCTO.NDA_ELB(cnodA), @ ZCTO.NDA_iELB(cnodA), @ ZCTO.POSB(cnodA),DIS) C IF((NOD(cnodA).CBC(3)).EQ.1)THEN ZCTO.DISA(cnodA)=DIS END IF C END IF C CASE DEFAULT WRITE(F_W,10102) PRB.TF.TIP WRITE (*,10102) PRB.TF.TIP STOP END SELECT C anod=cnodA C C CONTEO DE LAS VARIABLES EN DESPLAZAMIENTOS C IF(ZCTO.NDA_ELB(cnodA).NE.0)THEN nnodA=nnodA+1 DO k=1,NOD(cnodA).NINC IF(NOD(cnodA).VAR(k).EQ.1.OR.NOD(cnodA).VAR(k).EQ.2.OR. @ NOD(cnodA).VAR(k).EQ.3.OR.NOD(cnodA).VAR(k).EQ.4.OR. @ NOD(cnodA).VAR(k).EQ.9.OR.NOD(cnodA).VAR(k).EQ.10.OR. @ NOD(cnodA).VAR(k).EQ.11)THEN cvar=cvar+1 END IF END DO END IF C END IF C C Fin bucle que recorre los nodos del elemento C END DO C C Fin bucle que recorre los elementos del contorno A C END DO C sobra IF(cvar.LT.(3*nnodA))THEN sobra WRITE(F_W,10104) CNT(cntA).NUM,CNT(cntB).NUM sobra WRITE( *,10104) CNT(cntA).NUM,CNT(cntB).NUM sobra END IF C C FIN DE LA RUTINA C RETURN C C FORMATOS DE ESCRITURA. C 10100 FORMAT(/,2x,'ERROR 10100 - POS_REL_A - Error Programa (#', @ i1,'#)') x10101 FORMAT(/,2x,'ERROR 10101 - POS_REL_A',/, x @ ' Tipo de elemento (',i2,') no implementado.') x10102 FORMAT(/,2x,'WARNING 10102 - POS_REL_A',/, x @ ' El nodo (',i4,') pertenece al contorno A de una zona', x @ ' de contacto',/,' y esta en el interior del solido B.', x @ /,' Penetracion: ',e8.2,'.') x10103 FORMAT(/,2x,'ERROR 10103 - POS_REL_A',/, x @ ' Numero de ecuaciones mayor de lo permitido (',i4,').') sobra10104 FORMAT(/,2x,'WARNING 10104 - POS_REL_A',/, sobra @ ' Puede no haber suficientes incognitas en', sobra @ ' desplazamientos para plantear',/,' las ecuaciones de', sobra @ ' compatibilidad en el contorno ',i2,'.',/,' Se sugiere', sobra @ ' refinar la discretizacion del contorno ',i2,'.') x10105 FORMAT(/,2x,'WARNING 10105 - POS_REL_A',/, x @ ' El nodo (',i4,') pertenece al contorno A de una zona', x @ ' de contacto',/,' y esta en puesto en contacto, pero', x @ ' esta separado del solido B.',/,' Distancia: ',e8.2,'.') x10106 FORMAT(/,2x,'ERROR 10106 - POS_REL_A',/, x @ ' El nodo (',i4,') pertenece a la zona libre del ', x @ 'contorno A de una zona de contacto',/,' y esta en el ', x @ 'interior del solido B.',/,' Penetracion: ',e8.2,'.') 10102 FORMAT(/,2x,'ERROR 00002 - MAIN - Tipo de formulacion (', @ i2,') erronea.') C END C e-REdING. Biblioteca de la Escuela Superior de Ingenieros de Sevilla.


ANÁLISIS DEL PROBLEMA TERMOELÁSTICO DE CONTACTO MEDIANTE EL MÉTODO DE LOS ELEMENTOS DE CONTORNO CON MALLAS CONFORMES Y NO CONFORMES

: MORALES SIERRA, DIÓGENES
: Ingeniería Industrial
Contenido del proyecto: