home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / e / e010 / 1.ddi / SACON < prev    next >
Encoding:
Text File  |  1979-12-31  |  29.2 KB  |  952 lines

  1. /*
  2.  
  3.  
  4.     M I N I - S A C O N   K N O W L E D G E   B A S E 
  5.  
  6.             Version 1.1
  7.               November 5, 1984
  8.  
  9.     This knowledge base is a subset of the SACON knowledge base. 
  10.     It contains just enough knowledge to run the wing-analysis
  11.     typescript.
  12.  
  13.     The knowledge is organized alphabetically by expression name.
  14.     Capitalized words are variables. 
  15.  
  16.     This knowledge base uses the 'whenfound', 'presupposition', and
  17.     'cached' facilities of M.1.
  18.  
  19. */
  20.  
  21.  
  22. /*  
  23.     The top level goal is "initialdata"  because it is a "dummy goal"
  24.     whose value should not be printed by show.  Print-out of conclusions
  25.     is explicit in this kb.
  26. */    
  27.  
  28.  
  29.     initialdata = [idata, consultation_over]. 
  30.  
  31.  
  32. /* _____________ ALPHA_GAMMA ______________________________________________ */
  33.  
  34. rule-1:
  35.     if length_width_ratio(SS) = X
  36.        and X < 1.0
  37.     then alpha_gamma(SS) = [0.0479, 0.0443].
  38.  
  39. rule-2:
  40.     if length_width_ratio(SS) = X
  41.        and 1.0 =< X 
  42.        and X < 1.2
  43.     then alpha_gamma(SS)= [0.0626, 0.0616].
  44.  
  45. rule-3:
  46.     if length_width_ratio(SS) = X
  47.        and 1.2 =< X 
  48.        and X < 1.4
  49.     then alpha_gamma(SS)= [0.0753, 0.077].
  50.  
  51. rule-4:
  52.     if length_width_ratio(SS) = X
  53.        and 1.4 =< X 
  54.        and X < 1.6
  55.     then alpha_gamma(SS)= [0.0862, 0.0906].
  56.  
  57. rule-5:
  58.     if length_width_ratio(SS) = X
  59.        and 1.6 =< X 
  60.        and X < 1.8
  61.     then alpha_gamma(SS)= [0.0948, 0.1017].
  62.  
  63. rule-6:
  64.     if length_width_ratio(SS) = X
  65.        and 1.8 =< X 
  66.        and X < 2.0
  67.     then alpha_gamma(SS)= [0.1017, 0.1106].
  68.  
  69. rule-7:
  70.     if length_width_ratio(SS) = X
  71.        and 2.0 =< X 
  72.        and X < 3.0
  73.     then alpha_gamma(SS)= [0.1189, 0.1336].
  74.  
  75. rule-8:
  76.     if length_width_ratio(SS) = X
  77.        and 3.0 =< X 
  78.        and X < 4.0
  79.     then alpha_gamma(SS)= [0.1235, 0.14].
  80.  
  81. rule-9:
  82.     if length_width_ratio(SS) = X
  83.        and 4.0 =< X 
  84.     then alpha_gamma(SS)= [0.125, 0.1422].
  85.  
  86.  
  87. /* _____________ ALUMINUM ___________________________________________ */
  88.  
  89. fact-1:  aluminum(high-strength-aluminum).
  90. fact-2:  aluminum(upgraded-aluminum).
  91. fact-3:  aluminum(structural-aluminum).
  92. fact-4:  aluminum(concrete) = no.
  93. fact-5:  aluminum(high-strength-concrete) = no.
  94.  
  95.  
  96. /* _____________ ANALYSIS_CLASS _____________________________________ */   
  97.  
  98. multivalued(analysis_class(STRUCTURE)).
  99.  
  100. rule-10:
  101.     if nonlinearity(STRUCTURE) is unknown and
  102.        not(any_nonlinearsupport(STRUCTURE))
  103.     then analysis_class(STRUCTURE) = linear_analysis.
  104.           
  105. rule-11:
  106.     if any_nonlinearsupport(STRUCTURE) 
  107.     then analysis_class(STRUCTURE) = nonlinear_boundary_condition.
  108.  
  109. rule-12: 
  110.     if nonlinearity(STRUCTURE) = material and
  111.        deflection(STRUCTURE) is unknown and
  112.        listof(stress(STRUCTURE)) = [cracking_potential]
  113.     then analysis_class(STRUCTURE) = inelastic_crack_growth.
  114. rule-13:
  115.     if nonlinearity(STRUCTURE) = material and
  116.        stress(STRUCTURE) is known and
  117.        deflection(STRUCTURE) is known 
  118.     then analysis_class(STRUCTURE) = general_inelastic.
  119.  
  120.  
  121. /* _________________ ANALYSIS_RECS ________________________________________ */ 
  122.     
  123. multivalued(analysis_recs(STRUCTURE)).
  124.  
  125. rule-14:
  126.     if listof(nonlinearity(STRUCTURE)) = [material] 
  127.     then analysis_recs(STRUCTURE) = [nl,
  128. 'Activate incremental stress-incremental strain analysis.',nl, nl,
  129. 'Model nonlinear stress-strain relations of the material.', nl, nl,
  130. 'Solution will be based on a mix of gradient and Newton methods.'].
  131.  
  132. rule-15:
  133.     
  134.     if not(nonlinearity(STRUCTURE) is unique)
  135.     then analysis_recs(STRUCTURE) = [nl,
  136. 'Use large displacement formulation for stress and strain.',nl,nl,
  137. 'Consider whether forces retain orientation to structure',nl,
  138. '  or a fixed direction in space.',nl,nl,
  139. 'Solution will be based on a modified Newton-Raphson approach.',nl,
  140. '  Perform incremental stress and incremental strain analyses.',nl,nl,
  141. 'Model nonlinear stress-strain relation of the material.']. 
  142.  
  143. rule-16:
  144.     if stress(STRUCTURE) = fatigue 
  145.     then analysis_recs(STRUCTURE) = [nl,
  146. 'Special code should be written to scan peak stress at each step,',nl,
  147. '  and evaluate fatigue.', nl,nl,
  148. 'A single cycle of loading is sufficient for fatigue estimates.'].
  149.  
  150. rule-17:
  151.     if stress(STRUCTURE) = stress_exceedence 
  152.     then analysis_recs(STRUCTURE) = [nl,
  153. 'Special code should be written to scan stresses, smooth stresses,',nl,
  154. '  and compare with allowable stresses (with appropriate safety factors).'].
  155.  
  156. rule-18: if deflection(STRUCTURE) = excessive_deflection 
  157.     then analysis_recs(STRUCTURE) = [nl,
  158. 'Special code should be written to scan deflections, calculate',nl,
  159. '  relative values, and compare with engineering code limits.'].
  160.  
  161. rule-19:
  162.     if deflection(STRUCTURE) = kinematic_collapse
  163.     then analysis_recs(STRUCTURE) = [nl,
  164. 'Special code should be written to evaluate kinematic collapse mode',nl,
  165. '  when stiffness degenerates to zero.'].
  166.  
  167. rule-20:
  168.     if deflection(STRUCTURE) = incremental_strain_failure 
  169.     then analysis_recs(STRUCTURE) = [nl,
  170. 'Cumulative strain damage should be calculated.', nl, nl,
  171. 'Analysis should include two or more load cycles (if cyclic)', nl,
  172. '  with extrapolation for strain accumulation.', nl, nl,
  173. 'Special code should be written to perform shakedown extrapolation.'].
  174.  
  175.  
  176. /* ______________ ANY_NONLINEARSUPPORT ____________________________________ */
  177.  
  178. question(any_nonlinearsupport(STRUCTURE)) = [
  179.  'Do the supports of the ', STRUCTURE, ' involve Coulomb friction,',nl,
  180.  'nonlinear springs, and/or gapping? (Answer yes or no.)'].
  181.  
  182. legalvals(any_nonlinearsupport(STRUCTURE)) = [yes,no].
  183.  
  184.  
  185. /* ______________ AVERAGE_LONGEST_DIMENSION ______________________________ */
  186.  
  187. question(average_longest_dimension(SS)) =  [
  188.  'Enter the average longest dimension of the ', SS, ' in inches.',nl,
  189.  '(Use the format: xxx.x.)'].
  190.  
  191. legalvals(average_longest_dimension(SS)) = number.
  192.  
  193.  
  194. /* _____________ CANNOT-PROVIDE-ADVICE ________________________________ */
  195.  
  196. rule-21: 
  197.     if time_dependent(STRUCTURE) = yes or
  198.            temp_dependent(STRUCTURE) = yes
  199.         then cannot-provide-advice(STRUCTURE).
  200.  
  201. rule-22: 
  202.     if analysis_class(STRUCTURE) is unknown
  203.     then cannot-provide-advice(STRUCTURE).
  204.  
  205.  
  206. /* ______________ COMPOSITION ____________________________________________ */
  207.  
  208. question(composition(SS)) =
  209.     ['What is the material composing most of the ', SS, '?'].
  210.  
  211. legalvals(composition(SS)) = 
  212.     [high-strength-aluminum, upgraded-aluminum, structural-aluminum,
  213.      high-strength-steel, upgraded-steel, structural-steel, concrete,
  214.      high-strength-concrete].
  215.  
  216.  
  217. /* ______________ CONCLUSIONS_PRINTED ____________________________________ */
  218.  
  219. rule-23:
  220.     if sname = STRUCTURE and
  221.        analysis_class(STRUCTURE) is known and
  222.        analysis_recs(STRUCTURE) is known and
  223.        displayac(STRUCTURE) and
  224.        displayar(STRUCTURE) 
  225.     then conclusions_printed.
  226.  
  227. rule-24:
  228.     if sname = STRUCTURE and
  229.        analysis_class(STRUCTURE) is known and
  230.        analysis_recs(STRUCTURE) is unknown and
  231.        displayac(STRUCTURE)
  232.     then conclusions_printed.
  233.  
  234.  
  235. /* ______________ CONSTRUCTION ____________________________________________ */
  236.  
  237. question(construction(SUBSTRUCTURE)) = 
  238.   ['Would you describe the construction of the ', SUBSTRUCTURE, ' to be a',nl,
  239.    '  * network.    (truss and/or frame elements)',nl,
  240.    '  * continuum.  (sheets and/or blocks of material), or ',nl,
  241.    '  * network and continuum.  (a combination)?']. 
  242.  
  243. legalvals(construction(SUBSTRUCTURE)) = [network, continuum].
  244.  
  245. multivalued(construction(SUBSTRUCTURE)).
  246.  
  247.  
  248. /* _____________ CONSULTATION_OVER ________________________________________ */
  249.  
  250. rule-25:
  251.     if sname = STRUCTURE and
  252.        cannot-provide-advice(STRUCTURE) and
  253.        display('Unfortunately, SACON cannot handle your case.')
  254.     then consultation_over.
  255.  
  256. rule-26:
  257.     if sname = STRUCTURE and
  258.        analysis_class(STRUCTURE) is known and
  259.        analysis_recs(STRUCTURE) is sought and
  260.        conclusions_printed
  261.     then consultation_over.
  262.  
  263.  
  264. /* _____________ CYCLES ___________________________________________________ */
  265.  
  266. question(cycles(LOADING)) = [
  267.  'Enter the number of cycles of ', LOADING, ' that will be applied.',nl,
  268.  '(Use the format: xxx.x.)'].
  269.  
  270. legalvals(cycles(LOADING)) = number.
  271.  
  272.  
  273. /* _______________ DEFLECTION _____________________________________________ */
  274.  
  275. multivalued(deflection(STRUCTURE)).
  276.  
  277. rule-27: 
  278.     if substructure(STRUCTURE) = SS and
  279.        ss_deflection(SS) = X 
  280.     then deflection(STRUCTURE) = X.
  281.  
  282.  
  283. /* ____________ DEFLECTION_BOUND __________________________________________ */
  284.  
  285. rule-28: 
  286.     if listof(X, (loading_component(LOADING) = LOADCOMPONENT and
  287.         deflection_stress_magnitudes(LOADCOMPONENT) =[X,S])) = DMS and
  288.        sum(DMS) = SB
  289.     then deflection_bound(LOADING) = SB.
  290.  
  291.  
  292. /* _____________ DEFLECTION_STRESS_MAGNITUDES _____________________________ */
  293.  
  294. rule-29:
  295.     if distribution(LOADCOMP) = point
  296.              and cached(loading_component(LOADING) = LOADCOMP)
  297.        and cached(loading(SS) = LOADING)
  298.        and support_configuration(SS) = one-side
  299.        and shape(SS) = beam
  300.        and site(LOADCOMP) = near-free-edge
  301.        and direction(LOADCOMP) = width-length
  302.        and point_mag(LOADCOMP) = PM
  303.        and average_longest_dimension(SS) = LE
  304.        and depth(SS) = DEPTH
  305.        and youngs_modulus(SS) = YO
  306.        and einertia(SS) = EI
  307.        and (3.0 * PM * DEPTH * LE) / (8.0 * EI) = STRESSMAG
  308.        and (3.0 * PM * LE * LE)/(16.0 * YO * EI) = DEFLECTMAG
  309.     then deflection_stress_magnitudes(LOADCOMP) = [DEFLECTMAG, STRESSMAG].
  310.  
  311. rule-30:
  312.     if distribution(LOADCOMP) = point
  313.              and cached(loading_component(LOADING) = LOADCOMP)
  314.        and cached(loading(SS) = LOADING)
  315.        and support_configuration(SS) = one-side
  316.            and shape(SS) = beam
  317.        and site(LOADCOMP) = near-centroid
  318.        and direction(LOADCOMP) = width-length
  319.        and point_mag(LOADCOMP) = POINTMAG
  320.        and youngs_modulus(SS)= YO
  321.        and average_longest_dimension(SS) = LE
  322.        and depth(SS) = DE
  323.        and einertia(SS) = EI
  324.        and (POINTMAG * DE * LE) / (4.0 * EI) = STRESSMAG
  325.        and (POINTMAG * LE * LE) / (12.0 * YO * EI) = DEFLECTMAG
  326.     then deflection_stress_magnitudes(LOADCOMP) = [DEFLECTMAG, STRESSMAG].
  327.  
  328. rule-31:
  329.     if distribution(LOADCOMP) = point
  330.              and cached(loading_component(LOADING) = LOADCOMP)
  331.        and cached(loading(SS) = LOADING)
  332.        and support_configuration(SS) = one-side
  333.        and shape(SS) = beam
  334.        and site(LOADCOMP) = near-support
  335.        and direction(LOADCOMP) = width-length
  336.        and point_mag(LOADCOMP) = PM
  337.        and youngs_modulus(SS) = YO
  338.        and average_longest_dimension(SS) = LE
  339.        and depth(SS) = DE
  340.        and einertia(SS) = EI
  341.        and (PM * DE * LE) / (8.0 * EI) = STRESSMAG
  342.        and (PM * LE * LE) / (48.0 * YO * EI) = DEFLECTMAG
  343.     then deflection_stress_magnitudes(LOADCOMP) = [DEFLECTMAG, STRESSMAG].
  344.  
  345. rule-32:
  346.     if sm_and_dm_parms(LC) = [EI, DM, L, D, YM] and
  347.        ((D * DM * (L * L)) / (4 * EI)) = STRESSMAG and
  348.        ((DM * (L * L * L))/ (24.0 * YM * EI)) = DEFLECTIONMAG        
  349.     then deflection_stress_magnitudes(LC) = [DEFLECTIONMAG, STRESSMAG].
  350.  
  351.  
  352. rule-33:
  353.     if direction(LOADCOMP) = width-length
  354.        and distribution(LOADCOMP) = distributed
  355.              and cached(loading_component(LOADING) = LOADCOMP)
  356.        and cached(loading(SS) = LOADING)
  357.        and support_configuration(SS) = four-sides    
  358.        and shape(SS) = SHAPE
  359.        and surface_shape(SHAPE)
  360.        and average_longest_dimension(SS) = LE
  361.        and depth(SS) = DEPTH
  362.        and dist_mag(LOADCOMP) = DIST
  363.        and alpha_gamma(SS)= [ALPHA, GAMMA]
  364.        and einertia(SS) = EI
  365.        and youngs_modulus(SS) = YO
  366.        and ALPHA * DEPTH * DIST * LE * LE / (2.0 * EI) = STRESSMAG
  367.        and GAMMA * DIST * LE * LE * LE / (6.0 * YO * EI) = DEFLECTMAG
  368.     then deflection_stress_magnitudes(LOADCOMP) = [DEFLECTMAG, STRESSMAG].
  369.  
  370.  
  371. /* _____________ DENSITY _________________________________________________ */ 
  372.  
  373. rule-34:
  374.     if composition(SS) = X and
  375.        aluminum(X)
  376.     then density(SS) = 0.1.
  377.  
  378. rule-35:
  379.     if composition(SS) = concrete
  380.     then density(SS) = 0.0868055.
  381.  
  382.  
  383. rule-36:
  384.     if composition(SS) = high-strength-concrete
  385.     then density(SS) = 0.0868055.
  386.  
  387.  
  388. /* _______________ DEPTH _________________________________________________ */
  389.  
  390. question(dept(SUBSTRUCTURE)) = [
  391. 'Enter the average depth of the ', SUBSTRUCTURE, ' in inches.',nl,
  392.  '(Use the format: xxx.x.)'].
  393.  
  394. legalvals(depth(SUBSTRUCTURE)) = number.
  395.  
  396.  
  397. /* ________________ DIRECTION _____________________________________________ */
  398.  
  399. question(direction(LOADCOMP)) = 
  400.  ['Which surface of the substructure does ', LOADCOMP, ' act normal to?'].
  401.  
  402. legalvals(direction(LOADCOMP)) = 
  403.     [thickness-length, thickness-width, width-length].
  404.  
  405.  
  406. /* ________________ DISPLAYAC _____________________________________________ */
  407.  
  408. multivalued(displayac(STRUCTURE)).
  409.  
  410. rule-37:
  411.     if display([nl,nl,
  412. 'The following analysis classes are relevant to the analysis of',nl,
  413. 'your structure:', nl, nl]) and
  414.        analysis_class(STRUCTURE) = X and
  415.        display([X,nl,nl])
  416.     then displayac(STRUCTURE).
  417.  
  418.  
  419. /* ________________ DISPLAYAR ____________________________________________ */ 
  420.  
  421. multivalued(displayar(STRUCTURE)).
  422.  
  423. rule-38:
  424.     if display(['The following are specific analysis recommendations',nl,
  425.                 'you should follow when performing the structure', nl,
  426.             'analysis:', nl]) and
  427.        analysis_recs(STRUCTURE) = X and
  428.        display(X) and
  429.        display([nl])
  430.     then displayar(STRUCTURE).
  431.  
  432.  
  433. /* _________________ DIST_MAG ____________________________________________ */
  434.  
  435. question(dist_mag(LC)) = [
  436.  'Enter the magnitude of the distributed load (in psi).',nl,
  437.  '(Use the format: xxx.x.)'].
  438.  
  439. legalvals(dist_mag(LC)) = number.
  440.  
  441.  
  442. /* __________________ DISTRIBUTION _______________________________________ */
  443.  
  444. question(distribution(LOADCOMP)) = [
  445.  'Would you describe ', LOADCOMP, ' as being distributed over most of',nl,
  446.  'the substructure or as acting at a point of the substructure?',nl,
  447.  '  * distributed.',nl,
  448.  '  * point.'].
  449.  
  450. legalvals(distribution(LOADCOMP)) = [distributed, point].
  451.  
  452.  
  453. /* ________________ EINERTIA _____________________________________________ */
  454.  
  455. rule-39:
  456.     if shape(SS) = X and 
  457.        surface_shape(X) and
  458.        thin_walled_or_solid(SS) = thin-walled and
  459.        wall_thickness(SS) = THICKNESS and
  460.        depth(SS) = DEPTH and
  461.        weight(SS) = WEIGHT and
  462.        density(SS) = DENSITY and
  463.        average_longest_dimension(SS) = LENGTH and 
  464.        (THICKNESS * (DEPTH * DEPTH)) / 2.0 = EI
  465.     then einertia(SS) = EI. 
  466.  
  467. rule-40:
  468.     if shape(SS) = SHAPE
  469.        and surface_shape(SHAPE)
  470.       /*the above two lines mean shape must be one of the surface shapes*/
  471.        and thin_walled_or_solid(SS) = solid
  472.        and depth(SS) = DEPTH
  473.        /* and weight(SS) = WEIGHT
  474.           and density(SS) = DENSITY (used by 106_b) */
  475.        and average_longest_dimension(SS) = LENGTH
  476.        and (DEPTH * DEPTH * DEPTH) / 12.0 = EINERTIA
  477.     then einertia(SS) = EINERTIA.
  478.  
  479. rule-41:
  480.     if shape(SS) = beam
  481.        and thin_walled_or_solid(SS) = thin-walled
  482.        and wall_thickness(SS) = THICKNESS
  483.        and ewidth(SS) = EWIDTH
  484.        and depth(SS) = DEPTH
  485.        and (THICKNESS * EWIDTH * DEPTH * DEPTH) / 2.0 = EINERTIA
  486.     then einertia(SS) = EINERTIA.
  487.  
  488.  
  489. /* _______________ ERROR ________________________________________________ */
  490.  
  491. question(error(STRUCTURE)) = [
  492.  'Assuming that your characterization of the ',STRUCTURE, ' in terms',nl,
  493.  'of its geometry, material characteristics, and boundary conditions',nl,
  494.  'are accurate, how much error (in percent) is tolerable for the',nl,
  495.  'analysis? (Enter a number between 5 and 30.)'].
  496.  
  497. legalvals(error(STRUCTURE)) = number(0,100).
  498.  
  499.  
  500. /* ________________ ERRORCLASS __________________________________________ */
  501.  
  502. rule-42:
  503.     if sname = STRUCTURE and
  504.        error(STRUCTURE) = E and
  505.        E >= 5.0 and
  506.        E =< 30.0 
  507.     then errorclass = moderate.
  508.  
  509.  
  510. /* _______________ EWIDTH _________________________________________________ */
  511.  
  512. rule-43:
  513.     if shape(SS) = X and 
  514.        surface_shape(X) and
  515.        thin_walled_or_solid(SS) = thin-walled and
  516.        wall_thickness(SS) = THICKNESS and
  517.        depth(SS) = DEPTH and
  518.        weight(SS) = WEIGHT and
  519.        density(SS) = DENSITY and
  520.        average_longest_dimension(SS) = LENGTH and 
  521.        WEIGHT / (2.0 * LENGTH * THICKNESS * DENSITY) = EWIDTH
  522.     then ewidth(SS) = EWIDTH. 
  523.  
  524. rule-44:
  525.     if shape(SS) = SHAPE
  526.        and surface_shape(SHAPE)
  527.        /*the above two lines mean shape must be one of the surface shapes*/
  528.        and thin_walled_or_solid(SS) = solid
  529.        and depth(SS) = DEPTH
  530.        and weight(SS) = WEIGHT
  531.        and density(SS) = DENSITY
  532.        and average_longest_dimension(SS) = LENGTH
  533.        and WEIGHT/(LENGTH * DEPTH * DENSITY) = EWIDTH
  534.     then ewidth(SS) = EWIDTH.
  535.  
  536. rule-45:
  537.     if shape(SS) = beam
  538.        and thin_walled_or_solid(SS) = thin-walled
  539.        and wall_thickness(SS) = THICKNESS
  540.        and weight(SS) = WEIGHT
  541.        and density(SS) = DENSITY
  542.        and average_longest_dimension(SS) = LENGTH
  543.        and WEIGHT / (2.0 * LENGTH * THICKNESS * DENSITY) = EWIDTH
  544.     then ewidth(SS) = EWIDTH.
  545.  
  546.  
  547. /* _________________ GEOMETRY _____________________________________________ */
  548.  
  549. question(geometry(SUBSTRUCTURE)) = 
  550.  ['Is the overall geometry of the ', SUBSTRUCTURE, ' curved or planar?'].
  551.  
  552. legalvals(geometry(SUBSTRUCTURE)) = [curved, planar].
  553.  
  554.  
  555. /* ________________ IDATA ________________________________________________ */
  556.  
  557. /*
  558.     This rule is used to find the structure name, the allowable error, 
  559.     and the integrity goal (rather than in an initialdata specification)
  560.     so that the questions for those expressions can contain the actual
  561.     structure name provided by the user.
  562. */
  563.  
  564. rule-46:
  565.     if sname = STRUCTURE and 
  566.        error(STRUCTURE) is sought and 
  567.        integrity_goal(STRUCTURE) is sought
  568.     then idata = found.
  569.  
  570.  
  571. /* ________________ INTEGRITY_GOAL ________________________________________ */
  572.  
  573. question(integrity_goal(STRUCTURE)) = [
  574.  'Do you want to examine the responses of the ', STRUCTURE, ',', nl,
  575.  'evaluate its instability, or both?
  576.     * examine.
  577.     * evaluate.
  578.     * examine and evaluate.'].
  579.  
  580. legalvals(integrity_goal(STRUCTURE)) = 
  581.     [examine_responses, evaluate_instability]. 
  582.  
  583. multivalued(integrity_goal(STRUCTURE)).
  584.  
  585.  
  586. /* _________________ LENGTH _______________________________________________*/
  587.  
  588. fact-6:   length([]) = 0.
  589. fact-7:   length([A]) = 1.
  590. fact-8:   length([A,B]) = 2.
  591. fact-9:   length([A,B,C]) = 3.
  592. fact-10:  length([A,B,C,D]) = 4.
  593. fact-11:  length([A,B,C,D,E]) = 5.
  594.  
  595. rule-47:
  596.     if length(L) = N and
  597.        N + 1 = M
  598.     then length([X|L]) = M.
  599.  
  600.  
  601. /* _______________ LENGTH_WIDTH_RATIO ____________________________________ */
  602.  
  603.     if average_longest_dimension(SS) = LENGTH
  604.        and ewidth(SS) = EWIDTH
  605.        and EWIDTH/LENGTH = RATIO1
  606.        and LENGTH/EWIDTH = RATIO2
  607.        and maximum(RATIO1,RATIO2) = MRATIO
  608.     then length_width_ratio(SS) = MRATIO.
  609.  
  610.  
  611. /* ________________ LOADING _______________________________________________ */ 
  612.  
  613. question(loading(SS)) = [
  614.  'What are the names of the loadings on the ', SS, '?',nl,
  615.  '(Enter a name, or names separated by commas.)'].
  616.  
  617. multivalued(loading(SS)).
  618.  
  619. metafact-1:
  620.      whenfound(loading(SS) = LOADING) =
  621.                [cycles(LOADING),
  622.         stress_bound(LOADING),
  623.         deflection_bound(LOADING)].
  624.  
  625.  
  626. /* _______________ LOADING_COMPONENT _____________________________________ */
  627.  
  628. asknumber(loading_component(L))
  629.     = ['How many components are there to ', L, '?'].
  630.  
  631. nameof(loading_component(L), N) = L-component-N.
  632.  
  633. multivalued(loading_component(L)).
  634.  
  635. metafact-2:
  636.      whenfound(loading_component(LOADING) = LOADCOMP) =
  637.                [distribution(LOADCOMP),
  638.             direction(LOADCOMP),
  639.         deflection_stress_magnitudes(LOADCOMP)].
  640.  
  641.  
  642. /* _________________ MAXIMUM _____________________________________________ */
  643.  
  644. rule-48:
  645.     if A >= B
  646.     then maximum(A,B) = A.
  647.  
  648. rule-49:
  649.     if A < B
  650.     then maximum(A,B) = B.
  651.  
  652.  
  653. /* _________________ METAL _______________________________________________ */
  654.  
  655. fact-12:  metal(high-strength-aluminum).
  656. fact-13:  metal(high-strength-steel).
  657. fact-14:  metal(upgraded-aluminum).
  658. fact-15:  metal(upgraded-steel).
  659. fact-16:  metal(structural-aluminum).
  660. fact-17:  metal(structural-steel).
  661. fact-18:  metal(concrete) = no.
  662. fact-19:  metal(high-strength-concrete) = no.
  663.  
  664.  
  665. /* _________________ MODELLING_DIMENSIONALITY ____________________________ */
  666.  
  667. question(modelling_dimensionality(SUBSTRUCTURE)) = 
  668.   ['Is the ', SUBSTRUCTURE, ' to be modelled as a 1, 2, or 3 dimensional', nl,
  669.    'system?'].
  670.  
  671. legalvals(modelling_dimensionality(SUBSTRUCTURE)) = integer(1,3).
  672.  
  673.  
  674. /* ______________ ND_DEFLECTION ___________________________________________ */
  675.  
  676. rule-50:
  677.     if listof(DB, loading(SS) = L and
  678.              deflection_bound(L) = DB) = DBSET and
  679.        rms(DBSET) = NDDEFLECTION
  680.     then nd_deflection(SS) = NDDEFLECTION.
  681.  
  682.  
  683. /* _______________ ND_STRESS ______________________________________________ */
  684.  
  685. rule-51:
  686.     if stress_criterion(SS) = SC and
  687.        listof(SB, loading(SS) = L and stress_bound(L) = SB) = SBSET and
  688.        rms(SBSET) = RMSSTRESSBOUNDS and
  689.        ((RMSSTRESSBOUNDS)/SC) = NDSTRESS
  690.     then nd_stress(SS) = NDSTRESS.
  691.  
  692.  
  693. /* ________________ NONLINEARITY __________________________________________ */
  694.  
  695. rule-52:
  696.     if substructure(STRUCTURE) = SS and
  697.        ssnonlinearity(SS) = material 
  698.         then nonlinearity(STRUCTURE) = material.
  699.  
  700.  
  701. /* ________________________ POINT_MAG _____________________________________ */
  702.  
  703. question(point_mag(LC)) = [
  704.  'Enter the magnitude of the point load (in pounds)',nl,
  705.  '(Use the format: xxx.x.)'].
  706.  
  707. legalvals(point_mag(LC)) = number.
  708.   
  709.  
  710. /* __________________ RMS _________________________________________________ */
  711.  
  712. fact-20:  rms([]) = 0.
  713. fact-21:  rms([N])= N.
  714.  
  715. rule-53:
  716.     if sumsquares(NUMLIST) = SQ and
  717.        length(NUMLIST) = L and
  718.        SQ/L = MS and
  719.        sqrt(MS) = X 
  720.     then rms(NUMLIST) = X.
  721.  
  722.  
  723. /* ___________________ SHAPE ______________________________________________ */
  724.  
  725. rule-54: 
  726.     if modelling_dimensionality(SUBSTRUCTURE) = 1 and
  727.        construction(SUBSTRUCTURE) = network 
  728.     then shape(SUBSTRUCTURE) = beam.
  729.  
  730. rule-55:
  731.     if construction(SUBSTRUCTURE) is unique and
  732.        modelling_dimensionality(SUBSTRUCTURE) = 2 and
  733.        geometry(SUBSTRUCTURE) = planar 
  734.     then shape(SUBSTRUCTURE) = plate.
  735.  
  736. rule-56:
  737.     if construction(SUBSTRUCTURE) is unique and
  738.        modelling_dimensionality(SUBSTRUCTURE) = MD and
  739.        MD >= 2 and
  740.        geometry(SUBSTRUCTURE) = curved 
  741.     then shape(SUBSTRUCTURE) = shell.
  742.  
  743.  
  744. /* __________________________ SITE _______________________________________ */
  745.  
  746. question(site(LOADCOMP)) = ['Describe where on the substructure ',LOADCOMP,
  747.   ' is applied.'].
  748. legalvals(site(LOADCOMP)) = [near-centroid, near-support, near-free-edge].
  749.  
  750.  
  751. /* _____________ SM_AND_DM_PARMS __________________________________________ */
  752.  
  753. rule-57:
  754.     if direction(LC) = width-length and
  755.        distribution(LC) = distributed and 
  756.        cached(loading_component(LOADING) = LOADCOMP) and
  757.        cached(loading(SS) = LOADING) and
  758.        support_configuration(SS) = one-side and
  759.        /* actually shape must be one of surface shapes */
  760.        shape(SS) = X and
  761.        surface_shape(X) and
  762.        einertia(SS) = EI and
  763.        dist_mag(LC) = DM and
  764.        average_longest_dimension(SS) = L and
  765.        depth(SS) = D and
  766.        youngs_modulus(SS) = YM  
  767.     then sm_and_dm_parms(LC) = [EI, DM, L, D, YM].
  768.  
  769.  
  770. /* ________________ SNAME _________________________________________________ */
  771.  
  772. question(sname) = 
  773.  'What is the name of the structure you wish to analyze?'.
  774.  
  775.  
  776. /* ________________ SS_DEFLECTION _________________________________________ */ 
  777.  
  778. multivalued(ss_deflection(SUBSTRUCTURE)).
  779.  
  780. rule-58:
  781.     if sname = STRUCTURE
  782.        and integrity_goal(STRUCTURE) = evaluate_instability
  783.     then ss_deflection(SS) = kinematic_collapse.
  784.  
  785. rule-59:
  786.     if errorclass = moderate and
  787.        nd_deflection(SS) = ND and
  788.        ND >= 0.01111111 
  789.     then ss_deflection(SS) = excessive_deflection.
  790.  
  791. rule-60:
  792.     if errorclass = moderate and
  793.        nd_stress(SS) = ND and
  794.        ND > 0.7 and 
  795.        loading(SS) = L and
  796.        cycles(L) = C and
  797.        C >= 2.0 
  798.     then ss_deflection(SS) = incremental_strain_failure.
  799.  
  800.  
  801. /* ____________ SSNONLINEARITY ___________________________________________ */
  802.  
  803. multivalued(ssnonlinearity(SS)).
  804.  
  805. rule-61:
  806.     if errorclass = moderate and
  807.        nd_stress(SS) = ND and
  808.        ND >= 0.7 
  809.     then ssnonlinearity(SS) = material.
  810.  
  811. /*
  812.     The purpose of the following presupposition is to allow the
  813.     subsequent question to be asked ONLY if the above rule could
  814.     not establish a value for ssnonlinearity(SS). If the rule above
  815.     succeeded, the presupposition will be false and M.1 won't ask
  816.     the question.
  817. */
  818.  
  819. metafact-3:
  820.         presupposition(ssnonlinearity(SS)) = ssnonlinearity(SS) is unknown.
  821.  
  822. question(ssnonlinearity(SS)) = 
  823.     ['What types of nonlinearity exist in the ', SS, '?'].
  824.  
  825.  
  826. /* ___________ SS_STRESS __________________________________________________ */ 
  827.  
  828. multivalued(ss_stress(SS)).
  829.  
  830. rule-62:
  831.     if composition(SS) = X and
  832.        metal(X) and
  833.        errorclass = moderate and
  834.        nd_stress(SS) = NDSTRESS and
  835.        NDSTRESS > 0.7 and
  836.        loading(SS) = L and
  837.        cycles(L) = C and
  838.        C >= 10000.0 and
  839.        C =< 1000000.0
  840.     then ss_stress(SS) = fatigue.
  841.  
  842. rule-63:
  843.     if errorclass = moderate and
  844.        nd_stress(SS) = ND and
  845.        ND >= 0.7 
  846.     then ss_stress(SS) = stress_exceedence.
  847.  
  848.  
  849. /* ___________ STRESS _____________________________________________________ */
  850.  
  851. multivalued(stress(STRUCTURE)).
  852.  
  853. rule-64:
  854.     if substructure(STRUCTURE) = SS and
  855.        ss_stress(SS) = STRESS 
  856.     then stress(STRUCTURE) = STRESS.
  857.  
  858.  
  859. /* ____________ STRESS_BOUND _____________________________________________ */
  860.  
  861. rule-65:
  862.     if listof(X, (loading_component(LOADING) = LOADCOMPONENT and
  863.   deflection_stress_magnitudes(LOADCOMPONENT) = [D, X]))= SMS and
  864.        sum(SMS) = SB 
  865.         then stress_bound(LOADING) = SB.
  866.  
  867. question(stress_bound(LOADING)) = [
  868.  'Enter the maximum stress bound at a point, due to all components',nl,
  869.  'of the ', LOADING, ' (in psi.)'].
  870.  
  871. legalvals(stress_bound(LOADING)) = number.
  872.  
  873.  
  874. /* ____________ STRESS_CRITERION _________________________________________ */
  875.  
  876. rule-66:
  877.     if composition(SUBSTRUCTURE) = high-strength-aluminum
  878.     then stress_criterion(SUBSTRUCTURE) = 70000.0 .
  879.  
  880.  
  881. rule-67:
  882.     if composition(SUBSTRUCTURE) = concrete
  883.     then stress_criterion(SUBSTRUCTURE) = 3000.0.
  884.  
  885. rule-68:
  886.     if composition(SUBSTRUCTURE) = high-strength-concrete
  887.     then stress_criterion(SUBSTRUCTURE) = 4000.0.
  888.  
  889.  
  890. /* _____________ SUBSTRUCTURE _____________________________________________ */
  891.  
  892. multivalued(substructure(STRUCTURE)).
  893.  
  894. metafact-4:
  895.         whenfound(substructure(STRUCTURE) = SS) =
  896.       [composition(SS), 
  897.        average_longest_dimension(SS),
  898.        weight(SS),
  899.        thin_walled_or_solid(SS),
  900.        support_configuration(SS),
  901.        shape(SS),
  902.        nd_stress(SS),
  903.        nd_deflection(SS)].
  904.  
  905. question(substructure(STRUCTURE)) = [
  906.  'What are the names of the substructures of the ', STRUCTURE, '?',nl,
  907.  '(Enter a single name if there is only one substructure.  If there is
  908.  more than one, enter the names separated by commas.)'].
  909.  
  910.  
  911. /* _______________ SUM ____________________________________________________ */
  912.  
  913. fact-22:  sum([N]) = N. 
  914.  
  915. rule-69:
  916.     if sum(REST) = RSUM and
  917.        FIRST + RSUM = SUM 
  918.     then sum([FIRST | REST]) = SUM.
  919.  
  920.  
  921. /* _______________ SUMSQUARES ______________________________________________ */
  922.  
  923. rule-70:
  924.     if N * N = NSQ 
  925.     then sumsquares([N]) = NSQ.
  926.  
  927. rule-71:
  928.     if sumsquares(REST) = RSQS and
  929.        FIRST * FIRST = FSQ and
  930.        FSQ + RSQS = SSQS
  931.     then sumsquares([FIRST | REST]) = SSQS.
  932.  
  933.  
  934. /* ________________ SUPPORT_CONFIGURATION _________________________________ */
  935.  
  936. question(support_configuration(SUBSTRUCTURE)) = [
  937.  'What is the configuration of support<!s¿├┐╣    ⁿ≥«├*,;<=>?[]<ar<zw, ├ï╤Φ╗h░Θè(╗\╣ ░ ï√ⁿ≤¬Φ<)â├èCè,@┐\êCCÇΘG░.╡    Φ ä╔u├░╡┐e:tPèêX■═u├CG■╔uδ├C■╔"└├║\R▒═αZ▒═α< t2└"└├▒║\═α< t2└"└├▒═α< t2└"└├SΦ4▒!═α"└[u├<uVü╞Ç╣ÇN÷ u╞Γ⌡^2└├░├SΦ▒"═α"└[├Qâ┴!ç∙ëç∙ï╓▒═αZ├PΦu╞vΘΦ°XΘµ╗;?t ╗ú;?tü}
  938. ├╗;t╗ú;├ü√┐tâ├├▒▓
  939. ═α▒▓═α2└├▒═α2└├[▒.è"└St x è╨═α[CΘδ Φ╤ [C πVΦ&^NN╞Çï╓V▒
  940. ═αΦ╣ ^èT2÷Ç·ÇsFF≥╞
  941. B2└├╗ïWBëW▒▓ ═α"└u÷├╞xδ ╞xδ╞x╗┴░â?tCC■└<
  942. r≤░ZΘ<σPï╩ΦG<t░[Θ+σQï╩╗Φ'u░_ΘσQ╣╗Φ 'Yëüδ╤δü├UYXèxÇ·t╨╩êII,└┤PΦ·<têÇ δΘ[SΦh'ëù┴IIΦß<u[SΦV'ëù╒IIΦ╧<t░\Θ│Σ[÷x uΦ9'ëùΘ├Φ1'ëù²Ç>xuIISΦó<u╙[Φ'ëùΘ├ΦAⁿu░`ΘxΣ¿@u$<r <t╗Φ_&t░aΘ]Σ╟üδ╤δü├Uè╞$,┤└ï╪╟ç┴╟ç╒╟ç²╟çΘ├ë╗ è╡ICπ
  943. èΦ≡Γu    CΓ÷║πΘ╡&SQCIπ
  944. èΦ┌ΓtCΓ÷X+┴[K@èQêSΦσï╙[YêΘì&╞yRï╩ΦΦ<uXΦ/&â├èêz╛\YSIIΦ╬<u>Φ&â├è╡ICâ∙w-┐eπè<ar<zw, WΦα_êGCΓΘâ hs╞ Gδ⌡[Φ¬uΘ╘PΦít<:uX<Pwε,ArΩ■└êΦïtßδ    K■zX╞╣F<*t.<.tΦÅêFΦitΓδ<.u╞yâ∙t AIπ╞ FΓ·δΘwΦEt    <.u⌠╞y╞?FΓ·÷y t╣Φ't<*tΦ>êFΓ∩ΦuC├╞ FΓ·├Φ    u6╞?FΓ·├Qèz■╔uY├Cè<ar<zw, êz
  945. ╔Y├Q┐{▒    ⁿ≥«tY├░Θ¥Γ╛├á\<t    @êF╞:FC╣è< têFCΓ⌠╞.F╣è< t êFCΓ⌠δ┘δτ╗┬ï╬+╦ê┬ΦOï╙├RΦl■▒║Ç═α▒║\═α< tJP║.Φ¢#X+αS▒╥α┤╗Ç╪Φé Φä#▒║\═α< t
  946. P║.Φr#Xδ┌║Φi#YαëYIIIIΘFZJJJJë║ΘÄ$Φ1Ç·arÇΩ ÇΩArÇ·w R▒═αZ▒═α├░Θ╝ß┐⌐Ç}u    Φï°ïU Φ9√ï}à uΩï>┐╟┐à u▄├╞ä├╞ä├áäΘ=╟⌡╟╞W├╟⌡├╟⌡╟╞W├ï⌡è├<uü>╞Wu
  947. ë║ Θ≥#ï╩ççç"└╗'t╗/ ë┬╣┬Θy╞ò├╞ò├áòδ═░Θ░Θ
  948. ░Θ░
  949. Θèαï╩Φ°:─tΘS∞├ï╩Φ²<t░.ΘßαΦ?#ïà█t;╕vΘ2∞├Φ    √
  950. Local Stack  ïΓï¬ΦKΦ∞·Global Stack  ï¿ïαΦ/Φ╨·Free Workspace  ï¿ïε┌ç╙ï¬ïα┘ΦΘÄ·+┌ç╙Φ$!ΦÜ· bytes├ï╩Φb<t░ΘFα╤Ω╤Ωü· v░Θ7α ╥u░Θ.αRIIΦ;<t░ΘαRIIΦ,<t░ΘαΦn"CCYZS╗çΦ²!u╗ô╨Φ2Σ╪è7[ë├░Θ∞▀ï╩Φ·<uEIIçççï 6¿╤Ωï┌ïù',â┬ï┌è2φIt
  951. Bï┌èΦ@Γ÷ï╙╗ΦΩ╟G■YΘ⌠<u$QΦII╗╞&ΦEΦ⌐ï┌C█CYSΦôï┌Zëç╙Θz░!Φq▀╗Φ«2Σ╤α╤α@ëG■╟Gⁿ.├<u    ╨▐╨┌╨ΩΘΦ░!ΦI▀SΦX<u3ï┌ü?.u:BBï╩ï┌+ªZRSRΦ;╗'ÅSç πYªΦδ[Θ┼ [<tΘü·u├░Φ·▐ï╩Φ÷ <t<t░ΘΦ▐╗Φ%KKëï╦[[ï6ÆΘ>Φï╩[[ï6ÆΘ3Φï╩Φ─ <t    <u&ç╙ïCâΘçççïRΦ:!ΦI!ZǵΘB!<t░5Θî▐çççïIIΦè <t░6Θn▐RIIΦ{ <t░;Θ_▐è┬■╚╨└╨└[
  952. °S╤Ω╤Ωâ·v░ΘE▐ï┌C█