1 : C FLUX SOURCE BP208322 13/07/30 21:15:09 7809 2 : 3 : C======================================================================= 4 : C= F L U X = 5 : C= ------- = 6 : C= = 7 : C= OPERATEUR CAST3M "FLUX" : = 8 : C= ------------------------- = 9 : C= FF1 = 'FLUX' MODL1 | VFLU MAI1 ( 'DIRE' POI1 ) | ( 'PEAU' ) ; = 10 : C= | CH1 | = 11 : C= | CH2 LMOTS | = 12 : C= = 13 : C= Cet operateur sert a calculer les flux nodaux equivalents a une = 14 : C= condition de flux de chaleur impose (CHPOINT au second membre). = 15 : C= = 16 : C= ARGUMENTS : = 17 : C= ----------- = 18 : C= MODL1 (MMODEL) Modele (global) associe a la structure = 19 : C= VFLU (FLOTTANT) Valeur algebrique du flux (constante) = 20 : C= MAI1 (MAILLAGE) Partie de la structure ou on impose le flux de = 21 : C= chaleur de valeur VFLU. = 22 : C= CH1 (CHPOINT ou MCHAML) Valeurs algebriques des flux = 23 : C= 'DIRE' (MOT) Indique que le flux est incline par rapport a = 24 : C= a la normale a la (sur)face = 25 : C= POI1 (POINT) Direction du flux dans le repere global = 26 : C= CH2 (CHPOINT ou MCHAML) Champ a plusieurs composantes = 27 : C= LMOTS (LISTMOTS) Liste des composantes de CH2, la premiere est = 28 : C= associee a la direction X, la deuxieme a Y et = 29 : C= la troisieme a Z (en 3D) = 30 : C= PEAU (MOT) Indique la peau etudie dans le cas des COQUES = 31 : C= = 32 : C= RESULTAT : = 33 : C= ---------- = 34 : C= FF1 (CHPOINT) Flux nodaux equivalents a la condition de flux = 35 : C= de nature DISCRETE = 36 : C= = 37 : C= CREATION / MODIF : = 38 : C= ------------------ = 39 : C= Creation : Denis ROBERT, le 25 janvier 1988. = 40 : C= Modif : BP, 30/07/2013 : ajout de la possibilité que CH1 et CH2 = 41 : C= soient des MCHAML = 42 : C= = 43 : C======================================================================= 44 : 45 : SUBROUTINE FLUX 46 : 47 : IMPLICIT INTEGER(I-N) 48 : IMPLICIT REAL*8 (A-H,O-Z) 49 : 50 : -INC CCOPTIO 51 : -INC SMCHPOI 52 : -INC SMLMOTS 53 : -INC SMMODEL 54 : 55 : PARAMETER (NP=2) 56 : CHARACTER*4 PEAU 57 : CHARACTER*4 MOPEAU(NP),MOFLU(1) 58 : CHARACTER*4 MOCOMP 59 : 60 : DATA MOPEAU / 'INFE','SUPE' / 61 : DATA MOFLU / 'DIRE' / 62 : 63 : C 1 - LECTURE DES ARGUMENTS DE L'OPERATEUR 64 : C ========================================== 65 : C 1.1 - Lecture OBLIGATOIRE du modele (IPMODL) 66 : C ===== 67 : MOTERR(1:8)=' MODELE ' 67 : CALL MESLIR(-137) 67 : CALL LIROBJ('MMODEL',IPMODL,1,iOK) 68 : IF (IERR.NE.0) RETURN 69 : C ===== 70 : C 1.2 - Lecture OBLIGATOIRE des flux de chaleur donnes par : 71 : C 1) un CHPOINT (IPCHPO) avec ou sans LISTMOTS (MLMOTX) 72 : C ou 2) un MCHAML (-IPCHPO) avec ou sans LISTMOTS (MLMOTX) 73 : C ou 3) un maillage (IPGEOM) et un flottant (VALFLU) 74 : C ===== 75 : IPCHPO=0 76 : MLMOTX=0 77 : VALFLU=0. 77 : CALL MESLIR(-164) 77 : CALL LIROBJ('CHPOINT',IPCHPO,0,iOK) 78 : IF (IERR.NE.0) RETURN 79 : cbp : on ajoute la possibilité de lire un mchaml 80 : IF (iOK.EQ.0) THEN 80 : CALL LIROBJ('MCHAML',IPCHPO,0,iOK) 81 : IPCHPO = -1*IPCHPO 82 : ENDIF 83 : IF (iOK.EQ.1) THEN 83 : CALL LIROBJ('LISTMOTS',MLMOTX,0,iOK) 84 : IF (IERR.NE.0) RETURN 85 : IF (MLMOTX.NE.0) THEN 86 : MLMOTS=MLMOTX 87 : SEGACT,MLMOTS 88 : NCOMP = MOTS(/2) 89 : SEGDES,MLMOTS 90 : IF (NCOMP.NE.IDIM) THEN 90 : CALL ERREUR(21) 91 : RETURN 92 : ENDIF 93 : ENDIF 94 : IPCHP2 = IPCHPO 95 : ELSE 95 : CALL MESLIR(-163) 95 : CALL LIRREE(VALFLU,1,iOK) 96 : IF (IERR.NE.0) RETURN 97 : MOTERR(1:8)='MAILLAGE' 97 : CALL MESLIR(-137) 97 : CALL LIROBJ('MAILLAGE',IPGEOM,1,iOK) 98 : IF (IERR.NE.0) RETURN 98 : CALL MANUC2(VALFLU,IPGEOM,1,IPCHP2) 99 : IF (IERR.NE.0) RETURN 100 : ENDIF 101 : C ===== 102 : C 1.3 - Lecture FACULTATIVE du MOT 'DIRE' et du vecteur associe 103 : C ===== 104 : NUMPOI=-1 104 : CALL LIRMOT(MOFLU,1,iOK,0) 105 : IF (iOK.NE.0) THEN 105 : CALL MESLIR(-162) 105 : CALL LIROBJ('POINT',NUMPOI,1,iOK) 106 : IF (IERR.NE.0) GOTO 10 107 : ENDIF 108 : C ===== 109 : C 1.4 - Lecture FACULTATIVE du MOT associe a la PEAU (cas des COQUES) 110 : C ===== 111 : PEAU=' ' 111 : CALL MESLIR (-260) 111 : CALL LIRMOT(MOPEAU,NP,LP,0) 112 : IF (IERR.NE.0) GOTO 10 113 : IF (LP.NE.0) PEAU=MOPEAU(LP) 114 : 115 : C 2 - EXTRACTION DE LA FORMULATION A TRAITER DU MODELE 116 : C ====================================================== 117 : C 2.1 - Verification de la formulation (unique) du modele 118 : C ===== 119 : ITHER = 0 120 : ITHHY = 0 121 : IELEC = 0 122 : IDIFF = 0 123 : MMODEL = IPMODL 124 : SEGACT,MMODEL 125 : NSOUS = KMODEL(/1) 126 : DO ISOUS = 1, NSOUS 127 : IMODEL = KMODEL(ISOUS) 128 : SEGACT,IMODEL 129 : NFOR = FORMOD(/2) 130 : IF (NFOR.EQ.1) THEN 131 : IF (FORMOD(1).EQ.'THERMIQUE') THEN 132 : ITHER = 1 133 : ELSE IF (FORMOD(1).EQ.'THERMOHYDRIQUE') THEN 134 : ITHHY = 1 135 : ELSE IF (FORMOD(1).EQ.'ELECTROSTATIQUE') THEN 136 : IELEC = 1 137 : ELSE IF (FORMOD(1).EQ.'DIFFUSION') THEN 138 : IDIFF = 1 139 : ELSE 140 : MOTERR(1:8) = FORMOD(1) 140 : CALL ERREUR(193) 141 : ENDIF 142 : ELSE IF (NFOR.GT.1) THEN 143 : MOTERR(1:8) = FORMOD(1) 143 : CALL ERREUR(193) 144 : ENDIF 145 : SEGDES,IMODEL 146 : ENDDO 147 : SEGDES,MMODEL 148 : IF (IERR.NE.0) GOTO 10 149 : IF ((ITHER+ITHHY+IELEC+IDIFF).NE.1) THEN 150 : *AV Affiner l'erreur ! 151 : write(ioimp,*) 'Une seule formulation dans le modele !' 151 : CALL ERREUR(21) 152 : GOTO 10 153 : ENDIF 154 : C ===== 155 : C 2.2 - Recuperation du modele de la formulation retenue 156 : C ===== 156 : IF (ITHER .EQ. 1) CALL ECRCHA('THERMIQUE') 156 : IF (ITHHY .EQ. 1) CALL ECRCHA('THERMOHYDRIQUE') 156 : IF (IELEC .EQ. 1) CALL ECRCHA('ELECTROSTATIQUE') 156 : IF (IDIFF .EQ. 1) CALL ECRCHA('DIFFUSION') 156 : CALL ECRCHA('FORM') 156 : CALL ECROBJ('MMODEL',IPMODL) 156 : CALL EXTRAI 156 : CALL LIROBJ('MMODEL',IPMODL,1,IRet) 157 : IF (IERR.NE.0) GOTO 10 158 : C ===== 159 : C 2.3 - Adequation nom de composante source & modele 160 : C ===== 161 : MOCOMP = ' ' 162 : IF (ITHER .EQ. 1) THEN 163 : IF (MOCOMP.EQ.' ') MOCOMP = 'Q ' 163 : IF (MOCOMP.NE.'Q ') CALL ERREUR(665) 164 : C* A finir pour la thermohydrique 165 : ELSE IF (ITHHY .EQ. 1) THEN 166 : MOCOMP = 'Q ' 167 : ELSE 168 : IPCOMP = 0 168 : CALL NOVARD(IPMODL,'FORC') 168 : CALL LIROBJ('LISTMOTS',IPCOMP,1,IRet) 169 : IF (IERR.NE.0) RETURN 170 : MLMOTS = IPCOMP 171 : SEGACT,MLMOTS 172 : NCOMP = MOTS(/2) 173 : * Normalement : NCOMP est non nul ! 174 : * Cas particulier de la diffusion en attendant un traitement adequat ? 175 : IF (IDIFF.EQ.1 .AND. NCOMP.GT.1) THEN 176 : write(ioimp,*) 'Modele de DIFFUSION a une seule quantite SVP' 176 : CALL ERREUR(21) 177 : ENDIF 178 : IF (MOCOMP.EQ.' ') MOCOMP = MOTS(1) 178 : CALL PLACE(MOTS,NCOMP,IRet,MOCOMP) 178 : IF (IRet.EQ.0) CALL ERREUR(665) 179 : SEGSUP,MLMOTS 180 : ENDIF 181 : IF (IERR.NE.0) GOTO 10 182 : 183 : C 3 - CALCUL DES FLUX NODAUX EQUIVALENTS 184 : C ======================================== 185 : IPFLUX=0 185 : CALL FLUX2(IPMODL,IPCHP2,NUMPOI,MOCOMP,PEAU,MLMOTX,IPFLUX) 186 : IF (IERR.NE.0) GOTO 10 187 : 188 : C 4 - ECRITURE DU CHPOINT RESULTAT 189 : C ================================== 190 : C= Attribution d'une nature DISCRETE au CHPOINT resultat 191 : IF (IPFLUX.NE.0) THEN 192 : MCHPOI=IPFLUX 193 : SEGACT,MCHPOI*MOD 194 : NAT=MAX(1,JATTRI(/1)) 195 : NSOUPO=IPCHP(/1) 196 : SEGADJ,MCHPOI 197 : JATTRI(1)=2 198 : SEGDES,MCHPOI 199 : IPFLUX=MCHPOI 199 : CALL ECROBJ('CHPOINT',IPFLUX) 200 : ENDIF 201 : 202 : C 5 - MENAGE : Destruction eventuelle de CHPOINT intermediaire 203 : C ============== 204 : 10 CONTINUE 204 : IF (IPCHPO.EQ.0) CALL DTCHPO(IPCHP2) 205 : 206 : RETURN 207 : END 208 : 209 : 210 : 211 :
© Cast3M 2003 - All rights reserved.
Disclaimer