Een computerprogramma voor het genereren van
vloeiparameters uit meetgegevens, bij willekeurige
procesomstandigheden : program listing
Citation for published version (APA):
Liempd, van, J. H. (1988). Een computerprogramma voor het genereren van vloeiparameters uit meetgegevens, bij willekeurige procesomstandigheden : program listing. (TH Eindhoven. Afd. Werktuigbouwkunde, Vakgroep Produktietechnologie : WPB; Vol. WPA0529). Technische Universiteit Eindhoven.
Document status and date: Gepubliceerd: 01/01/1988 Document Version:
Uitgevers PDF, ook bekend als Version of Record Please check the document version of this publication:
• A submitted manuscript is the version of the article upon submission and before peer-review. There can be important differences between the submitted version and the official published version of record. People interested in the research are advised to contact the author for the final version of the publication, or visit the DOI to the publisher's website.
• The final author version and the galley proof are versions of the publication after peer review.
• The final published version features the final layout of the paper including the volume, issue and page numbers.
Link to publication
General rights
Copyright and moral rights for the publications made accessible in the public portal are retained by the authors and/or other copyright owners and it is a condition of accessing publications that users recognise and abide by the legal requirements associated with these rights. • Users may download and print one copy of any publication from the public portal for the purpose of private study or research. • You may not further distribute the material or use it for any profit-making activity or commercial gain
• You may freely distribute the URL identifying the publication in the public portal.
If the publication is distributed under the terms of Article 25fa of the Dutch Copyright Act, indicated by the “Taverne” license above, please follow below link for the End User Agreement:
www.tue.nl/taverne
Take down policy
If you believe that this document breaches copyright please contact us at:
openaccess@tue.nl
providing details and we will investigate your claim.
1t~
:f'
f,!!n computerprogramma voor bet genereren van
. .' loeiparameters ui t meetgegevens, bij
wille-I .
eurige procesomstandigbeden.
·1 \ .~.H. van Liempd
;
'J~n
1988orlgif1ee/
(ook
Op
cllsh
I/r)
"¥,-.w.u.iIoli..kUR.f_.~!tL~aort 0529
Ir L
• ' • u. Jr,.
f\f.~.!nut''''ckers
J I v -a
II '\., ®
G
/NVOGR
G)
/l!cl1ob
-
1
@(JlS/1/)~ LL~A/
, c , !,
,,
•.
,
IMODULE nClI\Od;
FROI1 ASCII IMPORT esc, EOL; FROI1 lnOut IMPORT Writej - FROI1 Keyboard IMPORT Read;
FROI1 NuaberConversion IMPORT tardToString;
FROI1 Screen IMPORT Colors;
• FROI1 Scher!Ibew IMPORT Tel<stXY, Tel<stC,Invoerscherlll, Tel<stschel'll;
FROI1 GBlnvoer IMPORT DataControl;
FROI1 GBonder II'IPORT Rekefllartij;
VAR cl,l\eI1uchar,conl,menustr:CHARj j, menuteller:CAROlNALj ok: BOOLEAN; BEGIN Write( CHR(007)); • T el<stschernl j Invoerscherlll(l,l,ltftaQenta); TekstXY(2,2, 'START' ,ltl'lagenta) i
• Tel<stxY(6,S,' WelcOie to nCIIIOd' ,ltCyan);
Tel<stxY(1,17,' This progr'8III perfOl'llS temperature and strain-nte dependent , ,White); , ,White)j oktober 1987' ,White)j Tel<stXY(1,18, ,
calculations
of plastic laterial constants.Tel<stXy(1, 20, 'Jeroen van liellPd version 1.00 Tel<stXY(1,23,'press any key to continue', Yellow);
Read(cl)i lOOP Conl::'8' ; menute 11 er: =1; Tel<stscherBlj Invoerscherm ( 1, 2 ,ltl'lagenta) ; Tel<stXY(2,2,'MAIN
MENU'
,ltMagenta)jTel<stXY(2,6,'-calculation of later!al constants Tel<stXY[2,7,'-data control
Tel<stXY(2,8,'-end program
Tel<stXY(1,23,'press (esc) to end' ,Yellow); FOR j::6 TO 8 DO
CardToString(j-S,menustr,l); TekstXY(S7,j,lenUStr,Whlte);
END (- for x);
CerdToString(menuteller,lenUStr,t)j TekstXY(S7 ,menutel1er+S,lenUStr, Yellow) j
TekstXY!55, menuteller+5,CHR (016) ,Yellow) i
LOOP Reed(ct); CASE cl OF
'H' :
IF menuteller)lTHEN
DEC(menuteller) j CardToString(menuteller+l,lenUStr,l)j TekstXY(5S,menuteller+6,' ',Yellow) j TekstXY(S7,menuteller+6,lenustr,White); CardToStrlng(menuteller,lenUStr,l); TekstXY(SS,menuteller+5,CHR(016), Yellow) j TekstXY(57,menuteller+S,menustr, Yellow); END (x if xl;: 'p' :
IF menuteller(3 THEN INC(menuteller) j tardToString(menuteller-l,lenUStr,l); TekstXY(S5,menuteller+4, ' ',Yellow); TekstXY(S7,menuteller+4,menustr,Whlte)j CardToString(menuteller,menustr,l)j TekstXY(SS,menuteller+5,CHR(016) , Yellow); TekstxY(57,l\eI1uteller+5,menustr,Yellow)j END (x if *); : esc : conl:=esc;EXIT; : EOL : IF menuteller:l THENReKefl)artij j
ElSIF lenuteller=2 THEN oataControlj ElSIF menuteller=3 THEN
conl:=escj
(1)' ,White);
(2)' ,White);
(3)' ,White);
tNUjt.UI j
: '1' : RekenpartijjEXITj
: '2' : oatatontroljEXITj
: '3' : conl:=esc;EXIT;ELSE;
Er.> (. case *); END (1 looP *);IF conl=esc THEN EXIT END; END (1 looP 1);
Tekstschermj
Invoerscherm(l,l,ltnagenta)j
TekstXY{6,5,' Thank you for using nClIOd' ,LtCyan);
TekstXY{2,2,'END' ,Ltl1agental;
DEfINITION I'IOOllE GBonder; EXPORT QUALIFIED ReI<.enpartU; • PROCEDI..RE ReI<.enpartij () ; EN!) GBonder.
•
(*procedure waarin het calculations input IIIeflU is opgenomen
is
CALCULATIONS INPUT I1ENU procedure 1lOdu1e
::
."
select IlI8terial ZoeI<.()pMateriaal G8Databeheer
select flOWlllOdel Modelkeuze GBOnder
select strai~rate and tel8Per8ture ReI<.snelEnTeeplnvoeren GBOnder
perform calculations
change settings
: change strain/stress points
go to calculations outpUt IIIeflU
return to llIain MenU
TempreksScherm GBSchermteksten
T empReks ReI<.sne lEnT eep
8erel<.ening
GBOnder
SetSettings Settings
ChangeStrainStress GBOnder
zie voor llIeer inforraatie de 1I1PlEI1ENTATION I'IOOllE
IMPLEMENTATION NODUlE GSonder;
FROM ASCII llIPORT bs, esc, EOI.; FROM File$ystea IIIPORT File; - FROM Keyboard IMPORT Read;
FROM ~thl..ibO ItfORT exp;
FROM NuIIberConversion ItfORT StringToCard,CardToStringj FROM RealConversions llIPORT RealT oString, StringT oReal; FROM Strings IIIPORT Concat j
FROM Screen llIPORT Colors;
FROM SchenII IIIPORT ScrollUpActivePage,ScrollOownActivePagej
FROM ScherB!beW IMPORT rechthoek,Egaschenl,Cgascherm,Grafiek, Invoerscherlfl, TeI<stXV, TekstC, Tekstscherlllj FROM GBModellen IMPORT HollOlflOl'l,Ludwik, Voce,KrupsSwift;
FROM GBDatabeheer IMPORT ~teriaal,Zoek()pl1ateri!l81;
FROM Reksne lEn T eI!lP II1PORT SegevenRecord, Maakrijen, HaalGegevens81nnen, T elPReI<s j
FROM Rekenbew IIIPORT Pow i
~ FROM G8SchermTeksten llIPORT HolTekst,KruTekst,LudTeI<st,VocTeI<st,TelllpReI<sScherlll,Hoofdj FROM GBUitvoer IIIPORT Resultatenj
FROM
Settings IMPORT SetSettingsj• VAR filena8lll:Materiealj
PROCEDliE ModelKeuze(VAR con,Model:CHAR)j
[Xprocedure die een keuzeaenu op het scherm zet en waarin de gebruiker ken kiezen uit de vier vloeilllOdellen.
con : stOPCriteriUlfi als gebruiker de (esc)-toets heeft ingedrukt. Model : nummer (als string) van het gel<ozen IIlOdeI '1' t/lfl '4'
xl
VAR IIlOdel,l!lenUstr,str1,Reserveaodel:CHARj • ok :BOOlEANj j,l!lenuteller,k:CARDlNAL; BEGIN Reserveaodel:=flodeli • tDenUteller:=2j T el<stschenaj Invoerscherlfl(l,2,LtBluel;TeI<stXV(2,2, 'CAlCll.ATIONS-ItfUT' ,Lt81ue); TekstXY(2,3,'noDEL SElECTION' ,Lt81ue);
HoITeI<st(2,7)j (luitschrijven van de 1IlOde1len op een pleats OP hetscherml ) KruTeI<st(2,91;
LudTeI<st(2,U) j
VocTeI<st(2, 13) j
TeI<stxY(t,23,' (esc) : return to Min 1IIeI'IU' , Yellow); FOR j:=7 TO 13 BY 2 DO
k:=(H) DIV 2;
CardToString(k,l!lenustr,l) j TeI<stXY( 41, j,lIIeI'IUStr ,White) j
END (t for xl;
CardToString(l!lenuteller ,lIIenustr, 1) j
TeI<stXY(41 , (2*lIlenuteller)+5,lIIenustr, Yellow}; TeI<stXY(39, (2*tDenUteller )+5, Cffi(016), Yellow) j LOOP Reed(lIlOdell j CASE IIlOde I OF '1' ."4' : Model:=IIlOdeljEXIT; i esc : con:=eSCjEXITi i EOI. : CardToString(lIIeI'IUteller,strl,llj con:='z' jEXIT; : 'H' : IF tDenUteller>1 TIEN DEC (IIIeI'IUtellerj; CardTostring{menuteller+l,aenustr,l)i TekstXV(41,(2tlllenuteller)+7,menustr,Wh!te);
TeI<stxY(39, (2*l!lenuteller)+7 " " Yellowl; CardToString(menuteller,menustr, 1); TekstXV(41,(21I!lenuteller)+5,l!lenUstr,Yellow)j
TekstXY(39, (2llllenuteller l+5,CHR(016), Yellow);
END (* if *) j
: 'p' : IF tDenUteller(4 THEN
CerdTostring(menuteller-l,menustr, 1); TekstXY(41, (2~lIIenuteller )+3,lIIenuStr,White); TekstXY(39, (2xlllenutellerl+3,' ',Yellow); CardToString(lIIenuteller ,lIenustr, 1) i TekstXY{41, (2*lIIenUteller)+5, menustr, Yellow) i TekstXV(39, 12*lIIenuteller)+5,CHR(0161, Yellow);
END (x if i)j
ELSE
END (i case*l
j END (* loop *l; IF con=esc THEN nodel:=Reservemodel; END (t if ~)j IF con:'z' THEN t1odel:=strl; END (X if *); END nodelKeuze;-. PROCEDURE Ch8ngeStrainStress(VAR
x,
y:ARRAY OF REAL; VAR Maxrij:CARDlNAL);• (*procedlre voor het veranderen van de geinterpoleerde vloeik.rolllrle~ hierraee kan lien (niet definitiefl waarden voor de rek en/of SPSMing verwiJderen,
toevoegen of wijzigen
x en y zijn de arrey's die de gewll8l'den van de geinterpoleerde vloeikro_ bevatten.
Maxrij is het aantal SPannings/rek waarden in de arreys x en y*)
VAR
i,j,k:CARDINALj string:ARRAV[O •• 7] OF CHAR; reservex,reservey:REAL; • resj,resi:CARDlNALj ok :BOOI.EAN; PROCEDtR Zet(i,j:CARDlNAL); BEGIN • RealToString(x[j] ,4,8,string,ok); T ekstXV (2, i, string, Whl te1
;
Real ToString(yU] ,2,8,string,ok); - TekstXY(13, i,strlng,White);END Zet; BEGIN
Tekstscherl;
Invoerschena(1,2,LtBlue)i
TekstXY(2,2,'CALCULATIONS - INPUT' ,LtBlueli
TekstXY(2,3,'CHANGE INTERPOLATED STRAIN/STRESS
VALUES'
,LtBlue)j T ekstxv(1, 23,' (esc) : return to calculations i/'lllUt 1IIenU' , YellowI;
TekstxV(2,5, I strain stress' ,White) jTekstXV(2,6,'
H
[N/1Il2], ,White} iIF Maxrij) =12 THEN
FOR j:=O TO 12 00
Zet(j+7,j) ;
END (* for *Ij
ELSE
FOR j :=0 TO Maxrij 00
Zet(j+7,j); END
It
for i);END (I< if *}i
j:=O; 1:=7; 1<:=2; LOOP reservex:=x[j] j reservey: =y [j ); CASE I< OF 2 : ReelToString(xU],4,8,string,okl; TekstXY(2, i,string,LtWhite); GegevensInvoerOpScherll(" ,2, i, x[j],string, 7); : 13: RealTostring(y[j],2,8,string,okl;
~egevensinvoervp~Cnerm\ ,i~,1,YlJJ,5.rln9,/};
END (* case xl;
CASE string[ 0 J OF 'a': x[j}:=reservexj
y[j]:=reserver; (*escape OPtie*J
EXITj
: 'b': x[j]:=reservexj y[j] :=reservey;
Zet(i,j)j (*pijl OIIlaag*)
IF j)O TIfN OEC(j); IF 1=7 TIfN $crQUDownActivePage(l, 78, 7,19,1) j Zet(i,j); ELSE OEC(i); END (i if i); 00 (i if i);
: 'c': xU]
:=reservex j y[jJ :=reserveYjZetli,j)i (*piJl OIIIhoog*)
IF j (lIaxrij TIfN
INC(jl;
IF i=19 TIfN
ScrollUpActiveP8ge(1,78,7,19,1)j
Zet(i,j); ELSE INC (i) j
00 (i if xl; 00 (i if *);
: 'd': x[j]:=reservelj y[j]:=reserveYj
Zet(i,j)j (*pijl rechts*)
IF k=2 TIfN k:=13 END;
l
'e': xUl:=reservex; y[j] :=reservey; Zet(i,j) ;IF k=13 TIfN k:=2 END;
: 'g': x[j]:=reservex; (ldelete the strain/stress COIIbinaUon*l
y[j) :=reservey j Zet(i,jj; resj:=jjresi:=ij IF llaxrij H TIfN
IF resj(lIaxrij TIfN FOR j: =res;+! TO llaxrij 00
x(j-l] :=xO] j y[j-l] ::y[j]; END (t for
xl
j END (X if Xl j llaxrij : =I1axrij-l j j:=resj;i:=resij END (* if *) j : I h': IF llaxrij (100 TIfN ELSEx[j]:=reservexj I*insert
a new
COIbination*) y[j] :=reserver;Zet(i,j); resj :=j jresi :=1 j llaxrij :=I1axrij+ 1;
FOR j:=I1axrij TO resj+l BY -1 00
xU] :=x[j-l]; y[j]:=y[Hh
END (x for *) j
GegevensInvoerOpSchera('Insert II strain value: ',2,21,x[resjj,string,7l;
GegevenslnvoerOpScherI('Insert a stress value: ',2,22,y[resj),string,7); j:=resjji:=resij
END
Ii
ifxl
j END (x case xl;resj :=J jresi:=! j IF Ilaxrij)=12 TIfN
r\Jl\ 1;"1 IV 1'7 !.IV Zet(i,resjt7-resi) ; INC (resjJ ; END
Ii
forxl
j ELSE FOR i: =0 TO MaxrU DO Zet(i+7,i); ENDIt
for *J j FOR i:=Maxrij+1 TO 12 DO TekstXY(2,i+7, ' END (~ for *) i END (X if *l; i:=resij TekstXY(1,21, ' TekstXY(1,22, ' END (t loop *) j • END ChangeStrainStressj , ,White);• PROCEDURE GegevensInvoerOpScherm(tekst:ARRAV OF CHAR;
• kol,rij:CARDINALj
VAR relll:REALj VAR str:ARRAY OF CHAR; laxstr:CARDlNAL) ;
, ,White); , ,Whitel;
(*procedure voor het inlezen van getallen in de waarde str (als string) en de
waarde real(als REAL).
kol,rlj is de plaats 01'1 het scheriI.
maxstr is het santal karakters in de string*) VAR i:CARDlNAL; ok : BOOLEAN j BEGIN - FOR 1:=0 TO fIilxstr 00 str[i] :=' '; END (x for xl; 1:=0; TekstXV(kol,rij,tekst,Yellow); • LOOP Read(str[i]) j CASE str[i] OF '0' .. '9' ,'.': TekstXY(kol+HIGH(tekst)+2+i,rij,strU], Yellow); INC(i) j : EO!. : IF 1=0 THEN str[O):='X'j ELSE str[i] :=' ; j END (t if *1 jEXITj EXIT; : bs : IF 1)0 THEN str[i] ::' '; TekstXV(kol+IUGH(tekst)+1+1,rij,' ',White) j TekstXV(kol+HIGHltekst)+l+i,rU," ,White); (*cursor terugzetten*) DEC(O; END (* if xl; : esc : str[O] ::' a' ; EXIT;
: 'H' : str[O) :=' b' ; (Xpijl OIllhoog*J
EXIT;
: 'p' : str[O) ::' c'; (*pijl 0II1aag*)
EXIT;
: '11' : str[O)::'d'; (*pijl rechts*)
EXIT; : 'K' : str[O]:='e'; (*pijllinks
*1
EXIT;: 's'
:
str[O]::'g'; (x del*1
EXIT;1
'R' : str[O]::'h'; (t ins*1
EXIT; ELSE atr[Ol :=' l' JEXIT END (t case xl; IF i:7 THEN EXIT END (* if Xl;- - , ... " +\
IF (str[O)='f') OR (str[O]='x') THEN
GegevenslnvoerOpScherto[ tekst, k01, rij, real, str ,maxstr) ; END (~ if I<l;
StringToRea1[str,real,ok); TeI<stXY(kol,rij,tekst,White);
TekstxY(kol tHIGH ( tel<st )+2, rij, str, White
1
jEND GegevenslnvoerOpScherrti
• PROCEDURE Hoofd2(GewReI<s,GewTelllP:REALli
(~PI'OCedIre voor het schrijven van tekst ap de tweede regel in het bovenste
Kader van het Invoerscherm. VORI1:
Strain-rate:. . . • . • • T elllPerattre: ... . Deze procedure wordt fleestal gel)ruikt in COIIIbinatie met Hoofd van 1IIOdu1e GBSchertoteksten
* I
VAR str:ARRAY [0 •• 7] OF CHAR; ok : BOOLEAN j
BEGIN
TekstXY(1,2,'Strain-rate : ' ,White); .
• RealT oStringl GewReks, 2, 8, str, ok) ; T ekstC (str, White) ; TeI<stC(' [l/s]' ,White);
T ekstXYl30, 2, ' T ~ture : " White
1
jRealToString(GewTe8\P,2,8,str ,ok); TekstC(str ,White);
TekstC(' [' ,lihite) iTeI<stC[CHR(248) ,White) ;TekstC('Cl' ,ilhite); END Hoofd2;
PROCEDURE Berekening(eps,sig:ARRAY OF REAL; VAR eps2,sig2:ARRAY OF REALi
~xrij,maxstap:CAROlNALj
VAR n,A,B,C,R,ResSS,epsO,sigO:REALj Kodel,aptie:CHARj
VAR stap:CAROINAL;
waarde,stap,begin,st8Pdeel:REAL);
(I< PI'OCedIre waerin de procedures uit GBl'Iodellen worden aangeroepen voar het bereken
van de vloeiparameters. Deze aangeroepen procedures zijn HollOlllOn,Krups$wift -Ludwik en Voce.
eps en sig : de waerden van de reI< en spanning van de vloeikroame na interpalatie eps2 en si;2: 100 waarden van rei< en SPaMing berel<end met de in deze procedure
berekende vloeiparameters Maxrij : aatal waerden in eps en sig
maxstap : maxio aantal stappen in het iteratieproces
n,A,B,C,epsO,sigO : berekende vloeiparameters van de diverse Madel len, hoeven niet allewl een waarde te krijgen na berekening van de parameters
van een IOdel
R,RSS :correletiecoefficient en kwedratische verschil5011, nllUllkeurigheidsaanruidingen -l'Iodel :het geldende rode!
aptie,waarde,stap,begin,stapdeel : instelwaarden van het iteratieproces (zie TECHNICAL MANUAL IIPA-OS28)
-stop : stopkriterium na vestlOPen van het iteretieproces
*)
VAR i:CAROINAL; BEGIN
FOR 1:=0 TO 100 00
eps2[i] :=(FLOATU)
/75.
0) 'eps[~xrij] jEND (t for *J;
IF I1odel:'l' THEN
HollOllOl'l( epS, 51g, ~xr1j, n, C, R, ResSS, sigO, 1, maxstap, wllllrde, stap, begin, stapdeel, stap, optie) ;
FOR i:=O TO 100 00
si;2[i] ::C~(Pow(eps2[i] ,n));
END (* for l);
ELSIF I1odel='2' THEN
Krups$witt(eps,sig,~xrij,n,C,R.ResSS,epsO,l,Maxst8P,waarde,st8P,begin,stapdeel,stap,aptie};
FOR i:=O TO 100 00 IF eps2[i]+epsO)O.O THEN
:>1\1LL1J;-" \rVW\\e"':>LUJ~:;UlJrI)J;
ELSE sig2[i]:=O.O; END (~ if i);
END (t for xl;
-
-ELSIF Hodel='3' THEN
Ludwik(eps,sig,Maxrij,n,C,R,ResSS,sigO,l,maxstep,waarde,step,begin,st1Pdee1,stQP,QPtiel; FOR 1:=0 TO 100 DO
sig2[
il
:=sigO+C* (Pow(eps2[i],n)); END (t for 1);ELSIF HodeI='4' THEN
Voce (eps, sig,Maxrij,n,A,B,R,ResSS, 1,maxstep,waarde,step,begin,stapdeel,QP tie); FOR 1:=0 TO 100 DO
sig2[i]::8-((B-A) *(exp( -n*eps2[i))));
END (t for *); END (t if *); • END Berekenill9j PROCEDURE ReI<sEnTellPInvoeren(Hodel:CHAR;1ilenaam:l'Iaterisalj VAR SewReI<s,GewTeIIP:REAL; BEGIN coo: =EOL j Tekstscherll;
VAR rel<srij,temprij,rel<rij,spanrij:ARRAV OF REALi VAR maxrij,l'Iaxrij:CARDINALjVAR AantalTeIIP,AantalRek:REALj VAR eps,sig:ARRAV OF REAL;
VAR voorw, con: CHAR) i
limet te veel letten QP de struetuur*) ("d!t is een nood-reserve procedure omdat de
procedure reknepartU te lang werd*)
Invoerschent( 1,2, LtBlue);
Tel<stXV{2,2, 'CALCULATIONS-INPUT' ,LtBlue);
TeI<stXV(2,3,'STRAIN-RATE
AND
TEnPERATURE SELECTION' ,LtBlue); TeI<stxY(1,23,' (esc) : return to main aenu', Yellow) j Hoofdl Model , filensaa) jTelPReI<sScherll(GewReI<s,GewTeIIP,rel<srij,temprij,maxrij); IF (SewReI<s=O.ol OR (GewTemp=O.O) THEN
con:=CII(027) ; ELSE
T elPReI<s(Aantal T eIIP,AantalReI<, GewRei<s, GewT emp, reksrij, temprij, reKrij, SPIlnrij,eps, sig, maxrij,Maxrij) j
voorw:='b'j END (i if ilj
END ReI<sEnTemplnvoerenj
PROCEDURE ReI<enpartij();
• (*procedure ReI<enpartij is de procedure wsarin het CALCULATIONS ItfUT tlENU
is verwerkt. In de eerste doorgang door dit aenu wordt eerst het materisal gevreagd (matteller:=ll, dan het vloeillOdel (lIOdtelle:=ll , dan de temperatlU" en -rel<snelheid (tellPteller:=l) en dan de berel<eningen uitgevoerd (progteller:=l).
De pleats in het aenu wordt bijgehouden door de variabele aenuteller *) VAR getalleninvoer: GegevenRecord;
VAR progteller,aenuteller,matteller,lIOdteller,tempteller, o,stQP,i,maxrij,teller,Maxrij,maxstl!lP,repr : CARDINAL; BovenRel<s, OnderReI<s, Boven T eIIP, Onder T eIIP, GewReI<s, GewT eIIP,
R, ResSS, C, n, KK, AantalReI<s, Aantal TeIIP, AantalRek, ex,
ey ,ax, ay,
epsO, si9O, A, B: REAL;rel<srij,temprij,reI<rij,SPanrij:ARRAV[O •• 323] OF REAL; eps2,sig2:ARRAV[O .• 100) OF REAL; eps,sig:ARRAV[O .. 1001 OF REAL; f:Filej ok: BOOLEAN; ccl,aenustr,c,ModeI,voorw,con,schenttype,optie,cl:CHAR; Til, Ts, Tb, Tst,wsarde,stl!lP,begin,st8Pdeel:ARRAV[O ••
31
OF REAL;l 11l~'lll IAII'UL CICIII II': 111::>L~1_'\lI:I1 II': II':IClUH _~I \Ie'~~II, 1~'~ 1\= 1.'1J het aanroepen van procedure RekenPartij worden de default waarden OPnieuw vastgelegdt)
VAR i:CARDlNALi
BEGIN
waarde[0]:=O.OOOOliwaarde[1]:=O.OOOljwaarde[2]:=0.OOOljwaarde[3]:=0.OOlj stap[0]:=0.05jstap[1]:=O.01jstap[2):=O.05istap[3]:=1.0j
begln[O]:=O.l jbegin(1] :=O.Ojbegin[2] :=0. lljbegin[3] :=0.1 j
stapdeel[O] :=2.0istapdeel[1] :=5.0;stapdeel[2] :=5.0jstapdeeI[3] :=5.0;
FOR i:=O TO 3 DO
Tw[i J :=waarde[i]; Ts[i]:=stap[i);
Tb[i] :=b!9in[l] j
T st [i] : =stapdee l[i];
END (* for A) j
END Instelj
- PROCEDURE WerklnUi tvoering (rtenUC: CARDINAL) j
• VAR menuchar:CHARj BEGIN CardToString(rtenUC,menuchar,l}; CASE menuchar OF '1' : TekstschenRj (*lateriaalselectie*) pr09teller:=Oj Invoerseher!a(2, 3,LtBlue) j TekstXY(2,3, 'CALCUlATIONS-INPUT',LtBlue); TekstXY(2,4,'nATERIAL SELECTION',LtBlue)i ZoekOpKateriaal{stOP,filenaaa)j IF stOP=l TI£N con:=CHR(027) ; ELSE
TekstXY(l,22,'Please wait,
now
loading selected data ',Whlte);HaalGegevensBinnen( f , filenaaa, te Her, laxrij ,getalleninvoer, AantalReks,
AantalT eRIP, AantalRek) ;
Maakrijen(getalleninvoer,reksrij,temprij,rekriJ,spanrij,laxrij);
I118tteller: =1 j
eel:='
x';
(llet deze varaibele die de waarde 'x' krijgtontsnappen we uit de tweede loop OP het einde van
deze procedure zodet het CALCUlATIONS INPUT I£NU weer
wordt 0Pgeb0lIIId*)
Ienuteller:=2j
END (t if l);
: '2' : IF Iatteller=l TI£N (*lIIOdelselectie*)
TekstXY(l,l,'Material: ' ,Whlte);TekstC(fllenaam,Whlte);
ModelKeuze(con,Model) i
StringToCard(Model,o,ok)j
0:=0-1; (*cardinal van model in settingsl)
IDOdteller:=lj
eel:='x' j
IF progteller=O TI£N aenuteller:=3;ENDj
ElSE TekstXY(1,22,'warning ! First select laterial !
END (* if *l;
, ,LtRed);
I
'3' : IF (matteller=l) AND (lOdteller=l) TI£N(ttemperatuur
en reksnelheidselectie*)ReksEnTemplnvoeren(Model,filenaaa,GewReks,GewTemp,reksrij,teaprij,
rekrij ,spanrij,l8xrij ,Maxrij,Aantal T eRIP, AantalRek,
ccl::'x' ; tempteller:=lj
eps, sfg, voorw, con) ;
IF progteller=O THEN aenuteller:=4;ENO; ELSE TekstXY(1,22, 'Warning! First select' ,LtRed);
IF Iatteller=l TI£N TekstC{'lIOdel !
ELSE TekstC('l8terial and IOdeI !
END (t if
-lj
EN) (t if il;
, ,LtRed); , ,URed)j
: '4' : IF haatteller=ll AND (llIOdteller=ll ANO (tempteller=l) TI£N
Tekstsoherl; (*berekeningen uitvoeren*J
Invoerscherl(2.4,LtBlue);
TekstXY(2, 3, 'CALCULATIONSMINPUT' ,UBlue);
I eKSt1\m:, 4, I..ALWLAIlUN:)" ,LtlHuen
Hoofd (Model , filenaam) j
Hoofd2(GewReks,GewTemp)j
TekstXY(1,11, 'Please wait, now calculating' ,Yellow);
Berekening(eps,sig,eps2,si92,Maxrij,aaxstap,n,A,B,C,R,ResSS,epsO,si9O, Model,OPtie, stop, waarde[o] ,stap[o] ,begin[o], stllPdeel[o]J; IF stOP=l THEN
TekstXV(1, 22, 'program halted, uPdate data,change strain-rate, temperatll'e,lOdel
or
aaterial TekstXYll,23,' {cr} : continueReadlcl; stoP:=Oj
ELSE con::'O' j (*weg vrij near grafieken OP het schertl~l Etf) (* i1 ~);
ccl::'x' ; progteller::l i
lIeI'IU1:eller::7j
ELSE TekstXVU.22, 'llarning ! First select' ,LtRed};
IF (aatteller:l) AND (IOdteller:l) THEN TekstCI'strain-rate and temperatll'e' ,LtRed)j ELSIF I8tteller:l THEN TekstC('lOdel, strain-rate and teMPerature' ,LtRed);
ELSE TekstC(' aaterial, model, strain-rate and temperature' ,LtRed);
EM>
1*
ifil;
Etf) (* if
il;
: '5' : Tekstscherlj (*settings veranderen*)
Invoerscherl(t, 3, LtBlue
1
;
TekstXV(2,2,'CALCULATIONS-INPUT
nENU'
,LtBluel; TekstXY!2,3, 'SETTINGS' ,LtBlue);SetSettings(Tw, Ts, Tb,Tst,waarde,stap, begin, stllPdeel,repr,maxstap, Model,schermtype,OPtie);
ccl ::'
x'
j: '6' : IF (matteller:ll AND !lOdteller=ll AND (tempteller=1) THEN
ChangeStrainStress(eps,sig,t1axriJ}j cel::'
x' ;
ELSE TekstXY(I,22,'Werning ! First select' ,LtRed);
IF (matteller:l1 AND (IOdteller=l) THEN TekstC('strain-rate and temperature' ,LtRed); ELSIF aatteller=l THEN TekstC('model, strain-rate and teraperatll'e' ,LtRedlj
ELSE TekstC('material, model, strain-rate and temperatll'e' , LtRed};
EM> 1* if
*Ii
Etf) (* if *lj
(*oproepen van her CALctU TIONS OUTPUT I'ENU zie Resuitaten( GBuitvoerl *)
: '7' : IF progteller:l THEN
Resul taten! GewReks, GewT emp, epsO, si9O, A, B, n, C, R, ResSS, con, schermtype, Model, OPtie, filenaam, eps,sig,Maxrij,repr,eps2,sig2) ;
eCl::'x'j menuteller:=4j
ELSE TekstXY(l,22,'waming ! First select' , LtRed) ;
IF (matteller:l) AM> (lOdteller=l) THEN TekstC('strain-rate and temperattre' ,LtRed); ELSIF matteller:l THEN TekstC('lOdel, strain-rate and teeperature',LtRed);
ELSE TekstC('aaterial, IOdel, strain-rate and temperature' ,LtRedl;
Etf) (t if *);
END (* if *l;
(*afbreek kriteriUl hierna terug in het HAIN I'ENU
*l
: '8' : cl:=escj ELSE END (* case *l; - END WerklnUitvoeringj BEGIN • Model:::' 1 ' ; InsteHwaarde,stap,begin,stBPdeel, Tw, Ts, Tb, Ist); repr::l0; maxstap:::50; OPtie:::' 3' ; schermtype::' e'; stOP:=Oj , ,Yellow); , ,Yellow);
VUUI-W;-a~ i
con::'7' j
progteller:=Oj (~programillateller telt de door9ang door onderstaande lOOP*1 (leerste keer eerst lllateriaal vragen, dan steeds beginnen*) {*bij calculations*1 Illatteller:=OjlOdteller:=O;tempteller:=O; aenuteller::li LOOP Tekstscherll; Invoerschera(2, 2, LtBlue Ii eel :='y';
IF (Jlatteller=ll ANI) (lIIOdteller=l) AND (tempteller-l) THEN Hoofd(Hodel,filenaam)j
Hoofd2 (SewReks, SewT emp I j
ELSIF (lllatteller=ll ANI) (IIOdteller:ll
THEN
Hoofd (1'Iode I, filenaam) ; ELSIF (Illatteller:ll THEN
TekstXV(2,l,'naterial: ',White); TekstC( fHenaam,Whitel;
END (t if tJ;
TekstXY(2,4,'CAlCULATIONS-INPUT MfNij',LtBlue); TekstXY(2,
5,'
-select lllaterialT ekstXY(2,6, I -select flowllOdel
TekstXV(2,7,'-select strain-rate and temperature TekstXY(2,a,'-perfora calculations
TekstXY{2,9,'-change settings
TekstXY(2,lO,'-change interpolated str/str values TekstXY(2,11,'-go to ealculations-output aenu TekstXY(2, 12,' -return to l18in aenu
- TekstXY[1,23,' {esc} : return to main aenu', Yellow);
FOR i::5 TO 12 00 C8rdToString( i-4,lIenustr, 1) j TekstXY(42, i,lIeI'IUstr,White}; END (t for l); CardToString(lIeI'IUteller ,lIeI'IUstr ,11; TekstXY(40,taenUteller+4,CHR(016), Yellow}; TekstXY(42,menuteller+4,aenustr,Yellow); LOOP Read(el); CASE c1 Of
'H' :
IF taenUteller}l THEN DEC (taenUteller ); (1)' ,White); (2)' ,White); (3)' ,White); (4)' ,White); (5)' ,White); (6)' ,White);',LtRedJ iTekstC(' (7)' ,White) j
(a)' ,White};
CardT ostring (taenUte 11 er+ l,menustr, 11 j
TekstXY(40,lIeI'IUteller+5,' ',Yellowl j (*pijltje uitvegen*)
TekstXY(42,menuteller+5,lIeI1ustr ,White) j CardToString(menuteller ,aenustr, 1) j TekstXY(40,aenuteller+4,CHR(016), Yellow) j TekstXY(42,menuteller+4,menustr, Yellow) j END
It
if l); (*pijltje OIIhoogt) : 'p' : IF menuteller{S THEN INC (menuteller );C8rdToString (menuteller-l, menustr ,1);
TekstXY (42,aenut:eller+3, aenustr,White) ;
TekstXY(40,menuteller+3,' ',Yellow); (*pijltje uitvegen*J CardToString(menuteller,menustr,l);
TekstXY(42,aenut:eller+4,menustr, Yellow) j TekstXY (40, aenuteller+4,CHR(016) ,Yellow);
END (t if *l;
: esc: EXIT;
: EOL : llerkItiJitvoering(menuteller) ;IF (eel:' x') OR (el=escl TIfN EXIT END;
: '1' : llerkltiJitvoering(l)jIF eel:'x' THEN EXIT END;
I
'2' : WerklnUitvoering(2)jIF eel='x' THEN EXIT END;: '3' : WerkltiJitvoering(3);IF eel:'
x'
THEN EXIT END;: '4' : llerkltiJitvoering(4);IF eel:'x'
THEN
EXITEND;
: '5' : WerkInUitvoering(5);IF eel:'x' THEN EXIT END; : '6' : llerkltiJitvoering(6);IF eel:'x' THEN EXIT
END;
i f ; wenUnUUVQCf'l : '81 : Cl:=eSCiUITj ElSE Ell!) (' case 'l; Ell!) (' 10(1) 'l;
If (cl=esc) OR (coo=esc) THEN EXIT EN!)
I'
if ');END (' loop .); END ReI<enpartij;
IIfGIN
Ell!) G!!onder.
DEFINITION MODULE GBlnvoerj
FROI'I GBDatllbeheer II'IPORT I18teriaal;
EXPORT QUALIFIED InvoerA, Dat8Control;
PROCEDURE InvoerA( optie:CAROlNALj
VAR filenaatll:l18teriaall;
PROCEDURE Dat8Control{);
(*optie:2 invoer venaf plaatje,3 Y8n8f rij getallen*) END GBlnvoer .
. (*InvoerA regelt het invoeren VIII'I vloeikrOlllllell in het dat!lbestand op de lIIInier
zoals in de TECHNICAL MANUAL (WPA 0528) is OPQenoaen.optie=2 :invoer uit plaatje
• OPtie:3 :invoer uit rij getallen. DataControl bevat het DATA-CONTROL IIENU
insert data
trot
strain/stressrow
insert data frOll! starin/ stress plot uPdate data
print data prepare datlldisk return to lIIIIin IIenIJ
procedures InvoerA (GBlnvoer) InvoerA (GBInvoer) InvoerllenlJ (GBDatllbeheer ) Invoenaenu (GBDatllbeheer ) Invoenaenu( GBD8t!lbeheer )
lie de IIIO<iile GBDat!lbeheer voor leer infortatie OII!trent uPdate data, print data
en prepare datlldisk. Ook in de II'lPI..EI1ENTATlON I100ULE staat leer COIIIIIentaar *l
-IMPLEI£NTATlON MOOOI..E GBInvoerj FROM ASCII IMPORT EOL,esc,bsj
FROM FileSystee IMPORT Close,File,ResPOnse,Lookup,WriteCher,ReadChar; FROM Keyboard IMPORT Read;
FROM bberConversion IMPORT CardToString,StringToCard; FROM RealConversions IMPORT RealToString,stringToRealj FROM Strings IMPORT Concat;
FROM Screen IMPORT Back,Colors;
FROM Oosjes IMPORT DiskInStationj
FROM FileIO IMPORT SchrijfRealNaarFile,Lees5trVanFile,SchrijfStrNaarfile;
FROM GllDatabeheer IMPORT Itsterieal,Zoek()pI1aterieal, Invonenuj
• FROM ScherII IMPORT ScrolllJpActivePage;
FROM ScherIIbew IMPORT TekstxY, TekstC, Tekstschena,Invoerscherll;
• TYPE string:ARRAV[O •. 7] OF CHAR;
• VAR filena:l18terieal;
optie:CARDlNAL;
PROCEDURE stringlnvoerOpScherll( tekst:ARRAV OF CHAR; kol,rij:CAROINAL;
VAR str:ARRAV OF CHAR; Iaxstr:CAROINAL);
(i invoeren van een string die aan bepaalde eisen aoet voldoen( zie CASE opdracht)
let kol,rij op een bepaalde pleats op tlet schena de 'tekst' pleatsen. str krijgt
de ingevoerde waarde • laxstr is het santal karakters*)
VAR i:CARDINAL; • ok:BOOlEAN; BEGIN FOR i: =0 TO laxstr DO str[i] ::' 'j Etll (t for tl; • 1:=0;
TekstxY(kol,rij, tekst, Yellow);
TekstXY(kol+HIGH(tekst) +1, rij , ",White); (tCll'5or terugzetteni) • i:=O;
LOOP
Read(str[il) ;
TekstXY(l,22,' ',Yellow);
CASE str[i] OF
'0' •.
'9',
'a' •• IZ', 'A' ..'t, '-', '\' :
TekstXV(kol+HIGH{tekst)+2+i,rij,str[i], Yellow);(*alleen deze karakters toegelaten*)
INC(i) i
: EOL : IF i=O THEN
str[O]:=CHR(220)j (lkarakter geeft eol aan*) ELSE str[i):=' 'i END (i if *);EXIT; : bs : IF DO THEN str[i]::' '; TekstXV(kol+HIGH(tekst)+1+i,rij,' , ,White) i TekstXY{kol+HIGH(tekst)+l+i,rij," ,White) j (iCll'5or terugzetten*)
DEC!i);
Etll (t if *l;I
esc : str[O] :::CHR(064);ELSE TekstXY(1,22,' Invalid', Yellow);
END (t case tl;
IF i=lalstr THEN EXIT
END (t if il;
• END
It
loopili
EXIT;
TekstXYlkol,rij, tekst,White);TekstC(' ',lI'lite);
TekstXV(kol+HIGHltekst)+2,rij,str,White) ;TekstC(' ',WhIte); END stringlnvoerOpScherII;
PROCEOURE GegevenslnvoerOpScherm( tekst :ARRAV OF CHAR; kol,rij :CARDlNAL;
1M f1:CIl ;f\I::IIL;
VAR str:string);
(tOok een PI"OCedure als StringlnvoerOpScherlll, nu gebruikt voor het invoeren van
een real getal *)
- VAR i:CAROlNAL; ok:BOOLfAN;
BEGIN
LOOP
i:::O; str:=' 'j TekstXY(kol,rij,tekst,YellowljTekstXY(kol+HIGH(tekstl+l,rij," ,Iihite); (tzet cursor terugt) i:=O;
LOOP
Read (str[i]) j TekstXY(l,22, ' , ,Yellow) i CASE strUl OF'0' .. '9','.':
TekstXYlkoltHIGH(tekst)+2+i,rij,str[i), Yellw); INCUl ;: EOI.. : IF i=O THEN str[O] :::' l' jELSE str[i]:::' ';EM); EXITj : bs : IF 1>0 THEN str[i]:=' '; TekstXY(koltHIGH(tekst)+i+i,rij,' ',White); TekstXY(koltHIGH(tekst)+1+i,rij," ,White); (·Cll'sor terugzetten*
1
DEW); EM) (t if tl; : esc : str[O] :=CHR(064);EXIT;
ELSE str(O]:='f';EXIT; 00 (t case xl;IF i=7 THEN EXIT EM) (t if t)j
00 (t loop
tl
j• StringT oReal( str, real, ok l;
IF (ok=TRUE) AND (real=O.O) THEN str[O] :='f' j
- EM) (t if *l;
IF (str[O]='f') THEN
TekstXY(l,22,'IlIVI!Ilid', Yellw); ELSE
(*raelding op het scherm als
verkeerd knkter verd ingetypt*)
TekstXY(kol,rij, tekst,Iihtte) j TekstC(' ',White);
TekstXY(koltHIGH(tekst)+2,rU,str,Iihite) ;TekstC(' ',White); EXIT;
END (t if *);
00 (t loop *);
-00 GegevensinvoerOpSchertllj
-PROCEOURE SlaFilenaamOp( filenaalll:l18teri8l!l1);
(thet opsl8l!ln van een filenaalll in het databetsand(dus OP de datadlskette)*) VAR f:File; I!I8ntal:ARRAY[O .. 15] OF CHARj aantalC:CAROlNALj I18terialenArray:ARRAY [0 .. 99] OF I18teriaali ok : BOOLEAN; i:CAROINAL; c:CHARj 88nWezig:CAROlNAL;
BEGIN
LOOP
aanwezig:=Oj IF OisklnStation()=TRUE THEN lookuP(f,'a:namen.bes' ,FALSE)j leesStrVanFile(15,' " f ,l!I8ntall j(*l!I8ntal materialen OP datadiskt ) ('idem maar dan als real*) (*array van materialen*
1
(tteller voor ide aateriaal*) (*controle getal of aateriaalnaaa al bestaat*)J\t:CNVlIQI \ I ,'-'J,
StrinoT oCard (aantal, aantal C,
old ;
FOR i:=O TO aantalC 00LeesStrVanFile(15,' ',f,~teri81enArray[i]); (~inlezen materiaalna.en*) ReadChar ( f , c l; Eta)
Ii
for*1;
Close(f); aantal C: :santal C + 1; CerdToStrino(aantalC,aantal,2); ~terialenArray[aantalC]:=filenaaaj LookuP(f,'a:namen.bes' ,FALSE);SchrijfstrNaarFile(f ,aantal) jllriteChar( f ,EOL); FOR i:=O TO aantalC 00
SchrijfStrNaarFile( f ,l1aterialenArr8Y[ i]) ; lIriteChar( f ,EOL) j (*\Ie9scrijven na.en*)
00 (* for *l; (*met nieuwe naaI achteraan*)
Close
I
fl;EXIT;
- ELSE
TekstxY{l,22,' Insert datadisk in drive A: and press (cr)', Yellow); Read(c) ; TekstXY(1,22,, ',Yellow); Eta) (i if II; 00 (I loop I); END SlaFilenaal\Op; PROCEDURE InvoerA(OPtie:CARDlNALj VAR filenaal:Hateriaalj;
(i OPtie=l dan rekken en SPaMingen rechtstreel<s*) (~ OPtie=2 dan rekken en SPaMingen vanuit literattl" *)
TYPE Gegeven=RECORD
Reksarray, TeQlllrr8y, Rel<8rray , Spanarray:REAL; OOj
VAR f:File;
strl,reks,SPan, tetlP, re:strino; str:ARRAY[O .. 2] OF CHAR;
filenaaml:ARRAY[O •• lS] OF CHARi ok:BOOLEAN;
kk,AantalReks, Aantal T etIP, AantalRek, reksnelheid, teaperatuur, rek, SPannino, maxrek, deelx,deely ,man,malY, schaab, schaalY:REALj
Areks, AtetlP,Arek, i,j,k, treks, itetlP, irek: CARDINAL j
REK, TEIf:ARRAY[O •. 100] OF REAL;
IngelezenGegevens:ARRAY[O •• 350] OF Gegeven; inf01, inf02:ARRAY[O ••
71
OF CHAR;c:CHAR;
aanwezig:BOOLEANj her!<: CHAR j
PROCEDURE een() j (*deze procedlre is OPQesPlitst in drie
deel-PI"OCedtres QenaaId een, twee en drie*) -BEGIN
T ekstscherlll j
Invoerscherlll(l, 2, LtRed) ;
• TekstxY(1,23,' (esc) : return to data control
1lenU',
Yellow); TekstXY(2,2,'DATA CONTROL',LtRed);IF OPtie=2 Tt£N
TekstxY(2,3,' INSERT DATA (PlOTH' ,LtRed); ELSIF OPtie=3
THEN
TeI<stXY(2,3, 'INSERT DATA (VALUESH' ,LtRed);
(*het eerste scherlll voor het invoeren van de
achtergrondgegevens van het materiaal, default waarden zijn aangegeven*) END (* if *); TeI<stxY(2,S,'material TeksUY(2, 6, 'werKstoff-nr (*default *) car-steel' ,lIhite); 46BU26' ,lIhite); kd' ,White); TekstxY(2, 7,' source(literature) TeI<stXV(2,8,'test:CoIIIpression,Tensile,tOrsion TeI<stXY(2,9,'nuaber of strain-rates TeI<stXV(2,10,'number of temperatures
TeI<stXY(2,11,'nugber of points per strlstr curve: IF OPti e=2 THEN
_ • • H • • I .... " ... I... e. it • , r , C' ,lIhite); l' ,lIhite); l' ,lIhite); 2' ,lIhite) j .. ' fa..:tL \
If
1~~~All'" 1', 1!:!1"'~11 VI ~~Ilun ax lllllllJ
TekstxY(2, 13, 'length of stress ax [I11III]
TekstXY(2,14,'range of strain [~]
1 ,I'II1HCrj --~ ... ~.
l' ,lIhite); l' ,lIhite) j
T ekstxY(2, 15, 'range of stress [N/IIIIII2]
00 (x if *); l' ,lIhite); END een; PROCEDURE twee(); YAR c:CHAR.; BEGIN LOOP IF DisklnStation()=TRUE THEN
LookuP ( f, filen1181111, TRUE);
SChrijfStrNaarfile(f,io101); SchrijfStrNaarFile( f , 10102) ; SChrijfRealNaarFile( f ,AantalReks); SChrUfRealNaarFilelf ,AantalTeJII)); SChrijfRealNaarFile( f ,AantaIRek) j j:::Oj (tschrijven va de achtergrondgegevens
naar
deI8teriaalfile*)
(*schrUven
van
de meetgegevensnaar
de
I8teriaslfile*)
FOR ireks:=l TO I!reks DO
SChrijtRealNwFile( f, IngelezenGegevens[j].Reksarray) j
FOR iteJll):=l TO AteMP DO
SchrijfRealNaarFile(f,IngelezenGegevens[j].Temperray)j
FOR irek: =1 TO I!rek 00
Real ToString (IngelezenGegevens [j ]. Rekarray, 4, 8, strl, ok) ;
SChrijfStrNaarFile( f, str1);
SChrij1RealNaarFile(f,IngelezenGegevens[j].Spanarray); INC(j) ;
END (* for *l;
END
It
for i);00 (t for Xl;
SChrijfstrNaarfUe( f, ' einde ' );
Close(f) ;
EXIT;
ELSE
TekstxY(1, 22,
'Insert
datadisk in drive A: end press (cr)', Yellow);Reed(c) j
TekstXY(l,22,' ',Yellow);
END (* if *lj
END (t loop x);
END
twee;
PROCEDURE drier); I*PI"OCe<Ilre die het hele inlezen bevat roept procedtres een en twwee aan*)
• j :::0; i:=7; IF filenaa[O]OCHR(064) THEN Tekstscherll; Invoerscherll(l, 2, LtRedl ; TekstXY(2,2,'DATA CONTROL',LtRed); IF OPtie=2 THEN
TekstxY(2,3,' INSERT DATA (PlOTl-2' ,LtRed) j
ELSIF OPtie=3 THEN
TekstXV(2,3,' INSERT DATA (VALUES)
4 ,
LtRed);END (t if *l;
TekstXY(1, 1, filenl!llll, lIhite) j
TekstXY(1,23,' (esc) : return to l8in
1IenU"
Yellow);T ekstXY( 1,5, ' strai~rate tellPer8ture eff. strain
IF OPtie=3 THEN
TekstXY(1,6,' [1Js] [de9r C]
H
ELSIF OPtie=2 THEN
TekstXVl1.6,' [1/s] [degr C] [.]
END (- if *);
Areks:=TRUNC(AantalReks); AteMP:=TRIJNC(AantalT eMP);
1!rek:=TRIJNC(AantelRek) i
eft. stress', lIli te) ;
[N/.2]' ,lIhite); [I11III]' ,lIhite);
I \If\ "'.-V IV"'''' I,IU
TeI<stxY(S, I,' END (* for xl; i:=7;
FOR irel<s:=l TO Arel<s 00
LOOP
GegevenslnvoerOpScherJ(" ,1,i,reI<snelheid,reI<s); IF rel<s[O]=CHR(064) THEN EXIT END;
IF (reI<snelheid)O.O) AND (reI<snelheid(10000.0) THEN EXIT ; ELSE TeI<stXY(l, 22,' Invalid' , Yellow);
, ,White);
END [* if xl; (*controles OP geldigheW)
END (* loop *);
IF rel<s[O]=CHR(064l TIfN EXIT END; FOR iteRIP:=l TO AtetIIP 00
IF irel<s=l THEN LOOP
GegevensInvoerOpSchert{" ,20, i, TEMPUteRIP], tetllP) ; IF tetllP[O]=CHR(064) TlfN EXIT END;
IF (TEI'f[itesp])O.O) AND (TEMP£itellPH10000.0) TIfN EXIT ; ELSE TeI<stxY(1,22,' Invalid' , Yellowl;
END (t if il; END (t loop *l;
IF teap[O]=CHR(064) TlfN EXIT END; END (t if I);
FOR irel<: =1 TO Arel< 00
RealToString(rel<snelheid, 2,8, rel<s, ok) ; TeI<stXY(3, i,reI<s,Whitel;
Real ToString{TEMP£iteRIP], 2, 8, temp, ok) i
TeI<stXY(22,i,tetllP,White); IF (irel<s=ll AND (itemp=ll TIfN
LOOP
Ge9evensInvoerOpSchertR(" ,40,i,REK[irel<],rel; IF re[O]=CHR{(64) THEN EXIT END;
IF OPtie=3 THEN I8xrel<:=10.0; ELSIF optie=2 THEN 18xrel<:=10000.0; END (* if *l;
(*OPtie=3 rel<ken invullen in (-] *)
(*OPtie=2 rel<ken invullen in ..
xl
IF (REK[irel<]}O.O) AND (REK[irel<]<ltIlxrel<) THEN EXIT j
ELSE TekstXY(1,22, 'Invalid', Yellow); END (* if
il
jEND (t loop *)j
IF re[O]=CHRI(64) THEN EXIT END; END (t if
*l.
RealToStringlREK[irel<],4,8,re,okl; TekstXY(42, i,re,White) j LOOP GegevensInvoerOpScherm(" ,60,i,SPanning,spanj. TeI<stXY(62, i, SP8r\,White);IF span[O]=CHR(064) TlfN EXIT END;
IF (SPanning)O.O) AND ISPanning(10000.0) THEN EXIT j
ELSE TeI<stXY(l,22,' Invalid' ,Yellow); END (t if xl;
END (* loop *l;
IF SP8r\[O]=CHR(064) THEN EXIT END;
WITH IngelezenGeQevens[j] 00
ReI<sarray:=rel<snelheid; T emparray: =TEMP[i telllP]; IF oPti e=2 THEN
Rekarray:=REK[irel<]xdeelx; SPanarray:=spanning*deely; ELSE Rekarray:=REK[irel<] ; $panarraY:=SPanning; END (* if xl; END; INC(j) ; INC(i)i If i=19 TlfN ScrollUpActivePage(1, 78,6,19,1) j DEW);
(XOlrekenen van milimeters nears rel<ken
!:AI \ 11 Jj
END (1 for 1) j
END (* for *);
END (t for i);
TekstXY(1,22,'Plesse wait, saving the data' ,Yellow); tweej SlaFilenaamOD(filenaam); END (* if i); _ EXIT; • END (t loop *J i END driej
BEGIN (*eigenlijk begin procedlre InvoerA, aanroep van een, twee en drie*) eenj lOOP lOOP aanwezig::::TRUEj filenaaRl::' inf01::::' , j inf02:=' ';
'.
,
-( *11) stringlnvoer()p$cherl ( 'II6terialIF filenaam[O]=CHR(064) THEN EXIT END (t if *);
: ',2,5, men_,l2);
IF filenaEIII[O]:::CHR(220) THEN TekstXY(39,5,' car-steel' ,White) ifilen88ll:=' car-steel' ;END; Concat(' a:' ,filen88ll, filenaaml);
lOOP IF DiskinStation()=TRUE THEN lookuP(f,filen88lll,FAlSE); Close! f) j EXIT; ElSE
TekstXY(l,22, 'Insert datadisk in drive A: lII'ld press
<or)',
Yellow); Read(c) i TekstXY{1,22, ' END (t if xl; END (t loop *); IF f. res=notdone THEN , ,Yellow) jaanwezig: =FAlSE; (Xbinnen een loop de invoer van de gevens over het I18teriaal. Steeds gedaan in aparte loops 011 geldigheid invoer te controleren
zie 1
tIm
11*) END (t if *);IF aanwezig:TRUE THEN
TekstXY(1,22, filen88ll, Yellow) ;TekstC(' already exists, <or> : continue', Yellow) j Read (0) j TekstXY(1,22,' " Yellow); IF o=esc THEN til enaam [01 : =CHR (064); END (t if
il
j ElSE EXIT; END (t if *); END (* loop t);If filenaam[O]:::CHR(064) THEN EXIT EM) (* if *);
(*2*) Stringlnvoer()pScherm('werkstoff-Nr : ',2,6,ln102,7);
IF inf02[O]=CHR(220) THEN TekstXY(39,6,'46BU26',White)jinf02:='468U26 'jEND; IF inf02[O]=CHR(064) THEN EXIT END (t if t);
(*3*) StringlnvoerOpScherJa('source (literature) : ',2,7,infol,6); IF info1[O]:::CHR(220) THEN TekstXY(59, 7, 'kd' ,Whiteliinfol:=' kd ' ,END; IF info1[O]:::CHR(064) THEN EXIT END (* if xl;
LOOP
TekstXY(1,22,' " Yellow);
(*4*) TekstXY(2,8,' test:COIIpression, Tensile, tOrsion : ',Yellow); Read(herk) ;
CASE herk OF
'c'
,'0', 'T' : TekstXY(2,8, 'test:COIIpression, Tensile, tOrsion ',White); TekstC(herk,White)jEXITj: esc : herk::::CHR(064l;EXIT i
: EOl : herk:='C'jTekstXY(2,8,'test:COIIIPression,Tensile,tOrsion C' ,White);EXITj ElSE TekstXY(l,22, 'Invalid', Yellow);
END (* if *)j END (* loop *) j
IF herk:::CHR(064) THEN EXIT END (* if *) j Concat(herk, infol, info1J;
\0';;10'
LOOP
TeksUY(l,22,' '. Yellow);
GegevenslnvoerOpScherm('nuIber of strain-rates : ',2,9,AantalReks,strl);
IF (str1[O]=CHR(064)} OR ((FLOAT(TK(AantaIReksll:AantalReks) AND [AantalReks)O.9)) THEN EXIT ; ELSE TekstXY(1,22. 'Invalid' I Yellow);
00 (* if tl;
END (* loop Xl;
If strl[O]=CHR(064) THEN EXIT
END;
(x6*)
LOOP
TekstXY(1,22,' , , Yellow);
GegevensInvoerOpScherlll('nuIber of tef8l)el'atures : ' ,2,lO,AantalTeIP,strl);
IF (str1[O]=CHR(064)) OR ((fLOAT(TK(AantalTeIP)):AantalTeIP) ANI) (AantalTetlP)O.9)) THEN EXIT; ElSE TekstXY(1,22,' Invalid' ,Yellow);
EM) (* if x);
END (* loop xl;
IF strl[O]=CHR(064) THEN EXIT 00;
• (l7t)
• LOOP
TekstXY[l,22, , " Yellow);
GegevenslnvoerOpScherlll('number of points per str/str curve: ',2.11.AantalRek,strl);
IF (str1[O]=CHR(064)) OR ((FLOAT(TK(AantalRek)):AantaIRek) AND (AantalRekH.9)) THEN EXIT; ELSIF str1[O]:'l' THEN AantalRek::2.0; TekstXY(39,11, '2' ,White);EXITj
ElSE TekstXY(t,22,'Invalid',Yellow)i
END (1 if Xl;
END (t loop x) j
IF str1[O]=CHR(064) THEN EXIT ENDl
(*81)
_ IF OPti e=2 THEN LOOP
TekstXY(l,22,' ',Yellow) j
GegevensInvoerOpScher!a( 'length of strain ax [III]
IF str1[O]=CHR(064) THEN EXIT END;
IF (schaalX)O.O) ANI) (schaalx<1lDl.O) THEN EXIT ;
ELSE TekstXY(1,22,'Invalid' ,Yellow); END (* if ll;
END (t loop x) j (*9*)
LOOP
TekstXY(1,22,' , • Yellow);
GegevensInvoerOpScherll(' length of stress ax [III]
IF strl[O]=CHR{064} THEN EXIT 00;
IF (schaaly)O.O) ANI) (schaalY(1000.0) THEN EXIT j
ElSE TekstXY(l,22, 'Invalid', Yellow); END (1 if t);
END (t loop x);
[xtotJ
LOOP
TekstXY(1,22, ' , ,Yellow);
GegevenslnvoerOpScherll(' range of eff. strain [-J
If str1[D]=CHR(064) THEN EXIT END;
If (II8XX)O.O) ANI) (lI8xx(lO.O) THEN EXIT ;
ElSE TekstXY(l,22,'Invalid' ,Yellow);
END
(t if l); 00 (t loop ll; (*l1l) LOOP TekstXY(1,22,' " Yellow) j : ',2,12,schaalx,str1); : ' ,2,13,schaaly,strl); : ' ,2, 14,lI8xx.strl);GegevenslnvoerOpScherll('range of eff. stress [N/mll2] : ' ,2, 15,lI8xy,strl); If str1[O]=CttH064) THEN EXIT 00;
If (II8XY)O.O) AND (II8Xy(tOOOO.O) THEN EXIT ; ElSE TeksUY(1,22,'Invalid' .Yellow); END
Ii
if *J;END (i loop *l;
dee 1x: ::maul schaab;
deelY:=IIIexy/schaaly; END (i if i);
EXIT; END (t loop Xl j
IF (str1[O]OCHR(064)) ANI) (filelll!l8lll[OjOCHR(064)) ANI) (info1[OjOCHR(064)) AND (inf02[0]OCHR(064)) THEN driej
- I " . !
I...mI \ J,J "
ENO InvoerA;
PROCEDURE DateControl;
VAR cl,menustr,con,c3:CHAR; j,menuteller, stop: CARDINAL;
• PROCEDURE. WerkInUitvoerlng(IeOUC:CARDINAL}; VAR RIeruCher: CHAR;
BEGIN CardToString{leOUC,menuchar,l]; CASE menuchar OF '1' : InvoerA(3,filena8ll); : ' 2' : InvoerA(2, filena8ll);
: '3' :
Tekstscherlj Invoerscherl{1,4,LtGreenJ;TekstXY(2,2, 'DATA CONTROL' ,LtGreen) j TekstXY(2,3, 'UPDATE DATA' ,LtGreen) j
TekstXY(l,20,'shift C : change filenaae',Yellow)j TekstXY(1,21,'(del> : reIDOve IISterial' ,Yellow)j ZoekOpMeterilllll(stap,fileneem); IF stop=O THEN IIlVOerIIeIlJ ( filena8ll, 4) j EN!)
It
if t}; : '4' : Tekstscherij Invoerschera(1,2,LtGreen)iTekstXV(2,2,'DATA CONTROL' ,LtGreen); TekstXY(2,3,'PRINT DATA' ,LtGreen) j
TekstXV(1,23,' (esc) return to data control menu' , Yellow) j 8ad<:=LtGreenj
TekstXY(1,22, ' Is your printer on-line, connected and paper inserted? (yIn)', Yellow) jBack:=5lackj Read(c3) j IF c3='y' TID TekstxY(l,22,' ',Yellow); ZoekOpMllterilllll(stop,fllenll8l); IF stop=O TID Invoermenu(filellll8ll,5}; EN!) (X i1 t); EN!) (t if *); : ' 5' : Invoermenu(filellll8ll,6); : '6' : con:=eSCj : esc : con:=eSCj ELSE EN!) (I case x); EN!) WerklnUitvoering; BEGIN menuteller:=lj LOOP Tekstscherllj Invoerscherlll( 1,2. LtGreenJ; TekstXV(2,2,'DATA CONTROL',LtGreen}i
TekstXV(2,6,'-insert
new
data frOlll strain/stress values TekstXY(2,7,'-insert new data frOlll strain/stress plot TekstXV(2.8,'-updste dataTekstXY(2,9, '--print data TekstXY(2,10,'-prepare datadisk TekstXV(2,11,'-return to lIIain menu
TekstXV(1,23,'(esc} : return to lIIain menu',Vellow)j
FOR j:=6 TO 11 DO
CllrdToString(j-5,aenustr,1)i T ekstXv (57, j, menustr, White) i
EN!) (* for xl;
CardToString(menuteller, menustr, 1) i TekstxV(57 , menuteller+5,menustr, Yellow) i TekstxV(55,menuteller+5,CHR(016), Yellow}; LOOP Reed(c1); CASE cl OF 'H' : IF menuteller)l TID DEC (menuteller) i CllrdToString(menuteller+l,menustr,l}; TekstXV(57,menuteller+6,aenustr,White)i # f , u " " \ (1)' ,White); (2)' ,White); (3)' ,White); (4)' ,White); (5)' ,Illite); (6)' ,White);
CerdToStringlmenutellerl.enustr,l); TekstXY(SS,menutelleNS,ClfH016), YellOliJ); TekstXVIS7,menutelleNS,.enustr, YellOliJ) j END (* if xl; : 'p' : IF llenuteller(6 TI£N INClmenuteller) j CerdToStringlllenuteller--l,menustr ,1); TekstXYISSlmenuteller+41 ' I, YellOliJ);
TekstXY(S7 ,menuteller+4, lIenustr ,White) j
(tpijltje
near
benedeni) CardToString(menuteller,menustr,l); TekstXYISS,lIenuteller+5,CHR(016) , Yellowl i TekstXV(S7,lIenuteller+5,menustr,YellOliJ); END (i if xl; : esc : con::esc;EXIT; : EOL : WerklnUitvoering(menuteller);EXIT;
: '1' : WerklnUi tvoering(1) ,EXIT;
: '2' : WerklnUitvoering(2);EXITj : '3' : WerklnUitvoering(S)jEXIT; : '4' : WerklnUitvoering(4);EXIT i : '5' : WerklnUitvoering(S);EXITj : '6' : con::esc;EXITj
ELSE
001*
casexl;
END (t looPxl
jIF con:esc TI£N EXIT END;
00 (* looP xl;
END Dat8Contro 1;
BEGIN 00 GBlnvoer.
DEFINITION MODULE G8Modellenj FROM Screen IMPORT Colors j
EXPORT QUALIFIED Ludvik, KrupsSllift,
Ho 1101101l,
Voce;
-PROCEDURE Ludvik(x,y:ARRAY OF REALjHaxrij:CAROINALi
VAR n,c,R,RSS, sig() :REALi SchermIO,lBlstap:CAROINALj wearde,stap,begin,st8Pdeel:REALj VAR stOP:CAROINAL;
optie:CHAR) j
(*dwz als SchermIO:O dan geen pijltjesgedoe OP het scherm, weI als SchermIO::l*1
• (*wearde::verschil voorSPaming, stap::eerste stappen, begin=beginwearde voorsp • st8Pdeel=wearde weardoor stap moet worden gedeeld~l
• PROCEDURE Krups$wtft(x, y:ARRAY OF REALjVAR Mexrij : CARDINAL j
VAR n,c,R,RSS,epsO:REALj ScheraIO,lBxstap:CARDlNALj wearde,stap,begin,stapdeel:REAL; VAR stOP:CARDlNALj OPtie:CHARI; (t
PROCEDURE HollOllOll(X, y:ARRAY OF REALjHaxrij:CAROlNALj
VAR n,c,R,RSS:REALj VAR stOP:CAROINAL; OPtie:CHARJ; • xJ
• PROCEDURE HollOllOn(x,y:ARRAY OF REALiMexrij:CAROlNAL; VAR n,c,R,RSS,sig() :REALj
SchermIO, IBxstap: CARDINAL; wearde,stap,begin,st8Pdeel:REALj VAR stOP:CARDlNALj
OPtie:CHARJ j
PROCEDURE Voce(x,y:ARRAY OF REAL iMaxrij:CARDlNAL; VAR n,A,B,R,RSS:REALj
ScherIIO,lBxstap:CARDlNAL; wearde,stap,begin,st8Pdeel:REALj VAR OPtie:CHARI i
'END GBModellen.
J*Deze IOdule bevat de procedures die voor elk vloeilllOdel de
pararaeterwaarden berekenen uit de aeetgegevens. We illustreren de gang van zaken ·voor het 1IIOde1 van KruPskowsld/SWift (procedure KruPsSIIift). In x en Y wordt de
geinterpoleerde vloeikrolaie ingegeven bij de gewenste telPer8twr en reksnelheid Deze kroMe bestaat uit de arrayS voor rek en SPanning let ieder Mexrij getallen. n,C,R,RSS,epsO zijn de berekende vloeipararaeters, ScheraIO wil Zeggen het piaatsen van het pijltje det het iteratieproces voigt. Voor ScheraIO:O wordt geen pijltje gezet en voor SchermIO::l weI. maxstap,waarde,stap,begin,st8\)deel en optie zijn de instelwearden (zie TEClfUCAL I'IANUAI. WPA 0528). stop is het afbreekcriteriUIII van het iteratieproces : ais stop =1 wordt al het rekenwerk stilgelegd en ver-schijnt een foutlielding OP het beeldscherlft •
• De IMPLEMENTATION ItOOULE is ruilschoots van colftlentaar voorzien. ~)
IHPLEMENTATION noDULE G8Modellen;
F~ I1athLibO I!fORT In,exP,sqrt;
~ RealConversions I!fORT RealToString;
• ~ Strings IMPORT Concat;
F~ Screen I!fORT Colors;
f~ Scher!lbew Ilf00T TekstXYj
• FROM Rekenbew 1l1PORT Pow,RSS,T~trix,OplosTweeYerg;
VAR e4:ARRAY [0 •. 6] OF CHAR;
PROCEDURE
CorrCoeff(Y,y:ARRAY OF REAL;Kaxrij:CARDlNALl :REALj VAR i:CARDlNAL;
gem, boven, onderl, onder2 :REAl; BEGIN gem:::O.Oj boven:=O.Oj onderl: =0.0; onder2:=O. OJ FOR 1:=0 TO Maxrij DO gem:::get+ly[il
I
IFLOAT(KaxrU) 1); END (~ for *1; fOR i: =0 TO I1axrij DOboven: =boven+ ( (Y[ il-gell) ~ (y [ i j-gem) ) ;
onderl : :onder 1 t ( (y[i]-gem) * ( y [i]-gem) ) j
onder2:=onder2+( (y[i]-gem)
*
(Y [i]-gellI I ;
EM) (A for *) j IF (onderl*onder21=o.0 THEN RETURN 0.0; ELSE RETURN (boven/(sqrt(onderPonder2))
I;
END (t if ~)j • END CorrCoeff;PROCEDURE MetVoorSpaming(y:ARRAY OF REAL; 5igO:REALj VAR maxy:CARDINAL; VAR yy : ARRAY OF REAl);
(*deze procedure wordt gebruikt in procedure rekenuit van de hele rij
span-o ningen steeds een 5190 eraf*)
VAR i:CARDlNAL; BEGIN FOR i: =0 TO maxy DO yy(i]::yUJ-si9Oj END (i for
*h
END MetYoorSpaming;PROCEDURE MetVoorDe1ormatie(VAR x, y:ARRAY OF REAL;
epsuonO: REAl j
YAR maxx:CARDINAlj YAR xx:ARRAY OF REAli VAR stOP:CARDlNAL);
o (*wordt ook gebruikt in rekenuit en trekt steeds van iedere epsilon een epsO
at.
als epsilon[O](:x[O]) door deze aftrekking negatief dreigt te worden,wordt deze epsilon[O] weggegooid en schuiven de hele array's x en y een pleats
near beneden op, dwz x[i]::x[H]. dit ailes in verband met procedure
logar-i tlllogar-iseer. de I18xlogar-imale waarde wordt let 1 verminderd *)
VAR i:CARDlNAL; BEGIN
FOR i:=O TO maxx DO xx[i] :=x[i)+epsilonO;
END [t for A};
IF -epsilonO ): X[O) TIIEN IF stQP=O TIIEN
TekstXY(2,23,CHR(015),Yellow); (loeel sterretje geeft OP het scher.
het linderingsproces Ban,als dit pleatsvindt*)
FOR i:=1 TO Ian DO
xx[HJ ::xx[i];
y(i-l)::y[i);
IIIClU;"IIIlIU-l, - --~---~ - - _ .
END (* if *l;
If I18xx(4 THEN (*hier wordt de berekening afgebroken ais het array Minder dan 5 meetparen heeft, OP het $Chern zichtbaar dlav stop:=1;
TekstXV(3,23,CHR(015) , LtCyan) j
• ENDj • END (~ if *);
.END MetVoorOeforll8tiej
blauw starretje, de waarde stop wordt tt)
PROCEtllRE LogaritMiseer(x:ARRAY Of REAL; VAR laxx:CARDINAL; VAR stOP:CARDINAL;
• VAR i:CARDINALj BEGIN
VAR Inx:ARRAY Of REAL) j (*van aIle elmenten van de array's
x
en Y wordt de Ingenomen. stop:=1 als een In dreigt te worden berekend met x[1]<0*)
f~ 1:=0 TO en DO
IF x[1](=O.O THEN stOP:=l;END (* if t)j IF stOPO 1 T1fN
1nx[i]:=1n(x[i]);
END (t if *);
END (* for *) j
E~ LogaritMiseerj
PROCEDURE VulMatrixEnReken(VAR B:ARRAY Of REAL;
Inx,lny:ARRAV Of REAL;lI8xy:CARDlNALj VAR stOP:CARDINAL);
(*OP1osson van de latrixvergelijking A*B=C met A=A[O,O] All,O] A(O,l] A[1,l1 B=B{O],B[t] C=C(O],C[l] invoer
A
en C uitvoerB*)
• VAR i : CARDINAL j A: TweeDMatrix j C:ARRAV[O •• 1] OF REAL; BEGIN A[O,O]:=O.O;A[O,l] :=0. OjC[O]:=O.OiC[l] :=0.0; fOR i: =0 TO I18XY DOAID, 0] :=A[o, O]+lnx[i]*lnx[i] j
A[O,ll:=A[O,l]+lnx[ilj C[O] :=C[O]+ Inx[i]*lny[i]; C[1] :=C[1 ]+lny[i];
END (* for *);
A[1,0]:=A[0,1]; AU, 1] :=fLOAT(lI8xyt1);
IF (A[l,O]*A[O, 1)-A(1, l]*A(O,O])=O.O THEN
stOP:=1; (*hierMee voorkomen we delen door
°
in OplosTweeVerg*)ELSE
OplosTweeVerg(A,C,B) ; END (x if *l;
END VulMatrixEnRekenj
PROCEOIJRE RekenUit(x, y:ARRAV Of REALi
VAR y1:ARRAY Of REALjvariabele:REALj VAR n,c,R,ResSS:REALi Model: CARDINAL j VAR I18xy:CARDINALj VAR stOP:CARDlNAL; VAR OPtie:CHARj VAR SchermIO:CARDINAL);
(xwordt gebruikt binnen bereknlOOP in het while-stateMent, x en y invoer yl uitvoer van gefitte krOMe
waarmee
in berekenloOP R en RSS wordt bereknd variabele is per model de constante die wordt gevarieerd, Model is het in MOdule nlonder ingegeven MOdel,laxy de bovengrens voor array's x en y,OPtie is de manier van fitting,1,2,3 of 4 zie OPIerkingen bij IF statements lnx,lnY,xx,rY,ylog:verschillende tussenarray's als uitvoer van bewerkingen OP x en y. A,B,C Array zoals gebruikt in Vul~trixfnReKen,str gebruikt om
R
ofRSS
OP het scherm te zetten*
1
VAR i:CARDINAL; Inx,lny,xx,yy,ylog:ARRAV[O .. l00] OF REAL; A: TweeDI1atrix i C,B:ARRAV[O •• l] OF REAl; str:ARRAV[0 .. 15] OF CHAR; ok: BOOLEAN; ..BEGIN
IF !Iodel=2 Tl£N (* variabele is Mer epsilonO .)
(*model llet voordeformatie, door de In-waarden wordt de best passende rechte
lijn gelegd n en c verschijnen in vector B, let y1 wordt R of RSS(al naer
gelang de optiel berekend:OPtie=l:fltten naar de beste R in een lineare
gra-fiek.OPtie=2:fitting naar de beste
R
in een logaritmische grafiek.OPtie=3 fitting naar de bste RSS in een lineaire grafiek.optie=4: fitting naar de betse RRS in de logaritmische gral1ek*)t1etVoorOeformatie(x, y, veriabele, maxy,
xx,
stop}; Logaritmiseer(y,laxy,stOP,lny); Logaritmiseer(xx,laxy,stOP,lnx); Vul~rixfnReken(B,lnx,lny,laxy,stOPI; IF stOP--o THEN n:=B[O]; c:=exp(B[l]) ;IF (optie='2') OR (OPtie=',') TI£N FOR i:=O TO lIaxy DO
ylU] :=B[1]+B[Wlnx[i]; END (* for *l; ELSE FOR 1:=0 TO IlaIY DO
yHiJ
:=c*(POII(XX[i] ,n)}; END (* for *l; END (i if *l; END (* if *l; END (i if il;IF (l'Iodel=3) OR (!lodel=1) TI£N
(*!Iodel 1 wordt hier bepaald door de OPtie 1 of 3, x en Y worden gefit aan de best psssende kroml8e Y=a*x(power n)+b waarin b per definitie gelijk
is san nul, n wordt geverieerd*)
IF (Model=!} AND ((OPtie='2') OR (OPtie='4')} THEN LogarUmiseer(
x,
IaXY • stop. lnx1 ;
Logaritlliseer( y, IlaIY, stop, lny I j
VuI~trixfnReken(B.lnx,lny,laxy,stOP)j
IF stOP=O TI£N n:=B[Oh c:=exp(B[111 j FOR i:=O TO iIIIIXY DO
y1[i] :=B[1J+8[0]'lnx[1J;
ylm :::exp(y1[i]);
END (i for *l;
END (i if :tl;
Ii
variabele is hier n *l(*onderstaand gedeelte gebruikt in het geval wanneer OPtie :: 2 of 4 en Ills de mting let kroMe Y=a*x(power n)+b heeft gefaald,alleen dan
wordt san het stOPkriterium de waarde 2 gegeven. !Iodel 1 kOlt in dit deel dus nooit.de fitting geschiedt san de best passende kroml8e lny=a*lnx+b
(lnsig::ln(eps+e!)sOl*n+lncl.er I80et dus gelogaritliseerd worden*)
ELSIF ((stOP:2) OR (OPtie:'2') OR (OPtie:'4')) AND (l'Iodel=3) TI£N I1etVoorSpanning(y,variabele,l8xY,YY)j
Logaritlliseer(yy,18xy,stop,lny); Logari traiseer (x, !laXY ,stop, lnx) j
VulllatrixEnReken (B, lnx, Iny, IlaXY, stop) ; IF stop=O Tl£N
"';-CWIllllJJ;
FOR i:=O TO IDaxy DO yl[i]:=8[1]+8[O]*lnx[i]i
END (~ for ~)j
IF (optie:'l') OR (optie:'3'J THEN
FOR i ::0 TO I18XY DO
yl[i1::exp(yl[i]]i
END
It
fort)iEND (t if i);
END (i if xl;
(*het PI'OQI"8IIIl8 lOOPt dus in eerste instlll'ltie door onderstaand gedee 1 te
als tenllinste optie: 1 of 3.1IOde1 loopt hier altijd doorheent)
ELSIF (optie:'l') OR (optie:'3') THEN
IF variabele(=O.ODOl THEN stop::ljENDj
IF stOP=O THEN FOR i: =0 TO I18XY DO Inx[i]:=Pow(x[i], variabele) j END (t for i) j VulKatrixEnReken(8,lnx,y,lI8xy,stop); IF stop=O THEN c::S[O];
n:=8[l]; IXn is hier sigOt)
IF Model:l THEN (*voorSPlll'lning aItijd
null)
n:=O.O;
END (i if *)j
FOR i:=O TO I118IY DO
ylU) :=n+c' (Pow[x[i], variabele));
END (x for xli
END (t if *)j
END
It
if *l;END (* if xl;
END (t if *l;
IF ModeI=4 THEN (t variabele is hier n x)
(t direkte fitting 8IiI'l y=a*exp(ntx)+b (sig:8-(B-A)exp(nxeps)).n wordt
gevari-eerd.alleen te gebruiken in opt!e's 1 e 3*)
IF optie='2' THEN optie::'1' END (t if *);
IF optie='4' THEN optie:='3' END (X if xl;
FOR i:=O TO IIIIIIY DO
Iny[i]:=yU];
InxU] :=-(exp( -variabele*x[il));
END (* for xl;
Vull1atrixEnReken(S, InK, Iny,lDaxy,stop) i
IF stOP=O THEN
n:=S[OJ;
c:=8[l];
FOR 1:=0 TO IIIIIIY DO
y1U] :=c-(n*exp( -variabele*x[i]
II
iEND (* for X);
END (t if xl;
END (x if tl;
(Xhieronder de R en RSS in logaritlllische of lineaire vorlll WIIarI'l8ar wordt
geQPtilll8liseerd in de verschillende opties. met str worden R of RSS bij
elke iteratielus naar het scherIII getsuurd*)
IF stop=O THEN
(*stOPkriteriUl*)
IF (Hodel:l) AND ((optie='2'
I
OR (aptie=' 4'I)
THENResSS:=RSS(y, yI,ElY) jR:=CorrCoeff(y, y1,IIIIIIY);
ELSE
IF optie='l' THEN
R:=CorrCoeff(yl,y,lII8xY)j
ELSIF optie='2' THEN R: :CorrCoeff (y1, Iny ,IIIIIXY) ;
ELSIF optie=' 3' THEN
ResSS:=RSS(y, yl,lII8xy); ELSIF optie:' 4' THEN
00 (* if xl;
IF (optie='l') OR loptie::'2') TIfN
Reel T oString(R, 10, 16, str, old;
ELSE
ReaIToString(ResSS,6,16,str,Ok); END (x if xl; IF ScherII0=1 Tt£N T ekstxY (30,20, str , WIli teJ ;
00 IX IF *l; 00 (x if xl; END (tif*); .END RekerlJitjPROCEDURE
Berekenlaop(begin,stap,waarde,stapdeel,beginwearde,deelfmetor:REAL; YAR variabele:REALj x,y:ARRAY OF REAL; YAR n,c,ResSS,R:REALjKodel ,SchermIO, I8xstap:CARDlNAL;
VAR
Iaxy:CARDINALjVAR
stOP:CARDINAL;VAR
OPtie:CHAR) j• YAR veriabeleO, variabele1 :REALj
yt,ylog:ARRAY(O •• l00] OF REAL;
BEGIN
ResSSO, ResSS1, RO, Rt, RofRSSO, RofRSSl : REAL;
i,teller,l,r:CARDlNAL;
teller:=O; variabeleO:::beginj . veriabelel :::begin+stap j
RO: ::1. OjRl: =1. OJ ResSSO: :::1. OjResSS1: ::1. OJ
RekenUit (x, y, y1, variabeleO,n, c,RO, ResSSO,Kodel ,IaXY ,stop,optie, ScherIIO);
• (t hierboven:doorlOPen van procedJre RekenUit raet de beginschatting van de betreffende 'verieerconstanten' RO of RSSO relevante uitvoer*)
(* hieronder:stopkriteriUl van while-stateraent. £lIs de 'varieerconstante'
• in huidige en vorige RekerlJit kleiner is dan een bepaelde wearde(in te
stel-len in proramedeel settings
*l
WHILE ABS(variabeleO-variabelel)waarde DO
If ScherIIO=l TIfN (twel of geen scherlluitlezingen.
te gebruiken £lIs deze module wordt gebruikt in
een ander rprogr8IIlI8*)
(Xhieronder wordt pleats van het pijltje berekend en het pijltje oP het
scherm getekend*)
IF (veriabeleO)-beginwaarde) AND (veriabele1>-beginwaarde) THEN
TekstxY(r,23,' , , Blmek);
r:::l +TRUNC( (beginwaarde+variabelel) *76. O/deeltmetor);
TekstXY(r,23,CHRI024) ,LtRed);
00 (* if tl;
00 IX if t)j
(thieronder:doorloPen vn RekenUit raet de volgende schatting van de 'veri-eerconstante'*)
RekerlJit(x. y, y1. veriabelel. n,c,R1, ResSSl. Kodel,laxy. stOP.optie,SchenlIO
I
jIF (stOP:::1) Tt£N
waarde:=1000000.0i (tde while-ius wordt door dit stQPkriteriUl direkt
onderbrOken* )
ENO IX if Xl;
IF (optie::'l') OR (OPtie::'2') Tt£N RofRSSO::::Rl jRofRSSl :::ROj
ELSIF (OPtie:::' 3') OR (OPtie:::' 4') Tt£N RofRSSO: =ResSSO jRofRSS1: =ResSS1;
00 (X if 1);
(*hieronder: 815 onderstaande geldt dan is in geval van RSS de RSS van de
vorige stap kleiner dan van de huidige stap en wordt de staprichting
omge-keerd en tegelijk de stapgrootte gedeeld door ee in settings in te stellen
keren we OP onze schreden terug en gaan de andere kant uit*J If RofRSSHRofRSSO THEN stap:=stapl st8Pdeel; stap: =-stap; teller:=O; 00 (* if x); variabeleO:=variabelel; variabelel:=variabeleO+stapi ResSSO:=ResSSli RO:=R1; INC (tellerl; If teller=mllxstap THEN stOP:=1 ;waarde : =10000000. OJ END (i if xl;
END (* while il;
variabele:=variabeleOj (i=variabelel, lastst berekende wasrde*)
- (i ne de while-Ius nemen voor de berekende 'varieerconstante het gemiddelde
• van
lastste en voor IHtste i terlltieslag. tevens worden de uiteindelijke R enRSS bepasld over de lineaire grefiek*j If (OPtie='2') OR (optie='4') TIfN
fOR i:=O TO IIIlXY DO
yHi
l:
=exp( y1[i] l;END (* for *l;
00 (t if Xl;
R:=CorrCoeff(yl, Y,IIIlXY l;
ResSS:=RSS(y,yl,lIIlxyl; -END BerekenlOOPi
PROCEDURE
Ludwik(x,y:ARRAV Of REALjHaxrij:CARDINALjYAR n,c,R,RSS,sigO :REALj ScherlIO,lIIlxstap:CAROlNALj waarde,stap,begin,stapdeel:REALj YAR stOP:CAROINALi
OPtie:CHAR) j
(*dWz 8ls ScherlIO=O dan geen pijltjesgedoe OP het scheri, weI als ScherlIO=l*) (*waarde=verschil voorSPanning, stap=eerste stappen, begin=beginwasrde voorsp
stapdeel=waarde waardoor stap !ROet worden gedeeld*) YAR beginwaarde,deelfactor:REAL; i : CARDINAL;
BEGIN
IF Scher,IO=l THEN If (OPtie='l') OR (optie='2') TlfN TekstxV(SO,2O,'H'
,White) jT ekstXV (1,20, 'Correlation coefficient : " Whi te) j ELSE TekstXV(SO,20,e4,White);
TekstXY(1,2O, 'Residual SUI squared : ' ,White);
END (* i1 il;
IF (OPtie='l') OR (OPtie='3') TlfN
TekstXY(1,21,'Searching the best fitting strain hardening exponent n' ,White); TekstXV(1, 22, '0
END (:I: if xl;
END (X if xl;
IF ((OPtie=' 1') OR (OJ)tie=' 3'
II
AND (stOP021 TlfNdeelfactor:=2.0j beginwaarde: =0. OJ
BerekenlOOP(begin.stap.wasrde,st8Pdeel,beginwaarde,deelfactor,
n,
x, y
,sigQ, c, RSS, R, 3, Scher,IO, IIIlxstap,J1axrij, stop, OPtie) i-(x IF stOP=1 TlfN stOj):=2jENDj x)
• END (* if
il
j1*
(*als bovenst88nde gfasld heeft in OPtie's 1 en 3 proberen we het nog OJ) dez onderstaande andere lanier,zie ook procedure BerekenLOOP en RekenUit (faslt meestal ook)~)If (optie='2') OR (OPHe=' 4') OR (stop=2) THEN
.1)
TeI<stXY(1,21, 'Searching the best fitting pre stress sigj) ',White); TekstXY (1 , 22, '-1000 END (* if xl; stap:=looo.0*stapj wearde: =10. O*waarde j deelfactor:=1500.0j beginwaarde :=1000. OJ Berel<enloop(begin,stap,wearde,st8Pdeel,beginwaarde,deelfactor, sigj), x, y ,n,c, R$S,R,3, ScherIIO,lIaxstap, Maxrij, stOP,OPtie) j
END (t if xl;
(*buiten werking per 20-1-88 OIdat uitkoasten toch niet geed zijni) END Ludwikj
PROCEDURE KrupsSwift(x,y:ARRAY OF REALjVAR Maxrij:CAROINAL; VAR n,c,R,RSS,epsO:REALj SchermIO,lIaxstap:CARDINALj waarde,stap,begin,st8Pdeel:REALj VAR stOP:CARDINAL; OPtie:CHAR) ; • VAR beginwaarde,deelfactor:REALi i:CARDlNALi
(illlOdel llet voordefnatie*)
BEGIN
IF ScherIIO=l THEN
IF (OPtie=' 1') OR (optie='2') THEN TekstXY(50,20,' [-]' ,White);
TeI<stXV(1,2O, 'Correlation coefficient: ' ,White) i
ELSE TekstXV(1,2O,'Residual stili squared : ' ,White); TeI<stXV(5O, 20, e4,White);
• END (X if il;
TeI<stXY(t,21, 'Searching for the best fitting pre strain epsO ' ,White);
TekstXY(l,22,'-l 0 1 2 END (i if *l; deelfactor::4.0j • beginwaarde:=1.0; 8erekenlOOP(begin,stap,waarde,stapdeel,beglnwaarde,deelfactor, epsO,x,y,n,c,RSS,R,2,SchermIO,lIaxstap,Maxrij,stOP,OPtie); • END Krups5wift;
PROCEDURE
Hollomon(x,y:ARRAVOF
REAl;Maxrij:CARDlNAL;VAR n,c,R,RSS,sigj) :REALj SchermIO,lIaxstap:CARDlNAL; wearde,stap,begin,st8Pdeel:REALj VAR stOP:CARDlNAL;
OPtie:CHAR}i
(*dwz als ScherIIO=O dan geen pijltjesgedoe OP het scherm, weI als SchermIO:1*) -("waar<!e=verschil YOorSP8lVling, stap=eerste stappen, begin=beginwaarde voorsp • st8Pdeel=wearde waardoor stap IIOet worden gedeeW)
VAR beginwaarde,deelfactor,dummyvar:REALj i:CARDlNAL;
yn:ARRAV[O .. l00]
OF
REAl;BEGIN
IF ScherIIO=l THEN
IF (OPtie=' 1') OR (OPtie=' 2') THEN
TekstXY(5O,2O, ,
H'
,White);TeI<stXY(1,2O, 'Correlation coefficient: ',White); ELSE T el<stXY (50,20, e4, lIli te) ;
TeI<stXY(l,2O, 'Residual SUI squared : ',White); END (* if
xl
jIF (optie='l') OR (optie='3'1 THEN
TekstXV(1,21,'Searching for the best fitting strain hardening exponent' ,White); TekstXV(1,22, '0
END (* i1 *l;
END
It
if II;IF (OPtie='l') OR (optie='3') THEN deelfactor:=2.0;
beginwaarde:=O.Oj
BerekenlOOP(begin, stap, wearde, st8Pdeel, beginwaarde, deel factor, n, X, Y ,sigj),c,R$S,R, 1,SchermIO,lIaxstap,Maxrij,stOP,OPtie) j
500' ,White) j
3' ,White);