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.
 
 
 
 
 
 

315 lines
14 KiB

  1. subroutine TD_AddComponents
  2. Use CStringConfigurationVariables
  3. Use CStringUpdateVariables
  4. Use CSafetyValveEnumVariables
  5. Use CIbopEnumVariables
  6. Use COperationConditionEnumVariables
  7. Use CKellyConnectionEnumVariables
  8. use COperationScenariosVariables, only: Get_ElevatorConnection
  9. Use CElevatorConnectionEnumVariables
  10. Use CHoistingVariables
  11. Use CTdsConnectionModesEnumVariables
  12. Use CTdsElevatorModesEnumVariables
  13. Use TD_DrillStemComponents
  14. Use TD_WellGeometry
  15. Use TD_GeneralData
  16. Use TD_StringConnectionData
  17. implicit none
  18. integer :: i , kk , TD_NumOfAddedComponents
  19. !====================================================
  20. ! Add Single
  21. !====================================================
  22. if ( Get_StringUpdate() == STRING_UPDATE_ADD_SINGLE ) then
  23. kk = 0
  24. Do i= TD_DrillStemComponentsNumbs , 1 , -1
  25. if (TD_DrillStems(i)%ComponentType==3) then
  26. kk = i
  27. exit
  28. end if
  29. End Do
  30. ! DrillStems Array:
  31. TD_NumOfAddedComponents = 1
  32. Do i= (TD_DrillStemComponentsNumbs+1) , (TD_DrillStemComponentsNumbs+TD_NumOfAddedComponents)
  33. TD_DrillStems(i)%ComponentType = 3
  34. TD_DrillStems(i)%Id = TD_DrillStems(kk)%Id
  35. TD_DrillStems(i)%Od = TD_DrillStems(kk)%Od
  36. TD_DrillStems(i)%Area = (pi*((TD_DrillStems(i)%Od**2)-(TD_DrillStems(i)%Id**2)))/4.d0
  37. TD_DrillStems(i)%RtoolJoint = TD_DrillStems(i)%Od*1.3d0/2.d0
  38. TD_DrillStems(i)%ToolJointRange = TD_ToolJointRange
  39. TD_DrillStems(i)%Length = TD_DrillStems(kk)%LengthIni
  40. TD_DrillStems(i)%LengthIni = TD_DrillStems(kk)%LengthIni
  41. TD_DrillStems(i)%WeightperLength = TD_DrillStems(kk)%WeightperLength
  42. TD_DrillStems(i)%Weight = TD_DrillStems(i)%WeightperLength*TD_DrillStems(i)%Length
  43. TD_DrillStems(i)%Density = TD_DrillStems(kk)%Density
  44. TD_DrillStems(i)%ElasticModule = TD_DrillStems(kk)%ElasticModule
  45. End Do
  46. TD_DrillStemComponentsNumbs = TD_DrillStemComponentsNumbs+TD_NumOfAddedComponents
  47. ! DrillStem Array:
  48. i = TD_StringConfigurationCount+1
  49. TD_DrillStem(i)%ComponentType = 3
  50. TD_DrillStem(i)%Numbs = 1
  51. TD_DrillStem(i)%Id = TD_DrillStems(kk)%Id ! [ft]
  52. TD_DrillStem(i)%Od = TD_DrillStems(kk)%Od ! [ft]
  53. TD_DrillStem(i)%Length = TD_DrillStems(kk)%LengthIni
  54. TD_DrillStem(i)%WeightperLength = TD_DrillStems(kk)%WeightperLength
  55. TD_DrillStem(i)%TotalLength = TD_DrillStem(i)%Numbs*TD_DrillStem(i)%Length
  56. TD_DrillStem(i)%TotalWeight = TD_DrillStem(i)%TotalLength*TD_DrillStem(i)%WeightperLength
  57. TD_StringConfigurationCount = TD_StringConfigurationCount+1
  58. Call Set_StringUpdate(STRING_UPDATE_NEUTRAL)
  59. end if
  60. !====================================================
  61. ! Add Stand
  62. !====================================================
  63. if ( Get_StringUpdate() == STRING_UPDATE_ADD_STAND ) then
  64. kk = 0
  65. Do i= TD_DrillStemComponentsNumbs , 1 , -1
  66. if (TD_DrillStems(i)%ComponentType==3) then
  67. kk = i
  68. exit
  69. end if
  70. End Do
  71. ! DrillStems Array:
  72. TD_NumOfAddedComponents = 3
  73. Do i= (TD_DrillStemComponentsNumbs+1) , (TD_DrillStemComponentsNumbs+TD_NumOfAddedComponents)
  74. TD_DrillStems(i)%ComponentType = 3
  75. TD_DrillStems(i)%Id = TD_DrillStems(kk)%Id
  76. TD_DrillStems(i)%Od = TD_DrillStems(kk)%Od
  77. TD_DrillStems(i)%Area = (pi*((TD_DrillStems(i)%Od**2)-(TD_DrillStems(i)%Id**2)))/4.0d0
  78. TD_DrillStems(i)%RtoolJoint = TD_DrillStems(i)%Od*1.30d0/2.0d0
  79. TD_DrillStems(i)%ToolJointRange = TD_ToolJointRange
  80. TD_DrillStems(i)%Length = TD_DrillStems(kk)%LengthIni
  81. TD_DrillStems(i)%LengthIni = TD_DrillStems(kk)%LengthIni
  82. TD_DrillStems(i)%WeightperLength = TD_DrillStems(kk)%WeightperLength
  83. TD_DrillStems(i)%Weight = TD_DrillStems(i)%WeightperLength*TD_DrillStems(i)%Length
  84. TD_DrillStems(i)%Density = TD_DrillStems(kk)%Density
  85. TD_DrillStems(i)%ElasticModule = TD_DrillStems(kk)%ElasticModule
  86. End Do
  87. TD_DrillStemComponentsNumbs = TD_DrillStemComponentsNumbs+TD_NumOfAddedComponents
  88. ! DrillStem Array:
  89. i = TD_StringConfigurationCount+1
  90. TD_DrillStem(i)%ComponentType = 3
  91. TD_DrillStem(i)%Numbs = 3
  92. TD_DrillStem(i)%Id = TD_DrillStems(kk)%Id ! [ft]
  93. TD_DrillStem(i)%Od = TD_DrillStems(kk)%Od ! [ft]
  94. TD_DrillStem(i)%Length = TD_DrillStems(kk)%LengthIni
  95. TD_DrillStem(i)%WeightperLength = TD_DrillStems(kk)%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+1
  99. Call Set_StringUpdate(STRING_UPDATE_NEUTRAL)
  100. end if
  101. !====================================================
  102. ! Add IBOP
  103. !====================================================
  104. !if ( Get_Ibop()==IBOP_INSTALL ) then
  105. ! TD_IBOPNewAdd = 1
  106. !else
  107. ! TD_IBOPNewAdd = 0
  108. ! TD_IBOPOldAdd = 0
  109. ! end if
  110. if ( Get_Ibop()==IBOP_INSTALL .and. TD_IBOPOldAdd==0 ) then
  111. kk = 0
  112. Do i= TD_DrillStemComponentsNumbs , 1 , -1
  113. if (TD_DrillStems(i)%ComponentType==3) then
  114. kk = i
  115. exit
  116. end if
  117. End Do
  118. ! DrillStems Array:
  119. TD_NumOfAddedComponents = 1
  120. Do i= (TD_DrillStemComponentsNumbs+1) , (TD_DrillStemComponentsNumbs+TD_NumOfAddedComponents)
  121. TD_DrillStems(i)%ComponentType = 5
  122. TD_DrillStems(i)%Id = TD_DrillStems(kk)%Id
  123. TD_DrillStems(i)%Od = TD_DrillStems(kk)%RtoolJoint
  124. TD_DrillStems(i)%Area = (pi*((TD_DrillStems(i)%Od**2)-(TD_DrillStems(i)%Id**2)))/4.0d0
  125. TD_DrillStems(i)%RtoolJoint = TD_DrillStems(kk)%RtoolJoint
  126. TD_DrillStems(i)%ToolJointRange = 0.0d0
  127. TD_DrillStems(i)%Length = TD_IBOPLength ! [ft]
  128. TD_DrillStems(i)%LengthIni = TD_IBOPLength ! [ft]
  129. TD_DrillStems(i)%WeightperLength = 55.0d0 ! [lb/ft]
  130. TD_DrillStems(i)%Weight = TD_DrillStems(i)%WeightperLength*TD_DrillStems(i)%Length
  131. TD_DrillStems(i)%Density = TD_DrillStems(kk)%Density !????????????
  132. TD_DrillStems(i)%ElasticModule = TD_DrillStems(kk)%ElasticModule !????????????
  133. End Do
  134. TD_DrillStemComponentsNumbs = TD_DrillStemComponentsNumbs+TD_NumOfAddedComponents
  135. ! DrillStem Array:
  136. i = TD_StringConfigurationCount+1
  137. TD_DrillStem(i)%ComponentType = 5
  138. TD_DrillStem(i)%Numbs = 1
  139. TD_DrillStem(i)%Id = TD_DrillStems(kk)%Id ! [ft]
  140. TD_DrillStem(i)%Od = TD_DrillStems(kk)%RtoolJoint ! [ft]
  141. TD_DrillStem(i)%Length = 1.540d0 ! [ft]
  142. TD_DrillStem(i)%WeightperLength = 55.0d0 ! [lb/ft]
  143. TD_DrillStem(i)%TotalLength = TD_DrillStem(i)%Numbs*TD_DrillStem(i)%Length
  144. TD_DrillStem(i)%TotalWeight = TD_DrillStem(i)%TotalLength*TD_DrillStem(i)%WeightperLength
  145. TD_StringConfigurationCount = TD_StringConfigurationCount+1
  146. !TD_IBOPOldAdd = TD_IBOPNewAdd
  147. if ( Get_ElevatorConnection() /= ELEVATOR_CONNECTION_STRING .or. (Get_TdsConnectionModes()/=TDS_CONNECTION_NOTHING .and. Get_TdsElevatorModes()/=TDS_ELEVATOR_CONNECTION_STRING) ) then
  148. TD_ConnectionHeight = TD_ConnectionHeight+TD_DrillStem(i)%Length
  149. end if
  150. end if
  151. if ( Get_Ibop()==IBOP_INSTALL ) then
  152. TD_IBOPOldAdd = 1
  153. else
  154. TD_IBOPOldAdd = 0
  155. end if
  156. !====================================================
  157. ! Add Safety Valve & Kelly (OPERATION_DRILL)
  158. !====================================================
  159. if ( Hoisting%DriveType==1 .and. Get_OperationCondition()==OPERATION_DRILL .and. Get_KellyConnection() == KELLY_CONNECTION_STRING ) then
  160. TD_KellyNewAdd = 1
  161. else
  162. TD_KellyNewAdd = 0
  163. TD_KellyOldAdd = 0
  164. end if
  165. if ( Hoisting%DriveType==1 .and. Get_OperationCondition()==OPERATION_DRILL .and. Get_KellyConnection() == KELLY_CONNECTION_STRING .and. TD_KellyNewAdd/=TD_KellyOldAdd ) then
  166. ! DrillStems Array:
  167. TD_NumOfAddedComponents = 1
  168. Do i= (TD_DrillStemComponentsNumbs+1) , (TD_DrillStemComponentsNumbs+TD_NumOfAddedComponents)
  169. TD_DrillStems(i)%ComponentType = 6
  170. TD_DrillStems(i)%Id = TD_KellyElementID ! [ft]
  171. TD_DrillStems(i)%Od = TD_KellyElementOD ! [ft]
  172. TD_DrillStems(i)%Area = (pi*((TD_DrillStems(i)%Od**2)-(TD_DrillStems(i)%Id**2)))/4.0d0
  173. TD_DrillStems(i)%RtoolJoint = TD_DrillStems(i)%Od*1.30d0/2.0d0
  174. TD_DrillStems(i)%ToolJointRange = 0.0d0
  175. TD_DrillStems(i)%Length = TD_KellyElementConst ! [ft]
  176. TD_DrillStems(i)%LengthIni = TD_KellyElementConst ! [ft]
  177. TD_DrillStems(i)%WeightperLength = 55.0d0 ! [lb/ft]
  178. TD_DrillStems(i)%Weight = TD_DrillStems(i)%WeightperLength*TD_DrillStems(i)%Length
  179. TD_DrillStems(i)%Density = 7850.d0*0.06242796d0 ! [kg/m3]*0.06242796=[lb/ft3]
  180. TD_DrillStems(i)%ElasticModule = 200.0d9*0.02088543d0 ! [lb/ft2] !200GPa=29Mpsi (steel)
  181. End Do
  182. TD_DrillStemComponentsNumbs = TD_DrillStemComponentsNumbs+TD_NumOfAddedComponents
  183. ! DrillStem Array:
  184. i = TD_StringConfigurationCount+1
  185. TD_DrillStem(i)%ComponentType = 6
  186. TD_DrillStem(i)%Numbs = 1
  187. TD_DrillStem(i)%Id = 3.0d0/12.d0 ! [ft]
  188. TD_DrillStem(i)%Od = 5.90d0/12.d0 ! [ft]
  189. TD_DrillStem(i)%Length = TD_KellyElementConst ! [ft]
  190. TD_DrillStem(i)%WeightperLength = 55.0d0 ! [lb/ft]
  191. TD_DrillStem(i)%TotalLength = TD_DrillStem(i)%Numbs*TD_DrillStem(i)%Length
  192. TD_DrillStem(i)%TotalWeight = TD_DrillStem(i)%TotalLength*TD_DrillStem(i)%WeightperLength
  193. TD_StringConfigurationCount = TD_StringConfigurationCount+1
  194. TD_KellyOldAdd = TD_KellyNewAdd
  195. end if
  196. !====================================================
  197. ! Add Safety Valve (OPERATION_TRIP)
  198. !====================================================
  199. !if ( Get_OperationCondition()==OPERATION_TRIP .and. Get_SafetyValve()==SAFETY_VALVE_INSTALL ) then
  200. ! TD_SafetyValveNewAdd = 1
  201. !else
  202. ! TD_SafetyValveNewAdd = 0
  203. ! TD_SafetyValveOldAdd = 0
  204. !end if
  205. if ( TD_KellyDriveTypeMode/=0 .and. TD_OldOperationCondition/=0 .and. Get_SafetyValve()==SAFETY_VALVE_INSTALL .and. TD_SafetyValveOldAdd==0 ) then
  206. kk = 0
  207. Do i= TD_DrillStemComponentsNumbs , 1 , -1
  208. if (TD_DrillStems(i)%ComponentType==3) then
  209. kk = i
  210. exit
  211. end if
  212. End Do
  213. ! DrillStems Array:
  214. TD_NumOfAddedComponents = 1
  215. Do i= (TD_DrillStemComponentsNumbs+1) , (TD_DrillStemComponentsNumbs+TD_NumOfAddedComponents)
  216. TD_DrillStems(i)%ComponentType = 7
  217. TD_DrillStems(i)%Id = TD_DrillStems(kk)%Id
  218. TD_DrillStems(i)%Od = TD_DrillStems(kk)%RtoolJoint
  219. TD_DrillStems(i)%Area = (pi*((TD_DrillStems(i)%Od**2)-(TD_DrillStems(i)%Id**2)))/4.0d0
  220. TD_DrillStems(i)%RtoolJoint = TD_DrillStems(kk)%RtoolJoint
  221. TD_DrillStems(i)%ToolJointRange = 0.0d0
  222. TD_DrillStems(i)%Length = TD_SafetyValveLength ! [ft]
  223. TD_DrillStems(i)%LengthIni = TD_SafetyValveLength ! [ft]
  224. TD_DrillStems(i)%WeightperLength = 55.0d0 ! [lb/ft]
  225. TD_DrillStems(i)%Weight = TD_DrillStems(i)%WeightperLength*TD_DrillStems(i)%Length
  226. TD_DrillStems(i)%Density = TD_DrillStems(kk)%Density !????????????
  227. TD_DrillStems(i)%ElasticModule = TD_DrillStems(kk)%ElasticModule !????????????
  228. End Do
  229. TD_DrillStemComponentsNumbs = TD_DrillStemComponentsNumbs+TD_NumOfAddedComponents
  230. ! DrillStem Array:
  231. i = TD_StringConfigurationCount+1
  232. TD_DrillStem(i)%ComponentType = 7
  233. TD_DrillStem(i)%Numbs = 1
  234. TD_DrillStem(i)%Id = TD_DrillStems(kk)%Id ! [ft]
  235. TD_DrillStem(i)%Od = TD_DrillStems(kk)%RtoolJoint ! [ft]
  236. TD_DrillStem(i)%Length = 1.540d0 ! [ft]
  237. TD_DrillStem(i)%WeightperLength = 55.0d0 ! [lb/ft]
  238. TD_DrillStem(i)%TotalLength = TD_DrillStem(i)%Numbs*TD_DrillStem(i)%Length
  239. TD_DrillStem(i)%TotalWeight = TD_DrillStem(i)%TotalLength*TD_DrillStem(i)%WeightperLength
  240. TD_StringConfigurationCount = TD_StringConfigurationCount+1
  241. !TD_SafetyValveOldAdd = TD_SafetyValveNewAdd
  242. if ( Get_ElevatorConnection() /= ELEVATOR_CONNECTION_STRING .or. (Get_TdsConnectionModes()/=TDS_CONNECTION_NOTHING .and. Get_TdsElevatorModes()/=TDS_ELEVATOR_CONNECTION_STRING) ) then
  243. TD_ConnectionHeight = TD_ConnectionHeight+TD_DrillStem(i)%Length
  244. end if
  245. end if
  246. if ( Get_SafetyValve()==SAFETY_VALVE_INSTALL ) then
  247. TD_SafetyValveOldAdd = 1
  248. else
  249. TD_SafetyValveOldAdd = 0
  250. end if
  251. end subroutine