Télécharger recof1.eso

Retour à la liste

Numérotation des lignes :

recof1
  1. C RECOF1 SOURCE CB215821 20/11/25 13:38:44 10792
  2. SUBROUTINE RECOF1(itbst,itbm,ichp1,ipout)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8(A-H,O-Z)
  5. *
  6. ************************************************************************
  7. *
  8. * CREATION : Joel KICHENIN
  9. * MODIFS :
  10. * Benoit PRABEL, 1/08/2014 : ajout possibilite de n'avoir que itbm
  11. * BP, 11/12/2017 : corrections pour parallelisme
  12. *
  13. ************************************************************************
  14.  
  15. -INC PPARAM
  16. -INC CCOPTIO
  17. -INC SMCHPOI
  18. -INC SMELEME
  19. -INC SMTABLE
  20. -INC SMCOORD
  21.  
  22. ************************************************************************
  23. * -INC TMYTAB
  24. *
  25. * SEGMENT POUR "DEBOBINER" UN OBJET DE TYPE 'TABLE'
  26. * D'UN SOUSTYPE PARTICULIER PRECISE PAR ITYTAB
  27. * Le but est de faciliter la programmation esope notamment en //
  28. *
  29. * ITYTAB = | BASE_MODALE
  30. * | LIAISONS_STATIQUES
  31. * | ... a completer
  32. *
  33. * KPTREP(i) = POINT_REPERE du ieme mode/solution statique
  34. * KDEFO(i) = DEFORMEE_MODALE / DEFORMEE
  35. * KICPR(#noeud POINT_REPERE) = i^eme mode
  36. * DDLLIA(i) = composante de la liaison statique
  37. * KPTLIA(i) = point en jeu dans la liaison statique
  38. *
  39.  
  40. SEGMENT MYTAB
  41. CHARACTER*24 ITYTAB
  42. INTEGER KPTREP(NMY),KDEFO(NMY)
  43. INTEGER KICPR(NMY2)
  44. CHARACTER*(LOCOMP) DDLLIA(NMY3)
  45. INTEGER KPTLIA(NMY3)
  46. ENDSEGMENT
  47. POINTEUR MYTAB1.MYTAB,MYTAB2.MYTAB,MYTAB3.MYTAB
  48.  
  49. ************************************************************************
  50.  
  51. c icpr(ip)=nombre de fois ou l'on a vu le noeud POINT_LIAISON ip
  52. segment icpr(nbpts)
  53. c ITACH=liste des chpoints, ITAFL.TAFL=liste des coefficients
  54. SEGMENT ITACH(0)
  55. SEGMENT/ITAFL/(TAFL(0)*D)
  56.  
  57. CHARACTER*(LOCOMP) mocom1
  58.  
  59.  
  60. ipout =0
  61. it1=0
  62. it2=0
  63. MYTAB1=0
  64. MYTAB2=0
  65.  
  66.  
  67. ************************************************************************
  68. * ACTIVATION DES TABLES si elles existent
  69. ************************************************************************
  70. c recup des solutions statiques si la table existe
  71. if (itbst.gt.0) then
  72. mtable = itbst
  73. segact mtable
  74. segini icpr
  75. iicpr=icpr
  76. c DEBOBINAGE DE LA TABLE itbst VERS MYTAB1
  77. CALL TAB2MY(itbst,2,iicpr,it1)
  78. MYTAB1=it1
  79. endif
  80.  
  81. c recup des modes si la table existe
  82. itbm2=0
  83. if (itbm.gt.0) then
  84. CALL ACCTAB(itbm,'MOT',0,0.0D0,'MODES',.TRUE.,0,
  85. & 'TABLE',0,0.0D0,' ',.TRUE.,itbm2)
  86. if (ierr.ne.0) return
  87. mtable = itbm2
  88. segact mtable
  89. c DEBOBINAGE DE LA TABLE itbm2 VERS MYTAB2
  90. CALL TAB2MY(itbm2,1,0,it2)
  91. MYTAB2=it2
  92. endif
  93.  
  94. ************************************************************************
  95. * RECOMBINAISON
  96. ************************************************************************
  97.  
  98. c creation des segments pour la combinaison lineaire
  99. segini,ITACH,ITAFL
  100. NA=0
  101.  
  102. c recup du chpoint d'entree (de composante ALFA BETA)
  103. mchpoi = ichp1
  104. segact mchpoi
  105. nsoupo = ipchp(/1)
  106.  
  107. c - boucle sur les zones du chpoint d'entree
  108. DO 10 is = 1 ,nsoupo
  109.  
  110. msoupo = ipchp(is)
  111. segact msoupo
  112. NC = NOCOMP(/2)
  113. meleme = igeoc
  114. mpoval = ipoval
  115. segact meleme,mpoval
  116. N = vpocha(/1)
  117.  
  118. c - boucle sur les composantes
  119. DO 20 ic = 1,NC
  120.  
  121. mocom1 = nocomp(ic)
  122. if (mocom1.eq.'BETA') then
  123. if(itbst.le.0) goto 20
  124. MYTAB=MYTAB1
  125. elseif (mocom1.eq.'ALFA') then
  126. if(itbm2.le.0) goto 20
  127. MYTAB=MYTAB2
  128. elseif (mocom1.eq.'LX') then
  129. write(ioimp,*) 'LX a recopier tel quel... ',
  130. & 'mais pas encore fait !'
  131. goto 20
  132. else
  133. write(ioimp,*) 'RECO : le chpoint doit avoir les composantes',
  134. & ' ALFA ou BETA !'
  135. MOTERR=mocom1
  136. call erreur(197)
  137. return
  138. endif
  139.  
  140. c - boucle sur les noeuds du chpoint d'entree
  141. DO 90 ipn = 1,N
  142. ipts = num(1,ipn)
  143. sca1 = vpocha(ipn,ic)
  144.  
  145. c on a deja enregistré tous les modes
  146. im=KICPR(ipts)
  147. if (im.le.0) then
  148. INTERR(1)=ipts
  149. CALL ERREUR(1072)
  150. RETURN
  151. endif
  152. ichin=KDEFO(im)
  153.  
  154. c combinaison lineaire
  155. c if (ipout.gt.0) then
  156. c ich1 = ipout
  157. c call adchpo(ich1,ichin,ipout,1.d0,sca1)
  158. c else
  159. c call muchpo(ichin,sca1,ipout,1)
  160. c endif
  161. c mutualisation des sources : appel a COMBIL
  162. ITACH(**)=ichin
  163. TAFL(**)=sca1
  164. NA=NA+1
  165.  
  166. 90 CONTINUE
  167.  
  168. 20 CONTINUE
  169.  
  170. segdes msoupo,meleme,mpoval
  171. 10 CONTINUE
  172. segdes mchpoi
  173.  
  174. c combinaison lineaire effective optimisee
  175. CALL COMBIL(ITACH,ITAFL,NA,ipout)
  176.  
  177. if (itbst.le.0) goto 999
  178.  
  179.  
  180. ************************************************************************
  181. * CORRECTION DU CHPOINT AUX POINTS DE LIAISON
  182. ************************************************************************
  183. c
  184. c de maniere a ne pas compter plusieurs fois un noeud en commun
  185. c a plusieurs deformees statiques (ex. du noeud x ci dessous).
  186. c |---------------x x-----------------|
  187. c \psi_1 \psi2
  188. c
  189.  
  190. MYTAB=MYTAB1
  191. c ima = icpt(/1)
  192. ima = KPTLIA(/1)
  193. mchpoi = ipout
  194. segact mchpoi
  195. nsoupo = ipchp(/1)
  196.  
  197. DO is = 1 ,nsoupo
  198. msoupo = ipchp(is)
  199. segact msoupo
  200. NC = NOCOMP(/2)
  201. meleme = igeoc
  202. mpoval = ipoval
  203.  
  204. segact meleme,mpoval*mod
  205. N = vpocha(/1)
  206.  
  207. DO ic = 1,NC
  208. mocom1 = nocomp(ic)
  209.  
  210. DO 180 ipn = 1 , N
  211. ipts = num(1,ipn)
  212. kpt = 0
  213. if (icpr(ipts).eq.0) goto 180
  214. c on a repere un point de liaison
  215. do 170 im = 1,ima
  216. if (KPTLIA(im).ne.ipts) goto 170
  217. if (DDLLIA(im).ne.mocom1) goto 170
  218. kpt = kpt + 1
  219. 170 continue
  220. c kpt=nombre de fois ou apparait point_liaison + ddl_liaison
  221. if (kpt.gt.1) vpocha(ipn,ic) = vpocha(ipn,ic)/kpt
  222.  
  223. 180 CONTINUE
  224.  
  225. ENDDO
  226. segdes meleme,mpoval,msoupo
  227.  
  228. ENDDO
  229. segdes mchpoi
  230. segsup icpr
  231.  
  232.  
  233. ************************************************************************
  234. * FIN DU PROGRAMME
  235. ************************************************************************
  236. 999 CONTINUE
  237.  
  238. SEGSUP,ITACH,ITAFL
  239. IF(MYTAB1.ne.0) SEGSUP MYTAB1
  240. IF(MYTAB2.ne.0) SEGSUP MYTAB2
  241. c on ne desactive pas les 2 tables d'entrees (//isation)
  242.  
  243. RETURN
  244. END
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  

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