Simulation Core
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

358 lines
15 KiB

  1. subroutine TD_RemoveComponents
  2. Use CStringConfigurationVariables
  3. Use CStringUpdateVariables
  4. Use CSafetyValveEnumVariables
  5. Use CIbopEnumVariables
  6. Use COperationConditionEnumVariables
  7. Use CKellyConnectionEnumVariables
  8. Use CElevatorConnectionEnumVariables
  9. Use COperationScenariosVariables
  10. Use CTdsConnectionModesEnumVariables
  11. Use CTdsElevatorModesEnumVariables
  12. Use CHoistingVariables
  13. Use TD_DrillStemComponents
  14. Use TD_WellGeometry
  15. Use TD_GeneralData
  16. Use TD_StringConnectionData
  17. implicit none
  18. integer :: i , TD_NumOfRemovedComponents
  19. !====================================================
  20. ! Remove Safety Valve & Kelly (OPERATION_DRILL)
  21. !====================================================
  22. if ( Hoisting%DriveType==1 .and. Get_OperationCondition()==OPERATION_DRILL .and. Get_KellyConnection() /= KELLY_CONNECTION_STRING ) then
  23. TD_KellyNewRemove = 1
  24. else
  25. TD_KellyNewRemove = 0
  26. TD_KellyOldRemove = 0
  27. end if
  28. if ( Hoisting%DriveType==1 .and. Get_OperationCondition()==OPERATION_DRILL .and. Get_KellyConnection() /= KELLY_CONNECTION_STRING .and. TD_KellyNewRemove/=TD_KellyOldRemove ) then
  29. !print* , 'Remove Safety Valve & Kelly='
  30. TD_NumOfRemovedComponents = 1
  31. Do i= TD_DrillStemComponentsNumbs , (TD_DrillStemComponentsNumbs-TD_NumOfRemovedComponents+1) , -1
  32. TD_DrillStems(i)%ComponentType = 0 !????????????
  33. TD_DrillStems(i)%Id = 0.
  34. TD_DrillStems(i)%Od = 0.
  35. TD_DrillStems(i)%Area = 0.
  36. TD_DrillStems(i)%RtoolJoint = 0.
  37. TD_DrillStems(i)%ToolJointRange = 0.
  38. TD_DrillStems(i)%Length = 0.
  39. TD_DrillStems(i)%LengthIni = 0.
  40. TD_DrillStems(i)%WeightperLength = 0.
  41. TD_DrillStems(i)%Weight = 0.
  42. End Do
  43. TD_DrillStemComponentsNumbs = TD_DrillStemComponentsNumbs-TD_NumOfRemovedComponents
  44. i = TD_StringConfigurationCount
  45. if ( TD_DrillStem(i)%Numbs>1 ) then
  46. TD_DrillStem(i)%ComponentType = 6
  47. TD_DrillStem(i)%Numbs = TD_DrillStem(i)%Numbs-1
  48. TD_DrillStem(i)%Id = TD_DrillStem(i)%Id ![ft]
  49. TD_DrillStem(i)%Od = TD_DrillStem(i)%Od ![ft]
  50. TD_DrillStem(i)%Length = TD_DrillStem(i)%Length ![ft]
  51. TD_DrillStem(i)%WeightperLength = TD_DrillStem(i)%WeightperLength
  52. TD_DrillStem(i)%TotalLength = TD_DrillStem(i)%Numbs*TD_DrillStem(i)%Length
  53. TD_DrillStem(i)%TotalWeight = TD_DrillStem(i)%TotalLength*TD_DrillStem(i)%WeightperLength
  54. TD_StringConfigurationCount = TD_StringConfigurationCount
  55. else if ( TD_DrillStem(i)%Numbs==1 ) then
  56. TD_DrillStem(i)%ComponentType = 6
  57. TD_DrillStem(i)%Numbs = 0
  58. TD_DrillStem(i)%Id = 0.
  59. TD_DrillStem(i)%Od = 0.
  60. TD_DrillStem(i)%Length = 0.
  61. TD_DrillStem(i)%WeightperLength = 0.
  62. TD_DrillStem(i)%TotalLength = 0.
  63. TD_DrillStem(i)%TotalWeight = 0.
  64. TD_StringConfigurationCount = TD_StringConfigurationCount-1
  65. end if
  66. TD_KellyOldRemove = TD_KellyNewRemove
  67. !print* , 'Remove Safety Valve & Kelly (OPERATION_DRILL)'
  68. end if
  69. !====================================================
  70. ! Remove Single
  71. !====================================================
  72. if ( Get_StringUpdate() == STRING_UPDATE_REMOVE_SINGLE ) then
  73. !print* , 'STRING_UPDATE_REMOVE_SINGLE='
  74. TD_NumOfRemovedComponents = 1
  75. Do i= TD_DrillStemComponentsNumbs , (TD_DrillStemComponentsNumbs-TD_NumOfRemovedComponents+1) , -1
  76. TD_DrillStems(i)%ComponentType = 0 !????????????
  77. TD_DrillStems(i)%Id = 0.
  78. TD_DrillStems(i)%Od = 0.
  79. TD_DrillStems(i)%Area = 0.
  80. TD_DrillStems(i)%RtoolJoint = 0.
  81. TD_DrillStems(i)%ToolJointRange = 0.
  82. TD_DrillStems(i)%Length = 0.
  83. TD_DrillStems(i)%LengthIni = 0.
  84. TD_DrillStems(i)%WeightperLength = 0.
  85. TD_DrillStems(i)%Weight = 0.
  86. End Do
  87. TD_DrillStemComponentsNumbs = TD_DrillStemComponentsNumbs-TD_NumOfRemovedComponents
  88. i = TD_StringConfigurationCount
  89. if ( TD_DrillStem(i)%Numbs>1 ) then
  90. TD_DrillStem(i)%ComponentType = 3
  91. TD_DrillStem(i)%Numbs = TD_DrillStem(i)%Numbs-1
  92. TD_DrillStem(i)%Id = TD_DrillStem(i)%Id ![ft]
  93. TD_DrillStem(i)%Od = TD_DrillStem(i)%Od ![ft]
  94. TD_DrillStem(i)%Length = TD_DrillStem(i)%Length
  95. TD_DrillStem(i)%WeightperLength = TD_DrillStem(i)%WeightperLength
  96. TD_DrillStem(i)%TotalLength = TD_DrillStem(i)%Numbs*TD_DrillStem(i)%Length
  97. TD_DrillStem(i)%TotalWeight = TD_DrillStem(i)%TotalLength*TD_DrillStem(i)%WeightperLength
  98. TD_StringConfigurationCount = TD_StringConfigurationCount
  99. else if ( TD_DrillStem(i)%Numbs==1 ) then
  100. TD_DrillStem(i)%ComponentType = 3
  101. TD_DrillStem(i)%Numbs = 0
  102. TD_DrillStem(i)%Id = 0.
  103. TD_DrillStem(i)%Od = 0.
  104. TD_DrillStem(i)%Length = 0.
  105. TD_DrillStem(i)%WeightperLength = 0.
  106. TD_DrillStem(i)%TotalLength = 0.
  107. TD_DrillStem(i)%TotalWeight = 0.
  108. TD_StringConfigurationCount = TD_StringConfigurationCount-1
  109. end if
  110. Call Set_StringUpdate(STRING_UPDATE_NEUTRAL)
  111. !print* , 'Remove Single'
  112. end if
  113. !====================================================
  114. ! Remove Stand
  115. !====================================================
  116. if ( Get_StringUpdate() == STRING_UPDATE_REMOVE_STAND ) then
  117. TD_NumOfRemovedComponents = 3
  118. Do i= TD_DrillStemComponentsNumbs , (TD_DrillStemComponentsNumbs-TD_NumOfRemovedComponents+1) , -1
  119. TD_DrillStems(i)%ComponentType = 0 !????????????
  120. TD_DrillStems(i)%Id = 0.
  121. TD_DrillStems(i)%Od = 0.
  122. TD_DrillStems(i)%Area = 0.
  123. TD_DrillStems(i)%RtoolJoint = 0.
  124. TD_DrillStems(i)%ToolJointRange = 0.
  125. TD_DrillStems(i)%Length = 0.
  126. TD_DrillStems(i)%LengthIni = 0.
  127. TD_DrillStems(i)%WeightperLength = 0.
  128. TD_DrillStems(i)%Weight = 0.
  129. End Do
  130. TD_DrillStemComponentsNumbs = TD_DrillStemComponentsNumbs-TD_NumOfRemovedComponents
  131. i = TD_StringConfigurationCount
  132. if ( TD_DrillStem(i)%Numbs>3 ) then
  133. TD_DrillStem(i)%ComponentType = 3
  134. TD_DrillStem(i)%Numbs = TD_DrillStem(i)%Numbs-3
  135. TD_DrillStem(i)%Id = TD_DrillStem(i)%Id ![ft]
  136. TD_DrillStem(i)%Od = TD_DrillStem(i)%Od ![ft]
  137. TD_DrillStem(i)%Length = TD_DrillStem(i)%Length
  138. TD_DrillStem(i)%WeightperLength = TD_DrillStem(i)%WeightperLength
  139. TD_DrillStem(i)%TotalLength = TD_DrillStem(i)%Numbs*TD_DrillStem(i)%Length
  140. TD_DrillStem(i)%TotalWeight = TD_DrillStem(i)%TotalLength*TD_DrillStem(i)%WeightperLength
  141. TD_StringConfigurationCount = TD_StringConfigurationCount
  142. else if ( TD_DrillStem(i)%Numbs==3 ) then
  143. TD_DrillStem(i)%ComponentType = 3
  144. TD_DrillStem(i)%Numbs = 0
  145. TD_DrillStem(i)%Id = 0.
  146. TD_DrillStem(i)%Od = 0.
  147. TD_DrillStem(i)%Length = 0.
  148. TD_DrillStem(i)%WeightperLength = 0.
  149. TD_DrillStem(i)%TotalLength = 0.
  150. TD_DrillStem(i)%TotalWeight = 0.
  151. TD_StringConfigurationCount = TD_StringConfigurationCount-1
  152. end if
  153. Call Set_StringUpdate(STRING_UPDATE_NEUTRAL)
  154. !print* , 'Remove Stand'
  155. end if
  156. !====================================================
  157. ! Remove IBOP
  158. !====================================================
  159. !if ( Get_Ibop() == IBOP_REMOVE ) then
  160. ! TD_IBOPNewRemove = 1
  161. !else
  162. ! TD_IBOPNewRemove = 0
  163. ! TD_IBOPOldRemove = 0
  164. !end if
  165. if ( Get_Ibop() == IBOP_REMOVE .and. TD_IBOPOldRemove==0 ) then
  166. TD_NumOfRemovedComponents = 1
  167. Do i= TD_DrillStemComponentsNumbs , (TD_DrillStemComponentsNumbs-TD_NumOfRemovedComponents+1) , -1
  168. TD_DrillStems(i)%ComponentType = 0 !????????????
  169. TD_DrillStems(i)%Id = 0.
  170. TD_DrillStems(i)%Od = 0.
  171. TD_DrillStems(i)%Area = 0.
  172. TD_DrillStems(i)%RtoolJoint = 0.
  173. TD_DrillStems(i)%ToolJointRange = 0.
  174. TD_DrillStems(i)%Length = 0.
  175. TD_DrillStems(i)%LengthIni = 0.
  176. TD_DrillStems(i)%WeightperLength = 0.
  177. TD_DrillStems(i)%Weight = 0.
  178. End Do
  179. TD_DrillStemComponentsNumbs = TD_DrillStemComponentsNumbs-TD_NumOfRemovedComponents
  180. i = TD_StringConfigurationCount
  181. if ( TD_DrillStem(i)%Numbs>1 ) then
  182. TD_DrillStem(i)%ComponentType = 5
  183. TD_DrillStem(i)%Numbs = TD_DrillStem(i)%Numbs-1
  184. TD_DrillStem(i)%Id = TD_DrillStem(i)%Id ![ft]
  185. TD_DrillStem(i)%Od = TD_DrillStem(i)%Od ![ft]
  186. TD_DrillStem(i)%Length = TD_DrillStem(i)%Length ![ft]
  187. TD_DrillStem(i)%WeightperLength = TD_DrillStem(i)%WeightperLength
  188. TD_DrillStem(i)%TotalLength = TD_DrillStem(i)%Numbs*TD_DrillStem(i)%Length
  189. TD_DrillStem(i)%TotalWeight = TD_DrillStem(i)%TotalLength*TD_DrillStem(i)%WeightperLength
  190. TD_StringConfigurationCount = TD_StringConfigurationCount
  191. else if ( TD_DrillStem(i)%Numbs==1 ) then
  192. TD_DrillStem(i)%ComponentType = 5
  193. TD_DrillStem(i)%Numbs = 0
  194. TD_DrillStem(i)%Id = 0.
  195. TD_DrillStem(i)%Od = 0.
  196. TD_DrillStem(i)%Length = 0.
  197. TD_DrillStem(i)%WeightperLength = 0.
  198. TD_DrillStem(i)%TotalLength = 0.
  199. TD_DrillStem(i)%TotalWeight = 0.
  200. TD_StringConfigurationCount = TD_StringConfigurationCount-1
  201. end if
  202. !TD_IBOPOldRemove = TD_IBOPNewRemove
  203. if ( Get_ElevatorConnection() /= ELEVATOR_CONNECTION_STRING .or. (Get_TdsConnectionModes()/=TDS_CONNECTION_NOTHING .and. Get_TdsElevatorModes()/=TDS_ELEVATOR_CONNECTION_STRING) ) then
  204. TD_ConnectionHeight = TD_ConnectionHeight-TD_IBOPLength
  205. end if
  206. !print* , 'Remove IBOP'
  207. end if
  208. if ( Get_Ibop() == IBOP_REMOVE ) then
  209. TD_IBOPOldRemove = 1
  210. else
  211. TD_IBOPOldRemove = 0
  212. end if
  213. !====================================================
  214. ! Remove Safety Valve (OPERATION_TRIP)
  215. !====================================================
  216. !if ( TD_OldOperationCondition==1 .and. TD_KellyDriveTypeMode==1 .and. Get_SafetyValve() == SAFETY_VALVE_REMOVE ) then
  217. ! TD_SafetyValveNewRemove = 1
  218. !else
  219. ! TD_SafetyValveNewRemove = 0
  220. ! TD_SafetyValveOldRemove = 0
  221. !end if
  222. !print* , 'Get_SafetyValve()=' , Get_SafetyValve()
  223. if ( TD_KellyDriveTypeMode/=0 .and. TD_OldOperationCondition/=0 .and. Get_SafetyValve() == SAFETY_VALVE_REMOVE .and. TD_SafetyValveOldRemove==0 ) then
  224. TD_NumOfRemovedComponents = 1
  225. Do i= TD_DrillStemComponentsNumbs , (TD_DrillStemComponentsNumbs-TD_NumOfRemovedComponents+1) , -1
  226. TD_DrillStems(i)%ComponentType = 0 !????????????
  227. TD_DrillStems(i)%Id = 0.
  228. TD_DrillStems(i)%Od = 0.
  229. TD_DrillStems(i)%Area = 0.
  230. TD_DrillStems(i)%RtoolJoint = 0.
  231. TD_DrillStems(i)%ToolJointRange = 0.
  232. TD_DrillStems(i)%Length = 0.
  233. TD_DrillStems(i)%LengthIni = 0.
  234. TD_DrillStems(i)%WeightperLength = 0.
  235. TD_DrillStems(i)%Weight = 0.
  236. End Do
  237. TD_DrillStemComponentsNumbs = TD_DrillStemComponentsNumbs-TD_NumOfRemovedComponents
  238. i = TD_StringConfigurationCount
  239. if ( TD_DrillStem(i)%Numbs>1 ) then
  240. TD_DrillStem(i)%ComponentType = 7
  241. TD_DrillStem(i)%Numbs = TD_DrillStem(i)%Numbs-1
  242. TD_DrillStem(i)%Id = TD_DrillStem(i)%Id ![ft]
  243. TD_DrillStem(i)%Od = TD_DrillStem(i)%Od ![ft]
  244. TD_DrillStem(i)%Length = TD_DrillStem(i)%Length ![ft]
  245. TD_DrillStem(i)%WeightperLength = TD_DrillStem(i)%WeightperLength
  246. TD_DrillStem(i)%TotalLength = TD_DrillStem(i)%Numbs*TD_DrillStem(i)%Length
  247. TD_DrillStem(i)%TotalWeight = TD_DrillStem(i)%TotalLength*TD_DrillStem(i)%WeightperLength
  248. TD_StringConfigurationCount = TD_StringConfigurationCount
  249. else if ( TD_DrillStem(i)%Numbs==1 ) then
  250. TD_DrillStem(i)%ComponentType = 7
  251. TD_DrillStem(i)%Numbs = 0
  252. TD_DrillStem(i)%Id = 0.
  253. TD_DrillStem(i)%Od = 0.
  254. TD_DrillStem(i)%Length = 0.
  255. TD_DrillStem(i)%WeightperLength = 0.
  256. TD_DrillStem(i)%TotalLength = 0.
  257. TD_DrillStem(i)%TotalWeight = 0.
  258. TD_StringConfigurationCount = TD_StringConfigurationCount-1
  259. end if
  260. !print* , 'Get_OperationCondition()=' , Get_OperationCondition()
  261. !print* , 'TD_OldOperationCondition=' , TD_OldOperationCondition
  262. !print* , 'TD_SafetyValveNewRemove=' , TD_SafetyValveNewRemove
  263. !print* , 'TD_SafetyValveOldRemove=' , TD_SafetyValveOldRemove
  264. !TD_SafetyValveOldRemove = TD_SafetyValveNewRemove
  265. if ( Get_ElevatorConnection() /= ELEVATOR_CONNECTION_STRING .or. (Get_TdsConnectionModes()/=TDS_CONNECTION_NOTHING .and. Get_TdsElevatorModes()/=TDS_ELEVATOR_CONNECTION_STRING) ) then
  266. TD_ConnectionHeight = TD_ConnectionHeight-TD_SafetyValveLength
  267. end if
  268. end if
  269. if ( Get_SafetyValve() == SAFETY_VALVE_REMOVE ) then
  270. TD_SafetyValveOldRemove = 1
  271. else
  272. TD_SafetyValveOldRemove = 0
  273. end if
  274. if ( TD_KellyDriveTypeMode==1 ) then
  275. TD_OldOperationCondition = 1
  276. else
  277. TD_OldOperationCondition = 0
  278. end if
  279. !print* , 'TD_KellyDriveTypeMode2=' , TD_KellyDriveTypeMode
  280. !print* , 'TD_OldOperationCondition2=' , TD_OldOperationCondition
  281. !print* , 'TD_SafetyValveNewRemove2=' , TD_SafetyValveNewRemove
  282. !print* , 'TD_SafetyValveOldRemove2=' , TD_SafetyValveOldRemove
  283. end subroutine