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.
 
 
 
 
 
 

1741 regels
199 KiB

  1. {
  2. "cells": [
  3. {
  4. "cell_type": "code",
  5. "execution_count": 10,
  6. "metadata": {},
  7. "outputs": [
  8. {
  9. "data": {
  10. "image/png": "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",
  11. "text/plain": [
  12. "<Figure size 640x480 with 1 Axes>"
  13. ]
  14. },
  15. "metadata": {},
  16. "output_type": "display_data"
  17. }
  18. ],
  19. "source": [
  20. "import re\n",
  21. "import networkx as nx\n",
  22. "import matplotlib.pyplot as plt\n",
  23. "\n",
  24. "G = nx.Graph()\n",
  25. "f = open(\"Text1.txt\")\n",
  26. "lines = f.readlines()\n",
  27. "lines = [l.strip() for l in lines]\n",
  28. "for line in lines:\n",
  29. " if len(line)==0 or line.startswith(\"!\"):\n",
  30. " continue\n",
  31. " matches = re.findall(r\"\\((\\d+)\\)\", line)\n",
  32. " G.add_edge(matches[0], matches[1])\n",
  33. "\n",
  34. "node_types = {}\n",
  35. "for i in range(1,71):\n",
  36. " node_types[i] = 'valve'\n",
  37. "for i in range(71,91):\n",
  38. " node_types[i] = 'source'\n",
  39. "for i in range(91,129):\n",
  40. " node_types[i] = 'relation'\n",
  41. "\n",
  42. "\n",
  43. "\n",
  44. "pos = nx.spring_layout(G, seed=30)\n",
  45. "nx.draw(G, pos, node_size=100, node_color='skyblue', edge_color='gray')\n",
  46. "nx.draw_networkx_labels(G, pos, font_size=6, font_family='sans-serif')\n",
  47. "\n",
  48. "plt.show()\n"
  49. ]
  50. },
  51. {
  52. "attachments": {},
  53. "cell_type": "markdown",
  54. "metadata": {},
  55. "source": [
  56. "# Make makefile"
  57. ]
  58. },
  59. {
  60. "cell_type": "code",
  61. "execution_count": 72,
  62. "metadata": {},
  63. "outputs": [
  64. {
  65. "name": "stdout",
  66. "output_type": "stream",
  67. "text": [
  68. "\tCSharp/OperationScenarios/Common/COperationScenariosVariables.f90 /\n",
  69. "\tTorqueDrag/TD_Modules/TD_WellGeometry.f90 /\n",
  70. "\tTorqueDrag/TD_Modules/TD_WellElements.f90 /\n",
  71. "\tTorqueDrag/TD_Modules/TD_StringConnectionData.f90 /\n",
  72. "\tTorqueDrag/TD_Modules/GeoElements_FluidModule.f90 /\n",
  73. "\tRop/sROP_Variables.f90 /\n",
  74. "\tRop/sROP_Other_Variables.f90 /\n",
  75. "\tFluidFlow/Flow_Startup_VARIABLES.f90 /\n",
  76. "\tCSharp/DownHole/CDownHoleTypes.f90 /\n",
  77. "\tEquipments/Drawworks/Drawworks_VARIABLES.f90 /\n",
  78. "\tEquipments/ChokeControl/CHOKE_VARIABLES.f90 /\n",
  79. "\tEquipments/TopDrive/TopDrive_VARIABLES.f90 /\n",
  80. "\tEquipments/RotaryTable/RTable_VARIABLES.f90 /\n",
  81. "\tEquipments/Pumps/Pumps_VARIABLES.f90 /\n",
  82. "\tCSharp/Warnings/CWarningsVariables.f90 /\n",
  83. "\tCSharp/StudentStation/CStudentStationVariables.f90 /\n",
  84. "\tCSharp/OperationScenarios/SoftwareInputsVariables.f90 /\n",
  85. "\tCSharp/OperationScenarios/UnitySignals/UnitySignalsVariables.f90 /\n",
  86. "\tCSharp/OperationScenarios/Permissions/PermissionsVariables.f90 /\n",
  87. "\tCSharp/OperationScenarios/Notifications/NotificationVariables.f90 /\n",
  88. "\tCSharp/Equipments/Tanks/CTanksVariables.f90 /\n",
  89. "\tCSharp/Equipments/DrillWatch/CDrillWatchVariables.f90 /\n",
  90. "\tCSharp/Equipments/ControlPanels/CTopDrivePanelVariables.f90 /\n",
  91. "\tCSharp/Equipments/ControlPanels/CStandPipeManifoldVariables.f90 /\n",
  92. "\tCSharp/Equipments/ControlPanels/CHookVariables.f90 /\n",
  93. "\tCSharp/Equipments/ControlPanels/CDrillingConsoleVariables.f90 /\n",
  94. "\tCSharp/Equipments/ControlPanels/CChokeManifoldVariables.f90 /\n",
  95. "\tCSharp/Equipments/ControlPanels/CChokeControlPanelVariables.f90 /\n",
  96. "\tCSharp/Equipments/ControlPanels/CBopControlPanelVariables.f90 /\n",
  97. "\tCSharp/BasicInputs/WellProfile/CWellSurveyDataVariables.f90 /\n",
  98. "\tCSharp/BasicInputs/WellProfile/CPathGenerationVariables.f90 /\n",
  99. "\tCSharp/BasicInputs/WellProfile/CCasingLinerChokeVariables.f90 /\n",
  100. "\tCSharp/BasicInputs/RigSpecifications/CRigSizeVariables.f90 /\n",
  101. "\tCSharp/Common/CIActionReference.f90 /\n",
  102. "\tCSharp/BasicInputs/RigSpecifications/CPowerVariables.f90 /\n",
  103. "\tCSharp/BasicInputs/RigSpecifications/CHoistingVariables.f90 /\n",
  104. "\tCSharp/BasicInputs/RigSpecifications/CBopStackVariables.f90 /\n",
  105. "\tCSharp/BasicInputs/RigSpecifications/CAccumulatorVariables.f90 /\n",
  106. "\tCSharp/BasicInputs/Geology/CShoeVariables.f90 /\n",
  107. "\tCSharp/BasicInputs/Geology/CReservoirVariables.f90 /\n",
  108. "\tCSharp/BasicInputs/Geology/CFormationVariables.f90 /\n",
  109. "\tCSharp/BasicInputs/Bha/CStringConfigurationVariables.f90 /\n",
  110. "\tSimulation/Constants.f90 /\n",
  111. "\tCSharp/Equipments/MudPathFinding/CArrangement.f90 /\n",
  112. "\tCSharp/OperationScenarios/Unity/CUnityInputs.f90 /\n",
  113. "\tCSharp/Common/CCommonVariables.f90 /\n",
  114. "\tCommon/DynamicIntegerArray.f90 /\n",
  115. "\tRop/RopMain.f90 /\n",
  116. "\tCSharp/Equipments/ControlPanels/CEquipmentsConstants.f90 /\n",
  117. "\tCommon/DynamicRealArray.f90 /\n",
  118. "\tCSharp/Common/CTimerLegacy.f90 /\n",
  119. "\tCommon/DynamicDoubleArray.f90 /\n",
  120. "\tCSharp/Equipments/MudPathFinding/CPathChangeEvents.f90 /\n",
  121. "\tCommon/DynamicLogicalArray.f90 /\n",
  122. "\tCSharp/Common/CScaleRange.f90 /\n",
  123. "\tCSharp/Common/CTimer.f90 /\n",
  124. "\tCSharp/Common/CQuery.f90 /\n",
  125. "\tFluidFlow/FluidFlowMain.f90 /\n",
  126. "\tTorqueDrag/TD_Modules/TD_GeneralData.f90 /\n",
  127. "\tCSharp/BasicInputs/WellProfile/CWellSurveyData.f90 /\n",
  128. "\tCSharp/Equipments/ControlPanels/CDataDisplayConsoleVariables.f90 /\n",
  129. "\tCSharp/ErrorLog/CLog4.f90 /\n",
  130. "\tCSharp/BasicInputs/RigSpecifications/CPumpsVariables.f90 /\n",
  131. "\tCSharp/ErrorLog/CLog1.f90 /\n",
  132. "\tCSharp/BasicInputs/CMudPropertiesVariables.f90 /\n",
  133. "\tCSharp/ErrorLog/CLog5.f90 /\n",
  134. "\tCSharp/ErrorLog/CError.f90 /\n",
  135. "\tCSharp/ErrorLog/CLog2.f90 /\n",
  136. "\tCSharp/ErrorLog/CLog3.f90 /\n",
  137. "\tSimulation/CSounds.f90 /\n",
  138. "\tCSharp/Common/CCommon.f90 /\n",
  139. "\tFluidFlow/Pressure_Display_VARIABLES.f90 /\n",
  140. "\tEquipments/BopStack/VARIABLES.f90 /\n",
  141. "\tFluidFlow/kick/Kick_VARIABLES.f90 /\n",
  142. "\tCSharp/OperationScenarios/Unity/CUnityOutputs.f90 /\n",
  143. "\tCSharp/DownHole/CDownHoleVariables.f90 /\n",
  144. "\tGeo/GeoMain.f90 /\n",
  145. "\tCSharp/Equipments/MudPathFinding/CPath.f90 /\n",
  146. "\tCSharp/Problems/CProblemDifinition.f90 /\n",
  147. "\tFluidFlow/Pressure_Distribution_VARIABLES.f90 /\n",
  148. "\tEquipments/MudSystem/MudSystem_Variables.f90 /\n",
  149. "\tTorqueDrag/TD_Modules/TD_DrillStem.f90 /\n",
  150. "\tCSharp/Equipments/MudPathFinding/CStack.f90 /\n",
  151. "\tCSharp/Problems/CDrillStemProblemsVariables.f90 /\n",
  152. "\tCSharp/Problems/COtherProblemsVariables.f90 /\n",
  153. "\tCSharp/Problems/CLostProblemsVariables.f90 /\n",
  154. "\tCSharp/Problems/CGaugesProblemsVariables.f90 /\n",
  155. "\tCSharp/Problems/CBitProblemsVariables.f90 /\n",
  156. "\tCSharp/Problems/CKickProblemsVariables.f90 /\n",
  157. "\tCSharp/Problems/CHoistingProblemsVariables.f90 /\n",
  158. "\tCSharp/Problems/CChokeProblemsVariables.f90 /\n",
  159. "\tCSharp/Problems/CPumpProblemsVariables.f90 /\n",
  160. "\tCSharp/Problems/CRotaryProblemsVariables.f90 /\n",
  161. "\tCSharp/Problems/CMudTreatmentProblemsVariables.f90 /\n",
  162. "\tCSharp/Problems/CBopProblemsVariables.f90 /\n",
  163. "\tSimulation/SimulationVariables.f90 /\n",
  164. "\tCSharp/Problems/CMudTreatmentProblems.f90 /\n",
  165. "\tCSharp/Problems/CChokeProblems.f90 /\n",
  166. "\tCSharp/Equipments/ControlPanels/CHook.f90 /\n",
  167. "\tCSharp/BasicInputs/RigSpecifications/CRigSize.f90 /\n",
  168. "\tEquipments/BopStack/PipeRams1Main.f90 /\n",
  169. "\tCSharp/Problems/COtherProblems.f90 /\n",
  170. "\tCSharp/BasicInputs/RigSpecifications/CAccumulator.f90 /\n",
  171. "\tCSharp/Problems/CRotaryProblems.f90 /\n",
  172. "\tCSharp/Problems/CDrillStemProblems.f90 /\n",
  173. "\tCSharp/BasicInputs/MudProperties.f90 /\n",
  174. "\tCSharp/BasicInputs/RigSpecifications/CPower.f90 /\n",
  175. "\tEquipments/RotaryTable/RotaryTableMain.f90 /\n",
  176. "\tCSharp/Equipments/MudPathFinding/CManifolds.f90 /\n",
  177. "\tCSharp/Problems/CBopProblems.f90 /\n",
  178. "\tCSharp/DownHole/DownHole.f90 /\n",
  179. "\tCSharp/Problems/CHoistingProblems.f90 /\n",
  180. "\tCSharp/BasicInputs/RigSpecifications/CHoisting.f90 /\n",
  181. "\tEquipments/Drawworks/DrawworksMain.f90 /\n",
  182. "\tCSharp/Problems/CLostProblems.f90 /\n",
  183. "\tCSharp/Problems/CBitProblems.f90 /\n",
  184. "\tCSharp/BasicInputs/RigSpecifications/CBopStack.f90 /\n",
  185. "\tEquipments/BopStack/ChokeLineMain.f90 /\n",
  186. "\tEquipments/Pumps/PumpsMain.f90 /\n",
  187. "\tEquipments/BopStack/AnnularMain.f90 /\n",
  188. "\tCSharp/BasicInputs/WellProfile/CPathGeneration.f90 /\n",
  189. "\tCSharp/BasicInputs/Geology/CReservoir.f90 /\n",
  190. "\tCSharp/BasicInputs/Bha/CStringConfiguration.f90 /\n",
  191. "\tEquipments/BopStack/PipeRams2Main.f90 /\n",
  192. "\tEquipments/BopStack/BlindRamsMain.f90 /\n",
  193. "\tCSharp/Problems/CKickProblems.f90 /\n",
  194. "\tCSharp/OperationScenarios/Permissions/Permissions.f90 /\n",
  195. "\tCSharp/BasicInputs/Geology/CFormation.f90 /\n",
  196. "\tEquipments/BopStack/KillLineMain.f90 /\n",
  197. "\tCSharp/Problems/CGaugesProblems.f90 /\n",
  198. "\tCSharp/BasicInputs/WellProfile/CCasingLinerChoke.f90 /\n",
  199. "\tCSharp/BasicInputs/Geology/CShoe.f90 /\n",
  200. "\tCSharp/Problems/CPumpProblems.f90 /\n",
  201. "\tCSharp/Equipments/ControlPanels/CDataDisplayConsole.f90 /\n",
  202. "\tCSharp/OperationScenarios/SoftwareInputs.f90 /\n",
  203. "\tTorqueDrag/TD_ReadDataSubroutines/TD_DrillStemReadData.f90 /\n",
  204. "\tEquipments/Pumps/Pump_OffMode_Solver.f90 /\n",
  205. "\tTorqueDrag/TD_Forces/TD_DropArea/TD_ForceDownDRot.f90 /\n",
  206. "\tTorqueDrag/TD_Forces/TD_DropArea/TD_ForceDownD.f90 /\n",
  207. "\tFluidFlow/kick/Formation_Information.f90 /\n",
  208. "\tTorqueDrag/TD_DrillingSubs/TD_WellElementsConfiguration.f90 /\n",
  209. "\tEquipments/MudSystem/Elements_Creation.f90 /\n",
  210. "\tEquipments/Drawworks/Drawworks_StartUp.f90 /\n",
  211. "\tTorqueDrag/TD_ReadDataSubroutines/TD_PipePropertiesReadData.f90 /\n",
  212. "\tTorqueDrag/TD_Forces/TD_CombinedMotionData.f90 /\n",
  213. "\tTorqueDrag/TD_DrillingSubs/TVD_Calculator.f90 /\n",
  214. "\tTorqueDrag/TD_Forces/TD_StraightArea/TD_ForceUpSRot.f90 /\n",
  215. "\tRop/Bit_Specification.f90 /\n",
  216. "\tEquipments/Pumps/Pump3_MainSolver.f90 /\n",
  217. "\tEquipments/MudSystem/Kick_Expansion_and_Contraction.f90 /\n",
  218. "\tTorqueDrag/TD_Forces/TD_ForceCalculation.f90 /\n",
  219. "\tTorqueDrag/TD_Forces/TD_BuildArea/TD_ForceDownB.f90 /\n",
  220. "\tEquipments/Pumps/Pumps_TotalSolver.f90 /\n",
  221. "\tTorqueDrag/TD_Forces/TD_StrainCalculation.f90 /\n",
  222. "\tFluidFlow/Flow_Startup.f90 /\n",
  223. "\tEquipments/DrillingConsole_ScrLEDs.f90 /\n",
  224. "\tTorqueDrag/TD_Forces/TD_ViscousDragForce/TD_ViscousDragForce.f90 /\n",
  225. "\tTorqueDrag/TD_Forces/TD_StraightArea/TD_ForceUpS.f90 /\n",
  226. "\tTorqueDrag/TD_Forces/TD_StraightArea/TD_ForceDownS.f90 /\n",
  227. "\tEquipments/RotaryTable/RTable_StartUp.f90 /\n",
  228. "\tEquipments/MudSystem/Utube2_and_Trip_In.f90 /\n",
  229. "\tEquipments/MudSystem/Kick_Migration.f90 /\n",
  230. "\tTorqueDrag/TD_ReadDataSubroutines/TD_ForceReadData.f90 /\n",
  231. "\tTorqueDrag/TD_Forces/TD_StaticHookLoadCalculation.f90 /\n",
  232. "\tEquipments/MudSystem/Pump_and_Trip_In.f90 /\n",
  233. "\tEquipments/MudSystem/Deallocate_Normal_Circulation.f90 /\n",
  234. "\tEquipments/RotaryTable/RTable_OnModeSolver.f90 /\n",
  235. "\tEquipments/Pumps/Pump_OnMode_Solver.f90 /\n",
  236. "\tTorqueDrag/TD_ReadDataSubroutines/TD_WellElementsReadData.f90 /\n",
  237. "\tTorqueDrag/TD_ReadDataSubroutines/TD_MudPropertiesReadData.f90 /\n",
  238. "\tTorqueDrag/TD_Forces/TD_DropArea/TD_ForceUpDRot.f90 /\n",
  239. "\tEquipments/TopDrive/TopDrive_StartUp.f90 /\n",
  240. "\tEquipments/MudSystem/FillingWell_By_BellNipple.f90 /\n",
  241. "\tTorqueDrag/TD_Forces/TD_BuildArea/TD_ForceUpBRot.f90 /\n",
  242. "\tTorqueDrag/TD_Forces/TD_TorqueCalculation.f90 /\n",
  243. "\tTorqueDrag/TD_Forces/TD_BuildArea/TD_ForceDownBRot.f90 /\n",
  244. "\tEquipments/Drawworks/Drawworks_MainSolver.f90 /\n",
  245. "\tTorqueDrag/TD_Forces/TD_DropArea/TD_ForceUpD.f90 /\n",
  246. "\tTorqueDrag/TD_Forces/TD_BuildArea/TD_ForceUpB.f90 /\n",
  247. "\tEquipments/RotaryTable/RTable_OffModeSolver.f90 /\n",
  248. "\tTorqueDrag/TD_StartUp/TD_DrillStemStartUp.f90 /\n",
  249. "\tTorqueDrag/TD_Forces/TD_StraightArea/TD_ForceDownSRot.f90 /\n",
  250. "\tRop/JetImpactForce.f90 /\n",
  251. "\tTorqueDrag/TD_ReadDataSubroutines/TD_WellReadData.f90 /\n",
  252. "\tTorqueDrag/TD_Forces/TD_BouyancyFactor.f90 /\n",
  253. "\tFluidFlow/Frictional_Press_Drop_Calc.f90 /\n",
  254. "\tEquipments/TopDrive/TopDrive_Outputs.f90 /\n",
  255. "\tEquipments/Drawworks/DWFixModeMotion.f90 /\n",
  256. "\tCSharp/Equipments/ControlPanels/CBopControlPanel.f90 /\n",
  257. "\tCSharp/OperationScenarios/UnitySignals/UnitySignals.f90 /\n",
  258. "\tCSharp/BasicInputs/RigSpecifications/CPumps.f90 /\n",
  259. "\tCSharp/Equipments/ControlPanels/CChokeManifold.f90 /\n",
  260. "\tCSharp/Equipments/Tanks/CTanks.f90 /\n",
  261. "\tCSharp/Warnings/CWarnings.f90 /\n",
  262. "\tTorqueDrag/TD_DrillingSubs/TD_BOPDiamCalculation.f90 /\n",
  263. "\tEquipments/Drawworks/Drawworks_Direction.f90 /\n",
  264. "\tEquipments/RotaryTable/RTable_Outputs.f90 /\n",
  265. "\tEquipments/Drawworks/DWMalfunction_MotorFailure.f90 /\n",
  266. "\tTorqueDrag/TD_Forces/TD_WeightOnBitCalculation.f90 /\n",
  267. "\tFluidFlow/String_Property_Calculator.f90 /\n",
  268. "\tFluidFlow/Annulus_Property_Calculator.f90 /\n",
  269. "\tEquipments/MudSystem/Trip_Out_andPump.f90 /\n",
  270. "\tEquipments/MudSystem/Utube1_and_Trip_In.f90 /\n",
  271. "\tEquipments/Pumps/Pump2_MainSolver.f90 /\n",
  272. "\tEquipments/Pumps/Pump1_MainSolver.f90 /\n",
  273. "\tFluidFlow/Utube.f90 /\n",
  274. "\tEquipments/BopStack/BOP.f90 /\n",
  275. "\tEquipments/BopStack/SHEAR_RAM.f90 /\n",
  276. "\tEquipments/BopStack/PIPE_RAM2.f90 /\n",
  277. "\tEquipments/BopStack/LOSS_INPUTS.f90 /\n",
  278. "\tEquipments/BopStack/ANNULAR.f90 /\n",
  279. "\tEquipments/BopStack/CHOKE_LINE.f90 /\n",
  280. "\tEquipments/BopStack/KILL_LINE.f90 /\n",
  281. "\tEquipments/BopStack/PIPE_RAM1.f90 /\n",
  282. "\tEquipments/BopStack/BOPstartup.f90 /\n",
  283. "\tCSharp/OperationScenarios/Notifications/Notofications.f90 /\n",
  284. "\tTorqueDrag/TD_StartUp/TD_StartUp.f90 /\n",
  285. "\tTorqueDrag/TD_Forces/TD_HookLoadCalculation.f90 /\n",
  286. "\tEquipments/TopDrive/TopDrive_Inputs.f90 /\n",
  287. "\tEquipments/TopDrive/TopDrive_Solver.f90 /\n",
  288. "\tCSharp/OperationScenarios/Notifications/Notifications.f90 /\n",
  289. "\tTorqueDrag/TorqueDragMain.f90 /\n",
  290. "\tTorqueDrag/TD_DrillingSubs/MeshGeneration_FluidModule.f90 /\n",
  291. "\tEquipments/Pumps/Pumps_StartUp.f90 /\n",
  292. "\tEquipments/ChokeControl/CHOKE.f90 /\n",
  293. "\tEquipments/ChokeControl/AirPump_Choke_Subs.f90 /\n",
  294. "\tEquipments/MudSystem/MudSystemStartup.f90 /\n",
  295. "\tEquipments/TopDrive/TopDriveMain.f90 /\n",
  296. "\tEquipments/MudSystem/MudSystem.f90 /\n",
  297. "\tRop/ROP_MainCalculation.f90 /\n",
  298. "\tEquipments/Drawworks/Drawworks_Outputs.f90 /\n",
  299. "\tEquipments/RotaryTable/RTable_Inputs.f90 /\n",
  300. "\tEquipments/TopDrive/TopDrive_OffMode.f90 /\n",
  301. "\tEquipments/TopDrive/TopDrive_MainSolver.f90 /\n",
  302. "\tCSharp/OperationScenarios/Common/OperationScenarios.f90 /\n",
  303. "\tEquipments/ChokeControl/ChokeControlMain.f90 /\n",
  304. "\tEquipments/ChokeControl/ChokeStartup.f90 /\n",
  305. "\tEquipments/MudSystem/MudSystemMain.f90 /\n",
  306. "\tEquipments/Pumps/Pumps_Inputs.f90 /\n",
  307. "\tEquipments/Pumps/Pumps_Outputs.f90 /\n",
  308. "\tFluidFlow/Annulus_and_Openhole_Pressure_Distribution.f90 /\n",
  309. "\tTorqueDrag/TD_DrillingSubs/TD_WellGeoConfiguration.f90 /\n",
  310. "\tEquipments/RotaryTable/RTable_MainSolver.f90 /\n",
  311. "\tCSharp/OperationScenarios/UnitySignals/CSlipsEnum.f90 /\n",
  312. "\tCSharp/OperationScenarios/Notifications/CUnlatchLedNotification.f90 /\n",
  313. "\tCSharp/OperationScenarios/Notifications/CTdsTorqueWrenchLedNotification.f90 /\n",
  314. "\tCSharp/OperationScenarios/Permissions/CInstallMudBucketPermission.f90 /\n",
  315. "\tCSharp/OperationScenarios/Permissions/CFillupHeadPermission.f90 /\n",
  316. "\tCSharp/OperationScenarios/Notifications/COpenKellyCockLedNotification.f90 /\n",
  317. "\tCSharp/OperationScenarios/Notifications/CTdsPowerLedNotification.f90 /\n",
  318. "\tCSharp/OperationScenarios/Notifications/CSwingLedNotification.f90 /\n",
  319. "\tCSharp/OperationScenarios/Enums/CTdsElevatorModesEnum.f90 /\n",
  320. "\tCSharp/OperationScenarios/UnitySignals/CTdsSpineEnum.f90 /\n",
  321. "\tCSharp/OperationScenarios/Permissions/CSwingTiltPermission.f90 /\n",
  322. "\tCSharp/OperationScenarios/Permissions/CIrSafetyValvePermission.f90 /\n",
  323. "\tCSharp/OperationScenarios/Permissions/CSwingOffPermission.f90 /\n",
  324. "\tCSharp/OperationScenarios/Notifications/CCloseSafetyValveLedNotification.f90 /\n",
  325. "\tCSharp/OperationScenarios/UnitySignals/CMouseHoleEnum.f90 /\n",
  326. "\tCSharp/OperationScenarios/UnitySignals/CFlowPipeDisconnectEnum.f90 /\n",
  327. "\tCSharp/OperationScenarios/Notifications/CCloseKellyCockLedNotification.f90 /\n",
  328. "\tCSharp/OperationScenarios/Enums/CElevatorConnectionEnum.f90 /\n",
  329. "\tCSharp/OperationScenarios/Notifications/CIrSafetyValveLedNotification.f90 /\n",
  330. "\tCSharp/OperationScenarios/UnitySignals/CFlowKellyDisconnectEnum.f90 /\n",
  331. "\tCSharp/OperationScenarios/Notifications/COpenSafetyValveLedNotification.f90 /\n",
  332. "\tCSharp/OperationScenarios/UnitySignals/CTdsBackupClamp.f90 /\n",
  333. "\tCSharp/OperationScenarios/UnitySignals/CTdsTongEnum.f90 /\n",
  334. "\tCSharp/OperationScenarios/UnitySignals/CElevatorEnum.f90 /\n",
  335. "\tCSharp/OperationScenarios/Notifications/CTongNotification.f90 /\n",
  336. "\tCSharp/OperationScenarios/UnitySignals/CSafetyValveEnum.f90 /\n",
  337. "\tCSharp/OperationScenarios/Permissions/CRemoveMudBucketPermission.f90 /\n",
  338. "\tCSharp/OperationScenarios/Permissions/CInstallFillupHeadPermission.f90 /\n",
  339. "\tCSharp/OperationScenarios/UnitySignals/CSwingEnum.f90 /\n",
  340. "\tCSharp/OperationScenarios/UnitySignals/CKellyEnum.f90 /\n",
  341. "\tCSharp/OperationScenarios/Permissions/CSwingDrillPermission.f90 /\n",
  342. "\tCSharp/OperationScenarios/Permissions/CIrIbopPermission.f90 /\n",
  343. "\tCSharp/OperationScenarios/Permissions/CRemoveFillupHeadPermission.f90 /\n",
  344. "\tCSharp/OperationScenarios/Common/COperationScenariosSettings.f90 /\n",
  345. "\tCSharp/OperationScenarios/UnitySignals/CTdsSwingEnum.f90 /\n",
  346. "\tCSharp/OperationScenarios/UnitySignals/CIbopEnum.f90 /\n",
  347. "\tCSharp/OperationScenarios/Notifications/CFillMouseHoleLedNotification.f90 /\n",
  348. "\tCSharp/OperationScenarios/UnitySignals/CTongEnum.f90 /\n",
  349. "\tCSharp/OperationScenarios/Notifications/CIrIBopLedNotification.f90 /\n",
  350. "\tCSharp/OperationScenarios/Notifications/CTdsIbopLedNotification.f90 /\n",
  351. "\tCSharp/OperationScenarios/Notifications/CLatchLedNotification.f90 /\n",
  352. "\tCSharp/OperationScenarios/Notifications/CSlipsNotification.f90 /\n",
  353. "\tTorqueDrag/TD_DrillingSubs/TD_DrillStemConfiguration.f90 /\n",
  354. "\tEquipments/MudSystem/Kick_Influx.f90 /\n",
  355. "\tEquipments/MudSystem/Disconnecting_Pipe.f90 /\n",
  356. "\tEquipments/Drawworks/Drawworks_Solver_OffMode.f90 /\n",
  357. "\tTorqueDrag/TD_DrillingSubs/TD_RemoveComponents.f90 /\n",
  358. "\tFluidFlow/Horizontal_and_String_Pressure_Distribution.f90 /\n",
  359. "\tEquipments/Drawworks/Drawworks_INPUTS.f90 /\n",
  360. "\tTorqueDrag/TD_DrillingSubs/TD_AddComponents.f90 /\n",
  361. "\tEquipments/Drawworks/Drawworks_Solver.f90 /\n",
  362. "\tEquipments/Pumps/Pumps_MainSolver.f90 /\n",
  363. "\tCSharp/OperationScenarios/Common/COperationScenariosMain.f90 /\n",
  364. "\tEquipments/MudSystem/Circulation_Code_Select.f90 /\n",
  365. "\tTorqueDrag/TD_DrillingSubs/TD_StringConnectionModes.f90 /\n",
  366. "\tFluidFlow/kick/Gas_Kick_Calculator.f90 /\n",
  367. "\tSimulator.f90 /\n",
  368. "\tTorqueDrag/TD_MainCalculations.f90 /\n",
  369. "\tFluidFlow/Well_Pressure_Data_Transfer.f90 /\n",
  370. "\tSimulationCore2.f90 /\n",
  371. "\tEquipments/MudSystem/Plot_Final_Mud_Elements.f90 /\n",
  372. "\tFluidFlow/Fluid_Flow_Solver.f90 /\n"
  373. ]
  374. }
  375. ],
  376. "source": [
  377. "import re\n",
  378. "current_dir = 'C:\\\\Projects\\\\VSIM\\\\SimulationCore2\\\\'\n",
  379. "target_dir = 'x64\\\\Debug\\\\'\n",
  380. "depfilename = 'x64\\Debug\\SimulationCore2.dep'\n",
  381. "depfile = open(depfilename,'r')\n",
  382. "content = depfile.read()\n",
  383. "deptexts = content.split('\\n\\n')\n",
  384. "dependencies = {}\n",
  385. "moddeps = {}\n",
  386. "external_deps = []\n",
  387. "deptexts = [dt for dt in deptexts if dt!='']\n",
  388. "\n",
  389. "for depno,dept in enumerate(deptexts):\n",
  390. " headt,tailt = dept.split(': \\\\')\n",
  391. " headt,tailt = headt.strip(),tailt.strip()\n",
  392. " if headt.endswith('.mod'):\n",
  393. " ffile = tailt.replace(current_dir,'')\n",
  394. " mfiles = re.split(r' | \\\\\\n',headt)\n",
  395. " for mfile in mfiles:\n",
  396. " moddeps[mfile.strip()] = ffile\n",
  397. "for depno,dept in enumerate(deptexts):\n",
  398. " headt,tailt = dept.split(': \\\\')\n",
  399. " headt,tailt = headt.strip(),tailt.strip()\n",
  400. " if headt.endswith('.obj'):\n",
  401. " tails = re.split(r' \\\\\\n| ',tailt)\n",
  402. " tails = [t for t in tails if t!='']\n",
  403. " head = tails[0].replace(current_dir,'')\n",
  404. " deps = []\n",
  405. " for t in tails[1:]:\n",
  406. " mfile = t.replace(target_dir,'')\n",
  407. " # if 'json_' in mfile:\n",
  408. " # continue\n",
  409. " if mfile.strip() == '':\n",
  410. " print(f\"!!! t = '{t}', \")\n",
  411. " \n",
  412. " if mfile in moddeps:\n",
  413. " deps.append(moddeps[mfile])\n",
  414. " else:\n",
  415. " external_deps.append(mfile)\n",
  416. " # print(f\"{mfile} is not located\")\n",
  417. " if head in deps:\n",
  418. " deps.remove(head)\n",
  419. " # print(f\"making deps for {head}\")\n",
  420. " dependencies[head]=deps\n",
  421. "\n",
  422. "f = open('dependencies.txt','w')\n",
  423. "f.write(str(dependencies))\n",
  424. "f.close()\n",
  425. "\n",
  426. "from graphlib import TopologicalSorter\n",
  427. "ts = TopologicalSorter(dependencies)\n",
  428. "files = tuple(ts.static_order())\n",
  429. "for file in files:\n",
  430. " print(\"\\t\"+file.replace(\"\\\\\",\"/\")+\" /\")"
  431. ]
  432. },
  433. {
  434. "cell_type": "code",
  435. "execution_count": 12,
  436. "metadata": {},
  437. "outputs": [
  438. {
  439. "name": "stdout",
  440. "output_type": "stream",
  441. "text": [
  442. "CSharp/Equipments/ControlPanels/CBopControlPanel.f90\n",
  443. "CSharp/Equipments/ControlPanels/CChokeControlPanel.f90\n",
  444. "CSharp/Equipments/ControlPanels/CChokeManifold.f90\n",
  445. "CSharp/Equipments/ControlPanels/CDataDisplayConsole.f90\n",
  446. "CSharp/Equipments/ControlPanels/CDrillingConsole.f90\n",
  447. "CSharp/Equipments/ControlPanels/CEquipmentsConstants.f90\n",
  448. "CSharp/Equipments/ControlPanels/CHook.f90\n",
  449. "CSharp/Equipments/ControlPanels/CHookActions.f90\n",
  450. "CSharp/Equipments/ControlPanels/CStandPipeManifold.f90\n",
  451. "CSharp/Equipments/ControlPanels/CTopDrivePanel.f90\n"
  452. ]
  453. }
  454. ],
  455. "source": [
  456. "dir = 'CSharp/Equipments/ControlPanels'\n",
  457. "import os\n",
  458. "os.listdir(dir)\n",
  459. "for f in os.listdir(dir):\n",
  460. " if f.endswith('Variables.f90'):\n",
  461. " continue\n",
  462. " print(dir+'/'+f)"
  463. ]
  464. },
  465. {
  466. "cell_type": "code",
  467. "execution_count": 54,
  468. "metadata": {},
  469. "outputs": [
  470. {
  471. "data": {
  472. "text/plain": [
  473. "['FluidFlow\\\\Well_Pressure_Data_Transfer.f90',\n",
  474. " 'FluidFlow\\\\Well_Pressure_Data_Transfer.f90',\n",
  475. " 'FluidFlow\\\\kick\\\\Kick_VARIABLES.f90',\n",
  476. " 'CSharp\\\\BasicInputs\\\\MudProperties.f90',\n",
  477. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsole.f90',\n",
  478. " 'CSharp\\\\ErrorLog\\\\CLog1.f90',\n",
  479. " 'CSharp\\\\ErrorLog\\\\CError.f90',\n",
  480. " 'CSharp\\\\Warnings\\\\CWarnings.f90',\n",
  481. " 'CSharp\\\\OperationScenarios\\\\Unity\\\\CUnityOutputs.f90',\n",
  482. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumps.f90',\n",
  483. " 'CSharp\\\\Equipments\\\\MudPathFinding\\\\CArrangement.f90',\n",
  484. " 'CSharp\\\\Equipments\\\\MudPathFinding\\\\CStack.f90',\n",
  485. " 'CSharp\\\\Equipments\\\\MudPathFinding\\\\CManifolds.f90',\n",
  486. " 'TorqueDrag\\\\TD_Modules\\\\TD_WellGeometry.f90',\n",
  487. " 'TorqueDrag\\\\TD_Modules\\\\TD_WellElements.f90',\n",
  488. " 'TorqueDrag\\\\TD_Modules\\\\TD_StringConnectionData.f90',\n",
  489. " 'TorqueDrag\\\\TD_Modules\\\\TD_GeneralData.f90',\n",
  490. " 'TorqueDrag\\\\TD_Modules\\\\TD_DrillStem.f90',\n",
  491. " 'TorqueDrag\\\\TD_Modules\\\\GeoElements_FluidModule.f90',\n",
  492. " 'Rop\\\\sROP_Variables.f90',\n",
  493. " 'Rop\\\\sROP_Other_Variables.f90',\n",
  494. " 'FluidFlow\\\\Pressure_Display_VARIABLES.f90',\n",
  495. " 'FluidFlow\\\\Flow_Startup_VARIABLES.f90',\n",
  496. " 'Equipments\\\\Drawworks\\\\Drawworks_VARIABLES.f90',\n",
  497. " 'Equipments\\\\ChokeControl\\\\CHOKE_VARIABLES.f90',\n",
  498. " 'Equipments\\\\TopDrive\\\\TopDrive_VARIABLES.f90',\n",
  499. " 'Equipments\\\\RotaryTable\\\\RTable_VARIABLES.f90',\n",
  500. " 'Equipments\\\\Pumps\\\\Pumps_VARIABLES.f90',\n",
  501. " 'Equipments\\\\BopStack\\\\VARIABLES.f90',\n",
  502. " 'CSharp\\\\Warnings\\\\CWarningsVariables.f90',\n",
  503. " 'CSharp\\\\StudentStation\\\\CStudentStationVariables.f90',\n",
  504. " 'CSharp\\\\Problems\\\\CRotaryProblemsVariables.f90',\n",
  505. " 'CSharp\\\\Problems\\\\CPumpProblemsVariables.f90',\n",
  506. " 'CSharp\\\\Problems\\\\COtherProblemsVariables.f90',\n",
  507. " 'CSharp\\\\Problems\\\\CMudTreatmentProblemsVariables.f90',\n",
  508. " 'CSharp\\\\Problems\\\\CLostProblemsVariables.f90',\n",
  509. " 'CSharp\\\\Problems\\\\CKickProblemsVariables.f90',\n",
  510. " 'CSharp\\\\Problems\\\\CHoistingProblemsVariables.f90',\n",
  511. " 'CSharp\\\\Problems\\\\CGaugesProblemsVariables.f90',\n",
  512. " 'CSharp\\\\Problems\\\\CDrillStemProblemsVariables.f90',\n",
  513. " 'CSharp\\\\Problems\\\\CChokeProblemsVariables.f90',\n",
  514. " 'CSharp\\\\Problems\\\\CBopProblemsVariables.f90',\n",
  515. " 'CSharp\\\\Problems\\\\CProblemDifinition.f90',\n",
  516. " 'CSharp\\\\Problems\\\\CBitProblemsVariables.f90',\n",
  517. " 'CSharp\\\\OperationScenarios\\\\SoftwareInputsVariables.f90',\n",
  518. " 'CSharp\\\\OperationScenarios\\\\UnitySignals\\\\UnitySignalsVariables.f90',\n",
  519. " 'CSharp\\\\OperationScenarios\\\\Permissions\\\\PermissionsVariables.f90',\n",
  520. " 'CSharp\\\\OperationScenarios\\\\Notifications\\\\NotificationVariables.f90',\n",
  521. " 'CSharp\\\\Equipments\\\\Tanks\\\\CTanksVariables.f90',\n",
  522. " 'CSharp\\\\Equipments\\\\DrillWatch\\\\CDrillWatchVariables.f90',\n",
  523. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CTopDrivePanelVariables.f90',\n",
  524. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CStandPipeManifoldVariables.f90',\n",
  525. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CHookVariables.f90',\n",
  526. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDrillingConsoleVariables.f90',\n",
  527. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsoleVariables.f90',\n",
  528. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeManifoldVariables.f90',\n",
  529. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeControlPanelVariables.f90',\n",
  530. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CBopControlPanelVariables.f90',\n",
  531. " 'CSharp\\\\BasicInputs\\\\CMudPropertiesVariables.f90',\n",
  532. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CWellSurveyDataVariables.f90',\n",
  533. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CPathGenerationVariables.f90',\n",
  534. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CCasingLinerChokeVariables.f90',\n",
  535. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CRigSizeVariables.f90',\n",
  536. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumpsVariables.f90',\n",
  537. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPowerVariables.f90',\n",
  538. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CHoistingVariables.f90',\n",
  539. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CBopStackVariables.f90',\n",
  540. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CAccumulatorVariables.f90',\n",
  541. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CShoeVariables.f90',\n",
  542. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CReservoirVariables.f90',\n",
  543. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CFormationVariables.f90',\n",
  544. " 'CSharp\\\\BasicInputs\\\\Bha\\\\CStringConfigurationVariables.f90',\n",
  545. " 'CSharp\\\\OperationScenarios\\\\Common\\\\COperationScenariosVariables.f90',\n",
  546. " 'Simulation\\\\Constants.f90',\n",
  547. " 'Simulation\\\\SimulationVariables.f90',\n",
  548. " 'CSharp\\\\Common\\\\CIActionReference.f90',\n",
  549. " 'CSharp\\\\ErrorLog\\\\CLog4.f90',\n",
  550. " 'CSharp\\\\DownHole\\\\CDownHoleTypes.f90',\n",
  551. " 'CSharp\\\\DownHole\\\\CDownHoleVariables.f90',\n",
  552. " 'Equipments\\\\MudSystem\\\\MudSystem_Variables.f90',\n",
  553. " 'Equipments\\\\MudSystem\\\\MudSystem.f90',\n",
  554. " 'FluidFlow\\\\Pressure_Distribution_VARIABLES.f90',\n",
  555. " 'FluidFlow\\\\kick\\\\Gas_Kick_Calculator.f90',\n",
  556. " 'FluidFlow\\\\Well_Pressure_Data_Transfer.f90',\n",
  557. " 'CSharp\\\\ErrorLog\\\\CError.f90',\n",
  558. " 'FluidFlow\\\\kick\\\\Kick_VARIABLES.f90',\n",
  559. " 'TorqueDrag\\\\TD_Modules\\\\TD_WellGeometry.f90',\n",
  560. " 'TorqueDrag\\\\TD_Modules\\\\TD_WellElements.f90',\n",
  561. " 'TorqueDrag\\\\TD_Modules\\\\TD_StringConnectionData.f90',\n",
  562. " 'TorqueDrag\\\\TD_Modules\\\\TD_GeneralData.f90',\n",
  563. " 'TorqueDrag\\\\TD_Modules\\\\TD_DrillStem.f90',\n",
  564. " 'TorqueDrag\\\\TD_Modules\\\\GeoElements_FluidModule.f90',\n",
  565. " 'Rop\\\\sROP_Variables.f90',\n",
  566. " 'Rop\\\\sROP_Other_Variables.f90',\n",
  567. " 'FluidFlow\\\\Pressure_Display_VARIABLES.f90',\n",
  568. " 'FluidFlow\\\\Flow_Startup_VARIABLES.f90',\n",
  569. " 'Equipments\\\\Drawworks\\\\Drawworks_VARIABLES.f90',\n",
  570. " 'Equipments\\\\ChokeControl\\\\CHOKE_VARIABLES.f90',\n",
  571. " 'Equipments\\\\TopDrive\\\\TopDrive_VARIABLES.f90',\n",
  572. " 'Equipments\\\\RotaryTable\\\\RTable_VARIABLES.f90',\n",
  573. " 'Equipments\\\\Pumps\\\\Pumps_VARIABLES.f90',\n",
  574. " 'Equipments\\\\BopStack\\\\VARIABLES.f90',\n",
  575. " 'CSharp\\\\Warnings\\\\CWarningsVariables.f90',\n",
  576. " 'CSharp\\\\StudentStation\\\\CStudentStationVariables.f90',\n",
  577. " 'CSharp\\\\Problems\\\\CRotaryProblemsVariables.f90',\n",
  578. " 'CSharp\\\\Problems\\\\CPumpProblemsVariables.f90',\n",
  579. " 'CSharp\\\\Problems\\\\COtherProblemsVariables.f90',\n",
  580. " 'CSharp\\\\Problems\\\\CMudTreatmentProblemsVariables.f90',\n",
  581. " 'CSharp\\\\Problems\\\\CLostProblemsVariables.f90',\n",
  582. " 'CSharp\\\\Problems\\\\CKickProblemsVariables.f90',\n",
  583. " 'CSharp\\\\Problems\\\\CHoistingProblemsVariables.f90',\n",
  584. " 'CSharp\\\\Problems\\\\CGaugesProblemsVariables.f90',\n",
  585. " 'CSharp\\\\Problems\\\\CDrillStemProblemsVariables.f90',\n",
  586. " 'CSharp\\\\Problems\\\\CChokeProblemsVariables.f90',\n",
  587. " 'CSharp\\\\Problems\\\\CBopProblemsVariables.f90',\n",
  588. " 'CSharp\\\\Problems\\\\CProblemDifinition.f90',\n",
  589. " 'CSharp\\\\Problems\\\\CBitProblemsVariables.f90',\n",
  590. " 'CSharp\\\\OperationScenarios\\\\SoftwareInputsVariables.f90',\n",
  591. " 'CSharp\\\\OperationScenarios\\\\UnitySignals\\\\UnitySignalsVariables.f90',\n",
  592. " 'CSharp\\\\OperationScenarios\\\\Permissions\\\\PermissionsVariables.f90',\n",
  593. " 'CSharp\\\\OperationScenarios\\\\Notifications\\\\NotificationVariables.f90',\n",
  594. " 'CSharp\\\\Equipments\\\\Tanks\\\\CTanksVariables.f90',\n",
  595. " 'CSharp\\\\Equipments\\\\DrillWatch\\\\CDrillWatchVariables.f90',\n",
  596. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CTopDrivePanelVariables.f90',\n",
  597. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CStandPipeManifoldVariables.f90',\n",
  598. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CHookVariables.f90',\n",
  599. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDrillingConsoleVariables.f90',\n",
  600. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsoleVariables.f90',\n",
  601. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeManifoldVariables.f90',\n",
  602. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeControlPanelVariables.f90',\n",
  603. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CBopControlPanelVariables.f90',\n",
  604. " 'CSharp\\\\BasicInputs\\\\CMudPropertiesVariables.f90',\n",
  605. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CWellSurveyDataVariables.f90',\n",
  606. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CPathGenerationVariables.f90',\n",
  607. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CCasingLinerChokeVariables.f90',\n",
  608. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CRigSizeVariables.f90',\n",
  609. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumpsVariables.f90',\n",
  610. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPowerVariables.f90',\n",
  611. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CHoistingVariables.f90',\n",
  612. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CBopStackVariables.f90',\n",
  613. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CAccumulatorVariables.f90',\n",
  614. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CShoeVariables.f90',\n",
  615. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CReservoirVariables.f90',\n",
  616. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CFormationVariables.f90',\n",
  617. " 'CSharp\\\\BasicInputs\\\\Bha\\\\CStringConfigurationVariables.f90',\n",
  618. " 'CSharp\\\\OperationScenarios\\\\Common\\\\COperationScenariosVariables.f90',\n",
  619. " 'Simulation\\\\Constants.f90',\n",
  620. " 'Simulation\\\\SimulationVariables.f90',\n",
  621. " 'CSharp\\\\Common\\\\CIActionReference.f90',\n",
  622. " 'CSharp\\\\ErrorLog\\\\CLog4.f90',\n",
  623. " 'CSharp\\\\DownHole\\\\CDownHoleTypes.f90',\n",
  624. " 'CSharp\\\\DownHole\\\\CDownHoleVariables.f90',\n",
  625. " 'Equipments\\\\MudSystem\\\\MudSystem_Variables.f90',\n",
  626. " 'FluidFlow\\\\Pressure_Distribution_VARIABLES.f90',\n",
  627. " 'TorqueDrag\\\\TD_Modules\\\\TD_WellGeometry.f90',\n",
  628. " 'TorqueDrag\\\\TD_Modules\\\\TD_WellElements.f90',\n",
  629. " 'TorqueDrag\\\\TD_Modules\\\\TD_StringConnectionData.f90',\n",
  630. " 'TorqueDrag\\\\TD_Modules\\\\TD_GeneralData.f90',\n",
  631. " 'TorqueDrag\\\\TD_Modules\\\\TD_DrillStem.f90',\n",
  632. " 'TorqueDrag\\\\TD_Modules\\\\GeoElements_FluidModule.f90',\n",
  633. " 'Rop\\\\sROP_Variables.f90',\n",
  634. " 'Rop\\\\sROP_Other_Variables.f90',\n",
  635. " 'FluidFlow\\\\Pressure_Distribution_VARIABLES.f90',\n",
  636. " 'FluidFlow\\\\Pressure_Display_VARIABLES.f90',\n",
  637. " 'FluidFlow\\\\Flow_Startup_VARIABLES.f90',\n",
  638. " 'Equipments\\\\Drawworks\\\\Drawworks_VARIABLES.f90',\n",
  639. " 'Equipments\\\\ChokeControl\\\\CHOKE_VARIABLES.f90',\n",
  640. " 'Equipments\\\\TopDrive\\\\TopDrive_VARIABLES.f90',\n",
  641. " 'Equipments\\\\RotaryTable\\\\RTable_VARIABLES.f90',\n",
  642. " 'Equipments\\\\Pumps\\\\Pumps_VARIABLES.f90',\n",
  643. " 'Equipments\\\\BopStack\\\\VARIABLES.f90',\n",
  644. " 'CSharp\\\\Warnings\\\\CWarningsVariables.f90',\n",
  645. " 'CSharp\\\\StudentStation\\\\CStudentStationVariables.f90',\n",
  646. " 'CSharp\\\\Problems\\\\CRotaryProblemsVariables.f90',\n",
  647. " 'CSharp\\\\Problems\\\\CPumpProblemsVariables.f90',\n",
  648. " 'CSharp\\\\Problems\\\\COtherProblemsVariables.f90',\n",
  649. " 'CSharp\\\\Problems\\\\CMudTreatmentProblemsVariables.f90',\n",
  650. " 'CSharp\\\\Problems\\\\CLostProblemsVariables.f90',\n",
  651. " 'CSharp\\\\Problems\\\\CKickProblemsVariables.f90',\n",
  652. " 'CSharp\\\\Problems\\\\CHoistingProblemsVariables.f90',\n",
  653. " 'CSharp\\\\Problems\\\\CGaugesProblemsVariables.f90',\n",
  654. " 'CSharp\\\\Problems\\\\CDrillStemProblemsVariables.f90',\n",
  655. " 'CSharp\\\\Problems\\\\CChokeProblemsVariables.f90',\n",
  656. " 'CSharp\\\\Problems\\\\CBopProblemsVariables.f90',\n",
  657. " 'CSharp\\\\Problems\\\\CProblemDifinition.f90',\n",
  658. " 'CSharp\\\\Problems\\\\CBitProblemsVariables.f90',\n",
  659. " 'CSharp\\\\OperationScenarios\\\\SoftwareInputsVariables.f90',\n",
  660. " 'CSharp\\\\OperationScenarios\\\\UnitySignals\\\\UnitySignalsVariables.f90',\n",
  661. " 'CSharp\\\\OperationScenarios\\\\Permissions\\\\PermissionsVariables.f90',\n",
  662. " 'CSharp\\\\OperationScenarios\\\\Notifications\\\\NotificationVariables.f90',\n",
  663. " 'CSharp\\\\Equipments\\\\Tanks\\\\CTanksVariables.f90',\n",
  664. " 'CSharp\\\\Equipments\\\\DrillWatch\\\\CDrillWatchVariables.f90',\n",
  665. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CTopDrivePanelVariables.f90',\n",
  666. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CStandPipeManifoldVariables.f90',\n",
  667. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CHookVariables.f90',\n",
  668. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDrillingConsoleVariables.f90',\n",
  669. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsoleVariables.f90',\n",
  670. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeManifoldVariables.f90',\n",
  671. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeControlPanelVariables.f90',\n",
  672. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CBopControlPanelVariables.f90',\n",
  673. " 'CSharp\\\\BasicInputs\\\\CMudPropertiesVariables.f90',\n",
  674. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CWellSurveyDataVariables.f90',\n",
  675. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CPathGenerationVariables.f90',\n",
  676. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CCasingLinerChokeVariables.f90',\n",
  677. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CRigSizeVariables.f90',\n",
  678. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumpsVariables.f90',\n",
  679. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPowerVariables.f90',\n",
  680. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CHoistingVariables.f90',\n",
  681. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CBopStackVariables.f90',\n",
  682. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CAccumulatorVariables.f90',\n",
  683. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CShoeVariables.f90',\n",
  684. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CReservoirVariables.f90',\n",
  685. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CFormationVariables.f90',\n",
  686. " 'CSharp\\\\BasicInputs\\\\Bha\\\\CStringConfigurationVariables.f90',\n",
  687. " 'CSharp\\\\OperationScenarios\\\\Common\\\\COperationScenariosVariables.f90',\n",
  688. " 'Simulation\\\\Constants.f90',\n",
  689. " 'Simulation\\\\SimulationVariables.f90',\n",
  690. " 'CSharp\\\\Common\\\\CIActionReference.f90',\n",
  691. " 'CSharp\\\\ErrorLog\\\\CLog4.f90',\n",
  692. " 'CSharp\\\\DownHole\\\\CDownHoleTypes.f90',\n",
  693. " 'CSharp\\\\DownHole\\\\CDownHoleVariables.f90',\n",
  694. " 'Equipments\\\\MudSystem\\\\MudSystem_Variables.f90',\n",
  695. " 'FluidFlow\\\\kick\\\\Kick_VARIABLES.f90',\n",
  696. " 'TorqueDrag\\\\TD_Modules\\\\TD_WellGeometry.f90',\n",
  697. " 'TorqueDrag\\\\TD_Modules\\\\TD_WellElements.f90',\n",
  698. " 'TorqueDrag\\\\TD_Modules\\\\TD_StringConnectionData.f90',\n",
  699. " 'TorqueDrag\\\\TD_Modules\\\\TD_GeneralData.f90',\n",
  700. " 'TorqueDrag\\\\TD_Modules\\\\TD_DrillStem.f90',\n",
  701. " 'TorqueDrag\\\\TD_Modules\\\\GeoElements_FluidModule.f90',\n",
  702. " 'Rop\\\\sROP_Variables.f90',\n",
  703. " 'Rop\\\\sROP_Other_Variables.f90',\n",
  704. " 'FluidFlow\\\\Pressure_Distribution_VARIABLES.f90',\n",
  705. " 'FluidFlow\\\\Pressure_Display_VARIABLES.f90',\n",
  706. " 'FluidFlow\\\\Flow_Startup_VARIABLES.f90',\n",
  707. " 'Equipments\\\\Drawworks\\\\Drawworks_VARIABLES.f90',\n",
  708. " 'Equipments\\\\ChokeControl\\\\CHOKE_VARIABLES.f90',\n",
  709. " 'Equipments\\\\TopDrive\\\\TopDrive_VARIABLES.f90',\n",
  710. " 'Equipments\\\\RotaryTable\\\\RTable_VARIABLES.f90',\n",
  711. " 'Equipments\\\\Pumps\\\\Pumps_VARIABLES.f90',\n",
  712. " 'Equipments\\\\BopStack\\\\VARIABLES.f90',\n",
  713. " 'CSharp\\\\Warnings\\\\CWarningsVariables.f90',\n",
  714. " 'CSharp\\\\StudentStation\\\\CStudentStationVariables.f90',\n",
  715. " 'CSharp\\\\Problems\\\\CRotaryProblemsVariables.f90',\n",
  716. " 'CSharp\\\\Problems\\\\CPumpProblemsVariables.f90',\n",
  717. " 'CSharp\\\\Problems\\\\COtherProblemsVariables.f90',\n",
  718. " 'CSharp\\\\Problems\\\\CMudTreatmentProblemsVariables.f90',\n",
  719. " 'CSharp\\\\Problems\\\\CLostProblemsVariables.f90',\n",
  720. " 'CSharp\\\\Problems\\\\CKickProblemsVariables.f90',\n",
  721. " 'CSharp\\\\Problems\\\\CHoistingProblemsVariables.f90',\n",
  722. " 'CSharp\\\\Problems\\\\CGaugesProblemsVariables.f90',\n",
  723. " 'CSharp\\\\Problems\\\\CDrillStemProblemsVariables.f90',\n",
  724. " 'CSharp\\\\Problems\\\\CChokeProblemsVariables.f90',\n",
  725. " 'CSharp\\\\Problems\\\\CBopProblemsVariables.f90',\n",
  726. " 'CSharp\\\\Problems\\\\CProblemDifinition.f90',\n",
  727. " 'CSharp\\\\Problems\\\\CBitProblemsVariables.f90',\n",
  728. " 'CSharp\\\\OperationScenarios\\\\SoftwareInputsVariables.f90',\n",
  729. " 'CSharp\\\\OperationScenarios\\\\UnitySignals\\\\UnitySignalsVariables.f90',\n",
  730. " 'CSharp\\\\OperationScenarios\\\\Permissions\\\\PermissionsVariables.f90',\n",
  731. " 'CSharp\\\\OperationScenarios\\\\Notifications\\\\NotificationVariables.f90',\n",
  732. " 'CSharp\\\\Equipments\\\\Tanks\\\\CTanksVariables.f90',\n",
  733. " 'CSharp\\\\Equipments\\\\DrillWatch\\\\CDrillWatchVariables.f90',\n",
  734. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CTopDrivePanelVariables.f90',\n",
  735. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CStandPipeManifoldVariables.f90',\n",
  736. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CHookVariables.f90',\n",
  737. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDrillingConsoleVariables.f90',\n",
  738. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsoleVariables.f90',\n",
  739. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeManifoldVariables.f90',\n",
  740. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeControlPanelVariables.f90',\n",
  741. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CBopControlPanelVariables.f90',\n",
  742. " 'CSharp\\\\BasicInputs\\\\CMudPropertiesVariables.f90',\n",
  743. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CWellSurveyDataVariables.f90',\n",
  744. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CPathGenerationVariables.f90',\n",
  745. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CCasingLinerChokeVariables.f90',\n",
  746. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CRigSizeVariables.f90',\n",
  747. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumpsVariables.f90',\n",
  748. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPowerVariables.f90',\n",
  749. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CHoistingVariables.f90',\n",
  750. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CBopStackVariables.f90',\n",
  751. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CAccumulatorVariables.f90',\n",
  752. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CShoeVariables.f90',\n",
  753. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CReservoirVariables.f90',\n",
  754. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CFormationVariables.f90',\n",
  755. " 'CSharp\\\\BasicInputs\\\\Bha\\\\CStringConfigurationVariables.f90',\n",
  756. " 'CSharp\\\\OperationScenarios\\\\Common\\\\COperationScenariosVariables.f90',\n",
  757. " 'Simulation\\\\Constants.f90',\n",
  758. " 'Simulation\\\\SimulationVariables.f90',\n",
  759. " 'CSharp\\\\Common\\\\CIActionReference.f90',\n",
  760. " 'CSharp\\\\ErrorLog\\\\CLog4.f90',\n",
  761. " 'CSharp\\\\DownHole\\\\CDownHoleTypes.f90',\n",
  762. " 'CSharp\\\\DownHole\\\\CDownHoleVariables.f90',\n",
  763. " 'Equipments\\\\MudSystem\\\\MudSystem_Variables.f90',\n",
  764. " 'FluidFlow\\\\kick\\\\Kick_VARIABLES.f90',\n",
  765. " 'CSharp\\\\ErrorLog\\\\CError.f90',\n",
  766. " 'FluidFlow\\\\kick\\\\Kick_VARIABLES.f90',\n",
  767. " 'TorqueDrag\\\\TD_Modules\\\\TD_WellGeometry.f90',\n",
  768. " 'TorqueDrag\\\\TD_Modules\\\\TD_WellElements.f90',\n",
  769. " 'TorqueDrag\\\\TD_Modules\\\\TD_StringConnectionData.f90',\n",
  770. " 'TorqueDrag\\\\TD_Modules\\\\TD_GeneralData.f90',\n",
  771. " 'TorqueDrag\\\\TD_Modules\\\\TD_DrillStem.f90',\n",
  772. " 'TorqueDrag\\\\TD_Modules\\\\GeoElements_FluidModule.f90',\n",
  773. " 'Rop\\\\sROP_Variables.f90',\n",
  774. " 'Rop\\\\sROP_Other_Variables.f90',\n",
  775. " 'FluidFlow\\\\Pressure_Display_VARIABLES.f90',\n",
  776. " 'FluidFlow\\\\Flow_Startup_VARIABLES.f90',\n",
  777. " 'Equipments\\\\Drawworks\\\\Drawworks_VARIABLES.f90',\n",
  778. " 'Equipments\\\\ChokeControl\\\\CHOKE_VARIABLES.f90',\n",
  779. " 'Equipments\\\\TopDrive\\\\TopDrive_VARIABLES.f90',\n",
  780. " 'Equipments\\\\RotaryTable\\\\RTable_VARIABLES.f90',\n",
  781. " 'Equipments\\\\Pumps\\\\Pumps_VARIABLES.f90',\n",
  782. " 'Equipments\\\\BopStack\\\\VARIABLES.f90',\n",
  783. " 'CSharp\\\\Warnings\\\\CWarningsVariables.f90',\n",
  784. " 'CSharp\\\\StudentStation\\\\CStudentStationVariables.f90',\n",
  785. " 'CSharp\\\\Problems\\\\CRotaryProblemsVariables.f90',\n",
  786. " 'CSharp\\\\Problems\\\\CPumpProblemsVariables.f90',\n",
  787. " 'CSharp\\\\Problems\\\\COtherProblemsVariables.f90',\n",
  788. " 'CSharp\\\\Problems\\\\CMudTreatmentProblemsVariables.f90',\n",
  789. " 'CSharp\\\\Problems\\\\CLostProblemsVariables.f90',\n",
  790. " 'CSharp\\\\Problems\\\\CKickProblemsVariables.f90',\n",
  791. " 'CSharp\\\\Problems\\\\CHoistingProblemsVariables.f90',\n",
  792. " 'CSharp\\\\Problems\\\\CGaugesProblemsVariables.f90',\n",
  793. " 'CSharp\\\\Problems\\\\CDrillStemProblemsVariables.f90',\n",
  794. " 'CSharp\\\\Problems\\\\CChokeProblemsVariables.f90',\n",
  795. " 'CSharp\\\\Problems\\\\CBopProblemsVariables.f90',\n",
  796. " 'CSharp\\\\Problems\\\\CProblemDifinition.f90',\n",
  797. " 'CSharp\\\\Problems\\\\CBitProblemsVariables.f90',\n",
  798. " 'CSharp\\\\OperationScenarios\\\\SoftwareInputsVariables.f90',\n",
  799. " 'CSharp\\\\OperationScenarios\\\\UnitySignals\\\\UnitySignalsVariables.f90',\n",
  800. " 'CSharp\\\\OperationScenarios\\\\Permissions\\\\PermissionsVariables.f90',\n",
  801. " 'CSharp\\\\OperationScenarios\\\\Notifications\\\\NotificationVariables.f90',\n",
  802. " 'CSharp\\\\Equipments\\\\Tanks\\\\CTanksVariables.f90',\n",
  803. " 'CSharp\\\\Equipments\\\\DrillWatch\\\\CDrillWatchVariables.f90',\n",
  804. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CTopDrivePanelVariables.f90',\n",
  805. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CStandPipeManifoldVariables.f90',\n",
  806. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CHookVariables.f90',\n",
  807. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDrillingConsoleVariables.f90',\n",
  808. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsoleVariables.f90',\n",
  809. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeManifoldVariables.f90',\n",
  810. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeControlPanelVariables.f90',\n",
  811. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CBopControlPanelVariables.f90',\n",
  812. " 'CSharp\\\\BasicInputs\\\\CMudPropertiesVariables.f90',\n",
  813. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CWellSurveyDataVariables.f90',\n",
  814. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CPathGenerationVariables.f90',\n",
  815. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CCasingLinerChokeVariables.f90',\n",
  816. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CRigSizeVariables.f90',\n",
  817. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumpsVariables.f90',\n",
  818. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPowerVariables.f90',\n",
  819. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CHoistingVariables.f90',\n",
  820. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CBopStackVariables.f90',\n",
  821. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CAccumulatorVariables.f90',\n",
  822. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CShoeVariables.f90',\n",
  823. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CReservoirVariables.f90',\n",
  824. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CFormationVariables.f90',\n",
  825. " 'CSharp\\\\BasicInputs\\\\Bha\\\\CStringConfigurationVariables.f90',\n",
  826. " 'CSharp\\\\OperationScenarios\\\\Common\\\\COperationScenariosVariables.f90',\n",
  827. " 'Simulation\\\\Constants.f90',\n",
  828. " 'Simulation\\\\SimulationVariables.f90',\n",
  829. " 'CSharp\\\\Common\\\\CIActionReference.f90',\n",
  830. " 'CSharp\\\\ErrorLog\\\\CLog4.f90',\n",
  831. " 'CSharp\\\\DownHole\\\\CDownHoleTypes.f90',\n",
  832. " 'CSharp\\\\DownHole\\\\CDownHoleVariables.f90',\n",
  833. " 'Equipments\\\\MudSystem\\\\MudSystem_Variables.f90',\n",
  834. " 'FluidFlow\\\\Pressure_Distribution_VARIABLES.f90',\n",
  835. " 'FluidFlow\\\\kick\\\\Kick_VARIABLES.f90',\n",
  836. " 'CSharp\\\\BasicInputs\\\\MudProperties.f90',\n",
  837. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsole.f90',\n",
  838. " 'CSharp\\\\ErrorLog\\\\CLog1.f90',\n",
  839. " 'CSharp\\\\ErrorLog\\\\CError.f90',\n",
  840. " 'CSharp\\\\Warnings\\\\CWarnings.f90',\n",
  841. " 'CSharp\\\\OperationScenarios\\\\Unity\\\\CUnityOutputs.f90',\n",
  842. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumps.f90',\n",
  843. " 'CSharp\\\\Equipments\\\\MudPathFinding\\\\CArrangement.f90',\n",
  844. " 'CSharp\\\\Equipments\\\\MudPathFinding\\\\CStack.f90',\n",
  845. " 'CSharp\\\\Equipments\\\\MudPathFinding\\\\CManifolds.f90',\n",
  846. " 'TorqueDrag\\\\TD_Modules\\\\TD_WellGeometry.f90',\n",
  847. " 'TorqueDrag\\\\TD_Modules\\\\TD_WellElements.f90',\n",
  848. " 'TorqueDrag\\\\TD_Modules\\\\TD_StringConnectionData.f90',\n",
  849. " 'TorqueDrag\\\\TD_Modules\\\\TD_GeneralData.f90',\n",
  850. " 'TorqueDrag\\\\TD_Modules\\\\TD_DrillStem.f90',\n",
  851. " 'TorqueDrag\\\\TD_Modules\\\\GeoElements_FluidModule.f90',\n",
  852. " 'Rop\\\\sROP_Variables.f90',\n",
  853. " 'Rop\\\\sROP_Other_Variables.f90',\n",
  854. " 'FluidFlow\\\\Pressure_Display_VARIABLES.f90',\n",
  855. " 'FluidFlow\\\\Flow_Startup_VARIABLES.f90',\n",
  856. " 'Equipments\\\\Drawworks\\\\Drawworks_VARIABLES.f90',\n",
  857. " 'Equipments\\\\ChokeControl\\\\CHOKE_VARIABLES.f90',\n",
  858. " 'Equipments\\\\TopDrive\\\\TopDrive_VARIABLES.f90',\n",
  859. " 'Equipments\\\\RotaryTable\\\\RTable_VARIABLES.f90',\n",
  860. " 'Equipments\\\\Pumps\\\\Pumps_VARIABLES.f90',\n",
  861. " 'Equipments\\\\BopStack\\\\VARIABLES.f90',\n",
  862. " 'CSharp\\\\Warnings\\\\CWarningsVariables.f90',\n",
  863. " 'CSharp\\\\StudentStation\\\\CStudentStationVariables.f90',\n",
  864. " 'CSharp\\\\Problems\\\\CRotaryProblemsVariables.f90',\n",
  865. " 'CSharp\\\\Problems\\\\CPumpProblemsVariables.f90',\n",
  866. " 'CSharp\\\\Problems\\\\COtherProblemsVariables.f90',\n",
  867. " 'CSharp\\\\Problems\\\\CMudTreatmentProblemsVariables.f90',\n",
  868. " 'CSharp\\\\Problems\\\\CLostProblemsVariables.f90',\n",
  869. " 'CSharp\\\\Problems\\\\CKickProblemsVariables.f90',\n",
  870. " 'CSharp\\\\Problems\\\\CHoistingProblemsVariables.f90',\n",
  871. " 'CSharp\\\\Problems\\\\CGaugesProblemsVariables.f90',\n",
  872. " 'CSharp\\\\Problems\\\\CDrillStemProblemsVariables.f90',\n",
  873. " 'CSharp\\\\Problems\\\\CChokeProblemsVariables.f90',\n",
  874. " 'CSharp\\\\Problems\\\\CBopProblemsVariables.f90',\n",
  875. " 'CSharp\\\\Problems\\\\CProblemDifinition.f90',\n",
  876. " 'CSharp\\\\Problems\\\\CBitProblemsVariables.f90',\n",
  877. " 'CSharp\\\\OperationScenarios\\\\SoftwareInputsVariables.f90',\n",
  878. " 'CSharp\\\\OperationScenarios\\\\UnitySignals\\\\UnitySignalsVariables.f90',\n",
  879. " 'CSharp\\\\OperationScenarios\\\\Permissions\\\\PermissionsVariables.f90',\n",
  880. " 'CSharp\\\\OperationScenarios\\\\Notifications\\\\NotificationVariables.f90',\n",
  881. " 'CSharp\\\\Equipments\\\\Tanks\\\\CTanksVariables.f90',\n",
  882. " 'CSharp\\\\Equipments\\\\DrillWatch\\\\CDrillWatchVariables.f90',\n",
  883. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CTopDrivePanelVariables.f90',\n",
  884. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CStandPipeManifoldVariables.f90',\n",
  885. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CHookVariables.f90',\n",
  886. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDrillingConsoleVariables.f90',\n",
  887. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CDataDisplayConsoleVariables.f90',\n",
  888. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeManifoldVariables.f90',\n",
  889. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CChokeControlPanelVariables.f90',\n",
  890. " 'CSharp\\\\Equipments\\\\ControlPanels\\\\CBopControlPanelVariables.f90',\n",
  891. " 'CSharp\\\\BasicInputs\\\\CMudPropertiesVariables.f90',\n",
  892. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CWellSurveyDataVariables.f90',\n",
  893. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CPathGenerationVariables.f90',\n",
  894. " 'CSharp\\\\BasicInputs\\\\WellProfile\\\\CCasingLinerChokeVariables.f90',\n",
  895. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CRigSizeVariables.f90',\n",
  896. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPumpsVariables.f90',\n",
  897. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CPowerVariables.f90',\n",
  898. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CHoistingVariables.f90',\n",
  899. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CBopStackVariables.f90',\n",
  900. " 'CSharp\\\\BasicInputs\\\\RigSpecifications\\\\CAccumulatorVariables.f90',\n",
  901. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CShoeVariables.f90',\n",
  902. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CReservoirVariables.f90',\n",
  903. " 'CSharp\\\\BasicInputs\\\\Geology\\\\CFormationVariables.f90',\n",
  904. " 'CSharp\\\\BasicInputs\\\\Bha\\\\CStringConfigurationVariables.f90',\n",
  905. " 'CSharp\\\\OperationScenarios\\\\Common\\\\COperationScenariosVariables.f90',\n",
  906. " 'Simulation\\\\Constants.f90',\n",
  907. " 'Simulation\\\\SimulationVariables.f90',\n",
  908. " 'CSharp\\\\Common\\\\CIActionReference.f90',\n",
  909. " 'CSharp\\\\ErrorLog\\\\CLog4.f90',\n",
  910. " 'CSharp\\\\DownHole\\\\CDownHoleTypes.f90',\n",
  911. " 'CSharp\\\\DownHole\\\\CDownHoleVariables.f90',\n",
  912. " 'Equipments\\\\MudSystem\\\\MudSystem_Variables.f90',\n",
  913. " 'Equipments\\\\MudSystem\\\\MudSystem.f90',\n",
  914. " 'FluidFlow\\\\Pressure_Distribution_VARIABLES.f90']"
  915. ]
  916. },
  917. "execution_count": 54,
  918. "metadata": {},
  919. "output_type": "execute_result"
  920. }
  921. ],
  922. "source": [
  923. "dependencies['FluidFlow\\\\Well_Pressure_Data_Transfer.f90']"
  924. ]
  925. },
  926. {
  927. "cell_type": "code",
  928. "execution_count": 12,
  929. "metadata": {},
  930. "outputs": [
  931. {
  932. "name": "stdout",
  933. "output_type": "stream",
  934. "text": [
  935. "assets={'USDT': {'Total': '5858.36917324', 'Free': 3879.35}, 'BUSD': {'Total': '-156.01984572', 'Free': 3877.23}}\n"
  936. ]
  937. }
  938. ],
  939. "source": []
  940. },
  941. {
  942. "attachments": {},
  943. "cell_type": "markdown",
  944. "metadata": {},
  945. "source": [
  946. "# FromJson"
  947. ]
  948. },
  949. {
  950. "cell_type": "code",
  951. "execution_count": 1,
  952. "metadata": {},
  953. "outputs": [
  954. {
  955. "name": "stdout",
  956. "output_type": "stream",
  957. "text": [
  958. " call jsonfile%get('UnityInputs.ElevatorConnectionPossible',data%Equipments%UnityInputs%ElevatorConnectionPossible,found)\n",
  959. " if ( .not. found ) call logg(4,\"Not found: UnityInputs%ElevatorConnectionPossible\")\n",
  960. " call jsonfile%get('UnityInputs.JointConnectionPossible',data%Equipments%UnityInputs%JointConnectionPossible,found)\n",
  961. " if ( .not. found ) call logg(4,\"Not found: UnityInputs%JointConnectionPossible\")\n",
  962. " call jsonfile%get('UnityInputs.IsKellyBushingSetInTable',data%Equipments%UnityInputs%IsKellyBushingSetInTable,found)\n",
  963. " if ( .not. found ) call logg(4,\"Not found: UnityInputs%IsKellyBushingSetInTable\")\n",
  964. " call jsonfile%get('UnityInputs.ElevatorPickup',data%Equipments%UnityInputs%ElevatorPickup,found)\n",
  965. " if ( .not. found ) call logg(4,\"Not found: UnityInputs%ElevatorPickup\")\n",
  966. " call jsonfile%get('UnityInputs.NearFloorPosition',data%Equipments%UnityInputs%NearFloorPosition,found)\n",
  967. " if ( .not. found ) call logg(4,\"Not found: UnityInputs%NearFloorPosition\")\n",
  968. " call jsonfile%get('UnityInputs.SingleSetInMouseHole',data%Equipments%UnityInputs%SingleSetInMouseHole,found)\n",
  969. " if ( .not. found ) call logg(4,\"Not found: UnityInputs%SingleSetInMouseHole\")\n",
  970. " call jsonfile%get('UnityInputs.TdsConnectionPossible',data%Equipments%UnityInputs%TdsConnectionPossible,found)\n",
  971. " if ( .not. found ) call logg(4,\"Not found: UnityInputs%TdsConnectionPossible\")\n",
  972. " call jsonfile%get('UnityInputs.TdsStemIn',data%Equipments%UnityInputs%TdsStemIn,found)\n",
  973. " if ( .not. found ) call logg(4,\"Not found: UnityInputs%TdsStemIn\")\n"
  974. ]
  975. }
  976. ],
  977. "source": [
  978. "# pattern=\"\"\"\t\tcall json%get(pitem,data%Configuration%Pumps%@@@)\n",
  979. "# call json%get(p,\"@@@\",pitem)\"\"\"\n",
  980. "\n",
  981. "# pattern=\"\"\"\t\tcall json%get('Equipments.Drilling.@@@',data%Equipments%DrillingConsole%@@@,found)\n",
  982. "# \t\tif ( .not. found ) print *,\"Not found: @@@\" \"\"\"\n",
  983. "pattern=\"\"\" call jsonfile%get('UnityInputs.@@@',data%Equipments%UnityInputs%@@@,found)\n",
  984. " if ( .not. found ) call logg(4,\"Not found: UnityInputs%@@@\")\"\"\"\n",
  985. "input = open(\"Text1.txt\")\n",
  986. "lines = input.readlines()\n",
  987. "for line in lines:\n",
  988. "\tif '::' not in line:\n",
  989. "\t\tcontinue\n",
  990. "\tparts = line.split(\"::\")\n",
  991. "\tif len(parts)!=2:\n",
  992. "\t\tcontinue\n",
  993. "\tname = parts[1].split(' ')[1].strip()\n",
  994. "\tnames = name.split(',')\n",
  995. "\tfor name in names:\n",
  996. "\t\tnewline = pattern.replace(\"@@@\",name)\n",
  997. "\t\tprint(newline)\n"
  998. ]
  999. },
  1000. {
  1001. "attachments": {},
  1002. "cell_type": "markdown",
  1003. "metadata": {},
  1004. "source": [
  1005. "# ToJson"
  1006. ]
  1007. },
  1008. {
  1009. "cell_type": "code",
  1010. "execution_count": 2,
  1011. "metadata": {},
  1012. "outputs": [
  1013. {
  1014. "name": "stdout",
  1015. "output_type": "stream",
  1016. "text": [
  1017. "{\"MudBucket\":0,\n",
  1018. "\"Elevator\":0,\n",
  1019. "\"FillupHead\":0,\n",
  1020. "\"Ibop\":0,\n",
  1021. "\"Kelly\":0,\n",
  1022. "\"MouseHole\":0,\n",
  1023. "\"OperationCondition\":0,\n",
  1024. "\"SafetyValve\":0,\n",
  1025. "\"operation\":0,\n",
  1026. "\"Slips\":0,\n",
  1027. "\"Slips_S\":0,\n",
  1028. "\"Swing\":0,\n",
  1029. "\"Swing_S\":0,\n",
  1030. "\"TdsBackupClamp\":0,\n",
  1031. "\"TdsSpine\":0,\n",
  1032. "\"TdsSwing\":0,\n",
  1033. "\"TdsTong\":0,\n",
  1034. "\"Tong\":0,\n",
  1035. "\"Tong_S\":0,\n",
  1036. "\"TdsConnectionModes\":0,\n",
  1037. "\"TdsElevatorModes\":0,\n",
  1038. "}\n"
  1039. ]
  1040. }
  1041. ],
  1042. "source": [
  1043. "#Artifical JSon\n",
  1044. "input = open(\"Text1.txt\")\n",
  1045. "output = \"{\"\n",
  1046. "lines = input.readlines()\n",
  1047. "for line in lines:\n",
  1048. " name = line.split(\"::\")[-1].strip()\n",
  1049. " name = name.split(' ')[0]\n",
  1050. " type = line.split(\"::\")[0].strip()\n",
  1051. " output += f\"\\\"{name}\\\":0,\\n\" \n",
  1052. " # name = line.split(\"%\")[-1][:-1]\n",
  1053. " # print(name)\n",
  1054. "print(output+\"}\")"
  1055. ]
  1056. },
  1057. {
  1058. "cell_type": "code",
  1059. "execution_count": 2,
  1060. "metadata": {},
  1061. "outputs": [
  1062. {
  1063. "name": "stdout",
  1064. "output_type": "stream",
  1065. "text": [
  1066. "call json%add(p,\"MudBucket\",data%State%unitySignals%MudBucket)\n",
  1067. "call json%add(p,\"Elevator\",data%State%unitySignals%Elevator)\n",
  1068. "call json%add(p,\"FillupHead\",data%State%unitySignals%FillupHead)\n",
  1069. "call json%add(p,\"Ibop\",data%State%unitySignals%Ibop)\n",
  1070. "call json%add(p,\"Kelly\",data%State%unitySignals%Kelly)\n",
  1071. "call json%add(p,\"MouseHole\",data%State%unitySignals%MouseHole)\n",
  1072. "call json%add(p,\"OperationCondition\",data%State%unitySignals%OperationCondition)\n",
  1073. "call json%add(p,\"SafetyValve\",data%State%unitySignals%SafetyValve)\n",
  1074. "call json%add(p,\"operation\",data%State%unitySignals%operation)\n",
  1075. "call json%add(p,\"Slips\",data%State%unitySignals%Slips)\n",
  1076. "call json%add(p,\"Slips_S\",data%State%unitySignals%Slips_S)\n",
  1077. "call json%add(p,\"Swing\",data%State%unitySignals%Swing)\n",
  1078. "call json%add(p,\"Swing_S\",data%State%unitySignals%Swing_S)\n",
  1079. "call json%add(p,\"TdsBackupClamp\",data%State%unitySignals%TdsBackupClamp)\n",
  1080. "call json%add(p,\"TdsSpine\",data%State%unitySignals%TdsSpine)\n",
  1081. "call json%add(p,\"TdsSwing\",data%State%unitySignals%TdsSwing)\n",
  1082. "call json%add(p,\"TdsTong\",data%State%unitySignals%TdsTong)\n",
  1083. "call json%add(p,\"Tong\",data%State%unitySignals%Tong)\n",
  1084. "call json%add(p,\"Tong_S\",data%State%unitySignals%Tong_S)\n",
  1085. "call json%add(p,\"TdsConnectionModes\",data%State%unitySignals%TdsConnectionModes)\n",
  1086. "call json%add(p,\"TdsElevatorModes\",data%State%unitySignals%TdsElevatorModes)\n"
  1087. ]
  1088. }
  1089. ],
  1090. "source": [
  1091. "precode = \"\"\"call json%add(p,\"\",data%State%unitySignals%\"\"\"\n",
  1092. "input = open(\"Text1.txt\")\n",
  1093. "lines = input.readlines()\n",
  1094. "for line in lines:\n",
  1095. " name = line.split(\"::\")[-1].strip()\n",
  1096. " name = name.split(' ')[0]\n",
  1097. " icoute = precode.index(\"\\\"\")+1\n",
  1098. " # name = line.split(\"%\")[-1][:-1]\n",
  1099. " # print(name)\n",
  1100. " newline = precode[:icoute]+name+precode[icoute:]+name+\")\"\n",
  1101. " print(newline)\n"
  1102. ]
  1103. },
  1104. {
  1105. "cell_type": "code",
  1106. "execution_count": 2,
  1107. "metadata": {},
  1108. "outputs": [
  1109. {
  1110. "name": "stdout",
  1111. "output_type": "stream",
  1112. "text": [
  1113. "call BopControlPanelToJson(p)\n",
  1114. "call ChokeControlPanelToJson(p)\n",
  1115. "call ChokeManifoldToJson(p)\n",
  1116. "call DataDisplayConsoleToJson(p)\n",
  1117. "call DrillingConsoleToJson(p)\n",
  1118. "call HookToJson(p)\n",
  1119. "call StandPipeManifoldToJson(p)\n",
  1120. "call TopDrivePanelToJson(p)\n",
  1121. "call ! Drill WatchToJson(p)\n",
  1122. "call DrillingWatchToJson(p)\n",
  1123. "call TankToJson(p)\n"
  1124. ]
  1125. }
  1126. ],
  1127. "source": [
  1128. "precode = \"\"\"call \"\"\"\n",
  1129. "postcode = \"\"\"ToJson(p)\"\"\"\n",
  1130. "input = open(\"Text1.txt\")\n",
  1131. "lines = input.readlines()\n",
  1132. "for line in lines:\n",
  1133. " name = line.split(\"::\")[-1].strip()\n",
  1134. " # icoute = precode.index(\"\\\"\")+1\n",
  1135. " # name = line.split(\"::\")[-1][:-1].strip()\n",
  1136. " # print(name)\n",
  1137. " newline = precode+name+postcode\n",
  1138. " print(newline)\n"
  1139. ]
  1140. },
  1141. {
  1142. "cell_type": "code",
  1143. "execution_count": 3,
  1144. "metadata": {},
  1145. "outputs": [
  1146. {
  1147. "name": "stdout",
  1148. "output_type": "stream",
  1149. "text": [
  1150. "\tGeo/GeoMain.f90 \\\n",
  1151. "\n"
  1152. ]
  1153. }
  1154. ],
  1155. "source": [
  1156. "##Replace space with _ in filenames and list them for put them in makefile\n",
  1157. "import os\n",
  1158. "dir = 'Geo'\n",
  1159. "files = os.listdir(dir)\n",
  1160. "fstring = ''\n",
  1161. "for f in files:\n",
  1162. " if f.endswith('90'):\n",
  1163. " newf = f.replace(' ','_')\n",
  1164. " os.rename(os.path.join(dir,f),os.path.join(dir,newf))\n",
  1165. " if newf.lower().endswith('variables.f90'):\n",
  1166. " fstring = '\\t'+os.path.join(dir,newf).replace('\\\\','/') +' \\\\\\n' + fstring\n",
  1167. " else:\n",
  1168. " fstring = fstring + '\\t'+os.path.join(dir,newf).replace('\\\\','/') +' \\\\\\n'\n",
  1169. "\n",
  1170. "print(fstring)"
  1171. ]
  1172. },
  1173. {
  1174. "attachments": {},
  1175. "cell_type": "markdown",
  1176. "metadata": {},
  1177. "source": [
  1178. "## Extract variable names from definition lines"
  1179. ]
  1180. },
  1181. {
  1182. "cell_type": "code",
  1183. "execution_count": 1,
  1184. "metadata": {},
  1185. "outputs": [],
  1186. "source": [
  1187. "# %pwd\n",
  1188. "lines = input(\"Enter lines:\").split(\" \")\n",
  1189. "lines = [l.strip() for l in lines if len(l.strip())>0]\n",
  1190. "vars = []\n",
  1191. "for l in lines:\n",
  1192. " if '::' in l:\n",
  1193. " vars.append(l.split('::')[1].strip())"
  1194. ]
  1195. },
  1196. {
  1197. "cell_type": "code",
  1198. "execution_count": 8,
  1199. "metadata": {},
  1200. "outputs": [
  1201. {
  1202. "data": {
  1203. "text/plain": [
  1204. "'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'"
  1205. ]
  1206. },
  1207. "execution_count": 8,
  1208. "metadata": {},
  1209. "output_type": "execute_result"
  1210. }
  1211. ],
  1212. "source": [
  1213. "import string\n",
  1214. "string.ascii_letters"
  1215. ]
  1216. },
  1217. {
  1218. "cell_type": "code",
  1219. "execution_count": 9,
  1220. "metadata": {},
  1221. "outputs": [
  1222. {
  1223. "name": "stdout",
  1224. "output_type": "stream",
  1225. "text": [
  1226. "var: AnnularRegulatorSetControl\n",
  1227. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1228. "Char before: \n",
  1229. "Char after: \n",
  1230. "\n",
  1231. "var: AirMasterValve\n",
  1232. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1233. "Char before: \n",
  1234. "Char after: \n",
  1235. "\n",
  1236. "var: ByePassValve\n",
  1237. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1238. "Char before: \n",
  1239. "Char after: \n",
  1240. "\n",
  1241. "var: AnnularValve\n",
  1242. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1243. "Char before: \n",
  1244. "Char after: \n",
  1245. "\n",
  1246. "var: UpperRamsValve\n",
  1247. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1248. "Char before: \n",
  1249. "Char after: \n",
  1250. "\n",
  1251. "var: MiddleRamsValve\n",
  1252. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1253. "Char before: \n",
  1254. "Char after: \n",
  1255. "\n",
  1256. "var: KillLineValve\n",
  1257. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1258. "Char before: \n",
  1259. "Char after: \n",
  1260. "\n",
  1261. "var: ChokeLineValve\n",
  1262. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1263. "Char before: \n",
  1264. "Char after: \n",
  1265. "\n",
  1266. "var: LowerRamsValve\n",
  1267. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1268. "Char before: \n",
  1269. "Char after: \n",
  1270. "\n",
  1271. "var: ManifoldPressureGauge\n",
  1272. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1273. "Char before: \n",
  1274. "Char after: \n",
  1275. "\n",
  1276. "var: AirSupplyPressureGauge\n",
  1277. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1278. "Char before: \n",
  1279. "Char after: \n",
  1280. "\n",
  1281. "var: AccumulatorPressureGauge\n",
  1282. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1283. "Char before: \n",
  1284. "Char after: \n",
  1285. "\n",
  1286. "var: AnnularPressureGauge\n",
  1287. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1288. "Char before: \n",
  1289. "Char after: \n",
  1290. "\n",
  1291. "var: AnnularOpenLED\n",
  1292. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1293. "Char before: \n",
  1294. "Char after: \n",
  1295. "\n",
  1296. "var: AnnularCloseLED\n",
  1297. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1298. "Char before: \n",
  1299. "Char after: \n",
  1300. "\n",
  1301. "var: UpperRamsOpenLED\n",
  1302. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1303. "Char before: \n",
  1304. "Char after: \n",
  1305. "\n",
  1306. "var: UpperRamsCloseLED\n",
  1307. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1308. "Char before: \n",
  1309. "Char after: \n",
  1310. "\n",
  1311. "var: MiddleRamsOpenLED\n",
  1312. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1313. "Char before: \n",
  1314. "Char after: \n",
  1315. "\n",
  1316. "var: MiddleRamsCloseLED\n",
  1317. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1318. "Char before: \n",
  1319. "Char after: \n",
  1320. "\n",
  1321. "var: KillLineOpenLED\n",
  1322. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1323. "Char before: \n",
  1324. "Char after: \n",
  1325. "\n",
  1326. "var: KillLineCloseLED\n",
  1327. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1328. "Char before: \n",
  1329. "Char after: \n",
  1330. "\n",
  1331. "var: ChokeLineOpenLED\n",
  1332. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1333. "Char before: \n",
  1334. "Char after: \n",
  1335. "\n",
  1336. "var: ChokeLineCloseLED\n",
  1337. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1338. "Char before: \n",
  1339. "Char after: \n",
  1340. "\n",
  1341. "var: LowerRamsOpenLED\n",
  1342. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1343. "Char before: \n",
  1344. "Char after: \n",
  1345. "\n",
  1346. "var: LowerRamsCloseLED\n",
  1347. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1348. "Char before: \n",
  1349. "Char after: \n",
  1350. "\n",
  1351. "var: AnnularStatus\n",
  1352. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1353. "Char before: \n",
  1354. "Char after: \n",
  1355. "\n",
  1356. "var: UpperRamsStatus\n",
  1357. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1358. "Char before: \n",
  1359. "Char after: \n",
  1360. "\n",
  1361. "var: MiddleRamsStatus\n",
  1362. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1363. "Char before: \n",
  1364. "Char after: \n",
  1365. "\n",
  1366. "var: LowerRamsStatus\n",
  1367. "file = .\\CSharp\\Equipments\\ControlPanels\\CBopControlPanelVariables.f90\n",
  1368. "Char before: \n",
  1369. "Char after: \n",
  1370. "\n"
  1371. ]
  1372. }
  1373. ],
  1374. "source": [
  1375. "import os\n",
  1376. "import sys\n",
  1377. "import re\n",
  1378. "dir = '.'\n",
  1379. "varNameChars = string.ascii_letters + '_'\n",
  1380. "log = open(os.path.join(dir,'ReplaceVars.log',),'a')\n",
  1381. "end=False\n",
  1382. "for dir,subdirs,files in os.walk(dir):\n",
  1383. " for filename in files:\n",
  1384. " if filename.lower().endswith('.f90'):\n",
  1385. " # print(filename)\n",
  1386. " file = open(os.path.join(dir,filename))\n",
  1387. " code = file.read()\n",
  1388. " for var in vars:\n",
  1389. " if var not in code:\n",
  1390. " continue\n",
  1391. " occurs = [m.start() for m in re.finditer(var, code)]\n",
  1392. " for occurance in occurs:\n",
  1393. " if code[occurs[0]-1] in varNameChars or code[occurs[0]+len(var)] in varNameChars:\n",
  1394. " continue\n",
  1395. " print(f\"var: {var}\")\n",
  1396. " print(f\"file = {os.path.join(dir,filename)}\")\n",
  1397. " print(f\"Char before: {code[occurs[0]-1]}\")\n",
  1398. " print(f\"Char after: {code[occurs[0]+len(var)]}\")\n",
  1399. " end = True\n",
  1400. " if end:\n",
  1401. " break"
  1402. ]
  1403. },
  1404. {
  1405. "cell_type": "code",
  1406. "execution_count": 9,
  1407. "metadata": {},
  1408. "outputs": [
  1409. {
  1410. "name": "stdout",
  1411. "output_type": "stream",
  1412. "text": [
  1413. "State\n",
  1414. "Hoisting\n",
  1415. "OperationScenario\n",
  1416. "notifications\n",
  1417. "permissions\n",
  1418. "unitySignals\n",
  1419. "StudentStation\n",
  1420. "BopStackInput\n",
  1421. "BopStackAcc\n",
  1422. "RamLine\n",
  1423. "AnnularComputational\n",
  1424. "Annular\n",
  1425. "PipeRam1\n",
  1426. "ShearRam\n",
  1427. "PipeRam2\n",
  1428. "ChokeLine\n",
  1429. "KillLine\n",
  1430. "Pumps\n",
  1431. "RAM\n",
  1432. "RAMS\n",
  1433. "Choke\n",
  1434. "AirDrivenPump\n",
  1435. "AirPumpLine\n",
  1436. "CHOOKE\n",
  1437. "Drawworks\n",
  1438. "MudSystem\n",
  1439. "MUD\n",
  1440. "PUMP\n",
  1441. "RTable\n",
  1442. "TDS\n",
  1443. "GasType(3)\n",
  1444. "PressureDisplay\n",
  1445. "ObservationPoint(:)\n",
  1446. "FricPressDrop\n",
  1447. "ROP_Spec\n",
  1448. "ROP_Bit\n",
  1449. "TDGeo\n",
  1450. "F_String(:)\n",
  1451. "F_Counts\n",
  1452. "F_Interval(:)\n",
  1453. "OD_Annulus(4)\n",
  1454. "TD_DrillStem\n",
  1455. "TD_DrillStems\n",
  1456. "TD_String\n",
  1457. "TD_Count\n",
  1458. "G_StringElement\n",
  1459. "TD_Vol\n",
  1460. "TD_General\n",
  1461. "TD_BOP\n",
  1462. "TD_BOPElement(4)\n",
  1463. "TD_StConn\n",
  1464. "TD_Load\n",
  1465. "TD_WellEl\n",
  1466. "TD_Casing\n",
  1467. "data%State%TD_Liner\n",
  1468. "TD_OpenHole\n",
  1469. "TD_ROPHole\n",
  1470. "TD_WellGeneral\n",
  1471. "TD_WellGeo(:)\n",
  1472. "EquipmentControl\n",
  1473. "BopControlPanel\n",
  1474. "ChokeControlPanel\n",
  1475. "ChokeManifold\n",
  1476. "DataDisplayConsole\n",
  1477. "DrillingConsole\n",
  1478. "Hook\n",
  1479. "StandPipeManifold\n",
  1480. "TopDrivePanel\n",
  1481. "DrillingWatch\n",
  1482. "Tank\n",
  1483. "Configuration\n",
  1484. "StringConfiguration\n",
  1485. "Formation\n",
  1486. "Reservoir\n",
  1487. "Shoe\n",
  1488. "Accumulator\n",
  1489. "BopStackSpecification\n",
  1490. "Hoisting\n",
  1491. "Power\n",
  1492. "PumpsSpecification\n",
  1493. "RigSize\n",
  1494. "CasingLinerChoke\n",
  1495. "PathGeneration\n",
  1496. "WellSurveyData\n",
  1497. "MudProperties\n",
  1498. "problems\n",
  1499. "BitProblems\n",
  1500. "BopProblems\n",
  1501. "ChokeProblems\n",
  1502. "DrillStemProblems\n",
  1503. "GaugesProblems\n",
  1504. "HoistingProblems\n",
  1505. "KickProblems\n",
  1506. "LostProblems\n",
  1507. "MudTreatmentProblems\n",
  1508. "OtherProblems\n",
  1509. "PumpProblems\n",
  1510. "RotaryProblems\n"
  1511. ]
  1512. },
  1513. {
  1514. "ename": "IndexError",
  1515. "evalue": "list index out of range",
  1516. "output_type": "error",
  1517. "traceback": [
  1518. "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
  1519. "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
  1520. "\u001b[1;32mc:\\Projects\\VSIM\\SimulationCore2\\helper.ipynb Cell 6\u001b[0m in \u001b[0;36m<cell line: 3>\u001b[1;34m()\u001b[0m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/Projects/VSIM/SimulationCore2/helper.ipynb#W5sZmlsZQ%3D%3D?line=5'>6</a>\u001b[0m nsp\u001b[39m+\u001b[39m\u001b[39m=\u001b[39m\u001b[39m1\u001b[39m\n\u001b[0;32m <a href='vscode-notebook-cell:/c%3A/Projects/VSIM/SimulationCore2/helper.ipynb#W5sZmlsZQ%3D%3D?line=6'>7</a>\u001b[0m splits \u001b[39m=\u001b[39m line\u001b[39m.\u001b[39msplit(\u001b[39m\"\u001b[39m\u001b[39m::\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/Projects/VSIM/SimulationCore2/helper.ipynb#W5sZmlsZQ%3D%3D?line=7'>8</a>\u001b[0m \u001b[39mprint\u001b[39m(splits[\u001b[39m1\u001b[39;49m]\u001b[39m.\u001b[39mstrip())\n",
  1521. "\u001b[1;31mIndexError\u001b[0m: list index out of range"
  1522. ]
  1523. }
  1524. ],
  1525. "source": [
  1526. "f = open(\"hier.txt\")\n",
  1527. "lines = f.readlines()\n",
  1528. "for line in lines[1:]:\n",
  1529. " nsp=0\n",
  1530. " while line[nsp]==' ':\n",
  1531. " nsp+=1\n",
  1532. " splits = line.split(\"::\")\n",
  1533. " print(splits[1].strip())"
  1534. ]
  1535. },
  1536. {
  1537. "cell_type": "code",
  1538. "execution_count": 4,
  1539. "metadata": {},
  1540. "outputs": [
  1541. {
  1542. "data": {
  1543. "text/plain": [
  1544. "'type SimulationDataType type(SimulationStateType)::State Type(HoistingType)::Hoisting type(OperationScenarioType)::OperationScenario type(NotificationType)::notifications type(PermissionsType):: permissions type(UnitySignalsType):: unitySignals type(StudentStationType)::StudentStation type(BopStackInputType)::BopStackInput type(BopStackAccType)::BopStackAcc type(RamLineType)::RamLine type(AnnularComputationalType)::AnnularComputational type(AnnularType)::Annular type(PipeRams1Type)::PipeRam1 type(ShearRamType)::ShearRam type(PipeRam2Type)::PipeRam2 type(ChokeLineType)::ChokeLine type(KillLineType)::KillLine type(PumpsType)::Pumps TYPE(BOP_TypeVars), DIMENSION(1:6) :: RAM TYPE(BOP_TypeVars2D) :: RAMS type(ChokeType)::Choke type(AirDrivenPumpType)::AirDrivenPump type(AirPumpLineType)::AirPumpLine TYPE(CHOKE_TypeVars), DIMENSION(1:2) :: CHOOKE TYPE(Drawworks_Var) :: Drawworks type(MudSystemType)::MudSystem TYPE(MUD_TypeVars), DIMENSION(1:10) :: MUD TYPE(Pump_Var), DIMENSION(1:3) :: PUMP TYPE(RTable_Var) :: RTable TYPE(TDS_Var) :: TDS TYPE(GasData) :: GasType(3) ! 1 = methane , 2 = Hydrogen sulfide , 3 = Carbon dioxid TYPE(PressureDisplayVARIABLESTYPE) :: PressureDisplay TYPE(ObservationAndGaugePointsInformations) , ALLOCATABLE :: ObservationPoint(:) TYPE(FricPressDropVarsTYPE) :: FricPressDrop TYPE(ROPSpecificationInfo) :: ROP_Spec TYPE(ROPInfo) :: ROP_Bit TYPE(Geo_Data) :: TDGeo TYPE(F_StringData) , Allocatable :: F_String(:) TYPE(F_IntervalsCountsData):: F_Counts TYPE(F_IntervalData) , Allocatable :: F_Interval(:) TYPE(OD_AnnulusData) :: OD_Annulus(4) TYPE(TD_DrillStemInfo), ALLOCATABLE, DIMENSION(:) :: TD_DrillStem TYPE(TD_SeparatedDrillStemInfo), ALLOCATABLE, DIMENSION(:) :: TD_DrillStems TYPE(TD_StringInfo) :: TD_String TYPE(TD_AddRemoveInfo) :: TD_Count TYPE(CStringComponents), ALLOCATABLE, DIMENSION(:) :: G_StringElement TYPE(TD_RemovedVolumeInfo) :: TD_Vol TYPE(TD_GeneralInfo) :: TD_General TYPE(TD_BOPInfo) :: TD_BOP TYPE(CBopElement) :: TD_BOPElement(4) TYPE(TD_StringconnectionInfo) :: TD_StConn TYPE(TD_LoadInfo) :: TD_Load TYPE(TD_WellElementsInfo) :: TD_WellEl TYPE(TD_CasingInfo), ALLOCATABLE, DIMENSION(:) :: TD_Casing TYPE(TD_LinerInfo), ALLOCATABLE, DIMENSION(:) :: data%State%TD_Liner TYPE(TD_OpenHoleInfo), ALLOCATABLE, DIMENSION(:) :: TD_OpenHole TYPE(TD_ROPHoleInfo), ALLOCATABLE, DIMENSION(:) :: TD_ROPHole TYPE(TD_WellGeneralInfo) :: TD_WellGeneral TYPE(TD_WellGeometryData), Allocatable :: TD_WellGeo(:) type(EquipmentControlType)::EquipmentControl type(BopControlPanelType) :: BopControlPanel Type(ChokeControlPanelType)::ChokeControlPanel Type(ChokeManifoldType)::ChokeManifold Type(DataDisplayConsoleType) :: DataDisplayConsole TYPE(DrillingConsoleType) :: DrillingConsole Type(HookType)::Hook type(StandPipeManifoldType)::StandPipeManifold Type(TopDrivePanelType)::TopDrivePanel Type(DrillingWatchType)::DrillingWatch Type(TankType)::Tank type(ConfigurationType)::Configuration Type(StringConfigurationType)::StringConfiguration Type(FormationType) :: Formation Type(ReservoirType)::Reservoir Type(ShoeType)::Shoe Type(AccumulatorType)::Accumulator Type(BopStackSpecificationType)::BopStackSpecification Type(HoistingType)::Hoisting Type(PowerType)::Power Type(PumpSpecificationType)::PumpsSpecification Type(RigSizeType)::RigSize Type(CasingLinerChokeType)::CasingLinerChoke Type(PathGenerationType)::PathGeneration Type(WellSurveyDataType)::WellSurveyData Type(MudPropertiesType)::MudProperties type(ProblemsType)::problems type(BitProblemsType)::BitProblems type(BopProblemsType)::BopProblems type(ChokeProblemsType)::ChokeProblems type(DrillStemProblemsType)::DrillStemProblems type(GaugesProblemsType)::GaugesProblems type(HoistingProblemsType):: HoistingProblems type(KickProblemsType)::KickProblems type(LostProblemsType)::LostProblems type(MudTreatmentProblemsType)::MudTreatmentProblems type(OtherProblemsType)::OtherProblems type(PumpProblemsType)::PumpProblems type(RotaryProblemsType)::RotaryProblems end type SimulationDataType'"
  1545. ]
  1546. },
  1547. "execution_count": 4,
  1548. "metadata": {},
  1549. "output_type": "execute_result"
  1550. }
  1551. ],
  1552. "source": [
  1553. "line"
  1554. ]
  1555. },
  1556. {
  1557. "cell_type": "code",
  1558. "execution_count": null,
  1559. "metadata": {},
  1560. "outputs": [],
  1561. "source": [
  1562. "for fn in modules:\n",
  1563. " f = open(fn)\n",
  1564. " lines = f.readlines()\n",
  1565. " module_filenames = {}\n",
  1566. " used_modules = []\n",
  1567. " mod_count = 0\n",
  1568. " for l in lines:\n",
  1569. " l = l.strip().lower()\n",
  1570. " if l.startswith('module ') and not l.startswith('module procedure '):\n",
  1571. " mod_name = l.split(' ')[1]\n",
  1572. " module_filenames[mod_name] = fn\n",
  1573. " mod_count +=1\n",
  1574. " if l.startswith('use'):\n",
  1575. " used_modules.append(l.split(' ')[1])\n",
  1576. " if mod_count !=1:\n",
  1577. " print(f\"{fn} has {mod_count} modules\")\n",
  1578. " module_filenames,used_modules"
  1579. ]
  1580. },
  1581. {
  1582. "cell_type": "markdown",
  1583. "metadata": {},
  1584. "source": [
  1585. "# Redis"
  1586. ]
  1587. },
  1588. {
  1589. "cell_type": "code",
  1590. "execution_count": 2,
  1591. "metadata": {},
  1592. "outputs": [
  1593. {
  1594. "ename": "KeyboardInterrupt",
  1595. "evalue": "",
  1596. "output_type": "error",
  1597. "traceback": [
  1598. "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
  1599. "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
  1600. "Cell \u001b[0;32mIn[2], line 17\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 16\u001b[0m r\u001b[38;5;241m.\u001b[39mpublish(channelName, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtest\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 17\u001b[0m \u001b[43mtime\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msleep\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 18\u001b[0m \u001b[38;5;66;03m# r.publish(channelName, \"Hello from Server 2!\") \u001b[39;00m\n\u001b[1;32m 19\u001b[0m \u001b[38;5;66;03m# r.publish(channelName, \"Hello from Server 3!\") \u001b[39;00m\n\u001b[1;32m 20\u001b[0m \u001b[38;5;66;03m# r.publish(channelName, \"Hello from Server 4!\")\u001b[39;00m\n",
  1601. "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
  1602. ]
  1603. }
  1604. ],
  1605. "source": [
  1606. "import redis \n",
  1607. "import time \n",
  1608. " \n",
  1609. "# Define the connection parameters \n",
  1610. "redis_host = \"127.0.0.1\"\n",
  1611. "redis_port = 6379 \n",
  1612. "redis_password = \"1qazxsw2$$\" \n",
  1613. "channelName = \"f7e58e26-f9c0-44e7-8954-08dc093dd85d.ch\" \n",
  1614. "streamKey = \"sampleStream\" \n",
  1615. " \n",
  1616. "# Connect to the Redis server \n",
  1617. "r = redis.Redis(host=redis_host, port=redis_port, password=redis_password) \n",
  1618. " \n",
  1619. "# Publish messages to the channel\n",
  1620. "while True:\n",
  1621. " r.publish(channelName, \"test\")\n",
  1622. " time.sleep(1)\n",
  1623. "# r.publish(channelName, \"Hello from Server 2!\") \n",
  1624. "# r.publish(channelName, \"Hello from Server 3!\") \n",
  1625. "# r.publish(channelName, \"Hello from Server 4!\")"
  1626. ]
  1627. },
  1628. {
  1629. "cell_type": "code",
  1630. "execution_count": 2,
  1631. "metadata": {},
  1632. "outputs": [
  1633. {
  1634. "name": "stdout",
  1635. "output_type": "stream",
  1636. "text": [
  1637. "Received: 1\n",
  1638. "Received: b'Hello from FORTRAN!'\n",
  1639. "Received: b'Hello from FORTRAN!'\n",
  1640. "Received: b'Hello from FORTRAN!'\n",
  1641. "Received: b'Hello from FORTRAN!'\n",
  1642. "Received: b'Hello from FORTRAN!'\n",
  1643. "Received: b'Hello from FORTRAN!'\n",
  1644. "Received: b'Hello from FORTRAN!'\n",
  1645. "Received: b'Hello from FORTRAN!'\n",
  1646. "Received: b'Hello from FORTRAN!'\n",
  1647. "Received: b'Hello from FORTRAN!'\n",
  1648. "Received: b'Hello from FORTRAN!'\n",
  1649. "Received: b'Hello from FORTRAN!'\n",
  1650. "Received: b'Hello from FORTRAN!'\n",
  1651. "Received: b'Hello from FORTRAN!'\n",
  1652. "Received: b'Hello from FORTRAN!'\n",
  1653. "Received: b'Hello from FORTRAN!'\n",
  1654. "Received: b'Hello from FORTRAN!'\n",
  1655. "Received: b'Hello from FORTRAN!'\n",
  1656. "Received: b'Hello from FORTRAN!'\n",
  1657. "Received: b'Hello from FORTRAN!'\n",
  1658. "Received: b'Hello from FORTRAN!'\n",
  1659. "Received: b'Hello from FORTRAN!'\n",
  1660. "Received: b'Hello from FORTRAN!'\n",
  1661. "Received: b'Hello from FORTRAN!'\n",
  1662. "Received: b'Hello from FORTRAN!'\n",
  1663. "Received: b'Hello from FORTRAN!'\n",
  1664. "Received: b'Hello from FORTRAN!'\n",
  1665. "Received: b'Hello from FORTRAN!'\n",
  1666. "Received: b'Hello from FORTRAN!'\n",
  1667. "Received: b'Hello from FORTRAN!'\n",
  1668. "Received: b'Hello from FORTRAN!'\n",
  1669. "Received: b'Hello from FORTRAN!'\n"
  1670. ]
  1671. },
  1672. {
  1673. "ename": "KeyboardInterrupt",
  1674. "evalue": "",
  1675. "output_type": "error",
  1676. "traceback": [
  1677. "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
  1678. "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
  1679. "Cell \u001b[0;32mIn[2], line 13\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;66;03m# Listen for messages\u001b[39;00m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m---> 13\u001b[0m message \u001b[38;5;241m=\u001b[39m \u001b[43mp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_message\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m message:\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mReceived: \u001b[39m\u001b[38;5;124m'\u001b[39m, message[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdata\u001b[39m\u001b[38;5;124m'\u001b[39m])\n",
  1680. "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/client.py:1013\u001b[0m, in \u001b[0;36mPubSub.get_message\u001b[0;34m(self, ignore_subscribe_messages, timeout)\u001b[0m\n\u001b[1;32m 1008\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1009\u001b[0m \u001b[38;5;66;03m# The connection isn't subscribed to any channels or patterns,\u001b[39;00m\n\u001b[1;32m 1010\u001b[0m \u001b[38;5;66;03m# so no messages are available\u001b[39;00m\n\u001b[1;32m 1011\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m-> 1013\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparse_response\u001b[49m\u001b[43m(\u001b[49m\u001b[43mblock\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mis\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1014\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m response:\n\u001b[1;32m 1015\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandle_message(response, ignore_subscribe_messages)\n",
  1681. "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/client.py:824\u001b[0m, in \u001b[0;36mPubSub.parse_response\u001b[0;34m(self, block, timeout)\u001b[0m\n\u001b[1;32m 821\u001b[0m conn\u001b[38;5;241m.\u001b[39mconnect()\n\u001b[1;32m 822\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mread_response(disconnect_on_error\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, push_request\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m--> 824\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_execute\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtry_read\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 826\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mis_health_check_response(response):\n\u001b[1;32m 827\u001b[0m \u001b[38;5;66;03m# ignore the health check message as user might not expect it\u001b[39;00m\n\u001b[1;32m 828\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhealth_check_response_counter \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n",
  1682. "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/client.py:800\u001b[0m, in \u001b[0;36mPubSub._execute\u001b[0;34m(self, conn, command, *args, **kwargs)\u001b[0m\n\u001b[1;32m 792\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_execute\u001b[39m(\u001b[38;5;28mself\u001b[39m, conn, command, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 793\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 794\u001b[0m \u001b[38;5;124;03m Connect manually upon disconnection. If the Redis server is down,\u001b[39;00m\n\u001b[1;32m 795\u001b[0m \u001b[38;5;124;03m this will fail and raise a ConnectionError as desired.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 798\u001b[0m \u001b[38;5;124;03m patterns we were previously listening to\u001b[39;00m\n\u001b[1;32m 799\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 800\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mretry\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall_with_retry\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 801\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mlambda\u001b[39;49;00m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mcommand\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 802\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mlambda\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_disconnect_raise_connect\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 803\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n",
  1683. "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/retry.py:46\u001b[0m, in \u001b[0;36mRetry.call_with_retry\u001b[0;34m(self, do, fail)\u001b[0m\n\u001b[1;32m 44\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 45\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 46\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdo\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 47\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_supported_errors \u001b[38;5;28;01mas\u001b[39;00m error:\n\u001b[1;32m 48\u001b[0m failures \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m\n",
  1684. "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/client.py:801\u001b[0m, in \u001b[0;36mPubSub._execute.<locals>.<lambda>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 792\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_execute\u001b[39m(\u001b[38;5;28mself\u001b[39m, conn, command, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 793\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 794\u001b[0m \u001b[38;5;124;03m Connect manually upon disconnection. If the Redis server is down,\u001b[39;00m\n\u001b[1;32m 795\u001b[0m \u001b[38;5;124;03m this will fail and raise a ConnectionError as desired.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 798\u001b[0m \u001b[38;5;124;03m patterns we were previously listening to\u001b[39;00m\n\u001b[1;32m 799\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m 800\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m conn\u001b[38;5;241m.\u001b[39mretry\u001b[38;5;241m.\u001b[39mcall_with_retry(\n\u001b[0;32m--> 801\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m: \u001b[43mcommand\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m,\n\u001b[1;32m 802\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m error: \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_disconnect_raise_connect(conn, error),\n\u001b[1;32m 803\u001b[0m )\n",
  1685. "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/client.py:818\u001b[0m, in \u001b[0;36mPubSub.parse_response.<locals>.try_read\u001b[0;34m()\u001b[0m\n\u001b[1;32m 816\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtry_read\u001b[39m():\n\u001b[1;32m 817\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m block:\n\u001b[0;32m--> 818\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcan_read\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 819\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 820\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n",
  1686. "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/connection.py:478\u001b[0m, in \u001b[0;36mAbstractConnection.can_read\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 475\u001b[0m host_error \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_host_error()\n\u001b[1;32m 477\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 478\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_parser\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcan_read\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 479\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mOSError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 480\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdisconnect()\n",
  1687. "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/_parsers/base.py:128\u001b[0m, in \u001b[0;36m_RESPBase.can_read\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 127\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcan_read\u001b[39m(\u001b[38;5;28mself\u001b[39m, timeout):\n\u001b[0;32m--> 128\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_buffer \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_buffer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcan_read\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n",
  1688. "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/_parsers/socket.py:95\u001b[0m, in \u001b[0;36mSocketBuffer.can_read\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 94\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcan_read\u001b[39m(\u001b[38;5;28mself\u001b[39m, timeout: \u001b[38;5;28mfloat\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mbool\u001b[39m:\n\u001b[0;32m---> 95\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mbool\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43munread_bytes\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m) \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_read_from_socket(\n\u001b[1;32m 96\u001b[0m timeout\u001b[38;5;241m=\u001b[39mtimeout, raise_on_timeout\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m 97\u001b[0m )\n",
  1689. "File \u001b[0;32m~/.local/lib/python3.8/site-packages/redis/_parsers/socket.py:42\u001b[0m, in \u001b[0;36mSocketBuffer.unread_bytes\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21munread_bytes\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mint\u001b[39m:\n\u001b[1;32m 39\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;124;03m Remaining unread length of buffer\u001b[39;00m\n\u001b[1;32m 41\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 42\u001b[0m pos \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_buffer\u001b[49m\u001b[38;5;241m.\u001b[39mtell()\n\u001b[1;32m 43\u001b[0m end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_buffer\u001b[38;5;241m.\u001b[39mseek(\u001b[38;5;241m0\u001b[39m, SEEK_END)\n\u001b[1;32m 44\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_buffer\u001b[38;5;241m.\u001b[39mseek(pos)\n",
  1690. "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
  1691. ]
  1692. }
  1693. ],
  1694. "source": [
  1695. "import redis\n",
  1696. "\n",
  1697. "r = redis.Redis(host='localhost', port=6379,password='1qazxsw2$$')\n",
  1698. "\n",
  1699. "# Create a pubsub instance\n",
  1700. "p = r.pubsub()\n",
  1701. "\n",
  1702. "# Subscribe to a channel\n",
  1703. "p.subscribe('37364875-c9cf-43a3-de45-08dc0c6103c9.ch_out')\n",
  1704. "\n",
  1705. "# Listen for messages\n",
  1706. "while True:\n",
  1707. " message = p.get_message()\n",
  1708. " if message:\n",
  1709. " print('Received: ', message['data'])"
  1710. ]
  1711. }
  1712. ],
  1713. "metadata": {
  1714. "kernelspec": {
  1715. "display_name": "base",
  1716. "language": "python",
  1717. "name": "python3"
  1718. },
  1719. "language_info": {
  1720. "codemirror_mode": {
  1721. "name": "ipython",
  1722. "version": 3
  1723. },
  1724. "file_extension": ".py",
  1725. "mimetype": "text/x-python",
  1726. "name": "python",
  1727. "nbconvert_exporter": "python",
  1728. "pygments_lexer": "ipython3",
  1729. "version": "3.8.10"
  1730. },
  1731. "orig_nbformat": 4,
  1732. "vscode": {
  1733. "interpreter": {
  1734. "hash": "1ef4a26de7183d96d6da1045a38581e0a15b2215d0c1b98c7b273c6e514c6c7e"
  1735. }
  1736. }
  1737. },
  1738. "nbformat": 4,
  1739. "nbformat_minor": 2
  1740. }