subroutine TD_MainCalculations Use CCasingLinerChokeVariables Use CStringConfigurationVariables ! use CSimulationVariables Use TD_DrillStemComponents Use TD_WellElements Use TD_WellGeometry Use TD_GeneralData Use TD_StringConnectionData Use FricPressDropVars Use MudSystemVARIABLES implicit none Integer :: i !Integer :: TD_SolDuration !integer,dimension(8) :: TD_StartTime , TD_EndTime TD_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 DATE_AND_TIME(values=TD_StartTime) Call TD_WellGeoConfiguration Call TD_WellElementsConfiguration Call TD_StringConnectionModes Call TD_DrillStemConfiguration Call TD_ForceReadData !===> Mud properties Read_Data from Fluid Module !!TD_NoHorizontalMudElements = TDNoHorizontalMudElements !!TD_NoStringMudElements = TDNoStringMudElements !!TD_NoCasingMudElements = TDNoCasingMudElements !! !!if (allocated(TDDensity_MudElementArray) .and. (TD_NoHorizontalMudElements+TD_NoStringMudElements+TD_NoCasingMudElements)/=0) then !! if (Allocated(TD_FluidMudDensity)) Deallocate(TD_FluidMudDensity) !! Allocate(TD_FluidMudDensity(TD_NoHorizontalMudElements+TD_NoStringMudElements+TD_NoCasingMudElements)) !! TD_FluidMudDensity(:) = TDDensity_MudElementArray(:) !!end if !! !!if (allocated(TDXend_MudElementArray)) then !! if (Allocated(TD_FluidMudEndX)) Deallocate(TD_FluidMudEndX) !! Allocate(TD_FluidMudEndX(TD_NoHorizontalMudElements+TD_NoStringMudElements+TD_NoCasingMudElements)) !! TD_FluidMudEndX(:) = TDXend_MudElementArray(:) !!end if !! !!if (allocated(TDXstart_MudElementArray)) then !! if (Allocated(TD_FluidMudStartX)) Deallocate(TD_FluidMudStartX) !! Allocate(TD_FluidMudStartX(TD_NoHorizontalMudElements+TD_NoStringMudElements+TD_NoCasingMudElements)) !! TD_FluidMudStartX(:) = TDXstart_MudElementArray(:) !!end if if (TD_DrillStem(1)%ComponentType==0) then Do i = 2 , TD_DrillStemComponentsNumbs Call TD_MudPropertiesReadData(i) Call TD_BouyancyFactor(i) Call TD_CombinedMotionData(i) End Do TD_DrillStems(1)%MudDensityIn = TD_DrillStems(2)%MudDensityIn !(1): bit mud properties TD_DrillStems(1)%MudDensityOut = TD_DrillStems(2)%MudDensityOut TD_DrillStems(1)%MudWeight = TD_DrillStems(2)%MudWeight TD_DrillStems(1)%MudPlasticVis = 5.d0+(5.d0*(TD_DrillStems(1)%MudWeight-8.3d0)) TD_DrillStems(1)%MudViscosity = 0.2d0 !TD_DrillStems(i)%MudPlasticVis TD_DrillStems(1)%MudYieldPoint = 10.d0+(TD_DrillStems(1)%MudWeight-8.3d0) Call TD_BouyancyFactor(1) Call TD_CombinedMotionData(1) else Do i = 1 , TD_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(TD_DrillStemAxialVelocity)>3.2808d0) then !1[m/s]=3.2808[ft/s] Call TD_ViscousDragForce else TD_DrillStems%Drag = 0.d0 TD_DrillStemForceType = 5 end if Call TD_ForceCalculation Call TD_HookLoadCalculation !!!!!!print*, 'TD_StringVelocity=' , TD_StringVelocity !!!!!!print*, 'TD_HookLoad=' , TD_HookLoad !print*, 'TD_WellTotalLength=' , TD_WellTotalLength !print*, 'TD_ConnectionHeight_main=' , TD_ConnectionHeight !!!!!!!!print*, 'TD_DrillStems(1)%StartAngle=' , TD_DrillStems(1)%StartAngle !!!!!!print*, 'TD_DrillStems(1)%Force2=' , TD_DrillStems(1)%Force2 !!!!!!print*, 'TD_DrillStems(1)%Force1=' , TD_DrillStems(1)%Force1 !!!!!print*, 'TD_WeightIndicator=' , TD_WeightIndicator !!!!!print*, 'TD_DlTotal=' , TD_DlTotal !!!!!print*, 'TD_DlMax=' , TD_DlMax !!!!!!print*, 'TD_DrillStems(n)%Force2=' , TD_DrillStems(TD_DrillStemComponentsNumbs)%Force2 !!!!!!print*, 'TD_DrillStems(n)%Force1=' , TD_DrillStems(TD_DrillStemComponentsNumbs)%Force1 !print*, 'TD_DrillStems(1)%Drag=' , TD_DrillStems(1)%Drag !!!!!!!!! !print*, 'TD_WeightOnBit=' , TD_WeightOnBit !!print*, 'TD_StringTorque=' , TD_StringTorque !!print*, 'TD_DrillStems(1)%Torque=' , TD_DrillStems(1)%Torque !!print*, 'TD_DrillStems(n)%Torque=' , TD_DrillStems(TD_DrillStemComponentsNumbs)%Torque !!!!!!!!! !print*, 'TD_DrillStemComponentsNumbs_main =' ,TD_DrillStemComponentsNumbs !print*, 'TD_DrillStemTotalLength=' ,TD_DrillStemTotalLength !!print*, 'TD_StringConfigurationCount=' ,TD_StringConfigurationCount !print*, 'TD_HookHeight=' ,TD_HookHeight !!!!!!print*, 'TD_HookVelocity=' ,TD_HookVelocity !print*, 'TD_DrillStems(1)%DownDepth=' ,TD_DrillStems(1)%DownDepth !print*, 'TD_DrillStems(1)%DownDepthIni_main=' ,TD_DrillStems(1)%DownDepthIni !!!!!!print*, 'TD_DrillStems(1)%DownDepth=' ,TD_DrillStems(335)%DownDepth !!print*, 'TD_DrillStems(n)%DownDepth=' ,TD_DrillStems(TD_DrillStemComponentsNumbs)%DownDepth !!!print*, 'TD_DrillStems(n)%ID=' ,TD_DrillStems(TD_DrillStemComponentsNumbs)%ID !!!print*, 'TD_DrillStems(n)%OD=' ,TD_DrillStems(TD_DrillStemComponentsNumbs)%OD !!!print*, 'TD_DrillStem(n)%ID=' ,TD_DrillStem(TD_StringConfigurationCount)%ID !!!print*, 'TD_DrillStem(n)%OD=' ,TD_DrillStem(TD_StringConfigurationCount)%OD !!!print*, 'TD_DrillStem(1)%ID=' ,TD_DrillStem(1)%ID !!!print*, 'TD_DrillStem(1)%OD=' ,TD_DrillStem(1)%OD !!!!!print*, 'TD_StaticHookLoad=' ,TD_StaticHookLoad !!!!print*, 'TD_DrillStems(n)%Dl=' ,TD_DrillStems(TD_DrillStemComponentsNumbs)%Dl !!!!!print*, 'TD_DrillStems(n)%Length=' ,TD_DrillStems(TD_DrillStemComponentsNumbs)%Length !!!!!print*, 'TD_DrillStem(1)%Length=' ,TD_DrillStem(1)%Length !!!!!print*, 'TD_DrillStems(n)%Area=' ,TD_DrillStems(TD_DrillStemComponentsNumbs)%Area !!!!!print*, 'TD_DrillStems(n)%ElasticModule=' ,TD_DrillStems(TD_DrillStemComponentsNumbs)%ElasticModule TD_HookHeightOld = TD_HookHeight ! if(IsStopped == .true.) then ! EXIT loop1 ! end if ! ! ! CALL DATE_AND_TIME(values=TD_EndTime) ! TD_SolDuration=100-(TD_EndTime(6)*60000+TD_EndTime(7)*1000+TD_EndTime(8)-TD_StartTime(6)*60000-TD_StartTime(7)*1000-TD_StartTime(8)) ! !print*, 'TD_SolDuration=' , TD_SolDuration ! !print*, 'TD_exe=' , (TD_EndTime(6)*60000+TD_EndTime(7)*1000+TD_EndTime(8)-TD_StartTime(6)*60000-TD_StartTime(7)*1000-TD_StartTime(8)) ! if(TD_SolDuration > 0.0d0) then ! CALL sleepqq(TD_SolDuration) ! end if ! ! !end do loop1 ! !return end subroutine TD_MainCalculations