cialis viagra online

Python Finite Elements

Många vetenskapliga och tekniska problem kan reduceras till form av partiella differentialekvationer (PDE), bland vilka elliptiska ekvationer spelar en viktig roll. Problem som kan beskrivas av elliptiska PDE inkluderar distributionen av elektrisk potential i en dielektrisk, viagra receptfritt utbredningen av stationära vågor, det inkompressibla flödet runt en vinge, vibrationer i ett membran och problemet med värmeledning, för att bara nämna några.

Ursprungligen designade jag ELLIPT2D så att användarna kunde utnyttja ett skriptgränssnitt genom att specificera geometri och PDE-koefficienter i flygningen. Detta gav flexibilitet som inte kan matchas i kompilerade miljöer. Självklart är den här ideen inte ny. https://www.viagrapris.nu Tyvärr är det svårt att designa ett program som tar hänsyn till alla potentiella behov. I synnerhet stötte jag på fall där PDE-koefficienterna ledde till singulariteter som, för att kunna behandlas på rätt sätt, krävde användare att modifiera ELLIPT2Ds internals. I ett problem som involverar fotonik var till exempel gränsvillkorna sådana att värdet vid en nod var lika med värdet vid ett annat nodtider en fasskiftning. Sådana gränsvillkor kan inte appliceras i en generell geometri, utan är helt rimliga i den ansedda geometrin. cialis viagra online Men igen, problemet kunde bara lösas efter att ha fått tillgång till källan och känna till internatorn för ELLIPT2D.

För att göra ELLIPT2D användarvänlig, kraftfull och transparent för användaren insåg jag att det skulle skrivas i ett skriptspråk som Python.

De ovan nämnda fysik- och teknikproblemen kan gjutas i den generella linjära andra ordningens PDE-form som i figur 1, där F, g och s är användardefinierade funktioner hos rymdkoordinaterna och v lösningen som skall bestämmas. I det följande antar vi att problemet, på grund av symmetri, kan reduceras till två dimensioner så att dessa funktioner endast beror på koordinaterna x och y. För att erhålla en unik lösning måste gränsvillkor tillämpas på gränsen för domänen (), som i figur 2, där och även användarföreskrivna funktioner. F i Figur 1 är en tensor, viagrapris så att F är vektorn [Fxx / x + Fxy / y, Fyx / x + Fyy / y]. Vanligt förekommande elliptiska PDE kan härledas från Figur 1 med lämpliga val av F (x, y), g (x, y) och s (x, y). Till exempel kan 2v + k2v = 0 (Helmholtz ekvationen som beskriver propagation av stationära vågor) erhållas genom att helt enkelt ställa in F = I (identitetsmatrisen), g = k2 och s = 0. På samma sätt kan samma ekvation skrivas i cylindrisk geometri som F = xI, g = k2x efter att ha tolkat x som den radiella koordinaten.

Med tanke på ett problem som Figur 1 med gränsvillkorna i Figur 2, innefattar FE-metoden följande steg:

Mesh generation. http://www.viagrapris.nu Domänen diskretiseras i små celler. I fallet med ELLIPT2D är dessa trianglar med varje cell avgränsad av tre noder (vertices) moturs se till exempel det triangulerade nätet i figur 3.

Lösningen v (x) = Vjej (x, y) expanderas i en lämplig uppsättning basfunktioner ej (x, y) eller ändliga element, så kallade eftersom de har ändligt stöd. I ELLIPT2D använder jag ändliga element som är linjära polynomier av x och y i varje cell. Med ändligt stöd menar jag att amplituden för ett givet element är noll på alla noder utom ett, där det är enighet. Detta säkerställer att amplituden Vj sammanfaller med det numeriska värdet på v (x, y) på nod j. Figur 3 är ett sådant tältelement.

Ekvationen i Figur 1 multipliceras med alla grundfunktioner ei (x, y) i sin tur och integrerad över. Integrering av delar ger sedan en diskretiserad form av figur 1 nämligen systemet med linjära ekvationer i figur 4, där figur 5 ger styvhetsmatrisen Aij. På grund av det ändliga stödet till grundfunktionerna är Aij glesa och effektiva metoder för att lösa det linjära systemet. Den högra sidan vektor bi innehåller källan och en term som representerar bidraget från gränsvillkoren. Detta steg kallas ‘matrisenheten’. I ELLIPT2D antas F (x, y), g (x, y) och s (x, y) variera linjärt mellan noder som leder till integralerna i Figur 5, vilka endast beror på nodvärdena för dessa funktioner.

Viagra Receptfritt
Viagra Receptfritt

Slutligen löses systemet i figur 4 för de okända amplitudema Vj. Detta är överlägset det mest krävande numeriska steget.

Beviljas, Python är inte det första programmeringsspråket som kommer att tänka på för mycket antal krossningar: Matlab, Scilab och Interactive Data Language erbjuder utmärkta gränssnitt till glesa matrislösare. Men jag valde Python eftersom många datastrukturer som används i FE-metoden inte passar in i en matrisgjutning, https://en.wikipedia.org/wiki/Tadalafil kärndatatypen för dessa språk. Python är dessutom objektorienterad, har en särskilt ren syntax för kapslade listor och undantagshantering och gör det möjligt för operatören att bli överbelastad.

ELLIPT2D använder stor användning av tre typer av objekt: nod, cell och gles. Nodeobjektet är centralt för FE-metoden eftersom det innehåller information om hur noder är anslutna, det vill säga hur ändamålsenliga element kopplar ihop i styvmatrisen. Detta fångas i Python med en datortyp för ordbok vars syntax är {key: value ,.}. Ordböcker, även kända som ‘hash-tabeller’ eller ‘associativa arrayer’, är kraftfulla objekt som gör att värden kan nås av nycklar. De kan betraktas som generaliserade arrayer, där värden indexeras inte med heltal, utan av andra objekt. (En skillnad är att ordlistornas layout i minnet är orörd.) I Python är faktiskt syntaxen för att komma åt ett lista och ordlighetsvärde samma och baserat på operatören []. För att bestämma nodanslutningen ska en ordlista { i1: [(x, y), [ia, ib, ic,.], a1],} används innehållande i1 som nodindexet, (x, y) en tupel med nodkoordinater, [ia, ib, ic ,.] en lista över nodindex som är kopplade till i1 och a1 ett tilläggsattribut som är inställt på 1 om i1 är en gränsnode. Ordlervärdena kan vara nästan vad som helst (i detta fall en kapslad lista) medan tangenterna endast kan vara oföränderliga objekt (en nyckel kan inte ändras). Detta illustrerar användningen av en ordlista som ersättning för en C-struktur med den stora fördelen att ordlistan kan växa dynamiskt (både element och antal element) utan särskild minneshantering Ansvaret bifogas. Den här egenskapen är särskilt användbar vid ostrukturerade maskor där antalet anslutna noder inte är kända a priori.

Också av betydelse i ELLIPT2D är cellobjektet, en kapslad lista [k, [i1, i2, i3] ,.], där k är cellindexet och [i1, i2, i3] är de tre noderna beställda moturs. Cellobjektet används under monteringstiden. Du kan se från figur 5 hur stiffhetsmatrisintegralet bryter naturligt i summan av alla cellbidrag.

Hittills har jag inte nämnt hur gränsvillkoren tas hand om. FE-metoden skiljer mellan naturliga och väsentliga gränsvillkor. De blandade (Robbins) gränsvillkorna i figur 2 är naturliga och behandlas genom att ersätta nv i källterminen bi i figur 5 med v och flytta termen som involverar v till styvhetsmatrisen. Däremot, Dirichlet gränsvillkor där värdet av v påläggs behöver särskild behandling. Imponering av värdet för nod I uppnås i ELLIPT2D genom att ställa Aij = 0 förutom Aii = 1, medan bi tar det föreskrivna värdet. ELLIPT2D har ett DirichletBound ordlighetsobjekt som tar nodindexet som nyckel. RobbinsBound och NeumannBound (liknande RobbinsBound, men för = 0) tar tupeln (i, j) som nycklar eftersom de fungerar på segment, men åberopas annars på samma sätt som DirichletBound efter matrisenhetens steg.

Slutligen representeras den glesa styvhetsmatrisen i ELLIPT2D av objektets glesa, en ordlista {(i, j): aij ,.} med raden / kolumnindikatorerna (i, j) respektive aij som nyckel / värdepar. Endast non-element måste lagras. Pythons objektorienterade funktioner gör att vanliga matrisoperationer (+, osv.) Överbelastas. För att invertera matrissystemet har en konjugerad gradientmetod med överbelastad matrisoperation skrivits i 30 linjer Python-kod.

Viagra Pris
Viagra Pris

För att illustrera hur ELLIPT2D fungerar, presenterar jag en applikation som löser Laplace-ekvationen i ett rektangulärt nät (Figur 6) med nx1 noder i x-riktningen och ny1-noderna i y-riktningen, se Listning One (a). Nodeobjektet rutnätet är konstruerat genom att ringa en av många tillgängliga metoder som bryter en rektangulär domän i en vanlig uppsättning trianglar. För mer generellt strukturerade maskor kan galler konstrueras från en uppsättning interleaving (x, y) koordinater, se Listning One (b) .

Därefter måste gränsvillkor tillämpas. Dessa är en sinusvåg på västkanten, och noll Dirichlet-förhållanden i söder och norra kanter. På östra kanten ställs nollflödes Neumann gränsvillkor (och ställs till noll i figur 2). Eftersom nollflödesförhållandena är standardgränsvillkoren för FE-metoden är det inte nödvändigt att skapa ett NeumannBound-objekt för den västra kanten. se Listning One (c).

Objektet ellipt2d kan nu byggas; se Listing One (d), och styvhetsmatrisen beräknas, som i Listing One (e). Funktionerna F, G och S, vilka överförs som argument till ellipt2d-konstruktorn, är strängar. Dessa kan vara några uttryck av x och y. För att undvika singularitet, se till att F förblir positiv bestämd och att alla funktioner är ändliga på noderna. För problem där dessa funktioner inte kan uttryckas i sluten form, erbjuder ELLIPT2D dessutom möjligheten att mata F, g eller s som nodvektorer istället för strängar. Observera också att en skalarform av F matades in i ellipt2d som är ‘1.’ är formellt ekvivalent med identitetsmatrisen ((‘1’, ‘0’), (‘0’, ‘1’.)).

Styvmåttmatrisen och höger sidavektorn uppdateras genom ett samtal, Listing One (f), och i det sista steget löses figur 4 genom att åberopa konjugatgradient (CG) -metoden; Listning One (g). CG-metoden är iterativ i naturen och kräver en första gissning v0. Nästa argument efter höger sida vektor b anger maximal tolerans och maximalt antal iterationer. Metoder för att spara resultaten i olika format toUCD för AVSExpress, toDX för openDX; se Listning One (h) är tillgängliga för grafisk efterbehandling.

Som en andra testapplikation, överväga problemet med att bestämma resonansfrekvenserna hos en struktur bestående av en oändlig uppsättning ledande ledningar anordnade på ett regelbundet, periodiskt sätt. På grund av periodiciteten är det möjligt att fokusera på en cell, som visas i Figur 7. I en sådan cell kan det visas att problemet minskar till beräkning i figur 8, där dm och dn är inmatningsparametrar. http://www.viagrapris.nu Observera gränsvillkorna, vilka är sådana att amplituderna på den norra kanten är lika, upp till en komplex fasfaktor (jag är det imaginära numret), till de på sydkanten, och likaså för öst- och västförstärkningarna. Här är du mest intresserad av den lägsta egenvärdet.

Komplikationer uppstår i flera avseenden. Först måste en cirkulär konkavitet som representerar trådens sektion vara utskuren. Mer viktigt för att bygga egenvärdesproblemet måste styvhetsmatrisen delas upp i två matriser (kallad ‘amat’ och ‘bmat’ i kod tillgänglig elektroniskt, se ‘ Resurscenter ‘, sidan 5.) Gränsvillkor tillämpas genom att man manuellt ändrar elementen som kopplar till en gränsnod. viagrapris För de fasförskjutna förhållandena görs detta genom att lägga till norra och södra och östra och västra element. hörnelement, bidragen måste läggas från alla andra hörn. Slutligen beräknas egenvärdet med hjälp av ett inverterat iterationsschema.

Naturligtvis är prestanda en nackdel med skriptspråk. Men för problem som involverar upp till flera tusen noder var det inte ett problem. Laplace-problemet (även tillgängligt elektroniskt) körs i 1,5 CPU-sekunder för 100 noder i ren Python-läge, medan det komplicerade egenvärdesproblemet (800 noder) tar mindre än 30 CPU-sekunder på en 600 MHz Pentium III-bärare. Om CPU-tiden bryts upp mellan moduler är konjugatgradientlösaren den dyraste delen överlägset, cialis viagra online med matrisenheten kräver mindre än 10 procent av CPU-tiden. Jag rekommenderar användningen av C-gränssnittet till SuperLU-biblioteket. En global hastighetsfaktor på 10 kan då förväntas. Både matrisenheten och SuperLU CPUs tidskrav är proportionellt proportionerliga till N1.7, där N är antalet noder. Ett typiskt ELLIPT2D-problem involverar upp till några tusen noder. Följaktligen kan ELLIPT2D inte för närvarande utvidgas till tredimensionell geometri där problem rutinmässigt har hundratusentals noder, även om programmeringsparadigmet som appliceras här skulle låna sig för sådana förlängningar.

Allt är inte perfekt även i bästa av alla världar. Det var lite besvikelse att observera att de senaste versionerna av Python körs långsammare: Python 2.0 är ungefär 15 procent långsammare än Version 1.6, vilket är långsammare än 1,5,2 med några få procent. viagra receptfritt Från en programmerarens synvinkel hade jag föredragit att komplexa och reella (flytande) tal behandlas på samma sätt. Det kan helt enkelt vara ett resultat av att komplexa tal läggs till ganska nyligen på språket. Faktum är att Python s största styrkan är att så många intressanta funktioner (objektorientering, undantagshantering, namnrymd) byggdes på språket från grunden.

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *