Télécharger charge.eso

Retour à la liste

Numérotation des lignes :

charge
  1. C CHARGE SOURCE SP204843 26/02/03 21:15:06 12461
  2. SUBROUTINE CHARGE
  3. C
  4. C---------------------------------------------------------------------
  5. C
  6. C CREATION DE L'OBJET CHARGEMENT
  7. C
  8. C SYNTAXE : CHARGE = CHAR (MOT) | MCHAML | (EVOL) | (|'LIE '|) ...
  9. C | CHPOINT | | |'LIBR'|
  10. C | TABLE1 TABLE2 |
  11. C
  12. C ... ( | 'TRAN' VEC1 EVOL2 | ) ;
  13. C | 'ROTA' POIN1 (POIN2 si 3D) EVOL2 |
  14. C | 'TRAJ' TABLE3 TABLE4 |
  15. C
  16. C MOT : Nom du chargement
  17. C MCHAML : Champ par element (description spatiale) du chargement
  18. C CHPOINT : Champ par point (description spatiale) du chargement
  19. C EVOL : Evolution de ponderation (description temporelle) du chargement
  20. C facultative, le chargement est constant si absente
  21. C TABLE1 : Table des temps indicee par des entiers
  22. C TABLE2 : Table des champs (CHPOINT ou MCHAML) indicee par des
  23. C entiers commancant par 0 puis 1, 2, ...
  24. C
  25. C Par defaut le chargement est fixe. 3 options permettent de preciser
  26. C un mouvement relatif du chargement par rapport au corps etudie
  27. C TABLE3 : Table des temps indicee par des entiers
  28. C TABLE4 : Table des points de la trajectoire indicee par
  29. C des entiers
  30. C
  31. C CREATION : 22/02/85
  32. C PROGRAMMEUR : GUILBAUD
  33. C MODIFICATION : 02/09/94
  34. C PROGRAMMEUR : JEANVOINE
  35. C EXTENSION : /02/98 KICH
  36. C-----------------------------------------------------------------------
  37. C
  38. IMPLICIT INTEGER(I-N)
  39. IMPLICIT REAL*8(A-H,O-Z)
  40.  
  41.  
  42. -INC PPARAM
  43. -INC CCOPTIO
  44.  
  45. -INC SMCHARG
  46. -INC SMCHPOI
  47. -INC SMCHAML
  48. -INC SMTABLE
  49. -INC SMLREEL
  50. -INC SMEVOLL
  51. -INC SMELEME
  52. -INC SMLOBJE
  53.  
  54. CHARACTER*4 MOT1,MOT2,MOCLE(6)
  55. CHARACTER*8 MOT3,MOT4
  56.  
  57. DATA MOCLE /'LIBR','LIE ','STAT','TRAN','ROTA','TRAJ'/
  58.  
  59. IRETO1=0
  60. IRETO2=0
  61. IRETO3=0
  62. IRETO4=0
  63. IRETO5=0
  64. C----------------------- Lecture obligatoire du nom --------------------
  65.  
  66. CALL LIRCHA(MOT2,0,LCHA)
  67. IF (LCHA.NE.0) THEN
  68. CALL PLACE(MOCLE,6,IPLAC,MOT2)
  69. C Si MOT2 pas dans MOCLE, c'est le nom du chargement > MOT1
  70. IF (IPLAC.EQ.0) THEN
  71. MOT1 = MOT2
  72. MOT2 = ' '
  73. C Si MOT2 dans MOCLE et vaut TRAJ, on ne veut pas un 2e mot TRAJ (exclu)
  74. ELSEIF (IPLAC.EQ.6) THEN
  75. CALL LIRCHA(MOT1,0,LCHA1)
  76. IF (LCHA1.NE.0) THEN
  77. IF (MOT1.EQ.'TRAJ') THEN
  78. CALL ERREUR(696)
  79. RETURN
  80. ENDIF
  81. ELSE
  82. C Si on ne lit que le mot TRAJ, c'est un chargement de nom TRAJ :
  83. MOT1 = MOT2
  84. MOT2 = ' '
  85. ENDIF
  86. ELSE
  87. C Si MOT2 dans MOCLE, nom du chargement inconnu (=' ')
  88. MOT1 = ' '
  89. ENDIF
  90. ENDIF
  91. IF (IERR.NE.0) RETURN
  92. C
  93. C---------------- Lecture du MCHAML,CHPOINT ou TABLE ------------------
  94. C Syntaxe avec 2 TABLEs :
  95. CALL LIROBJ('TABLE ',ITA1,0,IRETO1)
  96. C -- si presence d'une TABLE, on va chercher la seconde TABLE
  97. IF (IRETO1.EQ.1) THEN
  98. CALL LIROBJ('TABLE ',ITA2,1,IRETOU)
  99. IF (IERR.NE.0) RETURN
  100. ELSE
  101. C Syntaxe avec LISTOBJE :
  102. CALL LIROBJ('LISTOBJE',ILOB1,0,IRETO5)
  103. IF (IRETO5.EQ.1) THEN
  104. CALL LIROBJ('LISTREEL',ILRE1,1,IRETOU)
  105. IF (IERR.NE.0) RETURN
  106. ELSE
  107. C Syntaxe avec 1 champ et 1 EVOLUTIOn :
  108. C -- y a t'il un CHPOINT ?
  109. CALL LIROBJ('CHPOINT ',ICH1,0,IRETO2)
  110. IF (IRETO2.EQ.1) THEN
  111. CALL ACTOBJ('CHPOINT ',ICH1,1)
  112. IF (IERR.NE.0) RETURN
  113. C -- si pas de CHPOINT, on exige la lecture d'un MCHAML
  114. ELSE
  115. CALL LIROBJ('MCHAML ',ICH2,1,IRETO3)
  116. CALL ACTOBJ('MCHAML ',ICH2,1)
  117. IF (IERR.NE.0) RETURN
  118. ENDIF
  119. C -- y a t'il une EVOLUTIOn ?
  120. CALL LIROBJ('EVOLUTIO',MEVOLL,0,IRETO4)
  121. C -- si pas d'EVOLUTIOn, le chargement sera constant
  122. IF (IRETO4.EQ.0) THEN
  123. MEVOLL=0
  124. ENDIF
  125. ENDIF
  126. ENDIF
  127.  
  128. N=1
  129. SEGINI MCHARG
  130. SEGINI ICHARG
  131. KCHARG(1)=ICHARG
  132. CHANAT='FORCE'
  133. IF (LCHA.NE.0) THEN
  134. if(mot1.eq.'PSUI') then
  135. call erreur(994)
  136. return
  137. endif
  138. CHANOM = MOT1
  139. ELSE
  140. CHANOM = ' '
  141. ENDIF
  142.  
  143. C------------------ cas du CHPOINT ou du MCHAML --------------------
  144.  
  145. IF((IRETO2.EQ.1).OR.(IRETO3.EQ.1)) THEN
  146. C Cas general, on recupere les LISTREELs de l'evolution
  147. IF (IRETO4.EQ.1) THEN
  148. SEGACT MEVOLL
  149. IEV1 = IEVOLL(/1)
  150. IF (IEV1.NE.1) THEN
  151. CALL ERREUR(687)
  152. RETURN
  153. ENDIF
  154. KEVOLL=IEVOLL(1)
  155. SEGACT KEVOLL
  156. MLREE1 = IPROGX
  157. MLREE2 = IPROGY
  158. SEGACT MLREE1,MLREE2
  159. IF (MLREE1.PROG(/1) .LT. 2 .OR. MLREE2.PROG(/1) .LT. 2) THEN
  160. * la dimension des LISTREEL doit etre plus grande que 1
  161. SEGSUP MCHARG,ICHARG
  162. CALL ERREUR(897)
  163. RETURN
  164. ENDIF
  165. ICHPO2=IPROGX
  166. ICHPO3=IPROGY
  167. C Cas du chargement constant
  168. ELSE
  169. ICHPO2=0
  170. ICHPO3=0
  171. ENDIF
  172. IF(IRETO2.EQ.1) THEN
  173. CHATYP = 'CHPOINT '
  174. ICHPO1 = ICH1
  175. ELSE
  176. CHATYP = 'MCHAML '
  177. ICHPO1 = ICH2
  178. ENDIF
  179. IF (CHATYP.EQ.'CHPOINT ') THEN
  180. MCHPOI = ICH1
  181. CALL ACTOBJ('CHPOINT ',MCHPOI,1)
  182. C SEGACT,MCHPOI
  183. IF (IPCHP(/1) .GE. 1) THEN
  184. MSOUPO = IPCHP(1)
  185. C SEGACT,MSOUPO
  186. IF ((NOCOMP(1).EQ.'FX '.OR.NOCOMP(1).EQ.'FY '.OR.
  187. $ NOCOMP(1).EQ.'FZ '.OR.NOCOMP(1).EQ.'FR '.OR.
  188. $ NOCOMP(1).EQ.'FT '.OR.NOCOMP(1).EQ.'MR '.OR.
  189. $ NOCOMP(1).EQ.'MT '.OR.NOCOMP(1).EQ.'MX '.OR.
  190. $ NOCOMP(1).EQ.'MY '.OR.NOCOMP(1).EQ.'MZ ')
  191. $ .AND.(CHANOM.EQ.' ')) CHANOM = 'MECA'
  192. ENDIF
  193. ENDIF
  194.  
  195. *----------------------- cas avec LISTOBJE ----------------------
  196.  
  197. ELSEIF (IRETO5.EQ.1) THEN
  198. CHATYP = 'LISTOBJE'
  199. ICHPO1 = ILOB1
  200. ICHPO2 = ILRE1
  201.  
  202. C Verification de la dimension des deux listes :
  203. MLOBJE = ILOB1
  204. SEGACT, MLOBJE
  205. IF (TYPOBJ.EQ.'FLOTTANT') THEN
  206. CALL ERREUR(21)
  207. RETURN
  208. ENDIF
  209. MLREEL = ILRE1
  210. SEGACT, MLREEL
  211. IF (LISOBJ(/1).NE.PROG(/1)) THEN
  212. CALL ERREUR(217)
  213. RETURN
  214. ENDIF
  215.  
  216. *------------------------- cas des TABLES -----------------------
  217.  
  218. ELSE
  219. C Forcement syntaxe avec TABLES
  220. C Si pas IRETO1, ERREUR(5) (cas impossible a priori)
  221. IF (IRETO1.NE.1) THEN
  222. CALL ERREUR(5)
  223. RETURN
  224. ENDIF
  225. CHATYP = 'TABLE '
  226. ICHPO1 = ITA1
  227. ICHPO2 = ITA2
  228. C dip : ajout de quelques tests sur les tables de chargement
  229. MTAB1 = ITA1
  230. MTAB2 = ITA2
  231. SEGACT,MTAB1,MTAB2
  232. C - les 2 tables doivent avoir la meme dimension
  233. I1 = MTAB1.MLOTAB
  234. I2 = MTAB2.MLOTAB
  235. IF (I1.NE.I2) THEN
  236. MOTERR(1:4)='CHAR'
  237. MOTERR(5:12)='TABLE '
  238. CALL ERREUR(125)
  239. RETURN
  240. ENDIF
  241. DO N=1,I1
  242. C - les indices des 2 tables doivent etre ENTIERs
  243. MOT3=MTAB1.MTABTI(N)
  244. MOT4=MTAB2.MTABTI(N)
  245. IF ((MOT3.NE.'ENTIER ').OR.(MOT4.NE.'ENTIER ')) THEN
  246. CALL ERREUR(647)
  247. RETURN
  248. ENDIF
  249. C - la table 1 doit contenir des FLOTTANTs
  250. MOT3=MTAB1.MTABTV(N)
  251. MOT4=MTAB2.MTABTV(N)
  252. IF (MOT3.NE.'FLOTTANT') THEN
  253. CALL ERREUR(692)
  254. RETURN
  255. ENDIF
  256. C SP : je retire ce test
  257. * => on peut mettre ce qu'on veut en indice de la 2e table
  258. C - la table 2 doit contenir des CHPOINTs ou des MCHAMLs
  259. C IF ((MOT4.NE.'CHPOINT ').AND.(MOT4.NE.'MCHAML ')) THEN
  260. C CALL ERREUR(694)
  261. C RETURN
  262. C ENDIF
  263. C - les indices doivent etre croissants de 0 a (N-1)
  264. IND1=MTAB1.MTABII(N)
  265. IND2=MTAB2.MTABII(N)
  266. IF ((IND1.NE.(N-1)).OR.(IND2.NE.(N-1))) THEN
  267. CALL ERREUR(647)
  268. RETURN
  269. ENDIF
  270. C - les instants de la table 1 doivent etre croissants
  271. IF (N.EQ.1) THEN
  272. XTPP=MTAB1.RMTABV(N)
  273. ELSE
  274. XTP1=MTAB1.RMTABV(N)
  275. IF (XTP1.LT.XTPP) THEN
  276. CALL ERREUR(285)
  277. RETURN
  278. ENDIF
  279. XTPP=XTP1
  280. ENDIF
  281. ENDDO
  282. ENDIF
  283. C----------------------- Lecture des mots-cle optionnels ------------------
  284. IRETOU = 0
  285. IRETO1 = 0
  286. IRETO2 = 0
  287. IF (MOT2.EQ.' ') CALL LIRCHA(MOT2,0,LCHA)
  288. IF (LCHA.NE.0) THEN
  289. IF (MOT2.EQ.'LIBR') THEN
  290. CHALIE = 'LIBR'
  291. CALL LIRCHA(MOT2,0,LCHA)
  292. ELSEIF(MOT2.EQ.'LIE ') THEN
  293. CHALIE='LIE '
  294. CALL LIRCHA(MOT2,0,LCHA)
  295. ELSE
  296. CHALIE='LIE '
  297. ENDIF
  298. ELSE
  299. CHALIE='LIE '
  300. ENDIF
  301.  
  302. IF (LCHA.NE.0) THEN
  303.  
  304. IF (MOT2.EQ.'TRAN') THEN
  305. CHAMOB = MOT2
  306. CALL LIROBJ('POINT ',IPT1,1,IRETO1)
  307. IF(IERR.NE.0) RETURN
  308. CALL CRELEM(IPT1)
  309. CALL CRECH1(IPT1,1)
  310. ICHPO4 = IPT1
  311. CALL LIROBJ('EVOLUTIO',MEVOLL,1,IRETOU)
  312. IF(IERR.NE.0) RETURN
  313.  
  314. ELSE IF (MOT2.EQ.'ROTA') THEN
  315. CHAMOB = MOT2
  316. CALL LIROBJ('POINT ',IPT1,1,IRETO1)
  317. IF(IERR.NE.0) RETURN
  318. CALL CRELEM(IPT1)
  319. CALL CRECH1(IPT1,1)
  320. ICHPO4 = IPT1
  321. IF (IDIM.GE.3) THEN
  322. CALL LIROBJ('POINT ',IPT2,1,IRETO2)
  323. IF(IERR.NE.0) RETURN
  324. CALL CRELEM(IPT2)
  325. CALL CRECH1(IPT2,1)
  326. ICHPO5 = IPT2
  327. ENDIF
  328. CALL LIROBJ('EVOLUTIO',MEVOLL,1,IRETOU)
  329. CALL ACTOBJ('EVOLUTIO',MEVOLL,1)
  330. IF(IERR.NE.0) RETURN
  331.  
  332. ELSE IF (MOT2.EQ.'TRAJ') THEN
  333. CHAMOB = MOT2
  334. CALL LIROBJ('CHPOINT ',ITA1,1,IRETO1)
  335. CALL ACTOBJ('CHPOINT ',ITA1,1)
  336. IF(IERR.NE.0) RETURN
  337.  
  338. ELSE
  339. *
  340. GOTO 900
  341. ENDIF
  342.  
  343. ELSE
  344. CHAMOB = 'STAT'
  345. ENDIF
  346. *
  347. IF ((MOT2.EQ.'TRAN').OR.(MOT2.EQ.'ROTA')) THEN
  348. SEGACT MEVOLL
  349. IEV1 = IEVOLL(/1)
  350. IF (IEV1.NE.1) THEN
  351. CALL ERREUR(687)
  352. RETURN
  353. ENDIF
  354. KEVOLL=IEVOLL(1)
  355. SEGACT KEVOLL
  356. MLREE1 = IPROGX
  357. MLREE2 = IPROGY
  358. SEGACT MLREE1,MLREE2
  359. IF (MLREE1.PROG(/1).LT.2.OR.MLREE2.PROG(/1).LT.2) THEN
  360. * la dimension des LISTREEL doit etre plus grande que 1
  361. SEGSUP ICHARG,MCHARG
  362. CALL ERREUR(897)
  363. RETURN
  364. ENDIF
  365. ICHPO6=IPROGX
  366. ICHPO7=IPROGY
  367. ELSE IF (MOT2.EQ.'TRAJ') THEN
  368. MCHPO2 = ITA1
  369. CALL ACTOBJ('CHPOINT ',MCHPO2,1)
  370. NSOUPO = MCHPO2.IPCHP(/1)
  371. IF (NSOUPO.GT.1) THEN
  372. SEGSUP ICHARG,MCHARG
  373. * le champ doit posseder une seule composante
  374. CALL ERREUR(898)
  375. RETURN
  376. ENDIF
  377. MSOUP2 = MCHPO2.IPCHP(1)
  378. C SEGACT MSOUP2
  379. NC = MSOUP2.NOCOMP(/2)
  380. IF (NC.GT.1) THEN
  381. SEGSUP ICHARG,MCHARG
  382. * le champ doit posseder une seule composante
  383. CALL ERREUR(898)
  384. RETURN
  385. ENDIF
  386. IF (MSOUP2.NOCOMP(1).NE.'TEMP') THEN
  387. SEGSUP ICHARG,MCHARG
  388. * le nom de la composante doit etre TEMP
  389. CALL ERREUR(898)
  390. RETURN
  391. ENDIF
  392.  
  393. ICHPO4 = MCHPO2
  394. ICHPO5 = MSOUP2.IGEOC
  395. MPOVA2 = MSOUP2.IPOVAL
  396. C SEGACT MPOVA2
  397. JG = MPOVA2.VPOCHA(/1)
  398. SEGINI MLREE2
  399. ICHPO6 = MLREE2
  400. DO IVO = 1,JG
  401. MLREE2.PROG(IVO) = MPOVA2.VPOCHA(IVO,1)
  402. ENDDO
  403. ENDIF
  404. *
  405. 900 CONTINUE
  406. CALL ACTOBJ('CHARGEME',MCHARG,1)
  407. CALL ECROBJ('CHARGEME',MCHARG)
  408. END
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  

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