diff --git a/@BearImp/calcFilm.m b/@BearImp/calcFilm.m index 58d2468ce2911e2272559d4c201f86467d070632..b2cb8ad039fa38c494f84fd5e9dba82bc12dfb1b 100644 --- a/@BearImp/calcFilm.m +++ b/@BearImp/calcFilm.m @@ -68,6 +68,8 @@ R_y_temp(:,1,:) = G.R_y(:,ballMaterialInd); H.U = T.eta_0 .* H.u ./ (E_red_tmp .* R_x_temp); H.G = H.alpha_p.*E_red_tmp; H.W = Q_temp./(E_red_tmp .* R_x_temp.^2); +H.L = H.G .* H.U.^0.25; +H.M = H.W.*(2.*H.U).^(-3/4); switch method case {'Hamrock/Dowson','Hamrock/Dowson_withoutThermCorr'} @@ -76,9 +78,9 @@ switch method 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_0raw = H.H_0 .*R_x_temp; % without correction factors H.h_min = H.H_min.*R_x_temp; - H.L = T.eta_0 .* T.alpha_etaT .* H.u.^2 ./ (4*S.lambda); + H.L_therm = T.eta_0 .* T.alpha_etaT .* H.u.^2 ./ (4*S.lambda); if strcmp(method,'Hamrock/Dowson') - H.C_korr = 3.94 ./ (3.94 + H.L.^0.62); + H.C_korr = 3.94 ./ (3.94 + H.L_therm.^0.62); else H.C_korr = 1; end @@ -88,7 +90,6 @@ switch method case 'Moes' H.lamda = R_x_temp./R_y_temp; - H.L = H.G .* H.U.^0.25; H.N = H.W .* H.lamda.^0.5 .* H.U.^(-0.75); H.C_RI = 145 * (1+0.796 * H.lamda .^(14/15)) .^(-15/7); @@ -106,58 +107,48 @@ switch method H.h_0 = H.H_0 .*R_x_temp .* H.U.^(0.5); end -switch isPreCalc - case 1 - varargout{1} = H.h_0; - case 0 - switch possibleMethods.addDefault(obj.method).B - case 'static' - - - B.s=zeros(2,B.numOfCagePositions,L.numberOfConductiveBalls); - - B.s(1,B.noContactInd') = B.intersectionBall(1,B.noContactInd)'; - B.s(2,B.noContactInd') = B.intersectionBall(2,B.noContactInd)'; - +if isPreCalc + varargout{1} = H.h_0; + return +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 + B.s=zeros(2,B.numOfCagePositions,L.numberOfConductiveBalls); - if length(size(H.h_0)) <= 2 - B.s(1,B. contactInd) = B.intersectionBall(1,B.contactInd) + H.h_0(1,B.contactInd); - B.s(2,B. contactInd) = B.intersectionBall(1,B.contactInd) + H.h_0(2,B.contactInd); % s beschreibt den Abstand von WK zu Laufbahnen, unter Berücksichtigung des Schmierfilms in der Lastzone - else - B.s(1,B. contactInd') = B.intersectionBall(1,B.contactInd') + H.h_0(1,B.contactInd'); - B.s(2,B. contactInd') = B.intersectionBall(1,B.contactInd') + H.h_0(2,B.contactInd'); % s beschreibt den Abstand von WK zu Laufbahnen, unter Berücksichtigung des Schmierfilms in der Lastzone - end - end + B.s(1,B.noContactInd') = B.intersectionBall(1,B.noContactInd)'; + B.s(2,B.noContactInd') = B.intersectionBall(2,B.noContactInd)'; + B.s(1,B. contactInd) = B.intersectionBall(1,B.contactInd) + H.h_0(1,B.contactInd); + B.s(2,B. contactInd) = B.intersectionBall(1,B.contactInd) + H.h_0(2,B.contactInd); % s beschreibt den Abstand von WK zu Laufbahnen, unter Berücksichtigung des Schmierfilms in der Lastzone +end % Überprüfen, ob die Schmierfilmberechnung innerhalb des vorgegeben % Bereichs liegt -M = H.W.*(2.*H.U).^(-3/4); switch method - case {'Hamrock/Dowson','Hamrock/Dowson_withoutThermCorr'} - rangeLoadParM = [25,500]; % Quelle: Non-Dimensional Groups, Marian 2020, Fig7 - rangeViscParL = [5,15]; - - if strcmp(possibleMethods.addDefault(obj.method).B,'dynamic') - warning('It is not recommended to use Hamrock/Dowson as lubricant film calculation when dynamic load calculation is selected, because the loads become very small outside the load range.') - end - case 'Moes' - rangeLoadParM = [5,1000]; - rangeViscParL = [1,25]; +case {'Hamrock/Dowson','Hamrock/Dowson_withoutThermCorr'} + rangeLoadParM = [25,500]; % Quelle: Non-Dimensional Groups, Marian 2020, Fig7 + rangeViscParL = [5,15]; + + if strcmp(possibleMethods.addDefault(obj.method).B,'dynamic') + warning('It is not recommended to use Hamrock/Dowson as lubricant film calculation when dynamic load calculation is selected, because the loads become very small outside the load range.') + end +case 'Moes' + rangeLoadParM = [5,1000]; + rangeViscParL = [1,25]; end - -if max(rangeLoadParM) < max(M,[],'all') || min(rangeLoadParM) > min(M,[],'all') - warning(['The force for the lubricant film thickness calculation (%f to %f) is outside the permissible range (%f to %f), ' ... - 'which means that the calculated lubricant film is no longer meaningful!'], ... - min(M,[],'all'), max(M,[],'all'), min(rangeLoadParM), max(rangeLoadParM)) + +if max(rangeLoadParM) < max(H.M,[],'all') || min(rangeLoadParM) > min(H.M,[],'all') +warning(['The force for the lubricant film thickness calculation (%.2f to %.2f) is outside the permissible range (%.0f to %.0f), ' ... + 'which means that the calculated lubricant film is no longer meaningful!'], ... + min(H.M,[],'all'), max(H.M,[],'all'), min(rangeLoadParM), max(rangeLoadParM)) end if max(rangeViscParL) < max(H.L,[],'all') || min(rangeViscParL) > min(H.L,[],'all') - warning(['The viscosity parameter for the lubricant film thickness calculation (%f to %f) is outside the permissible range (%f to %f), ' ... - 'which means that the calculated lubricant film is no longer meaningful!'], ... - min(H.L,[],'all'), max(H.L,[],'all'), min(rangeViscParL), max(rangeViscParL)) -end +warning(['The viscosity parameter for the lubricant film thickness calculation (%.2f to %.2f) is outside the permissible range (%.0f to %.0f), ' ... + 'which means that the calculated lubricant film is no longer meaningful!'], ... + min(H.L,[],'all'), max(H.L,[],'all'), min(rangeViscParL), max(rangeViscParL)) end + %% Attribute ändern obj.H = H; obj.B = B; diff --git a/@BearImp/calcLoad.m b/@BearImp/calcLoad.m index 4c3ec037e160ede73c889226dc657d17a05d0afd..fb2d85ece2c8dd94742d6b7de53af58b89de4e88 100644 --- a/@BearImp/calcLoad.m +++ b/@BearImp/calcLoad.m @@ -84,8 +84,8 @@ if strcmp(B.method,'dynamic') assert(any(max(B.Q_intp1) > max(B.Q) & min(B.Q_intp1) < min(B.Q)), 'The interpolated lubricant film thicknesses are extrapolated outside the calculated range! This leads to inaccurate results.') end -B. contactInd = B.Q~=0; % Indices of rolling elements under load (Q not equal to 0) -B.noContactInd = B.Q==0; % Indices of rolling elements that are not loaded +B. contactInd = abs(B.Q) > 2*eps; % Indices of rolling elements under load (Q not equal to 0) +B.noContactInd = abs(B.Q) <= 2*eps; % Indices of rolling elements that are not loaded B.Q_contInd=B.Q; %##um leichter B.Q_contInd anzupassen, falls doch nur ~=0 berechnet werden sollen for posBall_conductive=1:L.numberOfConductiveBalls