Skip to content
Snippets Groups Projects
Topology Optimization 3D.ipynb 972 KiB
Newer Older
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "┌ Info: Precompiling VectorizedRoutines [0e69188a-a5d4-5622-b4e4-a72373136fc5]\n",
      "└ @ Base loading.jl:1242\n"
     ]
    }
   ],
   "source": [
    "using LinearAlgebra\n",
    "using Plots\n",
    "import JSON\n",
    "using SparseArrays\n",
    "using Images\n",
    "using StaticArrays, BenchmarkTools\n",
    "using VectorizedRoutines"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# based on https://paulino.ce.gatech.edu/conferences/papers/11pereira_anefficientandcompact.pdf and http://www.topopt.mek.dtu.dk/apps-and-software and https://github.com/blademwang11/Topopt/blob/master/top.jl"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Minimum compliance problem with OC\n",
      "ndes: 180 x 60\n",
      "volfrac: 0.4 rmin: 5.4 penal: 3.0\n",
      " It:1 Obj:2027.5045897869754 Vol:0.40009542277892857 ch:0.20000000000000007 \n",
      " It:2 Obj:1114.7016909445497 Vol:0.39999020279385833 ch:0.20000000000000007 \n",
      " It:3 Obj:753.4184494393503 Vol:0.3999502677408073 ch:0.20000000000000007 \n",
      " It:4 Obj:589.4415635399109 Vol:0.3999064413649337 ch:0.20000000000000007 \n",
      " It:5 Obj:523.5760184027803 Vol:0.39979707078545607 ch:0.20000000000000007 \n",
      " It:6 Obj:488.20184734540385 Vol:0.40009815713720864 ch:0.20000000000000007 \n",
      " It:7 Obj:461.50052379589266 Vol:0.39996756594927774 ch:0.18770060047517856 \n",
      " It:8 Obj:436.72776763237124 Vol:0.39997068078062337 ch:0.20000000000000007 \n",
      " It:9 Obj:410.4692046583736 Vol:0.3999688727716305 ch:0.18787745329341016 \n",
      " It:10 Obj:384.72649110474407 Vol:0.39986313163500126 ch:0.20000000000000007 \n",
      " It:11 Obj:357.16627586508287 Vol:0.3999089619253164 ch:0.20000000000000007 \n",
      " It:12 Obj:330.7267430567433 Vol:0.3999587977615742 ch:0.20000000000000007 \n",
      " It:13 Obj:306.3854736897865 Vol:0.4000005457148307 ch:0.20000000000000007 \n",
      " It:14 Obj:288.2315743878585 Vol:0.3999937032654836 ch:0.20000000000000007 \n",
      " It:15 Obj:274.1857794613026 Vol:0.4000924533597078 ch:0.20000000000000007 \n",
      " It:16 Obj:264.94569800587306 Vol:0.39991093897094926 ch:0.20000000000000007 \n",
      " It:17 Obj:258.778788272396 Vol:0.40001652314033975 ch:0.20000000000000007 \n",
      " It:18 Obj:253.94126738777538 Vol:0.4000506838849397 ch:0.20000000000000007 \n",
      " It:19 Obj:250.66709616220618 Vol:0.39995490846201837 ch:0.20000000000000007 \n",
      " It:20 Obj:248.25606527431827 Vol:0.3999689511352107 ch:0.20000000000000007 \n",
      " It:21 Obj:245.94860165486534 Vol:0.3999625987049225 ch:0.20000000000000007 \n",
      " It:22 Obj:243.74888320454812 Vol:0.40001523279698936 ch:0.20000000000000007 \n",
      " It:23 Obj:241.74248423356713 Vol:0.3999991521014942 ch:0.20000000000000007 \n",
      " It:24 Obj:240.15060386653911 Vol:0.39998006686729326 ch:0.19999999999999996 \n",
      " It:25 Obj:238.9851828092882 Vol:0.3999868095951767 ch:0.20000000000000007 \n",
      " It:26 Obj:238.2883622637742 Vol:0.3999890832908555 ch:0.20000000000000007 \n",
      " It:27 Obj:237.70769589450794 Vol:0.39999265369511483 ch:0.20000000000000007 \n",
      " It:28 Obj:237.2033385405354 Vol:0.3999873297303694 ch:0.20000000000000007 \n",
      " It:29 Obj:236.7785782018123 Vol:0.4000004750882039 ch:0.20000000000000007 \n",
      " It:30 Obj:236.38528197169884 Vol:0.40000930032038495 ch:0.20000000000000007 \n",
      " It:31 Obj:236.01340184664818 Vol:0.39999547693055404 ch:0.20000000000000007 \n",
      " It:32 Obj:235.68010033105958 Vol:0.3999863076827155 ch:0.20000000000000007 \n",
      " It:33 Obj:235.34882677219787 Vol:0.399983492944396 ch:0.20000000000000007 \n",
      " It:34 Obj:235.00188861867923 Vol:0.3999783526503072 ch:0.20000000000000007 \n",
      " It:35 Obj:234.58246976540124 Vol:0.40001220457009634 ch:0.20000000000000007 \n",
      " It:36 Obj:234.05200277972634 Vol:0.40000949855543694 ch:0.19999999999999996 \n",
      " It:37 Obj:233.55899380756705 Vol:0.4000110177511946 ch:0.18617336635466353 \n",
      " It:38 Obj:233.27010786399626 Vol:0.4000069938539628 ch:0.17978142653742213 \n",
      " It:39 Obj:233.11518441068577 Vol:0.4000063017627396 ch:0.20000000000000007 \n",
      " It:40 Obj:232.97338235727568 Vol:0.40000306597933594 ch:0.20000000000000007 \n",
      " It:41 Obj:232.84740529927114 Vol:0.40000893315187996 ch:0.19389816395843684 \n",
      " It:42 Obj:232.72590359510704 Vol:0.4000186686660424 ch:0.18505513698340847 \n",
      " It:43 Obj:232.61140255654325 Vol:0.400016677927953 ch:0.19999999999999996 \n",
      " It:44 Obj:232.4992077261653 Vol:0.4000186108562634 ch:0.20000000000000007 \n",
      " It:45 Obj:232.3858313790211 Vol:0.39997875918956705 ch:0.18327746197747163 \n",
      " It:46 Obj:232.30661116189532 Vol:0.40000973547322244 ch:0.19999999999999996 \n",
      " It:47 Obj:232.15853579148654 Vol:0.40001168068250686 ch:0.19999999999999996 \n",
      " It:48 Obj:232.053578645034 Vol:0.4000093199237478 ch:0.1905299525710673 \n",
      " It:49 Obj:231.9449504778675 Vol:0.4000029303868017 ch:0.20000000000000007 \n",
      " It:50 Obj:231.85252598763685 Vol:0.39999374282219546 ch:0.19999999999999996 \n",
      " It:51 Obj:231.7803279999307 Vol:0.4000061150743422 ch:0.20000000000000007 \n",
      " It:52 Obj:231.70429963617062 Vol:0.40000693539397547 ch:0.19999999999999996 \n",
      " It:53 Obj:231.64871048345847 Vol:0.39999783954100687 ch:0.19999999999999996 \n",
      " It:54 Obj:231.60544645904872 Vol:0.4000038082639503 ch:0.19999999999999996 \n",
      " It:55 Obj:231.5490138260903 Vol:0.4000031973739572 ch:0.20000000000000007 \n",
      " It:56 Obj:231.51023671347502 Vol:0.39999194653001385 ch:0.19999999999999996 \n",
      " It:57 Obj:231.4813083608297 Vol:0.39999922260188936 ch:0.19999999999999996 \n",
      " It:58 Obj:231.4378185297698 Vol:0.39998697695130736 ch:0.20000000000000007 \n",
      " It:59 Obj:231.42354630492807 Vol:0.40000608616923794 ch:0.20000000000000007 \n",
      " It:60 Obj:231.3741601994792 Vol:0.4000044769429046 ch:0.20000000000000007 \n",
      " It:61 Obj:231.35808804896516 Vol:0.4000047745231512 ch:0.19999999999999996 \n",
      " It:62 Obj:231.33046713293854 Vol:0.4000023069999686 ch:0.19999999999999996 \n",
      " It:63 Obj:231.31242226625997 Vol:0.40000604490383124 ch:0.20000000000000007 \n",
      " It:64 Obj:231.2859561188247 Vol:0.4000088288999765 ch:0.19999999999999996 \n",
      " It:65 Obj:231.26388971006176 Vol:0.3999902272723369 ch:0.20000000000000007 \n",
      " It:66 Obj:231.26360775967555 Vol:0.4000028436763249 ch:0.2 \n",
      " It:67 Obj:231.21052887334906 Vol:0.39998363387917835 ch:0.20000000000000007 \n",
      " It:68 Obj:231.16126282828367 Vol:0.3999966595140699 ch:0.20000000000000007 \n",
      " It:69 Obj:231.00955474316663 Vol:0.3999948093069101 ch:0.2 \n",
      " It:70 Obj:230.84962914564034 Vol:0.3999994675102865 ch:0.20000000000000007 \n",
      " It:71 Obj:230.72174862728477 Vol:0.4000070854760428 ch:0.10831384065901184 \n",
      " It:72 Obj:230.6652257431345 Vol:0.3999979551430493 ch:0.10467794427747956 \n",
      " It:73 Obj:230.65216672164127 Vol:0.4000137571485584 ch:0.11465852537583232 \n",
      " It:74 Obj:230.62407943059083 Vol:0.39998860392602525 ch:0.10727277810298819 \n",
      " It:75 Obj:230.64000357471792 Vol:0.3999999847837149 ch:0.09043574537315746 \n",
      " It:76 Obj:230.60332563808464 Vol:0.39999633016805797 ch:0.09966436564085313 \n",
      " It:77 Obj:230.6029927416497 Vol:0.40000815018720576 ch:0.10568588951008007 \n",
      " It:78 Obj:230.58424001449677 Vol:0.400012237813244 ch:0.0857765548662438 \n",
      " It:79 Obj:230.57582506098322 Vol:0.3999922812211131 ch:0.09163559738827798 \n",
      " It:80 Obj:230.59135657580924 Vol:0.40000796430569163 ch:0.10038008813144539 \n",
      " It:81 Obj:230.55945926383777 Vol:0.40000784951599655 ch:0.09343351317216542 \n",
      " It:82 Obj:230.5560907696892 Vol:0.4000125145408255 ch:0.1047787660774191 \n",
      " It:83 Obj:230.5416919096785 Vol:0.40000971837483695 ch:0.10241141085253858 \n",
      " It:84 Obj:230.5386959339299 Vol:0.4000013776524882 ch:0.1001918822636847 \n",
      " It:85 Obj:230.5379249281579 Vol:0.40000766033727647 ch:0.08117966609068494 \n",
      " It:86 Obj:230.52403122345746 Vol:0.4000118783484707 ch:0.09106458518806149 \n",
      " It:87 Obj:230.52192392948672 Vol:0.4000005918048181 ch:0.09968899731685321 \n",
      " It:88 Obj:230.53975249216543 Vol:0.4000012273360151 ch:0.10993967990187825 \n",
      " It:89 Obj:230.53879340153085 Vol:0.39999496378883914 ch:0.08373973218385711 \n",
      " It:90 Obj:230.54443930328696 Vol:0.3999959315381369 ch:0.09356921335699042 \n",
      " It:91 Obj:230.54567825614973 Vol:0.4000062213930901 ch:0.1040387746496565 \n",
      " It:92 Obj:230.54346314286468 Vol:0.3999921436372145 ch:0.11365156776338747 \n",
      " It:93 Obj:230.56712462359442 Vol:0.399999515576815 ch:0.10713271479092734 \n",
      " It:94 Obj:230.54644444174556 Vol:0.4000097301170341 ch:0.08436647674690345 \n",
      " It:95 Obj:230.52790300922828 Vol:0.39999166429831345 ch:0.08181782489274836 \n",
      " It:96 Obj:230.54581782342933 Vol:0.3999921044174427 ch:0.08772236436718661 \n",
      " It:97 Obj:230.53555644656538 Vol:0.39999879026960117 ch:0.09300957627295148 \n",
      " It:98 Obj:230.52939863197176 Vol:0.40000229020843686 ch:0.10287740536142964 \n",
      " It:99 Obj:230.52201967556425 Vol:0.40000942491006114 ch:0.11407316014985758 \n",
      " It:100 Obj:230.5143220195186 Vol:0.40001105549662835 ch:0.08851946352667905 \n",
      " It:101 Obj:230.5093273235246 Vol:0.39999182987697646 ch:0.0965405661451545 \n",
      " It:102 Obj:230.5298516523536 Vol:0.3999900863850748 ch:0.10720168704035149 \n",
      " It:103 Obj:230.52559198178662 Vol:0.4000084142015186 ch:0.10033559971908346 \n",
      " It:104 Obj:230.5016900582213 Vol:0.3999978597615209 ch:0.11006873909633441 \n",
      " It:105 Obj:230.52081745179677 Vol:0.4000010895851494 ch:0.08658069717768568 \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " It:106 Obj:230.51132470848992 Vol:0.39999947831401633 ch:0.09643395346865746 \n",
      " It:107 Obj:230.51171441015492 Vol:0.4000082830708686 ch:0.10680940157333807 \n",
      " It:108 Obj:230.50451233709833 Vol:0.399997570234539 ch:0.11598006529983185 \n",
      " It:109 Obj:230.52453728239152 Vol:0.399990521141379 ch:0.10908467195033222 \n",
      " It:110 Obj:230.5275773026536 Vol:0.39998979904982274 ch:0.10092390101429727 \n",
      " It:111 Obj:230.53013534123662 Vol:0.3999907263706001 ch:0.09067101524408527 \n",
      " It:112 Obj:230.52974587932454 Vol:0.3999989623616449 ch:0.10085857119458874 \n",
      " It:113 Obj:230.5271799269135 Vol:0.3999919348988265 ch:0.11008409476681824 \n",
      " It:114 Obj:230.54855229371913 Vol:0.3999920718452961 ch:0.10900180315672758 \n",
      " It:115 Obj:230.55158447390113 Vol:0.3999896485271591 ch:0.1095730412959961 \n",
      " It:116 Obj:230.55914068311336 Vol:0.40001112222536994 ch:0.07875514932727634 \n",
      " It:117 Obj:230.53553019985182 Vol:0.40000955223062806 ch:0.0885769151877358 \n",
      " It:118 Obj:230.55544485913543 Vol:0.39999964404393384 ch:0.0985676916848871 \n",
      " It:119 Obj:230.57259148031483 Vol:0.4000035664826363 ch:0.11024101864302271 \n",
      " It:120 Obj:230.5733632730787 Vol:0.39999038856788016 ch:0.10732711078162382 \n",
      " It:121 Obj:230.60011600076842 Vol:0.3999980124666443 ch:0.08403713944101132 \n",
      " It:122 Obj:230.5835697183139 Vol:0.40000594209746043 ch:0.09357551025154975 \n",
      " It:123 Obj:230.58776259800567 Vol:0.40000382992354094 ch:0.10280483032184629 \n",
      " It:124 Obj:230.60677028269117 Vol:0.39999532684948763 ch:0.11321479785698918 \n",
      " It:125 Obj:230.63272714212167 Vol:0.3999924424734859 ch:0.11350920836970979 \n",
      " It:126 Obj:230.6450324474306 Vol:0.40000784284550367 ch:0.09362909438067024 \n",
      " It:127 Obj:230.63331504634988 Vol:0.4000044307302197 ch:0.09963209641199655 \n",
      " It:128 Obj:230.66071323958326 Vol:0.4000016074862809 ch:0.09886603383294557 \n",
      " It:129 Obj:230.6685160231628 Vol:0.3999950345293098 ch:0.11096744623460353 \n",
      " It:130 Obj:230.68123232474105 Vol:0.3999974344036957 ch:0.12078380364341168 \n",
      " It:131 Obj:230.68621396923368 Vol:0.3999943759590862 ch:0.07720741591453695 \n",
      " It:132 Obj:230.6943644359299 Vol:0.39999627024259016 ch:0.08835928775399415 \n",
      " It:133 Obj:230.698405158678 Vol:0.4000052458324285 ch:0.10038579062527675 \n",
      " It:134 Obj:230.69990964389723 Vol:0.4000012819356083 ch:0.111405915776432 \n",
      " It:135 Obj:230.72469982234676 Vol:0.3999906951851086 ch:0.12225522850157589 \n",
      " It:136 Obj:230.7550242959922 Vol:0.40001057667239903 ch:0.07750808872834275 \n",
      " It:137 Obj:230.7279773227763 Vol:0.3999941896904671 ch:0.0878630227174585 \n",
      " It:138 Obj:230.76312080793247 Vol:0.39999535031719113 ch:0.10001036730349822 \n",
      " It:139 Obj:230.76494240298913 Vol:0.3999993916680073 ch:0.11290544596639485 \n",
      " It:140 Obj:230.7720606080953 Vol:0.39999007905922773 ch:0.1244583292340169 \n",
      " It:141 Obj:230.79901431668856 Vol:0.40000399750018417 ch:0.09087802016701774 \n",
      " It:142 Obj:230.78420435144045 Vol:0.39999175812322846 ch:0.10157194937365721 \n",
      " It:143 Obj:230.81703621414795 Vol:0.3999965930719082 ch:0.1148970660867098 \n",
      " It:144 Obj:230.82118071974617 Vol:0.4000060181131577 ch:0.12806886012738328 \n",
      " It:145 Obj:230.82961677532086 Vol:0.40000873685852334 ch:0.12546987578770585 \n",
      " It:146 Obj:230.84067198805784 Vol:0.4000037625339007 ch:0.0921554359585911 \n",
      " It:147 Obj:230.8514729181254 Vol:0.40000071686260763 ch:0.10354313587998498 \n",
Loading
Loading full blame...