Télécharger fform1.eso

Retour à la liste

Numérotation des lignes :

fform1
  1. C FFORM1 SOURCE OF166741 24/10/03 21:15:14 12022
  2.  
  3. C
  4. C SOUS-PROGRAMME ASSOCIE A L'OPERATEUR FFOR
  5. C (LECTURE ET VERIFICATION DES DONNEES PUIS AIGUILLAGE)
  6. C
  7. C__________________________________________________________________
  8. C APPEL :
  9. C
  10. C 3D CH2 = FFOR MODL1 (ENTI1) (FLOT1) ('SYME' P1 P2 P3) ('NNOR') ;
  11. C 2D CH2 = FFOR MODL1 (ENTI1) (FLOT1) ('SYME' P1 P2 ) ('NNOR') ;
  12. C CONV CH2 = FFOR MODL1 (ENTI1) 'CVXE' ;
  13. C AXIS CH2 = FFOR MODL1 (ENTI1) ('NGAU' ENTI2) ('CVXE') ('NNOR') ;
  14. C
  15. C
  16. C 03/96 : option supplementaire pour tenir compte de l'absorption du
  17. C milieu:
  18. C 'ABSO' EXTINC ;
  19. C pour simplifier la lecture on demande que ce coef. soit negatif
  20. C
  21. C 09/02: on donne le nombre de points d'integration pour le traitement
  22. C des faces proches en AXIS (cf 'NGAU')
  23. C__________________________________________________________________
  24. C OPERANDES :
  25. C
  26. C CH2 'MCHAML' FACTEURS DE FORME
  27. C MODL1 'MMODEL' STRUCTURE MODELISEE (CONTOUR OU ENVELOPPE)
  28. C ENTI1 'ENTIER' DISCRETISATION ANGULAIRE EN 2D-PLAN OU
  29. C 3D-CAS GENERAL
  30. C FLOT1 'FLOTTANT' FACTEUR DE DECOUPAGE DES ELEMENTS
  31. C CVXE 'MOT CLE' MOT CLE POUR LES CAVITES CONVEXES
  32. C SYME 'MOT CLE' MOT CLE DEFINISSANT UN AXE OU UN PLAN
  33. C DE SYMETRIE
  34. C P1,P2,P3 'POINT' POINTS DEFINISSANT L'AXE OU LE PLAN DE
  35. C SYMETRIE
  36. C NGAU 'MOT CLE' EN AXISYMETRIQUE
  37. C ENTI2 'ENTIER' nombre de points d'integration
  38. C
  39. C ABSO mot-clé pour un milieu absorbant
  40. C EXTINC coefficient d'absorption
  41. C__________________________________________________________________
  42. C
  43. SUBROUTINE FFORM1(mymod,mchelm,ichfac)
  44.  
  45. IMPLICIT INTEGER(I-N)
  46. IMPLICIT REAL*8 (A-H,O-Z)
  47.  
  48. -INC PPARAM
  49. -INC CCOPTIO
  50.  
  51. -INC SMMODEL
  52. POINTEUR MYMOD.MMODEL
  53. -INC SMCHAML
  54.  
  55. C ___________________________________________________________
  56. C Stockage de numeros de points
  57. SEGMENT,LISTEN
  58. INTEGER LECT(NBE)
  59. ENDSEGMENT
  60. POINTEUR IAXE.LISTEN
  61. C ___________________________________________________________
  62. C Stockage d'informations concernant le type des éléments
  63. SEGMENT,INFOEL
  64. LOGICAL KCOQ(N1),KQUAD(N1)
  65. ENDSEGMENT
  66. C ___________________________________________________________
  67. C
  68. CHARACTER*4 MOTCLE
  69. LOGICAL MCVX,MSYM,MGAUS,MABS
  70. C
  71. C__________________________________________________________________
  72. C
  73. MCVX = .FALSE.
  74. MSYM = .FALSE.
  75. MGAUS = .FALSE.
  76. MABS = .FALSE.
  77. KNOR = 1
  78. IAXE = 0
  79. EXTINC = -1.D-5
  80. C
  81. C -----------------------------------------------------
  82. C On va vérifier que le TYPE DES ÉLÉMENTS des maillages
  83. C sur lequel repose le modèle CONVIENT .
  84. C et le type de modèle
  85. C
  86. N1 = MYMOD.KMODEL(/1)
  87. iy=0
  88. 20 CONTINUE
  89. iy=iy+1
  90. if(iy.gt.mymod.kmodel(/1)) then
  91. call erreur (19)
  92. return
  93. endif
  94. imodel=mymod.kmodel(iy)
  95. if (formod(1).ne.'THERMIQUE') goto 20
  96. nmat=matmod(/2)
  97. if (matmod(2).ne.'RAYONNEMENT') goto 20
  98. if (matmod(3).ne.'CAVITE') go to 20
  99. if (imatee.ne.4) go to 20
  100. inatu=inatuu
  101. * pour la valeur de inatu voir subroutine nomate
  102. if( inatu.eq.2)then
  103. knor=0
  104. elseif(inatu.eq.3) then
  105. MSYM = .TRUE.
  106. elseif(inatu.eq.4) then
  107. MCVX = .TRUE.
  108. elseif(inatu.eq.5) then
  109. MSYM = .TRUE.
  110. MCVX = .TRUE.
  111. elseif(inatu.eq.6) then
  112. knor=0
  113. MCVX = .TRUE.
  114. elseif(inatu.eq.7) then
  115. MSYM = .TRUE.
  116. knor=0
  117. elseif(inatu.eq.8) then
  118. MSYM = .TRUE.
  119. MCVX = .TRUE.
  120. knor=1
  121. elseif(inatu.ne.1) then
  122. write(6,*) ' pb dans fforme'
  123. write(6,*) ' inatu ' , inatu
  124. call erreur(5)
  125. endif
  126. imail= imamod
  127. ngax=ivamod(1)
  128. int=ivamod(2)
  129. npax=20
  130. npax=max ( int,npax)
  131. SEGINI INFOEL
  132. * recherche du coefficient d'absorption
  133. *
  134. if(mchelm.ne.0) then
  135. do iy=1,imache(/1)
  136. * write(6,*) imamod,imache(iy),conche(iy),conmod
  137. if( imache(iy).eq.imamod.and.conche(iy).eq.conmod) then
  138. mchaml=ichaml(iy)
  139. do it=1,nomche(/2)
  140. if( nomche(it).eq.'CABS' ) THEN
  141. melval=ielval(it)
  142. extinc=-velche(1,1)
  143. mabs=.true.
  144. go to 8
  145. endif
  146. enddo
  147. endif
  148. enddo
  149. 8 continue
  150. endif
  151. * write(6,*) ' extinc',extinc
  152. * write(6,*) ' knor mcvx , msym , mgaus mabs'
  153. * write(6,*) knor,mcvx , msym , mgaus,mabs
  154.  
  155. DO 10 ITYP=1,N1
  156. C
  157. IMODEL = MYMOD.KMODEL(ITYP)
  158. C
  159. C la formulation est simple a priori
  160. C
  161. IF(FORMOD(1).NE.'THERMIQUE'.or.matmod(2).ne.'RAYONNEMENT') THEN
  162. CALL ERREUR(21)
  163. RETURN
  164. ENDIF
  165. * write(6,*) ' nefmod ' , nefmod
  166. C
  167. C On va rega Crder quelle est la nature de l'élément
  168. IF (IDIM.EQ.3) THEN
  169.  
  170. IF ((NEFMOD.EQ.4).OR.(NEFMOD.EQ.8)) THEN
  171. C TRI3 ou QUA4
  172. KQUAD(ITYP)=.FALSE.
  173. KCOQ(ITYP) =.FALSE.
  174. ELSEIF ((NEFMOD.EQ.27).OR.(NEFMOD.EQ.49)) THEN
  175. C COQ3 ou COQ4
  176. KQUAD(ITYP)=.FALSE.
  177. KCOQ(ITYP) =.TRUE.
  178. ELSEIF ((NEFMOD.EQ.6).OR.(NEFMOD.EQ.10)) THEN
  179. C TRI6 ou QUA8
  180. KQUAD(ITYP)=.TRUE.
  181. KCOQ(ITYP) =.FALSE.
  182. ELSEIF ((NEFMOD.EQ.56).OR.(NEFMOD.EQ.41)) THEN
  183. C COQ6 ou COQ8
  184. KQUAD(ITYP)=.TRUE.
  185. KCOQ(ITYP) =.TRUE.
  186. ELSE
  187. CALL ERREUR(16)
  188. RETURN
  189. ENDIF
  190. C
  191. ELSEIF (IDIM.EQ.2) THEN
  192. C
  193. IF (NEFMOD.EQ.2) THEN
  194. C SEG2
  195. KQUAD(ITYP)=.FALSE.
  196. KCOQ(ITYP) =.FALSE.
  197. ELSEIF (NEFMOD.EQ.44) THEN
  198. C COQ2
  199. KQUAD(ITYP)=.FALSE.
  200. KCOQ(ITYP) =.TRUE.
  201. ELSEIF (NEFMOD.EQ.3) THEN
  202. C SEG3
  203. KQUAD(ITYP)=.TRUE.
  204. KCOQ(ITYP) =.FALSE.
  205. ELSE
  206. CALL ERREUR(16)
  207. RETURN
  208. ENDIF
  209. C
  210. ELSE
  211. CALL ERREUR(14)
  212. RETURN
  213. ENDIF
  214.  
  215. 10 CONTINUE
  216.  
  217. SEGDES INFOEL
  218. C
  219. C ----------------------------------------------------
  220. C Orientation vers les différents sous-programmes
  221. C
  222. IF (IFOMOD.NE.0) THEN
  223. C On n'est pas en mode axisymétrique
  224. C
  225. IF (MCVX.AND.(.NOT.MSYM)) THEN
  226. C on n'a recu que CVXE
  227. GOTO 100
  228. ELSEIF (MSYM) THEN
  229. C il faut lire des points pour le cas général
  230. GOTO 200
  231. ELSE
  232. C cas général
  233. GOTO 210
  234. ENDIF
  235. C
  236. ELSE
  237. C On est en mode axisymétrique
  238. GOTO 300
  239. C
  240. ENDIF
  241. C
  242. C**********************************************************
  243. C
  244. C********************
  245. C CAS CONVEXE
  246. C********************
  247. C
  248. 100 CALL LIRENT(INT1,0,IRETOU)
  249. IF (IRETOU.NE.0) THEN
  250. INT=INT1
  251. ELSE
  252. INT=3
  253. ENDIF
  254. * write(6,*) ' int ', int
  255. CALL FACCVX(MYMOD,INFOEL,INT,ICHFAC)
  256.  
  257. GOTO 900
  258. C
  259. C
  260. C********************
  261. C CAS GENERAL
  262. C********************
  263. C
  264. C----cas avec 'SYME' => lecture des points
  265. C
  266. 200 continue
  267. ip1 = ivamod(3)
  268. ip2 = ivamod(4)
  269. NBE = IDIM
  270. SEGINI,IAXE
  271. IAXE.LECT(1) = IP1
  272. IAXE.LECT(2) = IP2
  273. IF (IDIM.EQ.3) THEN
  274. ip3=ivamod(5)
  275. iaxe.lect(3)=ip3
  276. ENDIF
  277. C
  278. C----suite du cas général
  279. C
  280. 210 CALL LIRENT(INT1,0,IRETOU)
  281. IF (IRETOU.NE.0) THEN
  282. IF(IDIM.EQ.3) THEN
  283. LRES=MIN0(INT1,100)
  284. ELSE
  285. LRES=MIN0(INT1,1000)
  286. ENDIF
  287. ELSE
  288. IF(IDIM.EQ.3) THEN
  289. LRES=50
  290. ELSE
  291. LRES=200
  292. ENDIF
  293. ENDIF
  294. * write(6,*) ' lres ' , lres
  295.  
  296. IF(IDIM.EQ.3) THEN
  297. XDEC=0.5
  298. ELSE
  299. XDEC=5.D0
  300. ENDIF
  301. * write(6,*) ' xdec ' , xdec
  302. C
  303. IF (IDIM.EQ.3) THEN
  304. * write(6,*) ' appel a facgen'
  305. * write(6,*) LRES,XDEC,IAXE,KNOR,EXTINC
  306. CALL FACGEN(MYMOD,INFOEL,LRES,XDEC,IAXE,KNOR,ICHFAC,EXTINC)
  307. ELSE
  308. * write(6,*) ' appel a facge2'
  309. * write(6,*) LRES,XDEC,IAXE,KNOR,EXTINC
  310. * write(6,*) ( kcoq(iou),kquad(iou),iou=1,kcoq(/1))
  311. CALL FACGE2(MYMOD,INFOEL,LRES,XDEC,IAXE,KNOR,ICHFAC,EXTINC)
  312. ENDIF
  313. IF (IAXE.NE.0) SEGSUP IAXE
  314. C
  315. GOTO 900
  316. C
  317. C********************
  318. C CAS AXISYMETRIQUE
  319. C********************
  320. C
  321.  
  322. 300 CONTINUE
  323.  
  324. C valeurs par defaut
  325.  
  326. NGAX=10
  327. NPAX=20
  328.  
  329. CALL LIRENT(INT1,0,IRETO1)
  330. CALL LIRENT(INT2,0,IRETO2)
  331.  
  332. IF (IRETO2.NE.0) THEN
  333. NGAX = MIN0(INT1,10)
  334. NPAX = MIN0(INT2,1000)
  335. ELSEIF (MGAUS) THEN
  336. NPAX = MIN0(INT1,1000)
  337. ELSEIF (IRETO1.NE.0) THEN
  338. NGAX=MIN0(INT1,10)
  339. ENDIF
  340.  
  341. C WRITE(6,*) ' FFOR NG NP ',NGAX,NPAX
  342.  
  343. IF (MCVX) THEN
  344. KACHE = 0
  345. ELSE
  346. KACHE = 1
  347. ENDIF
  348. C
  349. IF(MABS) THEN
  350. CALL LIRREE(FLO1,0,IRETOU)
  351. IF (IRETOU.NE.0) THEN
  352. EXTINC=-FLO1
  353. ENDIF
  354. ENDIF
  355.  
  356. CALL FACAXI(MYMOD,INFOEL,NPAX,NGAX,KACHE,KNOR,ICHFAC,EXTINC)
  357. C
  358. C**********************************************************
  359. C
  360. 900 SEGSUP,INFOEL
  361. mchelm=ICHFAC
  362. segact mchelm*mod
  363. do i=1,mymod.kmodel(/1)
  364. conche(i)=conmod
  365. enddo
  366.  
  367. END
  368.  
  369.  
  370.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales