• No results found

Milj¨ on i ComsolScript

2.5.1 St¨ada upp kommandof¨onstret: tyst input, forts¨attningsrader

N¨ar man b¨orjar komma ig˚ang litet med att anv¨anda ComsolScript tycker man ofta att kom-mandof¨onstret blir litet ostrukturerat, alla kommandon man ger upprepas slaviskt, vissa v¨arden ges utan decimaler, andra med en l˚ang rad nollor p˚a slutet. Det finns ett antal kommandon som hj¨alper en att skr¨addarsy vad vi ser i kommandof¨onstret.

F¨or att st¨anga av ekot, det vill s¨aga f¨or att f˚a ComsolScript att avst˚a fr˚an att rapportera resultatet av varje kommando vi skriver in r¨acker det med att avsluta raden med semikolon.

Egentligen ¨ar det inte raden, utan kommandot som avslutas med semikolon. Distinktionen ¨ar viktig, eftersom anv¨andandet av semikolon g¨or det m¨ojligt att skriva mer ¨an ett kommando p˚a varje rad. Denna finess b¨or anv¨andas med omd¨ome, driver man det f¨or l˚angt kan det bli n¨astan om¨ojligt att se vad man gjort, men r¨att anv¨ant kan det ist¨allet g¨ora det l¨attare att f¨olja med:

C  laskeblask = 10; korv = 12; kaffe = 4;

C  Kalle = 2*korv + 4*kaffe Kalle =

40

ser mycket b¨attre ut ¨an f¨orra g˚angen vi r¨aknade ut Kalles utgifter.

Man b¨or f¨ors¨oka undvika alltf¨or l˚anga kommandon, men ibland kan man beh¨ova skriva kommandon som inte f˚ar plats p˚a en rad, som till exempel:

Y = ((3.5*(laskeblask+korv)-kaffe)+sin(pi-2.75*Kalle)/korv∧2 +(45-kaffe)∧3 Om vi beh¨over dela upp ett kommando p˚a fler rader kan vi g¨ora det: F¨or att tala om f¨or ComsolScript att kommandot inte ¨ar slut n¨ar raden ¨ar slut, vilket ¨ar vad ComsolScript normalt antar, s˚a m˚aste den rad som har en forts¨attning avslutas med tre punkter omedelbart f¨oljda av return:

C  Y = ((3.5*(laskeblask+korv)-kaffe)+...

sin(pi-2.75*Kalle)/korv∧2+(45-kaffe)∧ 3))

¨

ar allts˚a ett kommando ¨aven om det str¨acker sig ¨over mer ¨an en rad. F¨or att denna finess skall fungera m˚aste man se till att det som st˚ar f¨ore “. . . ” inte ¨ar ett korrekt, avslutat kommando:

C  Y = 8+...

3

fungerar, medan C  Y = 8...

+ 3 inte fungerar.

2.5.2 Format och avrundning

I exemplen vi sett s˚a h¨ar l˚angt har ComsolScript genomg˚aende skrivit ut heltal utan decimaler och decimaltal med fyra decimaler. Det senare g¨aller s˚av¨al i de fall d¨ar vi har definierat en variabel genom att skriva in bara en decimal som t ex 0.5, som i de fall d˚a ComsolScript visar ett tal med o¨andligt l˚ang decimalutveckling som pi eller 1/3. N¨ar vi kommer till mycket stora eller mycket sm˚a tal sl˚ar ComsolScript om till att anv¨anda ”scientific notation”, d¨ar tal representeras som ett decimaltal multiplicerat med en l¨amplig tiopotens. I denna notation skrivs till exempel 1.602·10−19 som 1.602e-19.

Hur ComsolScript skall formattera de tal som visas kan p˚averkas genom kommandot format.

F¨or att se vilka alternativ som finns kan vi g˚a till help f¨onstret och s¨oka p˚a

2.5. MILJ ¨ON I COMSOLSCRIPT 15

?/COMSOL Script Basics/Using COMSOL Script/Numbers and Arithmetics /Output Formats

Eller enklare genom att bara skriva C  help format

L¨agg s¨arskilt m¨arke till kommandot format compact som tar bort alla dessa blanka rader som ComsolScript spottar ur sig. I forts¨attningen kommer vi att anv¨anda detta format i det h¨ar kompendiet.

2.5.3 ComsolScripts “Workspace”

Vi har nu sett hur variabler som vi definierar, till exempel laskeblask i avsnitt 2.4.3, ”lever kvar”. L˚angt efter det att vi definierat dem kan vi anv¨anda dem i nya uttryck, och vi kan se vilka v¨arden de har genom att skriva deras namn i kommandof¨onstret. Det st¨alle d¨ar dessa variabler lever ¨ar en del av datorminnet som ComsolScript reserverar f¨or variabler och som kallas ”workspace”. Under l˚anga ComsolScript-sessioner kan ComsolScripts workspace bli ganska t¨atbefolkad, man kan l¨att samla p˚a sig en stor m¨angd variabler. Som vi snart kommer att se kan ett variabelnamn beteckna inte bara tal, utan vektorer och matriser med hundratals element.

Ett s¨att att se vad som finns i workspace ¨ar att i kommandof¨onstret ge kommandot whos.

Ett annat s¨att att se vad som finns i ComsolScripts workspace ¨ar att i nedre delen av Desktop klicka p˚a fliken “Work Space”. Du f˚ar d˚a upp samma information, plus v¨ardet f¨or de variabler som ¨ar skal¨arer.

Vi f¨orst˚ar nu vad kommandot clear g¨or: genom att skriva clear Kalle tar vi bort vari-abeln Kalle fr˚an ComsolScripts workspace, vilket g¨or att ComsolScript helt “gl¨ommer bort”

att Kalle existerat. Du kan prova detta genom att skriva clear xxx i kommandof¨onstret f¨or n˚agon av de variabler som syns i workspace-f¨onstret och se vad som h¨ander.

2.5.4 ”Play it again Sam”- att upprepa kommandon

I ”Kalle Ankas Julafton” finns en film som visar en husvagnstur med Kalle Anka, Musse Pigg och L˚angben. I en av scenerna sitter L˚angben och ¨ater en majskolv. N¨ar han g¨or det f¨or han munnen ¨over majskolven, varvid det h¨ors ett konstigt knattrande ljud. N¨ar han kommit till slutet av majskolven h¨ors ett pling, varvid han flyttar huvudet till andra sidan av majskolven och proceduren b¨orjar om. N¨ar mina barn ser det h¨ar skrattar dom, men dom har ingen aning om vad det hela anspelar p˚a: f¨orr i tiden fanns det skrivmaskiner!

N¨ar f¨orfattaren var ung var skrivmaskiner n˚anting ganska h¨aftigt. Med ganska mycket m¨oda kunde man f˚a ett brev eller ett dokument att se j¨atteproffsigt ut. Kruxet var bara att skrivmaskiner var fullkomligt skoningsl¨osa - skrev man fel var det bara att riva ut pappret och b¨orja om (p˚a hemma-niv˚a kunde man f¨orst˚as backa och kryssa ¨over med ett antal ”XXXX”, men det f¨ortog ganska mycket av effekten). Det fanns speciella suddgummin f¨or skrivmaskier, stenh˚arda skivor som antingen rev s¨onder pappret i sm˚abitar eller smetade ut skriften ¨over hela pappret. S˚a sm˚aningom kom ”TipEx”, en vit f¨arg man kunde m˚ala ¨over sina misstag med, och sedan skriva ny text ovanp˚a. Det blev med ens m¨ojligt att hyfsa till dokument om man gjorde n˚agot enstaka fel, men riktigt proffssnyggt blev det inte, och man kunde inte heller ¨andra hela stycken mitt i ett f¨ardigt dokument.

De av oss som har upplevt denna period kan till fullo uppskatta vad ankomsten av sm˚a billiga datorer betytt f¨or ordbehandlingen: ¨andringar blir triviala, felstavningar korrigeras enkelt (ibland till och med automatiskt), man kan ˚ateranv¨anda gamla dokument, byta ut stycken helt godtyckligt - aldrig tidigare har s˚a mycket text kunnat produceras med s˚a liten m¨oda!

Det vore naturligtvis sk¨ont att kunna f˚a en ”r¨aknebehandlare” som har alla dessa f¨oretr¨aden.

Har man v¨al skrivit in

Y = ((3.5*(a+b)-c)+sin(phi-2.75*D)/epsil∧2+(455-abba∧3)/ (cos(4+pi)-2.75) bara f¨or att komma p˚a att det borde ha varit

Y = ((3.5*(a+b)-c)+sin(phi-2.75*B)/epsil∧2+(455-abba∧3)/ (cos(4+pi)-2.75) s˚a kan man bli litet tr¨ott, och ¨onska sig att ComsolScript bar sig ˚at som en ordbehandlare.

Om man sedan kommer tillbaks en vecka senare f¨or att r¨akna om n˚agot p˚a en lab-rapport man f˚att ˚ater p˚a s˚a ¨onskar man verkligen att man kunde trolla tillbaks vad man gjorde f¨orra veckan. ComsolScript, och andra moderna ber¨akningsprogram, svarar upp till dessa f¨orv¨antningar. Dels kan man kan ˚aterkalla sina tidigare kommandon och redigera dessa i kommandof¨onstret innan man exekverar dem igen. Dessutom kan man spara hela sekvenser av kommandon i s˚a kallade ”M-filer” som man sedan kan ˚aterkalla, eventuellt redigera, och k¨ora igen.

2.5.5 Att ˚aterkalla kommandon

Det enklaste s¨attet att f˚a chansen att g¨ora om n˚agot vi gjort nyligen ¨ar att trycka p˚a upp-pilen p˚a tangentbordet. N¨ar vi g¨or det visas det senast utf¨orda kommandot i kommandof¨onstret.

Trycker vi p˚a pilen en g˚ang till kommer kommandot innan dess och s˚a vidare. N¨ar vi knappat oss fram till det kommando vi vill g¨ora om s˚a ¨ar det bara att trycka p˚a return s˚a utf¨ors kommandot en g˚ang till. Oftast s˚a ˚aterkallar man ju ett kommando f¨or att man gjort n˚agot sm¨arre fel som man vill korrigera, vilket ¨ar l¨att gjort. N¨ar man bl¨addrat fram det kommando man vill g¨ora om kan man flytta sig in i raden genom att trycka p˚a v¨anster-pil. N¨ar man g¨or det r¨or sig pekaren in ¨over raden, n¨ar den st˚ar till h¨oger om det man vill ¨andra kan man radera ut delar av kommandot genom att trycka p˚a delete-knappen. N¨ar man suddat det som ¨ar fel ¨ar det bara att skriva in vad som skall st˚a i st¨allet. N¨ar man ¨ar n¨ojd ¨ar det sedan bara att trycka p˚a return. Oavsett om pekaren st˚ar mitt i raden s˚a kommer ComsolScript att utf¨ora kommandot som st˚ar p˚a hela raden.

Man kan ocks˚a ta sig in i raden genom att bara flytta pekaren till n˚agot st¨alle i raden genom att klicka. Prova genom att t ex skriva

C  y = sin (2 * pi)

och sedan ˚aterkalla kommandot och till exempel ¨andra 2 till 3 eller sin till cos.

2.5.6 Var s¨oker ComsolScript efter filer

ComsolScript har ett antal kommandon som inneb¨ar att programmet skall ladda in inneh˚allet i en fil till workspace. Man kan till exempel genom att skriva load filnamn l¨asa in hela inneh˚allet i filen med namn filnamn in i ComsolScripts workspace, man kan ocks˚a genom att bara skriva filnamn instruera ComsolScript att l¨asa in och utf¨ora de kommandon som finns sparade i filen filnamn.m . F¨or att detta skall fungera kr¨avs givetvis att ComsolScript hittar filen i fr˚aga. Det fungerar om den fil vi anger ligger i den aktuella katalogen, men dessutom har ComsolScript en lista med kataloger d¨ar den s¨oker efter de filer vi anger i v˚ara kommandon. En s˚adan lista kallas s¨okv¨ag (eng. search path). N¨ar vi skriver in ett filnamn s˚a kommer ComsolScript att f¨orst leta efter filen i den aktuella katalogen, d¨arefter s¨oks filen i alla kataloger som finns med i s¨okv¨agen, i den ordning som katalogerna st˚ar i s¨okv¨agen. Det kan allts˚a vara viktigt i vilken ordning katalogerna ¨ar listade i s¨okv¨agen, om det finns flera filer med samma namn. F¨or att arbeta med s¨okv¨agen anv¨ander vi kommandot path. Om vi bara ger kommandot path listas vilka kataloger som f¨or n¨arvarande ing˚ar i s¨okv¨agen.

Skriver vi ett filnamn kommer ComsolScript att s¨oka efter filnamn.m i de kataloger som listas i s¨okv¨agen i den ordning de listas d¨ar. Vi kan f¨or¨andra listan ¨over s¨okv¨agar p˚a tv˚a s¨att, antingen genom att ge kommandot path(STR¨ANG1), d¨ar STR ¨ANG1 ¨ar en textstr¨ang som anger ett antal kataloger, separerade med antingen “;” (i Windows), eller “:” (i alla andra operativsystem). Vi kan ocks˚a ge kommandot path(STR¨ANG1, STR¨ANG2) vilket resulterar i

2.6. M-FILER 17