Parcourir la source

before adding tarmigh files 14020820

master
Mahmood Farokhian il y a 1 an
Parent
révision
648a4dbc60
54 fichiers modifiés avec 3006 ajouts et 489 suppressions
  1. +134
    -0
      .ipynb_checkpoints/Data Structures-checkpoint.txt
  2. +11
    -0
      .ipynb_checkpoints/config-asiatech-checkpoint.json
  3. +1
    -0
      .ipynb_checkpoints/first_demo-checkpoint.sh
  4. +42
    -0
      .ipynb_checkpoints/simulatorManager-checkpoint.py
  5. +15
    -0
      Bit_Database.TXT
  6. +1
    -1
      CSharp/BasicInputs/RigSpecifications/CAccumulator.i90
  7. +58
    -0
      CSharp/BasicInputs/RigSpecifications/CHoisting.i90
  8. +1
    -1
      CSharp/Equipments/ControlPanels/CChokeControlPanel.i90
  9. +8
    -162
      CSharp/Equipments/ControlPanels/CDataDisplayConsole.f90
  10. +8
    -160
      CSharp/Equipments/ControlPanels/CDataDisplayConsole.i90
  11. +12
    -4
      CSharp/Equipments/ControlPanels/CDrillingConsole.f90
  12. +11
    -3
      CSharp/Equipments/ControlPanels/CDrillingConsole.i90
  13. +12
    -0
      CSharp/Equipments/ControlPanels/CEquipmentsConstants.i90
  14. +1
    -1
      CSharp/OperationScenarios/Notifications/CUnlatchLedNotification.i90
  15. +92
    -0
      CSharp/OperationScenarios/Permissions/CIrIbopPermission.i90
  16. +1
    -1
      CSharp/OperationScenarios/UnitySignals/UnitySignals.i90
  17. +10
    -6
      CSharp/OperationScenarios/UnitySignals/UnitySignalsVariables.f90
  18. +1
    -1
      CSharp/OperationScenarios/UnitySignals/UnitySignalsVariables.i90
  19. +158
    -0
      Common/DynamicDoubleArray.i90
  20. +27
    -27
      Common/json-fortran/json_file_module.i90
  21. +0
    -5
      Equipments/Drawworks/Drawworks_Direction.f90
  22. +148
    -0
      Equipments/Drawworks/Drawworks_Direction.i90
  23. +285
    -0
      Equipments/Drawworks/Drawworks_Solver.i90
  24. +58
    -0
      Equipments/Drawworks/Drawworks_StartUp.i90
  25. +56
    -0
      Equipments/Drawworks/Drawworks_VARIABLES.i90
  26. +58
    -0
      Equipments/Pumps/Pump1_MainSolver.i90
  27. +47
    -0
      Equipments/Pumps/Pump_OffMode_Solver.i90
  28. +27
    -0
      Equipments/Pumps/Pumps_MainSolver.i90
  29. +78
    -0
      Equipments/RotaryTable/RTable_INPUTS.i90
  30. +77
    -0
      Equipments/RotaryTable/RTable_Inputs.f90
  31. +67
    -0
      Equipments/RotaryTable/RTable_MainSolver.f90
  32. +68
    -0
      Equipments/RotaryTable/RTable_MainSolver.i90
  33. +63
    -0
      Equipments/RotaryTable/RTable_OffModeSolver.i90
  34. +52
    -0
      Equipments/RotaryTable/RTable_OnModeSolver.i90
  35. +41
    -0
      Equipments/RotaryTable/RTable_VARIABLES.i90
  36. +68
    -0
      Equipments/RotaryTable/Rtable_MainSolver.i90
  37. +45
    -0
      Equipments/TopDrive/TopDrive_Inputs.f90
  38. +492
    -0
      FluidFlow/kick/Gas_Kick_Calculator.i90
  39. +3
    -0
      Makefile
  40. +96
    -46
      Redis/Redis_Interface.f90
  41. +96
    -46
      Redis/Redis_Interface.i90
  42. +47
    -2
      Redis/redis_io.c
  43. +15
    -0
      Rop/Bit_Database.TXT
  44. +78
    -0
      Rop/Bit_Specification.i90
  45. +6
    -0
      Simulation/Constants.i90
  46. +12
    -0
      Simulation/logging.f90
  47. +13
    -0
      Simulation/logging.i90
  48. BIN
     
  49. +18
    -11
      Simulator.f90
  50. +18
    -11
      Simulator.i90
  51. +122
    -0
      TorqueDrag/TD_MainCalculations.i90
  52. +146
    -0
      TorqueDrag/TD_ReadDataSubroutines/TD_DrillStemReadData.i90
  53. +1
    -0
      first_demo.sh
  54. +1
    -1
      redisContent.json

+ 134
- 0
.ipynb_checkpoints/Data Structures-checkpoint.txt Voir le fichier

@@ -0,0 +1,134 @@
CSharp:
BasicInputs:
Bha:
StringConfiguration
Geology:
Formation
Reservoir
Shoe
RigSpecification:
Accumulator
BopStackSpecification
Hoisting
Power
PumpsSpecification
RigSize
WellProfile:
CasingLinerChoke
PathGeneration
WellSurveyData
MudProperties
Equipments:
ControlPanel:
BopControlPanel
CholeControlPanel
ChokeManifold
DataDisplayConsole
DrillingConsole
Hook
StandPipleManifold
TopDrivePanel
ِDrillWatch
DrillingWatch
MudPathfinding:
Manifold
Tanks:
Tank
Common:
Common
Lesson
DownHole:
DownHole
OperationScenario:
Common:
OperationScenario: Constants? or Variables?
Enums:
ElevatorConnectionEnum: merged into OperationScenario
KellyConnectionEnum
TdsConnectionModesEnum
Notifications:
Notifications
Permissions:
Permissions
SoftwareInputs
Unity:
UnityInputs
UnityOutputs
UnitySignals:
UnitySignals
StudentStation:
StudentStation
Warnings:
Warnings
Problems:
BitProblems
BopProblems
ChockProblems
DrillStemProblems
GaugesProblems
HoistingProblems
KickProblems
LostProblems
MudTreatmentProblems
OtherProblems
PumpProblems
RotaryProblems
Equipments:
BopStack:
BopStackInput
BopStackAcc
RamLine
AnnularComputational
Annular
PipeRam1
ShearRam
PipeRam2
ChokeLine
KillLine
Pumps
RAM (previously exists)
RAMS
ChokeControl:
Choke
AirDrivenPump
AirPumpLine
CHOOKE (previously exists)
MudSystem:
MudSystem
Pumps:
MPumps
Pump(1:3)
RotaryTable:
RTable
TopDrive:
TDS
TorqueDrag:
TDGeo
data%State%F_String(:)
F_Counts
data%State%F_Interval(:)
data%State%OD_Annulus(4)
data%State%TD_String
data%State%TD_DrillStem(:)
data%State%TD_DrillStems(:)
data%State%TD_Count
data%State%G_StringElement
data%State%TD_Vol
data%State%TD_General
data%State%TD_BOP
data%State%TD_BOPElement(4)
data%State%TD_StConn
data%State%TD_Load
data%State%TD_WellEl
data%State%TD_Casing
data%State%TD_Liner
data%State%TD_OpenHole
data%State%TD_ROPHole
data%State%TD_WellGeneral
data%State%TD_WellGeo(:)
FluidFlow:
Rop:
ROP_Bit
ROP_Spec

+ 11
- 0
.ipynb_checkpoints/config-asiatech-checkpoint.json Voir le fichier

@@ -0,0 +1,11 @@
{
"redis":{
"address":"85.198.9.229",
"port":6379,
"password":"1qazxsw2$$"
},
"logging":3,
"process_name": "SimulationCore2",
"work_dir" : ".",
"step_time" : 100
}

+ 1
- 0
.ipynb_checkpoints/first_demo-checkpoint.sh Voir le fichier

@@ -0,0 +1 @@
./SimulationCore2 aberama.iran.liara.ir 32815 4YKFnubfFFjfh4yTK7b0Rg9X 60f8144a-c1b7-4d1a-5d99-08db9e4e35f5 5

+ 42
- 0
.ipynb_checkpoints/simulatorManager-checkpoint.py Voir le fichier

@@ -0,0 +1,42 @@
import sys
import redis
import json
import time
import subprocess
import psutil

if __name__=='__main__':
if len(sys.argv)<=1:
configFN = 'config-remote.json'
else:
configFN = sys.argv[1]

f = open(configFN)
config = json.load(f)

redis_address = config['redis']['address']
redis_password = config['redis']['password']
redis_port = config['redis']['port']
log_level = config['logging']
work_dir = config['work_dir']
stepTime = config['step_time']
process_name = config['process_name']

r = redis.Redis(host=redis_address, port=redis_port, decode_responses=True,password=redis_password)
runnings = []
while True:
sims = r.get('Simulations')
sims = json.loads(sims)
for sim in sims:
simulation_id = sim['Id']
process_exists = False
for proc in psutil.process_iter(['pid', 'name', 'cmdline']):
if proc.info['name'] == process_name and len(proc.info['cmdline']) > 1 and proc.info['cmdline'][1] == simulation_id:
process_exists = True
break
if not simulation_id in runnings: #process_exists:
runnings.append(simulation_id)
command = ['./SimulationCore2', redis_address,str(redis_port),redis_password,simulation_id,str(log_level),str(stepTime)]
print(command)
subprocess.Popen(command, cwd=work_dir)
time.sleep(5)

+ 15
- 0
Bit_Database.TXT Voir le fichier

@@ -0,0 +1,15 @@
Bit Class H1 H2 H3 (w/d)max
11 , 1.9 , 7. , 1. , 7.
12 , 1.9 , 7. , 1. , 7.
13 , 1.84 , 6. , 0.8 , 8.
14 , 1.84 , 6. , 0.8 , 8.
21 , 1.8 , 5. , 0.6 , 8.5
22 , 1.8 , 5. , 0.6 , 8.5
23 , 1.76 , 4. , 0.48 , 9.
24 , 1.76 , 4. , 0.48 , 9.
31 , 1.7 , 3. , 0.36 , 10.
32 , 1.65 , 2. , 0.26 , 10.
33 , 1.6 , 2. , 0.2 , 10.
34 , 1.6 , 2. , 0.2 , 10.
41 , 1.5 , 2. , 0.18 , 10.
10 , 1.5 , 1. , 0.02 , 10.

+ 1
- 1
CSharp/BasicInputs/RigSpecifications/CAccumulator.i90 Voir le fichier

@@ -1,4 +1,4 @@
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/BasicInputs/RigSpecifications/CAccumulator.f90"
# 1 "/home/admin/SimulationCore2/CSharp/BasicInputs/RigSpecifications/CAccumulator.f90"
module CAccumulator
use SimulationVariables
! use CAccumulatorVariables


+ 58
- 0
CSharp/BasicInputs/RigSpecifications/CHoisting.i90 Voir le fichier

@@ -0,0 +1,58 @@
# 1 "/home/admin/SimulationCore2/CSharp/BasicInputs/RigSpecifications/CHoisting.f90"
module CHoisting
use SimulationVariables
use json_module
implicit none
public
contains

subroutine HoistingFromJson(parent)
use json_module,IK =>json_ik
type(json_value),pointer :: parent
type(json_core) :: json
type(json_value),pointer :: p,pitem,pval
logical::is_found
integer::i,n_children
CHARACTER(KIND=JSON_CK, LEN=:), ALLOCATABLE :: val

call json%get(parent,'Hoisting',p)
call json%get(p,'DriveType',pval)
call json%get(pval,data%Configuration%Hoisting%DriveType)
call json%get(p,'TravelingBlockWeight',pval)
call json%get(pval,data%Configuration%Hoisting%TravelingBlockWeight)
call json%get(p,'TopDriveWeight',pval)
call json%get(pval,data%Configuration%Hoisting%TopDriveWeight)
call json%get(p,'KellyWeight',pval)
call json%get(pval,data%Configuration%Hoisting%KellyWeight)
call json%get(p,'NumberOfLine',pval)
call json%get(pval,data%Configuration%Hoisting%NumberOfLine)
call json%get(p,'DrillingLineBreakingLoad',pval)
call json%get(pval,data%Configuration%Hoisting%DrillingLineBreakingLoad)

!@@@
data%Configuration%Hoisting%NumberOfLine = 10
end subroutine

subroutine HoistingToJson(parent)
type(json_value),pointer :: parent
type(json_core) :: json
type(json_value),pointer :: p

! 1. create new node
call json%create_object(p,'Hoisting')
! 2. add member of data type to new node
! call StringConfigurationToJson(p)
! call FormationToJson(p)
call json%add(p,"DrillingLineBreakingLoad",data%Configuration%Hoisting%DrillingLineBreakingLoad)
call json%add(p,"DriveType",data%Configuration%Hoisting%DriveType)
call json%add(p,"KellyWeight",data%Configuration%Hoisting%KellyWeight)
call json%add(p,"NumberOfLine",data%Configuration%Hoisting%NumberOfLine)
call json%add(p,"TopDriveWeight",data%Configuration%Hoisting%TopDriveWeight)
call json%add(p,"TravelingBlockWeight",data%Configuration%Hoisting%TravelingBlockWeight)
! 3. add new node to parent
call json%add(parent,p)
end subroutine

end module CHoisting

+ 1
- 1
CSharp/Equipments/ControlPanels/CChokeControlPanel.i90 Voir le fichier

@@ -1,4 +1,4 @@
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/Equipments/ControlPanels/CChokeControlPanel.f90"
# 1 "/home/admin/SimulationCore2/CSharp/Equipments/ControlPanels/CChokeControlPanel.f90"
module CChokeControlPanel
use CChokeControlPanelVariables
use SimulationVariables


+ 8
- 162
CSharp/Equipments/ControlPanels/CDataDisplayConsole.f90 Voir le fichier

@@ -14,26 +14,6 @@ module CDataDisplayConsole
call json%get(parent,'DataDisplay',p)
! 2. get member of data type from node
! call json%get(p,'TripAlarmLow',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TripAlarmLow)
! call json%get(p,'TripAlarmHigh',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TripAlarmHigh)
! call json%get(p,'RetFlowAlarmLow',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%RetFlowAlarmLow)
! call json%get(p,'RetFlowAlarmHigh',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%RetFlowAlarmHigh)
! call json%get(p,'PitAlarmLow',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PitAlarmLow)
! call json%get(p,'PitAlarmHigh',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PitAlarmHigh)
! call json%get(p,'PortWeightOnBit',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PortWeightOnBit)
! call json%get(p,'PortHookLoad',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PortHookLoad)
! call json%get(p,'PortCasingPressure',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PortCasingPressure)
! call json%get(p,'PortPumpPressure',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PortPumpPressure)
call json%get(p,'TripTankSetAlarmLow',pval)
call json%get(pval,data%Equipments%DataDisplayConsole%TripTankSetAlarmLow)
call json%get(p,'TripTankSetAlarmHigh',pval)
@@ -97,85 +77,6 @@ module CDataDisplayConsole
call json%get(p,'ResetWob',pval)
call json%get(pval,data%Equipments%DataDisplayConsole%ResetWob)
call json%get(p,'Clutch',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%Clutch)
! call json%get(p,'WOBPointer',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%WOBPointer)
! call json%get(p,'HookLoadPointer',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%HookLoadPointer)
! call json%get(p,'TripTankGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TripTankGauge)
! call json%get(p,'TripTankAlarmLED',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TripTankAlarmLED)
! call json%get(p,'TripTankPumpLED',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TripTankPumpLED)
! call json%get(p,'StandPipePressureGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%StandPipePressureGauge)
! call json%get(p,'CasingPressureGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%CasingPressureGauge)
! call json%get(p,'MP1SPMGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MP1SPMGauge)
! call json%get(p,'MP2SPMGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MP2SPMGauge)
! call json%get(p,'ReturnLineTempGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%ReturnLineTempGauge)
! call json%get(p,'RotaryTorqueGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%RotaryTorqueGauge)
! call json%get(p,'RotaryRPMGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%RotaryRPMGauge)
! call json%get(p,'AcidGasDetectionLED',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%AcidGasDetectionLED)
! call json%get(p,'TotalStrokeCounter',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TotalStrokeCounter)
! call json%get(p,'PitGainLossGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PitGainLossGauge)
! call json%get(p,'MudTanksVolumeGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MudTanksVolumeGauge)
! call json%get(p,'MVTAlarmLED',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MVTAlarmLED)
! call json%get(p,'ReturnMudFlowGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%ReturnMudFlowGauge)
! call json%get(p,'FillStrokeCounter',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%FillStrokeCounter)
! call json%get(p,'MFFITotalStrokeCounter',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MFFITotalStrokeCounter)
! call json%get(p,'MFFIAlarmLED',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MFFIAlarmLED)
! call json%get(p,'MFFIPumpLED',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MFFIPumpLED)
! call json%get(p,'TotalWellDepth',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TotalWellDepth)
! call json%get(p,'BitDepth',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%BitDepth)
! call json%get(p,'HookLoad',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%HookLoad)
! call json%get(p,'StandPipePressure',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%StandPipePressure)
! call json%get(p,'CasingPressure',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%CasingPressure)
! call json%get(p,'MP1SPM',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MP1SPM)
! call json%get(p,'MP2SPM',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MP2SPM)
! call json%get(p,'RTTorque',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%RTTorque)
! call json%get(p,'RTRPM',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%RTRPM)
! call json%get(p,'WOP',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%WOP)
! call json%get(p,'ROP',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%ROP)
! call json%get(p,'MudWeightIn',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MudWeightIn)
! call json%get(p,'MudWeightOut',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MudWeightOut)
! call json%get(p,'Buzzer1',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%Buzzer1)
! call json%get(p,'Buzzer2',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%Buzzer2)
! call json%get(p,'Buzzer3',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%Buzzer3)
! call json%get(p,'Buzzer4',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%Buzzer4)
end subroutine

subroutine DataDisplayConsoleToJson(parent)
@@ -186,49 +87,6 @@ module CDataDisplayConsole

! 1. create new node
call json%create_object(p,'DataDisplay')
! call json%add(p,"TripAlarmLow",data%Equipments%DataDisplayConsole%TripAlarmLow)
! call json%add(p,"TripAlarmHigh",data%Equipments%DataDisplayConsole%TripAlarmHigh)
! call json%add(p,"RetFlowAlarmLow",data%Equipments%DataDisplayConsole%RetFlowAlarmLow)
! call json%add(p,"RetFlowAlarmHigh",data%Equipments%DataDisplayConsole%RetFlowAlarmHigh)
! call json%add(p,"PitAlarmLow",data%Equipments%DataDisplayConsole%PitAlarmLow)
! call json%add(p,"PitAlarmHigh",data%Equipments%DataDisplayConsole%PitAlarmHigh)
! call json%add(p,"PortWeightOnBit",data%Equipments%DataDisplayConsole%PortWeightOnBit)
! call json%add(p,"PortHookLoad",data%Equipments%DataDisplayConsole%PortHookLoad)
! call json%add(p,"PortCasingPressure",data%Equipments%DataDisplayConsole%PortCasingPressure)
! call json%add(p,"PortPumpPressure",data%Equipments%DataDisplayConsole%PortPumpPressure)

! call json%add(p,"TripTankSetAlarmLow",data%Equipments%DataDisplayConsole%TripTankSetAlarmLow)
! call json%add(p,"TripTankSetAlarmHigh",data%Equipments%DataDisplayConsole%TripTankSetAlarmHigh)
! call json%add(p,"TripTankSetAlarmSwitch",data%Equipments%DataDisplayConsole%TripTankSetAlarmSwitch)
! call json%add(p,"TripTankPowerSwitch",data%Equipments%DataDisplayConsole%TripTankPowerSwitch)
! call json%add(p,"TripTankPumpSwitch",data%Equipments%DataDisplayConsole%TripTankPumpSwitch)
! call json%add(p,"TripTankHornSwitch",data%Equipments%DataDisplayConsole%TripTankHornSwitch)
! call json%add(p,"AcidGasDetectionHornSwitch",data%Equipments%DataDisplayConsole%AcidGasDetectionHornSwitch)
! call json%add(p,"TotalStrokeCounterResetSwitch",data%Equipments%DataDisplayConsole%TotalStrokeCounterResetSwitch)
! call json%add(p,"DrillingTrippingSelectorSwitch",data%Equipments%DataDisplayConsole%DrillingTrippingSelectorSwitch)
! call json%add(p,"MVTSetAlarmLowKnob",data%Equipments%DataDisplayConsole%MVTSetAlarmLowKnob)
! call json%add(p,"MVTSetAlarmHighKnob",data%Equipments%DataDisplayConsole%MVTSetAlarmHighKnob)
! call json%add(p,"MVTSetAlarmSwitch",data%Equipments%DataDisplayConsole%MVTSetAlarmSwitch)
! call json%add(p,"MudTank1Switch",data%Equipments%DataDisplayConsole%MudTank1Switch)
! call json%add(p,"MudTank2Switch",data%Equipments%DataDisplayConsole%MudTank2Switch)
! call json%add(p,"MudTank3Switch",data%Equipments%DataDisplayConsole%MudTank3Switch)
! call json%add(p,"MudTank4Switch",data%Equipments%DataDisplayConsole%MudTank4Switch)
! call json%add(p,"MVTFineKnob",data%Equipments%DataDisplayConsole%MVTFineKnob)
! call json%add(p,"MVTCoarseKnob",data%Equipments%DataDisplayConsole%MVTCoarseKnob)
! call json%add(p,"MVTHornSwitch",data%Equipments%DataDisplayConsole%MVTHornSwitch)
! call json%add(p,"MVTDeviationTripSelectionSwitch",data%Equipments%DataDisplayConsole%MVTDeviationTripSelectionSwitch)
! call json%add(p,"MVTPowerSwitch",data%Equipments%DataDisplayConsole%MVTPowerSwitch)
! call json%add(p,"MFFIResetTotalStrokes",data%Equipments%DataDisplayConsole%MFFIResetTotalStrokes)
! call json%add(p,"MFFIResetFillCounter",data%Equipments%DataDisplayConsole%MFFIResetFillCounter)
! call json%add(p,"MFFIPumpSelectorSwitch",data%Equipments%DataDisplayConsole%MFFIPumpSelectorSwitch)
! call json%add(p,"MFFIFillSPMSelectorSwitch",data%Equipments%DataDisplayConsole%MFFIFillSPMSelectorSwitch)
! call json%add(p,"MFFISetAlarmLowKnob",data%Equipments%DataDisplayConsole%MFFISetAlarmLowKnob)
! call json%add(p,"MFFISetAlarmHighKnob",data%Equipments%DataDisplayConsole%MFFISetAlarmHighKnob)
! call json%add(p,"MFFISetAlarmSwitch",data%Equipments%DataDisplayConsole%MFFISetAlarmSwitch)
! call json%add(p,"MFFIPowerSwitch",data%Equipments%DataDisplayConsole%MFFIPowerSwitch)
! call json%add(p,"MFFIHornSwitch",data%Equipments%DataDisplayConsole%MFFIHornSwitch)
! call json%add(p,"ResetWob",data%Equipments%DataDisplayConsole%ResetWob)
! call json%add(p,"Clutch",data%Equipments%DataDisplayConsole%Clutch)

call json%add(p,"WOBPointer",data%Equipments%DataDisplayConsole%WOBPointer)
call json%add(p,"HookLoadPointer",data%Equipments%DataDisplayConsole%HookLoadPointer)
@@ -253,7 +111,6 @@ module CDataDisplayConsole
call json%add(p,"MFFIAlarmLED",data%Equipments%DataDisplayConsole%MFFIAlarmLED)
call json%add(p,"MFFIPumpLED",data%Equipments%DataDisplayConsole%MFFIPumpLED)
call json%add(p,"TotalWellDepth",data%Equipments%DataDisplayConsole%TotalWellDepth)
! call json%add(p,"TotalWellDepth",1000)
call json%add(p,"BitDepth",data%Equipments%DataDisplayConsole%BitDepth)
call json%add(p,"HookLoad",data%Equipments%DataDisplayConsole%HookLoad)
call json%add(p,"StandPipePressure",data%Equipments%DataDisplayConsole%StandPipePressure)
@@ -277,8 +134,6 @@ module CDataDisplayConsole


subroutine Set_TotalDepth(v)
use SimulationVariables !@!!, only: data%Equipments%DrillingWatch%Depth
! use CSimulationVariables, only: SetDistanceDrilled
implicit none
real(8), intent(in) :: v
! print *,"total depth = ",v
@@ -288,7 +143,6 @@ module CDataDisplayConsole
end subroutine
subroutine Set_BitPosition(v)
use SimulationVariables !@!!, only: data%Equipments%DrillingWatch%BitPosition
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%BitDepth = v
@@ -296,7 +150,6 @@ module CDataDisplayConsole
end subroutine
subroutine Set_RotaryTorque(v)
use SimulationVariables !@!!, only: data%Equipments%DrillingWatch%Torque
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%RotaryTorqueGauge = v
@@ -306,7 +159,7 @@ module CDataDisplayConsole
subroutine Set_MudWeightIn(v)
use SimulationVariables !@!, only: MudWeightInDw => data%Equipments%DataDisplayConsole%MudWeightIn
use SimulationVariables
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%MudWeightIn = v
@@ -354,7 +207,6 @@ module CDataDisplayConsole
end subroutine
subroutine Set_ROP(v)
use SimulationVariables !@!, only: ROPDw => data%Equipments%DataDisplayConsole%ROP
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%ROP = v
@@ -362,9 +214,7 @@ module CDataDisplayConsole
end subroutine
subroutine Set_CasingPressure(v)
use SimulationVariables !@!, only: CasingPressureDw => CasingPressure
use CChokeControlPanelVariables
use SimulationVariables!, only: CasingPressureChoke => CasingPressure
! use CChokeControlPanelVariables
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%CasingPressureGauge = v
@@ -374,9 +224,6 @@ module CDataDisplayConsole
end subroutine
subroutine Set_StandPipePressure(v)
use SimulationVariables !@!, only: data%Equipments%DrillingWatch%PumpPressure
use CChokeControlPanelVariables
use SimulationVariables!, only: StandPipePressureChoke => data%Equipments%DataDisplayConsole%StandPipePressure
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%StandPipePressureGauge = v
@@ -390,7 +237,6 @@ module CDataDisplayConsole
subroutine Set_RotaryRPMGauge(v)
use SimulationVariables !@!, only: data%Equipments%DrillingWatch%RPM
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%RotaryRPMGauge = v
@@ -408,9 +254,9 @@ module CDataDisplayConsole
data%Equipments%DataDisplayConsole%MP1SPMGauge = v
data%Equipments%DataDisplayConsole%MP1SPM = v
!@data%State%unitySignals%(PumpsSpmChanges)) call PumpsSpmChanges(data%Equipments%DataDisplayConsole%MP1SPMGauge, data%Equipments%DataDisplayConsole%MP2SPMGauge)
#ifdef deb
print*, 'MP1SPMGauge=', data%Equipments%DataDisplayConsole%MP1SPMGauge
#endif
#ifdef deb
print*, 'MP1SPMGauge=', data%Equipments%DataDisplayConsole%MP1SPMGauge
#endif
end subroutine
subroutine Set_MP2SPMGauge(v)
@@ -419,8 +265,8 @@ module CDataDisplayConsole
data%Equipments%DataDisplayConsole%MP2SPMGauge = v
data%Equipments%DataDisplayConsole%MP2SPM = v
!@data%State%unitySignals%(PumpsSpmChanges)) call PumpsSpmChanges(data%Equipments%DataDisplayConsole%MP1SPMGauge, data%Equipments%DataDisplayConsole%MP2SPMGauge)
#ifdef deb
print*, 'MP2SPMGauge=', data%Equipments%DataDisplayConsole%MP2SPMGauge
#endif
#ifdef deb
print*, 'MP2SPMGauge=', data%Equipments%DataDisplayConsole%MP2SPMGauge
#endif
end subroutine
end module CDataDisplayConsole

+ 8
- 160
CSharp/Equipments/ControlPanels/CDataDisplayConsole.i90 Voir le fichier

@@ -15,26 +15,6 @@ module CDataDisplayConsole
call json%get(parent,'DataDisplay',p)
! 2. get member of data type from node
! call json%get(p,'TripAlarmLow',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TripAlarmLow)
! call json%get(p,'TripAlarmHigh',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TripAlarmHigh)
! call json%get(p,'RetFlowAlarmLow',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%RetFlowAlarmLow)
! call json%get(p,'RetFlowAlarmHigh',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%RetFlowAlarmHigh)
! call json%get(p,'PitAlarmLow',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PitAlarmLow)
! call json%get(p,'PitAlarmHigh',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PitAlarmHigh)
! call json%get(p,'PortWeightOnBit',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PortWeightOnBit)
! call json%get(p,'PortHookLoad',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PortHookLoad)
! call json%get(p,'PortCasingPressure',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PortCasingPressure)
! call json%get(p,'PortPumpPressure',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PortPumpPressure)
call json%get(p,'TripTankSetAlarmLow',pval)
call json%get(pval,data%Equipments%DataDisplayConsole%TripTankSetAlarmLow)
call json%get(p,'TripTankSetAlarmHigh',pval)
@@ -98,85 +78,6 @@ module CDataDisplayConsole
call json%get(p,'ResetWob',pval)
call json%get(pval,data%Equipments%DataDisplayConsole%ResetWob)
call json%get(p,'Clutch',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%Clutch)
! call json%get(p,'WOBPointer',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%WOBPointer)
! call json%get(p,'HookLoadPointer',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%HookLoadPointer)
! call json%get(p,'TripTankGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TripTankGauge)
! call json%get(p,'TripTankAlarmLED',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TripTankAlarmLED)
! call json%get(p,'TripTankPumpLED',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TripTankPumpLED)
! call json%get(p,'StandPipePressureGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%StandPipePressureGauge)
! call json%get(p,'CasingPressureGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%CasingPressureGauge)
! call json%get(p,'MP1SPMGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MP1SPMGauge)
! call json%get(p,'MP2SPMGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MP2SPMGauge)
! call json%get(p,'ReturnLineTempGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%ReturnLineTempGauge)
! call json%get(p,'RotaryTorqueGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%RotaryTorqueGauge)
! call json%get(p,'RotaryRPMGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%RotaryRPMGauge)
! call json%get(p,'AcidGasDetectionLED',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%AcidGasDetectionLED)
! call json%get(p,'TotalStrokeCounter',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TotalStrokeCounter)
! call json%get(p,'PitGainLossGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%PitGainLossGauge)
! call json%get(p,'MudTanksVolumeGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MudTanksVolumeGauge)
! call json%get(p,'MVTAlarmLED',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MVTAlarmLED)
! call json%get(p,'ReturnMudFlowGauge',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%ReturnMudFlowGauge)
! call json%get(p,'FillStrokeCounter',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%FillStrokeCounter)
! call json%get(p,'MFFITotalStrokeCounter',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MFFITotalStrokeCounter)
! call json%get(p,'MFFIAlarmLED',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MFFIAlarmLED)
! call json%get(p,'MFFIPumpLED',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MFFIPumpLED)
! call json%get(p,'TotalWellDepth',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%TotalWellDepth)
! call json%get(p,'BitDepth',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%BitDepth)
! call json%get(p,'HookLoad',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%HookLoad)
! call json%get(p,'StandPipePressure',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%StandPipePressure)
! call json%get(p,'CasingPressure',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%CasingPressure)
! call json%get(p,'MP1SPM',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MP1SPM)
! call json%get(p,'MP2SPM',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MP2SPM)
! call json%get(p,'RTTorque',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%RTTorque)
! call json%get(p,'RTRPM',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%RTRPM)
! call json%get(p,'WOP',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%WOP)
! call json%get(p,'ROP',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%ROP)
! call json%get(p,'MudWeightIn',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MudWeightIn)
! call json%get(p,'MudWeightOut',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%MudWeightOut)
! call json%get(p,'Buzzer1',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%Buzzer1)
! call json%get(p,'Buzzer2',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%Buzzer2)
! call json%get(p,'Buzzer3',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%Buzzer3)
! call json%get(p,'Buzzer4',pval)
! call json%get(pval,data%Equipments%DataDisplayConsole%Buzzer4)
end subroutine

subroutine DataDisplayConsoleToJson(parent)
@@ -187,49 +88,6 @@ module CDataDisplayConsole

! 1. create new node
call json%create_object(p,'DataDisplay')
! call json%add(p,"TripAlarmLow",data%Equipments%DataDisplayConsole%TripAlarmLow)
! call json%add(p,"TripAlarmHigh",data%Equipments%DataDisplayConsole%TripAlarmHigh)
! call json%add(p,"RetFlowAlarmLow",data%Equipments%DataDisplayConsole%RetFlowAlarmLow)
! call json%add(p,"RetFlowAlarmHigh",data%Equipments%DataDisplayConsole%RetFlowAlarmHigh)
! call json%add(p,"PitAlarmLow",data%Equipments%DataDisplayConsole%PitAlarmLow)
! call json%add(p,"PitAlarmHigh",data%Equipments%DataDisplayConsole%PitAlarmHigh)
! call json%add(p,"PortWeightOnBit",data%Equipments%DataDisplayConsole%PortWeightOnBit)
! call json%add(p,"PortHookLoad",data%Equipments%DataDisplayConsole%PortHookLoad)
! call json%add(p,"PortCasingPressure",data%Equipments%DataDisplayConsole%PortCasingPressure)
! call json%add(p,"PortPumpPressure",data%Equipments%DataDisplayConsole%PortPumpPressure)

! call json%add(p,"TripTankSetAlarmLow",data%Equipments%DataDisplayConsole%TripTankSetAlarmLow)
! call json%add(p,"TripTankSetAlarmHigh",data%Equipments%DataDisplayConsole%TripTankSetAlarmHigh)
! call json%add(p,"TripTankSetAlarmSwitch",data%Equipments%DataDisplayConsole%TripTankSetAlarmSwitch)
! call json%add(p,"TripTankPowerSwitch",data%Equipments%DataDisplayConsole%TripTankPowerSwitch)
! call json%add(p,"TripTankPumpSwitch",data%Equipments%DataDisplayConsole%TripTankPumpSwitch)
! call json%add(p,"TripTankHornSwitch",data%Equipments%DataDisplayConsole%TripTankHornSwitch)
! call json%add(p,"AcidGasDetectionHornSwitch",data%Equipments%DataDisplayConsole%AcidGasDetectionHornSwitch)
! call json%add(p,"TotalStrokeCounterResetSwitch",data%Equipments%DataDisplayConsole%TotalStrokeCounterResetSwitch)
! call json%add(p,"DrillingTrippingSelectorSwitch",data%Equipments%DataDisplayConsole%DrillingTrippingSelectorSwitch)
! call json%add(p,"MVTSetAlarmLowKnob",data%Equipments%DataDisplayConsole%MVTSetAlarmLowKnob)
! call json%add(p,"MVTSetAlarmHighKnob",data%Equipments%DataDisplayConsole%MVTSetAlarmHighKnob)
! call json%add(p,"MVTSetAlarmSwitch",data%Equipments%DataDisplayConsole%MVTSetAlarmSwitch)
! call json%add(p,"MudTank1Switch",data%Equipments%DataDisplayConsole%MudTank1Switch)
! call json%add(p,"MudTank2Switch",data%Equipments%DataDisplayConsole%MudTank2Switch)
! call json%add(p,"MudTank3Switch",data%Equipments%DataDisplayConsole%MudTank3Switch)
! call json%add(p,"MudTank4Switch",data%Equipments%DataDisplayConsole%MudTank4Switch)
! call json%add(p,"MVTFineKnob",data%Equipments%DataDisplayConsole%MVTFineKnob)
! call json%add(p,"MVTCoarseKnob",data%Equipments%DataDisplayConsole%MVTCoarseKnob)
! call json%add(p,"MVTHornSwitch",data%Equipments%DataDisplayConsole%MVTHornSwitch)
! call json%add(p,"MVTDeviationTripSelectionSwitch",data%Equipments%DataDisplayConsole%MVTDeviationTripSelectionSwitch)
! call json%add(p,"MVTPowerSwitch",data%Equipments%DataDisplayConsole%MVTPowerSwitch)
! call json%add(p,"MFFIResetTotalStrokes",data%Equipments%DataDisplayConsole%MFFIResetTotalStrokes)
! call json%add(p,"MFFIResetFillCounter",data%Equipments%DataDisplayConsole%MFFIResetFillCounter)
! call json%add(p,"MFFIPumpSelectorSwitch",data%Equipments%DataDisplayConsole%MFFIPumpSelectorSwitch)
! call json%add(p,"MFFIFillSPMSelectorSwitch",data%Equipments%DataDisplayConsole%MFFIFillSPMSelectorSwitch)
! call json%add(p,"MFFISetAlarmLowKnob",data%Equipments%DataDisplayConsole%MFFISetAlarmLowKnob)
! call json%add(p,"MFFISetAlarmHighKnob",data%Equipments%DataDisplayConsole%MFFISetAlarmHighKnob)
! call json%add(p,"MFFISetAlarmSwitch",data%Equipments%DataDisplayConsole%MFFISetAlarmSwitch)
! call json%add(p,"MFFIPowerSwitch",data%Equipments%DataDisplayConsole%MFFIPowerSwitch)
! call json%add(p,"MFFIHornSwitch",data%Equipments%DataDisplayConsole%MFFIHornSwitch)
! call json%add(p,"ResetWob",data%Equipments%DataDisplayConsole%ResetWob)
! call json%add(p,"Clutch",data%Equipments%DataDisplayConsole%Clutch)

call json%add(p,"WOBPointer",data%Equipments%DataDisplayConsole%WOBPointer)
call json%add(p,"HookLoadPointer",data%Equipments%DataDisplayConsole%HookLoadPointer)
@@ -254,7 +112,6 @@ module CDataDisplayConsole
call json%add(p,"MFFIAlarmLED",data%Equipments%DataDisplayConsole%MFFIAlarmLED)
call json%add(p,"MFFIPumpLED",data%Equipments%DataDisplayConsole%MFFIPumpLED)
call json%add(p,"TotalWellDepth",data%Equipments%DataDisplayConsole%TotalWellDepth)
! call json%add(p,"TotalWellDepth",1000)
call json%add(p,"BitDepth",data%Equipments%DataDisplayConsole%BitDepth)
call json%add(p,"HookLoad",data%Equipments%DataDisplayConsole%HookLoad)
call json%add(p,"StandPipePressure",data%Equipments%DataDisplayConsole%StandPipePressure)
@@ -278,8 +135,6 @@ module CDataDisplayConsole


subroutine Set_TotalDepth(v)
use SimulationVariables !@!!, only: data%Equipments%DrillingWatch%Depth
! use CSimulationVariables, only: SetDistanceDrilled
implicit none
real(8), intent(in) :: v
! print *,"total depth = ",v
@@ -289,7 +144,6 @@ module CDataDisplayConsole
end subroutine
subroutine Set_BitPosition(v)
use SimulationVariables !@!!, only: data%Equipments%DrillingWatch%BitPosition
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%BitDepth = v
@@ -297,7 +151,6 @@ module CDataDisplayConsole
end subroutine
subroutine Set_RotaryTorque(v)
use SimulationVariables !@!!, only: data%Equipments%DrillingWatch%Torque
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%RotaryTorqueGauge = v
@@ -307,7 +160,7 @@ module CDataDisplayConsole
subroutine Set_MudWeightIn(v)
use SimulationVariables !@!, only: MudWeightInDw => data%Equipments%DataDisplayConsole%MudWeightIn
use SimulationVariables
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%MudWeightIn = v
@@ -355,7 +208,6 @@ module CDataDisplayConsole
end subroutine
subroutine Set_ROP(v)
use SimulationVariables !@!, only: ROPDw => data%Equipments%DataDisplayConsole%ROP
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%ROP = v
@@ -363,9 +215,7 @@ module CDataDisplayConsole
end subroutine
subroutine Set_CasingPressure(v)
use SimulationVariables !@!, only: CasingPressureDw => CasingPressure
use CChokeControlPanelVariables
use SimulationVariables!, only: CasingPressureChoke => CasingPressure
! use CChokeControlPanelVariables
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%CasingPressureGauge = v
@@ -375,9 +225,6 @@ module CDataDisplayConsole
end subroutine
subroutine Set_StandPipePressure(v)
use SimulationVariables !@!, only: data%Equipments%DrillingWatch%PumpPressure
use CChokeControlPanelVariables
use SimulationVariables!, only: StandPipePressureChoke => data%Equipments%DataDisplayConsole%StandPipePressure
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%StandPipePressureGauge = v
@@ -391,7 +238,6 @@ module CDataDisplayConsole
subroutine Set_RotaryRPMGauge(v)
use SimulationVariables !@!, only: data%Equipments%DrillingWatch%RPM
implicit none
real(8), intent(in) :: v
data%Equipments%DataDisplayConsole%RotaryRPMGauge = v
@@ -409,8 +255,9 @@ module CDataDisplayConsole
data%Equipments%DataDisplayConsole%MP1SPMGauge = v
data%Equipments%DataDisplayConsole%MP1SPM = v
!@data%State%unitySignals%(PumpsSpmChanges)) call PumpsSpmChanges(data%Equipments%DataDisplayConsole%MP1SPMGauge, data%Equipments%DataDisplayConsole%MP2SPMGauge)
# 413

#ifdef deb
print*, 'MP1SPMGauge=', data%Equipments%DataDisplayConsole%MP1SPMGauge
#endif
end subroutine
subroutine Set_MP2SPMGauge(v)
@@ -419,7 +266,8 @@ module CDataDisplayConsole
data%Equipments%DataDisplayConsole%MP2SPMGauge = v
data%Equipments%DataDisplayConsole%MP2SPM = v
!@data%State%unitySignals%(PumpsSpmChanges)) call PumpsSpmChanges(data%Equipments%DataDisplayConsole%MP1SPMGauge, data%Equipments%DataDisplayConsole%MP2SPMGauge)
# 424

#ifdef deb
print*, 'MP2SPMGauge=', data%Equipments%DataDisplayConsole%MP2SPMGauge
#endif
end subroutine
end module CDataDisplayConsole

+ 12
- 4
CSharp/Equipments/ControlPanels/CDrillingConsole.f90 Voir le fichier

@@ -16,6 +16,7 @@ module CDrillingConsole
type(json_value),pointer :: p,pval
type(json_file)::jsonfile
logical::found
integer :: i

call jsonfile%get('Equipments.Drilling.AssignmentSwitch',data%Equipments%DrillingConsole%AssignmentSwitch,found)
if ( .not. found ) call logg(4,"Not found: AssignmentSwitch")
@@ -44,15 +45,20 @@ module CDrillingConsole
call jsonfile%get('Equipments.Drilling.MP2ThrottleUpdate',data%Equipments%DrillingConsole%MP2ThrottleUpdate,found)
if ( .not. found ) call logg(4,"Not found: MP2ThrottleUpdate")
call jsonfile%get('Equipments.Drilling.MP2Throttle',data%Equipments%DrillingConsole%MP2Throttle,found)
if ( .not. found ) call logg(4,"Not found: MP2Throttle")
! call jsonfile%get('Equipments.Drilling.DWSwitch',data%Equipments%DrillingConsole%DWSwitch,found)
if ( .not. found ) then
call logg(4,"Not found: MP2Throttle")
endif
! call jsonfile%get('Equipments.Drilling.DWSwitch',data%Equipments%DrillingConsole%DWSwitch,found)
! if ( .not. found ) call logg(4,"Not found: DWSwitch")
call jsonfile%get('Equipments.Drilling.DWThrottle',data%Equipments%DrillingConsole%DWThrottle,found)
if ( .not. found ) call logg(4,"Not found: DWThrottle")
call jsonfile%get('Equipments.Drilling.RTSwitch',data%Equipments%DrillingConsole%RTSwitch,found)
if ( .not. found ) call logg(4,"Not found: RTSwitch")
call jsonfile%get('Equipments.Drilling.RTThrottle',data%Equipments%DrillingConsole%RTThrottle,found)
if ( .not. found ) call logg(4,"Not found: RTThrottle")
call jsonfile%get('Equipments.Drilling.RTThrottle',i,found)
data%Equipments%DrillingConsole%RTThrottle = real(i)
if ( .not. found ) then
call logg(4,"Not found: RTThrottle")
endif
call jsonfile%get('Equipments.Drilling.DWBreak',data%Equipments%DrillingConsole%DWBreak,found)
if ( .not. found ) call logg(4,"Not found: DWBreak")
call jsonfile%get('Equipments.Drilling.PreviousDWBreak',data%Equipments%DrillingConsole%PreviousDWBreak,found)
@@ -124,6 +130,8 @@ module CDrillingConsole
call jsonfile%get('Equipments.Drilling.ParkingBrakeBtn',data%Equipments%DrillingConsole%ParkingBrakeBtn,found)
if ( .not. found ) call logg(4,"Not found: ParkingBrakeBtn")

! call jsonfile%destroy()

data%Equipments%DrillingConsole%DWSwitch = -1
data%Equipments%DrillingConsole%AssignmentSwitch = 1
data%Equipments%DrillingConsole%MP1CPSwitch = -1


+ 11
- 3
CSharp/Equipments/ControlPanels/CDrillingConsole.i90 Voir le fichier

@@ -17,6 +17,7 @@ module CDrillingConsole
type(json_value),pointer :: p,pval
type(json_file)::jsonfile
logical::found
integer :: i

call jsonfile%get('Equipments.Drilling.AssignmentSwitch',data%Equipments%DrillingConsole%AssignmentSwitch,found)
if ( .not. found ) call logg(4,"Not found: AssignmentSwitch")
@@ -45,15 +46,20 @@ module CDrillingConsole
call jsonfile%get('Equipments.Drilling.MP2ThrottleUpdate',data%Equipments%DrillingConsole%MP2ThrottleUpdate,found)
if ( .not. found ) call logg(4,"Not found: MP2ThrottleUpdate")
call jsonfile%get('Equipments.Drilling.MP2Throttle',data%Equipments%DrillingConsole%MP2Throttle,found)
if ( .not. found ) call logg(4,"Not found: MP2Throttle")
if ( .not. found ) then
call logg(4,"Not found: MP2Throttle")
endif
! call jsonfile%get('Equipments.Drilling.DWSwitch',data%Equipments%DrillingConsole%DWSwitch,found)
! if ( .not. found ) call logg(4,"Not found: DWSwitch")
call jsonfile%get('Equipments.Drilling.DWThrottle',data%Equipments%DrillingConsole%DWThrottle,found)
if ( .not. found ) call logg(4,"Not found: DWThrottle")
call jsonfile%get('Equipments.Drilling.RTSwitch',data%Equipments%DrillingConsole%RTSwitch,found)
if ( .not. found ) call logg(4,"Not found: RTSwitch")
call jsonfile%get('Equipments.Drilling.RTThrottle',data%Equipments%DrillingConsole%RTThrottle,found)
if ( .not. found ) call logg(4,"Not found: RTThrottle")
call jsonfile%get('Equipments.Drilling.RTThrottle',i,found)
data%Equipments%DrillingConsole%RTThrottle = real(i)
if ( .not. found ) then
call logg(4,"Not found: RTThrottle")
endif
call jsonfile%get('Equipments.Drilling.DWBreak',data%Equipments%DrillingConsole%DWBreak,found)
if ( .not. found ) call logg(4,"Not found: DWBreak")
call jsonfile%get('Equipments.Drilling.PreviousDWBreak',data%Equipments%DrillingConsole%PreviousDWBreak,found)
@@ -125,6 +131,8 @@ module CDrillingConsole
call jsonfile%get('Equipments.Drilling.ParkingBrakeBtn',data%Equipments%DrillingConsole%ParkingBrakeBtn,found)
if ( .not. found ) call logg(4,"Not found: ParkingBrakeBtn")

! call jsonfile%destroy()

data%Equipments%DrillingConsole%DWSwitch = -1
data%Equipments%DrillingConsole%AssignmentSwitch = 1
data%Equipments%DrillingConsole%MP1CPSwitch = -1


+ 12
- 0
CSharp/Equipments/ControlPanels/CEquipmentsConstants.i90 Voir le fichier

@@ -0,0 +1,12 @@
# 1 "/home/admin/SimulationCore2/CSharp/Equipments/ControlPanels/CEquipmentsConstants.f90"
module CEquipmentsConstants
implicit none
public
! LED State Types
integer :: LedOff = 0
integer :: LedOn = 1
integer :: LedBlinking = 2
contains
end module CEquipmentsConstants

+ 1
- 1
CSharp/OperationScenarios/Notifications/CUnlatchLedNotification.i90 Voir le fichier

@@ -1,4 +1,4 @@
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/Notifications/CUnlatchLedNotification.f90"
# 1 "/home/admin/SimulationCore2/CSharp/OperationScenarios/Notifications/CUnlatchLedNotification.f90"
module CUnlatchLedNotification
use OperationScenariosModule
use UnityModule


+ 92
- 0
CSharp/OperationScenarios/Permissions/CIrIbopPermission.i90 Voir le fichier

@@ -0,0 +1,92 @@
# 1 "/home/admin/SimulationCore2/CSharp/OperationScenarios/Permissions/CIrIbopPermission.f90"
module CIrIbopPermission
use OperationScenariosModule
implicit none
contains
subroutine Evaluate_IrIbopPermission()
use TD_DrillStemComponents
use UnitySignalsModule !for CTdsConnectionModesEnum
use CStudentStationVariables!, only: data%State%StudentStation%FillupHeadInstallation
implicit none
if (data%Configuration%Hoisting%DriveType == TopDrive_DriveType) then
# 16



!TOPDRIVE-CODE=58
if (GetRotaryRpm() == 0.0d0 .and.&
Get_NearFloorConnection() >= 3 .and. Get_NearFloorConnection() <= 10 .and.&
Get_JointConnectionPossible() == .false. .and.&
Get_TdsConnectionModes() == TDS_CONNECTION_NOTHING .and.&
data%State%StudentStation%FillupHeadInstallation == .false.) then
call Set_IrIbopPermission(.true.)
return
end if


call Set_IrIbopPermission(.false.)
endif
if (data%Configuration%Hoisting%DriveType == Kelly_DriveType) then
# 46


!OPERATION-CODE=62
if (GetRotaryRpm() == 0.0d0 .and.&
Get_OperationCondition() == OPERATION_TRIP .and.&
!(Get_ElevatorConnection() == ELEVATOR_CONNECTION_NOTHING .or. Get_ElevatorConnection() == ELEVATOR_LATCH_STRING) .and.&
data%State%TD_String%TopJointHeight >= 3.0 .and. data%State%TD_String%TopJointHeight <= 10.0 .and.&
!Get_IbopHeight() >= 22.0 .and. Get_IbopHeight() <= 35.0 .and.&
Get_JointConnectionPossible() == .false. .and.&
Get_Swing() == SWING_WELL_END .and.&
Get_FillupHead() == FILLUP_HEAD_REMOVE) then
call Set_IrIbopPermission(.true.)
return
end if
!if (Get_OperationCondition() == OPERATION_DRILL .and.&
! Get_IbopHeight() >= 1 .and. Get_IbopHeight() <= 8 .and.&
! Get_NearFloorConnection() >= 1 .and. Get_NearFloorConnection() <= 8 .and.&
! Get_JointConnectionPossible() == .false. .and.&
! Get_KellyConnection() /= KELLY_CONNECTION_STRING .and.&
! Get_Swing() == SWING_WELL_END .and.&
! Get_Slips() == SLIPS_SET_END) then
! call Set_IrIbopPermission(.true.)
! return
!end if
call Set_IrIbopPermission(.false.)
endif
end subroutine
subroutine Subscribe_IrIbopPermission()
implicit none
end subroutine
end module CIrIbopPermission

+ 1
- 1
CSharp/OperationScenarios/UnitySignals/UnitySignals.i90 Voir le fichier

@@ -1,4 +1,4 @@
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/UnitySignals/UnitySignals.f90"
# 1 "/home/admin/SimulationCore2/CSharp/OperationScenarios/UnitySignals/UnitySignals.f90"
module UnitySignalsModule
use UnitySignalVariables
use SimulationVariables


+ 10
- 6
CSharp/OperationScenarios/UnitySignals/UnitySignalsVariables.f90 Voir le fichier

@@ -33,7 +33,8 @@ module UnitySignalVariables
enumerator TONG_BREAKOUT_END
enumerator TONG_MAKEUP_BEGIN
enumerator TONG_MAKEUP_END
end enum
enum, bind(c)
enumerator TDS_SWING_NEUTRAL
enumerator TDS_SWING_OFF_BEGIN
enumerator TDS_SWING_OFF_END
@@ -41,18 +42,21 @@ module UnitySignalVariables
enumerator TDS_SWING_DRILL_END
enumerator TDS_SWING_TILT_BEGIN
enumerator TDS_SWING_TILT_END
end enum
enum, bind(c)
enumerator TDS_SPINE_NEUTRAL
enumerator TDS_SPINE_CONNECT_BEGIN
enumerator TDS_SPINE_CONNECT_END
enumerator TDS_SPINE_DISCONNECT_BEGIN
enumerator TDS_SPINE_DISCONNECT_END
end enum
enum, bind(c)
enumerator BACKUP_CLAMP_OFF_END
enumerator BACKUP_CLAMP_OFF_BEGIN
enumerator BACKUP_CLAMP_FW_BEGIN
enumerator BACKUP_CLAMP_FW_END
end enum
enum, bind(c)
enumerator SWING_NEUTRAL
enumerator SWING_MOUSE_HOLE_BEGIN
enumerator SWING_MOUSE_HOLE_END
@@ -66,11 +70,11 @@ module UnitySignalVariables
enumerator TDS_TONG_BREAKOUT_BEGIN
enumerator TDS_TONG_MAKEUP_BEGIN
enumerator TDS_TONG_MAKEUP_END
end enum
enum, bind(c)
enumerator SAFETY_VALVE_NEUTRAL
enumerator SAFETY_VALVE_REMOVE
enumerator SAFETY_VALVE_INSTALL
end enum
enum, bind(c)
enumerator OPERATION_DRILL


+ 1
- 1
CSharp/OperationScenarios/UnitySignals/UnitySignalsVariables.i90 Voir le fichier

@@ -1,4 +1,4 @@
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/OperationScenarios/UnitySignals/UnitySignalsVariables.f90"
# 1 "/home/admin/SimulationCore2/CSharp/OperationScenarios/UnitySignals/UnitySignalsVariables.f90"
module UnitySignalVariables
! use CVoidEventHandlerCollection
! use CIntegerEventHandlerCollection


+ 158
- 0
Common/DynamicDoubleArray.i90 Voir le fichier

@@ -0,0 +1,158 @@
# 1 "/home/admin/SimulationCore2/Common/DynamicDoubleArray.f90"
module DynamicDoubleArray
implicit none
public
type, public :: DynamicDoubleArrayType
real(8), allocatable :: Array(:)
contains
procedure :: First => First
procedure :: Last => Last
procedure :: Length => Length
procedure :: Add => Add
procedure :: AddToFirst => AddToFirst
procedure :: AddTo => AddTo
procedure :: Remove => Remove
procedure :: Empty => Empty
end type DynamicDoubleArrayType
private::First,Last,Length
contains
real(8) function First(this)
implicit none
class(DynamicDoubleArrayType), intent(in) :: this
if(allocated(this%Array) .and. size(this%Array) > 0) then
First = this%Array(1)
return
end if
First = 0
end function
real(8) function Last(this)
implicit none
class(DynamicDoubleArrayType), intent(in) :: this
if(allocated(this%Array) .and. size(this%Array) > 0) then
Last = this%Array(size(this%Array))
return
end if
Last = 0
end function
integer function Length(this)
implicit none
class(DynamicDoubleArrayType), intent(in) :: this
if(allocated(this%Array)) then
Length = size(this%Array)
return
end if
Length = 0
end function
subroutine AddToFirst(this, value)
implicit none
class(DynamicDoubleArrayType), intent(inout) :: this
real(8), allocatable :: tempArr(:)
real(8), intent(in) :: value
integer :: i, isize
if(allocated(this%Array)) then
isize = size(this%Array)
allocate(tempArr(isize+1))
tempArr(1) = value
do i=2,isize+1
tempArr(i) = this%Array(i-1)
end do
deallocate(this%Array)
call move_alloc(tempArr, this%Array)
else
allocate(this%Array(1))
this%Array(1) = value
end if
end subroutine
subroutine AddTo(this, index, value)
implicit none
class(DynamicDoubleArrayType), intent(inout) :: this
real(8), allocatable :: tempArr(:)
integer, intent(in) :: index
real(8), intent(in) :: value
integer :: isize
if(index <= 0) return
if(index > size(this%Array)) then
call this%Add(value)
return
endif
if(allocated(this%Array)) then
isize = size(this%Array)
allocate(tempArr(isize+1))
tempArr(:index-1) = this%Array(:index-1)
tempArr(index) = value
tempArr(index+1:) = this%Array(index:)
deallocate(this%Array)
call move_alloc(tempArr, this%Array)
end if
end subroutine
subroutine Add(this, value)
implicit none
class(DynamicDoubleArrayType), intent(inout) :: this
real(8), allocatable :: tempArr(:)
real(8), intent(in) :: value
integer :: i, isize
if(allocated(this%Array)) then
isize = size(this%Array)
allocate(tempArr(isize+1))
do i=1,isize
tempArr(i) = this%Array(i)
end do
tempArr(isize+1) = value
deallocate(this%Array)
call move_alloc(tempArr, this%Array)
else
allocate(this%Array(1))
this%Array(1) = value
end if
end subroutine
subroutine Empty(this)
implicit none
class(DynamicDoubleArrayType), intent(inout) :: this
if(allocated(this%Array)) deallocate(this%Array)
end subroutine
subroutine Remove(this, index)
implicit none
class(DynamicDoubleArrayType), intent(inout) :: this
integer, intent(in) :: index
real(8), allocatable :: tempArr(:)
integer :: i
logical :: found
if(index <= 0 .or. index > size(this%Array)) return
if(.not.allocated(this%Array))return
allocate(tempArr(size(this%Array)-1))
found = .false.
do i=1, size(this%Array)
if(i==index) then
found = .true.
cycle
end if
if(found) then
tempArr(i-1) = this%Array(i)
else
tempArr(i) = this%Array(i)
endif
end do
deallocate(this%Array)
call move_alloc(tempArr, this%Array)
end subroutine
end module DynamicDoubleArray

+ 27
- 27
Common/json-fortran/json_file_module.i90 Voir le fichier

@@ -1,4 +1,4 @@
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90"
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90"
!*****************************************************************************************
!> author: Jacob Williams
! license: BSD
@@ -22,7 +22,7 @@

private

# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_macros.inc" 1
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_macros.inc" 1
! JSON-Fortran preprocessor macros.
!
! License
@@ -60,7 +60,7 @@


!*********************************************************
# 25 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
# 25 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90" 2

!*********************************************************
!> author: Jacob Williams
@@ -512,7 +512,7 @@
! all have a similar interface.

subroutine initialize_json_core_in_file(me,&
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
! The dummy argument list for the various `initialize` subroutines.
!
! See also: json_initialize_argument.inc
@@ -538,13 +538,13 @@ null_to_real_mode,&
non_normal_mode,&
use_quiet_nan, &
strict_integer_type_checking &
# 506 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
# 506 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
)

implicit none

class(json_file),intent(inout) :: me
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_initialize_arguments.inc" 1
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_initialize_arguments.inc" 1
! The argument list for the various `initialize` subroutines.
!
! See also: json_initialize_dummy_arguments.inc
@@ -659,10 +659,10 @@ logical(LK),intent(in),optional :: strict_integer_type_checking
!! value cannot be read.
!!
!! (default is true)
# 512 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
# 512 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90" 2

call me%core%initialize(&
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
! The dummy argument list for the various `initialize` subroutines.
!
! See also: json_initialize_argument.inc
@@ -688,7 +688,7 @@ null_to_real_mode,&
non_normal_mode,&
use_quiet_nan, &
strict_integer_type_checking &
# 515 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
# 515 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
)
end subroutine initialize_json_core_in_file
!*****************************************************************************************
@@ -745,7 +745,7 @@ strict_integer_type_checking &
! all have a similar interface.

function initialize_json_file(p,&
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
! The dummy argument list for the various `initialize` subroutines.
!
! See also: json_initialize_argument.inc
@@ -771,7 +771,7 @@ null_to_real_mode,&
non_normal_mode,&
use_quiet_nan, &
strict_integer_type_checking &
# 572 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
# 572 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
) result(file_object)

implicit none
@@ -780,7 +780,7 @@ strict_integer_type_checking &
type(json_value),pointer,optional :: p !! `json_value` object to cast
!! as a `json_file` object. This
!! will be nullified.
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_initialize_arguments.inc" 1
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_initialize_arguments.inc" 1
! The argument list for the various `initialize` subroutines.
!
! See also: json_initialize_dummy_arguments.inc
@@ -895,10 +895,10 @@ logical(LK),intent(in),optional :: strict_integer_type_checking
!! value cannot be read.
!!
!! (default is true)
# 581 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
# 581 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90" 2

call file_object%initialize(&
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
! The dummy argument list for the various `initialize` subroutines.
!
! See also: json_initialize_argument.inc
@@ -924,7 +924,7 @@ null_to_real_mode,&
non_normal_mode,&
use_quiet_nan, &
strict_integer_type_checking &
# 584 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
# 584 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
)

if (present(p)) then
@@ -981,7 +981,7 @@ strict_integer_type_checking &
! all have a similar interface.

function initialize_json_file_from_string(str,&
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
! The dummy argument list for the various `initialize` subroutines.
!
! See also: json_initialize_argument.inc
@@ -1007,14 +1007,14 @@ null_to_real_mode,&
non_normal_mode,&
use_quiet_nan, &
strict_integer_type_checking &
# 641 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
# 641 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
) result(file_object)

implicit none

type(json_file) :: file_object
character(kind=CK,len=*),intent(in) :: str !! string to load JSON data from
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_initialize_arguments.inc" 1
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_initialize_arguments.inc" 1
! The argument list for the various `initialize` subroutines.
!
! See also: json_initialize_dummy_arguments.inc
@@ -1129,10 +1129,10 @@ logical(LK),intent(in),optional :: strict_integer_type_checking
!! value cannot be read.
!!
!! (default is true)
# 648 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
# 648 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90" 2

call file_object%initialize(&
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
! The dummy argument list for the various `initialize` subroutines.
!
! See also: json_initialize_argument.inc
@@ -1158,7 +1158,7 @@ null_to_real_mode,&
non_normal_mode,&
use_quiet_nan, &
strict_integer_type_checking &
# 651 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
# 651 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
)
call file_object%deserialize(str)

@@ -1170,7 +1170,7 @@ strict_integer_type_checking &
! Alternate version of [[initialize_json_file_from_string]], where "str" is kind=CDK.

function wrap_initialize_json_file_from_string(str,&
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
! The dummy argument list for the various `initialize` subroutines.
!
! See also: json_initialize_argument.inc
@@ -1196,14 +1196,14 @@ null_to_real_mode,&
non_normal_mode,&
use_quiet_nan, &
strict_integer_type_checking &
# 663 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
# 663 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
) result(file_object)

implicit none

type(json_file) :: file_object
character(kind=CDK,len=*),intent(in) :: str !! string to load JSON data from
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_initialize_arguments.inc" 1
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_initialize_arguments.inc" 1
! The argument list for the various `initialize` subroutines.
!
! See also: json_initialize_dummy_arguments.inc
@@ -1318,11 +1318,11 @@ logical(LK),intent(in),optional :: strict_integer_type_checking
!! value cannot be read.
!!
!! (default is true)
# 670 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
# 670 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90" 2

file_object = initialize_json_file_from_string(&
to_unicode(str),&
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
# 1 "/home/admin/SimulationCore2/Common/json-fortran/json_initialize_dummy_arguments.inc" 1
! The dummy argument list for the various `initialize` subroutines.
!
! See also: json_initialize_argument.inc
@@ -1348,7 +1348,7 @@ null_to_real_mode,&
non_normal_mode,&
use_quiet_nan, &
strict_integer_type_checking &
# 674 "/mnt/c/Projects/VSIM/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
# 674 "/home/admin/SimulationCore2/Common/json-fortran/json_file_module.F90" 2
)

end function wrap_initialize_json_file_from_string


+ 0
- 5
Equipments/Drawworks/Drawworks_Direction.f90 Voir le fichier

@@ -9,11 +9,6 @@ subroutine Drawworks_Direction
IMPLICIT NONE
if (data%State%Drawworks%Switch==1) then !Up
data%State%Drawworks%motion = +1
data%State%Drawworks%w_old_drum = data%State%Drawworks%w_drum !(pi*(data%State%Drawworks%N_old/data%State%Drawworks%Conv_Ratio)/30.d0) ?


+ 148
- 0
Equipments/Drawworks/Drawworks_Direction.i90 Voir le fichier

@@ -0,0 +1,148 @@
# 1 "/home/admin/SimulationCore2/Equipments/Drawworks/Drawworks_Direction.f90"
subroutine Drawworks_Direction

use CDrillingConsoleVariables
use SimulationVariables
use SimulationVariables
use CDataDisplayConsole
use SimulationVariables
use SimulationVariables !@

IMPLICIT NONE
if (data%State%Drawworks%Switch==1) then !Up
data%State%Drawworks%motion = +1
data%State%Drawworks%w_old_drum = data%State%Drawworks%w_drum !(pi*(data%State%Drawworks%N_old/data%State%Drawworks%Conv_Ratio)/30.d0) ?
data%State%Drawworks%w_drum = (pi*(data%State%Drawworks%Speed/data%State%Drawworks%Conv_Ratio)/30.d0) ![rad/s]
data%State%Drawworks%Hook_Height = data%State%Drawworks%Hook_Height+(((data%State%Drawworks%Diameter/2.0)*(data%State%Drawworks%time_step*0.5d0*(data%State%Drawworks%w_drum+data%State%Drawworks%w_old_drum)))/data%State%Drawworks%NumberOfLine) ![m]
else if (data%State%Drawworks%Switch==-1) then !Down
data%State%Drawworks%motion = -1
data%State%Drawworks%w_old_drum = data%State%Drawworks%w_drum !(pi*(data%State%Drawworks%N_old/data%State%Drawworks%Conv_Ratio)/30.d0) ?
data%State%Drawworks%w_drum = (pi*(data%State%Drawworks%Speed/data%State%Drawworks%Conv_Ratio)/30.d0) ![rad/s]
data%State%Drawworks%Hook_Height = data%State%Drawworks%Hook_Height-(((data%State%Drawworks%Diameter/2.0)*(data%State%Drawworks%time_step*0.5d0*(data%State%Drawworks%w_drum+data%State%Drawworks%w_old_drum)))/data%State%Drawworks%NumberOfLine) ![m]
!else if (data%State%Drawworks%Switch==0) then !Off
! data%State%Drawworks%motion = 0
! data%State%Drawworks%w_old_drum = 0.d0
! data%State%Drawworks%w_drum = 0.d0
! data%State%Drawworks%Hook_Height = data%State%Drawworks%Hook_Height
end if
!if (data%State%Drawworks%Conv_Ratio==1.d0) then
!
!
! IF (data%State%Drawworks%motion==+1) THEN
! Call Drawworks_Free_Traction_motor_Dir
! if (data%State%Drawworks%w_drum_Dir<=0.) then
! data%State%Drawworks%motion = 0
! else
! data%State%Drawworks%motion = +1
! Call Drawworks_Free_Traction_motor
! data%State%Drawworks%w = data%State%Drawworks%w_drum*data%State%Drawworks%Conv_Ratio
! data%State%Drawworks%w_old = data%State%Drawworks%w_old_drum*data%State%Drawworks%Conv_Ratio
! end if
! ELSE
! if (((data%State%Drawworks%F_fastline*(data%State%Drawworks%Diameter/2.0d0))-(((data%State%Drawworks%Diameter/2.0d0)*data%State%Drawworks%BreakLoad)*(data%State%Drawworks%ManualBreak/100.0d0)))<=0.) then
! data%State%Drawworks%motion = 0
! data%State%Drawworks%w_drum = 0.0d0
! data%State%Drawworks%w_old_drum = 0.0d0
! data%State%Drawworks%w = data%State%Drawworks%w_drum*data%State%Drawworks%Conv_Ratio
! data%State%Drawworks%w_old = data%State%Drawworks%w_old_drum*data%State%Drawworks%Conv_Ratio
! data%State%Drawworks%Hook_Height = data%State%Drawworks%Hook_Height
!
! data%State%Drawworks%ia = 0.
! data%State%Drawworks%ia_old = 0.
! data%State%Drawworks%x = 0.
! data%State%Drawworks%x_old = 0.
! data%State%Drawworks%y = 0.
! data%State%Drawworks%y_old = 0.
! else
! data%State%Drawworks%motion = -1
! Call Drawworks_Free_Traction_motor_dawn_motion
! data%State%Drawworks%w = data%State%Drawworks%w_drum*data%State%Drawworks%Conv_Ratio
! data%State%Drawworks%w_old = data%State%Drawworks%w_old_drum*data%State%Drawworks%Conv_Ratio
! end if
!
! END IF
!
!
!else
!
! IF (data%State%Drawworks%motion==-1) THEN
! data%State%Drawworks%w = -data%State%Drawworks%w
! data%State%Drawworks%w_old = -data%State%Drawworks%w_old
! data%State%Drawworks%w_drum = -data%State%Drawworks%w_drum
! data%State%Drawworks%w_old_drum = -data%State%Drawworks%w_old_drum
! END IF
! Call Drawworks_Traction_motor_ClutchMode_Dir
! IF (data%State%Drawworks%w_Dir>0.d0) then
!
! data%State%Drawworks%motion = +1
! Call Drawworks_Traction_motor_ClutchMode
! data%State%Drawworks%w_drum = data%State%Drawworks%w/data%State%Drawworks%Conv_Ratio
! data%State%Drawworks%w_old_drum = data%State%Drawworks%w_old/data%State%Drawworks%Conv_Ratio
! ELSE
! data%State%Drawworks%EddyTorque = (1.039d5*exp(4.343d-4*(30.0d0*(data%State%Drawworks%w/data%State%Drawworks%Conv_Ratio)/pi)))+(-1.036d5*exp(-.047920d0*(30.0d0*(data%State%Drawworks%w/data%State%Drawworks%Conv_Ratio)/pi))) !Lbf.ft
! if (data%State%Drawworks%EddyTorque>115000.) then
! data%State%Drawworks%EddyTorque = 115000.0d0
! end if
! data%State%Drawworks%EddyTorque = 1.355817948*data%State%Drawworks%EddyTorque ![N.m]
! if ((data%State%Drawworks%F_fastline*(data%State%Drawworks%Diameter/2.0d0))>((((data%State%Drawworks%Diameter/2.0d0)*data%State%Drawworks%BreakLoad)*(data%State%Drawworks%ManualBreak/100.0d0))+(data%State%Drawworks%EddyTorque*(data%State%Drawworks%EddyBreak/100.0d0)))) then
! data%State%Drawworks%motion = -1
!
! IF (data%State%Drawworks%w_drum<0.) THEN
! data%State%Drawworks%w = -data%State%Drawworks%w
! data%State%Drawworks%w_old = -data%State%Drawworks%w_old
! !data%State%Drawworks%w = 0. !???????????????
! !data%State%Drawworks%w_old = 0. !???????????????
! data%State%Drawworks%w_drum = -data%State%Drawworks%w_drum
! data%State%Drawworks%w_old_drum = -data%State%Drawworks%w_old_drum
! END IF
!
! data%State%Drawworks%Conv_Ratio = 1.
! Call Drawworks_Free_Traction_motor_dawn_motion
! data%State%Drawworks%w = data%State%Drawworks%w_drum*data%State%Drawworks%Conv_Ratio
! data%State%Drawworks%w_old = data%State%Drawworks%w_old_drum*data%State%Drawworks%Conv_Ratio
! !data%State%Drawworks%w_drum = data%State%Drawworks%w/data%State%Drawworks%Conv_Ratio
! !data%State%Drawworks%w_old_drum = data%State%Drawworks%w_old/data%State%Drawworks%Conv_Ratio
! else
! data%State%Drawworks%motion = 0
! data%State%Drawworks%w_drum = 0.0d0
! data%State%Drawworks%w_old_drum = 0.0d0
! data%State%Drawworks%w = data%State%Drawworks%w_drum*data%State%Drawworks%Conv_Ratio
! data%State%Drawworks%w_old = data%State%Drawworks%w_old_drum*data%State%Drawworks%Conv_Ratio
! data%State%Drawworks%Hook_Height = data%State%Drawworks%Hook_Height
!
! data%State%Drawworks%ia = 0.
! data%State%Drawworks%ia_old = 0.
! data%State%Drawworks%x = 0.
! data%State%Drawworks%x_old = 0.
! data%State%Drawworks%y = 0.
! data%State%Drawworks%y_old = 0.
! end if
!
! END IF
!
!end if
!Call DWBrakeSound

end subroutine Drawworks_Direction

+ 285
- 0
Equipments/Drawworks/Drawworks_Solver.i90 Voir le fichier

@@ -0,0 +1,285 @@
# 1 "/home/admin/SimulationCore2/Equipments/Drawworks/Drawworks_Solver.f90"
subroutine Drawworks_Solver
Use CUnityInputs
use UnitySignalVariables
use UnitySignalsModule
use SimulationVariables !@
use OperationScenariosModule
use OperationScenariosModule !!CElevator...
use UnitySignalsModule
! Use CTdsElevatorModesEnumVariables
use OperationScenariosModule
IMPLICIT NONE
Integer :: j
Integer :: CrownCollision_Status , FloorCollision_Status , CrownWarning_Status , FloorWarning_Status
!>>>>>>>>>>>>>>>>>>>> Speed <<<<<<<<<<<<<<<<<<<<<<<<

data%State%Drawworks%N_Throtle = data%State%Drawworks%Throttle ![rpm]
!data%State%Drawworks%N_Accelarator = (data%State%Drawworks%Acceleretor/100.d0)*965.d0 ![rpm]
!IF (data%State%Drawworks%N_Throtle>data%State%Drawworks%N_Accelarator) THEN
data%State%Drawworks%N_new = data%State%Drawworks%N_Throtle
!ELSE
! data%State%Drawworks%N_new = data%State%Drawworks%N_Accelarator
!END IF
!========================== Drawworks Rate limit ==========================
if (((data%State%Drawworks%N_new-data%State%Drawworks%N_old)/data%State%Drawworks%time_step)>data%State%Drawworks%RateChange) then
data%State%Drawworks%Speed =(data%State%Drawworks%RateChange*data%State%Drawworks%time_step)+data%State%Drawworks%N_old ![rpm]
else if (((data%State%Drawworks%N_old-data%State%Drawworks%N_new)/data%State%Drawworks%time_step)>data%State%Drawworks%RateChange) then
data%State%Drawworks%Speed = (-data%State%Drawworks%RateChange*data%State%Drawworks%time_step)+data%State%Drawworks%N_old
else
data%State%Drawworks%Speed = data%State%Drawworks%N_new
end if
!=======================================================================
!========================== Speed Correction ==========================
!===> SLIPS SET , No Motion
if ( data%State%Drawworks%DriveType==1 .and. Get_Slips() == SLIPS_SET_END .and. Get_KellyConnection() == KELLY_CONNECTION_STRING ) then
data%State%Drawworks%Speed = 0.d0
end if
if ( data%State%Drawworks%DriveType==0 .and. Get_Slips() == SLIPS_SET_END .and. (Get_TdsConnectionModes()==TDS_CONNECTION_SPINE .or. Get_TdsConnectionModes()==TDS_CONNECTION_STRING) ) then
data%State%Drawworks%Speed = 0.d0
end if
!===> Closed BOP Rams , No Motion
if ( data%State%Drawworks%ShearBopSituation==1 .and. (any(data%State%Drawworks%DrillModeCond==(/3,10,19,20,24/))) ) then
data%State%Drawworks%Speed = 0.d0
end if
!=======================================================================
Call Drawworks_Direction
!====================================================
! Collision & Warning
!====================================================
if ( data%State%Drawworks%CrownCollision == .false. ) then
CrownCollision_Status = 0
end if
if ( data%State%Drawworks%FloorCollision == .false. ) then
FloorCollision_Status = 0
end if
!====================================================
! Crown Collision (Max_Hook_Height)
!====================================================
if ( ((3.280839895d0*data%State%Drawworks%Hook_Height)>=data%State%Drawworks%max_Hook_Height) .and. (any(data%State%Drawworks%DrillModeCond==(/3,4,7,10,11,12,14/))) ) then
if ( CrownCollision_Status==0 .and. data%State%Drawworks%motion==1 ) then
CrownCollision_Status = 1
data%State%Drawworks%CrownCollision = .true.
data%State%Drawworks%SoundCrownCollision = .true.
else
data%State%Drawworks%SoundCrownCollision = .false.
end if
if ( data%State%Drawworks%motion==-1 .and. data%State%Drawworks%CrownCollision==.false. ) then
data%State%Drawworks%Hook_Height_final = 3.280839895d0*data%State%Drawworks%Hook_Height ![ft]
else
Call DWFixModeMotion
end if
return
end if
!====================================================
! Floor Collision (Min_Hook_Height)
!====================================================
if ( ((3.280839895*data%State%Drawworks%Hook_Height)<=data%State%Drawworks%min_Hook_Height) .and. (any(data%State%Drawworks%DrillModeCond==(/3,4,7,10,11,12,14/))) ) then
if ( FloorCollision_Status==0 .and. data%State%Drawworks%motion==-1 ) then
FloorCollision_Status = 1
data%State%Drawworks%FloorCollision = .true.
data%State%Drawworks%SoundFloorCollision = .true.
else
data%State%Drawworks%SoundFloorCollision = .false.
end if
if ( data%State%Drawworks%motion==1 .and. data%State%Drawworks%FloorCollision==.false. ) then
data%State%Drawworks%Hook_Height_final = 3.280839895d0*data%State%Drawworks%Hook_Height ![ft]
else
Call DWFixModeMotion
end if
return
end if
!====================================================
! Crown Warning
!====================================================
if ( ((3.280839895*data%State%Drawworks%Hook_Height)>=data%State%Drawworks%max_Hook_Height) .and. (any(data%State%Drawworks%DrillModeCond==(/1,2,5,6,8,9,13/))) ) then
if ( data%State%Drawworks%motion==-1 ) then
data%State%Drawworks%Hook_Height_final = 3.280839895d0*data%State%Drawworks%Hook_Height ![ft]
else
Call DWFixModeMotion
end if
return
end if
!====================================================
! Floor Warning
!====================================================
if ( ((3.280839895*data%State%Drawworks%Hook_Height)<=data%State%Drawworks%min_Hook_Height) .and. (any(data%State%Drawworks%DrillModeCond==(/1,2,5,6,8,9,13/))) ) then
if ( data%State%Drawworks%motion==1 ) then
data%State%Drawworks%Hook_Height_final = 3.280839895d0*data%State%Drawworks%Hook_Height ![ft]
else
Call DWFixModeMotion
end if
return
end if
!====================================================
! ELEVATOR CONNECTION STRING (SLIPS SET , No Motion)
!====================================================
if ( data%State%Drawworks%DriveType==1 .and. Get_Slips() == SLIPS_SET_END .and. Get_ElevatorConnection() == ELEVATOR_CONNECTION_STRING .and. data%State%Drawworks%motion/=-1 ) then
Call DWFixModeMotion
return
end if
if ( data%State%Drawworks%DriveType==0 .and. Get_Slips() == SLIPS_SET_END .and. (Get_TdsConnectionModes()==TDS_CONNECTION_NOTHING .and. Get_TdsElevatorModes()==TDS_ELEVATOR_CONNECTION_STRING) .and. data%State%Drawworks%motion/=-1 ) then
Call DWFixModeMotion
return
end if
!====================================================
! RAM & ToolJoint Collision (Top of RAM)
!====================================================
Do j = 2,4 !startup problem ???????
if ( data%State%Drawworks%TDBOPElementNo(j)/=0 ) then
if ( ((data%State%Drawworks%TDBOPHeight(j)-data%State%Drawworks%TDBOPThickness)<=(data%State%Drawworks%TDDrillStemsTopDepth(data%State%Drawworks%TDBOPElementNo(j))+data%State%Drawworks%TDDrillStemsToolJointRange(data%State%Drawworks%TDBOPElementNo(j)))) .and. ((data%State%Drawworks%TDBOPHeight(j)-data%State%Drawworks%TDBOPThickness)>data%State%Drawworks%TDDrillStemsTopDepth(data%State%Drawworks%TDBOPElementNo(j))) .and. (data%State%Drawworks%TDBOPRamDiam(j)<(2.d0*12.d0*data%State%Drawworks%TDDrillStemsRtoolJoint(data%State%Drawworks%TDBOPElementNo(j)))) ) then
if ( data%State%Drawworks%motion==1 ) then
data%State%Drawworks%Hook_Height_final = 3.280839895d0*data%State%Drawworks%Hook_Height ![ft]
else
Call DWFixModeMotion
end if
return
end if
end if
End Do
!====================================================
! RAM & ToolJoint Collision (Bottom of RAM)
!====================================================
Do j = 2,4
if ( data%State%Drawworks%TDBOPElementNo(j)/=0 ) then
if ( ((data%State%Drawworks%TDBOPHeight(j)+data%State%Drawworks%TDBOPThickness)>=(data%State%Drawworks%TDDrillStemsDownDepth(data%State%Drawworks%TDBOPElementNo(j))-data%State%Drawworks%TDDrillStemsToolJointRange(data%State%Drawworks%TDBOPElementNo(j)))) .and. ((data%State%Drawworks%TDBOPHeight(j)+data%State%Drawworks%TDBOPThickness)<data%State%Drawworks%TDDrillStemsDownDepth(data%State%Drawworks%TDBOPElementNo(j))) .and. (data%State%Drawworks%TDBOPRamDiam(j)<(2.d0*12.d0*data%State%Drawworks%TDDrillStemsRtoolJoint(data%State%Drawworks%TDBOPElementNo(j)))) ) then
if ( data%State%Drawworks%motion==-1 ) then
data%State%Drawworks%Hook_Height_final = 3.280839895d0*data%State%Drawworks%Hook_Height ![ft]
else
Call DWFixModeMotion
end if
return
end if
end if
End Do
!====================================================
! TopDrive (TdsStemIn)
!====================================================
if ( (data%State%Drawworks%DriveType==0) .and. (Get_TdsStemIn()) .and. Get_Slips() == SLIPS_SET_END ) then
if ( data%State%Drawworks%motion==1 ) then
data%State%Drawworks%Hook_Height_final = 3.280839895d0*data%State%Drawworks%Hook_Height ![ft]
else
Call DWFixModeMotion
end if
return
end if
!=====> BottomHole ROP Condition
if ( (int(data%State%Drawworks%TDDrillStemBottom*10000.d0)>=(int((data%State%Drawworks%TDWellTotalLength+data%State%Drawworks%TDDlMax)*10000.d0))) .and. (data%State%Drawworks%motion==-1 .or. data%State%Drawworks%motion==0) ) then
if ( data%State%Drawworks%StringIsBottomOfWell==0 ) then
data%State%Drawworks%Hook_Height_final = data%State%Drawworks%Hook_Height_final+(data%State%Drawworks%TDDrillStemBottom-(data%State%Drawworks%TDWellTotalLength+data%State%Drawworks%TDDlMax))
data%State%Drawworks%StringIsBottomOfWell = 1
end if
Call DWFixModeMotion
return
else
data%State%Drawworks%StringIsBottomOfWell = 0
end if
data%State%Drawworks%Hook_Height_final = 3.280839895d0*data%State%Drawworks%Hook_Height ![ft]
data%State%Drawworks%HookHeight_graph_output = 0.1189d0*((3.280839895d0*data%State%Drawworks%Hook_Height)-28.d0)-2.6d0 ![ft]
end subroutine Drawworks_Solver

+ 58
- 0
Equipments/Drawworks/Drawworks_StartUp.i90 Voir le fichier

@@ -0,0 +1,58 @@
# 1 "/home/admin/SimulationCore2/Equipments/Drawworks/Drawworks_StartUp.f90"
subroutine Drawworks_StartUp

use CDrillingConsoleVariables
use SimulationVariables
use SimulationVariables
use CHoistingVariables
use SimulationVariables
use SimulationVariables !@
!use CWarnings
IMPLICIT NONE
data%State%Drawworks%RateChange = 193.d0 ! [rpm/s?] !??????? motaghayere voroudi
!===> Hook Height
data%State%Drawworks%Hook_Height_ini = 75.0d0 ![ft]
data%State%Drawworks%Hook_Height_ini_graph_output = -1.54090d0 ![ft]
data%State%Drawworks%Hook_Height_inim = 0.3048d0*data%State%Drawworks%Hook_Height_ini ![m]
data%State%Drawworks%Hook_Height = data%State%Drawworks%Hook_Height_inim ![m]
data%State%Drawworks%Hook_Height_final = 75.d0 ![ft]
data%State%Drawworks%TDHookHeight = 75.d0 ![ft]
!===> Drum (Drawworks) Diameter
data%State%Drawworks%Diameter = 2.50d0 ![ft]
data%State%Drawworks%Diameter = 0.3048d0*data%State%Drawworks%Diameter ![m]
!===> Number of Line
data%State%Drawworks%NumberOfLine = data%Configuration%Hoisting%NumberOfLine
!===> Simulation time step
data%State%Drawworks%time_step = 0.10d0 ![s]
!===> Initial Values
data%State%Drawworks%w_drum = 0.d0
data%State%Drawworks%w_old_drum = 0.d0
data%State%Drawworks%motion = 0
data%State%Drawworks%K_Throttle = 0
data%State%Drawworks%StringIsBottomOfWell = 0 ! 1= string is at the bottom of the well
!data%State%Drawworks%CrownCollision = 0
!data%State%Drawworks%FloorCollision = 0
end subroutine Drawworks_StartUp

+ 56
- 0
Equipments/Drawworks/Drawworks_VARIABLES.i90 Voir le fichier

@@ -0,0 +1,56 @@
# 1 "/home/admin/SimulationCore2/Equipments/Drawworks/Drawworks_VARIABLES.f90"
MODULE Drawworks_VARIABLES
IMPLICIT NONE
PUBLIC
! REAL, PARAMETER :: pi=3.14159265
!**************************************************************************************************
!**************** Define Drawworks Array ****************************************************
TYPE, PUBLIC :: Drawworks_Var
!***** Drawworks_VARIABLES **********************
logical :: CrownCollision, FloorCollision
INTEGER :: AssignmentSwitch , K_Throttle , Switch
INTEGER :: MotorFaileMalf , ClutchEngageMalf , ClutchDisengageMalf
INTEGER :: motion, DriveType, ShearBopSituation, TDDrillStemComponentsNumbs
INTEGER :: DrillModeCond, StringIsBottomOfWell
INTEGER , Dimension(6) :: TDBOPElementNo

REAL :: Throttle, RateChange
REAL :: Diameter
REAL :: Hook_Height, Hook_Height_ini, Hook_Height_inim, Hook_Height_ini_graph_output, Hook_Height_final, max_Hook_Height, min_Hook_Height, HookHeight_graph_output
REAL :: N_Throtle, Conv_Ratio, NumberOfLine, Speed, N_new, N_old ! N[RPM]
REAL :: w_drum, w_old_drum ! w[rad/s]
REAL , Dimension(6) :: TDBOPHeight
REAL , Dimension(4) :: TDBOPRamDiam
REAL :: TDBOPThickness, TDDrillStemBottom, TDWellTotalLength, TDDlMax
REAL , Allocatable, DIMENSION(:) :: TDDrillStemsDownDepth
REAL , Allocatable, DIMENSION(:) :: TDDrillStemsTopDepth
REAL , Allocatable, DIMENSION(:) :: TDDrillStemsToolJointRange
REAL , Allocatable, DIMENSION(:) :: TDDrillStemsRtoolJoint
REAL :: TDHookHeight
REAL :: time_step
INTEGER :: BLWR ! 1=On , 0=Off
!************* Sound_VARIABLES **********************
INTEGER :: SoundFw , SoundRev
Logical :: SoundBlower
Logical :: SoundFloorCollision , SoundCrownCollision
END TYPE Drawworks_Var
!***********************************************************************************************
!****************************************************************************************************
END MODULE Drawworks_VARIABLES

+ 58
- 0
Equipments/Pumps/Pump1_MainSolver.i90 Voir le fichier

@@ -0,0 +1,58 @@
# 1 "/home/admin/SimulationCore2/Equipments/Pumps/Pump1_MainSolver.f90"
subroutine Pump1_MainSolver
use SimulationVariables
Implicit none
if (data%State%Pump(1)%Throttle<=0.d0) then
data%State%Pump(1)%K_throttle = 1
end if
if((any(data%State%Pump(1)%AssignmentSwitchh==(/1,2,3,4,9,10/))) .and. (data%State%Pump(1)%Switch==-1) .and. (data%State%Pump(1)%K_throttle==1) .and. (data%State%Pump(1)%PowerFailMalf==0) .and. (data%State%Pump(1)%Failure==0)) then
data%State%Pump(1)%SoundBlower = .true.
data%State%Pump(1)%BLWR = 1
!========================== Pump 1 Rate limit ==========================
if (((data%State%Pump(1)%N_new-data%State%Pump(1)%N_old)/data%State%Pump(1)%time_step)>data%State%Pump(1)%RateChange) then
data%State%Pump(1)%Speed =(data%State%Pump(1)%RateChange*data%State%Pump(1)%time_step)+data%State%Pump(1)%N_old ![RPM]
else if (((data%State%Pump(1)%N_old-data%State%Pump(1)%N_new)/data%State%Pump(1)%time_step)>data%State%Pump(1)%RateChange) then
data%State%Pump(1)%Speed = (-data%State%Pump(1)%RateChange*data%State%Pump(1)%time_step)+data%State%Pump(1)%N_old
else
data%State%Pump(1)%Speed = data%State%Pump(1)%N_new
end if
!=======================================================================
Call Pump_OnMode_Solver(1)
else
if ((any(data%State%Pump(1)%AssignmentSwitchh==(/1,2,3,4,9,10/))) .and. (data%State%Pump(1)%Switch==-1)) then
data%State%Pump(1)%SoundBlower = .true.
else
data%State%Pump(1)%SoundBlower = .false.
end if
if ((any(data%State%Pump(1)%AssignmentSwitchh==(/1,2,3,4,9,10/))) .and. (data%State%Pump(1)%Switch==-1) .and. (data%State%Pump(1)%PowerFailMalf==0) .and. (data%State%Pump(1)%Failure==0)) then
data%State%Pump(1)%BLWR = 1
else
data%State%Pump(1)%BLWR = 0
end if
Call Pump_OffMode_Solver(1)
data%State%Pump(1)%K_throttle = 0
end if
data%State%Pump(1)%N_old = data%State%Pump(1)%Speed
end subroutine Pump1_MainSolver

+ 47
- 0
Equipments/Pumps/Pump_OffMode_Solver.i90 Voir le fichier

@@ -0,0 +1,47 @@
# 1 "/home/admin/SimulationCore2/Equipments/Pumps/Pump_OffMode_Solver.f90"
subroutine Pump_OffMode_Solver(Pump_No)
use SimulationVariables
IMPLICIT NONE
INTEGER :: Pump_No
data%State%Pump(Pump_No)%N_new = 0.d0
!========================== Pump Rate limit ==========================
if (((data%State%Pump(Pump_No)%N_new-data%State%Pump(Pump_No)%N_old)/data%State%Pump(Pump_No)%time_step)>data%State%Pump(Pump_No)%RateChange) then
data%State%Pump(Pump_No)%Speed =(data%State%Pump(Pump_No)%RateChange*data%State%Pump(Pump_No)%time_step)+data%State%Pump(Pump_No)%N_old
else if (((data%State%Pump(Pump_No)%N_old-data%State%Pump(Pump_No)%N_new)/data%State%Pump(Pump_No)%time_step)>data%State%Pump(Pump_No)%RateChange) then
data%State%Pump(Pump_No)%Speed = (-data%State%Pump(Pump_No)%RateChange*data%State%Pump(Pump_No)%time_step)+data%State%Pump(Pump_No)%N_old
else
data%State%Pump(Pump_No)%Speed = data%State%Pump(Pump_No)%N_new
end if
!=======================================================================
data%State%Pump(Pump_No)%Flow_Rate = data%State%Pump(Pump_No)%FlowRatePerSTK*4118.d0*0.01d0*(data%State%Pump(Pump_No)%Speed/data%State%Pump(Pump_No)%Trans_Ratio) ![gpm]
data%State%Pump(Pump_No)%HorsePower = ((data%State%Pump(Pump_No)%Flow_Rate/0.01d0)*data%State%Pump(Pump_No)%StandPipe_Pressure)/(168067.d0*data%State%Pump(Pump_No)%Mech_Efficiency) ![HHP]
!data%State%Pump(Pump_No)%Max_Horsepower = ((data%State%Pump(Pump_No)%Flow_Rate/0.01d0)*data%State%Pump(Pump_No)%Max_Pressure)/(168067.d0*data%State%Pump(Pump_No)%Mech_Efficiency) ![HHP]
data%State%Pump(Pump_No)%Max_Horsepower = (data%State%Pump(Pump_No)%Flow_Rate*data%State%Pump(Pump_No)%Max_Pressure)/(1714.d0*data%State%Pump(Pump_No)%Mech_Efficiency)
if ( data%State%Pump(Pump_No)%StandPipe_Pressure>data%State%Pump(Pump_No)%Max_Pressure ) then ! in shart check shavad
!if ( (data%State%Pump(Pump_No)%StandPipe_Pressure*data%State%Pump(Pump_No)%Flow_Rate)>(1714.d0*data%State%Pump(Pump_No)%Max_Horsepower*data%State%Pump(Pump_No)%Mech_Efficiency) ) then
data%State%Pump(Pump_No)%Flow_Rate = (1714.d0*data%State%Pump(Pump_No)%Mech_Efficiency*data%State%Pump(Pump_No)%Max_Horsepower)/data%State%Pump(Pump_No)%StandPipe_Pressure ![gpm]
data%State%Pump(Pump_No)%Speed = ( data%State%Pump(Pump_No)%Flow_Rate/(data%State%Pump(Pump_No)%FlowRatePerSTK*4118.d0*0.01d0) )*data%State%Pump(Pump_No)%Trans_Ratio ![rpm]
end if
data%State%Pump(Pump_No)%SoundSPM = INT(data%State%Pump(Pump_No)%Speed/data%State%Pump(Pump_No)%Trans_Ratio)
If (data%State%Pump(Pump_No)%Flow_Rate>0.d0) Then
data%State%Pump(Pump_No)%Open_Close = 1
Else
data%State%Pump(Pump_No)%Open_Close = 0
End if
end subroutine Pump_OffMode_Solver

+ 27
- 0
Equipments/Pumps/Pumps_MainSolver.i90 Voir le fichier

@@ -0,0 +1,27 @@
# 1 "/home/admin/SimulationCore2/Equipments/Pumps/Pumps_MainSolver.f90"
subroutine Pumps_MainSolver
use SimulationVariables
Implicit none
Call DrillingConsole_ScrLEDs !koja bezaramesh?????
Call Pumps_Inputs
Call Pump1_MainSolver
Call Pump2_MainSolver
Call Pump3_MainSolver
Call Pumps_TotalSolver
Call Pumps_Outputs
end subroutine Pumps_MainSolver

+ 78
- 0
Equipments/RotaryTable/RTable_INPUTS.i90 Voir le fichier

@@ -0,0 +1,78 @@
# 1 "/home/admin/SimulationCore2/Equipments/RotaryTable/RTable_INPUTS.f90"
subroutine RTable_INPUTS
use CDrillingConsoleVariables
use SimulationVariables
! use CSimulationVariables
use UnitySignalsModule
! use CTdsElevatorModesEnumVariables
use CHoistingVariables
use TD_DrillStemComponents
use UnityModule
use CWarnings
use UnitySignalVariables
use UnitySignalsModule
IMPLICIT NONE
integer :: i
data%State%RTable%AssignmentSwitch = data%Equipments%DrillingConsole%AssignmentSwitch
data%State%RTable%Switch = data%Equipments%DrillingConsole%RTSwitch
!data%State%RTable%GearsAbuse = RotaryGearsAbuse
data%State%RTable%Throttle = data%Equipments%DrillingConsole%RTThrottle ![RPM]
data%State%RTable%String_Torque = data%State%TD_String%StringTorque*12.d0 ![lb.ft]*12 ---> [lb.in] ?????????
!data%State%RTable%RpmGaugeMalf !:dar module haye C meghdardehi mishe

data%State%RTable%N_new = data%State%RTable%Throttle
if ( data%State%RTable%MotorFaileMalf==1 ) then
data%State%RTable%N_new = 0.d0
end if
data%State%RTable%String_Torque = 0.112984d0*data%State%RTable%String_Torque ![N.m]
!===> String_JCoef Calculation
if ( data%Configuration%Hoisting%DriveType==0 ) then
if ( Get_TdsConnectionModes()==TDS_CONNECTION_NOTHING .and. Get_TdsElevatorModes()==TDS_ELEVATOR_CONNECTION_NOTHING ) then
data%State%RTable%RotaryMode = 1
data%State%RTable%String_JCoef = 0.d0
Do i = 1,data%State%TD_String%StringConfigurationCount
data%State%RTable%String_JCoef = data%State%RTable%String_JCoef+( (data%State%TD_DrillStem(i)%TotalWeight*((data%State%TD_DrillStem(i)%Id**2.d0)+(data%State%TD_DrillStem(i)%Od**2.d0)))/8.d0 ) ![lb.ft^2] , Jz=(1/2)*m*(r1^2+r2^2)
End Do
data%State%RTable%String_JCoef = data%State%RTable%String_JCoef*0.0421401d0 ![kg.m^2]
else if ( Get_Slips() /= SLIPS_SET_END ) then
data%State%RTable%RotaryMode = 2
data%State%RTable%String_JCoef = 0.d0
data%State%RTable%String_Torque = 0.d0
else
data%State%RTable%RotaryMode = 3
data%State%RTable%String_JCoef = 0.d0
data%State%RTable%String_Torque = 0.d0
end if
else if ( data%Configuration%Hoisting%DriveType==1 ) then
if ( Get_IsKellyBushingSetInTable() .or. Get_Slips() == SLIPS_SET_END ) then !if rotary connected to string
data%State%RTable%RotaryMode = 4
data%State%RTable%String_JCoef = 0.d0
Do i = 1,data%State%TD_String%StringConfigurationCount
data%State%RTable%String_JCoef = data%State%RTable%String_JCoef+( (data%State%TD_DrillStem(i)%TotalWeight*((data%State%TD_DrillStem(i)%Id**2.d0)+(data%State%TD_DrillStem(i)%Od**2.d0)))/8.d0 ) ![lb.ft^2] , Jz=(1/2)*m*(r1^2+r2^2)
End Do
data%State%RTable%String_JCoef = data%State%RTable%String_JCoef*0.0421401e0 ![kg.m^2]
else
data%State%RTable%RotaryMode = 5
data%State%RTable%String_JCoef = 0.d0
data%State%RTable%String_Torque = 0.d0
end if
end if
!===> Transmission Mode
data%State%RTable%Conv_Ratio = data%State%RTable%High_Conv_Ratio
end subroutine RTable_INPUTS

+ 77
- 0
Equipments/RotaryTable/RTable_Inputs.f90 Voir le fichier

@@ -0,0 +1,77 @@
subroutine RTable_INPUTS
use CDrillingConsoleVariables
use SimulationVariables
! use CSimulationVariables
use UnitySignalsModule
! use CTdsElevatorModesEnumVariables
use CHoistingVariables
use TD_DrillStemComponents
use UnityModule
use CWarnings
use UnitySignalVariables
use UnitySignalsModule
IMPLICIT NONE
integer :: i
data%State%RTable%AssignmentSwitch = data%Equipments%DrillingConsole%AssignmentSwitch
data%State%RTable%Switch = data%Equipments%DrillingConsole%RTSwitch
!data%State%RTable%GearsAbuse = RotaryGearsAbuse
data%State%RTable%Throttle = data%Equipments%DrillingConsole%RTThrottle ![RPM]
data%State%RTable%String_Torque = data%State%TD_String%StringTorque*12.d0 ![lb.ft]*12 ---> [lb.in] ?????????
!data%State%RTable%RpmGaugeMalf !:dar module haye C meghdardehi mishe
data%State%RTable%N_new = data%State%RTable%Throttle
if ( data%State%RTable%MotorFaileMalf==1 ) then
data%State%RTable%N_new = 0.d0
end if
data%State%RTable%String_Torque = 0.112984d0*data%State%RTable%String_Torque ![N.m]
!===> String_JCoef Calculation
if ( data%Configuration%Hoisting%DriveType==0 ) then
if ( Get_TdsConnectionModes()==TDS_CONNECTION_NOTHING .and. Get_TdsElevatorModes()==TDS_ELEVATOR_CONNECTION_NOTHING ) then
data%State%RTable%RotaryMode = 1
data%State%RTable%String_JCoef = 0.d0
Do i = 1,data%State%TD_String%StringConfigurationCount
data%State%RTable%String_JCoef = data%State%RTable%String_JCoef+( (data%State%TD_DrillStem(i)%TotalWeight*((data%State%TD_DrillStem(i)%Id**2.d0)+(data%State%TD_DrillStem(i)%Od**2.d0)))/8.d0 ) ![lb.ft^2] , Jz=(1/2)*m*(r1^2+r2^2)
End Do
data%State%RTable%String_JCoef = data%State%RTable%String_JCoef*0.0421401d0 ![kg.m^2]
else if ( Get_Slips() /= SLIPS_SET_END ) then
data%State%RTable%RotaryMode = 2
data%State%RTable%String_JCoef = 0.d0
data%State%RTable%String_Torque = 0.d0
else
data%State%RTable%RotaryMode = 3
data%State%RTable%String_JCoef = 0.d0
data%State%RTable%String_Torque = 0.d0
end if
else if ( data%Configuration%Hoisting%DriveType==1 ) then
if ( Get_IsKellyBushingSetInTable() .or. Get_Slips() == SLIPS_SET_END ) then !if rotary connected to string
data%State%RTable%RotaryMode = 4
data%State%RTable%String_JCoef = 0.d0
Do i = 1,data%State%TD_String%StringConfigurationCount
data%State%RTable%String_JCoef = data%State%RTable%String_JCoef+( (data%State%TD_DrillStem(i)%TotalWeight*((data%State%TD_DrillStem(i)%Id**2.d0)+(data%State%TD_DrillStem(i)%Od**2.d0)))/8.d0 ) ![lb.ft^2] , Jz=(1/2)*m*(r1^2+r2^2)
End Do
data%State%RTable%String_JCoef = data%State%RTable%String_JCoef*0.0421401e0 ![kg.m^2]
else
data%State%RTable%RotaryMode = 5
data%State%RTable%String_JCoef = 0.d0
data%State%RTable%String_Torque = 0.d0
end if
end if
!===> Transmission Mode
data%State%RTable%Conv_Ratio = data%State%RTable%High_Conv_Ratio
end subroutine RTable_INPUTS

+ 67
- 0
Equipments/RotaryTable/RTable_MainSolver.f90 Voir le fichier

@@ -0,0 +1,67 @@
subroutine RTable_MainSolver
use SimulationVariables !@
IMPLICIT NONE
Call RTable_Inputs
if (data%State%RTable%Throttle<=0.d0) then
data%State%RTable%K_throttle = 1
end if
if ( (any(data%State%RTable%AssignmentSwitch==(/1,2,3,4,5,8,9,10,11/))) .and. (data%State%RTable%Switch==-1) ) then
data%State%RTable%SoundBlower = .true.
data%State%RTable%BLWR = 1
!======================= Rotary Table Rate_limit =======================
if (((data%State%RTable%N_new-data%State%RTable%N_old)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else if (((data%State%RTable%N_old-data%State%RTable%N_new)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (-data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else
data%State%RTable%N_ref = data%State%RTable%N_new
end if
!=======================================================================
CALL RTable_OnModeSolver
else if ( (any(data%State%RTable%AssignmentSwitch==(/1,2,3,4,5,8,9,10,11/))) .and. (data%State%RTable%Switch==1) .and. (data%State%RTable%K_throttle==1) ) then
data%State%RTable%SoundBlower = .true.
data%State%RTable%BLWR = 1
!======================= Rotary Table Rate_limit =======================
if (((data%State%RTable%N_new-data%State%RTable%N_old)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else if (((data%State%RTable%N_old-data%State%RTable%N_new)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (-data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else
data%State%RTable%N_ref = data%State%RTable%N_new
end if
!=======================================================================
CALL RTable_OnModeSolver
else
if((any(data%State%RTable%AssignmentSwitch==(/1,2,3,4,5,8,9,10,11/))) .and. (data%State%RTable%Switch/=0)) then
data%State%RTable%SoundBlower = .true.
data%State%RTable%BLWR = 1
else
data%State%RTable%SoundBlower = .false.
data%State%RTable%BLWR = 0
end if
Call RTable_OffMode
data%State%RTable%K_throttle = 0
end if
Call RTable_Outputs
data%State%RTable%N_old = data%State%RTable%N_ref
end subroutine RTable_MainSolver

+ 68
- 0
Equipments/RotaryTable/RTable_MainSolver.i90 Voir le fichier

@@ -0,0 +1,68 @@
# 1 "/home/admin/SimulationCore2/Equipments/RotaryTable/RTable_MainSolver.f90"
subroutine RTable_MainSolver
use SimulationVariables !@
IMPLICIT NONE
Call RTable_Inputs
if (data%State%RTable%Throttle<=0.d0) then
data%State%RTable%K_throttle = 1
end if
if ( (any(data%State%RTable%AssignmentSwitch==(/1,2,3,4,5,8,9,10,11/))) .and. (data%State%RTable%Switch==-1) ) then
data%State%RTable%SoundBlower = .true.
data%State%RTable%BLWR = 1
!======================= Rotary Table Rate_limit =======================
if (((data%State%RTable%N_new-data%State%RTable%N_old)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else if (((data%State%RTable%N_old-data%State%RTable%N_new)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (-data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else
data%State%RTable%N_ref = data%State%RTable%N_new
end if
!=======================================================================
CALL RTable_OnModeSolver
else if ( (any(data%State%RTable%AssignmentSwitch==(/1,2,3,4,5,8,9,10,11/))) .and. (data%State%RTable%Switch==1) .and. (data%State%RTable%K_throttle==1) ) then
data%State%RTable%SoundBlower = .true.
data%State%RTable%BLWR = 1
!======================= Rotary Table Rate_limit =======================
if (((data%State%RTable%N_new-data%State%RTable%N_old)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else if (((data%State%RTable%N_old-data%State%RTable%N_new)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (-data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else
data%State%RTable%N_ref = data%State%RTable%N_new
end if
!=======================================================================
CALL RTable_OnModeSolver
else
if((any(data%State%RTable%AssignmentSwitch==(/1,2,3,4,5,8,9,10,11/))) .and. (data%State%RTable%Switch/=0)) then
data%State%RTable%SoundBlower = .true.
data%State%RTable%BLWR = 1
else
data%State%RTable%SoundBlower = .false.
data%State%RTable%BLWR = 0
end if
Call RTable_OffMode
data%State%RTable%K_throttle = 0
end if

Call RTable_Outputs
data%State%RTable%N_old = data%State%RTable%N_ref

end subroutine RTable_MainSolver

+ 63
- 0
Equipments/RotaryTable/RTable_OffModeSolver.i90 Voir le fichier

@@ -0,0 +1,63 @@
# 1 "/home/admin/SimulationCore2/Equipments/RotaryTable/RTable_OffModeSolver.f90"
subroutine RTable_OffMode
use SimulationVariables !@
IMPLICIT NONE
REAL :: RT_OldSpeed, RT_OldRpmGauge
RT_OldSpeed = data%State%RTable%Speed
RT_OldRpmGauge = data%State%RTable%RpmGaugeOutput
data%State%RTable%N_new = 0.d0
!======================= Rotary Table Rate_limit =======================
if (((data%State%RTable%N_new-data%State%RTable%N_old)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else if (((data%State%RTable%N_old-data%State%RTable%N_new)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (-data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else
data%State%RTable%N_ref = data%State%RTable%N_new
end if
!=======================================================================
if ( any(data%State%RTable%RotaryMode==(/1,4/)) ) then !if rotary connected to string
!==> RPM
data%State%RTable%Speed = data%State%RTable%N_ref/data%State%RTable%Conv_Ratio
data%State%RTable%Speed = min(data%State%RTable%Speed,data%State%RTable%MaxRPM) !Speed [RPM]
data%State%RTable%RpmGaugeOutput = data%State%RTable%Speed
!==> Sound
data%State%RTable%SoundRPM = INT(data%State%RTable%Speed)
!==> Torque
data%State%RTable%Torque = ( ((data%State%RTable%J_coef+data%State%RTable%String_JCoef)*((((pi*data%State%RTable%Speed)/30.d0)-((pi*RT_OldSpeed)/30.d0))/data%State%RTable%time_step))+(data%State%RTable%String_Torque) )*0.73756215d0 ![N.m]*0.73756215 = [ft.lbf] ![kg.m^2]*[radians/s^2]+[N.m]=[N.m]
data%State%RTable%Torque = min(data%State%RTable%Torque,data%State%RTable%MaxTorque)
data%State%RTable%TorqueGaugeOutput = data%State%RTable%Torque
else if ( any(data%State%RTable%RotaryMode==(/2,5/)) ) then
!==> RPM
data%State%RTable%Speed = 0.d0
data%State%RTable%RpmGaugeOutput = data%State%RTable%N_ref/data%State%RTable%Conv_Ratio
data%State%RTable%RpmGaugeOutput = min(data%State%RTable%RpmGaugeOutput,data%State%RTable%MaxRPM)
!==> Sound
data%State%RTable%SoundRPM = INT(data%State%RTable%RpmGaugeOutput)
!==> Torque
data%State%RTable%Torque = 0.d0
data%State%RTable%TorqueGaugeOutput = ( ((data%State%RTable%J_coef+data%State%RTable%String_JCoef)*((((pi*data%State%RTable%RpmGaugeOutput)/30.d0)-((pi*RT_OldRpmGauge)/30.d0))/data%State%RTable%time_step))+(data%State%RTable%String_Torque) )*0.73756215d0 ![N.m]*0.73756215 = [ft.lbf] ![kg.m^2]*[radians/s^2]+[N.m]=[N.m]
data%State%RTable%TorqueGaugeOutput = min(data%State%RTable%TorqueGaugeOutput,data%State%RTable%MaxTorque)
else if ( data%State%RTable%RotaryMode==3 ) then
!==> RPM
data%State%RTable%Speed = 0.d0
data%State%RTable%RpmGaugeOutput = 0.d0
!==> Sound
data%State%RTable%SoundRPM = INT(data%State%RTable%RpmGaugeOutput)
!==> Torque
data%State%RTable%Torque = 0.d0
data%State%RTable%TorqueGaugeOutput = 0.d0
end if
end subroutine RTable_OffMode

+ 52
- 0
Equipments/RotaryTable/RTable_OnModeSolver.i90 Voir le fichier

@@ -0,0 +1,52 @@
# 1 "/home/admin/SimulationCore2/Equipments/RotaryTable/RTable_OnModeSolver.f90"
subroutine RTable_OnModeSolver
use SimulationVariables !@
IMPLICIT NONE
REAL :: RT_OldSpeed, RT_OldRpmGauge
RT_OldSpeed = data%State%RTable%Speed
RT_OldRpmGauge = data%State%RTable%RpmGaugeOutput

if ( any(data%State%RTable%RotaryMode==(/1,4/)) ) then !if rotary connected to string
!==> RPM
data%State%RTable%Speed = data%State%RTable%N_ref/data%State%RTable%Conv_Ratio
data%State%RTable%Speed = min(data%State%RTable%Speed,data%State%RTable%MaxRPM) !Speed [RPM]
data%State%RTable%RpmGaugeOutput = data%State%RTable%Speed
!==> Sound
data%State%RTable%SoundRPM = INT(data%State%RTable%Speed)
!==> Torque
data%State%RTable%Torque = ( ((data%State%RTable%J_coef+data%State%RTable%String_JCoef)*((((pi*data%State%RTable%Speed)/30.d0)-((pi*RT_OldSpeed)/30.d0))/data%State%RTable%time_step))+(data%State%RTable%String_Torque) )*0.73756215d0 ![N.m]*0.73756215 = [ft.lbf] ![kg.m^2]*[radians/s^2]+[N.m]=[N.m]
data%State%RTable%Torque = min(data%State%RTable%Torque,data%State%RTable%MaxTorque)
data%State%RTable%TorqueGaugeOutput = data%State%RTable%Torque
else if ( any(data%State%RTable%RotaryMode==(/2,5/)) ) then
!==> RPM
data%State%RTable%Speed = 0.d0
data%State%RTable%RpmGaugeOutput = data%State%RTable%N_ref/data%State%RTable%Conv_Ratio
data%State%RTable%RpmGaugeOutput = min(data%State%RTable%RpmGaugeOutput,data%State%RTable%MaxRPM) !inja bayad bashe ya na???
!==> Sound
data%State%RTable%SoundRPM = INT(data%State%RTable%RpmGaugeOutput)
!==> Torque
data%State%RTable%Torque = 0.d0
data%State%RTable%TorqueGaugeOutput = ( ((data%State%RTable%J_coef+data%State%RTable%String_JCoef)*((((pi*data%State%RTable%RpmGaugeOutput)/30.d0)-((pi*RT_OldRpmGauge)/30.d0))/data%State%RTable%time_step))+(data%State%RTable%String_Torque) )*0.73756215d0 ![N.m]*0.73756215 = [ft.lbf] ![kg.m^2]*[radians/s^2]+[N.m]=[N.m]
data%State%RTable%TorqueGaugeOutput = min(data%State%RTable%TorqueGaugeOutput,data%State%RTable%MaxTorque)
else if ( data%State%RTable%RotaryMode==3 ) then
!==> RPM
data%State%RTable%Speed = 0.d0
data%State%RTable%RpmGaugeOutput = 0.d0
!==> Sound
data%State%RTable%SoundRPM = INT(data%State%RTable%RpmGaugeOutput)
!==> Torque
data%State%RTable%Torque = 0.d0
data%State%RTable%TorqueGaugeOutput = 0.d0
end if
END subroutine RTable_OnModeSolver

+ 41
- 0
Equipments/RotaryTable/RTable_VARIABLES.i90 Voir le fichier

@@ -0,0 +1,41 @@
# 1 "/home/admin/SimulationCore2/Equipments/RotaryTable/RTable_VARIABLES.f90"
MODULE RTable_VARIABLES
IMPLICIT NONE
PUBLIC
! REAL, PARAMETER :: pi=3.14159265

!****************************************************************************************************
!**************** Define Rotary Table Array ****************************************************
TYPE, PUBLIC :: RTable_Var
!********* RTable_VARIABLES *************************
INTEGER :: AssignmentSwitch , Switch , K_throttle , RotaryMode
INTEGER :: MotorFaileMalf , OverideTorqueLimitMalf , RpmGaugeMalf , TorqueGaugeMalf , TorqueLimitGaugeMalf
REAL(8) :: RpmGaugeOutput , TorqueGaugeOutput
REAL :: Throttle, RateChange
REAL :: Speed, Inertia_Moment, Mech_Efficiency, Torque, MaxRPM, MaxTorque
REAL :: Conv_Ratio, High_Conv_Ratio, Low_Conv_Ratio
REAL :: String_Torque, String_JCoef
REAL :: time_step, J_coef
REAL :: N_new, N_old, N_ref ! N(rpm) , w(rad/s)
!********* Traction Motor_VARIABLES *****************
!******************************************************
INTEGER :: BLWR ! On=1 , Off=0
!************* Sound_VARIABLES **********************
INTEGER :: SoundRPM
Logical :: SoundBlower
END TYPE RTable_Var

!***********************************************************************************************
!****************************************************************************************************
END MODULE RTable_VARIABLES

+ 68
- 0
Equipments/RotaryTable/Rtable_MainSolver.i90 Voir le fichier

@@ -0,0 +1,68 @@
# 1 "/home/admin/SimulationCore2/Equipments/RotaryTable/Rtable_MainSolver.f90"
subroutine RTable_MainSolver
use SimulationVariables !@
IMPLICIT NONE
Call RTable_Inputs
if (data%State%RTable%Throttle<=0.d0) then
data%State%RTable%K_throttle = 1
end if
if ( (any(data%State%RTable%AssignmentSwitch==(/1,2,3,4,5,8,9,10,11/))) .and. (data%State%RTable%Switch==-1) ) then
data%State%RTable%SoundBlower = .true.
data%State%RTable%BLWR = 1
!======================= Rotary Table Rate_limit =======================
if (((data%State%RTable%N_new-data%State%RTable%N_old)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else if (((data%State%RTable%N_old-data%State%RTable%N_new)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (-data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else
data%State%RTable%N_ref = data%State%RTable%N_new
end if
!=======================================================================
CALL RTable_OnModeSolver
else if ( (any(data%State%RTable%AssignmentSwitch==(/1,2,3,4,5,8,9,10,11/))) .and. (data%State%RTable%Switch==1) .and. (data%State%RTable%K_throttle==1) ) then
data%State%RTable%SoundBlower = .true.
data%State%RTable%BLWR = 1
!======================= Rotary Table Rate_limit =======================
if (((data%State%RTable%N_new-data%State%RTable%N_old)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else if (((data%State%RTable%N_old-data%State%RTable%N_new)/data%State%RTable%time_step)>data%State%RTable%RateChange) then
data%State%RTable%N_ref = (-data%State%RTable%RateChange*data%State%RTable%time_step)+data%State%RTable%N_old
else
data%State%RTable%N_ref = data%State%RTable%N_new
end if
!=======================================================================
CALL RTable_OnModeSolver
else
if((any(data%State%RTable%AssignmentSwitch==(/1,2,3,4,5,8,9,10,11/))) .and. (data%State%RTable%Switch/=0)) then
data%State%RTable%SoundBlower = .true.
data%State%RTable%BLWR = 1
else
data%State%RTable%SoundBlower = .false.
data%State%RTable%BLWR = 0
end if
Call RTable_OffMode
data%State%RTable%K_throttle = 0
end if

Call RTable_Outputs
data%State%RTable%N_old = data%State%RTable%N_ref

end subroutine RTable_MainSolver

+ 45
- 0
Equipments/TopDrive/TopDrive_Inputs.f90 Voir le fichier

@@ -0,0 +1,45 @@
subroutine TopDrive_Inputs
! Use CSimulationVariables
use CTopDrivePanelVariables
use SimulationVariables
use UnitySignalsModule
use SimulationVariables
Use TD_DrillStemComponents
IMPLICIT NONE
integer :: i
data%State%TDS%String_Torque = data%State%TD_String%StringTorque*12.d0 ![lb.ft]*12 ---> [lb.in] ?????????
!data%State%TDS%String_Torque = 20000.
data%State%TDS%String_Torque = 0.112984829d0*data%State%TDS%String_Torque ![N.m]
data%State%TDS%PowerState = data%Equipments%TopDrivePanel%TopDriveTdsPowerState
data%State%TDS%RpmKnob = data%Equipments%TopDrivePanel%RpmKnob
!data%State%TDS%MotorFaileMalf ! jayi meghdardehi nashode ??????????????????
data%State%TDS%RateChange = 193.d0 ![RPM/s] motaghayere voroudi ???
data%State%TDS%DrillTorqueState = data%Equipments%TopDrivePanel%TopDriveDrillTorqueState
data%State%TDS%TorqueLimitKnob = data%Equipments%TopDrivePanel%TopDriveTorqueLimitKnob ! bayad hazf shavad??????????????/
!===> data%State%TDS%String_JCoef Calculation
if ( (data%State%TDS%DrillTorqueState==-1) .and. ((Get_TdsConnectionModes()==TDS_CONNECTION_STRING).or.(Get_TdsConnectionModes()==TDS_CONNECTION_SPINE)) ) then !if TopDrive connected to string
data%State%TDS%String_JCoef = 0.d0
Do i = 1,data%State%TD_String%StringConfigurationCount
data%State%TDS%String_JCoef = data%State%TDS%String_JCoef+( (data%State%TD_DrillStem(i)%TotalWeight*((data%State%TD_DrillStem(i)%Id**2.d0)+(data%State%TD_DrillStem(i)%Od**2.d0)))/8.d0 ) ![lb.ft^2] , Jz=(1/2)*m*(r1^2+r2^2)
End Do
data%State%TDS%String_JCoef = data%State%TDS%String_JCoef*0.0421401d0 ![kg.m^2]
else
data%State%TDS%String_JCoef = 0.d0
data%State%TDS%String_Torque = 0.d0
end if
data%State%TDS%String_JCoef = data%State%TDS%String_JCoef/10.d0 !???????? /10: bi dalil, check it
end subroutine

+ 492
- 0
FluidFlow/kick/Gas_Kick_Calculator.i90 Voir le fichier

@@ -0,0 +1,492 @@
# 1 "/home/admin/SimulationCore2/FluidFlow/kick/Gas_Kick_Calculator.f90"
SUBROUTINE GasKickCalculator
use SimulationVariables
use KickVARIABLESModule
use SimulationVariables !@
Use CReservoirVariables
Use CFormationVariables
USE Fluid_Flow_Startup_Vars
use PressureDisplayVARIABLESModule
USE FricPressDropVarsModule
USE MudSystemVARIABLES
use SimulationVariables !@@@
USE CMudPropertiesVariables
USE CError
USE , INTRINSIC :: IEEE_ARITHMETIC
!! Note: a subject that may be confusing is that when we use gauge pressure and when're using absolute pressure?!
!! all stated pressure are gauge pressure, so I do like this.
!! only when we want to use a state equation (like ideal gas equation), we should use absolute equation and so I do this.
!! Thus gas pocket pressure are all absolute pressure.
IMPLICIT NONE
INTEGER :: i , j , k , l
KickVARIABLES%SolvingEquationError = .FALSE.
KickVARIABLES%KickVandPFunction(:) = 0.d0
KickVARIABLES%KickJacobian(: , :) = 0.d0
!====================================================
! Gas Properties (Methane Gas)
!====================================================
!GasPocketNewTemp%Array(1) = 600
KickVARIABLES%BottomHoleTemperature = 600
KickVARIABLES%KickFluxAvgPressure = (KickVARIABLES%BottomHolePress + KickVARIABLES%FormPressure) / 2 + StandardPress
KickVARIABLES%KickFluxAvgTemperature = (KickVARIABLES%FormTemperature + KickVARIABLES%BottomHoleTemperature) / 2
KickVARIABLES%KickFluxAvgCompressibility = 0.98d0
KickVARIABLES%K_Aa = (5.8742362 * 10.**(-3) * KickVARIABLES%KickFluxAvgTemperature**1.2288) / (511.1728532 + KickVARIABLES%KickFluxAvgTemperature)
KickVARIABLES%K_Bb = 5.5565586 + (1000.01 / KickVARIABLES%KickFluxAvgTemperature)
KickVARIABLES%K_Cc = 2.47862 - 0.12294 * KickVARIABLES%K_Bb
KickVARIABLES%GasKickSIDensity = KickVARIABLES%KickFluxAvgPressure / (KickVARIABLES%KickFluxAvgCompressibility * &
KickVARIABLES%KickFluxAvgTemperature * data%State%GasType(KickVARIABLES%KickGasType)%GasConstant) * Convpcftogpcm3
KickVARIABLES%GasKickViscosity = KickVARIABLES%K_Aa * EXP(KickVARIABLES%K_Bb * KickVARIABLES%GasKickSIDensity**KickVARIABLES%K_Cc)
!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!! Calculating compressibility for bottom hole condition

KickVARIABLES%BottomHoleCompressibility = 0.98d0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
KickVARIABLES%GasKickBg = 0.00504 * KickVARIABLES%KickFluxAvgCompressibility * KickVARIABLES%KickFluxAvgTemperature / KickVARIABLES%KickFluxAvgPressure ![bbl/SCF]


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!WRITE (*,*) 'Gas Kick Top'
!===> Kick Flow Rate Calculation
IF (KickVARIABLES%FormPressure > KickVARIABLES%BottomHolePress) THEN
KickVARIABLES%KickmdotACoef = 10.0**(-8) * 1.15741d0 * 7.080 * KickVARIABLES%FormPermeability * REAL(KickVARIABLES%KickFormLength) * data%State%GasType(KickVARIABLES%KickGasType)%StDensity / &
(KickVARIABLES%GasKickViscosity * KickVARIABLES%GasKickBg * LOG(10000.0))
!IF (WellHeadOpen .AND. NoGasPocket == 1) KickVARIABLES%KickmdotACoef = (1.d0 + 2.d0) * KickmdotACoef
ELSE
KickVARIABLES%KickmdotACoef = 0.0
END IF
i = data%State%FricPressDrop%StringLastEl
j = data%State%FricPressDrop%OpenholeFirstEl - 1
k = KickVARIABLES%GasPocketFlowEl(1 , 1)
KickVARIABLES%KickmdotBCoef = KickVARIABLES%FormPressure + StandardPress !! - Sum(static and friction pressure loss) of flow elements below gas pocket, see below
IF (KickVARIABLES%FormPressure > KickVARIABLES%BottomHolePress) THEN
!WRITE (*,*) 'k , i, j' , k , i, j
IF (k >= data%State%FricPressDrop%OpenholeFirstEl) THEN ! Bottom of active kick is in openhole
KickVARIABLES%KickmdotBCoef = KickVARIABLES%KickmdotBCoef - (SUM(FlowEl(data%State%FricPressDrop%OpenholeFirstEl : k)%StaticPressDiff)) !+ SUM(FlowEl(j + 1 : GasPocketFlowEl(1 , 1) - 1)%FricPressLoss
!WRITE (*,*) '1 SUM(FlowEl(j + 1 : k)%FricPressLoss', k, SUM(FlowEl(j + 1 : k)%FricPressLoss)
ELSE IF (k < data%State%FricPressDrop%OpenholeFirstEl) THEN ! bottom of 1st gas pocket (active kick) is in annulus ond/or choke line only
KickVARIABLES%KickmdotBCoef = KickVARIABLES%KickmdotBCoef - SUM(FlowEl(data%State%FricPressDrop%OpenholeFirstEl : data%State%FricPressDrop%NumbEl)%StaticPressDiff) &
- (SUM(FlowEl(data%State%FricPressDrop%AnnulusFirstEl : k)%StaticPressDiff) + SUM(FlowEl(data%State%FricPressDrop%AnnulusFirstEl : k)%FricPressLoss))
END IF
END IF

DO l = 1 , KickVARIABLES%NoGasPocket
KickVARIABLES%KickUnknownVector(2 * l - 1) = GasPocketNewVol%Array(l)
KickVARIABLES%KickUnknownVector(2 * l) = GasPocketNewPress%Array(l)
END DO
IF (KickVARIABLES%WellHeadOpen) THEN
!!!!!!!!!! Calculation of functions of pocket Pressure and gas Volumes
!IF (GasPocketElementNo(1) > 0) WRITE (*,*) ' GasPocketElementNo(1) ' , GasPocketElementNo(1)
!WRITE (*,*) ' Kick Unknown Vector' , KickUnknownVector!(1) , KickUnknownVector(2)
IF (KickIteration == 1) THEN ! updating initial guess based on previous time step data
DO l = 1 , KickVARIABLES%NoGasPocket
KickVARIABLES%KickUnknownVector(2 * l - 1) = KickVARIABLES%KickUnknownVector(2 * l - 1) + GasPocketDeltaVol%Array(l)
END DO
END IF
KickVARIABLES%KickVandPFunction(1) = KickVARIABLES%KickUnknownVector(1) - GasPocketCompressibility%Array(1) * data%State%GasType(KickVARIABLES%KickGasType)%GasConstant * & ! VandP(1) = V(1)
GasPocketNewTemp%Array(1) * (GasPocketWeight%Array(1) + KickVARIABLES%KickmdotACoef * MAX(((KickVARIABLES%KickmdotBCoef - KickVARIABLES%KickUnknownVector(2)) * dt) , 0.0)) / KickVARIABLES%KickUnknownVector(2)
!WRITE (*,*) 'KickVandPFunction(1)',KickVandPFunction(1)
l = 2 * KickVARIABLES%NoGasPocket
CALL KickFunctionsCalculator(KickVARIABLES%KickVandPFunction(l) , KickVARIABLES%NoGasPocket , 2) ! VandP(last) = P(last)
!WRITE (*,*) 'KickVandPFunction(l)', l, KickVandPFunction(l)
DO l = 2 , KickVARIABLES%NoGasPocket ! VandP(Odd) = V(l, l > 1)
KickVARIABLES%KickVandPFunction(2 * l - 1) = KickVARIABLES%KickUnknownVector(2 * l - 1) - GasPocketCompressibility%Array(l) * data%State%GasType(KickVARIABLES%KickGasType)%GasConstant * &
GasPocketNewTemp%Array(l) * GasPocketWeight%Array(l) / KickVARIABLES%KickUnknownVector(2 * l)
!WRITE(*,*) 'KickVandPFunction(V)', l, KickVandPFunction(2 * l - 1)
END DO
DO l = KickVARIABLES%NoGasPocket - 1 , 1 , -1
CALL KickFunctionsCalculator(KickVARIABLES%KickVandPFunction(2 * l) , l , 1) ! VandP(Even) = P(l, l < KickVARIABLES%NoGasPocket)
!WRITE(*,*) 'KickVandPFunction(P)', l , KickVandPFunction(2 * l)
END DO
!!!!!!!!!! END - Calculation of functions of pocket Pressure and gas Volumes
!!!!!!!!!! Calculation of Jacobian
DO k = 1 , 2 * KickVARIABLES%NoGasPocket ! Main Diagonal
KickVARIABLES%KickJacobian(k , k) = 1.d0
END DO
KickVARIABLES%KickJacobian(1,2) = (GasPocketCompressibility%Array(1) * data%State%GasType(KickVARIABLES%KickGasType)%GasConstant * GasPocketNewTemp%Array(1) &
* (GasPocketWeight%Array(1) + KickVARIABLES%KickmdotACoef * KickVARIABLES%KickmdotBCoef * dt) / KickVARIABLES%KickUnknownVector(2)**2) ! Row 1 Finished
IF (KickVARIABLES%KickJacobian(1,2) == 0.d0) THEN
CALL Error('KickJacobian(1,2) = 0.0')
KickVARIABLES%KickJacobian(1,2) = KickVARIABLES%OldKickJacobian(1,2)
END IF
!WRITE(*,*) 'KickJacobian(1,2)', KickJacobian(1,2)
l = KickVARIABLES%NoGasPocket
CALL KickFunctionsCalculator(KickVARIABLES%KickJacobian(2 * l , 2 * l - 1) , KickVARIABLES%NoGasPocket , 4) ! for last Row
IF (KickVARIABLES%KickJacobian(2 * l , 2 * l - 1) == 0.d0) THEN
CALL Error ('KickJacobian(Last,Odd) = 0.0')
KickVARIABLES%KickJacobian(2 * l , 2 * l - 1) = KickVARIABLES%OldKickJacobian(2 * l , 2 * l - 1)
END IF
DO k = KickVARIABLES%NoGasPocket - 1 , 1 , -1
KickVARIABLES%KickJacobian(2 * l , 2 * k - 1) = KickVARIABLES%KickJacobian(2 * l , 2 * l - 1)
END DO ! Last Row Finished
!WRITE(*,*) 'KickJacobian(2,1)', KickJacobian(2,1)
DO k = 2 , KickVARIABLES%NoGasPocket
KickVARIABLES%KickJacobian(2 * k - 1 , 2 * k) = GasPocketCompressibility%Array(k) * data%State%GasType(KickVARIABLES%KickGasType)%GasConstant * GasPocketNewTemp%Array(k) &
* GasPocketWeight%Array(k) / KickVARIABLES%KickUnknownVector(2 * k)**2
END DO ! Odd Rows (V equations) Finished
DO k = 1 , KickVARIABLES%NoGasPocket - 1
KickVARIABLES%KickJacobian(2 * k , 2 * k + 2) = -1.d0
END DO ! Even Rows (P equations) effect of upper pocket
DO k = 2 , 2 * (KickVARIABLES%NoGasPocket - 1) , 2
DO l = 1 , k - 1 , 2
CALL KickFunctionsCalculator(KickVARIABLES%KickJacobian(k , l) , k / 2 , 3)
IF (KickVARIABLES%KickJacobian(k , l) == 0.d0) THEN
WRITE (*,*) 'Jacobian Array = 0.0', k , l
CALL Error ('KickJacobian(k , l) = 0.0')
KickVARIABLES%KickJacobian(k , l) = KickVARIABLES%OldKickJacobian(k , l)
END IF
END DO
END DO
IF (ANY(IEEE_IS_NaN(KickVARIABLES%KickJacobian))) CALL ErrorStop ('NaN in calculating Kick Jacobian, Call your Service Provider')
!!!!!!!!!! Solving linear equation in order to finding correction vector for correcting pocket pressure and gas induced flowrates
KickVARIABLES%KickVandPFunction = -1.d0 * KickVARIABLES%KickVandPFunction
CALL SOLVE_LINEAR_EQUATIONS(KickVARIABLES%KickJacobian , KickVARIABLES%KickCorrectionVector , KickVARIABLES%KickVandPFunction , KickVARIABLES%SolvingEquationError, SIZE(KickVARIABLES%KickCorrectionVector))
IF (KickVARIABLES%SolvingEquationError) CALL ErrorStop( ' Error in solving kick equation ' )
KickVARIABLES%KickUnknownVector = KickVARIABLES%KickUnknownVector + KickVARIABLES%KickCorrectionUnderRelaxation * KickVARIABLES%KickCorrectionVector
DO l = 1 , KickVARIABLES%NoGasPocket
GasPocketNewVol%Array(l) = KickVARIABLES%KickUnknownVector(2 * l - 1)
IF (IEEE_IS_NaN(GasPocketNewVol%Array(l))) CALL ErrorStop('Volume of this pocket is Not a Number:', l)
IF (GasPocketNewVol%Array(l) <= 0.d0) CALL Error('Volume of this pocket is Negative or Zero:', l)
GasPocketNewPress%Array(l) = KickVARIABLES%KickUnknownVector(2 * l)
IF (IEEE_IS_NaN(GasPocketNewPress%Array(l))) CALL ErrorStop('Pressure of this Pocket is Not a Number:', l)
IF (GasPocketNewPress%Array(l) <= 0.d0) CALL ErrorStop('Pressure of this Pocket is Negative or Zero:', l)
END DO
ELSE ! well haed is closed, so build up process or migration occurs
!WRITE (*,*) 'GasPocketOldPress (before)' , GasPocketOldPress(1)
GasPocketNewPress%Array(1) = GasPocketOldPress%Array(1) * &
(REAL((GasPocketWeight%Array(1) + KickVARIABLES%KickmdotACoef * KickVARIABLES%KickmdotBCoef * dt) / (GasPocketWeight%Array(1) + KickVARIABLES%KickmdotACoef * GasPocketOldPress%Array(1) * dt)))
END IF
!DO l = 1 , KickVARIABLES%NoGasPocket
GasPocketDeltaVol%Array(:) = GasPocketNewVol%Array(:) - GasPocketOldVol%Array(:)
GasPocketFlowInduced%Array(:) = (GasPocketDeltaVol%Array(:)) / dt * 448.8 ! gpm
!END DO
KickVARIABLES%GasKickPumpFlowRate = 0.0
IF (NOT(KickVARIABLES%KickOffBottom) .AND. KickVARIABLES%WellHeadOpen) KickVARIABLES%GasKickPumpFlowRate = GasPocketFlowInduced%Array(1)


END SUBROUTINE
SUBROUTINE KickFunctionsCalculator(ExitValue , GasPocketNo , CalcMode)
use SimulationVariables
use KickVARIABLESModule
USE FricPressDropVarsModule
USE Fluid_Flow_Startup_Vars
USE CError
USE , INTRINSIC :: IEEE_Arithmetic
IMPLICIT NONE
REAL(8) :: ExitValue
INTEGER :: GasPocketNo , CalcMode
INTEGER :: x
INTEGER :: y
INTEGER :: z , i , j
x = KickVARIABLES%GasPocketFlowEl(GasPocketNo , 1)
IF (GasPocketNo < KickVARIABLES%NoGasPocket) y = KickVARIABLES%GasPocketFlowEl(GasPocketNo + 1 , 1)
i = data%State%FricPressDrop%StringLastEl
j = data%State%FricPressDrop%OpenholeFirstEl - 1
! Case 1: gas pocket is completely in OP and STARTX of upper gas pocket is also
! Case 2: gas pocket is completely in OP and STARTX of upper gas pocket is above Bit
! Case 3: gas pocket is AROUNDBIT and so upper gas pocket is in ANN (or Choke line)
! Case 4: gas pocket is completely in ANN and upper gas pocket is also
! CalcMode 1: KickVandPFunction between 2 pocket
! CalcMode 2: KickVandPFunction for top gas pocket
! CalcMode 3: KickJacobian between 2 Pocket
! CalcMode 4: KickJacobian for top (last) gas pocket
! CalcMode 5: Calculating pressure of bottom pocket based on upper pocket
IF (CalcMode == 1) THEN ! calculating pressure difference between two pocket, include static pressure difference and frictional
! pressure difference, use in calculating 'KickVandPFunction'
ExitValue = KickVARIABLES%KickUnknownVector(2 * GasPocketNo) - KickVARIABLES%KickUnknownVector(2 * GasPocketNo + 2)
IF (x >= data%State%FricPressDrop%OpenholeFirstEl .AND. y < data%State%FricPressDrop%OpenholeFirstEl) THEN ! Case 2 , Case 3
ExitValue = ExitValue - SUM(FlowEl(x : data%State%FricPressDrop%NumbEl)%StaticPressDiff) - SUM(FlowEl(x : data%State%FricPressDrop%NumbEl)%FricPressLoss) &
- SUM(FlowEl(data%State%FricPressDrop%AnnulusFirstEl : y)%StaticPressDiff) - SUM(FlowEl(data%State%FricPressDrop%AnnulusFirstEl : y)%FricPressLoss)
ELSE ! Case 1 , Case 4
ExitValue = ExitValue - SUM(FlowEl(x : y)%StaticPressDiff) - SUM(FlowEl(x : y)%FricPressLoss)
END IF
ELSE IF (CalcMode == 2) THEN
ExitValue = KickVARIABLES%KickUnknownVector(2 * GasPocketNo) - StandardPress - data%State%FricPressDrop%Kchoke * FlowEl(data%State%FricPressDrop%OpenholeFirstEl - 1)%Flowrate**2
IF (x >= data%State%FricPressDrop%OpenholeFirstEl) THEN ! Gas Pocket is in Openhole
ExitValue = ExitValue - SUM(FlowEl(x : data%State%FricPressDrop%NumbEl)%StaticPressDiff) - SUM(FlowEl(x : data%State%FricPressDrop%NumbEl)%FricPressLoss) &
- SUM(FlowEl(data%State%FricPressDrop%AnnulusFirstEl : data%State%FricPressDrop%OpenholeFirstEl - 1)%StaticPressDiff) - SUM(FlowEl(data%State%FricPressDrop%AnnulusFirstEl : data%State%FricPressDrop%OpenholeFirstEl - 1)%FricPressLoss)
ELSE ! Gas Pocket is in Annulus
ExitValue = ExitValue - SUM(FlowEl(x : data%State%FricPressDrop%OpenholeFirstEl - 1)%StaticPressDiff) - SUM(FlowEl(x : data%State%FricPressDrop%OpenholeFirstEl - 1)%FricPressLoss)
END IF
ELSE IF (CalcMode == 3) THEN ! calculating derivative of pressure difference between two pocket, relative to change in flowrate
! use in calculating 'KickJacobian'
IF (x >= data%State%FricPressDrop%OpenholeFirstEl .AND. y < data%State%FricPressDrop%OpenholeFirstEl) THEN ! Top kick STARTX is in Annulus
DO z = x , data%State%FricPressDrop%NumbEl ! open hole elements
CALL PartialDerivativeFricToFlowRate(z)
IF (IEEE_IS_NaN(FlowEl(z)%FricToQPartialDiff)) THEN
WRITE (*,*) ' FricToQPartialDiff , GenRe ' , x , FlowEl(z)%FricToQPartialDiff , FlowEl(z)%GenRe
WRITE (*,*) ' Op start, end, density, Q, mu' , FlowEl(z)%StartX, FlowEl(z)%EndX, FlowEl(z)%Density, FlowEl(z)%FlowRate, FlowEl(z)%mueff
CALL ErrorStop('NaN in calculating partial derivative')
END IF
END DO
DO z = data%State%FricPressDrop%AnnulusFirstEl , y ! Annulus elements
CALL PartialDerivativeFricToFlowRate(z)
IF (IEEE_IS_NaN(FlowEl(z)%FricToQPartialDiff)) THEN
WRITE (*,*) ' FricToQPartialDiff , GenRe ' , x , FlowEl(z)%FricToQPartialDiff , FlowEl(z)%GenRe
WRITE (*,*) ' Op start, end, density, Q, mu' , FlowEl(z)%StartX, FlowEl(z)%EndX, FlowEl(z)%Density, FlowEl(z)%FlowRate, FlowEl(z)%mueff
CALL ErrorStop('NaN in calculating partial derivative')
END IF
END DO
ExitValue = ExitValue - (SUM(FlowEl(x : data%State%FricPressDrop%NumbEl)%FricToQPartialDiff) + SUM(FlowEl(data%State%FricPressDrop%AnnulusFirstEl : y)%FricToQPartialDiff)) * 448.8 / dt
ELSE ! both pockets are one side of bit
DO z = x , y
CALL PartialDerivativeFricToFlowRate(z)
IF (IEEE_IS_NaN(FlowEl(z)%FricToQPartialDiff)) THEN
WRITE (*,*) ' FricToQPartialDiff , GenRe ' , x , FlowEl(z)%FricToQPartialDiff , FlowEl(z)%GenRe
WRITE (*,*) ' Op start, end, density, Q, mu' , FlowEl(z)%StartX, FlowEl(z)%EndX, FlowEl(z)%Density, FlowEl(z)%FlowRate, FlowEl(z)%mueff
CALL ErrorStop('NaN in calculating partial derivative')
END IF
END DO
ExitValue = ExitValue - SUM(FlowEl(x : y)%FricToQPartialDiff) * 448.8 / dt
END IF
ELSE IF (CalcMode == 4) THEN ! partial derivative of frictional pressure drop relative to flowrate for top gas pocket
ExitValue = - 2.d0 * data%State%FricPressDrop%Kchoke * FlowEl(data%State%FricPressDrop%OpenholeFirstEl - 1)%Flowrate * 448.8 / dt
IF (x >= data%State%FricPressDrop%OpenholeFirstEl) THEN ! kick STARTX is in openhole
DO z = x , data%State%FricPressDrop%NumbEl ! open hole elements
CALL PartialDerivativeFricToFlowRate(z)
IF (IEEE_IS_NaN(FlowEl(z)%FricToQPartialDiff)) THEN
WRITE (*,*) ' FricToQPartialDiff , GenRe ' , x , FlowEl(z)%FricToQPartialDiff , FlowEl(z)%GenRe
WRITE (*,*) ' Op start, end, density, Q, mu' , FlowEl(z)%StartX, FlowEl(z)%EndX, FlowEl(z)%Density, FlowEl(z)%FlowRate, FlowEl(z)%mueff
CALL ErrorStop('NaN in calculating partial derivative')
END IF
END DO
DO z = data%State%FricPressDrop%AnnulusFirstEl , data%State%FricPressDrop%OpenholeFirstEl - 1 ! Annulus elements
CALL PartialDerivativeFricToFlowRate(z)
IF (IEEE_IS_NaN(FlowEl(z)%FricToQPartialDiff)) THEN
WRITE (*,*) ' FricToQPartialDiff , GenRe ' , x , FlowEl(z)%FricToQPartialDiff , FlowEl(z)%GenRe
WRITE (*,*) ' Op start, end, density, Q, mu' , FlowEl(z)%StartX, FlowEl(z)%EndX, FlowEl(z)%Density, FlowEl(z)%FlowRate, FlowEl(z)%mueff
CALL ErrorStop('NaN in calculating partial derivative')
END IF
END DO
ExitValue = ExitValue - (SUM(FlowEl(x : data%State%FricPressDrop%NumbEl)%FricToQPartialDiff) + SUM(FlowEl(data%State%FricPressDrop%AnnulusFirstEl : data%State%FricPressDrop%OpenholeFirstEl - 1)%FricToQPartialDiff)) * 448.8 / dt
ELSE
DO z = x , data%State%FricPressDrop%OpenholeFirstEl - 1 ! Annulus elements
CALL PartialDerivativeFricToFlowRate(z)
IF (IEEE_IS_NaN(FlowEl(z)%FricToQPartialDiff)) THEN
WRITE (*,*) ' FricToQPartialDiff , GenRe ' , x , FlowEl(z)%FricToQPartialDiff , FlowEl(z)%GenRe
WRITE (*,*) ' Op start, end, density, Q, mu' , FlowEl(z)%StartX, FlowEl(z)%EndX, FlowEl(z)%Density, FlowEl(z)%FlowRate, FlowEl(z)%mueff
CALL ErrorStop('NaN in calculating partial derivative')
END IF
END DO
ExitValue = ExitValue - SUM(FlowEl(x : data%State%FricPressDrop%OpenholeFirstEl - 1)%FricToQPartialDiff) * 448.8 / dt
END IF
ELSE IF (CalcMode == 5) THEN
IF (x >= data%State%FricPressDrop%OpenholeFirstEl .AND. y < data%State%FricPressDrop%OpenholeFirstEl) THEN ! Gas Pocket is in Openhole and upper pocket is in annulus
!WRITE (*,*) 'x , y 1' , x, y
ExitValue = GasPocketNewPress%Array(GasPocketNo + 1) + SUM(FlowEl(x : data%State%FricPressDrop%NumbEl)%StaticPressDiff) + SUM(FlowEl(data%State%FricPressDrop%AnnulusFirstEl : y)%StaticPressDiff)
ELSE ! Both gas pockets are in Annulus or openhole
!WRITE (*,*) 'x , y 2' , x, y
ExitValue = GasPocketNewPress%Array(GasPocketNo + 1) + SUM(FlowEl(x : y)%StaticPressDiff)
END IF
END IF
END SUBROUTINE
SUBROUTINE NewGasKick
use SimulationVariables
use KickVARIABLESModule
use SimulationVariables !@
Use CReservoirVariables
Use CFormationVariables
USE Fluid_Flow_Startup_Vars
use PressureDisplayVARIABLESModule
USE FricPressDropVarsModule
USE MudSystemVARIABLES
use SimulationVariables !@@@
USE CMudPropertiesVariables
USE CError
USE , INTRINSIC :: IEEE_ARITHMETIC
!! Note: a subject that may be confusing is that when we use gauge pressure and when using absolute pressure?!
!! all stated pressure are gauge pressure, so I do like this.
!! only when we want to use a state equation (like ideal gas equation), we should use absolute equation and so I do this.
!! Thus gas pocket pressure are all absolute pressure.
IMPLICIT NONE
INTEGER :: i , j , k , l
IF (NOT(ALLOCATED(GasPocketWeight%Array))) THEN ! 1st kick
WRITE (*,*) ' New Influx 1'
KickVARIABLES%NoGasPocket = 1
data%State%MudSystem%NewInfluxNumber = data%State%MudSystem%NewInfluxNumber + 1
data%State%MudSystem%NewInfluxElementCreated = 0
KickVARIABLES%KickOffBottom = .FALSE.

CALL GasPocketOldPress%AddToFirst((KickVARIABLES%BottomHolePress + StandardPress) * 1.d0)
CALL GasPocketNewPress%AddToFirst((KickVARIABLES%BottomHolePress + StandardPress) * 1.d0)
CALL GasPocketOldTemp%AddToFirst(600.0)
CALL GasPocketNewTemp%AddToFirst(600.0)
CALL GasPocketOldVol%AddToFirst(0.d0)
CALL GasPocketNewVol%AddToFirst(0.d0)
CALL GasPocketdeltaVol%AddToFirst(0.0)
CALL GasPocketFlowInduced%AddToFirst(0.0)
CALL GasPocketModifiedVol%AddToFirst(0.0)
CALL GasPocketWeight%AddToFirst(0.0)
CALL GasPocketDensity%AddToFirst(2.0)
CALL GasPocketCompressibility%AddToFirst(0.98)
ALLOCATE(KickVARIABLES%KickJacobian(2 , 2) , KickVARIABLES%OldKickJacobian(2 , 2) , KickVARIABLES%KickVandPFunction(2) , KickVARIABLES%KickUnknownVector(2) , KickVARIABLES%KickCorrectionVector(2))
KickVARIABLES%BottomHoleTemperature = 600
KickVARIABLES%KickFluxAvgPressure = (KickVARIABLES%BottomHolePress + KickVARIABLES%FormPressure) / 2 + StandardPress
KickVARIABLES%KickFluxAvgTemperature = (KickVARIABLES%FormTemperature + KickVARIABLES%BottomHoleTemperature) / 2
KickVARIABLES%KickFluxAvgCompressibility = 0.98

KickVARIABLES%GasKickSIDensity = KickVARIABLES%KickFluxAvgPressure / (KickVARIABLES%KickFluxAvgCompressibility * &
KickVARIABLES%KickFluxAvgTemperature * data%State%GasType(KickVARIABLES%KickGasType)%GasConstant) * Convpcftogpcm3
KickVARIABLES%GasKickDensity = KickVARIABLES%GasKickSIDensity * 8.3523
GasPocketWeight%Array(1) = KickVARIABLES%GasKickDensity * KickVARIABLES%MinKickVol !1.0:seyyed gofte !KickmdotACoef * (KickmdotBCoef - GasPocketNewPress%Array(1)) * dt
GasPocketNewVol%Array(1) = GasPocketCompressibility%Array(1) * data%State%GasType(KickVARIABLES%KickGasType)%GasConstant * &
GasPocketNewTemp%Array(1) * GasPocketWeight%Array(1) / GasPocketNewPress%Array(1)
GasPocketDeltaVol%Array(1) = 0.05 !GasPocketNewVol%Array(1)
GasPocketFlowInduced%Array(1) = (GasPocketDeltaVol%Array(1)) / dt * 448.8 ! gpm
KickVARIABLES%GasKickPumpFlowRate = GasPocketFlowInduced%Array(1)
WRITE (*,*) ' FormPressure , BottomHolePress' , KickVARIABLES%FormPressure , KickVARIABLES%BottomHolePress, KickVARIABLES%GasKickDensity
WRITE (*,*) ' No Press(psia) Vol(gal) Weight(lbm) Flow Induced(gpm)'
DO i = 1 , KickVARIABLES%NoGasPocket
WRITE (*,102) i , GasPocketNewPress%Array(i), GasPocketNewVol%Array(i) * Convft3toUSgal, GasPocketWeight%Array(i), GasPocketFlowInduced%Array(i)
END DO
!ELSE IF (NoGasPocket < MaxGasPocket .AND. KickVARIABLES%KickOffBottom .AND. (GasPocketNewVol%Array(1) > KickVARIABLES%MinAllowableKickVol .OR. KickWasExitingThroughChoke)) THEN
ELSE IF (KickVARIABLES%NoGasPocket < KickVARIABLES%MaxGasPocket .AND. KickVARIABLES%KickOffBottom .AND. (GasPocketNewVol%Array(1) > KickVARIABLES%MinAllowableKickVol .OR. ANY(KickVARIABLES%GasPocketFlowEl(1 , :) == data%State%FricPressDrop%OpenholeFirstEl - 1))) THEN
WRITE (*,*) ' New Influx', KickVARIABLES%NoGasPocket + 1
102 FORMAT (I2, 4X, (F8.1), 3X, (F8.3), 2X, (F8.3), 8X, (F8.3))
KickVARIABLES%NoGasPocket = KickVARIABLES%NoGasPocket + 1
data%State%MudSystem%NewInfluxNumber = data%State%MudSystem%NewInfluxNumber + 1
data%State%MudSystem%NewInfluxElementCreated = 0
KickVARIABLES%KickOffBottom = .FALSE.

CALL GasPocketOldPress%AddToFirst((KickVARIABLES%BottomHolePress + StandardPress) * 1.d0)
CALL GasPocketNewPress%AddToFirst((KickVARIABLES%BottomHolePress + StandardPress) * 1.d0)
CALL GasPocketOldTemp%AddToFirst(600.0)
CALL GasPocketNewTemp%AddToFirst(600.0)
CALL GasPocketOldVol%AddToFirst(0.d0)
CALL GasPocketNewVol%AddToFirst(0.d0)
CALL GasPocketdeltaVol%AddToFirst(0.0)
CALL GasPocketFlowInduced%AddToFirst(0.0)
CALL GasPocketModifiedVol%AddToFirst(0.0)
CALL GasPocketWeight%AddToFirst(0.0)
CALL GasPocketDensity%AddToFirst(2.0)
CALL GasPocketCompressibility%AddToFirst(0.98)
DEALLOCATE(KickVARIABLES%KickJacobian , KickVARIABLES%OldKickJacobian , KickVARIABLES%KickVandPFunction , KickVARIABLES%KickUnknownVector , KickVARIABLES%KickCorrectionVector)
ALLOCATE(KickVARIABLES%KickJacobian(2 * KickVARIABLES%NoGasPocket , 2 * KickVARIABLES%NoGasPocket) , KickVARIABLES%OldKickJacobian(2 * KickVARIABLES%NoGasPocket , 2 * KickVARIABLES%NoGasPocket))
ALLOCATE(KickVARIABLES%KickUnknownVector(2 * KickVARIABLES%NoGasPocket) , KickVARIABLES%KickCorrectionVector(2 * KickVARIABLES%NoGasPocket) , KickVARIABLES%KickVandPFunction(2 * KickVARIABLES%NoGasPocket))
KickVARIABLES%BottomHoleTemperature = 600
KickVARIABLES%KickFluxAvgPressure = (KickVARIABLES%BottomHolePress + KickVARIABLES%FormPressure) / 2 + StandardPress
KickVARIABLES%KickFluxAvgTemperature = (KickVARIABLES%FormTemperature + KickVARIABLES%BottomHoleTemperature) / 2
KickVARIABLES%KickFluxAvgCompressibility = 0.98

KickVARIABLES%GasKickSIDensity = KickVARIABLES%KickFluxAvgPressure / (KickVARIABLES%KickFluxAvgCompressibility * &
KickVARIABLES%KickFluxAvgTemperature * data%State%GasType(KickVARIABLES%KickGasType)%GasConstant) * Convpcftogpcm3
KickVARIABLES%GasKickDensity = KickVARIABLES%GasKickSIDensity * 8.3523

!GasPocketWeight%Array(1) = KickVARIABLES%GasKickDensity * 0.05 !KickmdotACoef * (KickmdotBCoef - GasPocketNewPress%Array(1)) * dt
GasPocketWeight%Array(1) = KickVARIABLES%GasKickDensity * KickVARIABLES%MinKickVol !1.0:seyyed gofte !KickmdotACoef * (KickmdotBCoef - GasPocketNewPress%Array(1)) * dt
GasPocketNewVol%Array(1) = GasPocketCompressibility%Array(1) * data%State%GasType(KickVARIABLES%KickGasType)%GasConstant * &
GasPocketNewTemp%Array(1) * GasPocketWeight%Array(1) / GasPocketNewPress%Array(1)
GasPocketDeltaVol%Array(1) = 0.05 !GasPocketNewVol%Array(1)
GasPocketFlowInduced%Array(1) = (GasPocketDeltaVol%Array(1)) / dt * 448.8 ! gpm
KickVARIABLES%GasKickPumpFlowRate = GasPocketFlowInduced%Array(1)
WRITE (*,*) ' FormPressure , BottomHolePress' , KickVARIABLES%FormPressure , KickVARIABLES%BottomHolePress, KickVARIABLES%GasKickDensity
WRITE (*,*) ' No Press(psia) Vol(gal) Weight(lbm) Flow Induced(gpm)'
DO i = 1 , KickVARIABLES%NoGasPocket
WRITE (*,102) i , GasPocketNewPress%Array(i), GasPocketNewVol%Array(i) * Convft3toUSgal, GasPocketWeight%Array(i), GasPocketFlowInduced%Array(i)
END DO
ELSE ! no new kick, so mass of 1st kick should increase
GasPocketWeight%Array(1) = GasPocketweight%Array(1) + KickVARIABLES%KickmdotACoef * (KickVARIABLES%KickmdotBCoef - GasPocketNewPress%Array(1)) * dt
KickVARIABLES%GasKickPumpFlowRate = GasPocketFlowInduced%Array(1)
IF (KickVARIABLES%NoGasPocket > 1 .OR. KickVARIABLES%SecondaryKickWeight > 0.0) THEN
KickVARIABLES%SecondaryKickWeight = KickVARIABLES%SecondaryKickWeight + KickVARIABLES%KickmdotACoef * (KickVARIABLES%KickmdotBCoef - GasPocketNewPress%Array(1)) * dt
KickVARIABLES%SecondaryKickVol = KickVARIABLES%SecondaryKickWeight / KickVARIABLES%GasReservoirDensity / 42.0 ! 42 USGal = 1bbl
END IF
END IF
END SUBROUTINE

+ 3
- 0
Makefile Voir le fichier

@@ -390,6 +390,9 @@ OBJS_F = $(patsubst %.o,$(OBJ_DIR)/%.o,$(OBJS_T2))
all: $(TARGET)
c:
cc Redis/redis_io.c -c -o obj/redis_io.o
$(TARGET): $(OBJS_F)
@echo "make TARGET"
cc Redis/redis_io.c -c -o obj/redis_io.o


+ 96
- 46
Redis/Redis_Interface.f90 Voir le fichier

@@ -1,5 +1,10 @@
Module RedisInterface
! use iso_c_binding, only: c_char
use iso_c_binding, only: c_char
! USE Kinds, ONLY: rk, ck
TYPE FString
CHARACTER(KIND=c_char,LEN=:),allocatable :: item
END TYPE FString
character(len=20000)::buffer
Interface
SUBROUTINE addnums(a, b) BIND(C,name='addnums')
USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_INT
@@ -26,6 +31,14 @@ Module RedisInterface
type(c_ptr) :: getData_C
END FUNCTION getData_C
SUBROUTINE getData_C_bystr(str) BIND(C,name='getData_bystr')
use iso_c_binding, only: c_ptr,c_int,c_char
type(c_ptr) :: str
END SUBROUTINE getData_C_bystr
SUBROUTINE getData_C_byfile() BIND(C,name='getData_byfile')
END SUBROUTINE getData_C_byfile
SUBROUTINE deallocateData() BIND(C, name='deallocData')
END SUBROUTINE deallocateData
@@ -39,25 +52,6 @@ Module RedisInterface
character(len=*) :: password,address,datakey
integer::port,status
character(len=:),allocatable::c_address,c_password,c_datakey
! type(json_file) :: jsonfile
! type(json_value),pointer :: jsonvalue,jsonvalue2
! type(json_core) :: jsoncore
! call jsonfile%initialize()
! print *,"Initilized: simulation with ",configFilename
! call jsonfile%load_file(configFilename);
! if (jsonfile%failed()) then
! print *,"can not open config file: ",configFilename ;
! stop
! endif
! ! print *,"file read"
! call jsonfile%json_file_get_root(jsonvalue)
! call jsoncore%get(jsonvalue,'redis',jsonvalue2)
! call jsoncore%get(jsonvalue2,"address",address);
! call jsoncore%get(jsonvalue2,"port",port);
! call jsoncore%get(jsonvalue2,"password",password);
! call jsoncore%get(jsonvalue2,"datakey",datakey);
c_datakey = datakey//c_null_char
c_password = password//c_null_char
c_address = address//c_null_char
@@ -89,49 +83,105 @@ Module RedisInterface
call setData_C(part,c_str)
END SUBROUTINE setInput
SUBROUTINE getData(string)
use iso_c_binding, only: c_char,c_ptr,c_f_pointer,c_null_ptr
SUBROUTINE getData(string,len)
use iso_c_binding, only: c_char,c_ptr,c_f_pointer,c_null_ptr,c_int
! character(:),allocatable :: getData2
character(:),allocatable :: string
integer :: string_shape(1)
integer(c_int):: len
type(c_ptr) :: c_string
integer::l
l = 30000
! print *,"reading data l=",l
c_string = getData_C(l)
! print *,"data read. l=",l
! len = int(c_len,kind=kind(len))
string_shape(1) = l!int(l,kind=kind(Integer))
print *,"reading data l=",l
if(.not. allocated(string)) then
print *,"allocate string"
allocate(character(l) :: string)
endif
len = l
c_string = getData_C(len)
! print *,"data read. l=",l
! len = int(c_len,kind=kind(len))
call c_f_pointer(c_string, string, string_shape)
c_string=c_null_ptr
string = trim(string)
! string = trim(string)
! print *,len_trim(string), "chars read."
! print *,string(1:l)
! getData2=string
END SUBROUTINE getData
! SUBROUTINE getData2(string) !result(string)
! use iso_c_binding, only: c_char,c_ptr,c_f_pointer,c_null_ptr
! ! character(:),allocatable :: getData2
! character(:),allocatable :: string
! integer :: string_shape(1)
! type(c_ptr) :: c_string
! integer::l
! ! print *,"reading data (getData2)"
! c_string = getData_C(l)
! ! string = c_str
! ! len = int(c_len,kind=kind(len))
! string_shape(1) = l! int(l,kind=kind(integer))
! if(.not. allocated(string)) allocate(character(l) :: string)
! call c_f_pointer(c_string, string, string_shape)
! c_string=c_null_ptr
! ! print *,len_trim(string), "chars read."
! ! print *,string(1:l)
! ! getData2=string
! END SUBROUTINE getData2
SUBROUTINE getData2(string) !result(string)
use iso_c_binding, only: c_char,c_ptr,c_f_pointer,c_null_ptr,c_loc
! character(:),allocatable :: getData2
character(len=:,kind=c_char),allocatable :: string
integer :: string_shape(1)
type(c_ptr) :: c_string
TYPE(FString), TARGET :: f_str
integer::l
! print *,"reading data (getData2)"
call getData_C_bystr(c_loc(f_str))
! CALL MOVE_ALLOC(f_str%item, string)
string = trim(buffer)
! string = c_str
! len = int(c_len,kind=kind(len))
! string_shape(1) = l! int(l,kind=kind(integer))
! if(.not. allocated(string)) allocate(character(l) :: string)
! call c_f_pointer(c_string, string, string_shape)
! c_string=c_null_ptr
! print *,len_trim(string), "chars read."
! print *,string(1:l)
END SUBROUTINE getData2
SUBROUTINE getData3(key,string)
use iso_c_binding, only: c_char,c_ptr,c_f_pointer,c_null_ptr,c_loc
! character(:),allocatable :: getData2
character(len=*) :: key
character(len=:),allocatable :: string
character(len=100) :: filename
integer::iostat
! print *,"reading data (getData2)"
filename = "/var/tmp/"//key
call getData_C_byfile()
open(unit=10, file=trim(filename)//".txt", status='old', action='read', iostat=iostat)
if (iostat /= 0) then
write(*, '(A)', advance='no') "Failed to open the file."
stop
end if
! Read the content of the file into the string
read(10, '(A)', iostat=iostat) string
if (iostat /= 0) then
write(*, '(A)', advance='no') "Failed to read the file."
stop
end if
! Close the file
close(10)
END SUBROUTINE getData3
SUBROUTINE set_fortran_string(fstring_ptr, length, str) BIND(C, NAME='set_fortran_string')
USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_PTR, C_CHAR, C_INT, C_F_POINTER
TYPE(C_PTR), INTENT(IN), VALUE :: fstring_ptr
INTEGER(C_INT), INTENT(IN), VALUE :: length
CHARACTER(KIND=C_CHAR), INTENT(IN) :: str(length)
! Fortran pointer to the object referenced by fstring_ptr that
! holds the deferred length character component.
TYPE(FString), POINTER :: f_str
character(:),allocatable :: string
INTEGER :: i
integer :: string_shape(1)
!****
! Associate the Fortran pointer with the object referenced by the
! C address.
string_shape(1) = length
allocate(character(length) :: string)
CALL C_F_POINTER(fstring_ptr, string,string_shape)
! Allocate the deferred length component to the given length.
! deallocate(f_str%item)
! ALLOCATE(CHARACTER(length) :: f_str%item)
! Copy over the data.
! FORALL (i=1:length) f_str%item(i:i) = str(i)
buffer(1:length) = string(1:length)
buffer(length+1:20000) = ' '
END SUBROUTINE set_fortran_string
END Module RedisInterface

+ 96
- 46
Redis/Redis_Interface.i90 Voir le fichier

@@ -1,6 +1,11 @@
# 1 "/home/admin/SimulationCore2/Redis/Redis_Interface.f90"
Module RedisInterface
! use iso_c_binding, only: c_char
use iso_c_binding, only: c_char
! USE Kinds, ONLY: rk, ck
TYPE FString
CHARACTER(KIND=c_char,LEN=:),allocatable :: item
END TYPE FString
character(len=20000)::buffer
Interface
SUBROUTINE addnums(a, b) BIND(C,name='addnums')
USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_INT
@@ -27,6 +32,14 @@ Module RedisInterface
type(c_ptr) :: getData_C
END FUNCTION getData_C

SUBROUTINE getData_C_bystr(str) BIND(C,name='getData_bystr')
use iso_c_binding, only: c_ptr,c_int,c_char
type(c_ptr) :: str
END SUBROUTINE getData_C_bystr

SUBROUTINE getData_C_byfile() BIND(C,name='getData_byfile')
END SUBROUTINE getData_C_byfile

SUBROUTINE deallocateData() BIND(C, name='deallocData')
END SUBROUTINE deallocateData

@@ -40,25 +53,6 @@ Module RedisInterface
character(len=*) :: password,address,datakey
integer::port,status
character(len=:),allocatable::c_address,c_password,c_datakey
! type(json_file) :: jsonfile
! type(json_value),pointer :: jsonvalue,jsonvalue2
! type(json_core) :: jsoncore

! call jsonfile%initialize()
! print *,"Initilized: simulation with ",configFilename
! call jsonfile%load_file(configFilename);
! if (jsonfile%failed()) then
! print *,"can not open config file: ",configFilename ;
! stop
! endif
! ! print *,"file read"
! call jsonfile%json_file_get_root(jsonvalue)
! call jsoncore%get(jsonvalue,'redis',jsonvalue2)
! call jsoncore%get(jsonvalue2,"address",address);
! call jsoncore%get(jsonvalue2,"port",port);
! call jsoncore%get(jsonvalue2,"password",password);
! call jsoncore%get(jsonvalue2,"datakey",datakey);

c_datakey = datakey//c_null_char
c_password = password//c_null_char
c_address = address//c_null_char
@@ -90,49 +84,105 @@ Module RedisInterface
call setData_C(part,c_str)
END SUBROUTINE setInput

SUBROUTINE getData(string)
use iso_c_binding, only: c_char,c_ptr,c_f_pointer,c_null_ptr
SUBROUTINE getData(string,len)
use iso_c_binding, only: c_char,c_ptr,c_f_pointer,c_null_ptr,c_int
! character(:),allocatable :: getData2
character(:),allocatable :: string
integer :: string_shape(1)
integer(c_int):: len
type(c_ptr) :: c_string
integer::l
l = 30000
! print *,"reading data l=",l
c_string = getData_C(l)
! print *,"data read. l=",l
! len = int(c_len,kind=kind(len))
string_shape(1) = l!int(l,kind=kind(Integer))
print *,"reading data l=",l
if(.not. allocated(string)) then
print *,"allocate string"
allocate(character(l) :: string)
endif
len = l
c_string = getData_C(len)
! print *,"data read. l=",l
! len = int(c_len,kind=kind(len))
call c_f_pointer(c_string, string, string_shape)
c_string=c_null_ptr
string = trim(string)
! string = trim(string)
! print *,len_trim(string), "chars read."
! print *,string(1:l)
! getData2=string
END SUBROUTINE getData

! SUBROUTINE getData2(string) !result(string)
! use iso_c_binding, only: c_char,c_ptr,c_f_pointer,c_null_ptr
! ! character(:),allocatable :: getData2
! character(:),allocatable :: string
! integer :: string_shape(1)
! type(c_ptr) :: c_string
! integer::l
! ! print *,"reading data (getData2)"
! c_string = getData_C(l)
! ! string = c_str
! ! len = int(c_len,kind=kind(len))
! string_shape(1) = l! int(l,kind=kind(integer))
! if(.not. allocated(string)) allocate(character(l) :: string)
! call c_f_pointer(c_string, string, string_shape)
! c_string=c_null_ptr
! ! print *,len_trim(string), "chars read."
! ! print *,string(1:l)
! ! getData2=string
! END SUBROUTINE getData2
SUBROUTINE getData2(string) !result(string)
use iso_c_binding, only: c_char,c_ptr,c_f_pointer,c_null_ptr,c_loc
! character(:),allocatable :: getData2
character(len=:,kind=c_char),allocatable :: string
integer :: string_shape(1)
type(c_ptr) :: c_string
TYPE(FString), TARGET :: f_str
integer::l
! print *,"reading data (getData2)"
call getData_C_bystr(c_loc(f_str))
! CALL MOVE_ALLOC(f_str%item, string)
string = trim(buffer)
! string = c_str
! len = int(c_len,kind=kind(len))
! string_shape(1) = l! int(l,kind=kind(integer))
! if(.not. allocated(string)) allocate(character(l) :: string)
! call c_f_pointer(c_string, string, string_shape)
! c_string=c_null_ptr
! print *,len_trim(string), "chars read."
! print *,string(1:l)
END SUBROUTINE getData2

SUBROUTINE getData3(key,string)
use iso_c_binding, only: c_char,c_ptr,c_f_pointer,c_null_ptr,c_loc
! character(:),allocatable :: getData2
character(len=*) :: key
character(len=:),allocatable :: string
character(len=100) :: filename
integer::iostat
! print *,"reading data (getData2)"
filename = "/var/tmp/"//key
call getData_C_byfile()
open(unit=10, file=trim(filename)//".txt", status='old', action='read', iostat=iostat)
if (iostat /= 0) then
write(*, '(A)', advance='no') "Failed to open the file."
stop
end if
! Read the content of the file into the string
read(10, '(A)', iostat=iostat) string
if (iostat /= 0) then
write(*, '(A)', advance='no') "Failed to read the file."
stop
end if
! Close the file
close(10)
END SUBROUTINE getData3
SUBROUTINE set_fortran_string(fstring_ptr, length, str) BIND(C, NAME='set_fortran_string')
USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_PTR, C_CHAR, C_INT, C_F_POINTER
TYPE(C_PTR), INTENT(IN), VALUE :: fstring_ptr
INTEGER(C_INT), INTENT(IN), VALUE :: length
CHARACTER(KIND=C_CHAR), INTENT(IN) :: str(length)
! Fortran pointer to the object referenced by fstring_ptr that
! holds the deferred length character component.
TYPE(FString), POINTER :: f_str
character(:),allocatable :: string
INTEGER :: i
integer :: string_shape(1)
!****
! Associate the Fortran pointer with the object referenced by the
! C address.
string_shape(1) = length
allocate(character(length) :: string)
CALL C_F_POINTER(fstring_ptr, string,string_shape)
! Allocate the deferred length component to the given length.
! deallocate(f_str%item)
! ALLOCATE(CHARACTER(length) :: f_str%item)
! Copy over the data.
! FORALL (i=1:length) f_str%item(i:i) = str(i)
buffer(1:length) = string(1:length)
buffer(length+1:20000) = ' '
END SUBROUTINE set_fortran_string

END Module RedisInterface

+ 47
- 2
Redis/redis_io.c Voir le fichier

@@ -5,6 +5,9 @@
redisContext *context;
char *result,*key;
extern void set_fortran_string(void* fstring_ptr, int length, const char* str);
void addnums( int* a, int* b )
{
int c = (*a) + (*b); /* convert pointers to values, then add them */
@@ -54,18 +57,60 @@ void setData(char *part, char *data)
freeReplyObject(reply);
}
void getData_bystr(void *s)
{
redisReply *reply;
reply = redisCommand(context, "GET %s.in",key);
// printf("strlen read from redis: %ld", strlen(reply->str));
// strncpy(s,reply->str,strlen(reply->str));
// printf("strlen read from redis: %ld", strlen(result));
// printf("before free");
freeReplyObject(reply);
// printf("after free");
set_fortran_string(s, strlen(reply->str), reply->str);
return;
}
void getData_byfile()
{
redisReply *reply;
reply = redisCommand(context, "GET %s.in",key);
char filename[100];
sprintf(filename,"/var/tmp/%s.txt",key);
printf("filename=%s\n",filename);
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("Failed to open the file.\n");
return;
}
// Write a string to the file
const char* message = "Hello, world!";
fprintf(file, "%s", message);
// Close the file
fclose(file);
freeReplyObject(reply);
printf("String written to file successfully.\n");
return;
}
char *getData(int *len)
{
redisReply *reply;
// printf("reading data from redis (key=%s)\n",key);
reply = redisCommand(context, "GET %s.in",key);
// printf("data read from redis: %ld chars\n",strlen(reply->str));
printf("data read from redis: %ld chars\n",strlen(reply->str));
// printf("len(reply->str): %ld\n",strlen(reply->str));
// result = (char*) malloc(strlen(reply->str));
result = (char*) malloc(*len);
// printf("after malloc");
strcpy(result,reply->str);
*len = strlen(result);
int paddingLength = (*len) - strlen(reply->str);
printf("len, padding length = %d, %d\n",*len,paddingLength);
if (paddingLength > 0) {
memset(result + strlen(reply->str), ' ', paddingLength-1);
// result[*len-1] = '\0';
}
*len = strlen(reply->str);
// printf("before free");
freeReplyObject(reply);
// printf("after free");


+ 15
- 0
Rop/Bit_Database.TXT Voir le fichier

@@ -0,0 +1,15 @@
Bit Class H1 H2 H3 (w/d)max
11 , 1.9 , 7. , 1. , 7.
12 , 1.9 , 7. , 1. , 7.
13 , 1.84 , 6. , 0.8 , 8.
14 , 1.84 , 6. , 0.8 , 8.
21 , 1.8 , 5. , 0.6 , 8.5
22 , 1.8 , 5. , 0.6 , 8.5
23 , 1.76 , 4. , 0.48 , 9.
24 , 1.76 , 4. , 0.48 , 9.
31 , 1.7 , 3. , 0.36 , 10.
32 , 1.65 , 2. , 0.26 , 10.
33 , 1.6 , 2. , 0.2 , 10.
34 , 1.6 , 2. , 0.2 , 10.
41 , 1.5 , 2. , 0.18 , 10.
10 , 1.5 , 1. , 0.02 , 10.

+ 78
- 0
Rop/Bit_Specification.i90 Voir le fichier

@@ -0,0 +1,78 @@
# 1 "/home/admin/SimulationCore2/Rop/Bit_Specification.f90"
subroutine Bit_Specification
use sROP_Other_Variables
use sROP_Variables
use CStringConfigurationVariables
use SimulationVariables
implicit none
INTEGER :: io
integer :: i , BitClass_name
real(8) :: rd
!data%State%ROP_Spec%H1=1.9
!data%State%ROP_Spec%H2=7.
!data%State%ROP_Spec%H3=1.
!data%State%ROP_Spec%wdmax=7.
data%State%ROP_Spec%BitClass = (data%Configuration%StringConfiguration%BitDefinition%BitCodeHundreds*100)+(data%Configuration%StringConfiguration%BitDefinition%BitCodeTens*10)+data%Configuration%StringConfiguration%BitDefinition%BitCodeOnes
rd = SNGL(data%State%ROP_Spec%BitClass)/10.d0
data%State%ROP_Spec%BrCoef = ( (SNGL(data%State%ROP_Spec%BitClass)/10.d0)-(DINT(rd)) )*10.d0
BitClass_name = (data%State%ROP_Spec%BitClass)/10
if ( (any(BitClass_name==(/11,12,13,14,21,22,23,24,31,32,33,34,41/))) ) then
open(unit=233,file="Bit_Database.TXT")
READ (233,*)
DO i=1,13!(14-1(/=10))
READ (233,*) data%State%ROP_Spec%name, data%State%ROP_Spec%H1, data%State%ROP_Spec%H2, data%State%ROP_Spec%H3, data%State%ROP_Spec%wdmax
if ( data%State%ROP_Spec%name==BitClass_name ) then
exit
end if
END DO
close (233)
else
data%State%ROP_Spec%H1=1.50d0
data%State%ROP_Spec%H2=1.0d0
data%State%ROP_Spec%H3=.020d0
data%State%ROP_Spec%wdmax=10.0d0
end if
!print*, 'data%State%ROP_Spec%H1=' , data%State%ROP_Spec%H1
!print*, 'data%State%ROP_Spec%H2=' , data%State%ROP_Spec%H2
!print*, 'data%State%ROP_Spec%H3=' , data%State%ROP_Spec%H3
!print*, 'data%State%ROP_Spec%wdmax=' , data%State%ROP_Spec%wdmax
!print*, 'data%State%ROP_Spec%name=' , data%State%ROP_Spec%name

! filename = 'Bit_Database.TXT'
!open (UNIT=3, FILE=filename )
!!print*, 'data%State%ROP_Spec%wdmax1=' , data%State%ROP_Spec%wdmax
! !print*, 'data%State%ROP_Spec%name1=' , data%State%ROP_Spec%name
!!openif: if ( data%State%ROP_Spec%status == 0 ) then
! read (3,*,IOSTAT=data%State%ROP_Spec%status) ! Get next value
! readloop: do i=1,14
! read (3,*,IOSTAT=data%State%ROP_Spec%status) data%State%ROP_Spec%name, data%State%ROP_Spec%H1, data%State%ROP_Spec%H2, data%State%ROP_Spec%H3, data%State%ROP_Spec%wdmax ! Get next value
! !print*, 'data%State%ROP_Spec%wdmax=' , data%State%ROP_Spec%wdmax
! !print*, 'data%State%ROP_Spec%name=' , data%State%ROP_Spec%name
! if ( data%State%ROP_Spec%status /= 0 ) exit ! EXIT if not valid.
! if ( data%State%ROP_Spec%name == data%State%ROP_Spec%BitClass/10) exit
! end do readloop
!!endif openif
end subroutine

+ 6
- 0
Simulation/Constants.i90 Voir le fichier

@@ -0,0 +1,6 @@
# 1 "/home/admin/SimulationCore2/Simulation/Constants.f90"
module Constants
real,parameter::PI=3.14159265
REAL:: SG=1.12,WDENS=1000,GRAVITY=9.81,RE_CR=2000,NU=9e-6

end module Constants

+ 12
- 0
Simulation/logging.f90 Voir le fichier

@@ -0,0 +1,12 @@
module logging
integer::log_level=0
contains
subroutine logg(level,message)
integer::level
character(len=*)::message

if(log_level>=level) then
print *,message
endif
end subroutine
end module

+ 13
- 0
Simulation/logging.i90 Voir le fichier

@@ -0,0 +1,13 @@
# 1 "/home/admin/SimulationCore2/Simulation/logging.f90"
module logging
integer::log_level=0
contains
subroutine logg(level,message)
integer::level
character(len=*)::message

if(log_level>=level) then
print *,message
endif
end subroutine
end module


+ 18
- 11
Simulator.f90 Voir le fichier

@@ -67,7 +67,9 @@ module Simulator
implicit none
type(json_core):: jsoncore
integer :: simulationStatus,simulationSpeed,msPerStep,simulationEnd,simulationStep
character(len=:),allocatable::redisInput,redisOutput
character(len=:),allocatable::redisInput
character(len=:),allocatable::redisOutput
character(len=100)::simulationId
enum, bind(c)
enumerator :: PLAY = 1
enumerator :: PAUSE = 2
@@ -76,7 +78,6 @@ module Simulator
end enum
contains
FUNCTION time_ms()
INTEGER(8) :: time_ms
integer,dimension(8)::timearray
@@ -90,7 +91,7 @@ module Simulator
integer::t0,t1,t2,t3,t_read=0,t_write=0,t_exec=0,i,status,redis_port,stepTime
integer(8),dimension(12)::t,t_modules
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
simulationId = sim_id
do i=1,size(t_modules)
t_modules(i)=0
end do
@@ -246,10 +247,11 @@ module Simulator
! end subroutine
subroutine write_variables()
use CAccumulator
! use CAccumulator
use json_module
implicit none
type(json_value),pointer :: jsonroot
! character(len=:),allocatable::redisInput
character(len=10)::str
call jsoncore%initialize()
@@ -283,7 +285,10 @@ module Simulator
type(json_value),pointer :: jsonroot,pval
type(json_file) :: jsonfile
type(json_core)::json
call getData(redisOutput)
integer::len
! character(len=:),allocatable::redisOutput
! call getData3(simulationId,redisOutput)
call getData(redisOutput,len)
! print *,len(redisOutput)," bytes read from redis"
open(1,file="redisContent.json",status="REPLACE")
write(1,"(A)") redisOutput
@@ -291,7 +296,7 @@ module Simulator
call jsonfile%initialize()
call jsonfile%get_core(json)
call jsonfile%deserialize(redisOutput)
call jsonfile%deserialize(redisOutput(1:len))
call jsonfile%json_file_get_root(jsonroot)
! call json%info(jsonvalue, n_children=n_children)
! print *,"n_children =",n_children
@@ -306,21 +311,23 @@ module Simulator
call ConfigurationFromJson(jsonfile)
call jsonfile%destroy()
end subroutine
subroutine read_variables()
type(json_value),pointer :: jsonroot,pval
type(json_file) :: jsonfile
type(json_core)::json
integer::stat
call getData(redisOutput)
! character(len=:),allocatable::redisOutput
integer::stat,leng
! call getData3(simulationId,redisOutput)
call getData(redisOutput,leng)
print *,len(redisOutput)," bytes read from redis"
open(1,file="redisContent.json",status="REPLACE")
write(1,"(A)") redisOutput
close(1)
call jsonfile%initialize()
call jsonfile%get_core(json)
call jsonfile%deserialize(redisOutput)
print *,"len_trim(redidOutput)=",len_trim(redisOutput)
call jsonfile%deserialize(redisOutput(1:leng))
call jsonfile%json_file_get_root(jsonroot)
! call json%info(jsonvalue, n_children=n_children)
! print *,"n_children =",n_children


+ 18
- 11
Simulator.i90 Voir le fichier

@@ -68,7 +68,9 @@ module Simulator
implicit none
type(json_core):: jsoncore
integer :: simulationStatus,simulationSpeed,msPerStep,simulationEnd,simulationStep
character(len=:),allocatable::redisInput,redisOutput
character(len=:),allocatable::redisInput
character(len=:),allocatable::redisOutput
character(len=100)::simulationId
enum, bind(c)
enumerator :: PLAY = 1
enumerator :: PAUSE = 2
@@ -77,7 +79,6 @@ module Simulator
end enum
contains

FUNCTION time_ms()
INTEGER(8) :: time_ms
integer,dimension(8)::timearray
@@ -91,7 +92,7 @@ module Simulator
integer::t0,t1,t2,t3,t_read=0,t_write=0,t_exec=0,i,status,redis_port,stepTime
integer(8),dimension(12)::t,t_modules
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
simulationId = sim_id
do i=1,size(t_modules)
t_modules(i)=0
end do
@@ -247,10 +248,11 @@ module Simulator
! end subroutine

subroutine write_variables()
use CAccumulator
! use CAccumulator
use json_module
implicit none
type(json_value),pointer :: jsonroot
! character(len=:),allocatable::redisInput
character(len=10)::str

call jsoncore%initialize()
@@ -284,7 +286,10 @@ module Simulator
type(json_value),pointer :: jsonroot,pval
type(json_file) :: jsonfile
type(json_core)::json
call getData(redisOutput)
integer::len
! character(len=:),allocatable::redisOutput
! call getData3(simulationId,redisOutput)
call getData(redisOutput,len)
! print *,len(redisOutput)," bytes read from redis"
open(1,file="redisContent.json",status="REPLACE")
write(1,"(A)") redisOutput
@@ -292,7 +297,7 @@ module Simulator

call jsonfile%initialize()
call jsonfile%get_core(json)
call jsonfile%deserialize(redisOutput)
call jsonfile%deserialize(redisOutput(1:len))
call jsonfile%json_file_get_root(jsonroot)
! call json%info(jsonvalue, n_children=n_children)
! print *,"n_children =",n_children
@@ -307,21 +312,23 @@ module Simulator
call ConfigurationFromJson(jsonfile)
call jsonfile%destroy()
end subroutine
subroutine read_variables()
type(json_value),pointer :: jsonroot,pval
type(json_file) :: jsonfile
type(json_core)::json
integer::stat
call getData(redisOutput)

! character(len=:),allocatable::redisOutput
integer::stat,leng
! call getData3(simulationId,redisOutput)
call getData(redisOutput,leng)
print *,len(redisOutput)," bytes read from redis"
open(1,file="redisContent.json",status="REPLACE")
write(1,"(A)") redisOutput
close(1)
call jsonfile%initialize()
call jsonfile%get_core(json)
call jsonfile%deserialize(redisOutput)
print *,"len_trim(redidOutput)=",len_trim(redisOutput)
call jsonfile%deserialize(redisOutput(1:leng))
call jsonfile%json_file_get_root(jsonroot)
! call json%info(jsonvalue, n_children=n_children)
! print *,"n_children =",n_children


+ 122
- 0
TorqueDrag/TD_MainCalculations.i90 Voir le fichier

@@ -0,0 +1,122 @@
# 1 "/home/admin/SimulationCore2/TorqueDrag/TD_MainCalculations.f90"
subroutine TD_MainCalculations
Use CCasingLinerChokeVariables
Use CStringConfigurationVariables
! Use CSimulationVariables
Use TD_DrillStemComponents
use SimulationVariables !@
use SimulationVariables !@
use SimulationVariables !@
Use TD_StringConnectionData
USE FricPressDropVarsModule
USE MudSystemVARIABLES
use SimulationVariables !@@@
implicit none
Integer :: i
!Integer :: TD_SolDuration
!integer,dimension(8) :: TD_StartTime , TD_EndTime
data%State%TD_General%TimeStep = 0.1d0 ! Unit: [s]
!Call TD_StartUp
!Call TD_WellReadData
!Call TD_WellElementsReadData
!Call TD_DrillStemReadData
!Call TD_PipePropertiesReadData
!!Call TD_WellGeoConfiguration
!!Call TD_WellElementsConfiguration
!!Call TD_StringConnectionModes
!!Call TD_DrillStemConfiguration
!loop1: do
Call TD_WellGeoConfiguration
Call TD_WellElementsConfiguration
Call TD_StringConnectionModes
Call TD_DrillStemConfiguration
Call TD_ForceReadData
!===> Mud properties Read_Data from Fluid Module
!!TD_StringNoHorizontalMudElements = TDNoHorizontalMudElements
!!data%State%TD_String%NoStringMudElements = TDNoStringMudElements
!!data%State%TD_String%NoCasingMudElements = TDNoCasingMudElements
!!
!!if (allocated(TDDensity_MudElementArray) .and. (TD_StringNoHorizontalMudElements+data%State%TD_String%NoStringMudElements+data%State%TD_String%NoCasingMudElements)/=0) then
!! if (Allocated(data%State%TD_String%FluidMudDensity)) Deallocate(data%State%TD_String%FluidMudDensity)
!! Allocate(data%State%TD_String%FluidMudDensity(TD_StringNoHorizontalMudElements+data%State%TD_String%NoStringMudElements+data%State%TD_String%NoCasingMudElements))
!! data%State%TD_String%FluidMudDensity(:) = TDDensity_MudElementArray(:)
!!end if
!!
!!if (allocated(TDXend_MudElementArray)) then
!! if (Allocated(data%State%TD_String%FluidMudEndX)) Deallocate(data%State%TD_String%FluidMudEndX)
!! Allocate(data%State%TD_String%FluidMudEndX(TD_StringNoHorizontalMudElements+data%State%TD_String%NoStringMudElements+data%State%TD_String%NoCasingMudElements))
!! data%State%TD_String%FluidMudEndX(:) = TDXend_MudElementArray(:)
!!end if
!!
!!if (allocated(TDXstart_MudElementArray)) then
!! if (Allocated(data%State%TD_String%FluidMudStartX)) Deallocate(data%State%TD_String%FluidMudStartX)
!! Allocate(data%State%TD_String%FluidMudStartX(TD_StringNoHorizontalMudElements+data%State%TD_String%NoStringMudElements+data%State%TD_String%NoCasingMudElements))
!! data%State%TD_String%FluidMudStartX(:) = TDXstart_MudElementArray(:)
!!end if
if (data%State%TD_DrillStem(1)%ComponentType==0) then
Do i = 2 , data%State%TD_String%DrillStemComponentsNumbs
Call TD_MudPropertiesReadData(i)
Call TD_BouyancyFactor(i)
Call TD_CombinedMotionData(i)
End Do
data%State%TD_DrillStems(1)%MudDensityIn = data%State%TD_DrillStems(2)%MudDensityIn !(1): bit mud properties
data%State%TD_DrillStems(1)%MudDensityOut = data%State%TD_DrillStems(2)%MudDensityOut
data%State%TD_DrillStems(1)%MudWeight = data%State%TD_DrillStems(2)%MudWeight
data%State%TD_DrillStems(1)%MudPlasticVis = 5.d0+(5.d0*(data%State%TD_DrillStems(1)%MudWeight-8.3d0))
data%State%TD_DrillStems(1)%MudViscosity = 0.2d0 !data%State%TD_DrillStems(i)%MudPlasticVis
data%State%TD_DrillStems(1)%MudYieldPoint = 10.d0+(data%State%TD_DrillStems(1)%MudWeight-8.3d0)
Call TD_BouyancyFactor(1)
Call TD_CombinedMotionData(1)
else
Do i = 1 , data%State%TD_String%DrillStemComponentsNumbs
Call TD_MudPropertiesReadData(i)
Call TD_BouyancyFactor(i)
Call TD_CombinedMotionData(i)
End Do
end if
!================================================
Call TD_BOPDiamCalculation
Call TD_StaticHookLoadCalculation
Call TD_WeightOnBitCalculation
if (abs(data%State%TD_String%DrillStemAxialVelocity)>3.2808d0) then !1[m/s]=3.2808[ft/s]
Call TD_ViscousDragForce
else
data%State%TD_DrillStems%Drag = 0.d0
data%State%TD_String%DrillStemForceType = 5
end if
Call TD_ForceCalculation
Call TD_HookLoadCalculation
data%State%TD_StConn%HookHeightOld = data%State%TD_StConn%HookHeight
end subroutine TD_MainCalculations

+ 146
- 0
TorqueDrag/TD_ReadDataSubroutines/TD_DrillStemReadData.i90 Voir le fichier

@@ -0,0 +1,146 @@
# 1 "/home/admin/SimulationCore2/TorqueDrag/TD_ReadDataSubroutines/TD_DrillStemReadData.f90"
subroutine TD_DrillStemReadData
use SimulationVariables
Use CStringConfigurationVariables
Use TD_DrillStemComponents
use SimulationVariables !@
use SimulationVariables !@
Use TD_StringConnectionData
! use ConfigurationVariables !@, only: Drawworks

implicit none

Integer :: i
Integer :: TD_FirstIndex , TD_LastIndex
!====================================================
! Set Drill Stem Components Data
!====================================================
data%State%TD_String%StringConfigurationCount = data%Configuration%StringConfiguration%StringConfigurationCount
data%State%TD_String%DrillStemComponentsNumbs = 0
!########## data%State%TD_DrillStem%ComponentType ::
!#Bit_ComponentType = 0
!#Stabilizer_ComponentType = 1
!#Collar_ComponentType = 2
!#DrillPipe_ComponentType = 3
!#Heavyweight_ComponentType = 4
!#IBOP = 5
!#Kelly & SafetyValve (DrillMode) = 6
!#SafetyValve (TripMode) = 7
if (Allocated(data%State%TD_DrillStem)) deAllocate (data%State%TD_DrillStem)
Allocate (data%State%TD_DrillStem(data%State%TD_String%StringConfigurationCount+100))
Do i=1, data%State%TD_String%StringConfigurationCount
data%State%TD_DrillStem(i)%ComponentType = data%Configuration%StringConfiguration%StringConfigurations(i)%ComponentType
data%State%TD_DrillStem(i)%Numbs = data%Configuration%StringConfiguration%StringConfigurations(i)%NumberOfJoint
data%State%TD_DrillStem(i)%Id = data%Configuration%StringConfiguration%StringConfigurations(i)%NominalId/12.d0 ![ft]
data%State%TD_DrillStem(i)%Od = data%Configuration%StringConfiguration%StringConfigurations(i)%NominalOd/12.d0 ![ft]
data%State%TD_DrillStem(i)%Length = data%Configuration%StringConfiguration%StringConfigurations(i)%LengthPerJoint ![ft]
data%State%TD_DrillStem(i)%WeightperLength = data%Configuration%StringConfiguration%StringConfigurations(i)%WeightPerLength ![lb/ft]
data%State%TD_DrillStem(i)%TotalLength = data%Configuration%StringConfiguration%StringConfigurations(i)%ComponentLength
data%State%TD_DrillStem(i)%TotalWeight = data%State%TD_DrillStem(i)%TotalLength*data%State%TD_DrillStem(i)%WeightperLength
data%State%TD_String%DrillStemComponentsNumbs = data%State%TD_String%DrillStemComponentsNumbs+data%Configuration%StringConfiguration%StringConfigurations(i)%NumberOfJoint
!!=========> Set Separated Drill Stem Components Data
! TD_LastIndex = TD_LastIndex+StringConfigurations(i)%NumberOfJoint
!
! data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%ComponentType = data%State%TD_DrillStem(i)%ComponentType
! data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%Id = data%State%TD_DrillStem(i)%Id
! data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%Od = data%State%TD_DrillStem(i)%Od
! data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%Length = data%State%TD_DrillStem(i)%Length
! data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%Weight = data%State%TD_DrillStem(i)%Weight
!
! TD_FirstIndex = TD_LastIndex+1
End Do
!===> Initial Values of Removed-Volume Variables
if (data%State%TD_DrillStem(1)%ComponentType==0) then
data%State%TD_Vol%PreCount = data%State%TD_String%StringConfigurationCount-1
else
data%State%TD_Vol%PreCount = data%State%TD_String%StringConfigurationCount
end if
data%State%TD_Vol%PreElementVolume = data%State%TD_DrillStem(data%State%TD_String%StringConfigurationCount)%TotalLength*(((pi*((data%State%TD_DrillStem(data%State%TD_String%StringConfigurationCount)%Id)**2))/4.d0)) ![ft^3]
data%State%TD_Vol%PreElementLength = data%State%TD_DrillStem(data%State%TD_String%StringConfigurationCount)%TotalLength

!====================================================
! Set Separated Drill Stem Components Data
!====================================================
TD_FirstIndex = 1
TD_LastIndex = 0
if (Allocated(data%State%TD_DrillStems)) deAllocate (data%State%TD_DrillStems)
Allocate (data%State%TD_DrillStems(data%State%TD_String%DrillStemComponentsNumbs+300)) ! +300: because of: Add or Remove DrillStem Components
Call TD_DrillStemStartUp
Do i=1, data%State%TD_String%StringConfigurationCount
TD_LastIndex = TD_LastIndex+data%Configuration%StringConfiguration%StringConfigurations(i)%NumberOfJoint
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%ComponentType = data%State%TD_DrillStem(i)%ComponentType
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%Id = data%State%TD_DrillStem(i)%Id
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%Od = data%State%TD_DrillStem(i)%Od
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%Area = (pi*((data%State%TD_DrillStem(i)%Od**2)-(data%State%TD_DrillStem(i)%Id**2)))/4.0d0
if (data%State%TD_DrillStem(i)%ComponentType == 3 .or. data%State%TD_DrillStem(i)%ComponentType == 4) then
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%RtoolJoint = data%State%TD_DrillStem(i)%Od*1.30d0/2.0d0
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%ToolJointRange = data%State%TD_String%ToolJointRange
else if (data%State%TD_DrillStem(i)%ComponentType == 1 .or. data%State%TD_DrillStem(i)%ComponentType == 2) then
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%RtoolJoint = data%State%TD_DrillStem(i)%Od/2.0d0
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%ToolJointRange = data%State%TD_String%ToolJointRange
else if (data%State%TD_DrillStem(i)%ComponentType == 0) then
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%RtoolJoint = data%State%TD_DrillStem(i)%Od
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%ToolJointRange = 0.0d0
end if
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%Length = data%State%TD_DrillStem(i)%Length
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%LengthIni = data%State%TD_DrillStem(i)%Length
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%WeightperLength= data%State%TD_DrillStem(i)%WeightperLength
data%State%TD_DrillStems(TD_FirstIndex:TD_LastIndex)%Weight = data%State%TD_DrillStem(i)%WeightperLength*data%State%TD_DrillStem(i)%Length
TD_FirstIndex = TD_LastIndex+1
End Do

!====================================================
! Set Hook Height Data
!====================================================
data%State%TD_StConn%HookHeightOld = data%State%Drawworks%Hook_Height_ini
data%State%TD_StConn%HookHeight = data%State%TD_StConn%HookHeightOld
end subroutine

+ 1
- 0
first_demo.sh Voir le fichier

@@ -0,0 +1 @@
./SimulationCore2 aberama.iran.liara.ir 32815 4YKFnubfFFjfh4yTK7b0Rg9X 60f8144a-c1b7-4d1a-5d99-08db9e4e35f5 5

+ 1
- 1
redisContent.json
Fichier diff supprimé car celui-ci est trop grand
Voir le fichier


Chargement…
Annuler
Enregistrer