Télécharger oplent.eso

Retour à la liste

Numérotation des lignes :

oplent
  1. C OPLENT SOURCE CB215821 23/10/18 21:15:08 11760
  2. SUBROUTINE OPLENT(IPO1, IOPERA, IPO3)
  3. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  4. C
  5. C O P L E N T
  6. C -----------
  7. C
  8. C FONCTION:
  9. C ---------
  10. C
  11. C EFFECTUE DIVERSES OPERATIONS SUR UN LISTENTI.
  12. C
  13. C MODULES UTILISES:
  14. C -----------------
  15. C
  16. C
  17. C PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN)
  18. C -----------
  19. C
  20. C IPO1 (E) POINTEUR SUR UN LISTENTI.
  21. C IPO3 (E) POINTEUR SUR UN LISTENTI si appel à ATAN2
  22. C
  23. C ENTREE
  24. C IOPERA= 1 PUISSANCE
  25. C = 2 PRODUIT
  26. C = 3 ADDITION
  27. C = 4 SOUSTRACTION
  28. C = 5 DIVISION
  29. C
  30. C IOPERA= 6 COSINUS
  31. C = 7 SINUS
  32. C = 8 TANGENTE
  33. C = 9 ARCOSINUS
  34. C = 10 ARCSINUS
  35. C = 11 ARCTANGENTE
  36. C = 12 EXPONENTIELLE
  37. C = 13 LOGARITHME
  38. C = 14 VALEUR ABSOLUE
  39. C = 15 COSINUS HYPERBOLIQUE
  40. C = 16 SINUS HYPERBOLIQUE
  41. C = 17 TANGENTE HYPERBOLIQUE
  42. C = 18 ERF FONCTION D'ERRREUR DE GAUSS
  43. C = 19 ERFC FONCTION D'ERRREUR complementaire DE GAUSS (1-erf(x))
  44. C = 20 ARGCH (Fonction reciproque de COSH)
  45. C = 21 ARGSH (Fonction reciproque de SINH)
  46. C = 22 ARGTH (Fonction reciproque de TANH)
  47. C = 23 SIGN(1.D0,XIN1)
  48. C
  49. C IPO3 (S) POINTEUR SUR LE LISTREEL RESULTAT.
  50. C = 0 , SI OPERATION IMPOSSIBLE.
  51. C
  52. C HISTORIQUE :
  53. C - CB215821 12/04/1988 --> Creation
  54. C - CB215821 05/09/1988 --> AJOUT DE "EXP" ET "LOG"
  55. C - CB215821 18/07/1990 --> AJOUT DE "SIN" ET "COS"
  56. C - CB215821 24/07/2014 --> REMANIEMENT : APPEL A OPFLOT
  57. C - CB215821 05/06/2018 --> Ajout de la fonction SIGN a un argument
  58. C
  59. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  60.  
  61. IMPLICIT INTEGER(I-N)
  62. IMPLICIT REAL*8(A-H,O-Z)
  63.  
  64. LOGICAL BATAN2
  65. REAL*8 XIN1,XIN2,XOUT
  66. INTEGER I,LDIM1,LDIM2,IR1,IR2,IPO1,IR
  67.  
  68. C
  69. -INC PPARAM
  70. -INC CCOPTIO
  71. C-INC CCREEL
  72. -INC SMLREEL
  73. -INC SMLENTI
  74.  
  75. SEGMENT ISEG(0)
  76.  
  77. BATAN2 = .FALSE.
  78.  
  79. IR =0
  80. IR1 =0
  81. IR2 =0
  82. LDIM1=0
  83. LDIM2=0
  84.  
  85. XIN1 = 0.D0
  86. XIN2 = 0.D0
  87.  
  88. MLENTI = IPO1
  89. SEGACT MLENTI
  90. LDIM1 = MLENTI.LECT(/1)
  91.  
  92. IF ( IPO3 .NE. 0 ) THEN
  93. MLENT2 = IPO3
  94. SEGACT MLENT2
  95. LDIM2 = MLENT2.LECT(/1)
  96.  
  97. C Les deux objets doivent être de même taille
  98. IF (LDIM1 .NE. LDIM2 ) THEN
  99. SEGDES,MLENT2,MLENTI
  100. CALL ERREUR(217)
  101. RETURN
  102. ENDIF
  103.  
  104. BATAN2 = .TRUE.
  105. ENDIF
  106.  
  107. JG = LDIM1
  108.  
  109. C Resultat LISTENTI attendu pour ABS (IOPERA = 14 OU 23)
  110. IF (IOPERA .EQ. 14 .OR. IOPERA .EQ. 23) THEN
  111. SEGINI MLENT1
  112. IPO3 = MLENT1
  113.  
  114. DO 10 I = 1,LDIM1
  115. IR1 = MLENTI.LECT(I)
  116. CALL OPENTI(IR1,IR2,BATAN2,IOPERA,IOUT,XOUT)
  117. MLENT1.LECT(I) = IOUT
  118. 10 CONTINUE
  119.  
  120. ELSE
  121. SEGINI MLREE1
  122. IF ( BATAN2 .EQV. .TRUE. ) THEN
  123. SEGINI MLREE2
  124. ENDIF
  125.  
  126. C Conversion en LISTREEL
  127. DO 11 I = 1,LDIM1
  128. MLREE1.PROG(I) =REAL(MLENTI.LECT(I))
  129. 11 CONTINUE
  130.  
  131. IF ( BATAN2 .EQV. .TRUE. ) THEN
  132. DO 12 I = 1,LDIM1
  133. MLREE2.PROG(I) =REAL(MLENT2.LECT(I))
  134. 12 CONTINUE
  135. ENDIF
  136.  
  137. IARGU = 0
  138. CALL OPLRE1(MLREE1,IOPERA,IARGU,0,0.D0,MLREE2,IRET)
  139. C MLREE2 est modifie en sortie !
  140. IPO3 = MLREE2
  141. ENDIF
  142.  
  143. RETURN
  144. END
  145.  
  146.  

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