C Rutina 101 C-------------------------------------------------------POS_REL_A_POT--- 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_POT(CNT,ELTP,ELT,NOD,ZCTO) C IMPLICIT NONE INCLUDE '_param.for' INCLUDE '_struct.for' C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C VARIABLES EXTERNAS CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C 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 CVAR : Contador de variables en temperatura 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 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) C IF(cnodA.NE.anod)THEN C CALL POS_NOD_CNT(cnodA,CNT(cntB),ELT,NOD, @ ZCTO.NDA_ELB(cnodA), @ ZCTO.NDA_iELB(cnodA), @ ZCTO.POSB(cnodA),DIS) C anod=cnodA C C CONTEO DE LAS VARIABLES EN TEMPERATURA 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)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 x IF(cvar.LT.(2*nnodA))THEN x WRITE(F_W,10104) CNT(cntA).NUM,CNT(cntB).NUM x WRITE( *,10104) CNT(cntA).NUM,CNT(cntB).NUM x END IF C WRITE(F_W,10105) WRITE( *,10105) C C FIN DE LA RUTINA C RETURN C C FORMATOS DE ESCRITURA. C 10100 FORMAT(/,2x,'ERROR 10100 - POS_REL_A_POT - Error Programa (#', @ i1,'#)') 10104 FORMAT(/,2x,'WARNING 10104 - POS_REL_A_POT',/, @ ' Puede no haber suficientes incognitas en', @ ' temperaturas para plantear',/,' las ecuaciones de', @ ' compatibilidad en el contorno ',i2,'.',/,' Se sugiere', @ ' refinar la discretizacion del contorno ',i2,'.') 10105 FORMAT(/,2x,'WARNING 10104 - POS_REL_A_POT',/, @ ' Los contornos de contacto deben ser mallados con un', @ ' numero de ',/,' nodos similar y de forma no conforme', @ ' para asegurar un resultado correcto ',/,' (sobre', @ ' todo si es el caso de materiales anisotropos o FGMs) .') C END C