front_string(Tail4, Reg_e_STR, Tail5), str_int(Reg_e_STR, Reg_e), Reg_e >= 1, Reg_e <= 4, front_string(Tail5, Reg_s_STR, Tail6), str_int(Reg_s_STR, Reg_s), Reg_s >= 1, Reg_s <= 2, front_string(Tail6, C11E_STR, Tail7), str_real(C11E_STR, C11E), should_be_positive(Line, C11E), front_string(Tail7, C12E_STR, Tail8), str_real(C12E_STR, C12E), should_be_negative(Line, Reg_C, C12E, 3,
4),
front_string(Tail8, C13E_STR, Tail9), str_real(C13E_STR, C13E), should_be_negative(Line, Reg_C, C13E, 3,
4),
front_string(Tail9, C33E_STR, Tail10), str_real(C33E_STR, C33E), should_be_positive(Line, C33E), front_string(Tail10, C44E_STR, Tail11), str_real(C44E_STR, C44E), should_be_positive(Line, C44E), front_string(Tail11, E31_STR, Tail12), str_real(E31_STR, E31), should_be_negative(Line, Reg_e, E31, 1, 1), front_string(Tail12, E33_STR, Tail13), str_real(E33_STR, E33), should_be_positive(Line, E33), front_string(Tail13, E15_STR, Tail14), str_real(E15_STR, E15), should_be_positive(Line, E15), front_string(Tail14, S11_STR, Tail15), str_real(S11_STR, E11S), should_be_positive(Line, E11S), front_string(Tail15, S33_STR, _), str_real(S33_STR, E33S), should_be_positive(Line, E33S), get_constants(pcl(C11E, C12E, C13E, C33E, C44E, E31, E33, E15, E11S, E33S, Reg_C, Reg_e, Reg_s), Consts), insert_into_database(Name, Source, Consts, Density), !, read_rows();
not(eof(datafile)), !, |
|
|
|
|
write(" |
********************************** |
"), nl, |
||
write(" |
* |
READING ERROR! |
* |
"), nl, |
write(" |
* |
REMAINING DATA WAS NOT READ! |
* |
"), nl, |
write(" |
* |
SOME MATERIALS ADDED! |
* |
"), nl, |
write(" |
********************************** |
"), nl; !. |
||
should_be_positive(Line, C1XE) :- |
|
|
|
|
C1XE > 0, !; |
|
|
|
|
write("See: ", Line), nl, |
|
|
|
|
write(" |
|
\'", C1XE, "\' should be > 0!"), nl, fail. |
|
|
should_be_negative(Line, Reg_C, C1XE, T1, T2) :- |
|
|
||
Reg_C = T1, C1XE >= 0, !, |
|
|
|
|
write("See: ", Line), nl, |
|
|
|
|
write(" |
|
\'", C1XE, "\' should be < 0!"), nl, fail; |
|
|
Reg_C = T2, C1XE >= 0, !, |
|
|
|
|
write("See: ", Line), nl, |
|
|
|
|
write(" |
|
\'", C1XE, "\' should be < 0!"), nl, fail; |
|
|
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, |
|||
16
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, _, _)) :- |
||||
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, |
||
17
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, |
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, |
||
18
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, |
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;
19
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, |
|
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;
20