瀏覽代碼

first demo

master
mahmood19227 1 年之前
父節點
當前提交
e4ce334b25
共有 16 個檔案被更改,包括 751 行新增122 行删除
  1. +1
    -1
      .vscode/launch.json
  2. +61
    -0
      CSharp/BasicInputs/RigSpecifications/CPower.i90
  3. +17
    -0
      CSharp/BasicInputs/RigSpecifications/CPowerVariables.i90
  4. +1
    -1
      Equipments/Pumps/PumpsMain.f90
  5. +223
    -0
      Equipments/Pumps/PumpsMain.i90
  6. +50
    -0
      Equipments/Pumps/Pumps_StartUp.i90
  7. +49
    -0
      Equipments/Pumps/Pumps_VARIABLES.i90
  8. +231
    -0
      FluidFlow/Frictional_Press_Drop_Calc.i90
  9. +1
    -1
      Makefile
  10. 二進制
     
  11. +41
    -41
      SimulationCore2.f90
  12. +3
    -3
      SimulationCore2.i90
  13. +36
    -35
      Simulator.f90
  14. +36
    -35
      Simulator.i90
  15. +1
    -1
      redisContent.json
  16. +0
    -4
      simulatorManager.py

+ 1
- 1
.vscode/launch.json 查看文件

@@ -30,7 +30,7 @@
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/SimulationCore2",
"args": ["aberama.iran.liara.ir","32815","4YKFnubfFFjfh4yTK7b0Rg9X","test","5"],
"args": ["aberama.iran.liara.ir","32815","4YKFnubfFFjfh4yTK7b0Rg9X","4567bdd6-2af8-4d03-ab5e-08db9deec266","5"],
"stopAtEntry": false,
"cwd": "${workspaceRoot}",
"externalConsole": false,


+ 61
- 0
CSharp/BasicInputs/RigSpecifications/CPower.i90 查看文件

@@ -0,0 +1,61 @@
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/BasicInputs/RigSpecifications/CPower.f90"
module CPower
use SimulationVariables
use json_module
implicit none
public
contains
subroutine PowerToJson(parent)

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

! 1. create new node
call json%create_object(p,'Power')
! 2. add member of data type to new node
! call StringConfigurationToJson(p)
! call FormationToJson(p)
call json%add(p,"CementPump",data%Configuration%Power%CementPump)
call json%add(p,"Drawworks",data%Configuration%Power%Drawworks)
call json%add(p,"GeneratorPowerRating",data%Configuration%Power%GeneratorPowerRating)
call json%add(p,"MudPump1",data%Configuration%Power%MudPump1)
call json%add(p,"MudPump2",data%Configuration%Power%MudPump2)
call json%add(p,"NumberOfgenerators",data%Configuration%Power%NumberOfgenerators)
call json%add(p,"RotaryTable",data%Configuration%Power%RotaryTable)
call json%add(p,"TopDrive",data%Configuration%Power%TopDrive)
! 3. add new node to parent
call json%add(parent,p)
end subroutine

subroutine PowerFromJson(parent)
use json_module,IK =>json_ik
type(json_value),pointer :: parent
type(json_core) :: json
type(json_value),pointer :: p,pitems,pitem,pval,pbit

call json%get(parent,'Power',p)

call json%get(p,"CementPump",pitem)
call json%get(pitem,data%Configuration%Power%CementPump)
call json%get(p,"Drawworks",pitem)
call json%get(pitem,data%Configuration%Power%Drawworks)
call json%get(p,"GeneratorPowerRating",pitem)
call json%get(pitem,data%Configuration%Power%GeneratorPowerRating)
call json%get(p,"MudPump1",pitem)
call json%get(pitem,data%Configuration%Power%MudPump1)
call json%get(p,"MudPump2",pitem)
call json%get(pitem,data%Configuration%Power%MudPump2)
call json%get(p,"NumberOfgenerators",pitem)
call json%get(pitem,data%Configuration%Power%NumberOfgenerators)
call json%get(p,"RotaryTable",pitem)
call json%get(pitem,data%Configuration%Power%RotaryTable)
call json%get(p,"TopDrive",pitem)
call json%get(pitem,data%Configuration%Power%TopDrive)

end subroutine

end module CPower

+ 17
- 0
CSharp/BasicInputs/RigSpecifications/CPowerVariables.i90 查看文件

@@ -0,0 +1,17 @@
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/CSharp/BasicInputs/RigSpecifications/CPowerVariables.f90"
module CPowerVariables
implicit none
public
! variables
Type::PowerType
integer :: NumberOfgenerators
real(8) :: GeneratorPowerRating
real(8) :: MudPump1
real(8) :: MudPump2
real(8) :: CementPump
real(8) :: RotaryTable
real(8) :: Drawworks
real(8) :: TopDrive
End type PowerType
! Type(PowerType)::Power
end module CPowerVariables

+ 1
- 1
Equipments/Pumps/PumpsMain.f90 查看文件

@@ -95,7 +95,7 @@ module PumpsMain
! Call DATE_AND_TIME(values=MP_END_TIME)
! MP_SolDuration = 100-(MP_END_TIME(5)*3600000+MP_END_TIME(6)*60000+MP_END_TIME(7)*1000+MP_END_TIME(8)-MP_START_TIME(5)*3600000-MP_START_TIME(6)*60000-MP_START_TIME(7)*1000-MP_START_TIME(8))
! if(MP_SolDuration > 0.0) then
! Call sleepqq(MP_SolDuration)
! Call sleepqq(MP_SolDuration)
! end if
!
! if (IsStopped == .true.) then


+ 223
- 0
Equipments/Pumps/PumpsMain.i90 查看文件

@@ -0,0 +1,223 @@
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Equipments/Pumps/PumpsMain.f90"
module PumpsMain
use SimulationVariables
implicit none
public
contains
! ****************************************
! ***** subroutine Pump1MainBody *****
! ****************************
! subroutine Pump1_Setup()
! use CSimulationVariables
! implicit none
! call OnSimulationInitialization%Add(Pump1_Init)
! call OnSimulationStop%Add(Pump1_Init)
! call OnPump1Step%Add(Pump1_Step)
! call OnPump1Output%Add(Pump1_Output)
! call OnPump1Main%Add(Pump1MainBody)
! end subroutine
subroutine Pump1_Init
Call Pumps_StartUp
end subroutine Pump1_Init
subroutine Pump1_Step
Call Pump1_MainSolver
end subroutine Pump1_Step
! subroutine Pump1_Output
! implicit none
! end subroutine Pump1_Output
! subroutine Pump1MainBody
! use ifport
! use ifmt
! implicit none
! Call Pumps_StartUp
! loop1 : do
! Call Pumps_MainSolver

! end do loop1
! end subroutine Pump1MainBody
! ****************************************
! ***** subroutine Pump2MainBody *****
! ****************************
! subroutine Pump2_Setup()
! use CSimulationVariables
! implicit none
! call OnSimulationInitialization%Add(Pump2_Init)
! call OnSimulationStop%Add(Pump2_Init)
! call OnPump2Step%Add(Pump2_Step)
! call OnPump2Output%Add(Pump2_Output)
! call OnPump2Main%Add(Pump2MainBody)
! end subroutine
!
! subroutine Pump2_Init
! implicit none
! end subroutine Pump2_Init
!
! subroutine Pump2_Step
! call Pump2_MainSolver
! end subroutine Pump2_Step
!
! subroutine Pump2_Output
! implicit none
! end subroutine Pump2_Output
!
! subroutine Pump2MainBody
! use ifport
! use ifmt
! use CWarnings
! implicit none
!
! integer,dimension(8) :: MP_START_TIME, MP_END_TIME
! INTEGER :: MP_SolDuration
!
! Call Pump_StartUp
!
! loop1 : do
!
! Call DATE_AND_TIME(values=MP_START_TIME)
!
! Call Pump2_MainSolver
!
! Call DATE_AND_TIME(values=MP_END_TIME)
! MP_SolDuration = 100-(MP_END_TIME(5)*3600000+MP_END_TIME(6)*60000+MP_END_TIME(7)*1000+MP_END_TIME(8)-MP_START_TIME(5)*3600000-MP_START_TIME(6)*60000-MP_START_TIME(7)*1000-MP_START_TIME(8))
! if(MP_SolDuration > 0.0) then
! Call sleepqq(MP_SolDuration)
! end if
!
! if (IsStopped == .true.) then
! exit loop1
! end if
!
! end do loop1
!
!
! end subroutine Pump2MainBody
!
!
!
!
!! ****************************************
!! ***** subroutine Pump3MainBody *****
!! ****************************
! subroutine Pump3_Setup()
! use CSimulationVariables
! implicit none
! call OnSimulationInitialization%Add(Pump3_Init)
! call OnSimulationStop%Add(Pump3_Init)
! call OnPump3Step%Add(Pump3_Step)
! call OnPump3Output%Add(Pump3_Output)
! call OnPump3Main%Add(Pump3MainBody)
! end subroutine
!
! subroutine Pump3_Init
! implicit none
! end subroutine Pump3_Init
!
! subroutine Pump3_Step
! implicit none
! end subroutine Pump3_Step
!
! subroutine Pump3_Output
! implicit none
! end subroutine Pump3_Output
!
! subroutine Pump3MainBody
! use ifport
! use ifmt
! implicit none
!
!
! integer,dimension(8) :: MP_START_TIME, MP_END_TIME
! INTEGER :: MP_SolDuration
!
! !Call Pump_StartUp
! !loop1 : do
! !
! ! Call sleepqq(10)
! !
! ! !!! Pump3 Malfunction ----> Power Failure
! ! !!if (data%State%Pump(1)%PowerFailMalf==1) then
! ! !! !MP1BLWR=0
! ! !! Call Pump3_OffMode_Solver
! ! !! Call ClosePump1()
! ! !!end if
! !
! ! !if( (MP1CPSwitch==1) .and. (MP1Throttle==0.) .and. (data%State%Pump(3)%PowerFailMalf==0) ) then
! !!
! !! loop2: do
! !!
! !! Call DATE_AND_TIME(values=MP_START_TIME)
! !!
! !!!! ! Pump3 Malfunction ----> Power Failure
! !!!! if (data%State%Pump(1)%PowerFailMalf==1) then
! !!!! !MP1BLWR=0
! !!!! Pump3_OffMode_Solver
! !!!! Call ClosePump1()
! !!!! exit loop2
! !!!! end if
! !!
! !! data%State%Pump(3)%N_new = MP1Throttle
! !! if (((data%State%Pump(3)%N_new-data%State%Pump(3)%N_old)/data%State%Pump(3)%time_step)>193.) then
! !! data%State%Pump(3)%N_ref =(193.*data%State%Pump(3)%time_step)+data%State%Pump(3)%N_old
! !! else if (((data%State%Pump(3)%N_old-data%State%Pump(3)%N_new)/data%State%Pump(3)%time_step)>193.) then
! !! data%State%Pump(3)%N_ref = (-193.*data%State%Pump(3)%time_step)+data%State%Pump(3)%N_old
! !! else
! !! data%State%Pump(3)%N_ref = data%State%Pump(3)%N_new
! !! end if
! !!
! !! Call Pump3_OnMode_Solver
! !!
! !! IF (data%State%Pump(3)%Flow_Rate>0.) Then
! !! Call OpenCementPump()
! !! Else
! !! Call CloseCementPump()
! !! End if
! !!
! !! data%State%Pump(3)%N_old = data%State%Pump(3)%N_ref
! !!
! !! Call DATE_AND_TIME(values=MP_END_TIME)
! !! MP_SolDuration = 100-(MP_END_TIME(6)*60000+MP_END_TIME(7)*1000+MP_END_TIME(8)-MP_START_TIME(6)*60000-MP_START_TIME(7)*1000-MP_START_TIME(8))
! !! !print*, 'MPtime=', MP_SolDuration
! !! if(MP_SolDuration > 0.0) then
! !! Call sleepqq(MP_SolDuration)
! !! end if
! !!
! !! if ((MP1CPSwitch==0) .or. (IsStopped == .true.)) then
! !! Call Pump3_OffMode_Solver
! !! Call CloseCementPump()
! !! exit loop2
! !! end if
! !! end do loop2
! !
! ! else
! !
! ! !Call Pump3_OffMode_Solver
! ! !Call CloseCementPump()
! !
! ! end if
! !
! ! if (IsStopped == .true.) then
! ! exit loop1
! ! end if
! !
! !end do loop1
!
!
! end subroutine Pump3MainBody
end module PumpsMain

+ 50
- 0
Equipments/Pumps/Pumps_StartUp.i90 查看文件

@@ -0,0 +1,50 @@
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Equipments/Pumps/Pumps_StartUp.f90"
subroutine Pumps_StartUp
use CPumpsVariables
use CPumps
use SimulationVariables
IMPLICIT NONE
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<
data%State%Pump(1)%FlowRatePerSTK = .04d0 ![bbl] !??????? motaghayere voroudi
!data%State%Pump(1)%FlowRatePerSTK = data%State%Pump(1)%FlowRatePerSTK*0.0292d0 ![gpm]
data%State%Pump(1)%RateChange = 4.d0 ![stk/min2 ??] !??????? motaghayere voroudi
data%State%Pump(1)%Mech_Efficiency = data%Configuration%Pumps%MudPump1MechanicalEfficiency ![dimensionless]
!data%State%Pump(1)%Vol_Efficiency = MudPump1VolumetricEfficiency !bayad hazf beshe ?
data%State%Pump(1)%Max_Pressure = 6000.d0 ![psi] !??????? motaghayere voroudi
data%State%Pump(1)%MaxSPM = data%Configuration%Pumps%MudPump1Maximum ![spm]
data%State%Pump(1)%Trans_Ratio = 965.d0/data%State%Pump(1)%MaxSPM
data%State%Pump(1)%time_step = 0.1d0 !?????? niaz hast ya na??
data%State%Pump(1)%RateChange = 193.d0!data%State%Pump(1)%RateChange*data%State%Pump(1)%Trans_Ratio ! [rpm/min ??] ??????????????? rpm/s
data%State%Pump(1)%K_throttle = 0
data%State%Pump(1)%N_old = 0.d0
Call Pump_OffMode_Solver(1)
!>>>>>>>>>>>>>>>>>>>>>>> PUMP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<<
data%State%Pump(2)%FlowRatePerSTK = .04d0 ![bbl] !??????? motaghayere voroudi
!data%State%Pump(2)%FlowRatePerSTK = data%State%Pump(2)%FlowRatePerSTK*0.0292d0 ![gpm]
data%State%Pump(2)%RateChange = 4.d0 ![stk/min2 ??] !??????? motaghayere voroudi
data%State%Pump(2)%Mech_Efficiency = data%Configuration%Pumps%MudPump2MechanicalEfficiency ![dimensionless]
!data%State%Pump(2)%Vol_Efficiency = MudPump2VolumetricEfficiency !bayad hazf beshe ?
data%State%Pump(2)%Max_Pressure = 6000.d0 ![psi] !??????? motaghayere voroudi
data%State%Pump(2)%MaxSPM = data%Configuration%Pumps%MudPump2Maximum ![spm]
data%State%Pump(2)%Trans_Ratio = 965.d0/data%State%Pump(2)%MaxSPM
data%State%Pump(2)%time_step = 0.1d0 !?????? niaz hast ya na??
data%State%Pump(2)%RateChange = 193.d0!data%State%Pump(2)%RateChange*data%State%Pump(2)%Trans_Ratio ! [rpm/min ??] ??????????????? rpm/s
data%State%Pump(2)%K_throttle = 0
data%State%Pump(2)%N_old = 0.d0
Call Pump_OffMode_Solver(2)
!!>>>>>>>>>>>>>>>>>>>>>>> PUMP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<<
data%State%Pump(3)%FlowRatePerSTK = .04d0 ![bbl] !??????? motaghayere voroudi
!data%State%Pump(3)%FlowRatePerSTK = data%State%Pump(3)%FlowRatePerSTK*0.0292d0 ![gpm]
data%State%Pump(3)%RateChange = 4.d0 ![stk/min2 ??] !??????? motaghayere voroudi
data%State%Pump(3)%Mech_Efficiency = data%Configuration%Pumps%CementPumpMechanicalEfficiency ![dimensionless]
!data%State%Pump(3)%Vol_Efficiency = CementPumpVolumetricEfficiency !bayad hazf beshe ?
data%State%Pump(3)%Max_Pressure = 6000.d0 ![psi] !??????? motaghayere voroudi
data%State%Pump(3)%MaxSPM = data%Configuration%Pumps%CementPumpMaximum ![spm]
data%State%Pump(3)%Trans_Ratio = 965.d0/data%State%Pump(3)%MaxSPM
data%State%Pump(3)%time_step = 0.1d0 !?????? niaz hast ya na??
data%State%Pump(3)%RateChange = 193.d0!data%State%Pump(3)%RateChange*data%State%Pump(3)%Trans_Ratio ! [rpm/min ??] ??????????????? rpm/s
data%State%Pump(3)%K_throttle = 0
data%State%Pump(3)%N_old = 0.d0
Call Pump_OffMode_Solver(3)
end subroutine Pumps_StartUp

+ 49
- 0
Equipments/Pumps/Pumps_VARIABLES.i90 查看文件

@@ -0,0 +1,49 @@
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Equipments/Pumps/Pumps_VARIABLES.f90"
MODULE Pumps_VARIABLES
IMPLICIT NONE
PUBLIC
! REAL , PARAMETER :: pi=3.14159265d0
Type, public:: Pumps_Var
REAL :: Total_Pump_GPM, Total_Pump_SPM, Total_Stroke_Counter_For_Plot
end Type Pumps_Var
Type(Pumps_Var) :: MPumps
!****************************************************************************************************
!**************** Define PUMP Array ************************************************************
TYPE, PUBLIC :: Pump_Var
!***** Pump_VARIABLES ***************************
INTEGER :: AssignmentSwitchh, Switch, K_throttle
INTEGER :: PowerFailMalf , BlowPopOffMalf , SPMGaugeMalf , Failure

REAL :: Throttle, RateChange
REAL :: Mech_Efficiency, Vol_Efficiency, Trans_Ratio
REAL :: StandPipe_Pressure , Max_Pressure
REAL :: Speed, N_new, N_old, MaxSPM
REAL :: Flow_Rate, Hydraulic_HorsePower, Max_Horsepower, FlowRatePerSTK, Max_FlowRate, HorsePower
REAL :: time_step
INTEGER :: BLWR ! 1=On , 0=Off
INTEGER :: Open_Close ! 1=Open , 0=Close
!************* Sound_VARIABLES **********************
INTEGER :: SoundSPM
Logical :: SoundBlower
END TYPE Pump_Var

!***********************************************************************************************
!***********************************************************************************************
END MODULE Pumps_VARIABLES

+ 231
- 0
FluidFlow/Frictional_Press_Drop_Calc.i90 查看文件

@@ -0,0 +1,231 @@
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/FluidFlow/Frictional_Press_Drop_Calc.f90"
SUBROUTINE FricPressDrop(iloc)

!! Record of revisions
!! Date Programmer Discription of change
!! ------ ------------ -----------------------
!! 1396/07/23 Sheikh Original code
!!
USE FricPressDropVarsModule
USE SimulationVariables
USE Fluid_Flow_Startup_Vars
USE CError
IMPLICIT NONE

INTEGER :: iloc
REAL :: TauZero
TauZero = 12.0
!ActiveRheologyModel = Herschel_Bulkley_RheologyModel

! 0 = Power Law , 1 = Bingham Plastic , 2 = Newtonian
!TotFricPressLoss = 0.0
FlowEl(iloc)%alpha = 1 ! assume that all elements have annulus geometry
FlowEl(iloc)%dPdLfric = 0.0
FlowEl(iloc)%f = 0.0
FlowEl(iloc)%FlowRate = ABS(FlowEl(iloc)%FlowRate)
IF ((FlowEl(iloc)%FlowRate >= PressFlowrateTolerance) &
.AND. (FlowEl(iloc)%MaterialType /= 1) & ! not gas kick
.AND. (ABS(FlowEl(iloc)%Length) >= PressLengthTolerance) &
.AND. (FlowEl(iloc)%MaterialType /= 4)) THEN ! not air
IF (FlowEl(iloc)%Id==0) THEN
FlowEl(iloc)%alpha = 0
END IF
FlowEl(iloc)%muPlastic = FlowEl(iloc)%Theta600 - FlowEl(iloc)%Theta300 ! cp
FlowEl(iloc)%YieldP = 2.0 * FlowEl(iloc)%Theta300 - FlowEl(iloc)%Theta600 ! lbf/100ft**2
FlowEl(iloc)%nIndex = 3.32 * log10(FlowEl(iloc)%Theta600 / FlowEl(iloc)%Theta300)
FlowEl(iloc)%kIndex = 510.0 * FlowEl(iloc)%Theta300 / (511.0**FlowEl(iloc)%nIndex) ! rabete fv2
IF (data%Configuration%Mud%ActiveRheologyModel == Herschel_Bulkley_RheologyModel .AND. FlowEl(iloc)%alpha == 0) THEN
FlowEl(iloc)%kIndex = 1.066 * FlowEl(iloc)%Theta300 / (511.0**FlowEl(iloc)%nIndex)
ELSE IF (data%Configuration%Mud%ActiveRheologyModel == Herschel_Bulkley_RheologyModel .AND. FlowEl(iloc)%alpha == 1) THEN
FlowEl(iloc)%nIndex = 3.32 * log10((FlowEl(iloc)%Theta600 - TauZero) / (FlowEl(iloc)%Theta300 - TauZero))
FlowEl(iloc)%kIndex = 1.066 * (FlowEl(iloc)%Theta300 - TauZero) / (511.0**FlowEl(iloc)%nIndex)
END IF
! Calculating velocity
FlowEl(iloc)%vel = 0.408 * FlowEl(iloc)%FlowRate / (FlowEl(iloc)%Od**2 - FlowEl(iloc)%Id**2) ! velocity in ft/s
!FlowEl(iloc)%vel = 24.51 * FlowEl(iloc)%FlowRate / (FlowEl(iloc)%Od**2 - FlowEl(iloc)%Id**2) ! velocity in ft/min

!IF (FlowModel == Bingham_RheologyModel) THEN ! Bingham Plastic
! FlowEl(iloc)%Gf = (2. + FlowEl(iloc)%alpha) / 2.
!ELSE IF (FlowModel == PowerLow_RheologyModel) THEN
! FlowEl(iloc)%Gf = ((3. - FlowEl(iloc)%alpha) * FlowEl(iloc)%nIndex + 1.) / FlowEl(iloc)%nIndex / (4. - FlowEl(iloc)%alpha) * (2. + FlowEl(iloc)%alpha) / 2.
!END IF
!FlowEl(iloc)%gammaW = 1.6 * FlowEl(iloc)%Gf * FlowEl(iloc)%vel / FlowEl(iloc)%Dhyd
!IF (FlowModel == Bingham_RheologyModel) THEN ! Bingham Plastic
! FlowEl(iloc)%tauW = 1.067 * ((4. - FlowEl(iloc)%alpha) / (3. - FlowEl(iloc)%alpha) * FlowEl(iloc)%YieldP + FlowEl(iloc)%muPlastic * FlowEl(iloc)%gammaW)
! !FlowEl(iloc)%tauW = 1.067*(FlowEl(iloc)%YieldP+FlowEl(iloc)%muPlastic*FlowEl(iloc)%gammaW)
!ELSE IF (FlowModel == PowerLow_RheologyModel) THEN ! Power law
! FlowEl(iloc)%tauW = 1.067 * FlowEl(iloc)%kIndex * FlowEl(iloc)%gammaW**FlowEl(iloc)%nIndex
!END IF
! Calculating effective or apparent viscosity
IF (data%Configuration%Mud%ActiveRheologyModel == Bingham_RheologyModel) THEN ! Bingham Plastic
FlowEl(iloc)%mueff = FlowEl(iloc)%muPlastic + 5. * FlowEl(iloc)%YieldP * FlowEl(iloc)%Dhyd / FlowEl(iloc)%vel
!write(*,*) 'pointer1' , FlowEl(iloc)%muPlastic , FlowEl(iloc)%YieldP , FlowEl(iloc)%Dhyd , FlowEl(iloc)%vel
ELSE IF (data%Configuration%Mud%ActiveRheologyModel == PowerLaw_RheologyModel .OR. data%Configuration%Mud%ActiveRheologyModel == Herschel_Bulkley_RheologyModel) THEN ! Power Law
FlowEl(iloc)%Gf = ((3. - FlowEl(iloc)%alpha) * FlowEl(iloc)%nIndex + 1.0) / FlowEl(iloc)%nIndex / (4.0 - FlowEl(iloc)%alpha) * (2.0 + FlowEl(iloc)%alpha) / 2.0
FlowEl(iloc)%mueff = (FlowEl(iloc)%kIndex) / (1. + FlowEl(iloc)%alpha / 2.) * ((96. * FlowEl(iloc)%vel / FlowEl(iloc)%Dhyd)**(FlowEl(iloc)%nIndex - 1)) * FlowEl(iloc)%Gf**FlowEl(iloc)%nIndex
!write(*,*) 'pointer2' , FlowEl(iloc)%kIndex ,FlowEl(iloc)%alpha , FlowEl(iloc)%vel ,FlowEl(iloc)%Dhyd,FlowEl(iloc)%nIndex ,FlowEl(iloc)%Gf ,FlowEl(iloc)%nIndex
END IF
FlowEl(iloc)%gammaW = 96.0 * FlowEl(iloc)%Gf * FlowEl(iloc)%vel / FlowEl(iloc)%Dhyd
FlowEl(iloc)%tauW = ((4.0 - FlowEl(iloc)%alpha) / (3.0 - FlowEl(iloc)%alpha))**FlowEl(iloc)%nIndex * TauZero + FlowEl(iloc)%kIndex * FlowEl(iloc)%gammaW**FlowEl(iloc)%nIndex
! Calculating Reynolds number
IF (FlowEl(iloc)%Od == FlowEl(iloc)%Dhyd) THEN
FlowEl(iloc)%GenRe = 928. * FlowEl(iloc)%density * FlowEl(iloc)%vel * FlowEl(iloc)%Dhyd / FlowEl(iloc)%mueff
ELSE
FlowEl(iloc)%GenRe = 757. * FlowEl(iloc)%density * FlowEl(iloc)%vel * FlowEl(iloc)%Dhyd / FlowEl(iloc)%mueff
END IF
!FlowEl(iloc)%GenRe = 2997 * FlowEl(iloc)%density * FlowEl(iloc)%vel**2 / 19.36 / FlowEl(iloc)%tauW
! Calculating friction factor
IF (data%Configuration%Mud%ActiveRheologyModel == Bingham_RheologyModel) THEN ! Bingham Plastic
IF (FlowEl(iloc)%GenRe <= 2000.0) THEN ! laminar regime
FlowEl(iloc)%f = 16.0 / FlowEl(iloc)%GenRe
ELSE IF (FlowEl(iloc)%GenRe >= 4000.0) THEN ! turbulent regime
FlowEl(iloc)%a = 0.0791
FlowEl(iloc)%b = 0.25
FlowEl(iloc)%f = FlowEl(iloc)%a / FlowEl(iloc)%GenRe**FlowEl(iloc)%b
ELSE !! transition from laminar to turbulent regime
FlowEl(iloc)%a = 0.0791
FlowEl(iloc)%b = 0.25
FlowEl(iloc)%f = (4000.0 - FlowEl(iloc)%GenRe) / 2000.0 * 16. / FlowEl(iloc)%GenRe &
+ (FlowEl(iloc)%GenRe - 2000.0) / 2000.0 * FlowEl(iloc)%a / FlowEl(iloc)%GenRe**FlowEl(iloc)%b
END IF
ELSE IF (data%Configuration%Mud%ActiveRheologyModel == PowerLaw_RheologyModel) THEN ! Power law
FlowEl(iloc)%ReCritLam = 3470. - 1370. * FlowEl(iloc)%nIndex
FlowEl(iloc)%ReCritTurb = 4270. - 1370. * FlowEl(iloc)%nIndex
IF (FlowEl(iloc)%GenRe <= FlowEl(iloc)%ReCritLam) THEN ! laminar regime
FlowEl(iloc)%f = 16.0 / FlowEl(iloc)%GenRe / (1 - 0.184 * FlowEl(iloc)%alpha)
ELSE IF (FlowEl(iloc)%GenRe >= FlowEl(iloc)%ReCritTurb) THEN ! turbulent regime
FlowEl(iloc)%a = (log10(FlowEl(iloc)%nIndex) + 3.93) / 50.
FlowEl(iloc)%b = (1.75 - log10(FlowEl(iloc)%nIndex)) / 7.
FlowEl(iloc)%f = FlowEl(iloc)%a / FlowEl(iloc)%GenRe**FlowEl(iloc)%b
ELSE
FlowEl(iloc)%a = (log10(FlowEl(iloc)%nIndex) + 3.93) / 50.
FlowEl(iloc)%b = (1.75 - log10(FlowEl(iloc)%nIndex)) / 7.
FlowEl(iloc)%f = (FlowEl(iloc)%ReCritTurb - FlowEl(iloc)%GenRe) / 800.0 * 16. / FlowEl(iloc)%GenRe &
+ (FlowEl(iloc)%GenRe - FlowEl(iloc)%ReCritLam) / 800.0 * FlowEl(iloc)%a / FlowEl(iloc)%GenRe**FlowEl(iloc)%b
END IF
END IF
!WRITE (*,*) 'fric press drop', iloc
!WRITE (*,*) 'Length', ABS(REAL(FlowEl(iloc)%Length))
!WRITE (*,*) 'FlowRate', FlowEl(iloc)%FlowRate
!WRITE (*,*) 'Theta600 , Theta300', FlowEl(iloc)%Theta600 , FlowEl(iloc)%Theta300
!WRITE (*,*) 'Dhyd', FlowEl(iloc)%Dhyd
!WRITE (*,*) 'GenRe', FlowEl(iloc)%GenRe
!WRITE (*,*) 'f', FlowEl(iloc)%f
END IF

! Frictional pressure loss gradient calculation
! FlowEl(iloc)%dPdLfric = 1.076 * FlowEl(iloc)%f * FlowEl(iloc)%vel**2 * FlowEl(iloc)%density / 10**5 / FlowEl(iloc)%Dhyd
FlowEl(iloc)%dPdLfric = FlowEl(iloc)%f * (FlowEl(iloc)%vel)**2 * FlowEl(iloc)%density / 25.81 / FlowEl(iloc)%Dhyd
FlowEl(iloc)%FricPressLoss = FlowEl(iloc)%dPdLfric * ABS(REAL(FlowEl(iloc)%Length))
IF (FlowEl(iloc)%FrictionDirection == -1) THEN
FlowEl(iloc)%FlowRate = - FlowEl(iloc)%FlowRate
FlowEl(iloc)%dPdLfric = - FlowEl(iloc)%dPdLfric
FlowEl(iloc)%FricPressLoss = - FlowEl(iloc)%FricPressLoss
END IF
!END DO


END SUBROUTINE FricPressDrop
SUBROUTINE PartialDerivativeFricToFlowRate(iloc)
USE FricPressDropVarsModule
USE SimulationVariables
USE Fluid_Flow_Startup_Vars
use KickVARIABLESModule
USE CError
IMPLICIT NONE

INTEGER :: iloc
FlowEl(iloc)%FricToQPartialDiff = 0.0
!FlowEl(iloc)%FlowRate = ABS(FlowEl(iloc)%FlowRate)
IF ((ABS(FlowEl(iloc)%FlowRate) >= PressFlowrateTolerance) &
.AND. (FlowEl(iloc)%MaterialType /= 1) & ! not gas kick
.AND. (ABS(FlowEl(iloc)%Length) >= PressLengthTolerance) &
.AND. (FlowEl(iloc)%MaterialType /= 4)) THEN ! not air
IF (data%Configuration%Mud%ActiveRheologyModel == PowerLaw_RheologyModel) THEN ! Power law
!IF (FlowEl(iloc)%Flowrate == 0.0) THEN
! FlowEl(iloc)%Flowrate = 10.0
! CALL FricPressDrop(iloc)
!END IF
IF (FlowEl(iloc)%GenRe <= FlowEl(iloc)%ReCritLam) THEN ! laminar flow
FlowEl(iloc)%FricToQPartialDiff = FlowEl(iloc)%FricPressLoss / FlowEl(iloc)%FlowRate * FlowEl(iloc)%nIndex
ELSE IF (FlowEl(iloc)%GenRe >= FlowEl(iloc)%ReCritTurb) THEN ! turbulent flow
FlowEl(iloc)%FricToQPartialDiff = FlowEl(iloc)%FricPressLoss / FlowEl(iloc)%FlowRate &
* (2. - FlowEl(iloc)%b * (2. - FlowEl(iloc)%nIndex))
ELSE ! transition from laminar to turbulent
FlowEl(iloc)%FricToQPartialDiff = FlowEl(iloc)%FricPressLoss / FlowEl(iloc)%FlowRate &
* (2. + (2. - FlowEl(iloc)%nIndex) &
* ((FlowEl(iloc)%a * FlowEl(iloc)%GenRe**(1. - FlowEl(iloc)%b) - 16.) / 800. / FlowEl(iloc)%f - 1.))
END IF
ELSE IF (data%Configuration%Mud%ActiveRheologyModel == Bingham_RheologyModel) THEN ! Bingham Plastic
IF (FlowEl(iloc)%GenRe <= 2000.0 .OR. FlowEl(iloc)%f == 0.0) THEN ! laminar flow if f = 0.0, we have no flow in first time flowing
FlowEl(iloc)%FricToQPartialDiff = (16. * FlowEl(iloc)%muPlastic * REAL(FlowEl(iloc)%Length) * 2.224 * (10.)**(-3)) &
/ (25.81 * 928. * (1 - 0.184 * FlowEl(iloc)%alpha) * FlowEl(iloc)%Dhyd**2 * FlowEl(iloc)%Area)
ELSE IF (FlowEl(iloc)%GenRe >= 4000.0) THEN ! turbulent flow
FlowEl(iloc)%FricToQPartialDiff = FlowEl(iloc)%FricPressLoss / FlowEl(iloc)%FlowRate &
* (2. - FlowEl(iloc)%b * (2. - FlowEl(iloc)%muPlastic / FlowEl(iloc)%mueff))
ELSE ! transition from laminar to turbulent
FlowEl(iloc)%FricToQPartialDiff = FlowEl(iloc)%FricPressLoss / FlowEl(iloc)%FlowRate &
* (2. + (2. - FlowEl(iloc)%muPlastic / FlowEl(iloc)%mueff) &
* ((FlowEl(iloc)%a * FlowEl(iloc)%GenRe**(1. - FlowEl(iloc)%b) - 16.) / 2000. / FlowEl(iloc)%f - 1.))
END IF
END IF
END IF
IF (FlowEl(iloc)%FricToQPartialDiff < 0.0) THEN
!WRITE (*,*) ' iloc, Re, FricPressLoss, FricToQPartialDiff' , iloc, FlowEl(iloc)%GenRe, FlowEl(iloc)%FricPressLoss, FlowEl(iloc)%FricToQPartialDiff
!CALL ERRORSTOP('Error in Calculating FricToQPartialDiff')
END IF
END SUBROUTINE PartialDerivativeFricToFlowRate

+ 1
- 1
Makefile 查看文件

@@ -66,7 +66,7 @@ OBJ_DIR = $(TOP_DIR)/obj
# FCFLAGS = -g -J$(MOD_DIR) -fimplicit-none -Wall -cpp -ffree-line-length-256
# FCFLAGS = /module:$(MOD_DIR) /fpp
FCFLAGS = -module $(MOD_DIR) -fpp -debug all -g -traceback
FCFLAGS = -module $(MOD_DIR) -fpp -debug all -g -traceback -D IFORT
TARGET = SimulationCore2


二進制
查看文件


+ 41
- 41
SimulationCore2.f90 查看文件

@@ -1,41 +1,41 @@
! SimulationCore2.f90
!
! FUNCTIONS:
! SimulationCore2 - Entry point of console application.
!
!****************************************************************************
!
! PROGRAM: SimulationCore2
!
! PURPOSE: Entry point for the console application.
!
!****************************************************************************
program SimulationCore2
use Simulator
use RedisInterface
!use testRedisModule
implicit none
character(len=100) :: redis_host,redis_password, sim_id, temp
integer :: redis_port, log_level, stat
! Variables
! Body of SimulationCore2
! print *, 'Hello World'
! call read_variables()
if(command_argument_count()/=5) then
print *, "Simulator Program must have 5 parameter: redis_host,redisPort,redis_password, sim_id,log_level"
stop
endif
call get_command_argument(1, redis_host)
call get_command_argument(2, temp)
read(temp,*,iostat=stat) redis_port
call get_command_argument(3, redis_password)
call get_command_argument(4, sim_id)
call get_command_argument(5, temp)
read(temp,*,iostat=stat) log_level
call simulate(trim(redis_host),redis_port,trim(redis_password), trim(sim_id),log_level)
end program SimulationCore2
! SimulationCore2.f90
!
! FUNCTIONS:
! SimulationCore2 - Entry point of console application.
!
!****************************************************************************
!
! PROGRAM: SimulationCore2
!
! PURPOSE: Entry point for the console application.
!
!****************************************************************************
program SimulationCore2
use Simulator
use RedisInterface
!use testRedisModule
implicit none
character(len=100) :: redis_host,redis_password, sim_id, temp
integer :: redis_port, log_level, status
! Variables
! Body of SimulationCore2
! print *, 'Hello World'
! call read_variables()
if(command_argument_count()/=5) then
print *, "Simulator Program must have 5 parameter: redis_host,redisPort,redis_password, sim_id,log_level"
stop
endif
call get_command_argument(1, redis_host)
call get_command_argument(2, temp)
read(temp,*,iostat=status) redis_port
call get_command_argument(3, redis_password)
call get_command_argument(4, sim_id)
call get_command_argument(5, temp)
read(temp,*,iostat=status) log_level
call simulate(trim(redis_host),redis_port,trim(redis_password), trim(sim_id),log_level)
end program SimulationCore2

+ 3
- 3
SimulationCore2.i90 查看文件

@@ -19,7 +19,7 @@ program SimulationCore2
!use testRedisModule
implicit none
character(len=100) :: redis_host,redis_password, sim_id, temp
integer :: redis_port, log_level, stat
integer :: redis_port, log_level, status
! Variables

! Body of SimulationCore2
@@ -31,11 +31,11 @@ program SimulationCore2
endif
call get_command_argument(1, redis_host)
call get_command_argument(2, temp)
read(temp,*,iostat=stat) redis_port
read(temp,*,iostat=status) redis_port
call get_command_argument(3, redis_password)
call get_command_argument(4, sim_id)
call get_command_argument(5, temp)
read(temp,*,iostat=stat) log_level
read(temp,*,iostat=status) log_level

call simulate(trim(redis_host),redis_port,trim(redis_password), trim(sim_id),log_level)
end program SimulationCore2


+ 36
- 35
Simulator.f90 查看文件

@@ -1,4 +1,5 @@
module Simulator
use IFPORT
use RedisInterface
use Bop
use PumpsMain
@@ -67,7 +68,6 @@ module Simulator
type(json_file) :: jsonfile
type(json_core):: json
integer :: simulationStatus,simulationSpeed,msPerStep,simulationEnd,simulationStep
integer,dimension(8)::timearray
real :: stepTime !time for each step
character(len=:),allocatable::redisInput,redisOutput
enum, bind(c)
@@ -79,10 +79,18 @@ module Simulator
contains
FUNCTION time_ms()
INTEGER(8) :: time_ms
integer,dimension(8)::timearray
call date_and_time(values=timearray)
time_ms = timearray(8)+timearray(7)*1000 + timearray(6)*60000 + timearray(5)*60000*600000 +timearray(4)*24*60000*60000
RETURN
END FUNCTION
subroutine Simulate(redis_host,redis_port,redis_password, sim_id,log_level)
character(len=*) :: redis_host,redis_password, sim_id
integer::t0,t1,t2,t3,t_read=0,t_write=0,t_exec=0,i,status,redis_port,log_level
integer,dimension(12)::t,t_modules
integer(8),dimension(12)::t,t_modules
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
do i=1,size(t_modules)
@@ -104,45 +112,41 @@ module Simulator
simulationStep = 1
do while (.true.)
! print *,"simulationStep=",simulationStep
call date_and_time(values=timearray)
t0 = timearray(8)+timearray(7)*1000+timearray(6)*60000
t0 = time_ms()
! print *,"start reading."
call read_variables()
if(simulationStatus==PLAY_TO_DETERMINED_TIME .and. simulationStep>simulationEnd) exit
if(simulationStatus==STOP) exit
if(simulationStatus==PAUSE) cycle
if(simulationStatus==PAUSE) then
print *, "paused"
go to 211
endif
if(logging>4) print *,"end reading"
call date_and_time(values=timearray)
t1 = timearray(8)+timearray(7)*1000+timearray(6)*60000
t1 = time_ms()
t_read = t_read+t1-t0
if(logging>4) print *,"read completed"
!! Rafiee, nothing changed
call BopStack_Step()
call date_and_time(values=timearray)
t(1) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(1) = time_ms()
t_modules(1) = t_modules(1)+t(1)-t1
!! Tarmigh, now is rewritten
call Pump1_Step()
call date_and_time(values=timearray)
t(2) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(2) = time_ms()
t_modules(2) = t_modules(2)+t(2)-t(1)
!call Pump2_Step()
!! Rafiee
call ChokeControl_Step()
call date_and_time(values=timearray)
t(3) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(3) = time_ms()
t_modules(3) = t_modules(3)+t(3)-t(2)
!! Tarmigh, now is rewritten
call RotaryTable_Step()
call date_and_time(values=timearray)
t(4) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(4) = time_ms()
t_modules(4) = t_modules(4)+t(4)-t(3)
!! Tarmigh, now is rewritten
call Drawworks_Step()
call date_and_time(values=timearray)
t(5) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(5) = time_ms()
t_modules(5) = t_modules(5)+t(5)-t(4)
!! Rafiee
@@ -154,37 +158,31 @@ module Simulator
!! Rafiee
call KillLine_Step()
call date_and_time(values=timearray)
t(6) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(6) = time_ms()
t_modules(6) = t_modules(6)+t(6)-t(5)
!! Rafiee
call ChokeLine_Step()
call date_and_time(values=timearray)
t(7) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(7) = time_ms()
t_modules(7) = t_modules(7)+t(7)-t(6)
call BlindRams_Step()
call date_and_time(values=timearray)
t(8) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(8) = time_ms()
t_modules(8) = t_modules(8)+t(8)-t(7)
call Annular_Step()
call date_and_time(values=timearray)
t(9) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(9) = time_ms()
t_modules(9) = t_modules(9)+t(9)-t(8)
!!Tarmigh. Step must rewrittem
call TopDrive_Step()
call date_and_time(values=timearray)
t(10) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(10) = time_ms()
t_modules(10) = t_modules(10)+t(10)-t(9)
! call Geo_Step()
!!Ahmadi
call PathFinding_Step()
call date_and_time(values=timearray)
t(11) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(11) = time_ms()
t_modules(11) = t_modules(11)+t(11)-t(10)
!! Sheikh
@@ -192,22 +190,25 @@ module Simulator
!! Ahmadi
call OperationScenarios_Step()
!! Write variables to shared files
call date_and_time(values=timearray)
t2 = timearray(8)+timearray(7)*1000+timearray(6)*60000
t2 = time_ms()
! stepTime = t2-t1
t_modules(12) = t_modules(12)+t2-t(11)
t_exec = t_exec+t2-t1
! call date_and_time(values=timearray)
! t0 = timearray(8)+timearray(7)*1000+timearray(6)*60000
! t0 = time_ms()
call write_variables()
call date_and_time(values=timearray)
t3 = timearray(8)+timearray(7)*1000+timearray(6)*60000
t3 = time_ms()
if(t3-t0 < 100) then
call sleepqq(t3-t0)
else
print *,"Simulation step can not be complete in 100 ms. step time=",t3-t0
endif
t_write = t_write+t3-t2
! print *,"write completed"
! print *,"t=",t
simulationStep = simulationStep + 1
end do
211 end do
! call write_variables()
! call json%print(jsonroot,'test.json')
! call json%destroy(jsonroot)


+ 36
- 35
Simulator.i90 查看文件

@@ -1,5 +1,6 @@
# 1 "/mnt/c/Projects/VSIM/SimulationCore2/Simulator.f90"
module Simulator
use IFPORT
use RedisInterface
use Bop
use PumpsMain
@@ -68,7 +69,6 @@ module Simulator
type(json_file) :: jsonfile
type(json_core):: json
integer :: simulationStatus,simulationSpeed,msPerStep,simulationEnd,simulationStep
integer,dimension(8)::timearray
real :: stepTime !time for each step
character(len=:),allocatable::redisInput,redisOutput
enum, bind(c)
@@ -80,10 +80,18 @@ module Simulator
contains

FUNCTION time_ms()
INTEGER(8) :: time_ms
integer,dimension(8)::timearray
call date_and_time(values=timearray)
time_ms = timearray(8)+timearray(7)*1000 + timearray(6)*60000 + timearray(5)*60000*600000 +timearray(4)*24*60000*60000
RETURN
END FUNCTION

subroutine Simulate(redis_host,redis_port,redis_password, sim_id,log_level)
character(len=*) :: redis_host,redis_password, sim_id
integer::t0,t1,t2,t3,t_read=0,t_write=0,t_exec=0,i,status,redis_port,log_level
integer,dimension(12)::t,t_modules
integer(8),dimension(12)::t,t_modules
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

do i=1,size(t_modules)
@@ -105,45 +113,41 @@ module Simulator
simulationStep = 1
do while (.true.)
! print *,"simulationStep=",simulationStep
call date_and_time(values=timearray)
t0 = timearray(8)+timearray(7)*1000+timearray(6)*60000
t0 = time_ms()
! print *,"start reading."
call read_variables()
if(simulationStatus==PLAY_TO_DETERMINED_TIME .and. simulationStep>simulationEnd) exit
if(simulationStatus==STOP) exit
if(simulationStatus==PAUSE) cycle
if(simulationStatus==PAUSE) then
print *, "paused"
go to 211
endif
if(logging>4) print *,"end reading"
call date_and_time(values=timearray)
t1 = timearray(8)+timearray(7)*1000+timearray(6)*60000
t1 = time_ms()
t_read = t_read+t1-t0
if(logging>4) print *,"read completed"
!! Rafiee, nothing changed
call BopStack_Step()
call date_and_time(values=timearray)
t(1) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(1) = time_ms()
t_modules(1) = t_modules(1)+t(1)-t1
!! Tarmigh, now is rewritten
call Pump1_Step()
call date_and_time(values=timearray)
t(2) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(2) = time_ms()
t_modules(2) = t_modules(2)+t(2)-t(1)
!call Pump2_Step()
!! Rafiee
call ChokeControl_Step()
call date_and_time(values=timearray)
t(3) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(3) = time_ms()
t_modules(3) = t_modules(3)+t(3)-t(2)

!! Tarmigh, now is rewritten
call RotaryTable_Step()
call date_and_time(values=timearray)
t(4) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(4) = time_ms()
t_modules(4) = t_modules(4)+t(4)-t(3)

!! Tarmigh, now is rewritten
call Drawworks_Step()
call date_and_time(values=timearray)
t(5) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(5) = time_ms()
t_modules(5) = t_modules(5)+t(5)-t(4)

!! Rafiee
@@ -155,37 +159,31 @@ module Simulator

!! Rafiee
call KillLine_Step()
call date_and_time(values=timearray)
t(6) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(6) = time_ms()
t_modules(6) = t_modules(6)+t(6)-t(5)

!! Rafiee
call ChokeLine_Step()
call date_and_time(values=timearray)
t(7) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(7) = time_ms()
t_modules(7) = t_modules(7)+t(7)-t(6)

call BlindRams_Step()
call date_and_time(values=timearray)
t(8) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(8) = time_ms()
t_modules(8) = t_modules(8)+t(8)-t(7)

call Annular_Step()
call date_and_time(values=timearray)
t(9) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(9) = time_ms()
t_modules(9) = t_modules(9)+t(9)-t(8)

!!Tarmigh. Step must rewrittem
call TopDrive_Step()
call date_and_time(values=timearray)
t(10) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(10) = time_ms()
t_modules(10) = t_modules(10)+t(10)-t(9)

! call Geo_Step()
!!Ahmadi
call PathFinding_Step()
call date_and_time(values=timearray)
t(11) = timearray(8)+timearray(7)*1000+timearray(6)*60000
t(11) = time_ms()
t_modules(11) = t_modules(11)+t(11)-t(10)

!! Sheikh
@@ -193,22 +191,25 @@ module Simulator
!! Ahmadi
call OperationScenarios_Step()
!! Write variables to shared files
call date_and_time(values=timearray)
t2 = timearray(8)+timearray(7)*1000+timearray(6)*60000
t2 = time_ms()
! stepTime = t2-t1
t_modules(12) = t_modules(12)+t2-t(11)

t_exec = t_exec+t2-t1
! call date_and_time(values=timearray)
! t0 = timearray(8)+timearray(7)*1000+timearray(6)*60000
! t0 = time_ms()
call write_variables()
call date_and_time(values=timearray)
t3 = timearray(8)+timearray(7)*1000+timearray(6)*60000
t3 = time_ms()
if(t3-t0 < 100) then
call sleepqq(t3-t0)
else
print *,"Simulation step can not be complete in 100 ms. step time=",t3-t0
endif
t_write = t_write+t3-t2
! print *,"write completed"
! print *,"t=",t
simulationStep = simulationStep + 1
end do
211 end do
! call write_variables()
! call json%print(jsonroot,'test.json')
! call json%destroy(jsonroot)


+ 1
- 1
redisContent.json
文件差異過大導致無法顯示
查看文件


+ 0
- 4
simulatorManager.py 查看文件

@@ -35,12 +35,8 @@ if __name__=='__main__':
break
if not process_exists:
subprocess.Popen(['./SimulationCore2', redis_address,str(redis_port),redis_password,simulation_id,str(log_level)], cwd=work_dir)

time.sleep(5)




# Connect to Redis server
redis_host = 'localhost' # Replace with your Redis server's host
redis_port = 6379 # Replace with your Redis server's port


Loading…
取消
儲存