Материал: ЛиФП. Лабораторная работа 6

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

T1 <> T2, Reg_C <> T1, Reg_C <> T2, C1XE <=

0, !,

write("See: ", Line), nl,

 

 

write("

\'", C1XE, "\' should be > 0!"), nl, fail; !.

front_string("", "", "") :- !.

 

 

front_string(Line, Param, Tail) :-

 

 

frontchar(Line, LineH, LineT), LineH = ';',

!, Param = "", Tail = LineT;

frontchar(Line, LineH, LineT), LineH <> ';', !, front_string(LineT, T, Tail), str_char(LineHS, LineH),

concat(LineHS, T, Param).

 

 

dialog_str_read_from_console() :-

 

 

dialog_str_read_from_console_1(Name, Source, Density),

dialog_str_read_from_console_2(PrivConsts),

 

dialog_str_read_from_console_3(PrivConsts),

 

dialog_str_read_from_console_4(PrivConsts),

 

get_constants(PrivConsts, Consts),

 

 

 

 

 

 

insert_into_database(Name, Source, Consts, Density), !,

 

 

 

 

 

write("

 

*********************

 

 

"),

nl,

write("

 

* MATERIAL ADDED!

*

 

 

"),

nl,

write("

 

*********************

 

 

"),

nl,

write("

 

any>"), readln(_);

 

 

 

 

write("

*************************

 

 

"),

nl,

write("

*

MATERIAL NOT ADDED!

*

 

 

"),

nl,

write("

*************************

 

 

"),

nl,

write("

 

any>"), readln(_).

 

 

 

 

dialog_str_read_from_console_1(Name, Source, Density) :-

 

 

 

 

 

write("

*************************************

 

"),

nl,

write("

* NAME OF PIEZOMATERIAL TO INSERT *

 

"),

nl,

write("

*************************************

 

"),

nl,

write("

 

str>"), readln(Name), Name <> "", clearwindow(),

 

write("

*****************************

 

"),

nl,

write("

*

SOURCE OF PIEZOMATERIAL

*

 

"),

nl,

write("

*****************************

 

"),

nl,

write("

 

str>"), readln(Source), Source <> "",clearwindow(),

write("

******************************

 

"),

nl,

write("

*

DENSITY OF PIEZOMATERIAL

*

 

"),

nl,

write("

******************************

 

"),

nl,

write("

 

real>"), read_real_greater_0(Density),clearwindow().

dialog_str_read_from_console_2(PrivConsts) :-

 

 

 

 

 

write("

**********************************************

"),

nl,

write("

*

ELASTIC CONSTANTS

 

 

*

"),

nl,

write("

**********************************************

"),

nl,

write("

* 1. Set CE (C11E, C12E, C13E, C33E, C44E)

*

"),

nl,

write("

**********************************************

"),

nl,

write("

* 2. Set CD (C11D, C12D, C13D, C33D, C44D)

*

"),

nl,

write("

**********************************************

"),

nl,

write("

* 3. Set SE (S11E, S12E, S13E, S33E, S44E)

*

"),

nl,

write("

**********************************************

"),

nl,

write("

* 4. Set SD (S11D, S12D, S13D, S33D, S44D)

*

"),

nl,

write("

**********************************************

"),

nl,

write("

* 0. Close

 

 

 

*

"),

nl,

write("

**********************************************

"),

nl,

read_variant(N1, 1, 4, 0), clearwindow(),

 

 

 

 

 

dialog_str_set_elastic_constants_from_console(N1, PrivConsts), clearwindow().

 

 

dialog_str_read_from_console_3(PrivConsts) :-

 

 

 

 

 

write("

******************************

 

"),

nl,

write("

*

PIEZOELECTRIC CONSTANTS

*

 

"),

nl,

write("

******************************

 

"),

nl,

write("

*

1. Set E (E31, E33, E15)

*

 

"),

nl,

write("

******************************

 

"),

nl,

write("

*

2. Set D (D31, D33, D15)

*

 

"),

nl,

write("

******************************

 

"),

nl,

write("

*

3. Set H (H31, H33, H15)

*

 

"),

nl,

write("

******************************

 

"),

nl,

write("

*

4. Set G (G31, G33, G15)

*

 

"),

nl,

write("

******************************

 

"),

nl,

write("

*

0. Close

 

*

 

"),

nl,

write("

******************************

 

"),

nl,

read_variant(N2, 1, 4, 0), clearwindow(),

 

 

 

 

 

dialog_str_set_piezoelectric_constants_from_console(N2, PrivConsts), clearwindow().

 

 

dialog_str_read_from_console_4(PrivConsts) :-

 

 

 

 

 

write("

****************************

 

"),

nl,

write("

*

PERMITTIVITIES

 

*

 

"),

nl,

write("

****************************

 

"),

nl,

write("

*

1. Set ES (E11S, E33S)

*

 

"),

nl,

write("

****************************

 

"),

nl,

write("

*

2. Set ET (E11T, E33T)

*

 

"),

nl,

write("

****************************

 

"),

nl,

write("

*

0. Close

 

*

 

"),

nl,

write("

****************************

 

"),

nl,

read_variant(N3, 1, 2, 0), clearwindow(),

 

 

 

 

 

dialog_str_set_permittivities_from_console(N3, PrivConsts), clearwindow().

 

 

read_real_greater_0(D) :-

 

 

 

 

 

 

 

readreal(A), A > 0, !, D = A;

 

 

 

 

 

 

nl, write("

********** SHOULD BE GREATER THAN 0 **********

 

"), nl,

write("

 

real>"), read_real_greater_0(D).

 

 

read_variant(N, From, To, ErrorCode) :-

 

 

 

 

 

write("

 

int>"),

 

 

 

 

 

readint(C), choose_variant(N, C, From, To, ErrorCode).

 

 

 

 

 

choose_variant(N, C, From, To, ErrorCode) :-

 

 

 

 

 

bound(ErrorCode), C = ErrorCode, !, fail;

 

 

 

 

 

From <= C, C <= To, N = C, !;

 

 

 

 

 

 

write("

********** TRY AGAIN **********

 

"),

nl,

write("

 

int>"), readint(D), choose_variant(N, D, From, To, ErrorCode).

dialog_str_set_elastic_constants_from_console(N, pcl(C11E, C12E, C13E, C33E, C44E, _, _, _,

_, _, N, _, _)) :-

6

pre_dialog_str_set_elastic_constants_from_console(N, C11E, C12E, C13E, C33E, C44E). pre_dialog_str_set_elastic_constants_from_console(N, C11E, C12E, C13E, C33E, C44E) :-

N = 1, !, enter_elastic_constants(C11E, C12E, C13E, C33E, C44E, "C11E", "C12E", "C13E", "C33E", "C44E");

N = 2, !, enter_elastic_constants(C11E, C12E, C13E, C33E, C44E, "C11D", "C12D", "C13D", "C33D", "C44D"); N = 3, !, enter_elastic_constants(C11E, MC12E, MC13E, C33E, C44E, "S11E", "-S12E", "-S13E", "S33E",

"S44E"),

C12E = -MC12E, C13E = -MC13E;

N = 4, !, enter_elastic_constants(C11E, MC12E, MC13E, C33E, C44E, "S11D", "-S12D", "-S13D", "S33D", "S44D"),

C12E = -MC12E, C13E = -MC13E.

enter_elastic_constants(C11E, C12E, C13E, C33E, C44E, C11E_STR, C12E_STR, C13E_STR, C33E_STR, C44E_STR) :-

write("

**********************************************

"), nl,

write("

*

ELASTIC CONSTANTS

*

"),

nl,

write("

**********************************************

"),

nl,

write("

", C11E_STR, " real>"), read_real_greater_0(C11E),

write("

", C12E_STR, " real>"), read_real_greater_0(C12E),

write("

", C13E_STR, " real>"), read_real_greater_0(C13E),

write("

", C33E_STR, "

real>"),

read_real_greater_0(C33E),

write("

", C44E_STR, "

real>"),

read_real_greater_0(C44E).

dialog_str_set_piezoelectric_constants_from_console(N, pcl(_, _, _, _, _, E31, E33, E15, _, _, _, N, _)) :- pre_dialog_str_set_piezoelectric_constants_from_console(N, E31, E33, E15).

pre_dialog_str_set_piezoelectric_constants_from_console(N, E31, E33, E15) :-

N = 1, !, enter_piezoelectric_constants(ME31, E33, E15, "-E31", "E33", "E15"), E31

= -ME31;

N = 2, !, enter_piezoelectric_constants(ME31, E33, E15, "-D31", "D33", "D15"), E31

= -ME31;

N

=

3, !, enter_piezoelectric_constants(ME31,

E33,

E15,

"-H31",

"H33",

"H15"),

E31

= -ME31;

N

=

4, !, enter_piezoelectric_constants(ME31,

E33,

E15,

"-G31",

"G33",

"G15"),

E31

= -ME31.

enter_piezoelectric_constants(E31, E33, E15, E31_STR, E33_STR, E15_STR) :-

 

 

write("

**********************************************

"),

nl,

write("

*

PIEZOELECTRIC CONSTANTS

*

"),

nl,

write("

**********************************************

"),

nl,

write("

 

", E31_STR, " real>"), read_real_greater_0(E31),

 

 

write("

 

", E33_STR, " real>"), read_real_greater_0(E33),

 

 

write("

 

", E15_STR, " real>"), read_real_greater_0(E15).

 

 

dialog_str_set_permittivities_from_console(N, pcl(_, _, _, _, _, _, _, _, E11S, E33S, _, _,

N)) :-

pre_dialog_str_set_permittivities_from_console(N, E11S, E33S).

 

 

 

pre_dialog_str_set_permittivities_from_console(N, E11S, E33S) :-

 

 

 

N = 1, !, enter_permittivities(E11S, E33S, "E11S", "E33S");

 

 

 

N = 2, !, enter_permittivities(E11S, E33S, "E11T", "E33T").

 

 

 

enter_permittivities(E11S, E33S, E11S_STR, E33S_STR) :-

 

 

 

 

write("

**********************************************

"),

nl,

write("

*

 

PERMITTIVITIES

 

*

"),

nl,

write("

**********************************************

"),

nl,

write("

 

", E11S_STR, " real>"), read_real_greater_0(E11S),

 

 

write("

 

", E33S_STR, " real>"), read_real_greater_0(E33S).

 

 

dialog_str_delete_from_database_by_name() :-

 

 

 

 

findall(Density, piezomaterial(_, _, _, Density), DensityList), DensityList = [],

 

 

write("

 

***********************

 

"),

nl,

write("

 

*

NO DATA!

*

 

"),

nl,

write("

 

***********************

 

"),

nl,

write("

 

 

any>"), readln(_);

 

 

 

write("

*************************************

"),

nl,

write("

*

NAME OF PIEZOMATERIAL TO REMOVE

*

"),

nl,

write("

*************************************

"),

nl,

write("

 

 

str>"), readln(Name),

 

 

 

retract(piezomaterial(Name, _, _, _)), !,

 

 

 

 

write("

 

***********************

 

"),

nl,

write("

 

*

MATERIAL DELETED!

*

 

"),

nl,

write("

 

***********************

 

"),

nl,

write("

 

 

any>"), readln(_);

 

 

 

write("

 

*************************

 

"),

nl,

write("

 

*

MATERIAL NOT FOUND!

*

 

"),

nl,

write("

 

*************************

 

"),

nl,

write("

 

 

any>"), readln(_).

 

 

 

dialog_str_clear_database() :-

 

 

 

 

 

 

findall(Density, piezomaterial(_, _, _, Density), DensityList), DensityList = [],

 

 

write("

 

***********************

 

"),

nl,

write("

 

*

NO DATA!

*

 

"),

nl,

write("

 

***********************

 

"),

nl,

write("

 

 

any>"), readln(_);

 

 

 

write("

**************************************

"),

nl,

write("

*

ARE YOU SURE TO DELETE ALL DATA?

*

"),

nl,

write("

**************************************

"),

nl,

write("

 

 

[y/n]>"), readln(X), X = "y", !,

 

 

not(clear_database()),

 

 

 

 

 

 

 

write("

 

 

*******************

 

 

"),

nl,

write("

 

 

* DATA DELETED! *

 

 

"),

nl,

write("

 

 

*******************

 

 

"),

nl,

write("

 

 

any>"), readln(_).

 

 

 

clear_database() :-

 

 

 

 

 

 

 

retract(piezomaterial(_, _, _, _)), fail.

 

 

 

 

dialog_str_show_data() :-

 

 

 

 

 

 

 

findall(Name, piezomaterial(Name, _, _, _), Names),

 

 

 

 

findall(Source, piezomaterial(_, Source, _, _), Sources),

 

 

 

findall(Consts, piezomaterial(_, _, Consts, _), ConstsList),

 

 

 

findall(Density, piezomaterial(_, _, _, Density), Densitys), not(Densitys = []), !,

 

 

print_enter_rows(Names, Sources, ConstsList, Densitys);

 

 

 

 

write("

 

***********************

 

"),

nl,

write("

 

*

NO DATA!

*

 

"),

nl,

write("

 

***********************

 

"),

nl,

write("

 

 

any>"), readln(_).

 

 

 

print_enter_rows([], [], [], []) :-

 

 

 

 

 

write("

 

***********************

 

"),

nl,

write("

 

*

DONE!

*

 

"),

nl,

7

write("

***********************

"), nl,

write("

any>"), readln(_).

 

print_enter_rows([Name|NT], [Source|ST], [Consts|CT], [Density|DT]) :-

 

clearwindow(),

 

 

write("*****************************************************************************"), nl, write("* Name: ", Name), nl,

write("* Source: ", Source), nl, write("* Density: ", Density), nl, print_format_consts(Consts),

write("*****************************************************************************"), nl,

write("

 

next>"), readln(C), read_cmd(Name, Source, Consts, Density, C),

print_enter_rows(NT, ST, CT, DT).

 

 

 

 

read_cmd(Name, Source, Consts, Density, C) :-

 

 

C <> "delete", C <> "edit", C <> "close", !;

 

 

C = "close", !, fail;

 

 

 

 

C = "delete", retract(piezomaterial(Name, Source, Consts, Density)), !,

 

write("

***********************

"), nl,

write("

*

MATERIAL DELETED!

*

"), nl,

write("

***********************

"), nl,

write("

 

any>"), readln(_);

 

C = "edit", !, material_edit(Name, Source, Consts, Density, _, _, _, _);

 

write("

*************************

"), nl,

write("

*

MATERIAL NOT FOUND!

*

"), nl,

write("

*************************

"), nl,

write("

 

any>"), readln(_).

 

material_edit(Name, Source, Consts, Density, NewName, NewSource, NewConsts, NewDensity) :-

clearwindow(),

 

 

 

 

write("

***********************

"), nl,

write("

*

EDIT MATERIAL

*

"), nl,

write("

***********************

"), nl,

write("

Name: ", Name), nl,

 

 

write("

Source: ", Source), nl,

 

write("

***********************

"), nl,

write("

*

1. Edit name

*

"), nl,

write("

***********************

"), nl,

write("

*

2. Edit source

*

"), nl,

write("

***********************

"), nl,

write("

*

3. Edit density

*

"), nl,

write("

***********************

"), nl,

write("

*

4. Edit constants

*

"), nl,

write("

***********************

"), nl,

write("

*

0. Close

*

"), nl,

write("

***********************

"), nl,

read_variant(N, 1, 4, 0),

 

 

 

 

choose_edit(N, Name, Source, Consts, Density, NewName, NewSource, NewConsts, NewDensity),

material_edit(NewName, NewSource, NewConsts, NewDensity, _, _, _, _), !; !.

 

choose_edit(N, Name, Source, Consts, Density, NewName, NewSource, NewConsts, NewDensity) :-

N = 0, !, fail;

 

 

 

 

N = 1, !,

 

 

 

 

write("

***********************

"), nl,

write("

*

EDIT NAME

*

"), nl,

write("

***********************

"), nl,

write("

 

str>"), readln(Nm), Nm <> "", clearwindow(),

 

NewName = Nm, NewSource = Source, NewConsts = Consts, NewDensity = Density, retract(piezomaterial(Name, Source, Consts, Density)), asserta(piezomaterial(NewName, NewSource, NewConsts, NewDensity)), material_edited();

N = 2, !,

 

 

 

 

 

write("

***********************

"), nl,

write("

*

EDIT SOURCE

*

"),

nl,

write("

***********************

"),

nl,

write("

 

str>"), readln(S), S <> "", clearwindow(),

 

 

NewName = Name, NewSource = S, NewConsts = Consts, NewDensity = Density, retract(piezomaterial(Name, Source, Consts, Density)), asserta(piezomaterial(NewName, NewSource, NewConsts, NewDensity)), material_edited();

N = 3, !,

 

 

 

 

write("

***********************

"), nl,

write("

*

EDIT DENSITY

*

"), nl,

write("

***********************

"), nl,

write("

 

str>"), read_real_greater_0(D), clearwindow(),

NewName = Name, NewSource = Source, NewConsts = Consts, NewDensity = D, retract(piezomaterial(Name, Source, Consts, Density)), asserta(piezomaterial(NewName, NewSource, NewConsts, NewDensity)), material_edited(); N = 4, !,

dialog_str_read_from_console_2(PrivNewConsts), dialog_str_read_from_console_3(PrivNewConsts), dialog_str_read_from_console_4(PrivNewConsts), get_constants(PrivNewConsts, CS),

NewName = Name, NewSource = Source, NewConsts = CS, NewDensity = Density, retract(piezomaterial(Name, Source, Consts, Density)), asserta(piezomaterial(NewName, NewSource, NewConsts, NewDensity)), material_edited().

material_edited() :-

 

 

 

 

write("

***********************

"), nl,

write("

* MATERIAL EDITED

*

"),

nl,

write("

***********************

"),

nl,

write("

any>"), readln(_).

 

 

print_format_consts(cl(C11E, C12E, C13E, C33E, C44E, C11D, C12D, C13D, C33D, C44D, S11E, S12E, S13E, S33E, S44E, S11D, S12D, S13D, S33D, S44D, E31, E33, E15, D31, D33, D15, H31, H33, H15, G31, G33, G15, E11S, E33S, E11T, E33T)) :-

writef("* C11E: %6.3f\tC11D: %6.3f\tS11E: %6.3f\tS11D: %6.3f\t", C11E, C11D, S11E, S11D), nl, writef("* C12E: %6.3f\tC12D: %6.3f\tS12E: %6.3f\tS12D: %6.3f\t", C12E, C12D, S12E, S12D), nl, writef("* C13E: %6.3f\tC13D: %6.3f\tS13E: %6.3f\tS13D: %6.3f\t", C13E, C13D, S13E, S13D), nl, writef("* C33E: %6.3f\tC33D: %6.3f\tS33E: %6.3f\tS33D: %6.3f\t", C33E, C33D, S33E, S33D), nl, writef("* C44E: %6.3f\tC44D: %6.3f\tS44E: %6.3f\tS44D: %6.3f\t", C44E, C44D, S44E, S44D), nl,

8

writef("* E31: %6.3f\tD31: %6.3f\tH31: %6.4f\tG31: %6.6f\t", E31, D31, H31, G31), nl, writef("* E33: %6.3f\tD33: %6.3f\tH33: %6.4f\tG33: %6.6f\t", E33, D33, H33, G33), nl, writef("* E15: %6.3f\tD15: %6.3f\tH15: %6.4f\tG15: %6.6f\t", E15, D15, H15, G15), nl, writef("* E11S: %7.3f\tE11T: %7.3f", E11S, E11T), nl,

writef("* E33S: %7.3f\tE33T: %7.3f", E33S, E33T), nl.

 

 

dialog_str_save_into_file() :-

 

 

 

 

findall(Density, piezomaterial(_, _, _, Density), DensityList), DensityList = [], !,

 

write("

***********************

"), nl,

write("

*

NO DATA!

*

"), nl,

write("

***********************

"), nl,

write("

 

any>"), readln(_);

 

write("

****************************

"), nl,

write("

*

ENTER FILE NAME

*

"), nl,

write("

****************************

"), nl,

write("

 

string>"), readln(Filename),

 

openwrite(datafile, Filename), writedevice(datafile), print_database(),

 

closefile(datafile), writedevice(screen),

 

 

write("

***********************

"), nl,

write("

*

DONE!

*

"), nl,

write("

***********************

"), nl,

write("

 

any>"), readln(_).

 

print_database() :-

 

 

 

 

findall(Name, piezomaterial(Name, _, _, _), Names), findall(Source, piezomaterial(_, Source, _, _), Sources), findall(Consts, piezomaterial(_, _, Consts, _), ConstsList), findall(Density, piezomaterial(_, _, _, Density), Densitys), print_database(Names, Sources, ConstsList, Densitys); writedevice(screen).

print_database([], [], [], []) :- !.

print_database([Name|NT], [Source|ST], [Consts|CT], [Density|DT]) :-

write(Name, ";", Source, ";", Density, ";"), print_consts(Consts), nl, print_database(NT, ST, CT, DT). print_consts(cl(C11E, C12E, C13E, C33E, C44E, C11D, C12D, C13D, C33D, C44D, S11E, S12E, S13E, S33E, S44E, S11D, S12D, S13D, S33D, S44D, E31, E33, E15, D31, D33, D15, H31, H33, H15, G31, G33, G15, E11S, E33S, E11T,

E33T)) :-

write(C11E, ";", C12E, ";", C13E, ";", C33E, ";", C44E, ";", C11D, ";", C12D, ";", C13D, ";", C33D, ";", C44D, ";", S11E, ";", S12E, ";", S13E, ";", S33E, ";"), write(S44E, ";", S11D, ";", S12D, ";", S13D, ";", S33D, ";", S44D, ";", E31, ";", E33, ";", E15, ";", D31, ";", D33, ";", D15, ";", H31, ";", H33, ";", H15,

";", G31, ";", G33, ";", G15, ";", E11S, ";", E33S, ";", E11T, ";", E33T). % Алгоритм, переписанный с программы на Pascal if_x_equals_0_then_1_else_x(T, Temp) :-

abs(T) <= 0, Temp = 1.0, !; Temp = T.

get_ce(RC, Re, Rs, cl(CL1_C11E, CL1_C12E, CL1_C13E, CL1_C33E, CL1_C44E, CL1_C11D, CL1_C12D, CL1_C13D, CL1_C33D, CL1_C44D, CL1_S11E, CL1_S12E, CL1_S13E, CL1_S33E, CL1_S44E, CL1_S11D, CL1_S12D, CL1_S13D, CL1_S33D, CL1_S44D, CL1_E31, CL1_E33, CL1_E15, CL1_D31, CL1_D33, CL1_D15, CL1_H31, CL1_H33, CL1_H15, CL1_G31, CL1_G33, CL1_G15, CL1_E11S, CL1_E33S, CL1_E11T, CL1_E33T), cl(CL2_C11E, CL2_C12E, CL2_C13E, CL2_C33E, CL2_C44E, CL1_C11D, CL1_C12D, CL1_C13D, CL1_C33D, CL1_C44D, CL1_S11E, CL1_S12E, CL1_S13E, CL1_S33E, CL1_S44E, CL1_S11D, CL1_S12D, CL1_S13D, CL1_S33D, CL1_S44D, CL1_E31, CL1_E33, CL1_E15, CL1_D31, CL1_D33, CL1_D15, CL1_H31, CL1_H33, CL1_H15, CL1_G31, CL1_G33, CL1_G15, CL1_E11S, CL1_E33S, CL1_E11T, CL1_E33T)) :-

RC = 2, Re = 1, Rs = 1, !,

CL2_C11E = CL1_C11D - CL1_H31 * CL1_E31,

CL2_C12E = CL1_C12D - CL1_H31 * CL1_E31,

CL2_C13E = CL1_C13D - CL1_H31 * CL1_E33,

CL2_C33E = CL1_C33D - CL1_H33 * CL1_E33,

CL2_C44E = CL1_C44D - CL1_H15 * CL1_E15; RC = 1, Re = 3, Rs = 1, !,

CL2_C11E = CL1_C11D - CL1_H31 * CL1_H31 / CL1_E33S,

CL2_C12E = CL1_C12D - CL1_H31 * CL1_H31 / CL1_E33S,

CL2_C13E = CL1_C13D - CL1_H31 * CL1_H33 / CL1_E33S,

CL2_C33E = CL1_C33D - CL1_H33 * CL1_H33 / CL1_E33S,

CL2_C44E = CL1_C44D - CL1_H15 * CL1_H15 / CL1_E11S; RC = 2, Re = 3, Rs = 2, !,

T1 = CL1_S33E * (CL1_S11E + CL1_S12E) - 2 * CL1_S13E * CL1_S13E, T2 = (CL1_S11E - CL1_S12E) * T1,

if_x_equals_0_then_1_else_x(T1, Temp1), if_x_equals_0_then_1_else_x(T2, Temp2), CL2_C11E = (CL1_S11E * CL1_S33E - CL1_S13E * CL1_S13E) / Temp2,

CL2_C12E = (CL1_S13E * CL1_S13E - CL1_S12E * CL1_S33E) / Temp2, CL2_C13E = -CL1_S13E / Temp1,

CL2_C33E = (CL1_S11E + CL1_S12E) / Temp1, CL2_C44E = 1.0 / CL1_S44E;

CL2_C11E = CL1_C11E, CL2_C12E = CL1_C12E, CL2_C13E = CL1_C13E, CL2_C33E = CL1_C33E, CL2_C44E = CL1_C44E. get_cd(RC, Re, Rs, cl(CL1_C11E, CL1_C12E, CL1_C13E, CL1_C33E, CL1_C44E, CL1_C11D, CL1_C12D, CL1_C13D,

CL1_C33D, CL1_C44D, CL1_S11E, CL1_S12E, CL1_S13E, CL1_S33E, CL1_S44E, CL1_S11D, CL1_S12D, CL1_S13D, CL1_S33D, CL1_S44D, CL1_E31, CL1_E33, CL1_E15, CL1_D31, CL1_D33, CL1_D15, CL1_H31, CL1_H33, CL1_H15, CL1_G31, CL1_G33,

CL1_G15, CL1_E11S, CL1_E33S, CL1_E11T, CL1_E33T), cl(CL1_C11E, CL1_C12E, CL1_C13E, CL1_C33E, CL1_C44E, CL2_C11D, CL2_C12D, CL2_C13D, CL2_C33D, CL2_C44D, CL1_S11E, CL1_S12E, CL1_S13E, CL1_S33E, CL1_S44E, CL1_S11D, CL1_S12D, CL1_S13D, CL1_S33D, CL1_S44D, CL1_E31, CL1_E33, CL1_E15, CL1_D31, CL1_D33, CL1_D15, CL1_H31, CL1_H33, CL1_H15, CL1_G31, CL1_G33, CL1_G15, CL1_E11S, CL1_E33S, CL1_E11T, CL1_E33T)) :-

RC = 1, Re = 1, Rs = 1, !,

CL2_C11D = CL1_C11E + CL1_E31 * CL1_E31 / CL1_E33S,

CL2_C12D = CL1_C12E + CL1_E31 * CL1_E31 / CL1_E33S,

CL2_C13D = CL1_C13E + CL1_E31 * CL1_E33 / CL1_E33S,

CL2_C33D = CL1_C33E + CL1_E33 * CL1_E33 / CL1_E33S,

CL2_C44D = CL1_C44E + CL1_E15 * CL1_E15 / CL1_E11S;

RC = 1, Re = 3, Rs = 1, !,

CL2_C11D = CL1_C11E + CL1_H31 * CL1_H31 / CL1_E33S,

CL2_C12D = CL1_C12E + CL1_H31 * CL1_H31 / CL1_E33S,

CL2_C13D = CL1_C13E + CL1_H31 * CL1_H33 / CL1_E33S,

CL2_C33D = CL1_C33E + CL1_H33 * CL1_H33 / CL1_E33S,

CL2_C44D = CL1_C44E + CL1_H15 * CL1_H15 / CL1_E11S; RC = 1, Re = 3, Rs = 2, !,

CL2_C11D = CL1_C11E + CL1_H31 * CL1_E31,

CL2_C12D = CL1_C12E + CL1_H31 * CL1_E31,

CL2_C13D = CL1_C13E + CL1_H31 * CL1_E33,

9

CL2_C33D = CL1_C33E + CL1_H33 * CL1_E33,

CL2_C44D = CL1_C44E + CL1_H15 * CL1_E15; RC = 0, Re = 0, Rs = 0, !,

T1 = CL1_S33D * (CL1_S11D + CL1_S12D) - 2 * CL1_S13D * CL1_S13D, T2 = (CL1_S11D - CL1_S12D) * T1,

if_x_equals_0_then_1_else_x(T1, Temp1), if_x_equals_0_then_1_else_x(T2, Temp2), CL2_C11D = (CL1_S11D * CL1_S33D - CL1_S13D * CL1_S13D) / Temp2,

CL2_C12D = (CL1_S13D * CL1_S13D - CL1_S12D * CL1_S33D) / Temp2, CL2_C13D = -CL1_S13D / Temp1,

CL2_C33D = (CL1_S11D + CL1_S12D) / Temp1, CL2_C44D = 1.0 / CL1_S44D;

CL2_C11D = CL1_C11D, CL2_C12D = CL1_C12D, CL2_C13D = CL1_C13D, CL2_C33D = CL1_C33D, CL2_C44D = CL1_C44D. get_se(RC, Re, Rs, cl(CL1_C11E, CL1_C12E, CL1_C13E, CL1_C33E, CL1_C44E, CL1_C11D, CL1_C12D, CL1_C13D,

CL1_C33D, CL1_C44D, CL1_S11E, CL1_S12E, CL1_S13E, CL1_S33E, CL1_S44E, CL1_S11D, CL1_S12D, CL1_S13D, CL1_S33D, CL1_S44D, CL1_E31, CL1_E33, CL1_E15, CL1_D31, CL1_D33, CL1_D15, CL1_H31, CL1_H33, CL1_H15, CL1_G31, CL1_G33, CL1_G15, CL1_E11S, CL1_E33S, CL1_E11T, CL1_E33T), cl(CL1_C11E, CL1_C12E, CL1_C13E, CL1_C33E, CL1_C44E, CL1_C11D, CL1_C12D, CL1_C13D, CL1_C33D, CL1_C44D, CL2_S11E, CL2_S12E, CL2_S13E, CL2_S33E, CL2_S44E, CL1_S11D,

CL1_S12D, CL1_S13D, CL1_S33D, CL1_S44D, CL1_E31, CL1_E33, CL1_E15, CL1_D31, CL1_D33, CL1_D15, CL1_H31, CL1_H33, CL1_H15, CL1_G31, CL1_G33, CL1_G15, CL1_E11S, CL1_E33S, CL1_E11T, CL1_E33T)) :-

RC = 1, Re = 1, Rs = 1, !,

T1 = CL1_C33E * (CL1_C11E + CL1_C12E) - 2 * CL1_C13E * CL1_C13E,

T2 = (CL1_C11E - CL1_C12E) * T1,

if_x_equals_0_then_1_else_x(T1, Temp1), if_x_equals_0_then_1_else_x(T2, Temp2),

CL2_S11E = (CL1_C11E * CL1_C33E - CL1_C13E * CL1_C13E) / Temp2,

CL2_S12E = (CL1_C13E * CL1_C13E - CL1_C12E * CL1_C33E) / Temp2, CL2_S13E = -CL1_C13E / Temp1,

CL2_S33E = (CL1_C11E + CL1_C12E) / Temp1,

CL2_S44E = 1.0 / CL1_C44E;

RC = 2, Re = 4, Rs = 1, !,

T1 = CL1_C33E * (CL1_C11E + CL1_C12E) - 2 * CL1_C13E * CL1_C13E, T2 = (CL1_C11E - CL1_C12E) * T1,

if_x_equals_0_then_1_else_x(T1, Temp1), if_x_equals_0_then_1_else_x(T2, Temp2), CL2_S11E = (CL1_C11E * CL1_C33E - CL1_C13E * CL1_C13E) / Temp2,

CL2_S12E = (CL1_C13E * CL1_C13E - CL1_C12E * CL1_C33E) / Temp2, CL2_S13E = -CL1_C13E / Temp1,

CL2_S33E = (CL1_C11E + CL1_C12E) / Temp1, CL2_S44E = 1.0 / CL1_C44E;

RC = 2, Re = 3, Rs = 2, !,

CL2_S11E = CL1_S11D + CL1_D31 * CL1_G31,

CL2_S12E = CL1_S12D + CL1_D31 * CL1_G31,

CL2_S13E = CL1_S13D + CL1_D31 * CL1_G33,

CL2_S33E = CL1_S33D + CL1_D33 * CL1_G33,

CL2_S44E = CL1_S44D + CL1_D15 * CL1_G15;

CL2_S11E = CL1_S11E, CL2_S12E = CL1_S12E, CL2_S13E = CL1_S13E, CL2_S33E = CL1_S33E, CL2_S44E = CL1_S44E. get_sd(RC, Re, Rs, cl(CL1_C11E, CL1_C12E, CL1_C13E, CL1_C33E, CL1_C44E, CL1_C11D, CL1_C12D, CL1_C13D, CL1_C33D, CL1_C44D, CL1_S11E, CL1_S12E, CL1_S13E, CL1_S33E, CL1_S44E, CL1_S11D, CL1_S12D, CL1_S13D, CL1_S33D, CL1_S44D, CL1_E31, CL1_E33, CL1_E15, CL1_D31, CL1_D33, CL1_D15, CL1_H31, CL1_H33, CL1_H15, CL1_G31, CL1_G33, CL1_G15, CL1_E11S, CL1_E33S, CL1_E11T, CL1_E33T), cl(CL1_C11E, CL1_C12E, CL1_C13E, CL1_C33E, CL1_C44E, CL1_C11D, CL1_C12D, CL1_C13D, CL1_C33D, CL1_C44D, CL1_S11E, CL1_S12E, CL1_S13E, CL1_S33E, CL1_S44E, CL2_S11D,

CL2_S12D, CL2_S13D, CL2_S33D, CL2_S44D, CL1_E31, CL1_E33, CL1_E15, CL1_D31, CL1_D33, CL1_D15, CL1_H31, CL1_H33, CL1_H15, CL1_G31, CL1_G33, CL1_G15, CL1_E11S, CL1_E33S, CL1_E11T, CL1_E33T)) :-

RC = 1, Re = 1, Rs = 1, !,

T1 = CL1_C33D * (CL1_C11D + CL1_C12D) - 2 * CL1_C13D * CL1_C13D, T2 = (CL1_C11D - CL1_C12D) * T1,

if_x_equals_0_then_1_else_x(T1, Temp1), if_x_equals_0_then_1_else_x(T2, Temp2), CL2_S11D = (CL1_C11D * CL1_C33D - CL1_C13D * CL1_C13D) / Temp2,

CL2_S12D = (CL1_C13D * CL1_C13D - CL1_C12D * CL1_C33D) / Temp2, CL2_S13D = -CL1_C13D / Temp1,

CL2_S33D = (CL1_C11D + CL1_C12D) / Temp1,

CL2_S44D = 1.0 / CL1_C44D;

CL2_S11D = CL1_S11D, CL2_S12D = CL1_S12D, CL2_S13D = CL1_S13D, CL2_S33D = CL1_S33D, CL2_S44D = CL1_S44D. get_e(RC, Re, Rs, cl(CL1_C11E, CL1_C12E, CL1_C13E, CL1_C33E, CL1_C44E, CL1_C11D, CL1_C12D, CL1_C13D, CL1_C33D, CL1_C44D, CL1_S11E, CL1_S12E, CL1_S13E, CL1_S33E, CL1_S44E, CL1_S11D, CL1_S12D, CL1_S13D, CL1_S33D, CL1_S44D, CL1_E31, CL1_E33, CL1_E15, CL1_D31, CL1_D33, CL1_D15, CL1_H31, CL1_H33, CL1_H15, CL1_G31, CL1_G33, CL1_G15, CL1_E11S, CL1_E33S, CL1_E11T, CL1_E33T), cl(CL1_C11E, CL1_C12E, CL1_C13E, CL1_C33E, CL1_C44E, CL1_C11D, CL1_C12D, CL1_C13D, CL1_C33D, CL1_C44D, CL1_S11E, CL1_S12E, CL1_S13E, CL1_S33E, CL1_S44E, CL1_S11D, CL1_S12D, CL1_S13D, CL1_S33D, CL1_S44D, CL2_E31, CL2_E33, CL2_E15, CL1_D31, CL1_D33, CL1_D15, CL1_H31, CL1_H33, CL1_H15, CL1_G31, CL1_G33, CL1_G15, CL1_E11S, CL1_E33S, CL1_E11T, CL1_E33T)) :-

RC = 1, Re = 3, Rs = 1, !, CL2_E31 = CL1_H31 * CL1_E33S, CL2_E33 = CL1_H33 * CL1_E33S,

CL2_E15 = CL1_H15 * CL1_E11S; RC = 1, Re = 3, Rs = 2, !,

CL2_E31 = CL1_D31 * (CL1_C11E + CL1_C12E) + CL1_D33 * CL1_C13E, CL2_E33 = 2 * CL1_D31 * CL1_C13E + CL1_D33 * CL1_C33E,

CL2_E15 = CL1_D15 * CL1_C44E; RC = 2, Re = 2, Rs = 1, !,

M = (2 * CL1_D31 * CL1_C13D + CL1_D33 * CL1_C33D) / (CL1_D31 * (CL1_C11D + CL1_C12D) + CL1_D33 * CL1_C13D),

A1 = 2 * CL1_D31 / CL1_E33S + CL1_D33 * M / CL1_E33S,

C1 = -CL1_D31 * (CL1_C11D + CL1_C12D) - CL1_D33 * CL1_C13D,

D1 = sqrt(1 - 4 * A1 * C1), CL2_E31 = (D1 - 1) / (2 * A1),

CL2_E33 = M * CL2_E31,

A2 = CL1_D15 / CL1_E11S,

C2 = -CL1_D15 * CL1_C44D, D2 = sqrt(1 - 4 * A2 * C2),

CL2_E15 = (D2 - 1) / (2 * A2);

CL2_E31 = CL1_E31, CL2_E33 = CL1_E33, CL2_E15 = CL1_E15.

get_d(RC, Re, Rs, cl(CL1_C11E, CL1_C12E, CL1_C13E, CL1_C33E, CL1_C44E, CL1_C11D, CL1_C12D, CL1_C13D, CL1_C33D, CL1_C44D, CL1_S11E, CL1_S12E, CL1_S13E, CL1_S33E, CL1_S44E, CL1_S11D, CL1_S12D, CL1_S13D, CL1_S33D, CL1_S44D,

CL1_E31, CL1_E33, CL1_E15, CL1_D31, CL1_D33, CL1_D15, CL1_H31, CL1_H33, CL1_H15, CL1_G31, CL1_G33, CL1_G15, CL1_E11S, CL1_E33S, CL1_E11T, CL1_E33T), cl(CL1_C11E, CL1_C12E, CL1_C13E, CL1_C33E, CL1_C44E, CL1_C11D,

10

Источник: https://studfile.net/preview/16431667/