1 : C TDIAG SOURCE CHAT 09/10/09 21:25:19 6519 2 : SUBROUTINE TDIAG (IPTAB1) 3 : C 4 : C*********************************************************************** 5 : C 6 : C 7 : C FONCTION: 8 : C --------- 9 : C 10 : C Discrétisation de l'opération IDENTITE en "0D" sur des 11 : C éléments de type POINT. 12 : C 13 : C 14 : C ENTREE : 15 : C ---------- 16 : C 17 : C IPTAB1 : TABLE de soustype 'OPER_0D' contenant les indices 18 : C suivants : 19 : C 20 : C TAB1 . 'MAILLAGE': maillage des connectivités entre le spg de 21 : C l'inc. primale et le spg de l'inc. duale 22 : C (type MAILLAGE). 23 : C TAB1 . 'INCO' : TABLE de soustype 'INCO' contenant l'ensemble 24 : C des champs à l'itération précédant l'itération 25 : C courante (type ENTIER). 26 : C TAB1 . 'COEF' : Valeurs de la diagonale ou des coefficients de 27 : C couplage (type CHPOINT ou MOT). 28 : C TAB1 . 'PRIMAL' : Nom de l'inconnue primale (doit être un indice 29 : C de la table de soustype 'INCO' (type MOT). 30 : C TAB1 . 'DUAL' : Nom de l'inconnue duale (doit être un indice de 31 : C la table de soustype 'INCO') (type MOT). 32 : C TAB1 . 'TYPEL' : Mot indiquant quel type de spg on a entre l'inc. 33 : C primale et l'inc. duale (type MOT). 34 : C 3 possibilités pour l'instant : 35 : C - TAB1 . 'TYPEL' = 'P=D' (ou 'D=P') 36 : C ==> spg primale = spg duale 37 : C - TAB1 . 'TYPEL' = 'PD' 38 : C - TAB1 . 'TYPEL' = 'DP' 39 : C Selon que TAB1 . 'MAILLAGE' soit un maillage 40 : C entre Primale et Duale ou l'inverse 41 : C 42 : C RESULTATS : 43 : C ---------- 44 : C 45 : C TAB1 . 'LHS' : Matrice élémentaire associée à l'opération 46 : C (type RIGIDITE). 47 : C 48 : C REMARQUES: 49 : C ---------- 50 : C 51 : C Si aucun nom de composante primale n'est donné le résultat est 52 : C une matrice diagonale. 53 : C Si un nom de composante primale, différent du nom de la composante 54 : C duale, est donné, le résultat est une matrice de couplage. 55 : C Si les supports des composantes primales et duales sont différents 56 : C le résultat sera également une matrice de couplage. 57 : C 58 : C 59 : C AUTEUR, DATE DE CREATION: 60 : C ------------------------- 61 : C 62 : C Laurent DADA décembre 1996 63 : C 64 : C AUTEUR, DATE DE MODIFICATION: 65 : C ----------------------------- 66 : C 67 : C Alexandre BLEYER Novembre 2002 68 : C Modifications : - creation des matrices elementaires simplifiee 69 : C - utilisation d'un maillage de connectivite 70 : C entre l'inc. duale et l'inc. primale 71 : C 72 : C 73 : C LANGAGE: 74 : C -------- 75 : C 76 : C ESOPE + FORTRAN77 77 : C 78 : C*********************************************************************** 79 : C 80 : IMPLICIT INTEGER(I-N) 81 : IMPLICIT REAL*8 (A-H,O-Z) 82 : C 83 : -INC CCOPTIO 84 : -INC CCGEOME 85 : -INC SMCOORD 86 : -INC SMTABLE 87 : POINTEUR IPTAB1.MTABLE,IPTABI.MTABLE 88 : -INC SMCHPOI 89 : -INC SMELEME 90 : POINTEUR IPTMAIL.MELEME 91 : -INC SMRIGID 92 : C 93 : CHARACTER*8 TYPE,MOTI,MOT1,NOMPR1,NOMDU1,NOSUP1,NOSUD1,NOMMU1 94 : CHARACTER*8 TYPEL,MOTYP,TYPOBJ 95 : CHARACTER*4 NAMD1,NAMP1 96 : 97 : C Recuperation du maillage des connectivite 98 : TYPOBJ='MAILLAGE' 98 : CALL ACMO (IPTAB1,'MAILLAGE',TYPOBJ,IPTMAIL) 99 : IF (IERR.NE.0) RETURN 100 : C 101 : C Lecture de la table INCO dans la table OPER_0D 102 : C 103 : TYPE = 'TABLE ' 103 : CALL ACMO (IPTAB1,'INCO',TYPE,IPTABI) 104 : IF (IERR.NE.0) RETURN 105 : C 106 : MOTI = 'SOUSTYPE' 106 : CALL ACMM (IPTABI,MOTI,MOT1) 107 : IF (IERR.NE.0) RETURN 108 : IF (MOT1(1:4).NE.'INCO') THEN 109 : MOTERR(1:8) = 'INCO ' 110 : MOTERR(9:16) = 'INCO ' 110 : CALL ERREUR (790) 111 : RETURN 112 : ENDIF 113 : C 114 : C Récupération du CHPOINT multiplicateur 115 : C 116 : TYPE = ' ' 116 : CALL ACMO (IPTAB1,'COEF',TYPE,IPR1) 117 : IF (IERR.NE.0) RETURN 118 : IF (TYPE.EQ.'MOT ') THEN 118 : CALL ACMM (IPTAB1,'COEF',NOMMU1) 119 : IF (IERR.NE.0) RETURN 120 : C récupération du CHPOINT multiplicateur dans la table INCO 121 : TYPE = 'CHPOINT ' 121 : CALL ACMO (IPTABI,NOMMU1,TYPE,IPCH1) 122 : IF (IERR.NE.0) RETURN 123 : ELSEIF (TYPE.EQ.'CHPOINT ') THEN 124 : IPCH1 = IPR1 125 : ELSE 126 : MOTERR(1:8) = 'COEF ' 127 : MOTERR(9:16) = TYPE 127 : CALL ERREUR (787) 128 : RETURN 129 : ENDIF 130 : C 131 : C Lecture de l'inconnue PRIMALE 132 : C 133 : TYPE = ' ' 133 : CALL ACMO (IPTAB1,'PRIMAL',TYPE,IPR1) 134 : IF (TYPE.EQ.'MOT ') THEN 134 : CALL ACMM (IPTAB1,'PRIMAL',NOMPR1) 135 : IF (IERR.NE.0) RETURN 136 : ENDIF 137 : C 138 : C Lecture de l'inconnue DUALE 139 : C 140 : TYPE = ' ' 140 : CALL ACMO (IPTAB1,'DUAL',TYPE,IDU1) 141 : IF (TYPE.EQ.'MOT ') THEN 141 : CALL ACMM (IPTAB1,'DUAL',NOMDU1) 142 : IF (IERR.NE.0) RETURN 143 : ENDIF 144 : C 145 : C Lecture de l'ordre PRIMAL/DUAL par rapport au 146 : C maillage des connectivites 147 : C 148 : TYPE = ' ' 148 : CALL ACMO (IPTAB1,'TYPEL',TYPE,ITYPL1) 149 : IF (TYPE.EQ.'MOT ') THEN 149 : CALL ACMM (IPTAB1,'TYPEL',TYPEL) 150 : IF (IERR.NE.0) RETURN 151 : ENDIF 152 : C 153 : C Suivant TYPEL, on construit les differentes matrices 154 : C 155 : IF ((TYPEL.EQ.'P=D').OR.(TYPEL.EQ.'D=P')) THEN 155 : CALL TDIAG1(NOMDU1,NOMPR1,IPTMAIL,IPCH1,MRIGID) 156 : IF (IERR.NE.0) RETURN 157 : ELSEIF(TYPEL.EQ.'PD') THEN 158 : ITY1=1 158 : CALL TDIAG2(ITY1,NOMDU1,NOMPR1,IPTMAIL,IPCH1,MRIGID) 159 : IF (IERR.NE.0) RETURN 160 : ELSEIF(TYPEL.EQ.'DP') THEN 161 : ITY1=2 161 : CALL TDIAG2(ITY1,NOMDU1,NOMPR1,IPTMAIL,IPCH1,MRIGID) 162 : IF (IERR.NE.0) RETURN 163 : ELSE 163 : CALL ERREUR (19) 164 : RETURN 165 : ENDIF 166 : C 167 : C Ecriture du résultat - Remplissage de l'indice 'LHS' 168 : C 169 : TYPE = 'RIGIDITE' 169 : CALL ECMO (IPTAB1,'LHS',TYPE,MRIGID) 170 : IF (IERR.NE.0) RETURN 171 : C 172 : END 173 : 174 : 175 : 176 : 177 : 178 : 179 : 180 : 181 : 182 : 183 : 184 :
© Cast3M 2003 - All rights reserved.
Disclaimer