Télécharger funcv.eso

Retour à la liste

Numérotation des lignes :

funcv
  1. C FUNCV SOURCE OF166741 26/05/11 21:15:06 12538
  2.  
  3. SUBROUTINE funcv(NT,NHBM,NDDL,NFFT,KTQ,KTKAM,KTPHI,KTLIAA,
  4. & KTLIAB,KTPAS,KTFEX,KOCLFA,KOCLB1,JANA2,fvec,fref,NNM)
  5.  
  6. *=======================================================================
  7. * Calcul du residu R(X) = ZX-Fnl-Fext -> fvec = mlreel.prog(*)
  8. * et de la Jacobienne dFnl/dX -> JAC(*,*) du segment KTQ
  9. *=======================================================================
  10.  
  11. *----- Declarations ----------------------------------------------------
  12.  
  13. IMPLICIT INTEGER(I-N)
  14. IMPLICIT REAL*8(A-H,O-Z)
  15.  
  16. -INC CCREEL
  17.  
  18. -INC SMLREEL
  19. POINTEUR FNL.MLREEL,FNLP.MLREEL,fvec.MLREEL
  20.  
  21. -INC TMDYNC
  22.  
  23. SEGMENT mwork
  24. REAL*8 VCTCS(7),AiDi(2),Di(2),ZX(NT),LAMBD(NDDL),PP(NT)
  25. ENDSEGMENT
  26.  
  27. INTEGER NDDL,NFFT,NT,NHBM
  28. c NNM: cas des modes non-lineaires
  29.  
  30. REAL*8 EPS, summ, Q1SAVE, fref
  31. LOGICAL JANA2,NNM
  32.  
  33. C Fonctions BLAS/LAPACK
  34. REAL*8 DNRM2
  35. EXTERNAL DNRM2
  36.  
  37. *----- Recup -----------------------------------------------------------
  38. * Variables generalisees: coefficients de Fourier et frequence
  39. MTQ = KTQ
  40. * Matrices XK,KASM,XM,GAM,IGAM,DL
  41. MTKAM = KTKAM
  42. * Deformees modales
  43. MTPHI = KTPHI
  44. * Liaisons sur base A
  45. MTLIAA = KTLIAA
  46. * Liaisons sur base B
  47. MTLIAB = KTLIAB
  48. * Forces externes
  49. MTFEX = KTFEX
  50. * Truc local base A
  51. LOCLFA = KOCLFA
  52. * Truc local base B
  53. LOCLB1 = KOCLB1
  54. * Inconnues sur un pas de temps (AFT)
  55. MTPAS = KTPAS
  56.  
  57. *----- Init ------------------------------------------------------------
  58. SEGINI,mwork
  59. JG = NT
  60. SEGINI,FNL,FNLP
  61.  
  62. *------ Calcul du produit Z*X ------------------------------------------
  63. CALL HBMZX(NT,NDDL,1,Q1,OMEG,XM,XASM,XK,mwork.ZX,.not.NNM)
  64.  
  65. ****** Cas Modes non-lineaires ****************************************
  66. IF (NNM) THEN
  67. c forces ext = 0
  68. DO I= 1,NT
  69. PP(I) = 0.D0
  70. ENDDO
  71.  
  72. ****** Cas Reponse Forcee et Autonome *********************************
  73. ELSE
  74.  
  75. c CALL HBMZX(NT,NDDL,1,Q1,OMEG,XM,XASM,XK,ZX)
  76. * Si presence de forces de couplage, on enrichit Z*X
  77. DO J = 1,IPALA(/1)
  78. IF (IPALA(J,1).EQ.5 .AND. IPALA(J,3).EQ.101) THEN
  79. DO IJ = 1,7
  80. VCTCS(IJ) = XPALA(J,IJ)
  81. ENDDO
  82. JG = NDDL
  83. MLREE1 = IPALA(J,7)
  84. c SEGACT, MLREE1
  85. DO IJ = 1,JG
  86. LAMBD(IJ) = MLREE1.PROG(IJ)
  87. ENDDO
  88. MLREE2 = IPALA(J,4)
  89. MLREE3 = IPALA(J,8)
  90. c SEGACT, MLREE2,MLREE3
  91. c * Nombre de termes fixe, a generaliser si besoin.
  92. c JG = 2
  93. * tentative de generalisation
  94. JG = MLREE2.PROG(/1)
  95. DO IJ = 1,JG
  96. AiDi(IJ) = MLREE2.PROG(IJ)
  97. Di(IJ) = MLREE3.PROG(IJ)
  98. ENDDO
  99. c SEGDES,MLREE1,MLREE2,MLREE3
  100. CALL HBMZFX(NT,NDDL,OMEG,Q1,AiDi,Di,LAMBD,VCTCS,ZX)
  101. ENDIF
  102. ENDDO
  103. c DO I = 1, NT
  104. c WRITE(*,*) 'ZZ(',I,',:)=',(ZZ(I,IOU),IOU=1,NT)
  105. c ENDDO
  106. * P: donnee dans MTFEX --> FEXA
  107. * Si excitation de type balourd, on met P a jour: P = w^2.FEXA
  108. DO I=1,NT
  109. IF (BAL.EQ.1) THEN
  110. PP(I) = FEXA(I)*(OMEG**2)
  111. ELSE
  112. PP(I) = FEXA(I)
  113. END IF
  114. ENDDO
  115.  
  116. ENDIF
  117. ****** Fin distinction Modes non-lineaires / autres cas ***************
  118.  
  119. *------ Calcul de FNL(X) et dFNLdX (AFT) -------------------------------
  120.  
  121. * --- Calcul analytique ---
  122. IF (JANA2) THEN
  123. * FNL(X) et JAC du segment MTQ
  124. CALL HBMFN2(NT,NHBM,NDDL,NFFT,MTQ,MTKAM,MTPHI,MTLIAA,
  125. & MTLIAB,MTPAS,MTFEX,LOCLFA,LOCLB1,FNL)
  126.  
  127. * --- Calcul par difference finies ---
  128. ELSE
  129. * FNL(X)
  130. CALL HBMFNL(NT,NHBM,NDDL,NFFT,MTQ,MTKAM,MTPHI,MTLIAA,
  131. & MTLIAB,MTPAS,MTFEX,LOCLFA,LOCLB1,FNL)
  132. * dFNLFdX (Differences finies)
  133. c Magnitude de la perturbation
  134. summ = dnrm2(NT,Q1,1)
  135. IF (summ.NE.0.) THEN
  136. ctest EPS = summ*((XZPREC)**0.3)
  137. EPS = 1.D-6 * summ
  138. ELSE
  139. EPS = (XZPREC)**0.3
  140. ENDIF
  141. c EPS = max(XZPREC,summ*1.E-6)
  142. c* if(OMEG.gt.0.153.and.OMEG.lt.0.170) write(*,*)'>>> EPS=',EPS
  143. c* if(OMEG.gt.0.153.and.OMEG.lt.0.170)
  144. c* & write(*,*) 'FUNCV Q1 =',(Q1(iou),iou=1,NT)
  145. r_eps = 0.5D0 / EPS
  146. c Boucle sur les inconnues
  147. DO J = 1,NT
  148. c Perturbation des coefficients de Fourier
  149. Q1SAVE=Q1(J)
  150. c forward differentation -> JAC+
  151. Q1(J) =Q1SAVE+EPS
  152. CALL HBMFNL(NT,NHBM,NDDL,NFFT,MTQ,MTKAM,MTPHI,MTLIAA,
  153. & MTLIAB,MTPAS,MTFEX,LOCLFA,LOCLB1,FNLP)
  154. c* if(OMEG.gt.0.153.and.OMEG.lt.0.170)
  155. c* & write(*,123) J,(FNLP.PROG(iou),iou=1,NT)
  156. 123 FORMAT('Fnl(Q+eps*e_',I2,')=',9(E13.5,1X))
  157. Q1(J) =Q1SAVE
  158. DO K=1,NT
  159. JAC(K,J) = FNLP.PROG(K)
  160. ENDDO
  161. c backward differentation -> JAC+
  162. Q1(J) =Q1SAVE-EPS
  163. CALL HBMFNL(NT,NHBM,NDDL,NFFT,MTQ,MTKAM,MTPHI,MTLIAA,
  164. & MTLIAB,MTPAS,MTFEX,LOCLFA,LOCLB1,FNLP)
  165. Q1(J) =Q1SAVE
  166. c central differentation -> JAC = (JAC+ + JAC-) / 2
  167. DO K=1,NT
  168. JAC(K,J) = (JAC(K,J) - FNLP.PROG(K))*r_eps
  169. ENDDO
  170. ENDDO
  171. ENDIF
  172.  
  173. *------ Residu d'equilibre : R(X) = ZX-Fnl-Fext ------------------------
  174.  
  175. DO N=1,NT
  176. fvec.PROG(N) = ZX(N)-FNL.PROG(N)-PP(N)
  177. ENDDO
  178. * reference (maxi entre la norme 2 des 3 termes du residu)
  179. fref = dnrm2(NT,ZX,1)
  180. fref = MAX(fref,dnrm2(NT,FNL.PROG(1),1))
  181. fref = MAX(fref,dnrm2(NT,PP,1))
  182. c fref = dnrm2(NT,ZX,1) + dnrm2(NT,FNL.PROG(1),1) + dnrm2(NT,PP,1)
  183.  
  184. * Menage
  185. SEGSUP,mwork
  186.  
  187. RETURN
  188. END
  189.  
  190.  

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