Télécharger ooomop.eso

Retour à la liste

Numérotation des lignes :

ooomop
  1. C OOOMOP SOURCE PV090527 26/04/24 08:23:14 12524
  2. SUBROUTINE OOOMOP (LRET)
  3. C-----------------------------------------------------------------
  4. C
  5. C ALLOCATION DYNAMIQUE DE MEMOIRE POUR G E M A T
  6. C
  7. C ->LRET 1 ERREUR OU PAS ASSEZ DE PLACE MEMOIRE
  8. C 2 OK
  9. C
  10. C PROGRAMMEUR : MOUGIN
  11. C MODIF : 26/01/89 PRISE EN COMPTE DU PARAMETRE ZERMEM
  12. C
  13. C-----------------------------------------------------------------
  14. C
  15. %INC IOOADR
  16. %INC IOOADZ
  17. %INC IOOSGM
  18. %INC IOOTRO
  19. %INC IOOTF2
  20. %INC IOOUNIT
  21. C
  22. CHARACTER*16 HPRM
  23. LOGICAL ZERMEM, BOERR
  24. C
  25. C ->LREG NOMBRE DE MOTS DISPONNIBLE DANS LA REGION
  26. C ->LBUF NOMBRE DE MOTS DE LA ZONE BUF
  27. C
  28. C ->IESO TELS QUE : ( A(IESO+I) , I=1,LESO )
  29. C ->LESO PARCOURT LA ZONE MEMOIRE ATTRIBUEE A GEMAT .
  30. C ->MZLB NOMBRE DE MOTS LAISSES LIBRES (Pour le systeme).
  31. C
  32. CALL OOOZZA (LREG)
  33. IF (LREG.LE.0) GOTO 901
  34. LBUF=0
  35. LESO=LREG
  36. MZLB=0
  37.  
  38. LBASE = 1
  39. %IF UNIX32,WIN32
  40. LBASE = 4
  41. %ENDIF
  42. %IF UNIX64,WIN64
  43. LBASE = 8
  44. %ENDIF
  45. C
  46. BOERR=.FALSE.
  47. CALL OOOPRM (LRET1,'ESOPE',HPRM,LPRM,LESO)
  48. IF (LRET1 .NE. 3) THEN
  49. IF (HPRM(LPRM-1:LPRM).EQ.'MO')THEN
  50. READ(HPRM(1:LPRM-2),*,ERR=101,IOSTAT=IOSTA1) LESO
  51. IF(IOSTA1 .NE. 0) BOERR = .TRUE.
  52. GOTO 102
  53. 101 CONTINUE
  54. BOERR = .TRUE.
  55. 102 CONTINUE
  56. IF (BOERR) THEN
  57. LESO=LREG
  58. ELSE
  59. LESO=(LESO*1024/LBASE)*1024
  60. ENDIF
  61.  
  62. ELSEIF(HPRM(LPRM-1:LPRM).EQ.'GO')THEN
  63. READ(HPRM(1:LPRM-2),*,ERR=111,IOSTAT=IOSTA1) LESO
  64. IF(IOSTA1 .NE. 0) GOTO 111
  65. GOTO 112
  66. 111 CONTINUE
  67. BOERR = .TRUE.
  68. 112 CONTINUE
  69. IF (BOERR) THEN
  70. LESO=LREG
  71. ELSE
  72. LESO=(LESO*1024/LBASE)*1024*1024
  73. ENDIF
  74.  
  75. ELSEIF(HPRM(LPRM:LPRM).EQ.'%')THEN
  76. READ(HPRM(1:LPRM-1),*,ERR=121,IOSTAT=IOSTA1) LESO
  77. IF(IOSTA1 .NE. 0) GOTO 121
  78. GOTO 122
  79. 121 CONTINUE
  80. BOERR = .TRUE.
  81. 122 CONTINUE
  82. IF (BOERR) THEN
  83. LESO=LREG
  84. ELSE
  85. LESO=LREG/100*LESO
  86. ENDIF
  87.  
  88. ELSE
  89. LESO=LREG
  90. ENDIF
  91. ENDIF
  92. LASKED=LESO
  93.  
  94. IF (LESO.GT.LREG) THEN
  95. WRITE(JLST,*) ' ESOPE VALEUR MAX=',LREG
  96. LESO = LREG
  97. ELSEIF(LESO .LT. 0 )THEN
  98. WRITE(JLST,*) ' ESOPE VALEUR NEGATIVE...=',LESO
  99. LESO = LREG
  100. ENDIF
  101. C
  102. BOERR=.FALSE.
  103. CALL OOOPRM (LRET3,'LIBRE',HPRM,LPRM,MZLB)
  104. IF (LRET3 .NE. 3) THEN
  105. IF (HPRM(LPRM-1:LPRM).EQ.'MO')THEN
  106. READ(HPRM(1:LPRM-2),*,ERR=201,IOSTAT=IOSTA1) MZLB
  107. IF(IOSTA1 .NE. 0) GOTO 201
  108. GOTO 202
  109. 201 CONTINUE
  110. BOERR = .TRUE.
  111. 202 CONTINUE
  112. IF (BOERR) THEN
  113. MZLB=0
  114. ELSE
  115. MZLB=(MZLB*1024/LBASE)*1024
  116. ENDIF
  117.  
  118. ELSEIF(HPRM(LPRM-1:LPRM).EQ.'GO')THEN
  119. READ(HPRM(1:LPRM-2),*,ERR=211,IOSTAT=IOSTA1) MZLB
  120. IF(IOSTA1 .NE. 0) GOTO 211
  121. GOTO 212
  122. 211 CONTINUE
  123. BOERR = .TRUE.
  124. 212 CONTINUE
  125. IF (BOERR) THEN
  126. MZLB=0
  127. ELSE
  128. MZLB=(MZLB*1024/LBASE)*1024*1024
  129. ENDIF
  130.  
  131. ELSEIF(HPRM(LPRM:LPRM).EQ.'%')THEN
  132. READ(HPRM(1:LPRM-1),*,ERR=221,IOSTAT=IOSTA1) MZLB
  133. IF(IOSTA1 .NE. 0) GOTO 221
  134. GOTO 222
  135. 221 CONTINUE
  136. BOERR = .TRUE.
  137. 222 CONTINUE
  138. IF (BOERR) THEN
  139. MZLB=0
  140. ELSE
  141. MZLB=LREG/100*MZLB
  142. ENDIF
  143.  
  144. ELSE
  145. MZLB=0
  146. ENDIF
  147. ENDIF
  148.  
  149. IF (MZLB .GE. LREG) THEN
  150. WRITE(JLST,*) ' LIBRE VALEUR MAX=',LREG
  151. MZLB = 0
  152. ELSEIF(MZLB .LT. 0 )THEN
  153. WRITE(JLST,*) ' LIBRE VALEUR NEGATIVE...=',MZLB
  154. MZLB = 0
  155. ENDIF
  156.  
  157. C *********************************
  158. C ****** RESERVATION MEMOIRE ******
  159. C *********************************
  160. CALL OOOZZB (LRET,IESO,LREG,LESO,MZLB)
  161. IF (LRET.EQ.1) GOTO 903
  162. C-----------------------------------------------------------------------
  163. C
  164. C A PARTIR DE IESO ET LESO , CALCULER
  165. C IZA ET LZA MULTIPLES DE MSLSM
  166. C
  167. C ->IZA TEL QUE : JZZ(IZA+I),I=1,LZA PARCOURT LA ZONE
  168. C ->LZA NOMBRE DE MOTS DE LA ZONE ESOPE
  169. C
  170. C
  171. IZA=((IESO+MSLSM-1)/MSLSM)*MSLSM
  172. LZA=((IESO+LESO )/MSLSM)*MSLSM-IZA
  173. IF (IZA.LT.0) IZA=IZA-MSLSM
  174. IF (LZA.LT.256*MSLSM) GOTO 903
  175. C
  176. C REMISE A ZERO DE LA ZONE ESOPE
  177. C SAUVEGARDE IESO ET LESO POUR OOOSTP
  178. C
  179. CALL OOOPRM (LRET,'ZERMEM',HPRM,LPRM,IPRM)
  180. C sur les machines type sun la memoire est allouee a zero
  181. %IF UNIX32,UNIX64,WIN32,WIN64
  182. ZERMEM = .FALSE.
  183. %ELSE
  184. ZERMEM = .TRUE.
  185. %ENDIF
  186. IF (LRET.EQ.4) ZERMEM = HPRM.NE.'NON'
  187. IF (ZERMEM) CALL OOOZMR (JZZ(IZA+1),LZA)
  188. MZLEN(IZA)=LZA
  189. MZIZA(IZA)=IESO
  190. MZLZA(IZA)=LESO
  191. C
  192. C INIT TROUS DE LONGUEUR NULLE ET CHAINE DES TROUS
  193. C POUR LES ZONES DYNAMIQUES ET FIXES
  194. C
  195. DO K=1,2
  196. IT0=MZIT0(IZA,K)
  197. MTLT1(IT0) =-0
  198. JTR (IT0+MSLSM)=-0
  199. MTITP(IT0) =IT0
  200. MTITS(IT0) =IT0
  201. MZITS0(IZA,K) =IT0
  202. ENDDO
  203. C
  204. C TROU RESULTANT ET LIMITE ZONE DYNAMIQUE/FIXE
  205. C
  206. IT=MZIS0(IZA)
  207. LT=((MZLEN(IZA)-(MZLAZ)-MSLSM*2)/MSLSM)*MSLSM
  208. MZLTROU(IZA,ZMEMDYN)=LT
  209. MZLTROU(IZA,ZMEMFIX)=0
  210. MZDLIM (IZA) =IT+LT
  211. C ON INSERT LE TROU D'INDICE IT ET DE LG LT DS LA CHAINE DES TROUS
  212. MTF2 , IZA(ZMEMDYN,IT,LT)
  213. MZITS0(IZA,ZMEMDYN)=IT
  214. LRET=2
  215. RETURN
  216. C-----------------------------------------------------------------------
  217. C
  218. C MESSAGES D'ERREUR
  219. C
  220. 901 CALL OOOERR (LREG,1,' ALLOCATION MEMOIRE IMPOSSIBLE')
  221. GOTO 950
  222. 903 CALL OOOERR (LREG,1,' ALLOCATION MEMOIRE INSUFFISANTE')
  223. GOTO 950
  224. 950 LRET=1
  225. RETURN
  226. END
  227.  
  228.  

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