|
- module Simulator
- use RedisInterface
- use Bop
- use PumpsMain
- use RopMain
- use RotaryTableMain
- use DrawworksMain
- use FluidFlowMain
- use TorqueDragMain
- use MudSystemMain
- use PipeRams1Main
- use PipeRams2Main
- use KillLineMain
- use ChokeLineMain
- use BlindRamsMain
- use AnnularMain
- use TopDriveMain
- use CManifolds
- use GeoMain
- use ChokeControlMain
- use COperationScenariosMain
-
- ! For Json read and write
- use CStringConfiguration
- use CFormation
- use CReservoir
- use CShoe
- use CAccumulator
- use CBopStack
- use CHoisting
- use CPower
- use CPumpsVariables
- use CRigSize
- use CCasingLinerChoke
- use CPathGeneration
- use CWellSurveyData
- use MudPropertiesModule
-
- use CBitProblems
- use CBopProblems
- use CChokeProblems
- use CDrillStemProblems
- use CGaugesProblems
- use CHoistingProblems
- use CKickProblems
- use CLostProblems
- use CMudTreatmentProblems
- use COtherProblems
- use CPumpProblems
- use CRotaryProblems
-
- use OperationScenariosModule
- use PermissionsModule
- use UnitySignalsModule
-
- use CBopControlPanel
- use CChokeControlPanel
- use CChokeManifold
- use CDataDisplayConsole
- use CDrillingConsole
- use CHook
- use CStandPipeManifold
- use CTopDrivePanel
- use DrillingWatchModule
- use CTanks
-
- use :: json_module, rk => json_rk
-
- implicit none
- type(json_file) :: jsonfile
- type(json_value),pointer :: jsonvalue
- type(json_core) :: jsoncore
- logical :: is_found
- character(len=:),allocatable::redisContent
-
- contains
- subroutine Simulate
- integer :: t
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- t=0
- ! call initConnection()
- ! print *,"redis exmaple program"
-
- ! call jsoncore%create_object(jsonvalue,'')
- ! call ConfigurationToJson(jsonvalue)
- ! call WarningsToJson(jsonvalue)
- ! call ProblemsToJson(jsonvalue)
- ! print *,"write starts"
- ! call jsoncore%serialize(jsonvalue,redisContent)
- ! ! s = "Test redis write!"
- ! call setData(redisContent)
- ! print *,"write ends len=",len(redisContent)
-
- ! call getData(s2)
- ! print *,"len(read)=",len(s2)
- ! print *, s2(1:10),' .... ', s2(len(s2)-10:len(s2))
- ! call deallocateData()
- ! ! print *,"S2 = ",s2
- ! deallocate(s2)
-
- call jsoncore%create_object(jsonvalue,'')
- call initConnection()
- call write_variables()
- call read_variables()
- call jsoncore%print(jsonvalue,'test.json')
- call jsoncore%destroy(jsonvalue)
-
- ! print *,"s2=",redisContent
- ! call deallocateData()
- ! print *,"redisContent Deallocated!"
- ! print *,"s2=",redisContent
- ! call init_modules()
- ! call cpu_time(T1)
- ! do while (t<0)
- ! !!read variable from shared file
- ! call read_variables()
- ! exit
- ! !! Tarmigh, Now merged with TorqueDrag (FluidFlow)
- ! ! call Rop_Step()
-
- ! !! Rafiee, nothing changed
- ! call BopStack_Step()
-
- ! !! Tarmigh, now is rewritten
- ! call Pump1_Step()
- ! !call Pump2_Step()
-
- ! !! Rafiee
- ! call ChokeControl_Step()
-
- ! !! Location ./Equipment/Rotarytable
- ! !! Variables:
- ! !! Does not have step function
- ! !! Call RTable_StartUp in the start
- ! !! Again has a loop in each step
- ! !! Tarmigh, now is rewritten
- ! call RotaryTable_Step()
-
- ! !! Location ./Equipment/Drawworks
- ! !! Variables:
- ! !! Does not have step function
- ! !! Call ..._StartUp in the start
- ! !! Again has a loop in each step
- ! !! Tarmigh, now is rewritten
- ! call Drawworks_Step()
-
- ! !! Empty nothing called
- ! !! Merged in FluidFlow
- ! ! call TorqueDrag_Step()
-
- ! !! Location: ./Equipment/MudSystem
- ! !! Variables: MudSystem_variables.f90 and MudSystem.f90
- ! !! Step function simply calls LineupAndPath in MudSystem.f90
- ! !! had not startUp
- ! !! Rafiee
- ! call MudSystem_Step()
-
- ! !! Location ./Equipment/BopStack
- ! !! Variables: VARIABLES,CBopStackVariables,CBopControlPanelVariables,CEquipmentsConstants
- ! !! Step function added, only call PIPE_RAMS1 and 2 function
- ! !! BOP_StartUp commented
- ! !! Rafiee
- ! call PipeRams1_Step()
- ! call PipeRams2_Step()
-
-
- ! !! Location ./Equipment/BopStack
- ! !! Variables: VARIABLES,CBopStackVariables,CBopControlPanelVariables,CEquipmentsConstants,CAccumulatorVariables,CSimulationVariables
- ! !! Step function added, only call PIPE_RAMS1 and PIPE_RAMS2 function
- ! !! BOP_StartUp commented
- ! !! Rafiee
- ! call KillLine_Step()
-
- ! !! Probably like other bopstack equipments
- ! !! Rafiee
- ! call ChokeLine_Step()
- ! call BlindRams_Step()
- ! call Annular_Step()
-
- ! !!Tarmigh. Step must rewrittem
- ! call TopDrive_Step()
-
- ! !!Empty
- ! ! call Geo_Step()
-
- ! !!Ahmadi
- ! call PathFinding_Step()
- ! !! Sheikh
- ! call FluidFlow_Step()
-
- ! !! Ahmadi
- ! call OperationScenarios_Step()
-
- ! !! Write variables to shared files
- ! call write_variables()
-
- ! print *,"t=",t
- ! t = t + 1
- ! end do
- ! call jsoncore%destroy(jsonvalue)
- ! call cpu_time(T2)
- ! print *,"Total Execution Time =",t2-t1
- end subroutine Simulate
-
- subroutine write_variables()
- use CAccumulator
- use json_module
- implicit none
- ! character(len=:),allocatable::s
-
- call ConfigurationToJson(jsonvalue)
- call WarningsToJson(jsonvalue)
- call ProblemsToJson(jsonvalue)
- call EquipmentsToJson(jsonvalue)
-
- print *,"write starts"
- call jsoncore%serialize(jsonvalue,redisContent)
- ! s = "Test redis write!"
- call setData(redisContent)
- print *,"write ends"
- end subroutine
-
- subroutine read_variables()
-
- ! call getData(redisContent)
- ! call jsoncore%deserialize(jsonvalue,redisContent)
-
- call jsonfile%initialize()
- call jsonfile%load_file('data-witharray.json'); if (jsonfile%failed()) stop
- call jsonfile%json_file_get_root(jsonvalue)
-
- call ConfigurationFromJson(jsonvalue)
- ! call WarningsFromJson(jsonvalue)
- ! call ProblemsFromJson(jsonvalue)
- ! call EquipmentsToJson(jsonvalue)
- ! print *,"Read from Redix:",redisContent
- ! ! Load the file.
- ! call jsonfile%load_file('config.json'); if (jsonfile%failed()) stop
- ! print *,"read complete"
- ! call jsonfile%get('t0', a1, is_found); if (.not. is_found) return
- ! call jsonfile%get('dt', a2, is_found); if (.not. is_found) return
- ! call jsonfile%get('tf', a3, is_found); if (.not. is_found) return
- ! call jsonfile%get('mu', a4, is_found); if (.not. is_found) return
- ! call jsonfile%get('x0', x0, is_found); if (.not. is_found) return
-
- ! if (is_found) then
- ! print *, a1,a2,a3,a4
- ! print *, x0
- ! end if
-
- ! call jsonfile%destroy()
- end subroutine
-
- subroutine init_modules
- !Tarmigh
- call Pump1_Init()
- !call Pump2_Step()
- call RotaryTable_Init()
- call Drawworks_Init()
- call TopDrive_Init()
- !Nothing in init (and step)
- ! call Rop_Init()
- ! call TorqueDrag_Init()
- ! call Geo_Step()
-
- !! Rafiee
- call BopStack_Init()
- call ChokeControl_Init()
- call MudSystem_Init()
- !Again calls Bop_Startup
- ! call PipeRams1_Init()
- ! call PipeRams2_Step()
- ! call KillLine_Step()
- ! call ChokeLine_Step()
- ! call BlindRams_Step()
- ! call Annular_Step()
-
- !! Sheikh
- call FluidFlow_Init()
-
- !! Ahmadi
- call PathFinding_Init()
- ! Calls OSInitialization and that sub only subscribes some notif
- ! call OperationScenarios_Init()
- end subroutine init_modules
-
- subroutine EquipmentsToJson(parent)
-
- type(json_value),pointer :: parent
- type(json_core) :: json
- type(json_value),pointer :: p
-
- ! 1. create new node
- call json%create_object(p,'Equipments')
-
- ! 2. add member of data type to new node
- call BopControlPanelToJson(p)
- call ChokeControlPanelToJson(p)
- call ChokeManifoldToJson(p)
- call DataDisplayConsoleToJson(p)
- call DrillingConsoleToJson(p)
- call HookToJson(p)
- call StandPipeManifoldToJson(p)
- call TopDrivePanelToJson(p)
- call DrillingWatchToJson(p)
- call TankToJson(p)
-
- ! 3. add new node to parent
- call json%add(parent,p)
- end subroutine
-
- subroutine ConfigurationToJson(parent)
-
- type(json_value),pointer :: parent
- type(json_core) :: json
- type(json_value),pointer :: p
-
- ! 1. create new node
- call json%create_object(p,'Configuration')
-
- ! 2. add member of data type to new node
- call StringConfigurationToJson(p)
- call FormationToJson(p)
- call ReservoirToJson(p)
- call ShoeToJson(p)
- call AccumulatorToJson(p)
- call BopStackToJson(p)
- call HoistingToJson(p)
- call PowerToJson(p)
- call PumpsToJson(p)
- call RigSizeToJson(p)
- call CasingLinerChokeToJson(p)
- call PathGenerationToJson(p)
- ! call WellSurveyDataToJson(p)
- call MudPropertiesToJson(p)
-
- ! 3. add new node to parent
- call json%add(parent,p)
- end subroutine
-
- subroutine WarningsToJson(parent)
- type(json_value),pointer :: parent
- type(json_core) :: json
- type(json_value),pointer :: p
-
- ! 1. create new node
- call json%create_object(p,'Warnings')
-
- ! 2. add member of data type to new node
- call json%add(p,"PumpWithKellyDisconnected",data%Warnings%PumpWithKellyDisconnected)
- call json%add(p,"PumpWithTopdriveDisconnected",data%Warnings%PumpWithTopdriveDisconnected)
- call json%add(p,"Pump1PopOffValveBlown",data%Warnings%Pump1PopOffValveBlown)
- call json%add(p,"Pump1Failure",data%Warnings%Pump1Failure)
- call json%add(p,"Pump2PopOffValveBlown",data%Warnings%Pump2PopOffValveBlown)
- call json%add(p,"Pump2Failure",data%Warnings%Pump2Failure)
- call json%add(p,"Pump3PopOffValveBlown",data%Warnings%Pump3PopOffValveBlown)
- call json%add(p,"Pump3Failure",data%Warnings%Pump3Failure)
- call json%add(p,"DrawworksGearsAbuse",data%Warnings%DrawworksGearsAbuse)
- call json%add(p,"RotaryGearsAbuse",data%Warnings%RotaryGearsAbuse)
- call json%add(p,"HoistLineBreak",data%Warnings%HoistLineBreak)
- call json%add(p,"PartedDrillString",data%Warnings%PartedDrillString)
- call json%add(p,"ActiveTankOverflow",data%Warnings%ActiveTankOverflow)
- call json%add(p,"ActiveTankUnderVolume",data%Warnings%ActiveTankUnderVolume)
- call json%add(p,"TripTankOverflow",data%Warnings%TripTankOverflow)
- call json%add(p,"DrillPipeTwistOff",data%Warnings%DrillPipeTwistOff)
- call json%add(p,"DrillPipeParted",data%Warnings%DrillPipeParted)
- call json%add(p,"TripWithSlipsSet",data%Warnings%TripWithSlipsSet)
- call json%add(p,"Blowout",data%Warnings%Blowout)
- call json%add(p,"UndergroundBlowout",data%Warnings%UndergroundBlowout)
- call json%add(p,"MaximumWellDepthExceeded",data%Warnings%MaximumWellDepthExceeded)
- call json%add(p,"CrownCollision",data%Warnings%CrownCollision)
- call json%add(p,"FloorCollision",data%Warnings%FloorCollision)
- call json%add(p,"TopdriveRotaryTableConfilict",data%Warnings%TopdriveRotaryTableConfilict)
-
- ! 3. add new node to parent
- call json%add(parent,p)
- end subroutine
-
- subroutine ProblemsToJson(parent)
- type(json_value),pointer :: parent
- type(json_core) :: json
- type(json_value),pointer :: p
-
- ! 1. create new node
- call json%create_object(p,'Problems')
-
- ! 2. add member of data type to new node
- call BitProblemsToJson(p)
- call BopProblemsToJson(p)
- call ChokeProblemsToJson(p)
- call DrillStemProblemsToJson(p)
- call GaugesProblemsToJson(p)
- call HoistingProblemsToJson(p)
- call KickProblemsToJson(p)
- call LostProblemsToJson(p)
- call MudTreatmentProblemsToJson(p)
- call OtherProblemsToJson(p)
- call PumpProblemsToJson(p)
- call RotaryProblemsToJson(p)
-
- ! 3. add new node to parent
- call json%add(parent,p)
- end subroutine
-
- subroutine StateToJson(parent)
-
- type(json_value),pointer :: parent
- type(json_core) :: json
- type(json_value),pointer :: p
-
- ! 1. create new node
- call json%create_object(p,'State')
-
- ! call OperationScenarioToJson(p)
- call notificationsToJson(p)
- ! call permissionsToJson(p)
- ! call unitySignalsToJson(p)
- ! call StudentStationToJson(p)
- ! call BopStackInputToJson(p)
- ! call BopStackAccToJson(p)
- ! call RamLineToJson(p)
- ! call AnnularComputationalToJson(p)
- ! call AnnularToJson(p)
- ! call PipeRam1ToJson(p)
- ! call ShearRamToJson(p)
- ! call PipeRam2ToJson(p)
- ! call ChokeLineToJson(p)
- ! call KillLineToJson(p)
- ! call PumpsToJson(p)
- ! call RAMToJson(p)
- ! call RAMSToJson(p)
- ! call ChokeToJson(p)
- ! call AirDrivenPumpToJson(p)
- ! call AirPumpLineToJson(p)
- ! call CHOOKEToJson(p)
- ! call DrawworksToJson(p)
- ! call MudSystemToJson(p)
- ! call MUDToJson(p)
- ! call MPumpsToJson(p)
- ! call PUMPToJson(p)
- ! call RTableToJson(p)
- ! call TDSToJson(p)
- ! call GasType(3)ToJson(p)
- ! call PressureDisplayToJson(p)
- ! call FricPressDropToJson(p)
- ! call ROP_SpecToJson(p)
- ! call ROP_BitToJson(p)
- ! call TDGeoToJson(p)
- ! call F_String(:)ToJson(p)
- ! call F_CountsToJson(p)
- ! call F_Interval(:)ToJson(p)
- ! call OD_Annulus(4)ToJson(p)
- ! call TD_DrillStemToJson(p)
- ! call TD_DrillStemsToJson(p)
- ! call TD_StringToJson(p)
- ! call TD_CountToJson(p)
- ! call G_StringElementToJson(p)
- ! call TD_VolToJson(p)
- ! call TD_GeneralToJson(p)
- ! call TD_BOPToJson(p)
- ! call TD_BOPElement(4)ToJson(p)
- ! call TD_StConnToJson(p)
- ! call TD_LoadToJson(p)
- ! call TD_WellElToJson(p)
- ! call TD_CasingToJson(p)
- ! call TD_LinerToJson(p)
- ! call TD_OpenHoleToJson(p)
- ! call TD_ROPHoleToJson(p)
- ! call TD_WellGeneralToJson(p)
- ! call TD_WellGeo(:)ToJson(p)
-
- ! 2. add member of data type to new node
-
- ! 3. add new node to parent
- call json%add(parent,p)
- end subroutine
-
- !use this as a template
- subroutine notificationsToJson(parent)
-
- type(json_value),pointer :: parent
- type(json_core) :: json
- type(json_value),pointer :: p
-
- ! 1. create new node
- call json%create_object(p,'Notifications')
-
- ! 2. add member of data type to new node
-
- ! 3. add new node to parent
- call json%add(parent,p)
- end subroutine
-
- subroutine ConfigurationFromJson(parent)
- type(json_value),pointer :: parent
- type(json_core) :: json
- type(json_value),pointer :: p
-
- ! 1. get related root
- call jsonfile%get('Configuration',p,is_found)
-
- call StringConfigurationFromJson(p)
- call FormationFromJson(p)
- call ReservoirFromJson(p)
- call ShoeFromJson(p)
- call AccumulatorFromJson(p)
- call BopStackFromJson(p)
- call HoistingFromJson(p)
- call PowerFromJson(p)
- call PumpsFromJson(p)
- call RigSizeFromJson(p)
- call CasingLinerChokeFromJson(p)
- call PathGenerationFromJson(p)
- call MudPropertiesFromJson(p)
-
- ! 3. add new node to parent
- call json%add(parent,p)
- end subroutine
-
- subroutine WarningsFromJson(parent)
- type(json_value),pointer :: parent
- type(json_core) :: json
- type(json_value),pointer :: p
-
- ! 1. create new node
- ! call json%create_object(p,'Warnings')
-
- ! ! 2. add member of data type to new node
- ! call json%add(p,"PumpWithKellyDisconnected",data%Warnings%PumpWithKellyDisconnected)
- ! call json%add(p,"PumpWithTopdriveDisconnected",data%Warnings%PumpWithTopdriveDisconnected)
- ! call json%add(p,"Pump1PopOffValveBlown",data%Warnings%Pump1PopOffValveBlown)
- ! call json%add(p,"Pump1Failure",data%Warnings%Pump1Failure)
- ! call json%add(p,"Pump2PopOffValveBlown",data%Warnings%Pump2PopOffValveBlown)
- ! call json%add(p,"Pump2Failure",data%Warnings%Pump2Failure)
- ! call json%add(p,"Pump3PopOffValveBlown",data%Warnings%Pump3PopOffValveBlown)
- ! call json%add(p,"Pump3Failure",data%Warnings%Pump3Failure)
- ! call json%add(p,"DrawworksGearsAbuse",data%Warnings%DrawworksGearsAbuse)
- ! call json%add(p,"RotaryGearsAbuse",data%Warnings%RotaryGearsAbuse)
- ! call json%add(p,"HoistLineBreak",data%Warnings%HoistLineBreak)
- ! call json%add(p,"PartedDrillString",data%Warnings%PartedDrillString)
- ! call json%add(p,"ActiveTankOverflow",data%Warnings%ActiveTankOverflow)
- ! call json%add(p,"ActiveTankUnderVolume",data%Warnings%ActiveTankUnderVolume)
- ! call json%add(p,"TripTankOverflow",data%Warnings%TripTankOverflow)
- ! call json%add(p,"DrillPipeTwistOff",data%Warnings%DrillPipeTwistOff)
- ! call json%add(p,"DrillPipeParted",data%Warnings%DrillPipeParted)
- ! call json%add(p,"TripWithSlipsSet",data%Warnings%TripWithSlipsSet)
- ! call json%add(p,"Blowout",data%Warnings%Blowout)
- ! call json%add(p,"UndergroundBlowout",data%Warnings%UndergroundBlowout)
- ! call json%add(p,"MaximumWellDepthExceeded",data%Warnings%MaximumWellDepthExceeded)
- ! call json%add(p,"CrownCollision",data%Warnings%CrownCollision)
- ! call json%add(p,"FloorCollision",data%Warnings%FloorCollision)
- ! call json%add(p,"TopdriveRotaryTableConfilict",data%Warnings%TopdriveRotaryTableConfilict)
-
- ! ! 3. add new node to parent
- ! call json%add(parent,p)
- end subroutine
-
- subroutine ProblemsFromJson(parent)
- type(json_value),pointer :: parent
- type(json_core) :: json
- type(json_value),pointer :: p
-
- ! 1. create new node
- ! call json%create_object(p,'Problems')
-
- ! ! 2. add member of data type to new node
- ! call BitProblemsFromJson(p)
- ! call BopProblemsFromJson(p)
- ! call ChokeProblemsFromJson(p)
- ! call DrillStemProblemsFromJson(p)
- ! call GaugesProblemsFromJson(p)
- ! call HoistingProblemsFromJson(p)
- ! call KickProblemsFromJson(p)
- ! call LostProblemsFromJson(p)
- ! call MudTreatmentProblemsFromJson(p)
- ! call OtherProblemsFromJson(p)
- ! call PumpProblemsFromJson(p)
- ! call RotaryProblemsFromJson(p)
-
- ! ! 3. add new node to parent
- ! call json%add(parent,p)
- end subroutine
-
- subroutine StateFromJson(parent)
-
- type(json_value),pointer :: parent
- type(json_core) :: json
- type(json_value),pointer :: p
-
- ! 1. create new node
- ! call json%create_object(p,'State')
-
- ! ! call OperationScenarioFromJson(p)
- ! call notificationsFromJson(p)
- ! call permissionsFromJson(p)
- ! call unitySignalsFromJson(p)
- ! call StudentStationFromJson(p)
- ! call BopStackInputFromJson(p)
- ! call BopStackAccFromJson(p)
- ! call RamLineFromJson(p)
- ! call AnnularComputationalFromJson(p)
- ! call AnnularFromJson(p)
- ! call PipeRam1FromJson(p)
- ! call ShearRamFromJson(p)
- ! call PipeRam2FromJson(p)
- ! call ChokeLineFromJson(p)
- ! call KillLineFromJson(p)
- ! call PumpsFromJson(p)
- ! call RAMFromJson(p)
- ! call RAMSFromJson(p)
- ! call ChokeFromJson(p)
- ! call AirDrivenPumpFromJson(p)
- ! call AirPumpLineFromJson(p)
- ! call CHOOKEFromJson(p)
- ! call DrawworksFromJson(p)
- ! call MudSystemFromJson(p)
- ! call MUDFromJson(p)
- ! call MPumpsFromJson(p)
- ! call PUMPFromJson(p)
- ! call RTableFromJson(p)
- ! call TDSFromJson(p)
- ! call GasType(3)FromJson(p)
- ! call PressureDisplayFromJson(p)
- ! call FricPressDropFromJson(p)
- ! call ROP_SpecFromJson(p)
- ! call ROP_BitFromJson(p)
- ! call TDGeoFromJson(p)
- ! call F_String(:)FromJson(p)
- ! call F_CountsFromJson(p)
- ! call F_Interval(:)FromJson(p)
- ! call OD_Annulus(4)FromJson(p)
- ! call TD_DrillStemFromJson(p)
- ! call TD_DrillStemsFromJson(p)
- ! call TD_StringFromJson(p)
- ! call TD_CountFromJson(p)
- ! call G_StringElementFromJson(p)
- ! call TD_VolFromJson(p)
- ! call TD_GeneralFromJson(p)
- ! call TD_BOPFromJson(p)
- ! call TD_BOPElement(4)FromJson(p)
- ! call TD_StConnFromJson(p)
- ! call TD_LoadFromJson(p)
- ! call TD_WellElFromJson(p)
- ! call TD_CasingFromJson(p)
- ! call TD_LinerFromJson(p)
- ! call TD_OpenHoleFromJson(p)
- ! call TD_ROPHoleFromJson(p)
- ! call TD_WellGeneralFromJson(p)
- ! call TD_WellGeo(:)FromJson(p)
-
- ! 2. add member of data type to new node
-
- ! 3. add new node to parent
- call json%add(parent,p)
- end subroutine
-
- !use this as a template
- subroutine notificationsFromJson(parent)
-
- type(json_value),pointer :: parent
- ! type(json_core) :: json
- ! type(json_value),pointer :: p
-
- ! 1. create new node
- ! call json%create_object(p,'Notifications')
-
- ! ! 2. add member of data type to new node
-
- ! ! 3. add new node to parent
- ! call json%add(parent,p)
- end subroutine
-
-
- end module Simulator
|