1 : C CONDU SOURCE FANDEUR 12/07/05 21:15:09 7420 2 : 3 : SUBROUTINE CONDU 4 : 5 : IMPLICIT INTEGER(I-N) 6 : IMPLICIT REAL*8 (A-H,O-Z) 7 : 8 : -INC CCOPTIO 9 : -INC SMCHAML 10 : -INC SMMODEL 11 : POINTEUR MODTHR.MMODEL,MODRAY.MMODEL,MODCNV.MMODEL,MODTHM.MMODEL 12 : POINTEUR MODIEL.MMODEL 13 : -INC SMRIGID 14 : 15 : IPRIGI = 0 16 : IPMODR = 0 17 : IPMODC = 0 18 : 19 : C ========================================= 20 : C 1- LECTURE DES ARGUMENTS DE L'OPERATEUR 21 : C ========================================= 22 : C 1.1 - Lecture OBLIGATOIRE du modele (MODORI) 23 : C ===== 24 : MOTERR(1:8)=' MODELE ' 24 : CALL MESLIR(-137) 24 : CALL LIROBJ('MMODEL',MODORI,1,IRet) 25 : IF (IERR.NE.0) RETURN 26 : C ===== 27 : C 1.2 - Lecture OBLIGATOIRE du champ de caracteristiques (MCHORI) 28 : C ===== 28 : CALL MESLIR(-135) 28 : CALL LIROBJ('MCHAML',MCHORI,1,IRet) 29 : IF (IERR.NE.0) RETURN 30 : 31 : C ========================================= 32 : C 2- QUELQUES VERIFICATIONS DES ARGUMENTS 33 : C ========================================= 34 : C 2.1 - Verification du type du champ (MCHORI) 35 : C ===== 36 : MCHELM = MCHORI 37 : SEGACT,MCHELM 38 : IF (TITCHE(1:8).NE.'CARACTER') THEN 39 : SEGDES,MCHELM 40 : MOTERR(1:16) = 'CARACTERISTIQUES' 40 : CALL ERREUR(291) 41 : RETURN 42 : ENDIF 43 : C ===== 44 : C 2.2 - Verification du contenu du modele (MODORI) 45 : C Separation des formulations DIFFUSION & ELECTROSTATIQUE 46 : C et des formulations THERMIQUE & THERMOHYDRIQUE 47 : C ===== 48 : MMODEL = MODORI 49 : SEGACT,MMODEL 50 : NSOUS = KMODEL(/1) 51 : N1 = NSOUS 52 : SEGINI,MODIEL,MODTHM,MODRAY,MODCNV,MODTHR 53 : IDIEL = 0 54 : ITHEM = 0 55 : IRAYE = 0 56 : ICONV = 0 57 : ITHER = 0 58 : DO isous = 1, NSOUS 59 : IMODEL = KMODEL(isous) 60 : SEGACT,IMODEL 61 : IF (FORMOD(1).EQ.'DIFFUSION ' .OR. 62 : & FORMOD(1).EQ.'ELECTROSTATIQUE ') THEN 63 : IDIEL = IDIEL + 1 64 : MODIEL.KMODEL(IDIEL) = IMODEL 65 : ELSE IF (FORMOD(1).EQ.'THERMOHYDRIQUE ') THEN 66 : ITHEM = ITHEM + 1 67 : MODTHM.KMODEL(ITHEM) = IMODEL 68 : ELSE IF (FORMOD(1).EQ.'THERMIQUE' ) then 69 : NMAT = MATMOD(/2) 69 : CALL PLACE(MATMOD,NMAT,ipl,'RAYONNEMENT') 70 : IF (ipl.NE.0) THEN 71 : IRAYE = IRAYE + 1 72 : MODRAY.KMODEL(IRAYE) = IMODEL 73 : ELSE 73 : CALL PLACE(MATMOD,NMAT,ipl,'CONVECTION') 74 : IF (ipl.NE.0) THEN 75 : ICONV = ICONV + 1 76 : MODCNV.KMODEL(ICONV) = IMODEL 77 : ELSE 78 : ITHER = ITHER + 1 79 : MODTHR.KMODEL(ITHER) = IMODEL 80 : ENDIF 81 : ENDIF 82 : ELSE 83 : N1 = N1 - 1 84 : ENDIF 85 : ENDDO 86 : C Verification que le modele MODORI contient au moins un sous-modele 87 : C dont la formulation est traitee ici ! 88 : IF (N1.LE.0) THEN 89 : MOTERR(1:8) = 'MMODEL ' 90 : INTERR(1) = MODORI 90 : CALL ERREUR(356) 91 : GOTO 9991 92 : ENDIF 93 : 94 : IF (IDIEL.GT.0) THEN 95 : C ======================================================= 96 : C 3- CONSTRUCTION DE LA MATRICE DE CONDUCTIVITE 97 : C POUR LES FORMULATIONS DIFFUSION ET ELECTROSTATIQUE 98 : C ======================================================= 99 : C Modele contenant uniquement des formulations DIFFUSION et ELECTROSTATIQUE 100 : N1 = IDIEL 101 : SEGADJ,MODIEL 102 : IPMODR = MODIEL 103 : C Calcul de la matrice : tout est fait dans RIGI1 104 : ipch = 0 105 : imat = 1 105 : CALL RIGI1(IPMODR,MCHORI,ipch,imat,IPRIGI,IRET) 106 : IF (IRET.NE.1) GOTO 9991 107 : MRIGID = IPRIGI 108 : ENDIF 109 : 110 : NSOUS = ITHEM + IRAYE + ICONV + ITHER 111 : IF (NSOUS.GT.0) THEN 112 : C ====================================================== 113 : C 4- CONSTRUCTION DE LA MATRICE DE CONDUCTIVITE 114 : C POUR LES FORMULATIONS THERMIQUE ET THERMOHYDRIQUE 115 : C ====================================================== 116 : C 4.1 - Initialisation de la matrice si necessaire 117 : C ===== 118 : IF (IPRIGI.EQ.0) THEN 119 : NRIGEL = 0 120 : SEGINI,MRIGID 121 : MTYMAT = 'RIGIDITE' 122 : ICHOLE = 0 123 : IMGEO1 = 0 124 : IMGEO2 = 0 125 : C* IFORIG = IFOMOD 126 : IFORIG = IFOUR 127 : ISUPEQ = 0 128 : IPRIGI = MRIGID 129 : ELSE 130 : MRIGID = IPRIGI 131 : SEGACT,MRIGID*MOD 132 : ENDIF 133 : C ===== 134 : C 4.2 - Modele avec uniquement des formulations THERMIQUE et THERMOHYDRIQUE 135 : C ===== 136 : N1 = NSOUS 137 : SEGINI,MMODEL 138 : isous = 0 139 : IF (ITHEM.GT.0) THEN 140 : DO i = 1, ITHEM 141 : isous = isous + 1 142 : KMODEL(isous) = MODTHM.KMODEL(i) 143 : ENDDO 144 : ENDIF 145 : IF (IRAYE.GT.0) THEN 146 : DO i = 1, IRAYE 147 : isous = isous + 1 148 : KMODEL(isous) = MODRAY.KMODEL(i) 149 : ENDDO 150 : ENDIF 151 : IF (ICONV.GT.0) THEN 152 : DO i = 1, ICONV 153 : isous = isous + 1 154 : KMODEL(isous) = MODCNV.KMODEL(i) 155 : ENDDO 156 : ENDIF 157 : IF (ITHER.GT.0) THEN 158 : DO i = 1, ITHER 159 : isous = isous + 1 160 : KMODEL(isous) = MODTHR.KMODEL(i) 161 : ENDDO 162 : ENDIF 163 : IPMODC = MMODEL 164 : C ===== 165 : C 4.3 - Reduction du champ au modele precedemment reduit 166 : C ===== 167 : MCHELM = MCHORI 167 : CALL REDUAF(MCHORI,IPMODC,IPCHEC,0,IRET,KERRE) 168 : SEGDES,MCHELM 169 : IF (IRET.NE.1) THEN 169 : CALL ERREUR(KERRE) 170 : GOTO 9990 171 : ENDIF 172 : ISUPCH = 0 172 : CALL QUESUP(IPMODC,IPCHEC,6,0,ISUPCH,IRET) 173 : IF (ISUPCH.GT.1) GOTO 9990 174 : C NB : La verification du support est effectuee ici pour l'instant, 175 : C car tous les formulations considerees ici s'appuient sur le 176 : C meme support (IRET = 1, 2 ou 6). 177 : 178 : C ===== 179 : C 4.4 - Remplissage de la matrice pour chaque modele concerne 180 : C ===== 181 : c Formulation thermohydrique 182 : IF (ITHEM.GT.0) THEN 183 : DO i = 1, ITHEM 184 : IMODEL = MODTHM.KMODEL(i) 185 : SEGACT,IMODEL 185 : CALL THCOND(IMODEL,IPCHEC,ISUPCH, IPRIGI) 186 : IF (IERR.NE.0) GOTO 9990 187 : ENDDO 188 : ENDIF 189 : c Formulation rayonnement 190 : IF (IRAYE.GT.0) THEN 191 : MCHELM = IPCHEC 192 : DO i = 1, IRAYE 193 : IMODEL = MODRAY.KMODEL(i) 194 : SEGACT,IMODEL 195 : * on accepte le sous-modele de rayonnement que si le mchaml 196 : * correspondant contient une composante H ! 197 : SEGACT,MCHELM 198 : imaray = IMACHE(/1) 199 : DO j = 1, imaray 200 : IF (imache(j).eq.IMAMOD .AND. conche(j).eq.CONMOD) then 201 : mchaml = ichaml(j) 202 : SEGACT,mchaml 202 : CALL PLACE(nomche,nomche(/2),ipl,'H ') 203 : IF (ipl.NE.0) then 203 : CALL TCONVE(IMODEL,IPCHEC,ISUPCH, IPRIGI) 204 : IF (IERR.NE.0) GOTO 9990 205 : GOTO 4420 206 : ENDIF 207 : SEGDES,mchaml 208 : ENDIF 209 : ENDDO 210 : 4420 CONTINUE 211 : ENDDO 212 : SEGDES,MCHELM 213 : ENDIF 214 : c Formulation convection 215 : IF (ICONV.GT.0) THEN 216 : DO i = 1, ICONV 217 : IMODEL = MODCNV.KMODEL(i) 218 : SEGACT,IMODEL 218 : CALL TCONVE(IMODEL,IPCHEC,ISUPCH, IPRIGI) 219 : IF (IERR.NE.0) GOTO 9990 220 : ENDDO 221 : ENDIF 222 : IF (ITHER.GT.0) THEN 223 : DO i = 1, ITHER 224 : IMODEL = MODTHR.KMODEL(i) 225 : SEGACT,IMODEL 225 : CALL TCONDU(IMODEL,IPCHEC,ISUPCH, IPRIGI) 226 : IF (IERR.NE.0) GOTO 9990 227 : ENDDO 228 : ENDIF 229 : ENDIF 230 : 231 : NRIGEL = IRIGEL(/2) 232 : IF (NRIGEL.EQ.0) THEN 232 : CALL ERREUR(19) 233 : ENDIF 234 : 235 : 9990 CONTINUE 236 : IF (IERR.NE.0) THEN 237 : SEGSUP,MRIGID 238 : ELSE 239 : SEGDES,MRIGID 239 : CALL ECROBJ('RIGIDITE',IPRIGI) 240 : ENDIF 241 : IF (IPMODC.NE.0) THEN 242 : MMODEL = IPMODC 243 : SEGSUP,MMODEL 244 : ENDIF 245 : 9991 CONTINUE 246 : MMODEL = MODORI 247 : DO isous = 1, NSOUS 248 : IMODEL = KMODEL(isous) 249 : SEGDES,IMODEL 250 : ENDDO 251 : SEGDES,MMODEL 252 : SEGSUP,MODIEL,MODTHR,MODTHM,MODRAY,MODCNV 253 : 254 : RETURN 255 : END 256 : 257 :
© Cast3M 2003 - All rights reserved.
Disclaimer