SUBROUTINE DEALLOCATE_ARRAYS() USE VARIABLES implicit none !=========================================================================== ! RAMLINE MINOR LOSSES INPUT !=========================================================================== DEALLOCATE (MINORS1,MINORDIAMETER_RAMLINE,AREAMINOR_RAMLINE & ,LF_RAMLINE,CV_RAMLINE,NOTE_RAMLINE,RAMS%minlosspa,RAMS%minloss) !=========================================================================== ! RAMLINE PIPNING LOSSES INPUT !=========================================================================== DEALLOCATE (PIPINGS_RAMLINE,DIAM_RAMLINE_INCH, & AREA_RAMLINE,LENGT_RAMLINE,ROUGHNESS_RAMLINE,RELROUGH_RAMLINE & ,RAMS%Re_ramline,RAMS%fric,RAMS%fricloss) !=========================================================================== ! ANNULAR MINOR LOSSES INPUT !=========================================================================== DEALLOCATE (MINORS_ANNULAR,MINORDIAMETER_ANNULARLINE,AREAMINOR_ANNULARLINE & ,LF_ANNULARLINE,CV_ANNULARLINE,NOTE_ANNULARLINE,minlosspa_ANNULAR,minloss_ANNULAR) !=========================================================================== ! ANNULAR PIPNING LOSSES INPUT !=========================================================================== DEALLOCATE (PIPINGS_ANNULAR,DIAM_ANNULARLINE_INCH,AREA_ANNULARLINE, & LENGT_ANNULARLINE,ROUGHNESS_ANNULARLINE,RELROUGH_ANNULARLINE & ,Re_ANNULARline,fricANNULAR,friclossANNULAR) !=========================================================================== ! AIR PUMP LOSSES INPUT !=========================================================================== DEALLOCATE (PIPINGS_AIRPUMP,DIAM_AIR_INCH, & Re_air,AREA_AIR,LENGT_AIR,ROUGHNESS_AIRPLINE,REL_ROUGHAIR, & fric_air,fricloss_air) !================================================================ DEALLOCATE (MINORS_AIRPUMP,MINORDIAM_AIR_INCH, & MINORAREA_AIR,LF_AIR,CV_AIR,NOTE_AIR & ,minlosspa_air,minloss_air) !=========================================================================== ! DELAY ARRAYS !=========================================================================== call Pannular_regDelay%Empty() END SUBROUTINE LOSS_INPUTS() USE VARIABLES implicit none INTEGER I !=========================================================================== ! RAMLINE MINOR LOSSES INPUT !=========================================================================== NO_MINORSRAMLINE=34 ALLOCATE (MINORS1(NO_MINORSRAMLINE,4)) ! ID(INCH) LF CV NOTE(BAR) DESCRIPTION MINORS1(1,1:4)= (/2., 2., 0., 0./) !Acc.tee MINORS1(2,1:4)= (/2., 0.9, 0., 0./) !Avg.acc.tee MINORS1(3,1:4)= (/2., 0.9, 0., 0./) !Avg.acc.tee MINORS1(4,1:4)= (/2., 0.9, 0., 0./) !Avg.acc.tee MINORS1(5,1:4)= (/2., 0.9, 0., 0./) !tee MINORS1(6,1:4)= (/2., 2., 0., 0./) !tee MINORS1(7,1:4)= (/2., 0., 105., 0./) !valve MINORS1(8,1:4)= (/2., 0.9, 0., 0./) !tee MINORS1(9,1:4)= (/2., 0., 105., 0./) !valve MINORS1(10,1:4)= (/2., 0.42, 0., 0./) !elbow MINORS1(11,1:4)= (/2., 0.42, 0., 0./) !elbow MINORS1(12,1:4)= (/2., 0.8, 0., 0./) !unionA MINORS1(13,1:4)= (/2., 0.8, 0., 0./) !unionA MINORS1(14,1:4)= (/2., 1.5, 0., 0./) !elbow MINORS1(15,1:4)= (/2., 0., 425., 0./) !valve MINORS1(16,1:4)= (/2., 2., 0., 0./) !tee MINORS1(17,1:4)= (/0.75, 0., 1.5, 0./) !REGULATOR MINORS1(18,1:4)= (/1., 2., 0., 0./) !tee MINORS1(19,1:4)= (/1., 1.5, 0., 0./) !elbow MINORS1(20,1:4)= (/1., 0.42, 0., 0./) !elbow MINORS1(21,1:4)= (/1., 0.42, 0., 0./) !elbow MINORS1(22,1:4)= (/1., 1.5, 0., 0./) !elbow MINORS1(23,1:4)= (/1., 0., 105., 0./) !valve MINORS1(24,1:4)= (/1., 0.9, 0., 0./) !tee MINORS1(25,1:4)= (/1., 0., 0., 0.5/) !FT MINORS1(26,1:4)= (/1., 0., 0., 3.4/) !filter MINORS1(27,1:4)= (/1., 0., 105., 0./) !valve MINORS1(28,1:4)= (/1., 0.9, 0., 0./) !tee MINORS1(29,1:4)= (/1., 1.5, 0., 0./) !elbow MINORS1(30,1:4)= (/1., 1.5, 0., 0./) !elbow MINORS1(31,1:4)= (/1., 0., 9.2, 0./) !valve MINORS1(32,1:4)= (/1., 0.8, 0., 0./) !unionA MINORS1(33,1:4)= (/1., 0.8, 0., 0./) !unionA MINORS1(34,1:4)= (/0.75, 0.35, 0., 0./) !contraction ALLOCATE (MINORDIAMETER_RAMLINE(NO_MINORSRAMLINE),AREAMINOR_RAMLINE(NO_MINORSRAMLINE),LF_RAMLINE(NO_MINORSRAMLINE),CV_RAMLINE(NO_MINORSRAMLINE) & ,NOTE_RAMLINE(NO_MINORSRAMLINE),RAMS%minlosspa(6,NO_MINORSRAMLINE),RAMS%minloss(6,NO_MINORSRAMLINE)) DO I=1,NO_MINORSRAMLINE MINORDIAMETER_RAMLINE(I)=MINORS1(I,1) LF_RAMLINE(I)=MINORS1(I,2) CV_RAMLINE(I)=MINORS1(I,3) NOTE_RAMLINE(I)=MINORS1(I,4) AREAMINOR_RAMLINE(I)=PI*(MINORDIAMETER_RAMLINE(I)*0.0254)**2/4. !D(in), AREA(m) ENDDO !=========================================================================== ! RAMLINE PIPNING LOSSES INPUT !=========================================================================== NO_PIPINGSRAMLINE=15 ALLOCATE (PIPINGS_RAMLINE(NO_PIPINGSRAMLINE,3)) ! ID(INCH) L(MM) ROUGHNESS(MM)=e DESCRIPTION PIPINGS_RAMLINE(1,1:3)= (/2., 1035., 0.03/) !Avg.acc.distance PIPINGS_RAMLINE(2,1:3)= (/2., 730., 0.03/) !Acc.end.horizontal PIPINGS_RAMLINE(3,1:3)= (/2., 2000., 0.03/) !Acc.end.vertical PIPINGS_RAMLINE(4,1:3)= (/2., 6000., 0.05/) !Hyd.hose PIPINGS_RAMLINE(5,1:3)= (/2., 2370., 0.03/) !Corner.vertical1 PIPINGS_RAMLINE(6,1:3)= (/2., 210., 0.03/) !Add.from.bend PIPINGS_RAMLINE(7,1:3)= (/1., 780., 0.03/) !Corner.horizontal1 PIPINGS_RAMLINE(8,1:3)= (/1., 780., 0.03/) !Corner.horizontal2 PIPINGS_RAMLINE(9,1:3)= (/1., 750., 0.03/) !Extra.length.back PIPINGS_RAMLINE(10,1:3)= (/1., 800., 0.03/) !Corner.horizontal3 PIPINGS_RAMLINE(11,1:3)= (/1., 1650., 0.03/) !Corner.vertical2 PIPINGS_RAMLINE(12,1:3)= (/1., 340., 0.03/) !12.Valves.horizontal PIPINGS_RAMLINE(13,1:3)= (/1., 1650., 0.03/) !Valves.vertical PIPINGS_RAMLINE(14,1:3)= (/1., 31000., 10./) !Hyd.hose PIPINGS_RAMLINE(15,1:3)= (/1., 526., 0.03/) !Add.from.bend ALLOCATE (DIAM_RAMLINE_INCH(NO_PIPINGSRAMLINE), & AREA_RAMLINE(NO_PIPINGSRAMLINE),LENGT_RAMLINE(NO_PIPINGSRAMLINE),ROUGHNESS_RAMLINE(NO_PIPINGSRAMLINE),RELROUGH_RAMLINE(NO_PIPINGSRAMLINE) & ,RAMS%Re_ramline(6,NO_PIPINGSRAMLINE),RAMS%fric(6,NO_PIPINGSRAMLINE),RAMS%fricloss(6,NO_PIPINGSRAMLINE)) DO I=1,NO_PIPINGSRAMLINE DIAM_RAMLINE_INCH(I)=PIPINGS_RAMLINE(I,1) LENGT_RAMLINE(I)=PIPINGS_RAMLINE(I,2) ROUGHNESS_RAMLINE(I)=PIPINGS_RAMLINE(I,3) AREA_RAMLINE(I)=PI*(DIAM_RAMLINE_INCH(I)*0.0254)**2/4 !D(in), AREA(m) RELROUGH_RAMLINE(I)=ROUGHNESS_RAMLINE(I)/(DIAM_RAMLINE_INCH(I)*25.4) !e/D !DIAM_RAMLINE_MM(I)=DIAM_RAMLINE_MM(I)*.001 ! (m) LENGT_RAMLINE(I)=LENGT_RAMLINE(I)*.001 ! (m) ENDDO !=========================================================================== ! ANNULAR PREVENTER MINOR LOSSES INPUT !=========================================================================== NO_MinorsAnnularLine=29 ALLOCATE (MINORS_ANNULAR(NO_MinorsAnnularLine,4)) ! ID(INCH) LF CV NOTE(BAR) DESCRIPTION MINORS_ANNULAR(1,1:4)= (/2., 2., 0., 0./) !Acc.tee MINORS_ANNULAR(2,1:4)= (/2., 0.9, 0., 0./) !Avg.acc.tee MINORS_ANNULAR(3,1:4)= (/2., 0.9, 0., 0./) !Avg.acc.tee MINORS_ANNULAR(4,1:4)= (/2., 0.9, 0., 0./) !Avg.acc.tee MINORS_ANNULAR(5,1:4)= (/2., 0.9, 0., 0./) !tee MINORS_ANNULAR(6,1:4)= (/2., 2., 0., 0./) !tee MINORS_ANNULAR(7,1:4)= (/2., 0., 105., 0./) !valve MINORS_ANNULAR(8,1:4)= (/2., 0.9, 0., 0./) !tee MINORS_ANNULAR(9,1:4)= (/2., 0., 105., 0./) !valve MINORS_ANNULAR(10,1:4)= (/2., 0.42, 0., 0./) !elbow MINORS_ANNULAR(11,1:4)= (/2., 0.42, 0., 0./) !elbow MINORS_ANNULAR(12,1:4)= (/2., 0.8, 0., 0./) !unionA MINORS_ANNULAR(13,1:4)= (/2., 0.8, 0., 0./) !unionA MINORS_ANNULAR(14,1:4)= (/2., 1.5, 0., 0./) !elbow MINORS_ANNULAR(15,1:4)= (/2., 0., 425., 0./) !valve MINORS_ANNULAR(16,1:4)= (/2., 2., 0., 0./) !tee MINORS_ANNULAR(17,1:4)= (/0.75, 0., 1.5, 0./) !REGULATOR MINORS_ANNULAR(18,1:4)= (/1., 2., 0., 0./) !tee MINORS_ANNULAR(19,1:4)= (/1., 1.5, 0., 0./) !elbow MINORS_ANNULAR(20,1:4)= (/1., 0.42, 0., 0./) !elbow MINORS_ANNULAR(21,1:4)= (/1., 0.42, 0., 0./) !elbow MINORS_ANNULAR(22,1:4)= (/1., 1.5, 0., 0./) !elbow MINORS_ANNULAR(23,1:4)= (/1., 0., 3.2, 0./) !valve MINORS_ANNULAR(24,1:4)= (/1., 2., 0., 0./) !tee MINORS_ANNULAR(25,1:4)= (/1., 1.5, 0., 0./) !elbow MINORS_ANNULAR(26,1:4)= (/1., 0.42, 0., 0./) !elbow MINORS_ANNULAR(27,1:4)= (/1., 0.42, 0., 0./) !elbow MINORS_ANNULAR(28,1:4)= (/1., 1.5, 0., 0./) !elbow MINORS_ANNULAR(29,1:4)= (/1., 0., 3.2, 0./) !valve ALLOCATE (MINORDIAMETER_ANNULARLINE(NO_MinorsAnnularLine),AREAMINOR_ANNULARLINE(NO_MinorsAnnularLine),LF_ANNULARLINE(NO_MinorsAnnularLine) & ,CV_ANNULARLINE(NO_MinorsAnnularLine),NOTE_ANNULARLINE(NO_MinorsAnnularLine),minlosspa_ANNULAR(NO_MinorsAnnularLine),minloss_ANNULAR(NO_MinorsAnnularLine)) DO I=1,NO_MinorsAnnularLine MINORDIAMETER_ANNULARLINE(I)=MINORS_ANNULAR(I,1) LF_ANNULARLINE(I)=MINORS_ANNULAR(I,2) CV_ANNULARLINE(I)=MINORS_ANNULAR(I,3) NOTE_ANNULARLINE(I)=MINORS_ANNULAR(I,4) AREAMINOR_ANNULARLINE(I)=PI*(MINORDIAMETER_ANNULARLINE(I)*0.0254)**2/4. !D(in), AREA(m) ENDDO !=========================================================================== ! ANNULAR PREVENTER PIPNING LOSSES INPUT !=========================================================================== NO_PipingsAnnularLine=10 ALLOCATE (PIPINGS_ANNULAR(NO_PipingsAnnularLine,3)) ! ID(INCH) L(MM) ROUGHNESS(MM)=e DESCRIPTION PIPINGS_ANNULAR(1,1:3)= (/2., 1035., 0.03/) !Avg.acc.distance PIPINGS_ANNULAR(2,1:3)= (/2., 730., 0.03/) !Acc.endhorizontal PIPINGS_ANNULAR(3,1:3)= (/2., 2000., 0.03/) !Acc.endvertical PIPINGS_ANNULAR(4,1:3)= (/2., 6000., 0.03/) !Hyd.hose PIPINGS_ANNULAR(5,1:3)= (/2., 2370., 0.03/) !Corner.vertical1 PIPINGS_ANNULAR(6,1:3)= (/2., 210., 0.03/) !Add.frombend PIPINGS_ANNULAR(7,1:3)= (/2., 1000., 0.03/) !manifold PIPINGS_ANNULAR(8,1:3)= (/1., 46000., 0.03/) !pipe PIPINGS_ANNULAR(9,1:3)= (/2., 1000., 0.03/) !manifold PIPINGS_ANNULAR(10,1:3)= (/1., 46000., 0.03/) !pipe ALLOCATE (DIAM_ANNULARLINE_INCH(NO_PipingsAnnularLine),AREA_ANNULARLINE(NO_PipingsAnnularLine),LENGT_ANNULARLINE(NO_PipingsAnnularLine) & ,ROUGHNESS_ANNULARLINE(NO_PipingsAnnularLine),RELROUGH_ANNULARLINE(NO_PipingsAnnularLine) & ,Re_ANNULARline(NO_PipingsAnnularLine),fricANNULAR(NO_PipingsAnnularLine),friclossANNULAR(NO_PipingsAnnularLine)) DO I=1,NO_PipingsAnnularLine DIAM_ANNULARLINE_INCH(I)=PIPINGS_ANNULAR(I,1) LENGT_ANNULARLINE(I)=PIPINGS_ANNULAR(I,2) ROUGHNESS_ANNULARLINE(I)=PIPINGS_ANNULAR(I,3) AREA_ANNULARLINE(I)=PI*(DIAM_ANNULARLINE_INCH(I)*0.0254)**2/4. !D(in), AREA(m) RELROUGH_ANNULARLINE(I)=ROUGHNESS_ANNULARLINE(I)/(DIAM_ANNULARLINE_INCH(I)*25.4) !DIAM_ANNULARLINE_MM(I)=DIAM_ANNULARLINE_MM(I)*.001 ! (m) LENGT_ANNULARLINE(I)=LENGT_ANNULARLINE(I)*.001 ! (m) ENDDO !=========================================================================== ! AIR PUMP LOSSES INPUT !=========================================================================== NO_PIPINGS_AIRPLINE=1 ALLOCATE (PIPINGS_AIRPUMP(NO_PIPINGS_AIRPLINE,3)) ! ID(INCH) L(MM) ROUGHNESS(MM)=e DESCRIPTION PIPINGS_AIRPUMP(1,1:3)= (/2., 10000., 0.03/) !Avg.acc.distance ALLOCATE (DIAM_AIR_INCH(NO_PIPINGS_AIRPLINE),Re_air(NO_PIPINGS_AIRPLINE),AREA_AIR(NO_PIPINGS_AIRPLINE), & LENGT_AIR(NO_PIPINGS_AIRPLINE),ROUGHNESS_AIRPLINE(NO_PIPINGS_AIRPLINE),REL_ROUGHAIR(NO_PIPINGS_AIRPLINE), & fric_air(NO_PIPINGS_AIRPLINE),fricloss_air(NO_PIPINGS_AIRPLINE)) DO I=1,NO_PIPINGS_AIRPLINE DIAM_AIR_INCH(I)=PIPINGS_AIRPUMP(I,1) LENGT_AIR(I)=PIPINGS_AIRPUMP(I,2) ROUGHNESS_AIRPLINE(I)=PIPINGS_AIRPUMP(I,3) AREA_AIR(I)=PI*(DIAM_AIR_INCH(I)*0.0254)**2/4 !D(in), AREA(m) REL_ROUGHAIR(I)=ROUGHNESS_AIRPLINE(I)/(DIAM_AIR_INCH(I)*25.4) !DIAM_RAMLINE_MM(I)=DIAM_RAMLINE_MM(I)*.001 ! (m) LENGT_AIR(I)=LENGT_AIR(I)*.001 ! (m) ENDDO !================================================================ NO_MINORS_AIRPLINE=6 ALLOCATE (MINORS_AIRPUMP(NO_MINORS_AIRPLINE,4)) ! ID(INCH) LF CV NOTE(BAR) DESCRIPTION MINORS_AIRPUMP(1,1:4)= (/2., 10., 0., 0./) !Acc.tee MINORS_AIRPUMP(2,1:4)= (/2., 11., 0., 0./) !elbow MINORS_AIRPUMP(3,1:4)= (/1., 0., 0., 3.4/) !filter MINORS_AIRPUMP(4,1:4)= (/2., 0., 105., 0./) !valve MINORS_AIRPUMP(5,1:4)= (/1., 0., 9.2, 0./) !valve MINORS_AIRPUMP(6,1:4)= (/2., 6.4, 0., 0./) !unionA ALLOCATE (MINORDIAM_AIR_INCH(NO_MINORS_AIRPLINE),MINORAREA_AIR(NO_MINORS_AIRPLINE), & LF_AIR(NO_MINORS_AIRPLINE),CV_AIR(NO_MINORS_AIRPLINE),NOTE_AIR(NO_MINORS_AIRPLINE) & ,minlosspa_air(NO_MINORS_AIRPLINE),minloss_air(NO_MINORS_AIRPLINE)) DO I=1,NO_MINORS_AIRPLINE MINORDIAM_AIR_INCH(I)=MINORS_AIRPUMP(I,1) LF_AIR(I)=MINORS_AIRPUMP(I,2) CV_AIR(I)=MINORS_AIRPUMP(I,3) NOTE_AIR(I)=MINORS_AIRPUMP(I,4) MINORAREA_AIR(I)=PI*(MINORDIAM_AIR_INCH(I)*0.0254)**2/4. !D(in), AREA(m) ENDDO END SUBROUTINE pumps_charge_bottle() USE VARIABLES USE CAccumulatorVariables USE CBopStackVariables USE CBopControlPanelVariables USE CEquipmentsConstants ! use CSimulationVariables implicit none !Pannular_regset=min(AnnularRegulatorSetControl,1700.) ! for changing its set conditions instantaneously !write(*,*) 'pumps_charge_bottle' if(BopControlPanel%ByePassValve == -1.0) then ByPassOld= -1.0 elseif(BopControlPanel%ByePassValve == 1.0) then ByPassOld= 1.0 endif !===================================================================== ! ACCUMULATOR !=====for a 10 gal bottle,precharge=1000psig curve BOSCH-isotherm===== !for charging bottles by the pump !((((((((IN OUTER LOOP)))))) ! ba1=1003; ba2=.03375; ba3=4.014; ba4=.2458; if (airp_switch==0) deltav_air=0 fvr=fvr+deltav_air+deltav_elecp pacc_before=p_acc p_acc=b1*exp(b2*fvr/nobottles)+b3*exp(b4*fvr/nobottles) ! adiabatic(psig)<<<< 8=no. of bottles !===================================================================== if(ByPassOld == 1.0) then if (pram_reg<PRAMS_REGSET) then !pram_reg=pram_reg+(p_acc-pacc_before) PressureDifference= (p_acc-pacc_before) else !pram_reg=PRAMS_REGSET PressureDifference= PRAMS_REGSET - pram_reg endif !old=pram_reg !difference= new-old if (ABS(PressureDifference) > BaseDifferenceP) then pram_reg= pram_reg + (PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20. else if (pram_reg<PRAMS_REGSET) then pram_reg=pram_reg+(p_acc-pacc_before) else pram_reg=PRAMS_REGSET endif endif else !if(ByPassOld == -1.0) then !old=pram_reg !new=p_acc- MAXVAL(RAM%loss_before) !difference= new-old PressureDifference= p_acc- MAXVAL(RAM%loss_before) - pram_reg if (ABS(PressureDifference) > BaseDifferenceP) then pram_reg= pram_reg + (PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20. else pram_reg= p_acc- MAXVAL(RAM%loss_before) endif endif !Pannular_reg= min(p_acc,Pannular_regset) end SUBROUTINE airpump_code() USE VARIABLES use CSounds implicit none INTEGER I QAIR_PUMP=Qiter+.1 !(gpm) maximum flow for the start diffp_air=-10 losses_air=10 !=================================================================== ! AIR OPERATED PUMP !=================for air consumption at 8 bar====================== do while (diffp_air<0) QAIR_PUMP=QAIR_PUMP-.1 ! Qup=QAIR_PUMP; ! bba1 =31.8; bba2 =-725.7 ; bba3 =4154; p_airp=bba1*QAIR_PUMP**2+bba2*QAIR_PUMP+bba3 !(psig) kinetic_air=sg*wdens*(QAIR_PUMP*6.30902e-5/((1/4.)*pi*(2*0.254e-1)**2))**2/(2*6895) !(psi) diffp_air=p_airp+kinetic_air-p_acc end do !returns Qup do while (abs((diffp_air-losses_air)/diffp_air)>tol_air) !finding correct QAIR_pump for 1 timecounter_ram if (diffp_air-losses_air>0) then QAIR_PUMP=QAIR_PUMP+.01 else QAIR_PUMP=QAIR_PUMP-.01 endif !=================================================================== ! AIR OPERATED PUMP ! Maximator - Model: GX (35) !=================for air consumption at 8 bar====================== p_airp=bba1*QAIR_PUMP**2+bba2*QAIR_PUMP+bba3 !(psig) kinetic_air=sg*wdens*(QAIR_PUMP*6.30902e-005/((1/4.)*pi*(2*0.254e-1)**2))**2/(2*6895) !(psi) diffp_air=p_airp+kinetic_air-p_acc !===========================LOSSES==================================== do i=1,NO_PIPINGS_AIRPLINE Re_air(i)=QAIR_PUMP*6.30902e-005*DIAM_AIR_INCH(I)*0.0254/(area_air(i)*nu) enddo do i=1,NO_PIPINGS_AIRPLINE if (Re_air(i)<Re_cr) then fric_air(i)=64/Re_air(i) else fric_air(i)=1/(-1.8*log10((rel_roughair(i)/3.7)**1.11+6.9/Re_air(i)))**2 endif fricloss_air(i)=((fric_air(i)*(wdens*sg*lengt_air(i)*(QAIR_PUMP*6.30902e-005/area_air(i))**2))/(2*DIAM_AIR_INCH(I)*0.0254))/6895 enddo pipe_loss1air=sum(fricloss_air) !loss before regulator(psi) do i=1,NO_MINORS_AIRPLINE if (LF_air(i)/=0) then minlosspa_air(i)=LF_air(i)*wdens*sg*(QAIR_PUMP*6.30902e-005/MINORAREA_AIR(i))**2/2 !(Pa) minloss_air(i)=minlosspa_air(i)/6895 !(psi) elseif (CV_air(i)/=0) then minlosspa_air(i)=1000*sg*((11.7*QAIR_PUMP*6.30902e-005*3600)/(CV_air(i)))**2 !(pa) minloss_air(i)=minlosspa_air(i)/6895 !(psi) else minlosspa_air(i)=NOTE_air(i)*1e5 !(pa) minloss_air(i)=minlosspa_air(i)/6895 !(psi) endif enddo minor_loss1air=sum(minloss_air) !loss before regulator(psi) static_loss1air=0 losses_air=pipe_loss1air+minor_loss1air+static_loss1air !(psi) !========================================================================= end do !returns correct QAIR_PUMP for 1 counter counter_airp=counter_airp+1 Qiter=QAIR_PUMP Cumulative_AirVolume= Cumulative_AirVolume + ((QAIR_PUMP * DeltaT_BOP / 60.0 ) / (6.71*0.004329004) ) ! =strokes !write(*,*) 'Cumulative_AirVolume=' , Cumulative_AirVolume if ( Cumulative_AirVolume > 1.0 ) then SoundKoomeyAirPump= 120.0 Cumulative_AirVolume= Cumulative_AirVolume - 1.0 else SoundKoomeyAirPump= 0.0 endif !SoundKoomeyAirPump= int ( (QAIR_PUMP/ (6.71*0.004329004)) ) ! 6.71: Volume per stroke (in^3) , 0.004329004: in^3 to gal ! 2.0 : two air pumps 60:seconds !write(*,*) 'sedaaaa=' ,(QAIR_PUMP/ (6.71*0.004329004)) *DeltaT_BOP/(60.0*2.0) call SetSoundKoomeyAirPump(SoundKoomeyAirPump) deltav_air=QAIR_PUMP*DeltaT_BOP/60. !(galon) delta_t=1sec , Q(gpm) !write(*,*) 'QAIR_PUMP=' , QAIR_PUMP !((((((((IN OUTER LOOP)))))) !fvr_air=fvr_air+deltav_air !=fvr_after (galon) for next timecounter_ram !======================================================== !WRITE(50,50) QAIR_PUMP,p_airp, & !p_acc,diffp_air,losses_air,deltav_air 50 FORMAT(6(f15.5)) end SUBROUTINE bop_code(ramtype,H_RAMBOP,RNUMBER) USE VARIABLES USE CAccumulatorVariables USE CBopControlPanelVariables USE CEquipmentsConstants ! use CSimulationVariables USE TD_GeneralData use CUnityOutputs implicit none integer ramtype, I real H_RAMBOP INTEGER RNUMBER !Pannular_regset=min(AnnularRegulatorSetControl,1700.) ! for changing its set conditions instantaneously !==================================================== ! BOP back pressure IN PRESENCE OF DP !==================================================== if (RAM(RNUMBER)%bop_type==2) then RAM(RNUMBER)%checkp= RAM(RNUMBER)%p_bop if ( RAM(RNUMBER)%vdis_tot<va) then RAM(RNUMBER)%p_bop=pa elseif (va<= RAM(RNUMBER)%vdis_tot .and. RAM(RNUMBER)%vdis_tot<=vb) then RAM(RNUMBER)%p_bop=pa+pb*(( RAM(RNUMBER)%vdis_tot-va)/(vb-va)) else RAM(RNUMBER)%p_bop=pa endif if ( RAM(RNUMBER)%checkp/=pa .and. RAM(RNUMBER)%p_bop==pa) then RAM(RNUMBER)%Q=RAM(RNUMBER)%Qzero else RAM(RNUMBER)%Q=RAM(RNUMBER)%flow endif endif !==================================================== ! BOP back pressure without DP !==================================================== if (RAM(RNUMBER)%bop_type==3) then RAM(RNUMBER)%p_bop=pa ! Q=flow endif RAM(RNUMBER)%clock=0 !======================Losses============================ RAM(RNUMBER)%loss_after=0 !initial value RAM(RNUMBER)%diffp_ram=1000 !initial value RAM(RNUMBER)%loss_before=0 !Q=0.0055; %initial flow rate (m^3/s) RAM(RNUMBER)%Q=RAM(RNUMBER)%flow do while (abs( RAM(RNUMBER)%diffp_ram- RAM(RNUMBER)%loss_after)/ RAM(RNUMBER)%diffp_ram>RAM(RNUMBER)%tol) if (RAM(RNUMBER)%Bottles_Charged_MalfActive==.true.) exit ! while abs( RAM(RNUMBER)%diffp_ram- RAM(RNUMBER)%loss_after)>10 RAM(RNUMBER)%clock= RAM(RNUMBER)%clock+1 if ( RAM(RNUMBER)%clock>20) then ! tclock=clock RAM(RNUMBER)%tol= RAM(RNUMBER)%TOLZERO+(floor( RAM(RNUMBER)%clock/10)-1)*.001 endif ! if (clock==1) continue if ( RAM(RNUMBER)%clock/=1 .and. RAM(RNUMBER)%loss_after> RAM(RNUMBER)%diffp_ram) then RAM(RNUMBER)%Q=RAM(RNUMBER)%Q-.1 elseif ( RAM(RNUMBER)%clock/=1 .and. RAM(RNUMBER)%loss_after<= RAM(RNUMBER)%diffp_ram) then RAM(RNUMBER)%Q=RAM(RNUMBER)%Q+.01 endif !====================Before Regulator========================= !pipe_loss1=3.2; % should be replaced by formula do i=1,NO_PIPINGSRAMLINE RAMS%Re_ramline(RNUMBER,i)=RAM(RNUMBER)%Q*6.30902e-5*DIAM_RAMLINE_INCH(i)*0.0254/(AREA_RAMLINE(i)*nu) enddo do i=1,NO_PIPINGSRAMLINE if ( RAMS%Re_ramline(RNUMBER,i)<Re_cr) then RAMS%fric(RNUMBER,i)=64/ RAMS%Re_ramline(RNUMBER,i) else RAMS%fric(RNUMBER,i)=1/(-1.8*log10((RELROUGH_RAMLINE(i)/3.7)**1.11+6.9/ RAMS%Re_ramline(RNUMBER,i)))**2 endif RAMS%fricloss(RNUMBER,i)=(( RAMS%fric(RNUMBER,i)*(wdens*sg*LENGT_RAMLINE(i)*(RAM(RNUMBER)%Q*6.30902e-5/AREA_RAMLINE(i))**2))/(2*DIAM_RAMLINE_INCH(i)*0.0254))/6895 enddo RAM(RNUMBER)%pipe_loss1=sum( RAMS%fricloss(RNUMBER,1:6)) !loss before regulator(psi) ! Q*6.30902e-5 for (gpm) to (m^3/sec) do i=1,NO_MINORSRAMLINE if (LF_RAMLINE(i)/=0) then RAMS%minlosspa(RNUMBER,i)=LF_RAMLINE(i)*wdens*sg*(RAM(RNUMBER)%Q*6.30902e-5/AREAMINOR_RAMLINE(i))**2/2 !(Pa) RAMS%minloss(RNUMBER,i)= RAMS%minlosspa(RNUMBER,i)/6895 !(psi) elseif (CV_RAMLINE(i)/=0) then RAMS%minlosspa(RNUMBER,i)=1000*sg*((11.7*RAM(RNUMBER)%Q*6.30902e-5*3600)/(CV_RAMLINE(i)))**2 !(pa) RAMS%minloss(RNUMBER,i)= RAMS%minlosspa(RNUMBER,i)/6895 !(psi) else RAMS%minlosspa(RNUMBER,i)=NOTE_RAMLINE(i)*1e5 !(pa) RAMS%minloss(RNUMBER,i)= RAMS%minlosspa(RNUMBER,i)/6895 !(psi) endif enddo RAMS%minloss(RNUMBER,17)= 5.*RAM(RNUMBER)%Q ! <==== regulator loss (psig) RAM(RNUMBER)%minor_loss1=sum( RAMS%minloss(RNUMBER,1:16)) !loss before regulator(psi) RAM(RNUMBER)%static_loss1=0 RAM(RNUMBER)%kinetic_loss1=sg*wdens*(RAM(RNUMBER)%Q*6.30902e-5/((1/4.)*pi*(.72*0.254e-1)**2))**2/(2*6895) !(psi) !.72 for regulator diameter) RAM(RNUMBER)%loss_before= RAM(RNUMBER)%pipe_loss1+ RAM(RNUMBER)%minor_loss1+ RAM(RNUMBER)%static_loss1+ RAM(RNUMBER)%kinetic_loss1 !(psi) !===================after Regulator====================== ! all in (psi) RAM(RNUMBER)%pipe_loss2=sum( RAMS%fricloss(RNUMBER,7:NO_PIPINGSRAMLINE)) !7=after regulator<<<<<<< RAM(RNUMBER)%minor_loss2=sum( RAMS%minloss(RNUMBER,17:NO_MINORSRAMLINE)) !17=after regulator<<<<<<< RAM(RNUMBER)%deltah=H_RAMBOP-H_REGRAM ! RAM(RNUMBER)%static_loss2pa= RAM(RNUMBER)%deltah*sg*wdens*gravity; %(pa) RAM(RNUMBER)%static_loss2= RAM(RNUMBER)%deltah*sg*wdens*gravity/6895 !(psi) RAM(RNUMBER)%kinetic_loss2=0 RAM(RNUMBER)%loss_after= RAM(RNUMBER)%pipe_loss2+ RAM(RNUMBER)%minor_loss2+ RAM(RNUMBER)%static_loss2 !(psi) !======================================================= if(BopControlPanel%ByePassValve == -1.0) then ByPassOld= -1.0 elseif(BopControlPanel%ByePassValve == 1.0) then ByPassOld= 1.0 endif ! write(*,*) 'ByPassOld=', ByPassOld !==========================p_regulator====================== if (PRAMS_REGSET<p_acc- RAM(RNUMBER)%loss_before) then if(ByPassOld == 1.0) then !old=pram_reg !new=PRAMS_REGSET- sum(RAMS%minloss(2:6,17)) ! 2:6 = RNUMBER !difference= new-old PressureDifference= PRAMS_REGSET- sum(RAMS%minloss(2:6,17)) - pram_reg if (ABS(PressureDifference) > BaseDifferenceP) then pram_reg= pram_reg + (PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20. else pram_reg= PRAMS_REGSET- sum(RAMS%minloss(2:6,17)) ! 2:6 = RNUMBER endif !pram_reg=PRAMS_REGSET- sum(RAMS%minloss(2:6,17)) ! 2:6 = RNUMBER else !(ByPassOld == -1.0) !old=pram_reg !new=p_acc- RAM(RNUMBER)%loss_before !difference= new-old PressureDifference= p_acc- RAM(RNUMBER)%loss_before - pram_reg if (ABS(PressureDifference) > BaseDifferenceP) then pram_reg= pram_reg + (PressureDifference/PressureDifferenceSteps) ! PressureDifferenceSteps = 20. else pram_reg= p_acc- RAM(RNUMBER)%loss_before endif endif !pram_reg=p_acc- RAM(RNUMBER)%loss_before else pram_reg=p_acc- RAM(RNUMBER)%loss_before- sum(RAMS%minloss(2:6,17)) ! 2:6 = RNUMBER endif !=========================================================== !====================Flow Rate calculation================== RAM(RNUMBER)%diffp_ram=pram_reg+RAMS%minloss(RNUMBER,17)- RAM(RNUMBER)%p_bop !write(*,*) 'Q calculation' end do ! returns correct Q for one timecounter_ram !write(*,*)'RAM(RNUMBER)%Q= ' , RAM(RNUMBER)%Q !write(*,*) 'UpperRamsLeakMalf , Bottles_Charged_MalfActive=' , UpperRamsLeakMalf , Bottles_Charged_MalfActive if (RAM(RNUMBER)%Bottles_Charged_MalfActive==.true.) then RAM(RNUMBER)%Q= 5.0 ! gpm !write(*,*) 'malffffffffff' endif RAM(RNUMBER)%flow=RAM(RNUMBER)%Q !====================p_accumulator for next iterate================== ! deltav=Q*1*1000; %delta_t=1sec (lit) ! fvr=fvr-deltav; %=fvr_after (lit) ! p_acc=0.001178*fvr^3+0.02019*fvr^2+16.1*fvr+2379; %(psia) ! vdis_bottles=fvr_tot-fvr; %from the start***needed for p_bop calculating (lit) !========for a 10 gal bottle,precharge=1000psig curve BOSCH====== RAM(RNUMBER)%deltav_bottles=RAM(RNUMBER)%Q*DeltaT_BOP/60. !(galon) delta_t=1sec , Q(gpm) fvr=fvr- RAM(RNUMBER)%deltav_bottles !=fvr_after (galon) ! b1=993.7; b2=0.164; b3=5.492; b4=0.9796; RAM(RNUMBER)%p_acccheck=p_acc p_acc=b1*exp(b2*fvr/nobottles)+b3*exp(b4*fvr/nobottles) !(psig)<<<< 8=no. of bottles !formula is derived for fvr (galon) !vdis_bottles=fvr_tot-fvr RAM(RNUMBER)%vdis_bottles= RAM(RNUMBER)%vdis_bottles+ RAM(RNUMBER)%deltav_bottles NoActiveRmas=6.-real(Annular_closed+ShearBop_closed+PipeRam1_closed+PipeRam2_closed+ChokeLine_closed+KillLine_closed) RAM(RNUMBER)%vdis_elecp= RAM(RNUMBER)%vdis_elecp+(deltav_elecp/NoActiveRmas) !overal discharged RAM(RNUMBER)%fvr_air= RAM(RNUMBER)%fvr_air+(deltav_air/NoActiveRmas) !=fvr_after (galon) for next timecounter_ram !write(*,*) 'deltav_air , NoActiveRmas' , deltav_air , NoActiveRmas RAM(RNUMBER)%vdis_tot= RAM(RNUMBER)%vdis_bottles+ RAM(RNUMBER)%fvr_air+ RAM(RNUMBER)%vdis_elecp !overal ! write(*,*) RAM(RNUMBER)%vdis_tot, vdis_bottles, RAM(RNUMBER)%fvr_air, vdis_elecp !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< if (ramtype==1) then !for shear ram if (ShearRamIsClosing) then IDshearBop=(2.*(NeededVolumeShearRams- RAM(RNUMBER)%vdis_tot)*231./AbopShearRam) +ShearIsNotAllowed*ODDrillpipe_inShearRam !write(*,*) 'stop now' !, IDshearBop, NeededVolumeShearRams, RAM(RNUMBER)%vdis_tot, AbopShearRam endif if (ShearRamIsOpening) then IDshearBop=IDshearBopBase-2.*(NeededVolumeShearRams- RAM(RNUMBER)%vdis_tot)*231./AbopShearRam endif if ( RAM(RNUMBER)%vdis_tot>NeededVolumeShearRams) then ShearBop_closed=1 !ShearBop_closed_withPossibility= ShearBop_closed * TD_BOPConnectionPossibility(3) pram_reg=pram_reg+RAMS%minloss(RNUMBER,17) p_acc= RAM(RNUMBER)%p_acccheck if (ShearRamIsClosing) then IDshearBop=0. + ShearIsNotAllowed*ODDrillpipe_inShearRam BopControlPanel%MiddleRamsCloseLED = LedOn MiddleRamsCloseLEDMine = LedOn BopControlPanel%MiddleRamsOpenLED = LedOff MiddleRamsOpenLEDMine = LedOff if (TD_BOPConnectionPossibility(3) == 1 .and. ShearIsNotAllowed==0) then CALL CloseMiddleRams ShearBop_Situation_forTD= 1 ! closed - for TD code endif endif if (ShearRamIsOpening) then IDshearBop=IDshearBopBase BopControlPanel%MiddleRamsOpenLED = LedOn MiddleRamsOpenLEDMine = LedOn BopControlPanel%MiddleRamsCloseLED = LedOff MiddleRamsCloseLEDMine = LedOff CALL OpenMiddleRams ShearBop_Situation_forTD= 0 ! open - for TD code endif endif IDshearBopFinal= IDshearBop ! for output data endif if (ramtype==2) then !for pipe ram1 if (PipeRam1IsClosing) then IDPipeRam1=(2.*(NeededVolumePipeRams1- RAM(RNUMBER)%vdis_tot)*231./AbopPipeRam)+max(ODDrillpipe_inPipeRam1,ODDrillpipe_inPipeRam1Base) endif if (PipeRam1IsOpening) then IDPipeRam1=IDPipeRamBase-2.*(NeededVolumePipeRams1- RAM(RNUMBER)%vdis_tot)*231./AbopPipeRam endif if ( RAM(RNUMBER)%vdis_tot>NeededVolumePipeRams1) then PipeRam1_closed=1 !PipeRam1_Situation_forTD= PipeRam1_closed * TD_BOPConnectionPossibility(2) pram_reg=pram_reg+RAMS%minloss(RNUMBER,17) p_acc= RAM(RNUMBER)%p_acccheck if (PipeRam1IsClosing) then IDPipeRam1=max(ODDrillpipe_inPipeRam1,ODDrillpipe_inPipeRam1Base) BopControlPanel%UpperRamsCloseLED = LedOn UpperRamsCloseLEDMine = LedOn BopControlPanel%UpperRamsOpenLED = LedOff UpperRamsOpenLEDMine = LedOff if (TD_BOPConnectionPossibility(2) == 1) then CALL CloseUpperRams ! for C code call Set_BlowoutFromAnnular(.true.) PipeRam1_Situation_forTD= 1 ! closed - for TD code endif endif if (PipeRam1IsOpening) then IDPipeRam1=IDPipeRamBase BopControlPanel%UpperRamsOpenLED = LedOn UpperRamsOpenLEDMine = LedOn BopControlPanel%UpperRamsCloseLED = LedOff UpperRamsCloseLEDMine = LedOff Call OpenUpperRams ! for C code PipeRam1_Situation_forTD= 0 ! open - for TD code endif endif IDPipeRam1Final= IDPipeRam1 ! for output data endif if (ramtype==3) then !for pipe ram2 if (PipeRam2IsClosing) then IDPipeRam2=(2.*(NeededVolumePipeRams2- RAM(RNUMBER)%vdis_tot)*231./AbopPipeRam)+max(ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam1Base) endif if (PipeRam2IsOpening) then IDPipeRam2=IDPipeRamBase-2.*(NeededVolumePipeRams2- RAM(RNUMBER)%vdis_tot)*231./AbopPipeRam endif if ( RAM(RNUMBER)%vdis_tot>NeededVolumePipeRams2) then PipeRam2_closed=1 !PipeRam2_closed_withPossibility= PipeRam2_closed * TD_BOPConnectionPossibility(4) pram_reg=pram_reg+RAMS%minloss(RNUMBER,17) p_acc= RAM(RNUMBER)%p_acccheck if (PipeRam2IsClosing) then IDPipeRam2=max(ODDrillpipe_inPipeRam2,ODDrillpipe_inPipeRam1Base) BopControlPanel%LowerRamsCloseLED = LedOn LowerRamsCloseLEDMine = LedOn BopControlPanel%LowerRamsOpenLED = LedOff LowerRamsOpenLEDMine = LedOff if (TD_BOPConnectionPossibility(4) == 1) then CALL CloseLowerRams PipeRam2_Situation_forTD= 1 ! closed - for TD code endif endif if (PipeRam2IsOpening) then IDPipeRam2=IDPipeRamBase BopControlPanel%LowerRamsOpenLED = LedOn LowerRamsOpenLEDMine = LedOn BopControlPanel%LowerRamsCloseLED = LedOff LowerRamsCloseLEDMine = LedOff CALL OpenLowerRams PipeRam2_Situation_forTD= 0 ! open - for TD code endif endif IDPipeRam2Final= IDPipeRam2 ! for output data endif if (ramtype==4) then !for Choke Line if (ChokeLineIsClosing) then IDChokeLine=(2.*(NeededVolumeChokeLine- RAM(RNUMBER)%vdis_tot)*231./AbopChokeLine)+max(ODDrillpipe_inChokeLine,ODDrillpipe_inChokeLineBase) endif if (ChokeLineIsOpening) then IDChokeLine=IDChokeLineBase-2.*(NeededVolumeChokeLine- RAM(RNUMBER)%vdis_tot)*231./AbopChokeLine endif if ( RAM(RNUMBER)%vdis_tot>NeededVolumeChokeLine) then ChokeLine_closed=1 pram_reg=pram_reg+RAMS%minloss(RNUMBER,17) p_acc= RAM(RNUMBER)%p_acccheck if (ChokeLineIsClosing) then IDChokeLine=max(ODDrillpipe_inChokeLine,ODDrillpipe_inChokeLineBase) BopControlPanel%ChokeLineCloseLED = LedOn ChokeLineCloseLEDMine = LedOn BopControlPanel%ChokeLineOpenLED = LedOff ChokeLineOpenLEDMine = LedOff CALL CloseChokeLine endif if (ChokeLineIsOpening) then IDChokeLine=IDChokeLineBase BopControlPanel%ChokeLineOpenLED = LedOn ChokeLineOpenLEDMine = LedOn BopControlPanel%ChokeLineCloseLED = LedOff ChokeLineCloseLEDMine = LedOff CALL OpenChokeLine endif endif endif if (ramtype==5) then !for Kill Line if (KillLineIsClosing) then IDKillLine=(2.*(NeededVolumeKillLine- RAM(RNUMBER)%vdis_tot)*231./AbopKillLine)+max(ODDrillpipe_inKillLine,ODDrillpipe_inKillLineBase) endif if (KillLineIsOpening) then IDKillLine=IDKillLineBase-2.*(NeededVolumeKillLine- RAM(RNUMBER)%vdis_tot)*231./AbopKillLine endif if ( RAM(RNUMBER)%vdis_tot>NeededVolumeKillLine) then KillLine_closed=1 pram_reg=pram_reg+RAMS%minloss(RNUMBER,17) p_acc= RAM(RNUMBER)%p_acccheck if (KillLineIsClosing) then IDKillLine=max(ODDrillpipe_inKillLine,ODDrillpipe_inKillLineBase) BopControlPanel%KillLineCloseLED = LedOn KillLineCloseLedMine = LedOn BopControlPanel%KillLineOpenLED = LedOff KillLineOpenLedMine = LedOff CALL CloseKillLine endif if (KillLineIsOpening) then IDKillLine=IDKillLineBase BopControlPanel%KillLineOpenLED = LedOn KillLineOpenLedMine = LedOn BopControlPanel%KillLineCloseLED = LedOff KillLineCloseLedMine = LedOff CALL OpenKillLine endif endif endif !if (ramtype==4) then !for annular ! if (AnnularIsClosing) then ! IDAnnular=((NeededVolumeAnnular-vdis_tot)*231./AbopAnnular)+ODDrillpipe_inAnnular ! endif ! ! if (AnnularIsOpening) then ! IDAnnular=IDAnnularBase-(NeededVolumeAnnular-vdis_tot)*231./AbopAnnular ! endif ! ! if (vdis_tot>NeededVolumeAnnular) then ! ! Annular_closed=1 ! p_acc= RAM(RNUMBER)%p_acccheck ! ! if (AnnularIsClosing) then ! IDAnnular=ODDrillpipe_inAnnular ! AnnularCloseLed = LedOn ! AnnularOpenLed = LedOff ! endif ! ! if (AnnularIsOpening) then ! IDAnnular=IDAnnularBase ! AnnularOpenLed = LedOn ! AnnularCloseLed = LedOff ! endif ! ! endif ! !endif end SUBROUTINE bop_codeAnnular(RNUMBER) USE VARIABLES USE CBopControlPanelVariables USE CEquipmentsConstants USE TD_GeneralData implicit none INTEGER RNUMBER, I !Pannular_regset=min(AnnularRegulatorSetControl,1700.) ! for changing its set conditions instantaneously !==================================================== ! BOP back pressure without DP !==================================================== !if (bop_type==3) then !p_annular=510.725-(30.145*IDAnnular) p_annular=448-(19.7*IDAnnular) ! Q=flow ! endif RAM(RNUMBER)%clock=0 !======================Losses============================ RAM(RNUMBER)%loss_after=0 !initial value RAM(RNUMBER)%diffp_ram=1000 !initial value RAM(RNUMBER)%loss_before=0 !Q=0.0055; %initial flow rate (m^3/s) RAM(RNUMBER)%Q=RAM(RNUMBER)%flow !write(*,*) 'Q1=' , Q !write(*,*) 'tol=' , tol do while (abs( RAM(RNUMBER)%diffp_ram- RAM(RNUMBER)%loss_after)/ RAM(RNUMBER)%diffp_ram>tolAnnular) if (RAM(RNUMBER)%Bottles_Charged_MalfActive==.true.) exit ! while abs( RAM(RNUMBER)%diffp_ram- RAM(RNUMBER)%loss_after)>10 RAM(RNUMBER)%clock= RAM(RNUMBER)%clock+1 if ( RAM(RNUMBER)%clock>20) then ! tclock=clock tolAnnular=tolzeroAnnular+(floor( RAM(RNUMBER)%clock/10)-1)*.001 endif ! if (clock==1) continue if ( RAM(RNUMBER)%clock/=1 .and. RAM(RNUMBER)%loss_after> RAM(RNUMBER)%diffp_ram) then RAM(RNUMBER)%Q=RAM(RNUMBER)%Q-.1 elseif ( RAM(RNUMBER)%clock/=1 .and. RAM(RNUMBER)%loss_after<= RAM(RNUMBER)%diffp_ram) then RAM(RNUMBER)%Q=RAM(RNUMBER)%Q+.01 endif !====================Before Regulator========================= do i=1,NO_PipingsAnnularLine Re_ANNULARline(i)=RAM(RNUMBER)%Q*6.30902e-5*DIAM_ANNULARLINE_INCH(i)*0.0254/(AREA_ANNULARLINE(i)*nu) enddo do i=1,NO_PipingsAnnularLine if (Re_ANNULARline(i)<Re_cr) then fricANNULAR(i)=64/Re_ANNULARline(i) else fricANNULAR(i)=1/(-1.8*log10((RELROUGH_ANNULARLINE(i)/3.7)**1.11+6.9/Re_ANNULARline(i)))**2 endif friclossANNULAR(i)=((fricANNULAR(i)*(wdens*sg*LENGT_ANNULARLINE(i)*(RAM(RNUMBER)%Q*6.30902e-5/AREA_ANNULARLINE(i))**2))/(2*DIAM_ANNULARLINE_INCH(i)*0.0254))/6895 enddo RAM(RNUMBER)%pipe_loss1=sum(friclossANNULAR(1:6)) !loss before regulator(psi) do i=1,NO_MinorsAnnularLine if (LF_ANNULARLINE(i)/=0) then minlosspa_ANNULAR(i)=LF_ANNULARLINE(i)*wdens*sg*(RAM(RNUMBER)%Q*6.30902e-5/AREAMINOR_ANNULARLINE(i))**2/2 !(Pa) minloss_ANNULAR(i)=minlosspa_ANNULAR(i)/6895 !(psi) elseif (CV_ANNULARLINE(i)/=0) then minlosspa_ANNULAR(i)=1000*sg*((11.7*RAM(RNUMBER)%Q*6.30902e-5*3600)/(CV_ANNULARLINE(i)))**2 !(pa) minloss_ANNULAR(i)=minlosspa_ANNULAR(i)/6895 !(psi) else minlosspa_ANNULAR(i)=NOTE_ANNULARLINE(i)*1e5 !(pa) minloss_ANNULAR(i)=minlosspa_ANNULAR(i)/6895 !(psi) endif enddo minloss_ANNULAR(17)= 3.4*RAM(RNUMBER)%Q ! <==== regulator loss (psig) RAM(RNUMBER)%minor_loss1=sum(minloss_ANNULAR(1:16)) !loss before regulator(psi) RAM(RNUMBER)%static_loss1=0 RAM(RNUMBER)%kinetic_loss1=sg*wdens*(RAM(RNUMBER)%Q*6.30902e-5/((1/4.)*pi*(.72*0.254e-1)**2))**2/(2*6895) !(psi) !.72 for regulator diameter) RAM(RNUMBER)%loss_before= RAM(RNUMBER)%pipe_loss1+ RAM(RNUMBER)%minor_loss1+ RAM(RNUMBER)%static_loss1+ RAM(RNUMBER)%kinetic_loss1 !(psi) !===================after Regulator====================== ! all in (psi) RAM(RNUMBER)%pipe_loss2=sum(friclossANNULAR(7:NO_PipingsAnnularLine)) !7=after regulator<<<<<<< RAM(RNUMBER)%minor_loss2=sum(minloss_ANNULAR(17:NO_MinorsAnnularLine)) !17=after regulator<<<<<<< RAM(RNUMBER)%deltah=H_AnnularBop-H_REGRAM ! RAM(RNUMBER)%static_loss2pa= RAM(RNUMBER)%deltah*sg*wdens*gravity; %(pa) RAM(RNUMBER)%static_loss2= RAM(RNUMBER)%deltah*sg*wdens*gravity/6895 !(psi) RAM(RNUMBER)%kinetic_loss2=0 RAM(RNUMBER)%loss_after= RAM(RNUMBER)%pipe_loss2+ RAM(RNUMBER)%minor_loss2+ RAM(RNUMBER)%static_loss2 !(psi) !======================================================= !==========================p_regulator====================== if (Pannular_regset<p_acc- RAM(RNUMBER)%loss_before) then !!new= Pannular_regset-minloss_ANNULAR(17) ! !CALL Pannular_regDelay%AddToFirst( Pannular_regset-minloss_ANNULAR(17) ) !CALL Pannular_regDelay%Remove(Pannular_regDelay%Length()) !Pannular_reg= Pannular_regDelay%Last() Pannular_reg= Pannular_regset-minloss_ANNULAR(17) ! RAM(RNUMBER)%loss_after= RAM(RNUMBER)%loss_after-minloss(17); %minloss(17)=regulator loss else !!new= p_acc- RAM(RNUMBER)%loss_before-minloss_ANNULAR(17) ! !CALL Pannular_regDelay%AddToFirst( p_acc- RAM(RNUMBER)%loss_before-minloss_ANNULAR(17) ) !CALL Pannular_regDelay%Remove(Pannular_regDelay%Length()) !Pannular_reg= Pannular_regDelay%Last() Pannular_reg= p_acc- RAM(RNUMBER)%loss_before-minloss_ANNULAR(17) endif !=========================================================== !====================Flow Rate calculation================== RAM(RNUMBER)%diffp_ram=Pannular_reg+minloss_ANNULAR(17)-p_annular end do ! returns correct Q for one timecounter_ram if (RAM(RNUMBER)%Bottles_Charged_MalfActive==.true.) then RAM(RNUMBER)%Q= 5.0 ! gpm !write(*,*) 'malffffffffff' endif RAM(RNUMBER)%flow=RAM(RNUMBER)%Q !write(*,*) 'minloss_ANNULAR(17)=' , minloss_ANNULAR(17) !write(*,*) '%loss_after=' ,RAM(RNUMBER)%loss_after !====================p_accumulator for next iterate================== ! deltav=Q*1*1000; %delta_t=1sec (lit) ! fvr=fvr-deltav; %=fvr_after (lit) ! p_acc=0.001178*fvr^3+0.02019*fvr^2+16.1*fvr+2379; %(psia) ! vdis_bottles=fvr_tot-fvr; %from the start***needed for p_BOP calculating (lit) !========for a 10 gal bottle,precharge=1000psig curve BOSCH====== RAM(RNUMBER)%deltav_bottles=RAM(RNUMBER)%Q*DeltaT_BOP/60. !(galon) delta_t=1sec , Q(gpm) fvr=fvr- RAM(RNUMBER)%deltav_bottles !=fvr_after (galon) ! b1=993.7; b2=0.164; b3=5.492; b4=0.9796; RAM(RNUMBER)%p_acccheck=p_acc p_acc=b1*exp(b2*fvr/nobottles)+b3*exp(b4*fvr/nobottles) !(psig)<<<< 8=no. of bottles !formula is derived for fvr (galon) !vdis_bottles=fvr_tot-fvr RAM(RNUMBER)%vdis_bottles= RAM(RNUMBER)%vdis_bottles+ RAM(RNUMBER)%deltav_bottles NoActiveRmas=6.-real(Annular_closed+ShearBop_closed+PipeRam1_closed+PipeRam2_closed+ChokeLine_closed+KillLine_closed) RAM(RNUMBER)%vdis_elecp= RAM(RNUMBER)%vdis_elecp+(deltav_elecp/NoActiveRmas) !overal discharged RAM(RNUMBER)%fvr_air= RAM(RNUMBER)%fvr_air+(deltav_air/NoActiveRmas) !=fvr_after (galon) for next timecounter_ram RAM(RNUMBER)%vdis_tot= RAM(RNUMBER)%vdis_bottles+ RAM(RNUMBER)%fvr_air+ RAM(RNUMBER)%vdis_elecp !overal !write(*,*) 'RAM(RNUMBER)%vdis_tot=' , RAM(RNUMBER)%vdis_tot!, vdis_bottles,fvr_air, vdis_elecp !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< !write(*,*) 'a)IDAnnular=' , IDAnnular ! WRITE(*,*) 'a)NeededVolumeAnnular=' , NeededVolumeAnnular ! ! write(*,*) 'AbopAnnular= ' , AbopAnnular ! write(*,*) 'max=' , max(ODDrillpipe_inAnnular,ODDrillpipe_inAnnularBase) !if (ramtype==4) then !for annular if (AnnularIsClosing) then IDAnnular=(2.*(NeededVolumeAnnular- RAM(RNUMBER)%vdis_tot)*231./AbopAnnular)+max(ODDrillpipe_inAnnular,ODDrillpipe_inAnnularBase) !write(*,*) 'b)IDAnnular=' , IDAnnular endif if (AnnularIsOpening) then IDAnnular=IDAnnularBase-2.*(NeededVolumeAnnular- RAM(RNUMBER)%vdis_tot)*231./AbopAnnular endif if ( RAM(RNUMBER)%vdis_tot>NeededVolumeAnnular) then Annular_closed=1 !Annular_closed_withPossibility= Annular_closed * TD_BOPConnectionPossibility(1) !pram_reg=pram_reg+minloss_ANNULAR(17) Pannular_reg= Pannular_reg+minloss_ANNULAR(17) p_acc= RAM(RNUMBER)%p_acccheck if (AnnularIsClosing) then IDAnnular=max(ODDrillpipe_inAnnular,ODDrillpipe_inAnnularBase) BopControlPanel%AnnularCloseLED = LedOn AnnularCloseLedMine = LedOn BopControlPanel%AnnularOpenLED = LedOff AnnularOpenLedMine = LedOff if (TD_BOPConnectionPossibility(1) == 1) then CALL CloseAnnular Annular_Situation_forTD= 1 ! closed - for TD code endif endif if (AnnularIsOpening) then IDAnnular=IDAnnularBase BopControlPanel%AnnularOpenLED = LedOn AnnularOpenLedMine = LedOn BopControlPanel%AnnularCloseLED = LedOff AnnularCloseLedMine = LedOff CALL OpenAnnular Annular_Situation_forTD= 0 ! open - for TD code endif endif IDAnnularFinal= IDAnnular ! for output data !endif end