diff --git a/@BearImp/calcCap.m b/@BearImp/calcCap.m index 144e93fc2779503034c65cf5684e47603ffbb120..d391d9afcd16330bdad8f6057326d9a9b71996ac 100644 --- a/@BearImp/calcCap.m +++ b/@BearImp/calcCap.m @@ -16,7 +16,7 @@ assert(obj.up2date.G,'Lagergeometrie in Abhängigkeit des Lagerspiels noch nicht assert(obj.up2date.B,'Belastungsverteilung noch nicht berechnet') assert(obj.up2date.H,'Schmierfilmdicke noch nicht berechnet') L = obj.L; S = obj.S; T = obj.T; G = obj.G; B = obj.B; H = obj.H; AddOn = obj.AddOn; psi = obj.psi; -C = struct; +C = obj.C; method = possibleMethods.addDefault(obj.method).C; if ~isfield(C,'k_C') C.k_C = 1; @@ -62,6 +62,10 @@ for posBall_conductive=1:L.numberOfConductiveBalls tempR_li = G.R_li(ballMaterialInd(posBall_conductive)); tempR_la = G.R_la(ballMaterialInd(posBall_conductive)); tempR_RE = G.R_RE(ballMaterialInd(posBall_conductive)); + if any(strcmp(method.outsideArea,{'Schneider_k_c','Schneider_k_vh'})) + tempG = H.G (:,:,posBall_conductive); + tempW = H.W (:,:,posBall_conductive); + end contactInd=B.contactInd(posBall_conductive,:); @@ -101,22 +105,26 @@ for posBall_conductive=1:L.numberOfConductiveBalls case {'TobiasSteffen_Kugelfläche','TobiasSteffen_Laufbahnfläche'} tobias_steffen(B.noContactInd) case 'semianalytisch3D' - - vecStruct=splitVec(contactInd,false); - + vecStruct=splitVec(contactInd,false); for recentVec=length(vecStruct) runSemianalytisch3D(vecStruct{recentVec}) end - end end switch method.outsideArea case 'neglect' case 'k-factor' - C.C_Hertz(:,contactInd,posBall_conductive) = C.k_C .* obj.epsilon_0 .* C.epsilon_primeOil(:,contactInd) .* temp_A(:,contactInd) ./ H.h_minth(:,contactInd); + C.C_out(:,contactInd,posBall_conductive) = (C.k_C-1) .* C.C_Hertz(:,contactInd,posBall_conductive); case 'stateOfTheArt' stateOfTheArt(find(contactInd==1)) + case 'Schneider_k_c' + C.k_c = 9.5923 * H.U.^0.3305 .* tempG.^0.3413 .* tempW.^(-0.3342) .* G.k.^0.1391; + %C.C_Hertz(:,contactInd,posBall_conductive) = k_c(:,contactInd,posBall_conductive) .* C.C_Hertz(:,contactInd,posBall_conductive); + C.C_out(:,contactInd,posBall_conductive) = (C.k_c (:,contactInd,posBall_conductive)-1) .* C.C_Hertz(:,contactInd,posBall_conductive); + case 'Schneider_k_vh' + C.k_vh = 0.7772 * H.U.^0.0451 .* tempG.^0.1522 .* tempW.^(-0.0245) .* G.k.^(-0.0921); + C.C_out(:,contactInd,posBall_conductive) = (C.k_vh(:,contactInd,posBall_conductive)-1) .* C.C_Hertz(:,contactInd,posBall_conductive); case 'Leander_Parallel' leander_parallel(B.contactInd) case 'Leander_Radial' @@ -126,9 +134,7 @@ for posBall_conductive=1:L.numberOfConductiveBalls case {'TobiasSteffen_Kugelfläche','TobiasSteffen_Laufbahnfläche'} tobias_steffen(B.contactInd) case 'semianalytisch3D' - - vecStruct=splitVec(contactInd,true); - + vecStruct=splitVec(contactInd,true); for recentVec=1:length(vecStruct) runSemianalytisch3D(vecStruct{recentVec}) end @@ -174,13 +180,15 @@ function calcZg end function stateOfTheArt(indices) - y_max_i = @(x) G.R_y(1).*(1-x.^2./2./G.R_x(1).^2); - y_max_a = @(x) G.R_y(2).*(1-x.^2./2./G.R_x(2).^2); + y_max_i = @(x) G.R_y(1).*(1-x.^2./G.R_x(1).^2); + y_max_a = @(x) G.R_y(2).*(1-x.^2./G.R_x(2).^2); for ii = indices h_i = @(x,y) B.s(ii) + x.^2./2./G.R_x(1) + y.^2./2./G.R_y(1); h_a = @(x,y) B.s(ii) + x.^2./2./G.R_x(2) + y.^2./2./G.R_y(2); - C.C_out(1,ii) = 4 * obj.epsilon_0 * S.epsilon_Oel * integral2(@(x,y) 1./h_i(x,y),temp_a(1,ii),G.R_x(1),temp_b(1,ii),y_max_i); - C.C_out(2,ii) = 4 * obj.epsilon_0 * S.epsilon_Oel * integral2(@(x,y) 1./h_a(x,y),temp_a(2,ii),G.R_x(2),temp_b(2,ii),y_max_a); + y_min_i = @(x) temp_b(1,ii) .* sqrt(1 - min(x.^2./temp_a(1,ii).^2,1)); + y_min_a = @(x) temp_b(2,ii) .* sqrt(1 - min(x.^2./temp_a(2,ii).^2,1)); + C.C_out(1,ii) = 4 * obj.epsilon_0 * S.epsilon_Oel * integral2(@(x,y) 1./max(h_i(x,y),temp_h_0(1,ii)),temp_a(1,ii),G.R_x(1),y_min_i,y_max_i); + C.C_out(2,ii) = 4 * obj.epsilon_0 * S.epsilon_Oel * integral2(@(x,y) 1./max(h_a(x,y),temp_h_0(1,ii)),temp_a(2,ii),G.R_x(2),y_min_a,y_max_a); end end diff --git a/@BearImp/calcFilm.m b/@BearImp/calcFilm.m index b2cb8ad039fa38c494f84fd5e9dba82bc12dfb1b..b734c6fea58d2c4852fa26412dc14b815189cce9 100644 --- a/@BearImp/calcFilm.m +++ b/@BearImp/calcFilm.m @@ -29,7 +29,7 @@ assert(obj.up2date.L,'Lager nicht gesetzt') assert(obj.up2date.S,'Schmierstoff nicht gesetzt') assert(obj.up2date.T,'Schmierstoffparameter noch nicht berechnet') assert(obj.up2date.G,'Lagergeometrie in Abhängigkeit des Lagerspiels noch nicht berechnet') -if isPreCalc == 0 +if ~isPreCalc assert(obj.up2date.B,'Belastungsverteilung noch nicht berechnet') end L=obj.L; S = obj.S; T = obj.T; G = obj.G; B = obj.B; T_Oil = obj.T_Oil; omega = obj.omega; @@ -55,7 +55,7 @@ switch isPreCalc end H.b = (6*[G.fraktE_i;G.fraktE_a].*Q_temp.*reshape([G.R_si(ballMaterialInd);G.R_sa(ballMaterialInd)],2,1,[]) ./ (pi*[G.k_i;G.k_a].*reshape([G.E_red(ballMaterialInd);G.E_red(ballMaterialInd)],2,1,[]))).^(1/3); -H.a = [G.k_i;G.k_a].*H.b; +H.a = G.k.*H.b; H.A = pi*H.a.*H.b; H.p =Q_temp./H.A; H.alpha_p = 1 ./ (S.a_1 + S.a_2*T_Oil + (S.b_1 + S.b_2*T_Oil).*H.p); @@ -73,9 +73,8 @@ H.M = H.W.*(2.*H.U).^(-3/4); switch method case {'Hamrock/Dowson','Hamrock/Dowson_withoutThermCorr'} - k_tmp = [G.k_i;G.k_a]; - H.H_0 = 2.69 * H.G.^0.53 .* H.U.^0.67 .* H.W.^-0.067 .* (1-0.61*exp(-0.73.*k_tmp)); - H.H_min = 3.63 * H.G.^0.49 .* H.U.^0.68 .* H.W.^-0.073 .* (1- exp(-0.68.*k_tmp)); + H.H_0 = 2.69 * H.G.^0.53 .* H.U.^0.67 .* H.W.^-0.067 .* (1-0.61*exp(-0.73.*G.k)); + H.H_min = 3.63 * H.G.^0.49 .* H.U.^0.68 .* H.W.^-0.073 .* (1- exp(-0.68.*G.k)); H.h_0raw = H.H_0 .*R_x_temp; % without correction factors H.h_min = H.H_min.*R_x_temp; H.L_therm = T.eta_0 .* T.alpha_etaT .* H.u.^2 ./ (4*S.lambda); @@ -113,7 +112,7 @@ if isPreCalc end if strcmp(possibleMethods.addDefault(obj.method).B,'static') - assume(ndims(H.h_0) <= 2,'h_0 must be two dimensional to calculate film for static load distribution') % probably obsolete + assert(ndims(H.h_0) <= 2,'h_0 must be two dimensional to calculate film for static load distribution') % probably obsolete B.s=zeros(2,B.numOfCagePositions,L.numberOfConductiveBalls); B.s(1,B.noContactInd') = B.intersectionBall(1,B.noContactInd)'; diff --git a/@BearImp/calcGeo.m b/@BearImp/calcGeo.m index e00841f7a9625b679ab628221e010b0c2673ba72..ba88b490a5035fb417d5d676ab1088422be533fb 100644 --- a/@BearImp/calcGeo.m +++ b/@BearImp/calcGeo.m @@ -82,6 +82,7 @@ k_a_fkt = @(k_a) (1-2/(k_a^(2)-1)*((fraktF(k_a)/fraktE(k_a))-1)-G.F_a); G.k_i = fzero(k_i_fkt,5); G.k_a = fzero(k_a_fkt,5); +G.k = [G.k_i;G.k_a]; G.fraktF_i = fraktF(G.k_i); G.fraktF_a = fraktF(G.k_a); diff --git a/@BearImp/calcLub.m b/@BearImp/calcLub.m index c31043dbbb9d2ae36c48428db80ba68328d4d9bf..79b871500ac4c612074cce797ea8076ce27ff8ce 100644 --- a/@BearImp/calcLub.m +++ b/@BearImp/calcLub.m @@ -14,11 +14,11 @@ T.method = possibleMethods.addDefault(obj.method).T; %% Berechnung T.rho = @(theta) S.rho_15.*(1 - S.alpha_rho.*(theta-15)); -T.eta_040 = T.rho(40).*S.nu_40; -T.eta_0100 = T.rho(100).*S.nu_100; -T.alpha_etaT = log(T.eta_040/T.eta_0100)/60; switch T.method case 'linear' + assert(~any(isnan([S.nu_40 S.nu_100])),'Viscosity values not given for the selected lubricant. Choose method.T = ''Vogel''') + T.eta_040 = T.rho(40).*S.nu_40; + T.eta_0100 = T.rho(100).*S.nu_100; T.alpha_eta = (T.eta_0100-T.eta_040)/60; T.eta_00 = T.eta_040 - T.alpha_eta.*40; T.alpha_nu = (S.nu_100 - S.nu_40)/60; @@ -27,11 +27,13 @@ switch T.method T.nu_38 = T.nu_0 + T.alpha_nu.*38; case 'Vogel' assert(~any(isnan([S.B S.C S.K])),'Vogel-Parameters not given for the selected lubricant. Choose method.T = ''linear''') - T.eta_0 = S.K .* exp(S.B ./ (T_Oil + S.C)); - eta_38 = S.K .* exp(S.B ./ (40 + S.C)); - T.nu_38 = eta_38 ./ T.rho(38); + T.eta = @(T) S.K .* exp(S.B ./ (T + S.C)); + T.eta_0 = T.eta(T_Oil); + T.eta_040 = T.eta( 40 ); + T.eta_0100 = T.eta( 100 ); + T.nu_38 = T.eta(38) ./ T.rho(38); end - +T.alpha_etaT = log(T.eta_040/T.eta_0100)/60; %% Attribute ändern obj.T = T; diff --git a/InputData.xlsx b/InputData.xlsx index 40ea2b3f6e53523dfac281d97872c807849d40e8..b05ad322385e1b14a930a628e0de318cd9048e8f 100644 Binary files a/InputData.xlsx and b/InputData.xlsx differ diff --git a/possibleMethods.m b/possibleMethods.m index e96d4efc7c916f03ccbc9e8ab72066fcf25e95f5..f92daad6ff0cda72758ec925432bc398c5783912 100644 --- a/possibleMethods.m +++ b/possibleMethods.m @@ -23,14 +23,14 @@ classdef possibleMethods s = {'Hamrock/Dowson','Hamrock/Dowson_withoutThermCorr','Moes'}; end function s = C - s.unloadedRE = { 'neglect','stateOfTheArt','Leander_Parallel','Leander_Radial','LeanderSteffen','TobiasSteffen_Kugelfläche','TobiasSteffen_Laufbahnfläche','semianalytisch3D'}; - s.outsideArea = {'k-factor','neglect','stateOfTheArt','Leander_Parallel','Leander_Radial','LeanderSteffen','TobiasSteffen_Kugelfläche','TobiasSteffen_Laufbahnfläche','semianalytisch3D'}; + s.unloadedRE = { 'neglect','stateOfTheArt', 'Leander_Parallel','Leander_Radial','LeanderSteffen','TobiasSteffen_Kugelfläche','TobiasSteffen_Laufbahnfläche','semianalytisch3D'}; + s.outsideArea = {'k-factor','neglect','stateOfTheArt','Schneider_k_c','Schneider_k_vh','Leander_Parallel','Leander_Radial','LeanderSteffen','TobiasSteffen_Kugelfläche','TobiasSteffen_Laufbahnfläche','semianalytisch3D'}; end function s = Default % Gibt ein Rechenmethoden-Struct mit den Default-Methoden aus s.T = 'Vogel'; - s.B = 'static'; + s.B = 'dynamic'; s.H = 'Hamrock/Dowson'; s.C.unloadedRE = 'semianalytisch3D'; s.C.outsideArea = 'semianalytisch3D'; diff --git a/testProgram.m b/testProgram.m index c72da0db77611958690d1c4c597829b3a1aa425f..08ee092f819fce200c6325a21572e26db460ea78 100644 --- a/testProgram.m +++ b/testProgram.m @@ -44,6 +44,10 @@ msgbox(msgText,'Programm Update','replace' ); % Berechnung c = BearImp('default'); c.setBearing("6205-C3 mix") +c.method.H = 'Hamrock/Dowson'; +c.method.B = 'dynamic'; +c.method.C.outsideArea = 'stateOfTheArt'; +c.method.C.unloadedRE = 'stateOfTheArt'; c.calculate assert(length(c.psi) == length(c.psi_calc), 'psi_calc entspricht nicht dem optimalen Winkelvektor! Es ist die Funktion ''find_nessecary_psi'' in caculate zu überprüfen.') @@ -59,6 +63,8 @@ msgbox(msgText,'Programm Update', 'replace'); %% 4. Testlauf (d) [Mix-Lager mit wenigeren Abtastpunkten] % Berechnung d = BearImp; +d.method.H = 'Hamrock/Dowson'; +d.method.B = 'static'; d.F_r = 3000; %Bereich zwischen 920-1020 d.F_a = 0; @@ -81,6 +87,10 @@ msgbox(msgText,'Programm Update','replace'); %% 5. Testlauf (e,f) [werden Fehlermeldungen richtig ausgeführt?] e = BearImp('default'); +e.method.H = 'Moes'; +e.method.B = 'dynamic'; +e.method.C.outsideArea = 'Schneider_k_c'; +e.method.C.unloadedRE = 'neglect'; e.psi = [0, 20, 30, 90, 130, 180, 201, 200, 270, 360]/360*2*pi; try e.calculate